From 05cf94940e9f47e14c114b6e270d87768e0a27ec Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Mon, 2 Dec 2024 15:32:39 +0200 Subject: [PATCH] refactor: implementing new formatted amount hooks --- .../Bills/BillForm/BillFormFooterRight.tsx | 14 +-- .../Purchases/Bills/BillForm/utils.tsx | 112 ++++++++---------- .../VendorCreditNoteFormFooterRight.tsx | 10 +- .../CreditNotes/CreditNoteForm/utils.tsx | 26 ---- .../CreditNotes/CreditNoteForm/utils.tsx | 1 + .../EstimateForm/EstimateFormFooterRight.tsx | 12 +- .../Estimates/EstimateForm/components.tsx | 6 +- .../Sales/Estimates/EstimateForm/utils.tsx | 36 +----- .../InvoiceForm/InvoiceFormFooterRight.tsx | 22 ++-- .../Sales/Invoices/InvoiceForm/components.tsx | 44 ------- .../Sales/Invoices/InvoiceForm/utils.tsx | 49 +++++++- .../ReceiptForm/ReceiptFormFooterRight.tsx | 12 +- .../Sales/Receipts/ReceiptForm/components.tsx | 4 +- .../Sales/Receipts/ReceiptForm/utils.tsx | 92 +++++++------- 14 files changed, 187 insertions(+), 253 deletions(-) diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx index 48cef6c72..293e63818 100644 --- a/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx +++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/BillFormFooterRight.tsx @@ -11,24 +11,22 @@ import { useBillAdjustmentAmountFormatted, useBillAggregatedTaxRates, useBillDiscountAmountFormatted, + useBillDueAmountFormatted, + useBillPaidAmountFormatted, useBillSubtotalFormatted, useBillTotalFormatted, - useBillTotals, } from './utils'; import { TaxType } from '@/interfaces/TaxRates'; import { AdjustmentTotalLine } from '@/containers/Sales/Invoices/InvoiceForm/AdjustmentTotalLine'; import { DiscountTotalLine } from '@/containers/Sales/Invoices/InvoiceForm/DiscountTotalLine'; export function BillFormFooterRight() { - const { - formattedDueTotal, - formattedPaymentTotal, - } = useBillTotals(); - const { values: { inclusive_exclusive_tax, currency_code }, } = useFormikContext(); + const dueAmountFormatted = useBillDueAmountFormatted(); + const paidAmountFormatted = useBillPaidAmountFormatted(); const subtotalFormatted = useBillSubtotalFormatted(); const totalFormatted = useBillTotalFormatted(); const taxEntries = useBillAggregatedTaxRates(); @@ -68,12 +66,12 @@ export function BillFormFooterRight() { /> diff --git a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx index 5f7ac273e..80de66529 100644 --- a/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx +++ b/packages/webapp/src/containers/Purchases/Bills/BillForm/utils.tsx @@ -260,58 +260,6 @@ export const useSetPrimaryWarehouseToForm = () => { }, [isWarehousesSuccess, setFieldValue, warehouses]); }; -/** - * Retreives the bill totals. - */ -export const useBillTotals = () => { - const { - values: { currency_code: currencyCode }, - } = useFormikContext(); - - // Retrieves the bill subtotal. - const subtotal = useBillSubtotal(); - const total = useBillTotal(); - - // Retrieves the formatted total money. - const formattedTotal = React.useMemo( - () => formattedAmount(total, currencyCode), - [total, currencyCode], - ); - // Retrieves the formatted subtotal. - const formattedSubtotal = React.useMemo( - () => formattedAmount(subtotal, currencyCode, { money: false }), - [subtotal, currencyCode], - ); - // Retrieves the payment total. - const paymentTotal = React.useMemo(() => 0, []); - - // Retireves the formatted payment total. - const formattedPaymentTotal = React.useMemo( - () => formattedAmount(paymentTotal, currencyCode), - [paymentTotal, currencyCode], - ); - // Retrieves the formatted due total. - const dueTotal = React.useMemo( - () => total - paymentTotal, - [total, paymentTotal], - ); - // Retrieves the formatted due total. - const formattedDueTotal = React.useMemo( - () => formattedAmount(dueTotal, currencyCode), - [dueTotal, currencyCode], - ); - - return { - total, - paymentTotal, - dueTotal, - formattedTotal, - formattedSubtotal, - formattedPaymentTotal, - formattedDueTotal, - }; -}; - /** * Detarmines whether the bill has foreign customer. * @returns {boolean} @@ -377,9 +325,9 @@ export const useBillSubtotal = () => { */ export const useBillSubtotalFormatted = () => { const subtotal = useBillSubtotal(); - const { currency_code: currencyCode } = useFormikContext(); + const { values} = useFormikContext(); - return formattedAmount(subtotal, currencyCode); + return formattedAmount(subtotal, values.currency_code); }; /** @@ -398,9 +346,9 @@ export const useBillDiscountAmount = () => { */ export const useBillDiscountAmountFormatted = () => { const discountAmount = useBillDiscountAmount(); - const { currency_code: currencyCode } = useFormikContext(); + const { values } = useFormikContext(); - return formattedAmount(discountAmount, currencyCode); + return formattedAmount(discountAmount, values.currency_code); }; /** @@ -419,9 +367,9 @@ export const useBillAdjustmentAmount = () => { */ export const useBillAdjustmentAmountFormatted = () => { const adjustmentAmount = useBillAdjustmentAmount(); - const { currency_code: currencyCode } = useFormikContext(); + const { values } = useFormikContext(); - return formattedAmount(adjustmentAmount, currencyCode); + return formattedAmount(adjustmentAmount, values.currency_code); }; /** @@ -436,6 +384,7 @@ export const useBillTotalTaxAmount = () => { .filter((entry) => entry.tax_amount) .sumBy('tax_amount') .value(); + }, [values.entries]); }; @@ -473,7 +422,50 @@ export const useBillTotal = () => { */ export const useBillTotalFormatted = () => { const total = useBillTotal(); - const { currency_code: currencyCode } = useFormikContext(); + const { values } = useFormikContext(); - return formattedAmount(total, currencyCode); + return formattedAmount(total, values.currency_code); +}; + +/** + * Retrieves the bill paid amount. + * @returns {number} + */ +export const useBillPaidAmount = () => { + const { values } = useFormikContext(); + + return toSafeNumber(0); +}; + +/** + * Retrieves the bill paid amount formatted. + * @returns {string} + */ +export const useBillPaidAmountFormatted = () => { + const paidAmount = useBillPaidAmount(); + const { values } = useFormikContext(); + + return formattedAmount(paidAmount, values.currency_code); +}; + +/** + * Retrieves the bill due amount. + * @returns {number} + */ +export const useBillDueAmount = () => { + const total = useBillTotal(); + const paidAmount = useBillPaidAmount(); + + return total - paidAmount; +}; + +/** + * Retrieves the bill due amount formatted. + * @returns {string} + */ +export const useBillDueAmountFormatted = () => { + const dueAmount = useBillDueAmount(); + const { values } = useFormikContext(); + + return formattedAmount(dueAmount, values.currency_code); }; diff --git a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx index 410c9b148..5448139b3 100644 --- a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx +++ b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/VendorCreditNoteFormFooterRight.tsx @@ -5,7 +5,7 @@ import { useFormikContext } from 'formik'; import { T, TotalLines, TotalLine, TotalLineTextStyle } from '@/components'; import { useVendorCreditAdjustmentAmountFormatted, - useVendorCreditDiscountAmount, + useVendorCreditDiscountAmountFormatted, useVendorCreditSubtotalFormatted, useVendorCreditTotalFormatted, } from './utils'; @@ -19,8 +19,8 @@ export function VendorCreditNoteFormFooterRight() { const totalFormatted = useVendorCreditTotalFormatted(); const subtotalFormatted = useVendorCreditSubtotalFormatted(); - const discountAmount = useVendorCreditDiscountAmount(); - const adjustmentAmount = useVendorCreditAdjustmentAmountFormatted(); + const discountAmountFormatted = useVendorCreditDiscountAmountFormatted(); + const adjustmentAmountFormatted = useVendorCreditAdjustmentAmountFormatted(); return ( - + } value={totalFormatted} diff --git a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx index 74300e466..3dc3c0a72 100644 --- a/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx +++ b/packages/webapp/src/containers/Purchases/CreditNotes/CreditNoteForm/utils.tsx @@ -185,32 +185,6 @@ export const useSetPrimaryWarehouseToForm = () => { }, [isWarehousesSuccess, setFieldValue, warehouses]); }; -export const useVendorCrditNoteTotals = () => { - const { - values: { entries, currency_code: currencyCode }, - } = useFormikContext(); - - // Retrieves the invoice entries total. - const total = React.useMemo(() => getEntriesTotal(entries), [entries]); - - // Retrieves the formatted total money. - 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 { - total, - formattedTotal, - formattedSubtotal, - }; -}; - /** * Retrieves the vendor credit subtotal. * @returns {number} diff --git a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx index 382b09b07..8a772f4ce 100644 --- a/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/CreditNotes/CreditNoteForm/utils.tsx @@ -185,6 +185,7 @@ export const useCreditNoteSubtotal = () => { const { values: { entries }, } = useFormikContext(); + const total = React.useMemo(() => getEntriesTotal(entries), [entries]); return total; diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx index 7bacc8f15..c3ff4d13d 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx @@ -13,13 +13,13 @@ import { AdjustmentTotalLine } from '../../Invoices/InvoiceForm/AdjustmentTotalL import { DiscountTotalLine } from '../../Invoices/InvoiceForm/DiscountTotalLine'; export function EstimateFormFooterRight() { - const subtotalFormatted = useEstimateSubtotalFormatted(); - const totalFormatted = useEstimateTotalFormatted(); const { values: { currency_code }, } = useFormikContext(); - const discountAmount = useEstimateDiscountFormatted(); - const adjustmentAmount = useEstimateAdjustmentFormatted(); + const subtotalFormatted = useEstimateSubtotalFormatted(); + const totalFormatted = useEstimateTotalFormatted(); + const discountAmountFormatted = useEstimateDiscountFormatted(); + const adjustmentAmountFormatted = useEstimateAdjustmentFormatted(); return ( @@ -29,9 +29,9 @@ export function EstimateFormFooterRight() { /> - + } value={totalFormatted} diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/components.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/components.tsx index 3cace61f2..9cae3ae5d 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/components.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/components.tsx @@ -6,7 +6,7 @@ import * as R from 'ramda'; import { useFormikContext } from 'formik'; import { ExchangeRateInputGroup } from '@/components'; import { useCurrentOrganization } from '@/hooks/state'; -import { useEstimateIsForeignCustomer, useEstimateTotals } from './utils'; +import { useEstimateIsForeignCustomer, useEstimateSubtotal } from './utils'; import { transactionNumber } from '@/utils'; import { useUpdateEffect } from '@/hooks'; import withSettings from '@/containers/Settings/withSettings'; @@ -102,13 +102,13 @@ export const EstimateSyncAutoExRateToForm = R.compose(withDialogActions)( // #withDialogActions openDialog, }) => { - const { total } = useEstimateTotals(); + const subtotal = useEstimateSubtotal(); const timeout = useRef(); useSyncExRateToForm({ onSynced: () => { // If the total bigger then zero show alert to the user after adjusting entries. - if (total > 0) { + if (subtotal > 0) { clearTimeout(timeout.current); timeout.current = setTimeout(() => { openDialog(DialogsName.InvoiceExchangeRateChangeNotice); diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx index 766dca338..5c3307b0b 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx @@ -1,5 +1,5 @@ // @ts-nocheck -import React from 'react'; +import React, { useMemo } from 'react'; import * as R from 'ramda'; import intl from 'react-intl-universal'; import moment from 'moment'; @@ -64,6 +64,7 @@ export const defaultEstimate = { entries: [...repeatValue(defaultEstimateEntry, MIN_LINES_NUMBER)], attachments: [], pdf_template_id: '', + adjustment: '', discount: '', discount_type: 'amount', }; @@ -210,35 +211,6 @@ export const useSetPrimaryBranchToForm = () => { }, [isBranchesSuccess, setFieldValue, branches]); }; -/** - * Retreives the estimate totals. - */ -export const useEstimateTotals = () => { - const { - values: { entries, currency_code: currencyCode }, - } = useFormikContext(); - - // Retrieves the invoice entries total. - const total = React.useMemo(() => getEntriesTotal(entries), [entries]); - - // Retrieves the formatted total money. - 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 { - total, - formattedTotal, - formattedSubtotal, - }; -}; - /** * Retrieves the estimate subtotal. * @returns {number} @@ -249,9 +221,9 @@ export const useEstimateSubtotal = () => { } = useFormikContext(); // Retrieves the invoice entries total. - const total = React.useMemo(() => getEntriesTotal(entries), [entries]); + const subtotal = useMemo(() => getEntriesTotal(entries), [entries]); - return total; + return subtotal; }; /** diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterRight.tsx index f6439f668..52a24805f 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/InvoiceFormFooterRight.tsx @@ -13,14 +13,12 @@ import { useInvoiceAdjustmentAmountFormatted, useInvoiceAggregatedTaxRates, useInvoiceDiscountAmountFormatted, + useInvoiceDueAmountFormatted, + useInvoicePaidAmountFormatted, + useInvoiceSubtotalFormatted, + useInvoiceTotalFormatted, } from './utils'; import { TaxType } from '@/interfaces/TaxRates'; -import { - InvoiceDueAmountFormatted, - InvoicePaidAmountFormatted, - InvoiceSubTotalFormatted, - InvoiceTotalFormatted, -} from './components'; import { AdjustmentTotalLine } from './AdjustmentTotalLine'; import { DiscountTotalLine } from './DiscountTotalLine'; @@ -32,6 +30,10 @@ export function InvoiceFormFooterRight() { const taxEntries = useInvoiceAggregatedTaxRates(); const adjustmentAmount = useInvoiceAdjustmentAmountFormatted(); const discountAmount = useInvoiceDiscountAmountFormatted(); + const totalFormatted = useInvoiceTotalFormatted(); + const subtotalFormatted = useInvoiceSubtotalFormatted(); + const paidAmountFormatted = useInvoicePaidAmountFormatted(); + const dueAmountFormatted = useInvoiceDueAmountFormatted(); return ( @@ -43,7 +45,7 @@ export function InvoiceFormFooterRight() { : 'Subtotal'} } - value={} + value={subtotalFormatted} /> } + value={totalFormatted} borderStyle={TotalLineBorderStyle.SingleDark} textStyle={TotalLineTextStyle.Bold} /> } - value={} + value={paidAmountFormatted} borderStyle={TotalLineBorderStyle.None} /> } - value={} + value={dueAmountFormatted} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/components.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/components.tsx index b96678cef..d977ed2a9 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/components.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/components.tsx @@ -116,47 +116,3 @@ export const InvoiceExchangeRateSync = R.compose(withDialogActions)( return null; }, ); - -/** - *Renders the invoice formatted total. - * @returns {JSX.Element} - */ -export const InvoiceTotalFormatted = () => { - const currencyCode = useInvoiceCurrencyCode(); - const total = useInvoiceTotal(); - - return ; -}; - -/** - * Renders the invoice formatted subtotal. - * @returns {JSX.Element} - */ -export const InvoiceSubTotalFormatted = () => { - const currencyCode = useInvoiceCurrencyCode(); - const subTotal = useInvoiceSubtotal(); - - return ; -}; - -/** - * Renders the invoice formatted due amount. - * @returns {JSX.Element} - */ -export const InvoiceDueAmountFormatted = () => { - const currencyCode = useInvoiceCurrencyCode(); - const dueAmount = useInvoiceDueAmount(); - - return ; -}; - -/** - * Renders the invoice formatted paid amount. - * @returns {JSX.Element} - */ -export const InvoicePaidAmountFormatted = () => { - const currencyCode = useInvoiceCurrencyCode(); - const paidAmount = useInvoicePaidAmount(); - - return ; -}; diff --git a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx index 1e3c411ff..844415483 100644 --- a/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Invoices/InvoiceForm/utils.tsx @@ -12,6 +12,7 @@ import { repeatValue, defaultFastFieldShouldUpdate, formattedAmount, + toSafeNumber, } from '@/utils'; import { ERROR } from '@/constants/errors'; import { AppToaster } from '@/components'; @@ -305,6 +306,17 @@ export const useInvoiceSubtotal = () => { return React.useMemo(() => getEntriesTotal(entries), [entries]); }; +/** + * Retrieves the invoice subtotal formatted. + * @returns {string} + */ +export const useInvoiceSubtotalFormatted = () => { + const subtotal = useInvoiceSubtotal(); + const { values } = useFormikContext(); + + return formattedAmount(subtotal, values.currency_code); +}; + /** * Retrieves the invoice discount amount. * @returns {number} @@ -438,13 +450,26 @@ export const useInvoiceTotal = () => { const totalTaxAmount = useInvoiceTotalTaxAmount(); const isExclusiveTax = useIsInvoiceTaxExclusive(); const discountAmount = useInvoiceDiscountAmount(); + const adjustmentAmount = useInvoiceAdjustmentAmount(); return R.compose( R.when(R.always(isExclusiveTax), R.add(totalTaxAmount)), R.subtract(R.__, discountAmount), + R.subtract(R.__, adjustmentAmount), )(subtotal); }; +/** + * Retrieves the invoice total formatted. + * @returns {string} + */ +export const useInvoiceTotalFormatted = () => { + const total = useInvoiceTotal(); + const { values } = useFormikContext(); + + return formattedAmount(total, values.currency_code); +}; + /** * Retrieves the paid amount of the invoice. * @returns {number} @@ -452,7 +477,18 @@ export const useInvoiceTotal = () => { export const useInvoicePaidAmount = () => { const { invoice } = useInvoiceFormContext(); - return invoice?.payment_amount || 0; + return toSafeNumber(invoice?.payment_amount); +}; + +/** + * Retrieves the paid amount of the invoice formatted. + * @returns {string} + */ +export const useInvoicePaidAmountFormatted = () => { + const paidAmount = useInvoicePaidAmount(); + const { values } = useFormikContext(); + + return formattedAmount(paidAmount, values.currency_code); }; /** @@ -466,6 +502,17 @@ export const useInvoiceDueAmount = () => { return Math.max(total - paidAmount, 0); }; +/** + * Retrieves the invoice due amount formatted. + * @returns {string} + */ +export const useInvoiceDueAmountFormatted = () => { + const dueAmount = useInvoiceDueAmount(); + const { values } = useFormikContext(); + + return formattedAmount(dueAmount, values.currency_code); +}; + /** * Detrmines whether the tax is inclusive. * @returns {boolean} diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx index 3574d687f..e4b5043fe 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx @@ -12,20 +12,22 @@ import { import { useReceiptAdjustmentFormatted, useReceiptDiscountAmountFormatted, + useReceiptDueAmountFormatted, + useReceiptPaidAmountFormatted, useReceiptSubtotalFormatted, useReceiptTotalFormatted, - useReceiptTotals, } from './utils'; import { DiscountTotalLine } from '../../Invoices/InvoiceForm/DiscountTotalLine'; import { AdjustmentTotalLine } from '../../Invoices/InvoiceForm/AdjustmentTotalLine'; export function ReceiptFormFooterRight() { - const { formattedDueTotal, formattedPaymentTotal } = useReceiptTotals(); - const { values: { currency_code }, } = useFormikContext(); + const paidAmountFormatted = useReceiptPaidAmountFormatted(); + const dueAmountFormatted = useReceiptDueAmountFormatted(); + const subtotalFormatted = useReceiptSubtotalFormatted(); const totalFormatted = useReceiptTotalFormatted(); @@ -51,12 +53,12 @@ export function ReceiptFormFooterRight() { /> } - value={formattedPaymentTotal} + value={paidAmountFormatted} borderStyle={TotalLineBorderStyle.None} /> } - value={formattedDueTotal} + value={dueAmountFormatted} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/components.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/components.tsx index 7d47998e3..21e7dbb72 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/components.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/components.tsx @@ -7,7 +7,7 @@ import * as R from 'ramda'; import { ExchangeRateInputGroup } from '@/components'; import { useCurrentOrganization } from '@/hooks/state'; -import { useReceiptIsForeignCustomer, useReceiptTotals } from './utils'; +import { useReceiptIsForeignCustomer, useReceiptTotal } from './utils'; import { useUpdateEffect } from '@/hooks'; import { transactionNumber } from '@/utils'; import withSettings from '@/containers/Settings/withSettings'; @@ -98,7 +98,7 @@ export const ReceiptSyncAutoExRateToForm = R.compose(withDialogActions)( // #withDialogActions openDialog, }) => { - const { total } = useReceiptTotals(); + const total = useReceiptTotal(); const timeout = useRef(); useSyncExRateToForm({ diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx index a5ee40d50..00fabb037 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx @@ -202,57 +202,6 @@ export const useSetPrimaryBranchToForm = () => { }, [isBranchesSuccess, setFieldValue, branches]); }; -/** - * Retreives the Receipt totals. - */ -export const useReceiptTotals = () => { - const { - values: { entries, currency_code: currencyCode }, - } = useFormikContext(); - - // Retrieves the invoice entries total. - const total = React.useMemo(() => getEntriesTotal(entries), [entries]); - - // Retrieves the formatted total money. - const formattedTotal = React.useMemo( - () => formattedAmount(total, currencyCode), - [total, currencyCode], - ); - // Retrieves the formatted subtotal. - const formattedSubtotal = React.useMemo( - () => formattedAmount(total, currencyCode, { money: false }), - [total, currencyCode], - ); - // Retrieves the payment total. - const paymentTotal = React.useMemo(() => 0, []); - - // Retireves the formatted payment total. - const formattedPaymentTotal = React.useMemo( - () => formattedAmount(paymentTotal, currencyCode), - [paymentTotal, currencyCode], - ); - // Retrieves the formatted due total. - const dueTotal = React.useMemo( - () => total - paymentTotal, - [total, paymentTotal], - ); - // Retrieves the formatted due total. - const formattedDueTotal = React.useMemo( - () => formattedAmount(dueTotal, currencyCode), - [dueTotal, currencyCode], - ); - - return { - total, - paymentTotal, - dueTotal, - formattedTotal, - formattedSubtotal, - formattedPaymentTotal, - formattedDueTotal, - }; -}; - /** * Retrieves the receipt subtotal. * @returns {number} @@ -349,6 +298,47 @@ export const useReceiptTotalFormatted = () => { return formattedAmount(total, values.currency_code); }; +/** + * Retrieves the receipt paid amount. + * @returns {number} + */ +export const useReceiptPaidAmount = () => { + return toSafeNumber(0); +}; + +/** + * Retrieves the formatted receipt paid amount. + * @returns {string} + */ +export const useReceiptPaidAmountFormatted = () => { + const paidAmount = useReceiptPaidAmount(); + const { values } = useFormikContext(); + + return formattedAmount(paidAmount, values.currency_code); +}; + +/** + * Retrieves the receipt due amount. + * @returns {number} + */ +export const useReceiptDueAmount = () => { + const total = useReceiptTotal(); + const paidAmount = useReceiptPaidAmount(); + + return total - paidAmount; +}; + +/** + * Retrieves the formatted receipt due amount. + * @returns {string} + */ +export const useReceiptDueAmountFormatted = () => { + const dueAmount = useReceiptDueAmount(); + const { values } = useFormikContext(); + + return formattedAmount(dueAmount, values.currency_code); +}; + /** * Detarmines whether the receipt has foreign customer. * @returns {boolean}