diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx index d61fc71c1..7bacc8f15 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateFormFooterRight.tsx @@ -6,13 +6,15 @@ import { T, TotalLines, TotalLine, TotalLineTextStyle } from '@/components'; import { useEstimateAdjustmentFormatted, useEstimateDiscountFormatted, - useEstimateTotals, + useEstimateSubtotalFormatted, + useEstimateTotalFormatted, } from './utils'; import { AdjustmentTotalLine } from '../../Invoices/InvoiceForm/AdjustmentTotalLine'; import { DiscountTotalLine } from '../../Invoices/InvoiceForm/DiscountTotalLine'; export function EstimateFormFooterRight() { - const { formattedSubtotal, formattedTotal } = useEstimateTotals(); + const subtotalFormatted = useEstimateSubtotalFormatted(); + const totalFormatted = useEstimateTotalFormatted(); const { values: { currency_code }, } = useFormikContext(); @@ -23,7 +25,7 @@ export function EstimateFormFooterRight() { } - value={formattedSubtotal} + value={subtotalFormatted} /> } - value={formattedTotal} + value={totalFormatted} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx index 6af7c4f3a..766dca338 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/utils.tsx @@ -10,6 +10,7 @@ import { repeatValue, transformToForm, formattedAmount, + toSafeNumber, } from '@/utils'; import { useEstimateFormContext } from './EstimateFormProvider'; import { @@ -272,9 +273,11 @@ export const useEstimateSubtotalFormatted = () => { */ export const useEstimateDiscount = () => { const { values } = useFormikContext(); - const discountAmount = parseFloat(values.discount); + const discount = toSafeNumber(values.discount); - return discountAmount; + return values?.discount_type === 'percentage' + ? (subtotal * discount) / 100 + : discount; }; /** @@ -296,7 +299,7 @@ export const useEstimateDiscountFormatted = () => { */ export const useEstimateAdjustment = () => { const { values } = useFormikContext(); - const adjustmentAmount = parseFloat(values.adjustment); + const adjustmentAmount = toSafeNumber(values.adjustment); return adjustmentAmount; }; diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx index 07474b807..3574d687f 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/ReceiptFormFooterRight.tsx @@ -12,23 +12,23 @@ import { import { useReceiptAdjustmentFormatted, useReceiptDiscountAmountFormatted, + useReceiptSubtotalFormatted, + useReceiptTotalFormatted, useReceiptTotals, } from './utils'; import { DiscountTotalLine } from '../../Invoices/InvoiceForm/DiscountTotalLine'; import { AdjustmentTotalLine } from '../../Invoices/InvoiceForm/AdjustmentTotalLine'; export function ReceiptFormFooterRight() { - const { - formattedSubtotal, - formattedTotal, - formattedDueTotal, - formattedPaymentTotal, - } = useReceiptTotals(); + const { formattedDueTotal, formattedPaymentTotal } = useReceiptTotals(); const { values: { currency_code }, } = useFormikContext(); + const subtotalFormatted = useReceiptSubtotalFormatted(); + const totalFormatted = useReceiptTotalFormatted(); + const discountAmount = useReceiptDiscountAmountFormatted(); const adjustmentAmount = useReceiptAdjustmentFormatted(); @@ -36,7 +36,7 @@ export function ReceiptFormFooterRight() { } - value={formattedSubtotal} + value={subtotalFormatted} /> } - value={formattedTotal} + value={totalFormatted} borderStyle={TotalLineBorderStyle.SingleDark} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx index 656fd41a9..a5ee40d50 100644 --- a/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx +++ b/packages/webapp/src/containers/Sales/Receipts/ReceiptForm/utils.tsx @@ -268,14 +268,40 @@ export const useReceiptSubtotal = () => { return subtotal; }; +/** + * Retrieves the formatted subtotal. + * @returns {string} + */ +export const useReceiptSubtotalFormatted = () => { + const subtotal = useReceiptSubtotal(); + const { values } = useFormikContext(); + + return formattedAmount(subtotal, values.currency_code, { money: true }); +}; + +/** + * Retrieves the receipt discount amount. + * @returns {number} + */ +export const useReceiptDiscountAmount = () => { + const { values } = useFormikContext(); + const subtotal = useReceiptSubtotal(); + const discount = toSafeNumber(values.discount); + + return values?.discount_type === 'percentage' + ? (subtotal * discount) / 100 + : discount; +}; + /** * Retrieves the formatted discount amount. * @returns {string} */ export const useReceiptDiscountAmountFormatted = () => { const { values } = useFormikContext(); + const discount = useReceiptDiscountAmount(); - return formattedAmount(values.discount, values.currency_code); + return formattedAmount(discount, values.currency_code); }; /**