1
0
Files
bigcapital/shared/sdk-ts/src/reports/inventory-details.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 INVENTORY_DETAILS_ROUTE = '/api/reports/inventory-item-details' as const satisfies keyof paths;
type Op = OpForPath<typeof INVENTORY_DETAILS_ROUTE, 'get'>;
type Arg = OpArgType<Op>;
// Table format (existing functionality)
export type InventoryItemDetailsTableQuery = OpQueryParams<Op>;
export type InventoryItemDetailsTableResponse = OpResponseBodyTable<Op>;
export async function fetchInventoryItemDetailsTable(
fetcher: ApiFetcher,
query: InventoryItemDetailsTableQuery
): Promise<InventoryItemDetailsTableResponse> {
const get = fetcher.path(INVENTORY_DETAILS_ROUTE).method('get').create();
const { data } = await get(query as Arg);
return data as unknown as InventoryItemDetailsTableResponse;
}
// JSON format - Note: may only have table format in schema
// Using type assertion for JSON format compatibility
export type InventoryItemDetailsJsonQuery = OpQueryParams<Op>;
export type InventoryItemDetailsJsonResponse = OpResponseBody<Op>;
export async function fetchInventoryItemDetailsJson(
fetcher: ApiFetcher,
query: InventoryItemDetailsJsonQuery
): Promise<InventoryItemDetailsJsonResponse> {
const get = fetcher.path(INVENTORY_DETAILS_ROUTE).method('get').create();
const { data } = await get(query as Arg);
return data as unknown as InventoryItemDetailsJsonResponse;
}
// CSV format (returns Blob)
export type InventoryItemDetailsCsvQuery = OpQueryParams<Op>;
export type InventoryItemDetailsCsvResponse = Blob;
export async function fetchInventoryItemDetailsCsv(
fetcher: ApiFetcher,
query: InventoryItemDetailsCsvQuery
): Promise<InventoryItemDetailsCsvResponse> {
const get = fetcher.path(INVENTORY_DETAILS_ROUTE).method('get').create();
const response = await get({ ...query, Accept: 'application/csv' } as Arg);
return response.data as unknown as InventoryItemDetailsCsvResponse;
}
// XLSX format (returns Blob)
export type InventoryItemDetailsXlsxQuery = OpQueryParams<Op>;
export type InventoryItemDetailsXlsxResponse = Blob;
export async function fetchInventoryItemDetailsXlsx(
fetcher: ApiFetcher,
query: InventoryItemDetailsXlsxQuery
): Promise<InventoryItemDetailsXlsxResponse> {
const get = fetcher.path(INVENTORY_DETAILS_ROUTE).method('get').create();
const response = await get({ ...query, Accept: 'application/xlsx' } as Arg);
return response.data as unknown as InventoryItemDetailsXlsxResponse;
}
// PDF format (returns Blob)
export type InventoryItemDetailsPdfQuery = OpQueryParams<Op>;
export type InventoryItemDetailsPdfResponse = Blob;
export async function fetchInventoryItemDetailsPdf(
fetcher: ApiFetcher,
query: InventoryItemDetailsPdfQuery
): Promise<InventoryItemDetailsPdfResponse> {
const get = fetcher.path(INVENTORY_DETAILS_ROUTE).method('get').create();
const response = await get({ ...query, Accept: 'application/pdf' } as Arg);
return response.data as unknown as InventoryItemDetailsPdfResponse;
}