From 06e78db49df386d0785a147b47f3809234d969ff Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sat, 17 Feb 2024 23:36:29 +0200 Subject: [PATCH] feat(server): financial reports meta --- .../src/interfaces/APAgingSummaryReport.ts | 18 ++- .../src/interfaces/ARAgingSummaryReport.ts | 8 ++ packages/server/src/interfaces/AgingReport.ts | 11 +- .../server/src/interfaces/BalanceSheet.ts | 3 +- .../src/interfaces/CustomerBalanceSummary.ts | 8 ++ .../src/interfaces/FinancialStatements.ts | 1 + .../src/interfaces/GeneralLedgerSheet.ts | 124 +++++++++--------- .../interfaces/IInventoryValuationSheet.ts | 13 +- .../server/src/interfaces/InventoryDetails.ts | 13 +- .../server/src/interfaces/JournalReport.ts | 9 +- .../src/interfaces/PurchasesByItemsSheet.ts | 12 +- .../src/interfaces/SalesByItemsSheet.ts | 14 +- .../interfaces/SalesTaxLiabilitySummary.ts | 8 +- .../src/interfaces/TransactionsByCustomers.ts | 7 + .../src/interfaces/TransactionsByVendors.ts | 11 +- .../src/interfaces/VendorBalanceSummary.ts | 13 +- .../AgingSummary/APAgingSummaryMeta.ts | 26 ++++ .../APAgingSummaryPdfInjectable.ts | 5 +- .../AgingSummary/APAgingSummaryService.ts | 43 ++---- .../AgingSummary/ARAgingSummaryMeta.ts | 26 ++++ .../ARAgingSummaryPdfInjectable.ts | 5 +- .../AgingSummary/ARAgingSummaryService.ts | 37 ++---- .../ARAgingSummaryTableInjectable.ts | 1 + .../AgingSummary/AgingSummaryMeta.ts | 30 +++++ .../BalanceSheet/BalanceSheetMeta.ts | 10 +- .../BalanceSheet/BalanceSheetNetIncome.ts | 1 + .../BalanceSheet/BalanceSheetTable.ts | 4 +- .../CustomerBalanceSummaryApplication.ts | 2 +- .../CustomerBalanceSummaryMeta.ts | 35 +++++ .../CustomerBalanceSummaryPdf.ts | 10 +- .../CustomerBalanceSummaryService.ts | 11 +- .../CustomerBalanceSummaryTableInjectable.ts | 1 + .../GeneralLedger/GeneralLedgerMeta.ts | 33 +++++ .../GeneralLedger/GeneralLedgerPdf.ts | 17 ++- .../GeneralLedger/GeneralLedgerService.ts | 63 ++------- .../InventoryDetails/InventoryDetailsMeta.ts | 33 +++++ .../InventoryDetailsService.ts | 41 +----- .../InventoryDetailsTablePdf.ts | 17 +-- .../InventoryValuationSheetMeta.ts | 33 +++++ .../InventoryValuationSheetPdf.ts | 5 +- .../InventoryValuationSheetService.ts | 36 ++--- .../JournalSheet/JournalSheetMeta.ts | 34 +++++ .../JournalSheet/JournalSheetPdfInjectable.ts | 5 +- .../JournalSheet/JournalSheetService.ts | 45 ++----- .../PurchasesByItems/PurchasesByItemsMeta.ts | 36 +++++ .../PurchasesByItems/PurchasesByItemsPdf.ts | 5 +- .../PurchasesByItemsService.ts | 35 ++--- .../SalesByItems/SalesByItems.ts | 1 + .../SalesByItems/SalesByItemsApplication.ts | 1 + .../SalesByItems/SalesByItemsMeta.ts | 33 +++++ .../SalesByItems/SalesByItemsPdfInjectable.ts | 5 +- .../SalesByItems/SalesByItemsService.ts | 43 ++---- .../SalesTaxLiabilitySummaryApplication.ts | 1 + .../SalesTaxLiabilitySummaryMeta.ts | 32 +++++ .../SalesTaxLiabilitySummaryService.ts | 36 +---- .../SalesTaxLiabiltiySummaryPdf.ts | 11 +- .../FinancialStatements/TableSheetPdf.ts | 24 ++-- .../VendorBalanceSummaryApplication.ts | 1 + .../VendorBalanceSummaryMeta.ts | 32 +++++ .../VendorBalanceSummaryPdf.ts | 6 +- .../VendorBalanceSummaryService.ts | 15 ++- .../VendorBalanceSummaryTableInjectable.ts | 1 + 62 files changed, 726 insertions(+), 474 deletions(-) create mode 100644 packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/AgingSummary/AgingSummaryMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryMeta.ts create mode 100644 packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryMeta.ts diff --git a/packages/server/src/interfaces/APAgingSummaryReport.ts b/packages/server/src/interfaces/APAgingSummaryReport.ts index 2d7a8a447..21ed036c7 100644 --- a/packages/server/src/interfaces/APAgingSummaryReport.ts +++ b/packages/server/src/interfaces/APAgingSummaryReport.ts @@ -5,6 +5,7 @@ import { IAgingSummaryContact, IAgingSummaryData, } from './AgingReport'; +import { IFinancialSheetCommonMeta } from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface IAPAgingSummaryQuery extends IAgingSummaryQuery { @@ -23,17 +24,22 @@ export interface IAPAgingSummaryData extends IAgingSummaryData { export type IAPAgingSummaryColumns = IAgingPeriod[]; -export interface IARAgingSummaryMeta { - baseCurrency: string; - organizationName: string; +export interface IARAgingSummaryMeta extends IFinancialSheetCommonMeta { + formattedAsDate: string; } -export interface IAPAgingSummaryMeta { - baseCurrency: string; - organizationName: string; +export interface IAPAgingSummaryMeta extends IFinancialSheetCommonMeta { + formattedAsDate: string; } export interface IAPAgingSummaryTable extends IFinancialTable { query: IAPAgingSummaryQuery; meta: IAPAgingSummaryMeta; } + +export interface IAPAgingSummarySheet { + data: IAPAgingSummaryData; + meta: IAPAgingSummaryMeta; + query: IAPAgingSummaryQuery; + columns: any; +} diff --git a/packages/server/src/interfaces/ARAgingSummaryReport.ts b/packages/server/src/interfaces/ARAgingSummaryReport.ts index d42fc8f7f..b20753927 100644 --- a/packages/server/src/interfaces/ARAgingSummaryReport.ts +++ b/packages/server/src/interfaces/ARAgingSummaryReport.ts @@ -32,3 +32,11 @@ export interface IARAgingSummaryTable extends IFinancialTable { meta: IARAgingSummaryMeta; query: IARAgingSummaryQuery; } + +export interface IARAgingSummarySheet { + data: IARAgingSummaryData; + meta: IARAgingSummaryMeta; + query: IARAgingSummaryQuery; + columns: IARAgingSummaryColumns; +} + diff --git a/packages/server/src/interfaces/AgingReport.ts b/packages/server/src/interfaces/AgingReport.ts index c68b6b389..dc2a0dd1b 100644 --- a/packages/server/src/interfaces/AgingReport.ts +++ b/packages/server/src/interfaces/AgingReport.ts @@ -1,5 +1,7 @@ - -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; export interface IAgingPeriodTotal extends IAgingPeriod { total: IAgingAmount; @@ -42,3 +44,8 @@ export interface IAgingSummaryTotal { export interface IAgingSummaryData { total: IAgingSummaryTotal; } + +export interface IAgingSummaryMeta extends IFinancialSheetCommonMeta { + formattedAsDate: string; + formattedDateRange: string; +} diff --git a/packages/server/src/interfaces/BalanceSheet.ts b/packages/server/src/interfaces/BalanceSheet.ts index ddc36a53a..567cb8764 100644 --- a/packages/server/src/interfaces/BalanceSheet.ts +++ b/packages/server/src/interfaces/BalanceSheet.ts @@ -65,8 +65,7 @@ export interface IBalanceSheetQuery extends IFinancialSheetBranchesQuery { // Balance sheet meta. export interface IBalanceSheetMeta extends IFinancialSheetCommonMeta { - formattedFromDate: string; - formattedToDate: string; + formattedAsDate: string; formattedDateRange: string; } diff --git a/packages/server/src/interfaces/CustomerBalanceSummary.ts b/packages/server/src/interfaces/CustomerBalanceSummary.ts index cf5b5900d..c55452d98 100644 --- a/packages/server/src/interfaces/CustomerBalanceSummary.ts +++ b/packages/server/src/interfaces/CustomerBalanceSummary.ts @@ -4,6 +4,7 @@ import { IContactBalanceSummaryPercentage, IContactBalanceSummaryTotal, } from './ContactBalanceSummary'; +import { IFinancialSheetCommonMeta } from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface ICustomerBalanceSummaryQuery @@ -35,9 +36,15 @@ export interface ICustomerBalanceSummaryData { total: ICustomerBalanceSummaryTotal; } +export interface ICustomerBalanceSummaryMeta extends IFinancialSheetCommonMeta { + formattedAsDate: string; + formattedDateRange: string; +} + export interface ICustomerBalanceSummaryStatement { data: ICustomerBalanceSummaryData; query: ICustomerBalanceSummaryQuery; + meta: ICustomerBalanceSummaryMeta; } export interface ICustomerBalanceSummaryService { @@ -49,4 +56,5 @@ export interface ICustomerBalanceSummaryService { export interface ICustomerBalanceSummaryTable extends IFinancialTable { query: ICustomerBalanceSummaryQuery; + meta: ICustomerBalanceSummaryMeta; } diff --git a/packages/server/src/interfaces/FinancialStatements.ts b/packages/server/src/interfaces/FinancialStatements.ts index 9050ea6d4..abf2468c6 100644 --- a/packages/server/src/interfaces/FinancialStatements.ts +++ b/packages/server/src/interfaces/FinancialStatements.ts @@ -50,4 +50,5 @@ export interface IFinancialSheetCommonMeta { dateFormat: string; isCostComputeRunning: boolean; sheetName: string; + } diff --git a/packages/server/src/interfaces/GeneralLedgerSheet.ts b/packages/server/src/interfaces/GeneralLedgerSheet.ts index 6b863a192..6de1bda3b 100644 --- a/packages/server/src/interfaces/GeneralLedgerSheet.ts +++ b/packages/server/src/interfaces/GeneralLedgerSheet.ts @@ -1,92 +1,90 @@ -import { IFinancialTable } from "./Table"; - +import { IFinancialSheetCommonMeta } from './FinancialStatements'; +import { IFinancialTable } from './Table'; export interface IGeneralLedgerSheetQuery { - fromDate: Date | string, - toDate: Date | string, - basis: string, + fromDate: Date | string; + toDate: Date | string; + basis: string; numberFormat: { - noCents: boolean, - divideOn1000: boolean, - }, - noneTransactions: boolean, - accountsIds: number[], + noCents: boolean; + divideOn1000: boolean; + }; + noneTransactions: boolean; + accountsIds: number[]; branchesIds?: number[]; -}; +} export interface IGeneralLedgerSheetAccountTransaction { - id: number, + id: number; - amount: number, - runningBalance: number, - credit: number, - debit: number, + amount: number; + runningBalance: number; + credit: number; + debit: number; - formattedAmount: string, - formattedCredit: string, - formattedDebit: string, - formattedRunningBalance: string, + formattedAmount: string; + formattedCredit: string; + formattedDebit: string; + formattedRunningBalance: string; - currencyCode: string, - note?: string, + currencyCode: string; + note?: string; - transactionType?: string, - transactionNumber: string, + transactionType?: string; + transactionNumber: string; - referenceId?: number, - referenceType?: string, + referenceId?: number; + referenceType?: string; - date: Date|string, + date: Date | string; dateFormatted: string; -}; +} export interface IGeneralLedgerSheetAccountBalance { - date: Date|string, - amount: number, - formattedAmount: string, - currencyCode: string, + date: Date | string; + amount: number; + formattedAmount: string; + currencyCode: string; } export interface IGeneralLedgerSheetAccount { - id: number, - name: string, - code: string, - index: number, - parentAccountId: number, - transactions: IGeneralLedgerSheetAccountTransaction[], - openingBalance: IGeneralLedgerSheetAccountBalance, - closingBalance: IGeneralLedgerSheetAccountBalance, + id: number; + name: string; + code: string; + index: number; + parentAccountId: number; + transactions: IGeneralLedgerSheetAccountTransaction[]; + openingBalance: IGeneralLedgerSheetAccountBalance; + closingBalance: IGeneralLedgerSheetAccountBalance; } export type IGeneralLedgerSheetData = IGeneralLedgerSheetAccount[]; export interface IAccountTransaction { - id: number, - index: number, - draft: boolean, - note: string, - accountId: number, - transactionType: string, - referenceType: string, - referenceId: number, - contactId: number, - contactType: string, - credit: number, - debit: number, - date: string|Date, - createdAt: string|Date, - updatedAt: string|Date, + id: number; + index: number; + draft: boolean; + note: string; + accountId: number; + transactionType: string; + referenceType: string; + referenceId: number; + contactId: number; + contactType: string; + credit: number; + debit: number; + date: string | Date; + createdAt: string | Date; + updatedAt: string | Date; } -export interface IGeneralLedgerMeta { - isCostComputeRunning: boolean, - organizationName: string, - baseCurrency: string, - fromDate: string; - toDate: string; -}; +export interface IGeneralLedgerMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; +} export interface IGeneralLedgerTableData extends IFinancialTable { meta: IGeneralLedgerMeta; query: IGeneralLedgerSheetQuery; -} \ No newline at end of file +} diff --git a/packages/server/src/interfaces/IInventoryValuationSheet.ts b/packages/server/src/interfaces/IInventoryValuationSheet.ts index ab006d7b3..a5bd5d051 100644 --- a/packages/server/src/interfaces/IInventoryValuationSheet.ts +++ b/packages/server/src/interfaces/IInventoryValuationSheet.ts @@ -1,4 +1,7 @@ -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface IInventoryValuationReportQuery { @@ -13,10 +16,10 @@ export interface IInventoryValuationReportQuery { branchesIds?: number[]; } -export interface IInventoryValuationSheetMeta { - organizationName: string; - baseCurrency: string; - isCostComputeRunning: boolean; +export interface IInventoryValuationSheetMeta + extends IFinancialSheetCommonMeta { + formattedAsDate: string; + formattedDateRange: string; } export interface IInventoryValuationItem { diff --git a/packages/server/src/interfaces/InventoryDetails.ts b/packages/server/src/interfaces/InventoryDetails.ts index 033ec269d..8da644540 100644 --- a/packages/server/src/interfaces/InventoryDetails.ts +++ b/packages/server/src/interfaces/InventoryDetails.ts @@ -1,4 +1,7 @@ -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface IInventoryDetailsQuery { @@ -79,10 +82,10 @@ export type IInventoryDetailsNode = | IInventoryDetailsItemTransaction; export type IInventoryDetailsData = IInventoryDetailsItem[]; -export interface IInventoryItemDetailMeta { - isCostComputeRunning: boolean; - organizationName: string; - baseCurrency: string; +export interface IInventoryItemDetailMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDay: string; + formattedDateRange: string; } export interface IInvetoryItemDetailDOO { diff --git a/packages/server/src/interfaces/JournalReport.ts b/packages/server/src/interfaces/JournalReport.ts index c003cccf0..319bf526c 100644 --- a/packages/server/src/interfaces/JournalReport.ts +++ b/packages/server/src/interfaces/JournalReport.ts @@ -1,3 +1,4 @@ +import { IFinancialSheetCommonMeta } from './FinancialStatements'; import { IJournalEntry } from './Journal'; import { IFinancialTable } from './Table'; @@ -32,10 +33,10 @@ export interface IJournalReport { entries: IJournalReportEntriesGroup[]; } -export interface IJournalSheetMeta { - isCostComputeRunning: boolean; - organizationName: string; - baseCurrency: string; +export interface IJournalSheetMeta extends IFinancialSheetCommonMeta { + formattedDateRange: string; + formattedFromDate: string; + formattedToDate: string; } export interface IJournalTable extends IFinancialTable { diff --git a/packages/server/src/interfaces/PurchasesByItemsSheet.ts b/packages/server/src/interfaces/PurchasesByItemsSheet.ts index f08fb97af..fcd1ee8d9 100644 --- a/packages/server/src/interfaces/PurchasesByItemsSheet.ts +++ b/packages/server/src/interfaces/PurchasesByItemsSheet.ts @@ -1,4 +1,7 @@ -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface IPurchasesByItemsReportQuery { @@ -10,9 +13,10 @@ export interface IPurchasesByItemsReportQuery { onlyActive: boolean; } -export interface IPurchasesByItemsSheetMeta { - organizationName: string; - baseCurrency: string; +export interface IPurchasesByItemsSheetMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; } export interface IPurchasesByItemsItem { diff --git a/packages/server/src/interfaces/SalesByItemsSheet.ts b/packages/server/src/interfaces/SalesByItemsSheet.ts index 84f49960b..789ebae77 100644 --- a/packages/server/src/interfaces/SalesByItemsSheet.ts +++ b/packages/server/src/interfaces/SalesByItemsSheet.ts @@ -1,4 +1,7 @@ -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface ISalesByItemsReportQuery { @@ -10,9 +13,10 @@ export interface ISalesByItemsReportQuery { onlyActive: boolean; } -export interface ISalesByItemsSheetMeta { - organizationName: string; - baseCurrency: string; +export interface ISalesByItemsSheetMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; } export interface ISalesByItemsItem { @@ -51,4 +55,4 @@ export interface ISalesByItemsSheet { export interface ISalesByItemsTable extends IFinancialTable { query: ISalesByItemsReportQuery; meta: ISalesByItemsSheetMeta; -} \ No newline at end of file +} diff --git a/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts b/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts index 2fbc9f13d..b37d8a384 100644 --- a/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts +++ b/packages/server/src/interfaces/SalesTaxLiabilitySummary.ts @@ -1,3 +1,4 @@ +import { IFinancialSheetCommonMeta } from "./FinancialStatements"; import { IFinancialTable } from "./Table"; export interface SalesTaxLiabilitySummaryQuery { @@ -47,9 +48,10 @@ export type SalesTaxLiabilitySummarySalesById = Record< { taxRateId: number; credit: number; debit: number } >; -export interface SalesTaxLiabilitySummaryMeta { - organizationName: string; - baseCurrency: string; +export interface SalesTaxLiabilitySummaryMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; } export interface ISalesTaxLiabilitySummaryTable extends IFinancialTable { diff --git a/packages/server/src/interfaces/TransactionsByCustomers.ts b/packages/server/src/interfaces/TransactionsByCustomers.ts index fcfb01ea6..7635745c6 100644 --- a/packages/server/src/interfaces/TransactionsByCustomers.ts +++ b/packages/server/src/interfaces/TransactionsByCustomers.ts @@ -1,3 +1,4 @@ +import { IFinancialSheetCommonMeta } from './FinancialStatements'; import { IFinancialTable, ITableData } from './Table'; import { ITransactionsByContactsAmount, @@ -40,3 +41,9 @@ export interface ITransactionsByCustomersService { filter: ITransactionsByCustomersFilter ): Promise; } +export interface ITransactionsByCustomersMeta + extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; +} diff --git a/packages/server/src/interfaces/TransactionsByVendors.ts b/packages/server/src/interfaces/TransactionsByVendors.ts index ae129bc79..7a5b16013 100644 --- a/packages/server/src/interfaces/TransactionsByVendors.ts +++ b/packages/server/src/interfaces/TransactionsByVendors.ts @@ -1,3 +1,4 @@ +import { IFinancialSheetCommonMeta } from './FinancialStatements'; import { IFinancialTable } from './Table'; import { ITransactionsByContactsAmount, @@ -27,6 +28,8 @@ export type ITransactionsByVendorsData = ITransactionsByVendorsVendor[]; export interface ITransactionsByVendorsStatement { data: ITransactionsByVendorsData; + query: ITransactionsByVendorsFilter; + meta: ITransactionsByVendorMeta; } export interface ITransactionsByVendorsService { @@ -38,4 +41,10 @@ export interface ITransactionsByVendorsService { export interface ITransactionsByVendorTable extends IFinancialTable { query: ITransactionsByVendorsFilter; -} \ No newline at end of file + meta: ITransactionsByVendorMeta; +} +export interface ITransactionsByVendorMeta extends IFinancialSheetCommonMeta { + formattedFromDate: string; + formattedToDate: string; + formattedDateRange: string; +} diff --git a/packages/server/src/interfaces/VendorBalanceSummary.ts b/packages/server/src/interfaces/VendorBalanceSummary.ts index d214202df..5c603c51d 100644 --- a/packages/server/src/interfaces/VendorBalanceSummary.ts +++ b/packages/server/src/interfaces/VendorBalanceSummary.ts @@ -1,4 +1,7 @@ -import { INumberFormatQuery } from './FinancialStatements'; +import { + IFinancialSheetCommonMeta, + INumberFormatQuery, +} from './FinancialStatements'; import { IFinancialTable } from './Table'; export interface IVendorBalanceSummaryQuery { @@ -39,8 +42,9 @@ export interface IVendorBalanceSummaryData { export interface IVendorBalanceSummaryStatement { data: IVendorBalanceSummaryData; - columns: {}; query: IVendorBalanceSummaryQuery; + meta: IVendorBalanceSummaryMeta; + } export interface IVendorBalanceSummaryService { @@ -52,4 +56,9 @@ export interface IVendorBalanceSummaryService { export interface IVendorBalanceSummaryTable extends IFinancialTable { query: IVendorBalanceSummaryQuery; + meta: IVendorBalanceSummaryMeta; +} + +export interface IVendorBalanceSummaryMeta extends IFinancialSheetCommonMeta { + formattedAsDate: string; } diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryMeta.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryMeta.ts new file mode 100644 index 000000000..a32fe6457 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryMeta.ts @@ -0,0 +1,26 @@ +import { Inject, Service } from 'typedi'; +import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces'; +import { AgingSummaryMeta } from './AgingSummaryMeta'; + +@Service() +export class APAgingSummaryMeta { + @Inject() + private agingSummaryMeta: AgingSummaryMeta; + + /** + * Retrieve the aging summary meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IAgingSummaryQuery + ): Promise { + const commonMeta = await this.agingSummaryMeta.meta(tenantId, query); + + return { + ...commonMeta, + sheetName: 'A/P Aging Summary', + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryPdfInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryPdfInjectable.ts index e1a74f80a..073970b91 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryPdfInjectable.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryPdfInjectable.ts @@ -22,13 +22,12 @@ export class APAgingSummaryPdfInjectable { query: IAPAgingSummaryQuery ): Promise { const table = await this.APAgingSummaryTable.table(tenantId, query); - const sheetName = 'AR Aging Summary'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedAsDate ); } } diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts index fa3e6a2b3..49ee46448 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts @@ -1,18 +1,19 @@ import moment from 'moment'; import { Inject, Service } from 'typedi'; import { isEmpty } from 'lodash'; -import { IAPAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces'; +import { IAPAgingSummaryQuery, IAPAgingSummarySheet } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; import APAgingSummarySheet from './APAgingSummarySheet'; import { Tenant } from '@/system/models'; +import { APAgingSummaryMeta } from './APAgingSummaryMeta'; @Service() export class APAgingSummaryService { @Inject() - tenancy: TenancyService; + private tenancy: TenancyService; - @Inject('logger') - logger: any; + @Inject() + private APAgingSummaryMeta: APAgingSummaryMeta; /** * Default report query. @@ -35,35 +36,16 @@ export class APAgingSummaryService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): IARAgingSummaryMeta { - const settings = this.tenancy.settings(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, - }; - } - /** * Retrieve A/P aging summary report. * @param {number} tenantId - * @param {IAPAgingSummaryQuery} query - + * @returns {Promise} */ - async APAgingSummary(tenantId: number, query: IAPAgingSummaryQuery) { + public async APAgingSummary( + tenantId: number, + query: IAPAgingSummaryQuery + ): Promise { const { Bill } = this.tenancy.models(tenantId); const { vendorRepository } = this.tenancy.repositories(tenantId); @@ -111,11 +93,14 @@ export class APAgingSummaryService { const data = APAgingSummaryReport.reportData(); const columns = APAgingSummaryReport.reportColumns(); + // Retrieve the aging summary report meta. + const meta = await this.APAgingSummaryMeta.meta(tenantId, filter); + return { data, columns, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryMeta.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryMeta.ts new file mode 100644 index 000000000..dce2cb9d0 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryMeta.ts @@ -0,0 +1,26 @@ +import { Inject, Service } from 'typedi'; +import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces'; +import { AgingSummaryMeta } from './AgingSummaryMeta'; + +@Service() +export class ARAgingSummaryMeta { + @Inject() + private agingSummaryMeta: AgingSummaryMeta; + + /** + * Retrieve the aging summary meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IAgingSummaryQuery + ): Promise { + const commonMeta = await this.agingSummaryMeta.meta(tenantId, query); + + return { + ...commonMeta, + sheetName: 'A/R Aging Summary', + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryPdfInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryPdfInjectable.ts index 57ea3fef5..b0031ac37 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryPdfInjectable.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryPdfInjectable.ts @@ -22,13 +22,12 @@ export class ARAgingSummaryPdfInjectable { query: IARAgingSummaryQuery ): Promise { const table = await this.ARAgingSummaryTable.table(tenantId, query); - const sheetName = 'AR Aging Summary'; 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/AgingSummary/ARAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts index e13dfc276..d52709027 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts @@ -1,18 +1,19 @@ import moment from 'moment'; import { Inject, Service } from 'typedi'; import { isEmpty } from 'lodash'; -import { IARAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces'; +import { IARAgingSummaryQuery } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; import ARAgingSummarySheet from './ARAgingSummarySheet'; import { Tenant } from '@/system/models'; +import { ARAgingSummaryMeta } from './ARAgingSummaryMeta'; @Service() export default class ARAgingSummaryService { @Inject() - tenancy: TenancyService; + private tenancy: TenancyService; - @Inject('logger') - logger: any; + @Inject() + private ARAgingSummaryMeta: ARAgingSummaryMeta; /** * Default report query. @@ -35,29 +36,6 @@ export default class ARAgingSummaryService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): IARAgingSummaryMeta { - const settings = this.tenancy.settings(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, - }; - } - /** * Retrieve A/R aging summary report. * @param {number} tenantId - Tenant id. @@ -110,11 +88,14 @@ export default class ARAgingSummaryService { const data = ARAgingSummaryReport.reportData(); const columns = ARAgingSummaryReport.reportColumns(); + // Retrieve the aging summary report meta. + const meta = await this.ARAgingSummaryMeta.meta(tenantId, filter); + return { data, columns, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts index 10ac9ee8c..6f702cfe4 100644 --- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts +++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryTableInjectable.ts @@ -19,6 +19,7 @@ export class ARAgingSummaryTableInjectable { query: IARAgingSummaryQuery ): Promise { const report = await this.ARAgingSummarySheet.ARAgingSummary( + tenantId, query ); diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/AgingSummaryMeta.ts b/packages/server/src/services/FinancialStatements/AgingSummary/AgingSummaryMeta.ts new file mode 100644 index 000000000..5d3599997 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/AgingSummary/AgingSummaryMeta.ts @@ -0,0 +1,30 @@ +import { Inject } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces'; +import moment from 'moment'; + +export class AgingSummaryMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the aging summary meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IAgingSummaryQuery + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedAsDate = moment(query.asDate).format('YYYY/MM/DD'); + const formattedDateRange = `As ${formattedAsDate}`; + + return { + ...commonMeta, + sheetName: 'A/P Aging Summary', + formattedAsDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts index 91ecb068c..ac1b7a3bd 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts @@ -18,16 +18,14 @@ export class BalanceSheetMetaInjectable { query: IBalanceSheetQuery ): 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}`; + const formattedAsDate = moment(query.toDate).format('YYYY/MM/DD'); + const formattedDateRange = `As ${formattedAsDate}`; return { ...commonMeta, sheetName: 'Balance Sheet', - formattedFromDate, - formattedToDate, - formattedDateRange + formattedAsDate, + formattedDateRange, }; } } diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts index a6695b370..a78624ae2 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetNetIncome.ts @@ -31,6 +31,7 @@ export const BalanceSheetNetIncome = (Base: any) => /** * Retrieves the closing balance of income accounts. * @returns {number} + * */ private getIncomeTotal = () => { const closeingBalance = this.repository.incomeLedger.getClosingBalance(); diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts index 088362766..66ab87cd5 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetTable.ts @@ -215,13 +215,13 @@ export default class BalanceSheetTable extends R.compose( /** * Retrieves the total children columns. - * @returns {ITableColumn[]} + * @returns {ITableColumn[]} */ private totalColumnChildren = (): ITableColumn[] => { return R.compose( R.unless( R.isEmpty, - R.concat([{ key: 'total', Label: this.i18n.__('balance_sheet.total') }]) + R.concat([{ key: 'total', label: this.i18n.__('balance_sheet.total') }]) ), R.concat(this.percentageColumns()), R.concat(this.getPreviousYearColumns()), diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts index a1693e7d8..78c532d08 100644 --- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryApplication.ts @@ -15,7 +15,7 @@ export class CustomerBalanceSummaryApplication { @Inject() private customerBalanceSummarySheet: CustomerBalanceSummaryService; - + @Inject() private customerBalanceSummaryPdf: CustomerBalanceSummaryPdf; diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryMeta.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryMeta.ts new file mode 100644 index 000000000..7639e8c4f --- /dev/null +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryMeta.ts @@ -0,0 +1,35 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { + ICustomerBalanceSummaryMeta, + ICustomerBalanceSummaryQuery, +} from '@/interfaces'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; + +@Service() +export class CustomerBalanceSummaryMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the customer balance summary meta. + * @param {number} tenantId + * @param {ICustomerBalanceSummaryQuery} query + * @returns {Promise} + */ + async meta( + tenantId: number, + query: ICustomerBalanceSummaryQuery + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedAsDate = moment(query.asDate).format('YYYY/MM/DD'); + const formattedDateRange = `As ${formattedAsDate}`; + + return { + ...commonMeta, + sheetName: 'Customer Balance Summary', + formattedAsDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryPdf.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryPdf.ts index 67e74349b..b1bff25d8 100644 --- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryPdf.ts +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryPdf.ts @@ -1,5 +1,6 @@ import { Inject, Service } from 'typedi'; -import { IAPAgingSummaryQuery, ICustomerBalanceSummaryQuery } from '@/interfaces'; +import { ICustomerBalanceSummaryQuery } from '@/interfaces'; + import { TableSheetPdf } from '../TableSheetPdf'; import { CustomerBalanceSummaryTableInjectable } from './CustomerBalanceSummaryTableInjectable'; @@ -12,7 +13,7 @@ export class CustomerBalanceSummaryPdf { private tableSheetPdf: TableSheetPdf; /** - * Converts the given A/P aging summary sheet table to pdf. + * Converts the given customer balance summary sheet table to pdf. * @param {number} tenantId - Tenant ID. * @param {IAPAgingSummaryQuery} query - Balance sheet query. * @returns {Promise} @@ -22,13 +23,12 @@ export class CustomerBalanceSummaryPdf { query: ICustomerBalanceSummaryQuery ): Promise { const table = await this.customerBalanceSummaryTable.table(tenantId, query); - const sheetName = 'Customer Balance Summary'; 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/CustomerBalanceSummary/CustomerBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts index 45345d931..38edc5174 100644 --- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts @@ -1,4 +1,4 @@ -import { Inject } from 'typedi'; +import { Inject, Service } from 'typedi'; import moment from 'moment'; import * as R from 'ramda'; import { @@ -12,13 +12,18 @@ import { CustomerBalanceSummaryReport } from './CustomerBalanceSummary'; import Ledger from '@/services/Accounting/Ledger'; import CustomerBalanceSummaryRepository from './CustomerBalanceSummaryRepository'; import { Tenant } from '@/system/models'; +import { CustomerBalanceSummaryMeta } from './CustomerBalanceSummaryMeta'; +@Service() export class CustomerBalanceSummaryService implements ICustomerBalanceSummaryService { @Inject() private reportRepository: CustomerBalanceSummaryRepository; + @Inject() + private customerBalanceSummaryMeta: CustomerBalanceSummaryMeta; + /** * Defaults balance sheet filter query. * @return {ICustomerBalanceSummaryQuery} @@ -96,11 +101,13 @@ export class CustomerBalanceSummaryService filter, tenant.metadata.baseCurrency ); + // Retrieve the customer balance summary meta. + const meta = await this.customerBalanceSummaryMeta.meta(tenantId, filter); return { data: report.reportData(), query: filter, - meta: {} + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts index be42a7417..edf4e5ea1 100644 --- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts +++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryTableInjectable.ts @@ -25,6 +25,7 @@ export class CustomerBalanceSummaryTableInjectable { tenantId: number, filter: ICustomerBalanceSummaryQuery ): Promise { + const i18n = this.tenancy.i18n(tenantId); const { data, query, meta } = await this.customerBalanceSummaryService.customerBalanceSummary( diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerMeta.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerMeta.ts new file mode 100644 index 000000000..00f312654 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerMeta.ts @@ -0,0 +1,33 @@ +import { IGeneralLedgerMeta, IGeneralLedgerSheetQuery } from '@/interfaces'; +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; + +@Service() +export class GeneralLedgerMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the balance sheet meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IGeneralLedgerSheetQuery + ): 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: 'Balance Sheet', + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerPdf.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerPdf.ts index d1d12ae43..f03a26ce7 100644 --- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerPdf.ts +++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerPdf.ts @@ -1,7 +1,7 @@ -import { Inject, Service } from "typedi"; -import { TableSheetPdf } from "../TableSheetPdf"; -import { GeneralLedgerTableInjectable } from "./GeneralLedgerTableInjectable"; -import { IGeneralLedgerSheetQuery } from "@/interfaces"; +import { Inject, Service } from 'typedi'; +import { TableSheetPdf } from '../TableSheetPdf'; +import { GeneralLedgerTableInjectable } from './GeneralLedgerTableInjectable'; +import { IGeneralLedgerSheetQuery } from '@/interfaces'; @Service() export class GeneralLedgerPdf { @@ -14,7 +14,7 @@ export class GeneralLedgerPdf { /** * Converts the general ledger sheet table to pdf. * @param {number} tenantId - Tenant ID. - * @param {IGeneralLedgerSheetQuery} query - + * @param {IGeneralLedgerSheetQuery} query - * @returns {Promise} */ public async pdf( @@ -22,13 +22,12 @@ export class GeneralLedgerPdf { query: IGeneralLedgerSheetQuery ): Promise { const table = await this.generalLedgerTable.table(tenantId, query); - const sheetName = 'General Ledger'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedDateRange ); } -} \ No newline at end of file +} diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts index 100239e39..53451d2d8 100644 --- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts +++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts @@ -6,9 +6,9 @@ import { IGeneralLedgerSheetQuery, IGeneralLedgerMeta } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; import Journal from '@/services/Accounting/JournalPoster'; import GeneralLedgerSheet from '@/services/FinancialStatements/GeneralLedger/GeneralLedger'; -import InventoryService from '@/services/Inventory/Inventory'; -import { transformToMap, parseBoolean } from 'utils'; +import { transformToMap } from 'utils'; import { Tenant } from '@/system/models'; +import { GeneralLedgerMeta } from './GeneralLedgerMeta'; const ERRORS = { ACCOUNTS_NOT_FOUND: 'ACCOUNTS_NOT_FOUND', @@ -17,13 +17,10 @@ const ERRORS = { @Service() export class GeneralLedgerService { @Inject() - tenancy: TenancyService; + private tenancy: TenancyService; @Inject() - inventoryService: InventoryService; - - @Inject('logger') - logger: any; + private generalLedgerMeta: GeneralLedgerMeta; /** * Defaults general ledger report filter query. @@ -59,40 +56,8 @@ export class GeneralLedgerService { } } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IGeneralLedgerMeta} - */ - reportMetadata(tenantId: number, filter): IGeneralLedgerMeta { - const settings = this.tenancy.settings(tenantId); - - const isCostComputeRunning = this.inventoryService - .isItemsCostComputeRunning(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - const fromDate = moment(filter.fromDate).format('YYYY MMM DD'); - const toDate = moment(filter.toDate).format('YYYY MMM DD'); - - return { - isCostComputeRunning: parseBoolean(isCostComputeRunning, false), - organizationName, - baseCurrency, - fromDate, - toDate - }; - } - /** * Retrieve general ledger report statement. - * ---------- * @param {number} tenantId * @param {IGeneralLedgerSheetQuery} query * @return {IGeneralLedgerStatement} @@ -103,13 +68,10 @@ export class GeneralLedgerService { ): Promise<{ data: any; query: IGeneralLedgerSheetQuery; - meta: IGeneralLedgerMeta + meta: IGeneralLedgerMeta; }> { - const { - accountRepository, - transactionsRepository, - contactRepository - } = this.tenancy.repositories(tenantId); + const { accountRepository, transactionsRepository, contactRepository } = + this.tenancy.repositories(tenantId); const i18n = this.tenancy.i18n(tenantId); @@ -133,13 +95,13 @@ export class GeneralLedgerService { const transactions = await transactionsRepository.journal({ fromDate: filter.fromDate, toDate: filter.toDate, - branchesIds: filter.branchesIds + branchesIds: filter.branchesIds, }); // Retreive opening balance credit/debit sumation. const openingBalanceTrans = await transactionsRepository.journal({ toDate: moment(filter.fromDate).subtract(1, 'day'), sumationCreditDebit: true, - branchesIds: filter.branchesIds + branchesIds: filter.branchesIds, }); // Transform array transactions to journal collection. const transactionsJournal = Journal.fromTransactions( @@ -147,7 +109,7 @@ export class GeneralLedgerService { tenantId, accountsGraph ); - // Accounts opening transactions. + // Accounts opening transactions. const openingTransJournal = Journal.fromTransactions( openingBalanceTrans, tenantId, @@ -167,10 +129,13 @@ export class GeneralLedgerService { // Retrieve general ledger report data. const reportData = generalLedgerInstance.reportData(); + // Retrieve general ledger report metadata. + const meta = await this.generalLedgerMeta.meta(tenantId, filter); + return { data: reportData, query: filter, - meta: this.reportMetadata(tenantId, filter), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsMeta.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsMeta.ts new file mode 100644 index 000000000..6c3001373 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsMeta.ts @@ -0,0 +1,33 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { IInventoryDetailsQuery, IInventoryItemDetailMeta } from '@/interfaces'; + +@Service() +export class InventoryDetailsMetaInjectable { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the inventoy details meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IInventoryDetailsQuery + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedFromDate = moment(query.fromDate).format('YYYY/MM/DD'); + const formattedToDay = moment(query.toDate).format('YYYY/MM/DD'); + const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDay}`; + + return { + ...commonMeta, + sheetName: 'Inventory Details', + formattedFromDate, + formattedToDay, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts index d74137753..e9b6614d6 100644 --- a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts +++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsService.ts @@ -1,17 +1,12 @@ import moment from 'moment'; import { Service, Inject } from 'typedi'; -import { - IInventoryDetailsQuery, - IInvetoryItemDetailDOO, - IInventoryItemDetailMeta, -} from '@/interfaces'; +import { IInventoryDetailsQuery, IInvetoryItemDetailDOO } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; import { InventoryDetails } from './InventoryDetails'; import FinancialSheet from '../FinancialSheet'; import InventoryDetailsRepository from './InventoryDetailsRepository'; -import InventoryService from '@/services/Inventory/Inventory'; -import { parseBoolean } from 'utils'; import { Tenant } from '@/system/models'; +import { InventoryDetailsMetaInjectable } from './InventoryDetailsMeta'; @Service() export class InventoryDetailsService extends FinancialSheet { @@ -22,7 +17,7 @@ export class InventoryDetailsService extends FinancialSheet { private reportRepo: InventoryDetailsRepository; @Inject() - private inventoryService: InventoryService; + private inventoryDetailsMeta: InventoryDetailsMetaInjectable; /** * Defaults balance sheet filter query. @@ -46,33 +41,6 @@ export class InventoryDetailsService extends FinancialSheet { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IInventoryItemDetailMeta} - */ - private reportMetadata(tenantId: number): IInventoryItemDetailMeta { - const settings = this.tenancy.settings(tenantId); - - const isCostComputeRunning = - this.inventoryService.isItemsCostComputeRunning(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - isCostComputeRunning: parseBoolean(isCostComputeRunning, false), - organizationName, - baseCurrency, - }; - } - /** * Retrieve the inventory details report data. * @param {number} tenantId - @@ -115,11 +83,12 @@ export class InventoryDetailsService extends FinancialSheet { tenant.metadata.baseCurrency, i18n ); + const meta = await this.inventoryDetailsMeta.meta(tenantId, query); return { data: inventoryDetailsInstance.reportData(), query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTablePdf.ts b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTablePdf.ts index 1c2077fc6..4128fb3b2 100644 --- a/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTablePdf.ts +++ b/packages/server/src/services/FinancialStatements/InventoryDetails/InventoryDetailsTablePdf.ts @@ -1,8 +1,7 @@ -import { Inject, Service } from "typedi"; -import { InventoryDetailsTableInjectable } from "./InventoryDetailsTableInjectable"; -import { TableSheetPdf } from "../TableSheetPdf"; -import { IInventoryDetailsQuery } from "@/interfaces"; - +import { Inject, Service } from 'typedi'; +import { InventoryDetailsTableInjectable } from './InventoryDetailsTableInjectable'; +import { TableSheetPdf } from '../TableSheetPdf'; +import { IInventoryDetailsQuery } from '@/interfaces'; @Service() export class InventoryDetailsTablePdf { @@ -23,14 +22,12 @@ export class InventoryDetailsTablePdf { query: IInventoryDetailsQuery ): Promise { const table = await this.inventoryDetailsTable.table(tenantId, query); - const sheetName = 'Inventory Items Details'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedDateRange ); } - -} \ No newline at end of file +} diff --git a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetMeta.ts b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetMeta.ts new file mode 100644 index 000000000..822253342 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetMeta.ts @@ -0,0 +1,33 @@ + + +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { IBalanceSheetMeta, IBalanceSheetQuery, IInventoryValuationReportQuery } from '@/interfaces'; +import moment from 'moment'; + +@Service() +export class InventoryValuationMetaInjectable { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the balance sheet meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IInventoryValuationReportQuery + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedAsDate = moment(query.asDate).format('YYYY/MM/DD'); + const formattedDateRange = `As ${formattedAsDate}`; + + return { + ...commonMeta, + sheetName: 'Inventory Valuation Sheet', + formattedAsDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetPdf.ts b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetPdf.ts index 6148816d8..31af8c5f9 100644 --- a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetPdf.ts +++ b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetPdf.ts @@ -23,13 +23,12 @@ export class InventoryValuationSheetPdf { query: IInventoryValuationReportQuery ): Promise { const table = await this.inventoryValuationTable.table(tenantId, query); - const sheetName = 'Inventory Valuation Sheet'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedDateRange ); } } \ No newline at end of file diff --git a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts index 7351522e9..4da85b21d 100644 --- a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts +++ b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts @@ -10,6 +10,7 @@ import TenancyService from '@/services/Tenancy/TenancyService'; import { InventoryValuationSheet } from './InventoryValuationSheet'; import InventoryService from '@/services/Inventory/Inventory'; import { Tenant } from '@/system/models'; +import { InventoryValuationMetaInjectable } from './InventoryValuationSheetMeta'; @Service() export class InventoryValuationSheetService { @@ -22,6 +23,9 @@ export class InventoryValuationSheetService { @Inject() inventoryService: InventoryService; + @Inject() + private inventoryValuationMeta: InventoryValuationMetaInjectable; + /** * Defaults balance sheet filter query. * @return {IBalanceSheetQuery} @@ -46,33 +50,6 @@ export class InventoryValuationSheetService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): IInventoryValuationSheetMeta { - const settings = this.tenancy.settings(tenantId); - - const isCostComputeRunning = - this.inventoryService.isItemsCostComputeRunning(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, - isCostComputeRunning, - }; - } - /** * Inventory valuation sheet. * @param {number} tenantId - Tenant id. @@ -136,10 +113,13 @@ export class InventoryValuationSheetService { // Retrieve the inventory valuation report data. const inventoryValuationData = inventoryValuationInstance.reportData(); + // Retrieves the inventorty valuation meta. + const meta = await this.inventoryValuationMeta.meta(tenantId, filter); + return { data: inventoryValuationData, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetMeta.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetMeta.ts new file mode 100644 index 000000000..5980e1e70 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetMeta.ts @@ -0,0 +1,34 @@ +import { Service, Inject } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import moment from 'moment'; +import { IJournalReportQuery, IJournalSheetMeta } from '@/interfaces'; + +@Service() +export class JournalSheetMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the journal sheet meta. + * @param {number} tenantId + * @param {IJournalReportQuery} query + * @returns {Promise} + */ + public async meta( + tenantId: number, + query: IJournalReportQuery + ): Promise { + const common = 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 { + ...common, + formattedDateRange, + formattedFromDate, + formattedToDate, + }; + } +} + diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetPdfInjectable.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetPdfInjectable.ts index e3fcbfb26..d3cdd11df 100644 --- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetPdfInjectable.ts +++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetPdfInjectable.ts @@ -22,13 +22,12 @@ export class JournalSheetPdfInjectable { query: IJournalReportQuery ): Promise { const table = await this.journalSheetTable.table(tenantId, query); - const sheetName = 'Journal Sheet'; 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/JournalSheet/JournalSheetService.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts index 69a319ff3..90027c3a1 100644 --- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts +++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts @@ -1,17 +1,12 @@ import { Service, Inject } from 'typedi'; import moment from 'moment'; -import { - IJournalReportQuery, - IJournalSheet, - IJournalSheetMeta, - IJournalTableData, -} from '@/interfaces'; +import { IJournalReportQuery, IJournalSheet } from '@/interfaces'; import JournalSheet from './JournalSheet'; import TenancyService from '@/services/Tenancy/TenancyService'; import Journal from '@/services/Accounting/JournalPoster'; -import InventoryService from '@/services/Inventory/Inventory'; import { Tenant } from '@/system/models'; -import { parseBoolean, transformToMap } from 'utils'; +import { transformToMap } from 'utils'; +import { JournalSheetMeta } from './JournalSheetMeta'; @Service() export class JournalSheetService { @@ -19,7 +14,7 @@ export class JournalSheetService { private tenancy: TenancyService; @Inject() - private inventoryService: InventoryService; + private journalSheetMeta: JournalSheetMeta; /** * Default journal sheet filter queyr. @@ -38,33 +33,6 @@ export class JournalSheetService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): IJournalSheetMeta { - const settings = this.tenancy.settings(tenantId); - - const isCostComputeRunning = - this.inventoryService.isItemsCostComputeRunning(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - isCostComputeRunning: parseBoolean(isCostComputeRunning, false), - organizationName, - baseCurrency, - }; - } - /** * Journal sheet. * @param {number} tenantId @@ -130,10 +98,13 @@ export class JournalSheetService { // Retrieve journal report columns. const journalSheetData = journalSheetInstance.reportData(); + // Retrieve the journal sheet meta. + const meta = await this.journalSheetMeta.meta(tenantId, filter); + return { data: journalSheetData, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsMeta.ts b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsMeta.ts new file mode 100644 index 000000000..4bb22c583 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsMeta.ts @@ -0,0 +1,36 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { + IPurchasesByItemsReportQuery, + IPurchasesByItemsSheetMeta, +} from '@/interfaces/PurchasesByItemsSheet'; + +@Service() +export class PurchasesByItemsMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the purchases by items meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IPurchasesByItemsReportQuery + ): 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: 'Purchases By Items', + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsPdf.ts b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsPdf.ts index 36645aeb3..aee73ed99 100644 --- a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsPdf.ts +++ b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsPdf.ts @@ -22,13 +22,12 @@ export class PurchasesByItemsPdf { query: IPurchasesByItemsReportQuery ): Promise { const table = await this.purchasesByItemsTable.table(tenantId, query); - const sheetName = 'Purchases By Items'; 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/PurchasesByItems/PurchasesByItemsService.ts b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts index b9455be39..a2d6240cb 100644 --- a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts +++ b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts @@ -6,19 +6,22 @@ import { Tenant } from '@/system/models'; import { IPurchasesByItemsReportQuery, IPurchasesByItemsSheet, - IPurchasesByItemsSheetMeta, } from '@/interfaces/PurchasesByItemsSheet'; +import { PurchasesByItemsMeta } from './PurchasesByItemsMeta'; @Service() export class PurchasesByItemsService { @Inject() private tenancy: TenancyService; + @Inject() + private purchasesByItemsMeta: PurchasesByItemsMeta; + /** * Defaults purchases by items filter query. * @return {IPurchasesByItemsReportQuery} */ - get defaultQuery(): IPurchasesByItemsReportQuery { + private get defaultQuery(): IPurchasesByItemsReportQuery { return { fromDate: moment().startOf('month').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'), @@ -35,29 +38,6 @@ export class PurchasesByItemsService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): IPurchasesByItemsSheetMeta { - const settings = this.tenancy.settings(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, - }; - } - /** * Retrieve balance sheet statement. * ------------- @@ -109,10 +89,13 @@ export class PurchasesByItemsService { ); const purchasesByItemsData = purchasesByItemsInstance.reportData(); + // Retrieve the purchases by items meta. + const meta = await this.purchasesByItemsMeta.meta(tenantId, query); + return { data: purchasesByItemsData, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItems.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItems.ts index 8c7e11256..9d96febd5 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItems.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItems.ts @@ -1,4 +1,5 @@ import { get, sumBy } from 'lodash'; + import * as R from 'ramda'; import FinancialSheet from '../FinancialSheet'; import { allPassedConditionsPass, transformToMap } from 'utils'; diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsApplication.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsApplication.ts index 2b0ffc959..3ca915e39 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsApplication.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsApplication.ts @@ -1,4 +1,5 @@ import { Inject, Service } from 'typedi'; + import { ISalesByItemsReportQuery, ISalesByItemsSheet, diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsMeta.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsMeta.ts new file mode 100644 index 000000000..e1e1d28e8 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsMeta.ts @@ -0,0 +1,33 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { ISalesByItemsReportQuery, ISalesByItemsSheetMeta } from '@/interfaces'; + +@Service() +export class SalesByItemsMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the sales by items meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: ISalesByItemsReportQuery + ): 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: 'Purchases By Items', + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsPdfInjectable.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsPdfInjectable.ts index 6cf3d98ec..68f46e952 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsPdfInjectable.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsPdfInjectable.ts @@ -22,13 +22,12 @@ export class SalesByItemsPdfInjectable { query: ISalesByItemsReportQuery ): Promise { const table = await this.salesByItemsTable.table(tenantId, query); - const sheetName = 'Sales By Items'; 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/SalesByItems/SalesByItemsService.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts index bad73e34b..1dc9b4f05 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts @@ -1,27 +1,24 @@ import { Service, Inject } from 'typedi'; import moment from 'moment'; -import { - ISalesByItemsReportQuery, - ISalesByItemsSheetMeta, - ISalesByItemsSheet, -} from '@/interfaces'; +import { ISalesByItemsReportQuery, ISalesByItemsSheet } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; import SalesByItems from './SalesByItems'; import { Tenant } from '@/system/models'; +import { SalesByItemsMeta } from './SalesByItemsMeta'; @Service() export class SalesByItemsReportService { @Inject() - tenancy: TenancyService; + private tenancy: TenancyService; - @Inject('logger') - logger: any; + @Inject() + private salesByItemsMeta: SalesByItemsMeta; /** * Defaults balance sheet filter query. * @return {IBalanceSheetQuery} */ - get defaultQuery(): ISalesByItemsReportQuery { + private get defaultQuery(): ISalesByItemsReportQuery { return { fromDate: moment().startOf('month').format('YYYY-MM-DD'), toDate: moment().format('YYYY-MM-DD'), @@ -38,29 +35,6 @@ export class SalesByItemsReportService { }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - reportMetadata(tenantId: number): ISalesByItemsSheetMeta { - const settings = this.tenancy.settings(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, - }; - } - /** * Retrieve balance sheet statement. * @param {number} tenantId @@ -112,10 +86,13 @@ export class SalesByItemsReportService { ); const salesByItemsData = sheet.reportData(); + // Retrieve the sales by items meta. + const meta = await this.salesByItemsMeta.meta(tenantId, query); + return { data: salesByItemsData, query: filter, - meta: this.reportMetadata(tenantId), + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts index 3b9f0d7b3..d5e73d28c 100644 --- a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts +++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryApplication.ts @@ -44,6 +44,7 @@ export class SalesTaxLiabilitySummaryApplication { * @param {number} tenantId * @param {SalesTaxLiabilitySummaryQuery} query * @returns {Promise} + * */ public xlsx( tenantId: number, diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryMeta.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryMeta.ts new file mode 100644 index 000000000..0d45366e3 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryMeta.ts @@ -0,0 +1,32 @@ +import { Inject, Service } from 'typedi'; +import moment from 'moment'; +import { SalesTaxLiabilitySummaryQuery } from '@/interfaces/SalesTaxLiabilitySummary'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; + +@Service() +export class SalesTaxLiabilitySummaryMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the report meta. + * @param {number} tenantId + * @param {SalesTaxLiabilitySummaryQuery} filter + */ + public async meta(tenantId: number, query: SalesTaxLiabilitySummaryQuery) { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedToDate = moment(query.toDate).format('YYYY/MM/DD'); + const formattedFromDate = moment(query.toDate).format('YYYY/MM/DD'); + const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDate}`; + + const sheetName = 'Sales Tax Liability Summary'; + + return { + ...commonMeta, + sheetName, + formattedFromDate, + formattedToDate, + formattedDateRange, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts index a1ec7a771..585e9e4d9 100644 --- a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts +++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabilitySummaryService.ts @@ -1,11 +1,8 @@ import { Inject, Service } from 'typedi'; import { SalesTaxLiabilitySummaryRepository } from './SalesTaxLiabilitySummaryRepository'; -import { - SalesTaxLiabilitySummaryMeta, - SalesTaxLiabilitySummaryQuery, -} from '@/interfaces/SalesTaxLiabilitySummary'; +import { SalesTaxLiabilitySummaryQuery } from '@/interfaces/SalesTaxLiabilitySummary'; import { SalesTaxLiabilitySummary } from './SalesTaxLiabilitySummary'; -import HasTenancyService from '@/services/Tenancy/TenancyService'; +import { SalesTaxLiabilitySummaryMeta } from './SalesTaxLiabilitySummaryMeta'; @Service() export class SalesTaxLiabilitySummaryService { @@ -13,7 +10,7 @@ export class SalesTaxLiabilitySummaryService { private repostiory: SalesTaxLiabilitySummaryRepository; @Inject() - private tenancy: HasTenancyService; + private salesTaxLiabilityMeta: SalesTaxLiabilitySummaryMeta; /** * Retrieve sales tax liability summary. @@ -39,33 +36,12 @@ export class SalesTaxLiabilitySummaryService { payableByRateId, salesByRateId ); + const meta = await this.salesTaxLiabilityMeta.meta(tenantId, query); + return { data: taxLiabilitySummary.reportData(), query, - meta: this.reportMetadata(tenantId), - }; - } - - /** - * Retrieve the report meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - private reportMetadata(tenantId: number): SalesTaxLiabilitySummaryMeta { - const settings = this.tenancy.settings(tenantId); - - const organizationName = settings.get({ - group: 'organization', - key: 'name', - }); - const baseCurrency = settings.get({ - group: 'organization', - key: 'base_currency', - }); - - return { - organizationName, - baseCurrency, + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabiltiySummaryPdf.ts b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabiltiySummaryPdf.ts index 1b9a509a0..742241842 100644 --- a/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabiltiySummaryPdf.ts +++ b/packages/server/src/services/FinancialStatements/SalesTaxLiabilitySummary/SalesTaxLiabiltiySummaryPdf.ts @@ -22,14 +22,15 @@ export class SalesTaxLiabiltiySummaryPdf { tenantId: number, query: SalesTaxLiabilitySummaryQuery ): Promise { - const table = await this.salesTaxLiabiltiySummaryTable.table(tenantId, query); - const sheetName = 'Sales Tax Liability Summary'; - + const table = await this.salesTaxLiabiltiySummaryTable.table( + tenantId, + query + ); 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/TableSheetPdf.ts b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts index edf216020..c7cbda662 100644 --- a/packages/server/src/services/FinancialStatements/TableSheetPdf.ts +++ b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts @@ -14,34 +14,34 @@ export class TableSheetPdf { private chromiumlyTenancy: ChromiumlyTenancy; /** - * Converts the table to PDF. - * @param {number} tenantId - - * @param {IFinancialTable} table - - * @param {string} sheetName - Sheet name. - * @param {string} sheetDate - Sheet date. + * Converts the table data into a PDF format. + * @param {number} tenantId - The unique identifier for the tenant. + * @param {ITableData} table - The table data to be converted. + * @param {string} sheetName - The name of the sheet. + * @param {string} sheetDate - The date of the sheet. + * @returns A promise that resolves with the PDF conversion result. */ public async convertToPdf( tenantId: number, table: ITableData, sheetName: string, sheetDate: string - ) { + ): Promise { + // Prepare columns and rows for PDF conversion const columns = this.tablePdfColumns(table.columns); const rows = this.tablePdfRows(table.rows); + + // Generate HTML content from the template const htmlContent = await this.templateInjectable.render( tenantId, 'modules/financial-sheet', - { - sheetName, - sheetDate, - table: { rows, columns }, - } + { sheetName, sheetDate, table: { rows, columns } } ); + // Convert the HTML content to PDF return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, { margins: { top: 0, bottom: 0, left: 0, right: 0 }, }); } - /** * Converts the table columns to pdf columns. * @param {ITableColumn[]} columns diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts index c02eac224..3ce6081f6 100644 --- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryApplication.ts @@ -72,5 +72,6 @@ export class VendorBalanceSummaryApplication { */ public pdf(tenantId: number, query: IVendorBalanceSummaryQuery) { return this.vendorBalanceSummaryPdf.pdf(tenantId, query); + } } diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryMeta.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryMeta.ts new file mode 100644 index 000000000..80071f8ca --- /dev/null +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryMeta.ts @@ -0,0 +1,32 @@ +import moment from 'moment'; +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { + IVendorBalanceSummaryMeta, + IVendorBalanceSummaryQuery, +} from '@/interfaces'; + +@Service() +export class VendorBalanceSummaryMeta { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieves the vendor balance summary meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta( + tenantId: number, + query: IVendorBalanceSummaryQuery + ): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + const formattedAsDate = moment(query.asDate).format('YYYY/MM/DD'); + + return { + ...commonMeta, + sheetName: 'Vendor Balance Summary', + formattedAsDate, + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryPdf.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryPdf.ts index a404d673e..90e21fbda 100644 --- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryPdf.ts +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryPdf.ts @@ -22,13 +22,13 @@ export class VendorBalanceSummaryPdf { query: IVendorBalanceSummaryQuery ): Promise { const table = await this.vendorBalanceSummaryTable.table(tenantId, query); - const sheetName = 'Sales By Items'; + return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, - table.meta.baseCurrency + table.meta.sheetName, + table.meta.formattedAsDate ); } } diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts index dfc529ab3..c64496b7b 100644 --- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts @@ -12,15 +12,21 @@ import { VendorBalanceSummaryReport } from './VendorBalanceSummary'; import Ledger from '@/services/Accounting/Ledger'; import VendorBalanceSummaryRepository from './VendorBalanceSummaryRepository'; import { Tenant } from '@/system/models'; +import { JournalSheetMeta } from '../JournalSheet/JournalSheetMeta'; + +import { VendorBalanceSummaryMeta } from './VendorBalanceSummaryMeta'; export class VendorBalanceSummaryService implements IVendorBalanceSummaryService { @Inject() - tenancy: TenancyService; + private tenancy: TenancyService; @Inject() - reportRepo: VendorBalanceSummaryRepository; + private reportRepo: VendorBalanceSummaryRepository; + + @Inject() + private vendorBalanceSummaryMeta: VendorBalanceSummaryMeta; /** * Defaults balance sheet filter query. @@ -43,6 +49,7 @@ export class VendorBalanceSummaryService } /** + * * Retrieve the vendors ledger entrjes. * @param {number} tenantId - * @param {Date|string} date - @@ -97,11 +104,13 @@ export class VendorBalanceSummaryService filter, tenant.metadata.baseCurrency ); + // Retrieve the vendor balance summary meta. + const meta = await this.vendorBalanceSummaryMeta.meta(tenantId, filter); return { data: reportInstance.reportData(), query: filter, - meta: {} + meta }; } } diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts index 19f0c889c..c055b1151 100644 --- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts +++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryTableInjectable.ts @@ -29,6 +29,7 @@ export class VendorBalanceSummaryTableInjectable { const { data, meta } = await this.vendorBalanceSummarySheet.vendorBalanceSummary( + tenantId, query );