Skip to content

Commit

Permalink
fix: apply pricing rule
Browse files Browse the repository at this point in the history
  • Loading branch information
AbleKSaju committed Nov 27, 2024
1 parent e1f3341 commit ede6f3f
Show file tree
Hide file tree
Showing 10 changed files with 49 additions and 62 deletions.
24 changes: 3 additions & 21 deletions src/components/POS/Classic/SelectedItemRow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -275,17 +275,14 @@ 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',
components: { Currency, Data, Float, Int, Link, Text },
props: {
row: { type: SalesInvoiceItem, required: true },
},
emits: ['runSinvFormulas', 'setItemSerialNumbers', 'addItem'],
emits: ['runSinvFormulas', 'applyPricingRule'],
setup() {
return {
isDiscountingEnabled: inject('isDiscountingEnabled') as boolean,
Expand Down Expand Up @@ -363,30 +360,15 @@ export default defineComponent({
this.row.set('quantity', quantity);
if (!this.row.isFreeItem) {
await this.updatePricingRuleItem();
this.$emit('applyPricingRule');
this.$emit('runSinvFormulas');
}
},
async removeAddedItem(row: SalesInvoiceItem) {
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');
}
},
},
Expand Down
2 changes: 2 additions & 0 deletions src/components/POS/Classic/SelectedItemTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
<SelectedItemRow
:row="(row as SalesInvoiceItem)"
@run-sinv-formulas="runSinvFormulas"
@apply-pricing-rule="$emit('applyPricingRule')"
/>
</Row>
</div>
Expand Down Expand Up @@ -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];
Expand Down
6 changes: 2 additions & 4 deletions src/components/POS/Modern/ModernPOSSelectedItemRow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -248,16 +248,14 @@ 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',
components: { Currency, Data, Float, Int, Link, Text },
props: {
row: { type: SalesInvoiceItem, required: true },
},
emits: ['toggleModal', 'runSinvFormulas', 'selectedRow'],
emits: ['toggleModal', 'runSinvFormulas', 'selectedRow', 'applyPricingRule'],
setup() {
return {
Expand Down Expand Up @@ -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');
}
},
},
Expand Down
5 changes: 4 additions & 1 deletion src/components/POS/Modern/ModernPOSSelectedItemTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -141,6 +141,9 @@ export default defineComponent({
selectedItemRow(row: SalesInvoiceItem, field: string) {
this.$emit('selectedRow', row, field);
},
emitApplyPricingRule() {
this.$emit('applyPricingRule');
},
isNumeric,
},
});
Expand Down
7 changes: 5 additions & 2 deletions src/pages/POS/ClassicPOS.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

<CouponCodeModal
:open-modal="openCouponCodeModal"
@apply-pricing-rule="emitEvent('applyPricingRule')"
@toggle-modal="emitEvent('toggleModal', 'CouponCode')"
@set-coupons-count="(count) => emitEvent('setCouponsCount', count)"
/>
Expand All @@ -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)
Expand Down Expand Up @@ -153,7 +153,9 @@
@change="(value:string) => $emit('setCustomer',value)"
/>

<SelectedItemTable />
<SelectedItemTable
@apply-pricing-rule="emitEvent('applyPricingRule')"
/>
</div>

