From de5920f9109ef90c7cdf890712041b889d210cd2 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Fri, 26 Jan 2024 23:46:45 +0200 Subject: [PATCH] fix: Expense amounts should not be rounded --- packages/server/src/models/ExpenseCategory.ts | 2 ++ .../CRUD/ExpenseCategoryTransformer.ts | 25 +++++++++++++++++++ .../Expenses/CRUD/ExpenseTransformer.ts | 17 +++++++++++-- .../ExpenseDrawer/ExpenseDrawerFooter.tsx | 6 ++--- .../Drawers/ExpenseDrawer/utils.tsx | 3 +-- 5 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 packages/server/src/services/Expenses/CRUD/ExpenseCategoryTransformer.ts diff --git a/packages/server/src/models/ExpenseCategory.ts b/packages/server/src/models/ExpenseCategory.ts index 50416805e..21d61f7e8 100644 --- a/packages/server/src/models/ExpenseCategory.ts +++ b/packages/server/src/models/ExpenseCategory.ts @@ -2,6 +2,8 @@ import { Model } from 'objection'; import TenantModel from 'models/TenantModel'; export default class ExpenseCategory extends TenantModel { + amount: number; + /** * Table name */ diff --git a/packages/server/src/services/Expenses/CRUD/ExpenseCategoryTransformer.ts b/packages/server/src/services/Expenses/CRUD/ExpenseCategoryTransformer.ts new file mode 100644 index 000000000..3f8383c03 --- /dev/null +++ b/packages/server/src/services/Expenses/CRUD/ExpenseCategoryTransformer.ts @@ -0,0 +1,25 @@ +import { Transformer } from '@/lib/Transformer/Transformer'; +import { ExpenseCategory } from '@/models'; +import { formatNumber } from '@/utils'; + +export class ExpenseCategoryTransformer extends Transformer { + /** + * Include these attributes to expense object. + * @returns {Array} + */ + public includeAttributes = (): string[] => { + return ['amountFormatted']; + }; + + /** + * Retrieves the formatted amount. + * @param {ExpenseCategory} category + * @returns {string} + */ + protected amountFormatted(category: ExpenseCategory) { + return formatNumber(category.amount, { + currencyCode: this.context.currencyCode, + money: false, + }); + } +} diff --git a/packages/server/src/services/Expenses/CRUD/ExpenseTransformer.ts b/packages/server/src/services/Expenses/CRUD/ExpenseTransformer.ts index 2812a9261..89f461934 100644 --- a/packages/server/src/services/Expenses/CRUD/ExpenseTransformer.ts +++ b/packages/server/src/services/Expenses/CRUD/ExpenseTransformer.ts @@ -1,6 +1,7 @@ import { Transformer } from '@/lib/Transformer/Transformer'; import { formatNumber } from 'utils'; import { IExpense } from '@/interfaces'; +import { ExpenseCategoryTransformer } from './ExpenseCategoryTransformer'; export class ExpenseTransfromer extends Transformer { /** @@ -12,7 +13,8 @@ export class ExpenseTransfromer extends Transformer { 'formattedAmount', 'formattedLandedCostAmount', 'formattedAllocatedCostAmount', - 'formattedDate' + 'formattedDate', + 'categories', ]; }; @@ -56,5 +58,16 @@ export class ExpenseTransfromer extends Transformer { */ protected formattedDate = (expense: IExpense): string => { return this.formatDate(expense.paymentDate); - } + }; + + /** + * Retrieves the transformed expense categories. + * @param {IExpense} expense + * @returns {} + */ + protected categories = (expense: IExpense) => { + return this.item(expense.categories, new ExpenseCategoryTransformer(), { + currencyCode: expense.currencyCode, + }); + }; } diff --git a/packages/webapp/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerFooter.tsx b/packages/webapp/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerFooter.tsx index c1acea3f2..48b3b2514 100644 --- a/packages/webapp/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerFooter.tsx +++ b/packages/webapp/src/containers/Drawers/ExpenseDrawer/ExpenseDrawerFooter.tsx @@ -9,7 +9,7 @@ import { TotalLineTextStyle, } from '@/components'; import { useExpenseDrawerContext } from './ExpenseDrawerProvider'; -import { FormatNumber, TotalLine } from '@/components'; +import { TotalLine } from '@/components'; /** * Footer details of expense readonly details. @@ -22,12 +22,12 @@ export default function ExpenseDrawerFooter() { } - value={} + value={expense.formatted_amount} borderStyle={TotalLineBorderStyle.SingleDark} /> } - value={} + value={expense.formatted_amount} borderStyle={TotalLineBorderStyle.DoubleDark} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Drawers/ExpenseDrawer/utils.tsx b/packages/webapp/src/containers/Drawers/ExpenseDrawer/utils.tsx index 276923cce..377f6f9a4 100644 --- a/packages/webapp/src/containers/Drawers/ExpenseDrawer/utils.tsx +++ b/packages/webapp/src/containers/Drawers/ExpenseDrawer/utils.tsx @@ -36,8 +36,7 @@ export const useExpenseReadEntriesColumns = () => { }, { Header: intl.get('amount'), - accessor: 'amount', - Cell: FormatNumberCell, + accessor: 'amount_formatted', width: getColumnWidth(categories, 'amount', { minWidth: 60, magicSpacing: 5,