diff --git a/packages/server/resources/views/modules/financial-sheet.pug b/packages/server/resources/views/modules/financial-sheet.pug index 019c74626..7efb237ea 100644 --- a/packages/server/resources/views/modules/financial-sheet.pug +++ b/packages/server/resources/views/modules/financial-sheet.pug @@ -18,4 +18,4 @@ block content each row in table.rows tr each cell in row.cells - td= cell.value \ No newline at end of file + td!= cell.value \ No newline at end of file diff --git a/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts b/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts index 4c3aec4a9..188178a01 100644 --- a/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts +++ b/packages/server/src/api/controllers/FinancialStatements/GeneralLedger.ts @@ -16,7 +16,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo /** * Router constructor. */ - router() { + public router() { const router = Router(); router.get( @@ -32,7 +32,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo /** * Validation schema. */ - get validationSchema(): ValidationChain[] { + private get validationSchema(): ValidationChain[] { return [ query('from_date').optional().isISO8601(), query('to_date').optional().isISO8601(), @@ -61,7 +61,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo * @param {Request} req - * @param {Response} res - */ - async generalLedger(req: Request, res: Response, next: NextFunction) { + private async generalLedger(req: Request, res: Response, next: NextFunction) { const { tenantId } = req; const filter = this.matchedQueryData(req); const accept = this.accepts(req); diff --git a/packages/server/src/interfaces/BalanceSheet.ts b/packages/server/src/interfaces/BalanceSheet.ts index a74e48ee8..45e514287 100644 --- a/packages/server/src/interfaces/BalanceSheet.ts +++ b/packages/server/src/interfaces/BalanceSheet.ts @@ -2,6 +2,7 @@ import { INumberFormatQuery, IFormatNumberSettings, IFinancialSheetBranchesQuery, + IFinancialSheetCommonMeta, } from './FinancialStatements'; import { IFinancialTable } from './Table'; @@ -63,11 +64,7 @@ export interface IBalanceSheetQuery extends IFinancialSheetBranchesQuery { } // Balance sheet meta. -export interface IBalanceSheetMeta { - isCostComputeRunning: boolean; - organizationName: string; - baseCurrency: string; -} +export interface IBalanceSheetMeta extends IFinancialSheetCommonMeta {} export interface IBalanceSheetFormatNumberSettings extends IFormatNumberSettings { diff --git a/packages/server/src/interfaces/FinancialStatements.ts b/packages/server/src/interfaces/FinancialStatements.ts index fb1d77452..9050ea6d4 100644 --- a/packages/server/src/interfaces/FinancialStatements.ts +++ b/packages/server/src/interfaces/FinancialStatements.ts @@ -42,4 +42,12 @@ export enum ReportsAction { export interface IFinancialSheetBranchesQuery { branchesIds?: number[]; -} \ No newline at end of file +} + +export interface IFinancialSheetCommonMeta { + organizationName: string; + baseCurrency: string; + dateFormat: string; + isCostComputeRunning: boolean; + sheetName: string; +} diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts index 02e136ca1..52edfe4ef 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts @@ -4,15 +4,12 @@ import { IBalanceSheetStatementService, IBalanceSheetQuery, IBalanceSheetStatement, - IBalanceSheetMeta, } from '@/interfaces'; import TenancyService from '@/services/Tenancy/TenancyService'; -import Journal from '@/services/Accounting/JournalPoster'; import BalanceSheetStatement from './BalanceSheet'; -import InventoryService from '@/services/Inventory/Inventory'; -import { parseBoolean } from 'utils'; import { Tenant } from '@/system/models'; import BalanceSheetRepository from './BalanceSheetRepository'; +import { BalanceSheetMetaInjectable } from './BalanceSheetMeta'; @Service() export default class BalanceSheetStatementService @@ -22,7 +19,7 @@ export default class BalanceSheetStatementService private tenancy: TenancyService; @Inject() - private inventoryService: InventoryService; + private balanceSheetMeta: BalanceSheetMetaInjectable; /** * Defaults balance sheet filter query. @@ -62,33 +59,6 @@ export default class BalanceSheetStatementService }; } - /** - * Retrieve the balance sheet meta. - * @param {number} tenantId - - * @returns {IBalanceSheetMeta} - */ - private reportMetadata(tenantId: number): IBalanceSheetMeta { - 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 balance sheet statement. * @param {number} tenantId @@ -122,12 +92,15 @@ export default class BalanceSheetStatementService i18n ); // Balance sheet data. - const balanceSheetData = balanceSheetInstanace.reportData(); + const data = balanceSheetInstanace.reportData(); + + // Balance sheet meta. + const meta = await this.balanceSheetMeta.meta(tenantId); return { - data: balanceSheetData, query: filter, - meta: this.reportMetadata(tenantId), + data, + meta, }; } } diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts new file mode 100644 index 000000000..370a8b605 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts @@ -0,0 +1,23 @@ +import { Inject, Service } from 'typedi'; +import { FinancialSheetMeta } from '../FinancialSheetMeta'; +import { IBalanceSheetMeta } from '@/interfaces'; + +@Service() +export class BalanceSheetMetaInjectable { + @Inject() + private financialSheetMeta: FinancialSheetMeta; + + /** + * Retrieve the balance sheet meta. + * @param {number} tenantId - + * @returns {IBalanceSheetMeta} + */ + public async meta(tenantId: number): Promise { + const commonMeta = await this.financialSheetMeta.meta(tenantId); + + return { + ...commonMeta, + sheetName: 'Balance Sheet', + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetPdfInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetPdfInjectable.ts index 44fd991b3..691aacad2 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetPdfInjectable.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetPdfInjectable.ts @@ -22,12 +22,11 @@ export class BalanceSheetPdfInjectable { query: IBalanceSheetQuery ): Promise { const table = await this.balanceSheetTable.table(tenantId, query); - const sheetName = 'Balance Sheet'; return this.tableSheetPdf.convertToPdf( tenantId, table.table, - sheetName, + table.meta.sheetName, table.meta.baseCurrency ); } diff --git a/packages/server/src/services/FinancialStatements/FinancialSheetMeta.ts b/packages/server/src/services/FinancialStatements/FinancialSheetMeta.ts new file mode 100644 index 000000000..130f3caaa --- /dev/null +++ b/packages/server/src/services/FinancialStatements/FinancialSheetMeta.ts @@ -0,0 +1,34 @@ +import { TenantMetadata } from '@/system/models'; +import { Inject, Service } from 'typedi'; +import InventoryService from '../Inventory/Inventory'; +import { IFinancialSheetCommonMeta } from '@/interfaces'; + +@Service() +export class FinancialSheetMeta { + @Inject() + private inventoryService: InventoryService; + + /** + * Retrieves the common meta data of the financial sheet. + * @param {number} tenantId + * @returns {Promise} + */ + async meta(tenantId: number): Promise { + const tenantMetadata = await TenantMetadata.query().findOne({ tenantId }); + + const organizationName = tenantMetadata.name; + const baseCurrency = tenantMetadata.baseCurrency; + const dateFormat = tenantMetadata.dateFormat; + + const isCostComputeRunning = + this.inventoryService.isItemsCostComputeRunning(tenantId); + + return { + organizationName, + baseCurrency, + dateFormat, + isCostComputeRunning, + sheetName: '', + }; + } +} diff --git a/packages/server/src/services/FinancialStatements/TableSheetPdf.ts b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts index 16fd0f6f9..edf216020 100644 --- a/packages/server/src/services/FinancialStatements/TableSheetPdf.ts +++ b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts @@ -57,6 +57,12 @@ export class TableSheetPdf { * @returns {ITableRow[]} */ private tablePdfRows = (rows: ITableRow[]): ITableRow[] => { - return R.compose(FinancialTableStructure.flatNestedTree)(rows); + const curriedFlatNestedTree = R.curry( + FinancialTableStructure.flatNestedTree + ); + const flatNestedTree = curriedFlatNestedTree(R.__, { + nestedPrefix: '', + }); + return R.compose(flatNestedTree)(rows); }; } diff --git a/packages/server/src/system/models/TenantMetadata.ts b/packages/server/src/system/models/TenantMetadata.ts index 7040a6a68..98953dd43 100644 --- a/packages/server/src/system/models/TenantMetadata.ts +++ b/packages/server/src/system/models/TenantMetadata.ts @@ -2,6 +2,7 @@ import BaseModel from 'models/Model'; export default class TenantMetadata extends BaseModel { baseCurrency: string; + name: string; /** * Table name.