1
0
Files
bigcapital/shared/sdk-ts/src/reports/transactions-vendors.ts
T
Ahmed Bouhuolia d5ba54fe5e feat(sdk-ts): add JSON, CSV, XLSX, and PDF support to report functions
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>
2026-03-08 05:56:16 +02:00

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;
}