From d16ec7cda9726c729feebcca3b240054585cae96 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Wed, 21 Feb 2024 14:55:06 +0200 Subject: [PATCH] feat(server): table sheet pdf --- .../BalanceSheet/BalanceSheetMeta.ts | 3 ++- .../FinancialStatements/TableSheetPdf.ts | 16 +++++++++++--- .../src/services/FinancialStatements/utils.ts | 21 +++++++++++++++++-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts index ac1b7a3bd..c7a3e87c0 100644 --- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts +++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetMeta.ts @@ -20,10 +20,11 @@ export class BalanceSheetMetaInjectable { const commonMeta = await this.financialSheetMeta.meta(tenantId); const formattedAsDate = moment(query.toDate).format('YYYY/MM/DD'); const formattedDateRange = `As ${formattedAsDate}`; + const sheetName = 'Balance Sheet Statement'; return { ...commonMeta, - sheetName: 'Balance Sheet', + sheetName, formattedAsDate, formattedDateRange, }; diff --git a/packages/server/src/services/FinancialStatements/TableSheetPdf.ts b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts index c7cbda662..44317978c 100644 --- a/packages/server/src/services/FinancialStatements/TableSheetPdf.ts +++ b/packages/server/src/services/FinancialStatements/TableSheetPdf.ts @@ -4,6 +4,7 @@ import { ITableColumn, ITableData, ITableRow } from '@/interfaces'; import { ChromiumlyTenancy } from '@/services/ChromiumlyTenancy/ChromiumlyTenancy'; import { TemplateInjectable } from '@/services/TemplateInjectable/TemplateInjectable'; import { FinancialTableStructure } from './FinancialTableStructure'; +import { tableClassNames } from './utils'; @Service() export class TableSheetPdf { @@ -25,21 +26,30 @@ export class TableSheetPdf { tenantId: number, table: ITableData, sheetName: string, - sheetDate: string + sheetDate: string, + customCSS?: string ): Promise { // Prepare columns and rows for PDF conversion const columns = this.tablePdfColumns(table.columns); const rows = this.tablePdfRows(table.rows); + const landscape = columns.length > 4; + // Generate HTML content from the template const htmlContent = await this.templateInjectable.render( tenantId, 'modules/financial-sheet', - { sheetName, sheetDate, table: { rows, columns } } + { + table: { rows, columns }, + sheetName, + sheetDate, + customCSS, + } ); // Convert the HTML content to PDF return this.chromiumlyTenancy.convertHtmlContent(tenantId, htmlContent, { margins: { top: 0, bottom: 0, left: 0, right: 0 }, + landscape, }); } /** @@ -63,6 +73,6 @@ export class TableSheetPdf { const flatNestedTree = curriedFlatNestedTree(R.__, { nestedPrefix: '', }); - return R.compose(flatNestedTree)(rows); + return R.compose(tableClassNames, flatNestedTree)(rows); }; } diff --git a/packages/server/src/services/FinancialStatements/utils.ts b/packages/server/src/services/FinancialStatements/utils.ts index 1114131b9..5d304ca6f 100644 --- a/packages/server/src/services/FinancialStatements/utils.ts +++ b/packages/server/src/services/FinancialStatements/utils.ts @@ -1,4 +1,5 @@ - +import { kebabCase } from 'lodash'; +import { ITableRow } from '@/interfaces'; export const formatNumber = (balance, { noCents, divideOn1000 }): string => { let formattedBalance: number = parseFloat(balance); @@ -10,4 +11,20 @@ export const formatNumber = (balance, { noCents, divideOn1000 }): string => { formattedBalance /= 1000; } return formattedBalance; -}; \ No newline at end of file +}; + +export const tableClassNames = (rows: ITableRow[]) => { + return rows.map((row) => { + const classNames = + row?.rowTypes?.map((rowType) => `row-type--${kebabCase(rowType)}`) || []; + + if (row.id) { + classNames.push(`row-id--${kebabCase(row.id)}`); + } + + return { + ...row, + classNames, + }; + }); +};