From 542763ddf5f8d6cc9b46a61a2dd9d3ae5506be4c Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Tue, 3 Dec 2024 14:22:49 +0200 Subject: [PATCH] feat: enhance discount and adjustment validation in Bills and Vendor Credit controllers --- .../src/api/controllers/Purchases/Bills.ts | 12 ++++++++++++ .../api/controllers/Purchases/VendorCredit.ts | 16 +++++++++++++++- packages/server/src/models/VendorCredit.ts | 7 +------ .../Estimates/EstimateForm/EstimateForm.tsx | 4 ++-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/packages/server/src/api/controllers/Purchases/Bills.ts b/packages/server/src/api/controllers/Purchases/Bills.ts index 5752fe39c..71fcf2f5c 100644 --- a/packages/server/src/api/controllers/Purchases/Bills.ts +++ b/packages/server/src/api/controllers/Purchases/Bills.ts @@ -154,6 +154,9 @@ export default class BillsController extends BaseController { .default(DiscountType.Amount) .isIn([DiscountType.Amount, DiscountType.Percentage]), check('discount').optional().isDecimal().toFloat(), + + // # Adjustment + check('adjustment').optional({ nullable: true }).isNumeric().toFloat(), ]; } @@ -196,6 +199,15 @@ export default class BillsController extends BaseController { check('attachments').isArray().optional(), check('attachments.*.key').exists().isString(), + + // # Discount + check('discount_type') + .default(DiscountType.Amount) + .isIn([DiscountType.Amount, DiscountType.Percentage]), + check('discount').optional().isDecimal().toFloat(), + + // # Adjustment + check('adjustment').optional({ nullable: true }).isNumeric().toFloat(), ]; } diff --git a/packages/server/src/api/controllers/Purchases/VendorCredit.ts b/packages/server/src/api/controllers/Purchases/VendorCredit.ts index e44906e40..6f65ca700 100644 --- a/packages/server/src/api/controllers/Purchases/VendorCredit.ts +++ b/packages/server/src/api/controllers/Purchases/VendorCredit.ts @@ -3,6 +3,7 @@ import { check, param, query } from 'express-validator'; import { Service, Inject } from 'typedi'; import { AbilitySubject, + DiscountType, IVendorCreditCreateDTO, IVendorCreditEditDTO, VendorCreditAction, @@ -186,7 +187,10 @@ export default class VendorCreditController extends BaseController { // Discount. check('discount').optional({ nullable: true }).isNumeric().toFloat(), - check('discount_type').optional({ nullable: true }).isString().trim(), + check('discount_type') + .optional({ nullable: true }) + .isString() + .isIn([DiscountType.Percentage, DiscountType.Amount]), // Adjustment. check('adjustment').optional({ nullable: true }).isNumeric().toFloat(), @@ -229,6 +233,16 @@ export default class VendorCreditController extends BaseController { check('attachments').isArray().optional(), check('attachments.*.key').exists().isString(), + + // Discount. + check('discount').optional({ nullable: true }).isNumeric().toFloat(), + check('discount_type') + .optional({ nullable: true }) + .isString() + .isIn([DiscountType.Percentage, DiscountType.Amount]), + + // Adjustment. + check('adjustment').optional({ nullable: true }).isNumeric().toFloat(), ]; } diff --git a/packages/server/src/models/VendorCredit.ts b/packages/server/src/models/VendorCredit.ts index c2a8a0131..24f96afa8 100644 --- a/packages/server/src/models/VendorCredit.ts +++ b/packages/server/src/models/VendorCredit.ts @@ -73,12 +73,7 @@ export default class VendorCredit extends mixin(TenantModel, [ * @returns {number} */ get total() { - const discountAmount = - this.discountType === DiscountType.Amount - ? this.discount - : this.subtotal * (this.discount / 100); - - return this.subtotal - discountAmount - this.adjustment; + return this.subtotal - this.discountAmount - this.adjustment; } /** diff --git a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx index 119553e25..dcc117900 100644 --- a/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx +++ b/packages/webapp/src/containers/Sales/Estimates/EstimateForm/EstimateForm.tsx @@ -160,7 +160,7 @@ function EstimateForm({ overflow: 'hidden', display: 'flex', flexDirection: 'column', - flex: 1 + flex: 1, })} > @@ -177,7 +177,7 @@ function EstimateForm({ {/*------- Dialogs -------*/} - {/* */} + {/*------- Effects -------*/}