diff --git a/shared/sdk-ts/src/reports.ts b/shared/sdk-ts/src/reports.ts index 03b7a769a..08c2cb1bd 100644 --- a/shared/sdk-ts/src/reports.ts +++ b/shared/sdk-ts/src/reports.ts @@ -1,278 +1,2 @@ -import type { OpArgType } from 'openapi-typescript-fetch'; -import type { ApiFetcher } from './fetch-utils'; -import { paths } from './schema'; -import { OpForPath, OpQueryParams, OpResponseBodyTable } from './utils'; - -export const REPORTS_ROUTES = { - BALANCE_SHEET: '/api/reports/balance-sheet', - PURCHASES_BY_ITEMS: '/api/reports/purchases-by-items', - CUSTOMER_BALANCE_SUMMARY: '/api/reports/customer-balance-summary', - VENDOR_BALANCE_SUMMARY: '/api/reports/vendor-balance-summary', - SALES_BY_ITEMS: '/api/reports/sales-by-items', - GENERAL_LEDGER: '/api/reports/general-ledger', - TRIAL_BALANCE_SHEET: '/api/reports/trial-balance-sheet', - TRANSACTIONS_BY_VENDORS: '/api/reports/transactions-by-vendors', - TRANSACTIONS_BY_CUSTOMERS: '/api/reports/transactions-by-customers', - TRANSACTIONS_BY_REFERENCE: '/api/reports/transactions-by-reference', - RECEIVABLE_AGING_SUMMARY: '/api/reports/receivable-aging-summary', - PAYABLE_AGING_SUMMARY: '/api/reports/payable-aging-summary', - INVENTORY_ITEM_DETAILS: '/api/reports/inventory-item-details', - INVENTORY_VALUATION: '/api/reports/inventory-valuation', - SALES_TAX_LIABILITY_SUMMARY: '/api/reports/sales-tax-liability-summary', - JOURNAL: '/api/reports/journal', - PROFIT_LOSS_SHEET: '/api/reports/profit-loss-sheet', - CASHFLOW_STATEMENT: '/api/reports/cashflow-statement', -} as const satisfies Record; - -type Route = (typeof REPORTS_ROUTES)[keyof typeof REPORTS_ROUTES]; - -function createReportFetcher( - fetcher: ApiFetcher, - route: R -): ( - query: OpQueryParams> -) => Promise>> { - type Op = OpForPath; - type Query = OpQueryParams; - type Arg = OpArgType; - type Table = OpResponseBodyTable; - const get = fetcher.path(route).method('get').create(); - return async (query: Query): Promise => { - const { data } = await get(query as Arg); - return data as Table; - }; -} - -export type BalanceSheetTableQuery = OpQueryParams< - OpForPath ->; -export type BalanceSheetTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchBalanceSheetTable( - fetcher: ApiFetcher, - query: BalanceSheetTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.BALANCE_SHEET)(query); -} - -export type TrialBalanceSheetTableQuery = OpQueryParams< - OpForPath ->; -export type TrialBalanceSheetTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchTrialBalanceSheetTable( - fetcher: ApiFetcher, - query: TrialBalanceSheetTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.TRIAL_BALANCE_SHEET)(query); -} - -export type ProfitLossSheetTableQuery = OpQueryParams< - OpForPath ->; -export type ProfitLossSheetTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchProfitLossSheetTable( - fetcher: ApiFetcher, - query: ProfitLossSheetTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.PROFIT_LOSS_SHEET)(query); -} - -export type CashflowStatementTableQuery = OpQueryParams< - OpForPath ->; -export type CashflowStatementTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchCashflowStatementTable( - fetcher: ApiFetcher, - query: CashflowStatementTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.CASHFLOW_STATEMENT)(query); -} - -export type GeneralLedgerTableQuery = OpQueryParams< - OpForPath ->; -export type GeneralLedgerTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchGeneralLedgerTable( - fetcher: ApiFetcher, - query: GeneralLedgerTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.GENERAL_LEDGER)(query); -} - -export type JournalTableQuery = OpQueryParams< - OpForPath ->; -export type JournalTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchJournalTable( - fetcher: ApiFetcher, - query: JournalTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.JOURNAL)(query); -} - -export type ReceivableAgingSummaryTableQuery = OpQueryParams< - OpForPath ->; -export type ReceivableAgingSummaryTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchReceivableAgingSummaryTable( - fetcher: ApiFetcher, - query: ReceivableAgingSummaryTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.RECEIVABLE_AGING_SUMMARY)(query); -} - -export type PayableAgingSummaryTableQuery = OpQueryParams< - OpForPath ->; -export type PayableAgingSummaryTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchPayableAgingSummaryTable( - fetcher: ApiFetcher, - query: PayableAgingSummaryTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.PAYABLE_AGING_SUMMARY)(query); -} - -export type CustomerBalanceSummaryTableQuery = OpQueryParams< - OpForPath ->; -export type CustomerBalanceSummaryTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchCustomerBalanceSummaryTable( - fetcher: ApiFetcher, - query: CustomerBalanceSummaryTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.CUSTOMER_BALANCE_SUMMARY)(query); -} - -export type VendorBalanceSummaryTableQuery = OpQueryParams< - OpForPath ->; -export type VendorBalanceSummaryTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchVendorBalanceSummaryTable( - fetcher: ApiFetcher, - query: VendorBalanceSummaryTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.VENDOR_BALANCE_SUMMARY)(query); -} - -export type TransactionsByCustomersTableQuery = OpQueryParams< - OpForPath ->; -export type TransactionsByCustomersTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchTransactionsByCustomersTable( - fetcher: ApiFetcher, - query: TransactionsByCustomersTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.TRANSACTIONS_BY_CUSTOMERS)(query); -} - -export type TransactionsByVendorsTableQuery = OpQueryParams< - OpForPath ->; -export type TransactionsByVendorsTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchTransactionsByVendorsTable( - fetcher: ApiFetcher, - query: TransactionsByVendorsTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.TRANSACTIONS_BY_VENDORS)(query); -} - -export type SalesByItemsTableQuery = OpQueryParams< - OpForPath ->; -export type SalesByItemsTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchSalesByItemsTable( - fetcher: ApiFetcher, - query: SalesByItemsTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.SALES_BY_ITEMS)(query); -} - -export type PurchasesByItemsTableQuery = OpQueryParams< - OpForPath ->; -export type PurchasesByItemsTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchPurchasesByItemsTable( - fetcher: ApiFetcher, - query: PurchasesByItemsTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.PURCHASES_BY_ITEMS)(query); -} - -export type InventoryValuationTableQuery = OpQueryParams< - OpForPath ->; -export type InventoryValuationTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchInventoryValuationTable( - fetcher: ApiFetcher, - query: InventoryValuationTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.INVENTORY_VALUATION)(query); -} - -export type InventoryItemDetailsTableQuery = OpQueryParams< - OpForPath ->; -export type InventoryItemDetailsTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchInventoryItemDetailsTable( - fetcher: ApiFetcher, - query: InventoryItemDetailsTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.INVENTORY_ITEM_DETAILS)(query); -} - -export type SalesTaxLiabilitySummaryTableQuery = OpQueryParams< - OpForPath ->; -export type SalesTaxLiabilitySummaryTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchSalesTaxLiabilitySummaryTable( - fetcher: ApiFetcher, - query: SalesTaxLiabilitySummaryTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.SALES_TAX_LIABILITY_SUMMARY)(query); -} - -export type TransactionsByReferenceTableQuery = OpQueryParams< - OpForPath ->; -export type TransactionsByReferenceTableResponse = OpResponseBodyTable< - OpForPath ->; -export async function fetchTransactionsByReferenceTable( - fetcher: ApiFetcher, - query: TransactionsByReferenceTableQuery -): Promise { - return createReportFetcher(fetcher, REPORTS_ROUTES.TRANSACTIONS_BY_REFERENCE)(query); -} +// Re-export all reports from the new modular structure for backward compatibility +export * from './reports/index'; diff --git a/shared/sdk-ts/src/reports/balance-sheet.ts b/shared/sdk-ts/src/reports/balance-sheet.ts new file mode 100644 index 000000000..8b26f99f1 --- /dev/null +++ b/shared/sdk-ts/src/reports/balance-sheet.ts @@ -0,0 +1,80 @@ +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 BALANCE_SHEET_ROUTE = '/api/reports/balance-sheet' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type BalanceSheetTableQuery = OpQueryParams; +export type BalanceSheetTableResponse = OpResponseBodyTable; + +export async function fetchBalanceSheetTable( + fetcher: ApiFetcher, + query: BalanceSheetTableQuery +): Promise { + const get = fetcher.path(BALANCE_SHEET_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as BalanceSheetTableResponse; +} + +// JSON format - Note: BalanceSheet only has table format in schema +// Using type assertion for JSON format compatibility +export type BalanceSheetJsonQuery = OpQueryParams; +export type BalanceSheetJsonResponse = OpResponseBody; + +export async function fetchBalanceSheetJson( + fetcher: ApiFetcher, + query: BalanceSheetJsonQuery +): Promise { + const get = fetcher.path(BALANCE_SHEET_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as BalanceSheetJsonResponse; +} + +// CSV format (returns Blob) +export type BalanceSheetCsvQuery = OpQueryParams; +export type BalanceSheetCsvResponse = Blob; + +export async function fetchBalanceSheetCsv( + fetcher: ApiFetcher, + query: BalanceSheetCsvQuery +): Promise { + const get = fetcher.path(BALANCE_SHEET_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as BalanceSheetCsvResponse; +} + +// XLSX format (returns Blob) +export type BalanceSheetXlsxQuery = OpQueryParams; +export type BalanceSheetXlsxResponse = Blob; + +export async function fetchBalanceSheetXlsx( + fetcher: ApiFetcher, + query: BalanceSheetXlsxQuery +): Promise { + const get = fetcher.path(BALANCE_SHEET_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as BalanceSheetXlsxResponse; +} + +// PDF format (returns Blob) +export type BalanceSheetPdfQuery = OpQueryParams; +export type BalanceSheetPdfResponse = Blob; + +export async function fetchBalanceSheetPdf( + fetcher: ApiFetcher, + query: BalanceSheetPdfQuery +): Promise { + const get = fetcher.path(BALANCE_SHEET_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as BalanceSheetPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/cashflow.ts b/shared/sdk-ts/src/reports/cashflow.ts new file mode 100644 index 000000000..c66c6d490 --- /dev/null +++ b/shared/sdk-ts/src/reports/cashflow.ts @@ -0,0 +1,80 @@ +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 CASHFLOW_ROUTE = '/api/reports/cashflow-statement' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type CashflowStatementTableQuery = OpQueryParams; +export type CashflowStatementTableResponse = OpResponseBodyTable; + +export async function fetchCashflowStatementTable( + fetcher: ApiFetcher, + query: CashflowStatementTableQuery +): Promise { + const get = fetcher.path(CASHFLOW_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as CashflowStatementTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type CashflowStatementJsonQuery = OpQueryParams; +export type CashflowStatementJsonResponse = OpResponseBody; + +export async function fetchCashflowStatementJson( + fetcher: ApiFetcher, + query: CashflowStatementJsonQuery +): Promise { + const get = fetcher.path(CASHFLOW_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as CashflowStatementJsonResponse; +} + +// CSV format (returns Blob) +export type CashflowStatementCsvQuery = OpQueryParams; +export type CashflowStatementCsvResponse = Blob; + +export async function fetchCashflowStatementCsv( + fetcher: ApiFetcher, + query: CashflowStatementCsvQuery +): Promise { + const get = fetcher.path(CASHFLOW_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as CashflowStatementCsvResponse; +} + +// XLSX format (returns Blob) +export type CashflowStatementXlsxQuery = OpQueryParams; +export type CashflowStatementXlsxResponse = Blob; + +export async function fetchCashflowStatementXlsx( + fetcher: ApiFetcher, + query: CashflowStatementXlsxQuery +): Promise { + const get = fetcher.path(CASHFLOW_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as CashflowStatementXlsxResponse; +} + +// PDF format (returns Blob) +export type CashflowStatementPdfQuery = OpQueryParams; +export type CashflowStatementPdfResponse = Blob; + +export async function fetchCashflowStatementPdf( + fetcher: ApiFetcher, + query: CashflowStatementPdfQuery +): Promise { + const get = fetcher.path(CASHFLOW_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as CashflowStatementPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/customer-balance.ts b/shared/sdk-ts/src/reports/customer-balance.ts new file mode 100644 index 000000000..4ffc5bd24 --- /dev/null +++ b/shared/sdk-ts/src/reports/customer-balance.ts @@ -0,0 +1,80 @@ +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 CUSTOMER_BALANCE_ROUTE = '/api/reports/customer-balance-summary' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type CustomerBalanceTableQuery = OpQueryParams; +export type CustomerBalanceTableResponse = OpResponseBodyTable; + +export async function fetchCustomerBalanceTable( + fetcher: ApiFetcher, + query: CustomerBalanceTableQuery +): Promise { + const get = fetcher.path(CUSTOMER_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as CustomerBalanceTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type CustomerBalanceJsonQuery = OpQueryParams; +export type CustomerBalanceJsonResponse = OpResponseBody; + +export async function fetchCustomerBalanceJson( + fetcher: ApiFetcher, + query: CustomerBalanceJsonQuery +): Promise { + const get = fetcher.path(CUSTOMER_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as CustomerBalanceJsonResponse; +} + +// CSV format (returns Blob) +export type CustomerBalanceCsvQuery = OpQueryParams; +export type CustomerBalanceCsvResponse = Blob; + +export async function fetchCustomerBalanceCsv( + fetcher: ApiFetcher, + query: CustomerBalanceCsvQuery +): Promise { + const get = fetcher.path(CUSTOMER_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as CustomerBalanceCsvResponse; +} + +// XLSX format (returns Blob) +export type CustomerBalanceXlsxQuery = OpQueryParams; +export type CustomerBalanceXlsxResponse = Blob; + +export async function fetchCustomerBalanceXlsx( + fetcher: ApiFetcher, + query: CustomerBalanceXlsxQuery +): Promise { + const get = fetcher.path(CUSTOMER_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as CustomerBalanceXlsxResponse; +} + +// PDF format (returns Blob) +export type CustomerBalancePdfQuery = OpQueryParams; +export type CustomerBalancePdfResponse = Blob; + +export async function fetchCustomerBalancePdf( + fetcher: ApiFetcher, + query: CustomerBalancePdfQuery +): Promise { + const get = fetcher.path(CUSTOMER_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as CustomerBalancePdfResponse; +} diff --git a/shared/sdk-ts/src/reports/general-ledger.ts b/shared/sdk-ts/src/reports/general-ledger.ts new file mode 100644 index 000000000..9d3358a10 --- /dev/null +++ b/shared/sdk-ts/src/reports/general-ledger.ts @@ -0,0 +1,80 @@ +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 GENERAL_LEDGER_ROUTE = '/api/reports/general-ledger' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type GeneralLedgerTableQuery = OpQueryParams; +export type GeneralLedgerTableResponse = OpResponseBodyTable; + +export async function fetchGeneralLedgerTable( + fetcher: ApiFetcher, + query: GeneralLedgerTableQuery +): Promise { + const get = fetcher.path(GENERAL_LEDGER_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as GeneralLedgerTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type GeneralLedgerJsonQuery = OpQueryParams; +export type GeneralLedgerJsonResponse = OpResponseBody; + +export async function fetchGeneralLedgerJson( + fetcher: ApiFetcher, + query: GeneralLedgerJsonQuery +): Promise { + const get = fetcher.path(GENERAL_LEDGER_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as GeneralLedgerJsonResponse; +} + +// CSV format (returns Blob) +export type GeneralLedgerCsvQuery = OpQueryParams; +export type GeneralLedgerCsvResponse = Blob; + +export async function fetchGeneralLedgerCsv( + fetcher: ApiFetcher, + query: GeneralLedgerCsvQuery +): Promise { + const get = fetcher.path(GENERAL_LEDGER_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as GeneralLedgerCsvResponse; +} + +// XLSX format (returns Blob) +export type GeneralLedgerXlsxQuery = OpQueryParams; +export type GeneralLedgerXlsxResponse = Blob; + +export async function fetchGeneralLedgerXlsx( + fetcher: ApiFetcher, + query: GeneralLedgerXlsxQuery +): Promise { + const get = fetcher.path(GENERAL_LEDGER_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as GeneralLedgerXlsxResponse; +} + +// PDF format (returns Blob) +export type GeneralLedgerPdfQuery = OpQueryParams; +export type GeneralLedgerPdfResponse = Blob; + +export async function fetchGeneralLedgerPdf( + fetcher: ApiFetcher, + query: GeneralLedgerPdfQuery +): Promise { + const get = fetcher.path(GENERAL_LEDGER_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as GeneralLedgerPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/index.ts b/shared/sdk-ts/src/reports/index.ts new file mode 100644 index 000000000..77f28bbba --- /dev/null +++ b/shared/sdk-ts/src/reports/index.ts @@ -0,0 +1,19 @@ +// Re-export all report modules +export * from './balance-sheet'; +export * from './trial-balance'; +export * from './profit-loss'; +export * from './cashflow'; +export * from './general-ledger'; +export * from './journal'; +export * from './receivable-aging'; +export * from './payable-aging'; +export * from './customer-balance'; +export * from './vendor-balance'; +export * from './transactions-customers'; +export * from './transactions-vendors'; +export * from './sales-by-items'; +export * from './purchases-by-items'; +export * from './inventory-valuation'; +export * from './inventory-details'; +export * from './sales-tax-liability'; +export * from './transactions-reference'; diff --git a/shared/sdk-ts/src/reports/inventory-details.ts b/shared/sdk-ts/src/reports/inventory-details.ts new file mode 100644 index 000000000..2a9e4037f --- /dev/null +++ b/shared/sdk-ts/src/reports/inventory-details.ts @@ -0,0 +1,80 @@ +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; +type Arg = OpArgType; + +// Table format (existing functionality) +export type InventoryItemDetailsTableQuery = OpQueryParams; +export type InventoryItemDetailsTableResponse = OpResponseBodyTable; + +export async function fetchInventoryItemDetailsTable( + fetcher: ApiFetcher, + query: InventoryItemDetailsTableQuery +): Promise { + 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; +export type InventoryItemDetailsJsonResponse = OpResponseBody; + +export async function fetchInventoryItemDetailsJson( + fetcher: ApiFetcher, + query: InventoryItemDetailsJsonQuery +): Promise { + 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; +export type InventoryItemDetailsCsvResponse = Blob; + +export async function fetchInventoryItemDetailsCsv( + fetcher: ApiFetcher, + query: InventoryItemDetailsCsvQuery +): Promise { + 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; +export type InventoryItemDetailsXlsxResponse = Blob; + +export async function fetchInventoryItemDetailsXlsx( + fetcher: ApiFetcher, + query: InventoryItemDetailsXlsxQuery +): Promise { + 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; +export type InventoryItemDetailsPdfResponse = Blob; + +export async function fetchInventoryItemDetailsPdf( + fetcher: ApiFetcher, + query: InventoryItemDetailsPdfQuery +): Promise { + 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; +} diff --git a/shared/sdk-ts/src/reports/inventory-valuation.ts b/shared/sdk-ts/src/reports/inventory-valuation.ts new file mode 100644 index 000000000..c05f30752 --- /dev/null +++ b/shared/sdk-ts/src/reports/inventory-valuation.ts @@ -0,0 +1,80 @@ +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_VALUATION_ROUTE = '/api/reports/inventory-valuation' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type InventoryValuationTableQuery = OpQueryParams; +export type InventoryValuationTableResponse = OpResponseBodyTable; + +export async function fetchInventoryValuationTable( + fetcher: ApiFetcher, + query: InventoryValuationTableQuery +): Promise { + const get = fetcher.path(INVENTORY_VALUATION_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as InventoryValuationTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type InventoryValuationJsonQuery = OpQueryParams; +export type InventoryValuationJsonResponse = OpResponseBody; + +export async function fetchInventoryValuationJson( + fetcher: ApiFetcher, + query: InventoryValuationJsonQuery +): Promise { + const get = fetcher.path(INVENTORY_VALUATION_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as InventoryValuationJsonResponse; +} + +// CSV format (returns Blob) +export type InventoryValuationCsvQuery = OpQueryParams; +export type InventoryValuationCsvResponse = Blob; + +export async function fetchInventoryValuationCsv( + fetcher: ApiFetcher, + query: InventoryValuationCsvQuery +): Promise { + const get = fetcher.path(INVENTORY_VALUATION_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as InventoryValuationCsvResponse; +} + +// XLSX format (returns Blob) +export type InventoryValuationXlsxQuery = OpQueryParams; +export type InventoryValuationXlsxResponse = Blob; + +export async function fetchInventoryValuationXlsx( + fetcher: ApiFetcher, + query: InventoryValuationXlsxQuery +): Promise { + const get = fetcher.path(INVENTORY_VALUATION_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as InventoryValuationXlsxResponse; +} + +// PDF format (returns Blob) +export type InventoryValuationPdfQuery = OpQueryParams; +export type InventoryValuationPdfResponse = Blob; + +export async function fetchInventoryValuationPdf( + fetcher: ApiFetcher, + query: InventoryValuationPdfQuery +): Promise { + const get = fetcher.path(INVENTORY_VALUATION_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as InventoryValuationPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/journal.ts b/shared/sdk-ts/src/reports/journal.ts new file mode 100644 index 000000000..f0d7e0e16 --- /dev/null +++ b/shared/sdk-ts/src/reports/journal.ts @@ -0,0 +1,80 @@ +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 JOURNAL_ROUTE = '/api/reports/journal' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type JournalTableQuery = OpQueryParams; +export type JournalTableResponse = OpResponseBodyTable; + +export async function fetchJournalTable( + fetcher: ApiFetcher, + query: JournalTableQuery +): Promise { + const get = fetcher.path(JOURNAL_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as JournalTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type JournalJsonQuery = OpQueryParams; +export type JournalJsonResponse = OpResponseBody; + +export async function fetchJournalJson( + fetcher: ApiFetcher, + query: JournalJsonQuery +): Promise { + const get = fetcher.path(JOURNAL_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as JournalJsonResponse; +} + +// CSV format (returns Blob) +export type JournalCsvQuery = OpQueryParams; +export type JournalCsvResponse = Blob; + +export async function fetchJournalCsv( + fetcher: ApiFetcher, + query: JournalCsvQuery +): Promise { + const get = fetcher.path(JOURNAL_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as JournalCsvResponse; +} + +// XLSX format (returns Blob) +export type JournalXlsxQuery = OpQueryParams; +export type JournalXlsxResponse = Blob; + +export async function fetchJournalXlsx( + fetcher: ApiFetcher, + query: JournalXlsxQuery +): Promise { + const get = fetcher.path(JOURNAL_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as JournalXlsxResponse; +} + +// PDF format (returns Blob) +export type JournalPdfQuery = OpQueryParams; +export type JournalPdfResponse = Blob; + +export async function fetchJournalPdf( + fetcher: ApiFetcher, + query: JournalPdfQuery +): Promise { + const get = fetcher.path(JOURNAL_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as JournalPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/payable-aging.ts b/shared/sdk-ts/src/reports/payable-aging.ts new file mode 100644 index 000000000..508fe3eaf --- /dev/null +++ b/shared/sdk-ts/src/reports/payable-aging.ts @@ -0,0 +1,80 @@ +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 PAYABLE_AGING_ROUTE = '/api/reports/payable-aging-summary' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type PayableAgingTableQuery = OpQueryParams; +export type PayableAgingTableResponse = OpResponseBodyTable; + +export async function fetchPayableAgingTable( + fetcher: ApiFetcher, + query: PayableAgingTableQuery +): Promise { + const get = fetcher.path(PAYABLE_AGING_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as PayableAgingTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type PayableAgingJsonQuery = OpQueryParams; +export type PayableAgingJsonResponse = OpResponseBody; + +export async function fetchPayableAgingJson( + fetcher: ApiFetcher, + query: PayableAgingJsonQuery +): Promise { + const get = fetcher.path(PAYABLE_AGING_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as PayableAgingJsonResponse; +} + +// CSV format (returns Blob) +export type PayableAgingCsvQuery = OpQueryParams; +export type PayableAgingCsvResponse = Blob; + +export async function fetchPayableAgingCsv( + fetcher: ApiFetcher, + query: PayableAgingCsvQuery +): Promise { + const get = fetcher.path(PAYABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as PayableAgingCsvResponse; +} + +// XLSX format (returns Blob) +export type PayableAgingXlsxQuery = OpQueryParams; +export type PayableAgingXlsxResponse = Blob; + +export async function fetchPayableAgingXlsx( + fetcher: ApiFetcher, + query: PayableAgingXlsxQuery +): Promise { + const get = fetcher.path(PAYABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as PayableAgingXlsxResponse; +} + +// PDF format (returns Blob) +export type PayableAgingPdfQuery = OpQueryParams; +export type PayableAgingPdfResponse = Blob; + +export async function fetchPayableAgingPdf( + fetcher: ApiFetcher, + query: PayableAgingPdfQuery +): Promise { + const get = fetcher.path(PAYABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as PayableAgingPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/profit-loss.ts b/shared/sdk-ts/src/reports/profit-loss.ts new file mode 100644 index 000000000..446b530c9 --- /dev/null +++ b/shared/sdk-ts/src/reports/profit-loss.ts @@ -0,0 +1,80 @@ +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 PROFIT_LOSS_ROUTE = '/api/reports/profit-loss-sheet' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type ProfitLossTableQuery = OpQueryParams; +export type ProfitLossTableResponse = OpResponseBodyTable; + +export async function fetchProfitLossTable( + fetcher: ApiFetcher, + query: ProfitLossTableQuery +): Promise { + const get = fetcher.path(PROFIT_LOSS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as ProfitLossTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type ProfitLossJsonQuery = OpQueryParams; +export type ProfitLossJsonResponse = OpResponseBody; + +export async function fetchProfitLossJson( + fetcher: ApiFetcher, + query: ProfitLossJsonQuery +): Promise { + const get = fetcher.path(PROFIT_LOSS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as ProfitLossJsonResponse; +} + +// CSV format (returns Blob) +export type ProfitLossCsvQuery = OpQueryParams; +export type ProfitLossCsvResponse = Blob; + +export async function fetchProfitLossCsv( + fetcher: ApiFetcher, + query: ProfitLossCsvQuery +): Promise { + const get = fetcher.path(PROFIT_LOSS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as ProfitLossCsvResponse; +} + +// XLSX format (returns Blob) +export type ProfitLossXlsxQuery = OpQueryParams; +export type ProfitLossXlsxResponse = Blob; + +export async function fetchProfitLossXlsx( + fetcher: ApiFetcher, + query: ProfitLossXlsxQuery +): Promise { + const get = fetcher.path(PROFIT_LOSS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as ProfitLossXlsxResponse; +} + +// PDF format (returns Blob) +export type ProfitLossPdfQuery = OpQueryParams; +export type ProfitLossPdfResponse = Blob; + +export async function fetchProfitLossPdf( + fetcher: ApiFetcher, + query: ProfitLossPdfQuery +): Promise { + const get = fetcher.path(PROFIT_LOSS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as ProfitLossPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/purchases-by-items.ts b/shared/sdk-ts/src/reports/purchases-by-items.ts new file mode 100644 index 000000000..3bdc8fc2f --- /dev/null +++ b/shared/sdk-ts/src/reports/purchases-by-items.ts @@ -0,0 +1,80 @@ +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 PURCHASES_BY_ITEMS_ROUTE = '/api/reports/purchases-by-items' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type PurchasesByItemsTableQuery = OpQueryParams; +export type PurchasesByItemsTableResponse = OpResponseBodyTable; + +export async function fetchPurchasesByItemsTable( + fetcher: ApiFetcher, + query: PurchasesByItemsTableQuery +): Promise { + const get = fetcher.path(PURCHASES_BY_ITEMS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as PurchasesByItemsTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type PurchasesByItemsJsonQuery = OpQueryParams; +export type PurchasesByItemsJsonResponse = OpResponseBody; + +export async function fetchPurchasesByItemsJson( + fetcher: ApiFetcher, + query: PurchasesByItemsJsonQuery +): Promise { + const get = fetcher.path(PURCHASES_BY_ITEMS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as PurchasesByItemsJsonResponse; +} + +// CSV format (returns Blob) +export type PurchasesByItemsCsvQuery = OpQueryParams; +export type PurchasesByItemsCsvResponse = Blob; + +export async function fetchPurchasesByItemsCsv( + fetcher: ApiFetcher, + query: PurchasesByItemsCsvQuery +): Promise { + const get = fetcher.path(PURCHASES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as PurchasesByItemsCsvResponse; +} + +// XLSX format (returns Blob) +export type PurchasesByItemsXlsxQuery = OpQueryParams; +export type PurchasesByItemsXlsxResponse = Blob; + +export async function fetchPurchasesByItemsXlsx( + fetcher: ApiFetcher, + query: PurchasesByItemsXlsxQuery +): Promise { + const get = fetcher.path(PURCHASES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as PurchasesByItemsXlsxResponse; +} + +// PDF format (returns Blob) +export type PurchasesByItemsPdfQuery = OpQueryParams; +export type PurchasesByItemsPdfResponse = Blob; + +export async function fetchPurchasesByItemsPdf( + fetcher: ApiFetcher, + query: PurchasesByItemsPdfQuery +): Promise { + const get = fetcher.path(PURCHASES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as PurchasesByItemsPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/receivable-aging.ts b/shared/sdk-ts/src/reports/receivable-aging.ts new file mode 100644 index 000000000..8b5b4f1dc --- /dev/null +++ b/shared/sdk-ts/src/reports/receivable-aging.ts @@ -0,0 +1,80 @@ +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 RECEIVABLE_AGING_ROUTE = '/api/reports/receivable-aging-summary' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type ReceivableAgingTableQuery = OpQueryParams; +export type ReceivableAgingTableResponse = OpResponseBodyTable; + +export async function fetchReceivableAgingTable( + fetcher: ApiFetcher, + query: ReceivableAgingTableQuery +): Promise { + const get = fetcher.path(RECEIVABLE_AGING_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as ReceivableAgingTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type ReceivableAgingJsonQuery = OpQueryParams; +export type ReceivableAgingJsonResponse = OpResponseBody; + +export async function fetchReceivableAgingJson( + fetcher: ApiFetcher, + query: ReceivableAgingJsonQuery +): Promise { + const get = fetcher.path(RECEIVABLE_AGING_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as ReceivableAgingJsonResponse; +} + +// CSV format (returns Blob) +export type ReceivableAgingCsvQuery = OpQueryParams; +export type ReceivableAgingCsvResponse = Blob; + +export async function fetchReceivableAgingCsv( + fetcher: ApiFetcher, + query: ReceivableAgingCsvQuery +): Promise { + const get = fetcher.path(RECEIVABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as ReceivableAgingCsvResponse; +} + +// XLSX format (returns Blob) +export type ReceivableAgingXlsxQuery = OpQueryParams; +export type ReceivableAgingXlsxResponse = Blob; + +export async function fetchReceivableAgingXlsx( + fetcher: ApiFetcher, + query: ReceivableAgingXlsxQuery +): Promise { + const get = fetcher.path(RECEIVABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as ReceivableAgingXlsxResponse; +} + +// PDF format (returns Blob) +export type ReceivableAgingPdfQuery = OpQueryParams; +export type ReceivableAgingPdfResponse = Blob; + +export async function fetchReceivableAgingPdf( + fetcher: ApiFetcher, + query: ReceivableAgingPdfQuery +): Promise { + const get = fetcher.path(RECEIVABLE_AGING_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as ReceivableAgingPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/sales-by-items.ts b/shared/sdk-ts/src/reports/sales-by-items.ts new file mode 100644 index 000000000..c374b337d --- /dev/null +++ b/shared/sdk-ts/src/reports/sales-by-items.ts @@ -0,0 +1,80 @@ +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 SALES_BY_ITEMS_ROUTE = '/api/reports/sales-by-items' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type SalesByItemsTableQuery = OpQueryParams; +export type SalesByItemsTableResponse = OpResponseBodyTable; + +export async function fetchSalesByItemsTable( + fetcher: ApiFetcher, + query: SalesByItemsTableQuery +): Promise { + const get = fetcher.path(SALES_BY_ITEMS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as SalesByItemsTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type SalesByItemsJsonQuery = OpQueryParams; +export type SalesByItemsJsonResponse = OpResponseBody; + +export async function fetchSalesByItemsJson( + fetcher: ApiFetcher, + query: SalesByItemsJsonQuery +): Promise { + const get = fetcher.path(SALES_BY_ITEMS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as SalesByItemsJsonResponse; +} + +// CSV format (returns Blob) +export type SalesByItemsCsvQuery = OpQueryParams; +export type SalesByItemsCsvResponse = Blob; + +export async function fetchSalesByItemsCsv( + fetcher: ApiFetcher, + query: SalesByItemsCsvQuery +): Promise { + const get = fetcher.path(SALES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as SalesByItemsCsvResponse; +} + +// XLSX format (returns Blob) +export type SalesByItemsXlsxQuery = OpQueryParams; +export type SalesByItemsXlsxResponse = Blob; + +export async function fetchSalesByItemsXlsx( + fetcher: ApiFetcher, + query: SalesByItemsXlsxQuery +): Promise { + const get = fetcher.path(SALES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as SalesByItemsXlsxResponse; +} + +// PDF format (returns Blob) +export type SalesByItemsPdfQuery = OpQueryParams; +export type SalesByItemsPdfResponse = Blob; + +export async function fetchSalesByItemsPdf( + fetcher: ApiFetcher, + query: SalesByItemsPdfQuery +): Promise { + const get = fetcher.path(SALES_BY_ITEMS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as SalesByItemsPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/sales-tax-liability.ts b/shared/sdk-ts/src/reports/sales-tax-liability.ts new file mode 100644 index 000000000..1ca267fb8 --- /dev/null +++ b/shared/sdk-ts/src/reports/sales-tax-liability.ts @@ -0,0 +1,80 @@ +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 SALES_TAX_LIABILITY_ROUTE = '/api/reports/sales-tax-liability-summary' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type SalesTaxLiabilityTableQuery = OpQueryParams; +export type SalesTaxLiabilityTableResponse = OpResponseBodyTable; + +export async function fetchSalesTaxLiabilityTable( + fetcher: ApiFetcher, + query: SalesTaxLiabilityTableQuery +): Promise { + const get = fetcher.path(SALES_TAX_LIABILITY_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as SalesTaxLiabilityTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type SalesTaxLiabilityJsonQuery = OpQueryParams; +export type SalesTaxLiabilityJsonResponse = OpResponseBody; + +export async function fetchSalesTaxLiabilityJson( + fetcher: ApiFetcher, + query: SalesTaxLiabilityJsonQuery +): Promise { + const get = fetcher.path(SALES_TAX_LIABILITY_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as SalesTaxLiabilityJsonResponse; +} + +// CSV format (returns Blob) +export type SalesTaxLiabilityCsvQuery = OpQueryParams; +export type SalesTaxLiabilityCsvResponse = Blob; + +export async function fetchSalesTaxLiabilityCsv( + fetcher: ApiFetcher, + query: SalesTaxLiabilityCsvQuery +): Promise { + const get = fetcher.path(SALES_TAX_LIABILITY_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as SalesTaxLiabilityCsvResponse; +} + +// XLSX format (returns Blob) +export type SalesTaxLiabilityXlsxQuery = OpQueryParams; +export type SalesTaxLiabilityXlsxResponse = Blob; + +export async function fetchSalesTaxLiabilityXlsx( + fetcher: ApiFetcher, + query: SalesTaxLiabilityXlsxQuery +): Promise { + const get = fetcher.path(SALES_TAX_LIABILITY_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as SalesTaxLiabilityXlsxResponse; +} + +// PDF format (returns Blob) +export type SalesTaxLiabilityPdfQuery = OpQueryParams; +export type SalesTaxLiabilityPdfResponse = Blob; + +export async function fetchSalesTaxLiabilityPdf( + fetcher: ApiFetcher, + query: SalesTaxLiabilityPdfQuery +): Promise { + const get = fetcher.path(SALES_TAX_LIABILITY_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as SalesTaxLiabilityPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/transactions-customers.ts b/shared/sdk-ts/src/reports/transactions-customers.ts new file mode 100644 index 000000000..df34f73a8 --- /dev/null +++ b/shared/sdk-ts/src/reports/transactions-customers.ts @@ -0,0 +1,80 @@ +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_CUSTOMERS_ROUTE = '/api/reports/transactions-by-customers' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type TransactionsByCustomersTableQuery = OpQueryParams; +export type TransactionsByCustomersTableResponse = OpResponseBodyTable; + +export async function fetchTransactionsByCustomersTable( + fetcher: ApiFetcher, + query: TransactionsByCustomersTableQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_CUSTOMERS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TransactionsByCustomersTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type TransactionsByCustomersJsonQuery = OpQueryParams; +export type TransactionsByCustomersJsonResponse = OpResponseBody; + +export async function fetchTransactionsByCustomersJson( + fetcher: ApiFetcher, + query: TransactionsByCustomersJsonQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_CUSTOMERS_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TransactionsByCustomersJsonResponse; +} + +// CSV format (returns Blob) +export type TransactionsByCustomersCsvQuery = OpQueryParams; +export type TransactionsByCustomersCsvResponse = Blob; + +export async function fetchTransactionsByCustomersCsv( + fetcher: ApiFetcher, + query: TransactionsByCustomersCsvQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_CUSTOMERS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as TransactionsByCustomersCsvResponse; +} + +// XLSX format (returns Blob) +export type TransactionsByCustomersXlsxQuery = OpQueryParams; +export type TransactionsByCustomersXlsxResponse = Blob; + +export async function fetchTransactionsByCustomersXlsx( + fetcher: ApiFetcher, + query: TransactionsByCustomersXlsxQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_CUSTOMERS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as TransactionsByCustomersXlsxResponse; +} + +// PDF format (returns Blob) +export type TransactionsByCustomersPdfQuery = OpQueryParams; +export type TransactionsByCustomersPdfResponse = Blob; + +export async function fetchTransactionsByCustomersPdf( + fetcher: ApiFetcher, + query: TransactionsByCustomersPdfQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_CUSTOMERS_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as TransactionsByCustomersPdfResponse; +} diff --git a/shared/sdk-ts/src/reports/transactions-reference.ts b/shared/sdk-ts/src/reports/transactions-reference.ts new file mode 100644 index 000000000..b83f740cd --- /dev/null +++ b/shared/sdk-ts/src/reports/transactions-reference.ts @@ -0,0 +1,80 @@ +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_REFERENCE_ROUTE = '/api/reports/transactions-by-reference' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type TransactionsByReferenceTableQuery = OpQueryParams; +export type TransactionsByReferenceTableResponse = OpResponseBodyTable; + +export async function fetchTransactionsByReferenceTable( + fetcher: ApiFetcher, + query: TransactionsByReferenceTableQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_REFERENCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TransactionsByReferenceTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type TransactionsByReferenceJsonQuery = OpQueryParams; +export type TransactionsByReferenceJsonResponse = OpResponseBody; + +export async function fetchTransactionsByReferenceJson( + fetcher: ApiFetcher, + query: TransactionsByReferenceJsonQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_REFERENCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TransactionsByReferenceJsonResponse; +} + +// CSV format (returns Blob) +export type TransactionsByReferenceCsvQuery = OpQueryParams; +export type TransactionsByReferenceCsvResponse = Blob; + +export async function fetchTransactionsByReferenceCsv( + fetcher: ApiFetcher, + query: TransactionsByReferenceCsvQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_REFERENCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as TransactionsByReferenceCsvResponse; +} + +// XLSX format (returns Blob) +export type TransactionsByReferenceXlsxQuery = OpQueryParams; +export type TransactionsByReferenceXlsxResponse = Blob; + +export async function fetchTransactionsByReferenceXlsx( + fetcher: ApiFetcher, + query: TransactionsByReferenceXlsxQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_REFERENCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as TransactionsByReferenceXlsxResponse; +} + +// PDF format (returns Blob) +export type TransactionsByReferencePdfQuery = OpQueryParams; +export type TransactionsByReferencePdfResponse = Blob; + +export async function fetchTransactionsByReferencePdf( + fetcher: ApiFetcher, + query: TransactionsByReferencePdfQuery +): Promise { + const get = fetcher.path(TRANSACTIONS_REFERENCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as TransactionsByReferencePdfResponse; +} diff --git a/shared/sdk-ts/src/reports/transactions-vendors.ts b/shared/sdk-ts/src/reports/transactions-vendors.ts new file mode 100644 index 000000000..b7804941d --- /dev/null +++ b/shared/sdk-ts/src/reports/transactions-vendors.ts @@ -0,0 +1,80 @@ +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; +type Arg = OpArgType; + +// Table format (existing functionality) +export type TransactionsByVendorsTableQuery = OpQueryParams; +export type TransactionsByVendorsTableResponse = OpResponseBodyTable; + +export async function fetchTransactionsByVendorsTable( + fetcher: ApiFetcher, + query: TransactionsByVendorsTableQuery +): Promise { + 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; +export type TransactionsByVendorsJsonResponse = OpResponseBody; + +export async function fetchTransactionsByVendorsJson( + fetcher: ApiFetcher, + query: TransactionsByVendorsJsonQuery +): Promise { + 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; +export type TransactionsByVendorsCsvResponse = Blob; + +export async function fetchTransactionsByVendorsCsv( + fetcher: ApiFetcher, + query: TransactionsByVendorsCsvQuery +): Promise { + 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; +export type TransactionsByVendorsXlsxResponse = Blob; + +export async function fetchTransactionsByVendorsXlsx( + fetcher: ApiFetcher, + query: TransactionsByVendorsXlsxQuery +): Promise { + 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; +export type TransactionsByVendorsPdfResponse = Blob; + +export async function fetchTransactionsByVendorsPdf( + fetcher: ApiFetcher, + query: TransactionsByVendorsPdfQuery +): Promise { + 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; +} diff --git a/shared/sdk-ts/src/reports/trial-balance.ts b/shared/sdk-ts/src/reports/trial-balance.ts new file mode 100644 index 000000000..a5f58e03b --- /dev/null +++ b/shared/sdk-ts/src/reports/trial-balance.ts @@ -0,0 +1,80 @@ +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 TRIAL_BALANCE_ROUTE = '/api/reports/trial-balance-sheet' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type TrialBalanceTableQuery = OpQueryParams; +export type TrialBalanceTableResponse = OpResponseBodyTable; + +export async function fetchTrialBalanceTable( + fetcher: ApiFetcher, + query: TrialBalanceTableQuery +): Promise { + const get = fetcher.path(TRIAL_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TrialBalanceTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type TrialBalanceJsonQuery = OpQueryParams; +export type TrialBalanceJsonResponse = OpResponseBody; + +export async function fetchTrialBalanceJson( + fetcher: ApiFetcher, + query: TrialBalanceJsonQuery +): Promise { + const get = fetcher.path(TRIAL_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as TrialBalanceJsonResponse; +} + +// CSV format (returns Blob) +export type TrialBalanceCsvQuery = OpQueryParams; +export type TrialBalanceCsvResponse = Blob; + +export async function fetchTrialBalanceCsv( + fetcher: ApiFetcher, + query: TrialBalanceCsvQuery +): Promise { + const get = fetcher.path(TRIAL_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as TrialBalanceCsvResponse; +} + +// XLSX format (returns Blob) +export type TrialBalanceXlsxQuery = OpQueryParams; +export type TrialBalanceXlsxResponse = Blob; + +export async function fetchTrialBalanceXlsx( + fetcher: ApiFetcher, + query: TrialBalanceXlsxQuery +): Promise { + const get = fetcher.path(TRIAL_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as TrialBalanceXlsxResponse; +} + +// PDF format (returns Blob) +export type TrialBalancePdfQuery = OpQueryParams; +export type TrialBalancePdfResponse = Blob; + +export async function fetchTrialBalancePdf( + fetcher: ApiFetcher, + query: TrialBalancePdfQuery +): Promise { + const get = fetcher.path(TRIAL_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as TrialBalancePdfResponse; +} diff --git a/shared/sdk-ts/src/reports/vendor-balance.ts b/shared/sdk-ts/src/reports/vendor-balance.ts new file mode 100644 index 000000000..c4bc3095b --- /dev/null +++ b/shared/sdk-ts/src/reports/vendor-balance.ts @@ -0,0 +1,80 @@ +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 VENDOR_BALANCE_ROUTE = '/api/reports/vendor-balance-summary' as const satisfies keyof paths; + +type Op = OpForPath; +type Arg = OpArgType; + +// Table format (existing functionality) +export type VendorBalanceTableQuery = OpQueryParams; +export type VendorBalanceTableResponse = OpResponseBodyTable; + +export async function fetchVendorBalanceTable( + fetcher: ApiFetcher, + query: VendorBalanceTableQuery +): Promise { + const get = fetcher.path(VENDOR_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as VendorBalanceTableResponse; +} + +// JSON format - Note: may only have table format in schema +// Using type assertion for JSON format compatibility +export type VendorBalanceJsonQuery = OpQueryParams; +export type VendorBalanceJsonResponse = OpResponseBody; + +export async function fetchVendorBalanceJson( + fetcher: ApiFetcher, + query: VendorBalanceJsonQuery +): Promise { + const get = fetcher.path(VENDOR_BALANCE_ROUTE).method('get').create(); + const { data } = await get(query as Arg); + return data as unknown as VendorBalanceJsonResponse; +} + +// CSV format (returns Blob) +export type VendorBalanceCsvQuery = OpQueryParams; +export type VendorBalanceCsvResponse = Blob; + +export async function fetchVendorBalanceCsv( + fetcher: ApiFetcher, + query: VendorBalanceCsvQuery +): Promise { + const get = fetcher.path(VENDOR_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/csv' } as Arg); + return response.data as unknown as VendorBalanceCsvResponse; +} + +// XLSX format (returns Blob) +export type VendorBalanceXlsxQuery = OpQueryParams; +export type VendorBalanceXlsxResponse = Blob; + +export async function fetchVendorBalanceXlsx( + fetcher: ApiFetcher, + query: VendorBalanceXlsxQuery +): Promise { + const get = fetcher.path(VENDOR_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/xlsx' } as Arg); + return response.data as unknown as VendorBalanceXlsxResponse; +} + +// PDF format (returns Blob) +export type VendorBalancePdfQuery = OpQueryParams; +export type VendorBalancePdfResponse = Blob; + +export async function fetchVendorBalancePdf( + fetcher: ApiFetcher, + query: VendorBalancePdfQuery +): Promise { + const get = fetcher.path(VENDOR_BALANCE_ROUTE).method('get').create(); + const response = await get({ ...query, Accept: 'application/pdf' } as Arg); + return response.data as unknown as VendorBalancePdfResponse; +} diff --git a/shared/sdk-ts/src/utils/index.ts b/shared/sdk-ts/src/utils/index.ts index aa89f3c25..52784044d 100644 --- a/shared/sdk-ts/src/utils/index.ts +++ b/shared/sdk-ts/src/utils/index.ts @@ -35,3 +35,24 @@ export type OpResponseBodyTable = O extends { } ? R : unknown; + +/** Response body for CSV format (returns as Blob) */ +export type OpResponseBodyCsv = O extends { + responses: { 200: { content: { 'application/csv': infer R } } }; +} + ? R + : Blob; + +/** Response body for XLSX format (returns as Blob) */ +export type OpResponseBodyXlsx = O extends { + responses: { 200: { content: { 'application/xlsx': infer R } } }; +} + ? R + : Blob; + +/** Response body for PDF format (returns as Blob) */ +export type OpResponseBodyPdf = O extends { + responses: { 200: { content: { 'application/pdf': infer R } } }; +} + ? R + : Blob;