From 73ab92e693188e64605b5f0a8a19e729f3df02d3 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sat, 30 Nov 2024 16:01:29 +0200 Subject: [PATCH] feat: implement discount display in various detail drawers - Added discount amount and percentage display in Bill, Credit Note, Estimate, Invoice, Receipt, and Vendor Credit detail tables. - Updated models to include discount-related attributes for better data handling. - Enhanced user interface to show discount information when applicable, improving clarity in financial documents. --- packages/server/src/models/Bill.ts | 4 +++ packages/server/src/models/VendorCredit.ts | 31 ++++++++++++------- .../BillDrawer/BillDetailTableFooter.tsx | 11 +++++++ .../CreditNoteDetailTableFooter.tsx | 13 +++++++- .../EstimateDetailTableFooter.tsx | 11 +++++++ .../InvoiceDetailTableFooter.tsx | 12 +++++++ .../ReceiptDetailTableFooter.tsx | 11 +++++++ .../VendorCreditDetailDrawerFooter.tsx | 11 +++++++ 8 files changed, 91 insertions(+), 13 deletions(-) diff --git a/packages/server/src/models/Bill.ts b/packages/server/src/models/Bill.ts index 06a1356ee..41e6364d4 100644 --- a/packages/server/src/models/Bill.ts +++ b/packages/server/src/models/Bill.ts @@ -53,6 +53,10 @@ export default class Bill extends mixin(TenantModel, [ 'localAllocatedCostAmount', 'billableAmount', 'amountLocal', + + 'discountAmount', + 'discountPercentage', + 'subtotal', 'subtotalLocal', 'subtotalExludingTax', diff --git a/packages/server/src/models/VendorCredit.ts b/packages/server/src/models/VendorCredit.ts index a880ac623..c2a8a0131 100644 --- a/packages/server/src/models/VendorCredit.ts +++ b/packages/server/src/models/VendorCredit.ts @@ -26,14 +26,6 @@ export default class VendorCredit extends mixin(TenantModel, [ static get tableName() { return 'vendor_credits'; } - - /** - * Virtual attributes. - */ - static get virtualAttributes() { - return ['localAmount']; - } - /** * Vendor credit amount in local currency. * @returns {number} @@ -81,9 +73,10 @@ export default class VendorCredit extends mixin(TenantModel, [ * @returns {number} */ get total() { - const discountAmount = this.discountType === DiscountType.Amount - ? this.discount - : this.subtotal * (this.discount / 100); + const discountAmount = + this.discountType === DiscountType.Amount + ? this.discount + : this.subtotal * (this.discount / 100); return this.subtotal - discountAmount - this.adjustment; } @@ -182,7 +175,21 @@ export default class VendorCredit extends mixin(TenantModel, [ * Virtual attributes. */ static get virtualAttributes() { - return ['isDraft', 'isPublished', 'isOpen', 'isClosed', 'creditsRemaining']; + return [ + 'isDraft', + 'isPublished', + 'isOpen', + 'isClosed', + + 'creditsRemaining', + 'localAmount', + + 'discountAmount', + 'discountPercentage', + + 'total', + 'totalLocal', + ]; } /** diff --git a/packages/webapp/src/containers/Drawers/BillDrawer/BillDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/BillDrawer/BillDetailTableFooter.tsx index 17c29c1a4..458705217 100644 --- a/packages/webapp/src/containers/Drawers/BillDrawer/BillDetailTableFooter.tsx +++ b/packages/webapp/src/containers/Drawers/BillDrawer/BillDetailTableFooter.tsx @@ -31,6 +31,17 @@ export function BillDetailTableFooter() { textStyle={TotalLineTextStyle.Regular} /> ))} + {bill.discount_amount > 0 && ( + + )} } value={bill.total_formatted} diff --git a/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailTableFooter.tsx index 6171686cf..881ac1def 100644 --- a/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailTableFooter.tsx +++ b/packages/webapp/src/containers/Drawers/CreditNoteDetailDrawer/CreditNoteDetailTableFooter.tsx @@ -22,9 +22,20 @@ export default function CreditNoteDetailTableFooter() { title={} value={creditNote.formatted_subtotal} /> + {creditNote.discount_amount > 0 && ( + + )} } - value={creditNote.formatted_amount} + value={creditNote.total_formatted} borderStyle={TotalLineBorderStyle.DoubleDark} textStyle={TotalLineTextStyle.Bold} /> diff --git a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailTableFooter.tsx index 8bc3ee96a..ade4f2690 100644 --- a/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailTableFooter.tsx +++ b/packages/webapp/src/containers/Drawers/EstimateDetailDrawer/EstimateDetailTableFooter.tsx @@ -25,6 +25,17 @@ export default function EstimateDetailTableFooter() { value={estimate.formatted_subtotal} borderStyle={TotalLineBorderStyle.SingleDark} /> + {estimate.discount_amount > 0 && ( + + )} } value={estimate.formatted_amount} diff --git a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailTableFooter.tsx index dd225739c..b1de061a1 100644 --- a/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailTableFooter.tsx +++ b/packages/webapp/src/containers/Drawers/InvoiceDetailDrawer/InvoiceDetailTableFooter.tsx @@ -26,6 +26,17 @@ export function InvoiceDetailTableFooter() { value={invoice.subtotal_formatted} borderStyle={TotalLineBorderStyle.SingleDark} /> + {invoice.discount_amount > 0 && ( + + )} {invoice.taxes.map((taxRate) => ( ))} + } value={invoice.total_formatted} diff --git a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx index b5687a091..d142f0775 100644 --- a/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx +++ b/packages/webapp/src/containers/Drawers/ReceiptDetailDrawer/ReceiptDetailTableFooter.tsx @@ -25,6 +25,17 @@ export default function ReceiptDetailTableFooter() { title={} value={receipt.formatted_subtotal} /> + {receipt.discount_amount > 0 && ( + + )} } value={receipt.formatted_amount} diff --git a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx index 0bfd435e9..9c81a3b36 100644 --- a/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx +++ b/packages/webapp/src/containers/Drawers/VendorCreditDetailDrawer/VendorCreditDetailDrawerFooter.tsx @@ -25,6 +25,17 @@ export default function VendorCreditDetailDrawerFooter() { value={vendorCredit.formatted_subtotal} borderStyle={TotalLineBorderStyle.SingleDark} /> + {vendorCredit.discount_amount > 0 && ( + + )} } value={vendorCredit.formatted_amount}