refactor: replace journal total calculations with new formatted amount hooks

This commit is contained in:
Ahmed Bouhuolia
2024-12-04 13:23:40 +02:00
parent 7dd09e2903
commit a25ab39647
4 changed files with 74 additions and 45 deletions

View File

@@ -1,11 +1,10 @@
// @ts-nocheck // @ts-nocheck
import React from 'react'; import React from 'react';
import classNames from 'classnames'; import classNames from 'classnames';
import { useFormikContext } from 'formik';
import { CLASSES } from '@/constants/classes'; import { CLASSES } from '@/constants/classes';
import { safeSumBy } from '@/utils';
import { PageFormBigNumber, FormattedMessage as T } from '@/components'; import { PageFormBigNumber, FormattedMessage as T } from '@/components';
import MakeJournalEntriesHeaderFields from './MakeJournalEntriesHeaderFields'; import MakeJournalEntriesHeaderFields from './MakeJournalEntriesHeaderFields';
import { useManualJournalTotalFormatted } from './utils';
export default function MakeJournalEntriesHeader() { export default function MakeJournalEntriesHeader() {
return ( return (
@@ -21,19 +20,9 @@ export default function MakeJournalEntriesHeader() {
* @returns {React.ReactNode} * @returns {React.ReactNode}
*/ */
function MakeJournalHeaderBigNumber() { function MakeJournalHeaderBigNumber() {
const { const totalFormatted = useManualJournalTotalFormatted();
values: { entries, currency_code },
} = useFormikContext();
const totalCredit = safeSumBy(entries, 'credit');
const totalDebit = safeSumBy(entries, 'debit');
const total = Math.max(totalCredit, totalDebit);
return ( return (
<PageFormBigNumber <PageFormBigNumber label={<T id={'amount'} />} amount={totalFormatted} />
label={<T id={'amount'} />}
amount={total}
currencyCode={currency_code}
/>
); );
} }

View File

@@ -8,10 +8,14 @@ import {
TotalLineBorderStyle, TotalLineBorderStyle,
TotalLineTextStyle, TotalLineTextStyle,
} from '@/components'; } from '@/components';
import { useJournalTotals } from './utils'; import {
useManualJournalSubtotalFormatted,
useManualJournalTotalFormatted,
} from './utils';
export function MakeJournalFormFooterRight() { export function MakeJournalFormFooterRight() {
const { formattedSubtotal, formattedTotal } = useJournalTotals(); const formattedSubtotal = useManualJournalSubtotalFormatted();
const formattedTotal = useManualJournalTotalFormatted();
return ( return (
<MakeJouranlTotalLines> <MakeJouranlTotalLines>
@@ -29,7 +33,7 @@ export function MakeJournalFormFooterRight() {
); );
} }
const MakeJouranlTotalLines =styled(TotalLines)` const MakeJouranlTotalLines = styled(TotalLines)`
width: 100%; width: 100%;
color: #555555; color: #555555;
`; `;

View File

@@ -226,35 +226,73 @@ export const useSetPrimaryBranchToForm = () => {
}, [isBranchesSuccess, setFieldValue, branches]); }, [isBranchesSuccess, setFieldValue, branches]);
}; };
/** export const useManualJournalCreditTotal = () => {
* Retreives the Journal totals. const { values } = useFormikContext();
*/ const totalCredit = safeSumBy(values.entries, 'credit');
export const useJournalTotals = () => {
const {
values: { entries, currency_code: currencyCode },
} = useFormikContext();
// Retrieves the invoice entries total. return totalCredit;
const totalCredit = safeSumBy(entries, 'credit'); };
const totalDebit = safeSumBy(entries, 'debit');
const total = Math.max(totalCredit, totalDebit); export const useManualJournalCreditTotalFormatted = () => {
const totalCredit = useManualJournalCreditTotal();
// Retrieves the formatted total money. const { values } = useFormikContext();
const formattedTotal = React.useMemo(
() => formattedAmount(total, currencyCode),
[total, currencyCode],
);
// Retrieves the formatted subtotal.
const formattedSubtotal = React.useMemo(
() => formattedAmount(total, currencyCode, { money: false }),
[total, currencyCode],
);
return { return formattedAmount(totalCredit, values.currency_code);
formattedTotal, };
formattedSubtotal,
}; export const useManualJournalDebitTotal = () => {
const { values } = useFormikContext();
const totalDebit = safeSumBy(values.entries, 'debit');
return totalDebit;
};
export const useManualJournalDebitTotalFormatted = () => {
const totalDebit = useManualJournalDebitTotal();
const { values } = useFormikContext();
return formattedAmount(totalDebit, values.currency_code);
};
export const useManualJournalSubtotal = () => {
const totalCredit = useManualJournalCreditTotal();
const totalDebit = useManualJournalDebitTotal();
return Math.max(totalCredit, totalDebit);
};
export const useManualJournalSubtotalFormatted = () => {
const subtotal = useManualJournalSubtotal();
const { values } = useFormikContext();
return formattedAmount(subtotal, values.currency_code);
};
export const useManualJournalTotalDifference = () => {
const totalCredit = useManualJournalCreditTotal();
const totalDebit = useManualJournalDebitTotal();
return Math.abs(totalCredit - totalDebit);
};
export const useManualJournalTotalDifferenceFormatted = () => {
const difference = useManualJournalTotalDifference();
const { values } = useFormikContext();
return formattedAmount(difference, values.currency_code);
};
export const useManualJournalTotal = () => {
const total = useManualJournalSubtotal();
return total;
};
export const useManualJournalTotalFormatted = () => {
const total = useManualJournalTotal();
const { values } = useFormikContext();
return formattedAmount(total, values.currency_code);
}; };
/** /**

View File

@@ -5,12 +5,10 @@ import styled from 'styled-components';
import { defaultTo } from 'lodash'; import { defaultTo } from 'lodash';
import { import {
ButtonLink,
Row, Row,
Col, Col,
DetailsMenu, DetailsMenu,
DetailItem, DetailItem,
FormatDate,
CommercialDocHeader, CommercialDocHeader,
CommercialDocTopHeader, CommercialDocTopHeader,
CustomerDrawerLink, CustomerDrawerLink,