feat: add discount functionality to sales and purchase transactions

- Introduced discount_type and discount fields in Bills and SalesReceipts controllers.
- Updated database migrations to include discount and discount_type in estimates and credit notes tables.
- Enhanced SaleReceipt and SaleEstimate models to support discount attributes.
- Implemented formatting for discount amounts in transformers and PDF templates.
- Updated email templates to display discount information.

This commit enhances the handling of discounts across various transaction types, improving the overall functionality and user experience.
This commit is contained in:
Ahmed Bouhuolia
2024-11-30 14:46:43 +02:00
parent 17b3bbe1d8
commit dd1392cdc8
21 changed files with 196 additions and 35 deletions

View File

@@ -43,8 +43,18 @@ export default class CreditNote extends mixin(TenantModel, [
'isPublished',
'isOpen',
'isClosed',
'creditsRemaining',
'creditsUsed',
'subtotal',
'subtotalLocal',
'discountAmount',
'discountPercentage',
'total',
'totalLocal',
];
}

View File

@@ -11,6 +11,10 @@ export default class PaymentReceive extends mixin(TenantModel, [
CustomViewBaseModel,
ModelSearchable,
]) {
amount!: number;
paymentAmount!: number;
exchangeRate!: number;
/**
* Table name.
*/
@@ -40,6 +44,10 @@ export default class PaymentReceive extends mixin(TenantModel, [
return this.amount * this.exchangeRate;
}
/**
* Payment receive total.
* @returns {number}
*/
get total() {
return this.paymentAmount;
}

View File

@@ -43,6 +43,8 @@ export default class SaleEstimate extends mixin(TenantModel, [
static get virtualAttributes() {
return [
'localAmount',
'discountAmount',
'discountPercentage',
'isDelivered',
'isExpired',
'isConvertedToInvoice',

View File

@@ -72,6 +72,7 @@ export default class SaleInvoice extends mixin(TenantModel, [
'taxAmountWithheldLocal',
'discountAmount',
'discountPercentage',
'total',
'totalLocal',

View File

@@ -40,7 +40,21 @@ export default class SaleReceipt extends mixin(TenantModel, [
* Virtual attributes.
*/
static get virtualAttributes() {
return ['localAmount', 'isClosed', 'isDraft'];
return [
'localAmount',
'subtotal',
'subtotalLocal',
'total',
'totalLocal',
'discountAmount',
'discountPercentage',
'isClosed',
'isDraft',
];
}
/**