mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-21 23:30:32 +00:00
refactor: replace journal total calculations with new formatted amount hooks
This commit is contained in:
@@ -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}
|
|
||||||
/>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
const { values } = useFormikContext();
|
||||||
|
|
||||||
// Retrieves the formatted total money.
|
return formattedAmount(totalCredit, values.currency_code);
|
||||||
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 {
|
export const useManualJournalDebitTotal = () => {
|
||||||
formattedTotal,
|
const { values } = useFormikContext();
|
||||||
formattedSubtotal,
|
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);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user