From ede6f3f69f310591f75ea0fdec5046d6d8517314 Mon Sep 17 00:00:00 2001
From: AbleKSaju <126228406+AbleKSaju@users.noreply.github.com>
Date: Wed, 27 Nov 2024 17:54:06 +0530
Subject: [PATCH] fix: apply pricing rule
---
.../POS/Classic/SelectedItemRow.vue | 24 +++--------------
.../POS/Classic/SelectedItemTable.vue | 2 ++
.../POS/Modern/ModernPOSSelectedItemRow.vue | 6 ++---
.../POS/Modern/ModernPOSSelectedItemTable.vue | 5 +++-
src/pages/POS/ClassicPOS.vue | 7 +++--
src/pages/POS/CouponCodeModal.vue | 25 ++++++++++--------
src/pages/POS/KeyboardModal.vue | 9 ++++---
src/pages/POS/ModernPOS.vue | 5 +++-
src/pages/POS/POS.vue | 26 +++++++------------
src/pages/POS/PaymentModal.vue | 2 --
10 files changed, 49 insertions(+), 62 deletions(-)
diff --git a/src/components/POS/Classic/SelectedItemRow.vue b/src/components/POS/Classic/SelectedItemRow.vue
index d26fb9510..818d4cb55 100644
--- a/src/components/POS/Classic/SelectedItemRow.vue
+++ b/src/components/POS/Classic/SelectedItemRow.vue
@@ -275,9 +275,6 @@ import { SalesInvoiceItem } from 'models/baseModels/SalesInvoiceItem/SalesInvoic
import { Money } from 'pesa';
import { DiscountType } from '../types';
import { validateSerialNumberCount } from 'src/utils/pos';
-import { getPricingRule } from 'models/helpers';
-import { SalesInvoice } from 'models/baseModels/SalesInvoice/SalesInvoice';
-import { ApplicablePricingRules } from 'models/baseModels/Invoice/types';
export default defineComponent({
name: 'SelectedItemRow',
@@ -285,7 +282,7 @@ export default defineComponent({
props: {
row: { type: SalesInvoiceItem, required: true },
},
- emits: ['runSinvFormulas', 'setItemSerialNumbers', 'addItem'],
+ emits: ['runSinvFormulas', 'applyPricingRule'],
setup() {
return {
isDiscountingEnabled: inject('isDiscountingEnabled') as boolean,
@@ -363,7 +360,7 @@ export default defineComponent({
this.row.set('quantity', quantity);
if (!this.row.isFreeItem) {
- await this.updatePricingRuleItem();
+ this.$emit('applyPricingRule');
this.$emit('runSinvFormulas');
}
},
@@ -371,22 +368,7 @@ export default defineComponent({
this.row.parentdoc?.remove('items', row?.idx as number);
if (!row.isFreeItem) {
- await this.updatePricingRuleItem();
- }
- },
- async updatePricingRuleItem() {
- const pricingRule = (await getPricingRule(
- this.row.parentdoc as SalesInvoice
- )) as ApplicablePricingRules[];
-
- let appliedPricingRuleCount =
- this.row.parentdoc?.pricingRuleDetail?.length;
-
- if (appliedPricingRuleCount !== pricingRule?.length) {
- appliedPricingRuleCount = pricingRule?.length;
-
- await this.row.parentdoc?.appendPricingRuleDetail(pricingRule);
- await this.row.parentdoc?.applyProductDiscount();
+ this.$emit('applyPricingRule');
}
},
},
diff --git a/src/components/POS/Classic/SelectedItemTable.vue b/src/components/POS/Classic/SelectedItemTable.vue
index 70822ba59..8eb992269 100644
--- a/src/components/POS/Classic/SelectedItemTable.vue
+++ b/src/components/POS/Classic/SelectedItemTable.vue
@@ -54,6 +54,7 @@
@@ -93,6 +94,7 @@ export default defineComponent({
isExapanded: false,
};
},
+ emits: ['applyPricingRule'],
computed: {
ratio() {
return [0.1, 1, 0.8, 0.8, 0.8, 0.8, 0.2];
diff --git a/src/components/POS/Modern/ModernPOSSelectedItemRow.vue b/src/components/POS/Modern/ModernPOSSelectedItemRow.vue
index f44071e5a..111e418c1 100644
--- a/src/components/POS/Modern/ModernPOSSelectedItemRow.vue
+++ b/src/components/POS/Modern/ModernPOSSelectedItemRow.vue
@@ -248,8 +248,6 @@ import { defineComponent } from 'vue';
import { SalesInvoiceItem } from 'models/baseModels/SalesInvoiceItem/SalesInvoiceItem';
import { Money } from 'pesa';
import { validateSerialNumberCount } from 'src/utils/pos';
-import { updatePricingRuleItem } from 'models/helpers';
-import { SalesInvoice } from 'models/baseModels/SalesInvoice/SalesInvoice';
export default defineComponent({
name: 'ModernPOSSelectedItemRow',
@@ -257,7 +255,7 @@ export default defineComponent({
props: {
row: { type: SalesInvoiceItem, required: true },
},
- emits: ['toggleModal', 'runSinvFormulas', 'selectedRow'],
+ emits: ['toggleModal', 'runSinvFormulas', 'selectedRow', 'applyPricingRule'],
setup() {
return {
@@ -331,7 +329,7 @@ export default defineComponent({
this.row.parentdoc?.remove('items', row?.idx as number);
if (!row.isFreeItem) {
- await updatePricingRuleItem(this.row.parentdoc as SalesInvoice);
+ this.$emit('applyPricingRule');
}
},
},
diff --git a/src/components/POS/Modern/ModernPOSSelectedItemTable.vue b/src/components/POS/Modern/ModernPOSSelectedItemTable.vue
index 07b5c1f2c..28aa2d2f6 100644
--- a/src/components/POS/Modern/ModernPOSSelectedItemTable.vue
+++ b/src/components/POS/Modern/ModernPOSSelectedItemTable.vue
@@ -82,7 +82,7 @@ export default defineComponent({
isExapanded: false,
};
},
- emits: ['toggleModal', 'selectedRow'],
+ emits: ['toggleModal', 'selectedRow', 'applyPricingRule'],
computed: {
ratio() {
return [0.1, 0.8, 0.4, 0.8, 0.8, 0.3];
@@ -141,6 +141,9 @@ export default defineComponent({
selectedItemRow(row: SalesInvoiceItem, field: string) {
this.$emit('selectedRow', row, field);
},
+ emitApplyPricingRule() {
+ this.$emit('applyPricingRule');
+ },
isNumeric,
},
});
diff --git a/src/pages/POS/ClassicPOS.vue b/src/pages/POS/ClassicPOS.vue
index ffc6f547d..68527b76a 100644
--- a/src/pages/POS/ClassicPOS.vue
+++ b/src/pages/POS/ClassicPOS.vue
@@ -30,6 +30,7 @@
emitEvent('setCouponsCount', count)"
/>
@@ -39,7 +40,6 @@
@toggle-modal="emitEvent('toggleModal', 'Payment')"
@set-cash-amount="(amount) => emitEvent('setCashAmount', amount)"
@set-transfer-ref-no="(ref) => emitEvent('setTransferRefNo', ref)"
- @set-coupons-count="(count) => emitEvent('setCouponsCount', count)"
@set-transfer-amount="(amount) => emitEvent('setTransferAmount', amount)"
@set-transfer-clearance-date="
(date) => emitEvent('setTransferClearanceDate', date)
@@ -153,7 +153,9 @@
@change="(value:string) => $emit('setCustomer',value)"
/>
-
+
coup.coupons !== coupon?.coupons
- );
+ this.sinvDoc?.items?.map((item: InvoiceItem) => {
+ item.itemDiscountAmount = this.fyo.pesa(0);
+ item.itemDiscountPercent = 0;
+ item.setItemDiscountAmount = false;
+ });
+
+ await coupon?.parentdoc?.remove('coupons', coupon.idx as number);
- await updatePricingRule(this.sinvDoc);
- this.$emit('setCouponsCount', this.sinvDoc.coupons?.length);
+ this.$emit('applyPricingRule');
+ this.$emit('setCouponsCount', this.coupons?.length);
},
cancelApplyCouponCode() {
this.couponCode = '';
diff --git a/src/pages/POS/KeyboardModal.vue b/src/pages/POS/KeyboardModal.vue
index 7ae8e9dae..eb9d705b6 100644
--- a/src/pages/POS/KeyboardModal.vue
+++ b/src/pages/POS/KeyboardModal.vue
@@ -316,7 +316,6 @@ import { defineComponent, inject } from 'vue';
import Button from 'src/components/Button.vue';
import Float from 'src/components/Controls/Float.vue';
import Currency from 'src/components/Controls/Currency.vue';
-import { updatePricingRuleItem } from 'models/helpers';
import { SalesInvoice } from 'models/baseModels/SalesInvoice/SalesInvoice';
import { SalesInvoiceItem } from 'models/baseModels/SalesInvoiceItem/SalesInvoiceItem';
import { ValidationError } from 'fyo/utils/errors';
@@ -338,7 +337,7 @@ export default defineComponent({
default: '',
},
},
- emits: ['toggleModal'],
+ emits: ['toggleModal', 'applyPricingRule'],
setup() {
return {
sinvDoc: inject('sinvDoc') as SalesInvoice,
@@ -460,7 +459,7 @@ export default defineComponent({
}
if (this.selectedItemField === 'quantity') {
- await updatePricingRuleItem(this.sinvDoc);
+ this.$emit('applyPricingRule');
}
}
@@ -471,6 +470,10 @@ export default defineComponent({
type: 'error',
message: this.t`${error as string}`,
});
+
+ if (this.selectedItemField === 'quantity') {
+ this.$emit('applyPricingRule');
+ }
}
},
async deleteLast() {
diff --git a/src/pages/POS/ModernPOS.vue b/src/pages/POS/ModernPOS.vue
index 5cf91cadd..b14d73a3c 100644
--- a/src/pages/POS/ModernPOS.vue
+++ b/src/pages/POS/ModernPOS.vue
@@ -30,6 +30,7 @@
emitEvent('setCouponsCount', count)"
/>
@@ -39,7 +40,6 @@
@toggle-modal="emitEvent('toggleModal', 'Payment')"
@set-cash-amount="(amount) => emitEvent('setCashAmount', amount)"
@set-transfer-ref-no="(ref) => emitEvent('setTransferRefNo', ref)"
- @set-coupons-count="(count) => emitEvent('setCouponsCount', count)"
@set-transfer-amount="(amount) => emitEvent('setTransferAmount', amount)"
@set-transfer-clearance-date="
(date) => emitEvent('setTransferClearanceDate', date)
@@ -61,6 +61,7 @@
:selected-item-field="selectedItemField"
:selected-item-row="(selectedItemRow as SalesInvoiceItem)"
@toggle-modal="emitEvent('toggleModal', 'Keyboard')"
+ @apply-pricing-rule="emitEvent('applyPricingRule')"
/>
@@ -91,6 +92,7 @@
@@ -397,6 +399,7 @@ export default defineComponent({
'routeToSinvList',
'setLoyaltyPoints',
'setTransferRefNo',
+ 'applyPricingRule',
'saveInvoiceAction',
'createTransaction',
'setTransferAmount',
diff --git a/src/pages/POS/POS.vue b/src/pages/POS/POS.vue
index 0d4c7eb0c..c2025b076 100644
--- a/src/pages/POS/POS.vue
+++ b/src/pages/POS/POS.vue
@@ -43,6 +43,7 @@
@route-to-sinv-list="routeToSinvList"
@set-loyalty-points="setLoyaltyPoints"
@set-transfer-ref-no="setTransferRefNo"
+ @apply-pricing-rule="applyPricingRule"
@create-transaction="createTransaction"
@save-invoice-action="saveInvoiceAction"
@set-transfer-amount="setTransferAmount"
@@ -81,6 +82,7 @@
@set-cash-amount="setCashAmount"
@set-coupons-count="setCouponsCount"
@route-to-sinv-list="routeToSinvList"
+ @apply-pricing-rule="applyPricingRule"
@set-loyalty-points="setLoyaltyPoints"
@set-transfer-ref-no="setTransferRefNo"
@create-transaction="createTransaction"
@@ -215,6 +217,10 @@ export default defineComponent({
watch: {
sinvDoc: {
handler() {
+ if (this.sinvDoc.coupons?.length) {
+ this.setCouponsCount(this.sinvDoc.coupons?.length);
+ }
+
this.updateValues();
},
deep: true,
@@ -617,26 +623,12 @@ export default defineComponent({
this.sinvDoc.isPricingRuleApplied = false;
removeFreeItems(this.sinvDoc as SalesInvoice);
+ await this.sinvDoc.applyProductDiscount();
return;
}
- const appliedPricingRuleCount = this.sinvDoc?.items?.filter(
- (val) => val.isFreeItem
- ).length;
-
- const recursivePricingRules = hasPricingRules?.filter(
- (val) => val.pricingRule.isRecursive
- );
-
- setTimeout(async () => {
- if (
- appliedPricingRuleCount !== hasPricingRules?.length ||
- recursivePricingRules
- ) {
- await this.sinvDoc.appendPricingRuleDetail(hasPricingRules);
- await this.sinvDoc.applyProductDiscount();
- }
- }, 1);
+ await this.sinvDoc.appendPricingRuleDetail(hasPricingRules);
+ await this.sinvDoc.applyProductDiscount();
},
async routeToSinvList() {
if (!this.sinvDoc.items?.length) {
diff --git a/src/pages/POS/PaymentModal.vue b/src/pages/POS/PaymentModal.vue
index 2befe5df7..155686483 100644
--- a/src/pages/POS/PaymentModal.vue
+++ b/src/pages/POS/PaymentModal.vue
@@ -224,7 +224,6 @@ export default defineComponent({
'setTransferClearanceDate',
'setTransferRefNo',
'toggleModal',
- 'setCouponsCount',
],
setup() {
return {
@@ -323,7 +322,6 @@ export default defineComponent({
},
submitTransaction() {
this.$emit('createTransaction');
- this.$emit('setCouponsCount', 0);
},
},
});