<div
Expand Down Expand Up @@ -385,6 +387,7 @@ export default defineComponent({
'routeToSinvList',
'setTransferRefNo',
'setLoyaltyPoints',
'applyPricingRule',
'saveInvoiceAction',
'createTransaction',
'setTransferAmount',
Expand Down
25 changes: 14 additions & 11 deletions src/pages/POS/CouponCodeModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
:style="{ height: appliedCoupons.length >= 2 ? '11vh' : '8vh' }"
>
<Row
v-for="(coupon,index) in appliedCoupons as any"
v-for="(coupon,index) in appliedCoupons as AppliedCouponCodes[]"
:key="index"
:ratio="ratio"
:border="true"
Expand Down Expand Up @@ -115,10 +115,11 @@ import { showToast } from 'src/utils/interactive';
import { AppliedCouponCodes } from 'models/baseModels/AppliedCouponCodes/AppliedCouponCodes';
import Link from 'src/components/Controls/Link.vue';
import { ModelNameEnum } from 'models/types';
import { updatePricingRule, validateCouponCode } from 'models/helpers';
import { validateCouponCode } from 'models/helpers';
import { Field } from 'schemas/types';
import FormControl from 'src/components/Controls/FormControl.vue';
import Row from 'src/components/Row.vue';
import { InvoiceItem } from 'models/baseModels/InvoiceItem/InvoiceItem';
export default defineComponent({
name: 'CouponCodeModal',
Expand All @@ -129,7 +130,7 @@ export default defineComponent({
FormControl,
Row,
},
emits: ['setCouponsCount', 'toggleModal'],
emits: ['setCouponsCount', 'toggleModal', 'applyPricingRule'],
setup() {
return {
Expand Down Expand Up @@ -181,13 +182,11 @@ export default defineComponent({
await this.sinvDoc.append('coupons', { coupons: this.couponCode });
await updatePricingRule(this.sinvDoc);
this.$emit('applyPricingRule');
this.$emit('toggleModal', 'CouponCode');
this.couponCode = '';
this.validationError = false;
this.$emit('setCouponsCount', this.sinvDoc.coupons?.length);
} catch (error) {
this.validationError = true;
Expand All @@ -198,12 +197,16 @@ export default defineComponent({
}
},
async removeAppliedCoupon(coupon: AppliedCouponCodes) {
this.sinvDoc.coupons = this.sinvDoc.coupons?.filter(
(coup) => 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 = '';
Expand Down
9 changes: 6 additions & 3 deletions src/pages/POS/KeyboardModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -338,7 +337,7 @@ export default defineComponent({
default: '',
},
},
emits: ['toggleModal'],
emits: ['toggleModal', 'applyPricingRule'],
setup() {
return {
sinvDoc: inject('sinvDoc') as SalesInvoice,
Expand Down Expand Up @@ -460,7 +459,7 @@ export default defineComponent({
}
if (this.selectedItemField === 'quantity') {
await updatePricingRuleItem(this.sinvDoc);
this.$emit('applyPricingRule');
}
}
Expand All @@ -471,6 +470,10 @@ export default defineComponent({
type: 'error',
message: this.t`${error as string}`,
});
if (this.selectedItemField === 'quantity') {
this.$emit('applyPricingRule');
}
}
},
async deleteLast() {
Expand Down
5 changes: 4 additions & 1 deletion src/pages/POS/ModernPOS.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

<CouponCodeModal
:open-modal="openCouponCodeModal"
@apply-pricing-rule="emitEvent('applyPricingRule')"
@toggle-modal="emitEvent('toggleModal', 'CouponCode')"
@set-coupons-count="(count) => emitEvent('setCouponsCount', count)"
/>
Expand All @@ -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)
Expand All @@ -61,6 +61,7 @@
:selected-item-field="selectedItemField"
:selected-item-row="(selectedItemRow as SalesInvoiceItem)"
@toggle-modal="emitEvent('toggleModal', 'Keyboard')"
@apply-pricing-rule="emitEvent('applyPricingRule')"
/>

<div class="bg-gray-25 dark:bg-gray-875 grid grid-cols-9 gap-3 p-4">
Expand Down Expand Up @@ -91,6 +92,7 @@

<ModernPOSSelectedItemTable
@selected-row="selectedRow"
@apply-pricing-rule="emitEvent('applyPricingRule')"
@toggle-modal="emitEvent('toggleModal', 'Keyboard')"
/>
</div>
Expand Down Expand Up @@ -397,6 +399,7 @@ export default defineComponent({
'routeToSinvList',
'setLoyaltyPoints',
'setTransferRefNo',
'applyPricingRule',
'saveInvoiceAction',
'createTransaction',
'setTransferAmount',
Expand Down
26 changes: 9 additions & 17 deletions src/pages/POS/POS.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand Down
2 changes: 0 additions & 2 deletions src/pages/POS/PaymentModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ export default defineComponent({
'setTransferClearanceDate',
'setTransferRefNo',
'toggleModal',
'setCouponsCount',
],
setup() {
return {
Expand Down Expand Up @@ -323,7 +322,6 @@ export default defineComponent({
},
submitTransaction() {
this.$emit('createTransaction');
this.$emit('setCouponsCount', 0);
},
},
});
Expand Down

0 comments on commit ede6f3f

Please sign in to comment.