diff --git a/packages/server/src/interfaces/TransactionsByCustomers.ts b/packages/server/src/interfaces/TransactionsByCustomers.ts index 7635745c6..e47098b36 100644 --- a/packages/server/src/interfaces/TransactionsByCustomers.ts +++ b/packages/server/src/interfaces/TransactionsByCustomers.ts @@ -29,10 +29,12 @@ export type ITransactionsByCustomersData = ITransactionsByCustomersCustomer[]; export interface ITransactionsByCustomersStatement { data: ITransactionsByCustomersData; query: ITransactionsByCustomersFilter; + meta: ITransactionsByCustomersMeta; } export interface ITransactionsByCustomersTable extends IFinancialTable { query: ITransactionsByCustomersFilter; + meta: ITransactionsByCustomersMeta; } export interface ITransactionsByCustomersService { diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersMeta.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersMeta.ts new file mode 100644 index 000000000..710bc0bc4 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersMeta.ts @@ -0,0 +1,36 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { + ITransactionsByCustomersFilter, + ITransactionsByCustomersMeta, +} from '@/interfaces'; + +@Service() +export class TransactionsByCustomersMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the transactions by customers meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: ITransactionsByCustomersFilter + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedToDate = moment(query.toDate).format('YYYY/MM/DD'); + const formattedFromDate = moment(query.fromDate).format('YYYY/MM/DD'); + const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDate}`; + + return { + ...commonMeta, + sheetName: 'Transactions By Customers', + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersPdf.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersPdf.ts index 2926e63e6..122cbbaf2 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersPdf.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersPdf.ts @@ -13,7 +13,7 @@ export class TransactionsByCustomersPdf { /** * Retrieves the transactions by customers in PDF format. * @param {number} tenantId - Tenant ID. - * @param {IBalanceSheetQuery} query - Balance sheet query. + * @param {ITransactionsByCustomersFilter} query - Balance sheet query. * @returns {Promise} */ public async pdf( @@ -24,13 +24,11 @@ export class TransactionsByCustomersPdf { tenantId, query ); - const sheetName = 'Transactions By Customers'; - return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedDateRange ); } } diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts index ed4483d61..a97a13afe 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts @@ -12,6 +12,7 @@ import TransactionsByCustomers from './TransactionsByCustomers'; import Ledger from '@/services/Accounting/Ledger'; import TransactionsByCustomersRepository from './TransactionsByCustomersRepository'; import { Tenant } from '@/system/models'; +import { TransactionsByCustomersMeta } from './TransactionsByCustomersMeta'; export class TransactionsByCustomersSheet implements ITransactionsByCustomersService @@ -22,6 +23,9 @@ export class TransactionsByCustomersSheet @Inject() private reportRepository: TransactionsByCustomersRepository; + @Inject() + private transactionsByCustomersMeta: TransactionsByCustomersMeta; + /** * Defaults balance sheet filter query. * @return {ICustomerBalanceSummaryQuery} @@ -160,10 +164,12 @@ export class TransactionsByCustomersSheet i18n ); + const meta = await this.transactionsByCustomersMeta.meta(tenantId, filter); + return { data: reportInstance.reportData(), query: filter, - meta: {}, + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts index 7016cf853..2f38b9cde 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersTable.ts @@ -1,6 +1,10 @@ import * as R from 'ramda'; import { tableRowMapper } from 'utils'; -import { ITransactionsByCustomersCustomer, ITableRow, ITableColumn } from '@/interfaces'; +import { + ITransactionsByCustomersCustomer, + ITableRow, + ITableColumn, +} from '@/interfaces'; import TransactionsByContactsTableRows from '../TransactionsByContact/TransactionsByContactTableRows'; enum ROW_TYPE { @@ -78,6 +82,14 @@ export class TransactionsByCustomersTable extends TransactionsByContactsTableRow * @returns {ITableColumn[]} */ public tableColumns = (): ITableColumn[] => { - return []; - } + return [ + { key: 'customer_name', label: 'Customer name' }, + { key: 'account_name', label: 'Account Name' }, + { key: 'ref_type', label: 'Reference Type' }, + { key: 'transaction_type', label: 'Transaction Type' }, + { key: 'credit', label: 'Credit' }, + { key: 'debit', label: 'Debit' }, + { key: 'running_balance', label: 'Running Balance' }, + ]; + }; } diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts index 744993bb0..54a4c7ed4 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorApplication.ts @@ -69,6 +69,7 @@ export class TransactionsByVendorApplication { * Retrieves the transactions by vendor in XLSX format. * @param {number} tenantId * @param {ITransactionsByVendorsFilter} query + * @returns {Promise} */ public xlsx( tenantId: number, diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts index 6738979a1..69b424957 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts @@ -12,6 +12,7 @@ import TransactionsByVendor from './TransactionsByVendor'; import Ledger from '@/services/Accounting/Ledger'; import TransactionsByVendorRepository from './TransactionsByVendorRepository'; import { Tenant } from '@/system/models'; +import { TransactionsByVendorMeta } from './TransactionsByVendorMeta'; export class TransactionsByVendorsInjectable implements ITransactionsByVendorsService @@ -22,6 +23,9 @@ export class TransactionsByVendorsInjectable @Inject() private reportRepository: TransactionsByVendorRepository; + @Inject() + private transactionsByVendorMeta: TransactionsByVendorMeta; + /** * Defaults balance sheet filter query. * @return {IVendorBalanceSummaryQuery} @@ -165,10 +169,12 @@ export class TransactionsByVendorsInjectable tenant.metadata.baseCurrency, i18n ); + const meta = await this.transactionsByVendorMeta.meta(tenantId, filter); + return { data: reportInstance.reportData(), query: filter, - meta: {}, + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorMeta.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorMeta.ts new file mode 100644 index 000000000..ea31ac034 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorMeta.ts @@ -0,0 +1,36 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { + ITransactionsByVendorMeta, + ITransactionsByVendorsFilter, +} from '@/interfaces'; + +@Service() +export class TransactionsByVendorMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the transactions by vendor meta. + * @param {number} tenantId - + * @returns {Promise} + */ + public async meta( + tenantId: number, + query: ITransactionsByVendorsFilter + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedToDate = moment(query.toDate).format('YYYY/MM/DD'); + const formattedFromDate = moment(query.fromDate).format('YYYY/MM/DD'); + const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDate}`; + + return { + ...commonMeta, + sheetName: 'Transactions By Vendor', + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorPdf.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorPdf.ts index 6c8b7f68a..54ab1be40 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorPdf.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorPdf.ts @@ -22,13 +22,12 @@ export class TransactionsByVendorsPdf { query: ITransactionsByVendorsFilter ): Promise { const table = await this.transactionsByVendorTable.table(tenantId, query); - const sheetName = 'Transactions By Vendors'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedDateRange ); } } diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts index 14ad3c1b4..2f8bf2498 100644 --- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts +++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorTable.ts @@ -43,7 +43,6 @@ export class TransactionsByVendorsTable extends TransactionsByContactsTableRows accessor: 'closingBalance.formattedAmount', }, ]; - return { ...tableRowMapper(vendor, columns, { rowTypes: [ROW_TYPE.VENDOR] }), children: R.pipe( @@ -82,6 +81,14 @@ export class TransactionsByVendorsTable extends TransactionsByContactsTableRows * @returns {ITableColumn[]} */ public tableColumns = (): ITableColumn[] => { - return []; + return [ + { key: 'vendor_name', label: 'Vendor name' }, + { key: 'account_name', label: 'Account Name' }, + { key: 'ref_type', label: 'Reference Type' }, + { key: 'transaction_type', label: 'Transaction Type' }, + { key: 'credit', label: 'Credit' }, + { key: 'debit', label: 'Debit' }, + { key: 'running_balance', label: 'Running Balance' }, + ]; }; } diff --git a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx index 7932d15d8..e0a0ab51c 100644 --- a/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx +++ b/packages/webapp/src/containers/FinancialStatements/ARAgingSummary/ARAgingSummaryActionsBar.tsx @@ -17,10 +17,10 @@ import NumberFormatDropdown from '@/components/NumberFormatDropdown'; import { useARAgingSummaryContext } from './ARAgingSummaryProvider'; import withARAgingSummaryActions from './withARAgingSummaryActions'; import withARAgingSummary from './withARAgingSummary'; +import withDialogActions from '@/containers/Dialog/withDialogActions'; import { compose, safeInvoke } from '@/utils'; import { ARAgingSummaryExportMenu } from './components'; -import withDialogActions from '@/containers/Dialog/withDialogActions'; import { DialogsName } from '@/constants/dialogs'; /** diff --git a/packages/webapp/src/hooks/query/FinancialReports/use-balance-sheet.ts b/packages/webapp/src/hooks/query/FinancialReports/use-balance-sheet.ts index 38fcc7764..2eb19959d 100644 --- a/packages/webapp/src/hooks/query/FinancialReports/use-balance-sheet.ts +++ b/packages/webapp/src/hooks/query/FinancialReports/use-balance-sheet.ts @@ -1,11 +1,15 @@ // @ts-nocheck + import { useRequestQuery } from '../../useQueryRequest'; import { useDownloadFile } from '../../useDownloadFile'; import { useRequestPdf } from '../../useRequestPdf'; import t from '../types'; /** - * Retrieve balance sheet. + * Fetches balance sheet data. + * @param {Object} query - The query parameters for the request. + * @param {Object} props - Additional options for the request. + * @returns {Object} The response object from the useRequestQuery hook. */ export function useBalanceSheet(query, props) { return useRequestQuery( @@ -25,6 +29,12 @@ export function useBalanceSheet(query, props) { ); } +/** + * Initiates a download of the balance sheet in XLSX format. + * @param {Object} query - The query parameters for the request. + * @param {Object} args - Additional configurations for the download. + * @returns {Function} A function to trigger the file download. + */ export const useBalanceSheetXlsxExport = (query, args) => { return useDownloadFile({ url: '/financial_statements/balance_sheet', @@ -39,6 +49,12 @@ export const useBalanceSheetXlsxExport = (query, args) => { }); }; +/** + * Initiates a download of the balance sheet in CSV format. + * @param {Object} query - The query parameters for the request. + * @param {Object} args - Additional configurations for the download. + * @returns {Function} A function to trigger the file download. + */ export const useBalanceSheetCsvExport = (query, args) => { return useDownloadFile({ url: '/financial_statements/balance_sheet', @@ -54,7 +70,9 @@ export const useBalanceSheetCsvExport = (query, args) => { }; /** - * Retrieves the balance sheet pdf document data. + * Fetches balance sheet data in PDF format. + * @param {Object} [query={}] - The query parameters for the request. + * @returns {Object} The response object from the useRequestPdf hook. */ export function useBalanceSheetPdf(query = {}) { return useRequestPdf({