d5ba54fe5e
Add multi-format support to SDK-TS report functions: - Add utility types: OpResponseBodyCsv, OpResponseBodyXlsx, OpResponseBodyPdf - Create modular report structure in src/reports/ directory - Implement 5 format functions for each of 18 reports: - Table format (existing): fetch*Table() - JSON format: fetch*Json() - CSV format: fetch*Csv() (returns Blob) - XLSX format: fetch*Xlsx() (returns Blob) - PDF format: fetch*Pdf() (returns Blob) Reports with multi-format support: 1. Balance Sheet 2. Trial Balance Sheet 3. Profit/Loss Sheet 4. Cashflow Statement 5. General Ledger 6. Journal 7. Receivable Aging Summary 8. Payable Aging Summary 9. Customer Balance Summary 10. Vendor Balance Summary 11. Transactions By Customers 12. Transactions By Vendors 13. Transactions By Reference 14. Sales By Items 15. Purchases By Items 16. Inventory Valuation 17. Inventory Item Details 18. Sales Tax Liability Summary Backward compatibility maintained via reports.ts re-export. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
import type { OpArgType } from 'openapi-typescript-fetch';
|
|
import type { ApiFetcher } from '../fetch-utils';
|
|
import type { paths } from '../schema';
|
|
import {
|
|
OpForPath,
|
|
OpQueryParams,
|
|
OpResponseBody,
|
|
OpResponseBodyTable,
|
|
} from '../utils';
|
|
|
|
export const TRANSACTIONS_VENDORS_ROUTE = '/api/reports/transactions-by-vendors' as const satisfies keyof paths;
|
|
|
|
type Op = OpForPath<typeof TRANSACTIONS_VENDORS_ROUTE, 'get'>;
|
|
type Arg = OpArgType<Op>;
|
|
|
|
// Table format (existing functionality)
|
|
export type TransactionsByVendorsTableQuery = OpQueryParams<Op>;
|
|
export type TransactionsByVendorsTableResponse = OpResponseBodyTable<Op>;
|
|
|
|
export async function fetchTransactionsByVendorsTable(
|
|
fetcher: ApiFetcher,
|
|
query: TransactionsByVendorsTableQuery
|
|
): Promise<TransactionsByVendorsTableResponse> {
|
|
const get = fetcher.path(TRANSACTIONS_VENDORS_ROUTE).method('get').create();
|
|
const { data } = await get(query as Arg);
|
|
return data as unknown as TransactionsByVendorsTableResponse;
|
|
}
|
|
|
|
// JSON format - Note: may only have table format in schema
|
|
// Using type assertion for JSON format compatibility
|
|
export type TransactionsByVendorsJsonQuery = OpQueryParams<Op>;
|
|
export type TransactionsByVendorsJsonResponse = OpResponseBody<Op>;
|
|
|
|
export async function fetchTransactionsByVendorsJson(
|
|
fetcher: ApiFetcher,
|
|
query: TransactionsByVendorsJsonQuery
|
|
): Promise<TransactionsByVendorsJsonResponse> {
|
|
const get = fetcher.path(TRANSACTIONS_VENDORS_ROUTE).method('get').create();
|
|
const { data } = await get(query as Arg);
|
|
return data as unknown as TransactionsByVendorsJsonResponse;
|
|
}
|
|
|
|
// CSV format (returns Blob)
|
|
export type TransactionsByVendorsCsvQuery = OpQueryParams<Op>;
|
|
export type TransactionsByVendorsCsvResponse = Blob;
|
|
|
|
export async function fetchTransactionsByVendorsCsv(
|
|
fetcher: ApiFetcher,
|
|
query: TransactionsByVendorsCsvQuery
|
|
): Promise<TransactionsByVendorsCsvResponse> {
|
|
const get = fetcher.path(TRANSACTIONS_VENDORS_ROUTE).method('get').create();
|
|
const response = await get({ ...query, Accept: 'application/csv' } as Arg);
|
|
return response.data as unknown as TransactionsByVendorsCsvResponse;
|
|
}
|
|
|
|
// XLSX format (returns Blob)
|
|
export type TransactionsByVendorsXlsxQuery = OpQueryParams<Op>;
|
|
export type TransactionsByVendorsXlsxResponse = Blob;
|
|
|
|
export async function fetchTransactionsByVendorsXlsx(
|
|
fetcher: ApiFetcher,
|
|
query: TransactionsByVendorsXlsxQuery
|
|
): Promise<TransactionsByVendorsXlsxResponse> {
|
|
const get = fetcher.path(TRANSACTIONS_VENDORS_ROUTE).method('get').create();
|
|
const response = await get({ ...query, Accept: 'application/xlsx' } as Arg);
|
|
return response.data as unknown as TransactionsByVendorsXlsxResponse;
|
|
}
|
|
|
|
// PDF format (returns Blob)
|
|
export type TransactionsByVendorsPdfQuery = OpQueryParams<Op>;
|
|
export type TransactionsByVendorsPdfResponse = Blob;
|
|
|
|
export async function fetchTransactionsByVendorsPdf(
|
|
fetcher: ApiFetcher,
|
|
query: TransactionsByVendorsPdfQuery
|
|
): Promise<TransactionsByVendorsPdfResponse> {
|
|
const get = fetcher.path(TRANSACTIONS_VENDORS_ROUTE).method('get').create();
|
|
const response = await get({ ...query, Accept: 'application/pdf' } as Arg);
|
|
return response.data as unknown as TransactionsByVendorsPdfResponse;
|
|
}
|