fix: using lodash utils for decimal rounding

This commit is contained in:
Ahmed Bouhuolia
2024-10-24 16:47:29 +02:00
parent bbc19df6b4
commit 4c0f9a0aef
2 changed files with 22 additions and 28 deletions

View File

@@ -1,4 +1,4 @@
import { difference, isEmpty } from 'lodash';
import { difference, isEmpty, round, sumBy } from 'lodash';
import { Service, Inject } from 'typedi';
import { ServiceError } from '@/exceptions';
import {
@@ -23,13 +23,14 @@ export class CommandManualJournalValidators {
* @param {IManualJournalDTO} manualJournalDTO
*/
public valdiateCreditDebitTotalEquals(manualJournalDTO: IManualJournalDTO) {
const totalCredit = this.roundToTwoDecimals(
manualJournalDTO.entries.reduce((sum, entry) => sum + (entry.credit || 0), 0)
const totalCredit = round(
sumBy(manualJournalDTO.entries, (entry) => entry.credit || 0),
2
);
const totalDebit = this.roundToTwoDecimals(
manualJournalDTO.entries.reduce((sum, entry) => sum + (entry.debit || 0), 0)
const totalDebit = round(
sumBy(manualJournalDTO.entries, (entry) => entry.debit || 0),
2
);
if (totalCredit <= 0 || totalDebit <= 0) {
throw new ServiceError(ERRORS.CREDIT_DEBIT_NOT_EQUAL_ZERO);
}
@@ -39,10 +40,6 @@ export class CommandManualJournalValidators {
}
}
private roundToTwoDecimals(value: number): number {
return Math.round(value * 100) / 100;
}
/**
* Validate manual entries accounts existance on the storage.
* @param {number} tenantId -
@@ -309,4 +306,3 @@ export class CommandManualJournalValidators {
}
};
}

View File

@@ -4,7 +4,7 @@ import { Formik, Form } from 'formik';
import { Intent } from '@blueprintjs/core';
import intl from 'react-intl-universal';
import * as R from 'ramda';
import { isEmpty, omit } from 'lodash';
import { sumBy, round, isEmpty, omit } from 'lodash';
import classNames from 'classnames';
import { useHistory } from 'react-router-dom';
@@ -67,17 +67,17 @@ function MakeJournalEntriesForm({
() => ({
...(!isEmpty(manualJournal)
? {
...transformToEditForm(manualJournal),
}
...transformToEditForm(manualJournal),
}
: {
...defaultManualJournal,
// If the auto-increment mode is enabled, take the next journal
// number from the settings.
...(journalAutoIncrement && {
journal_number: journalNumber,
...defaultManualJournal,
// If the auto-increment mode is enabled, take the next journal
// number from the settings.
...(journalAutoIncrement && {
journal_number: journalNumber,
}),
currency_code: base_currency,
}),
currency_code: base_currency,
}),
}),
[manualJournal, base_currency, journalNumber, journalAutoIncrement],
);
@@ -88,15 +88,13 @@ function MakeJournalEntriesForm({
const entries = values.entries.filter(
(entry) => entry.debit || entry.credit,
);
// Updated getTotal function
// Updated getTotal function using lodash
const getTotal = (type = 'credit') => {
return entries.reduce((total, item) => {
const value = item[type] ? parseFloat(item[type]) : 0;
return Math.round((total + value) * 100) / 100;
}, 0);
return round(
sumBy(entries, (entry) => parseFloat(entry[type] || 0)),
2,
);
};
const totalCredit = getTotal('credit');
const totalDebit = getTotal('debit');