mirror of
https://github.com/frappe/books.git
synced 2026-08-24 02:24:17 -05:00
fix: expire loyalty program on maximum usage
This commit is contained in:
@@ -30,6 +30,7 @@ import {
|
||||
getItemVisibility,
|
||||
validateLoyaltyProgram,
|
||||
getLoyaltyProgramTier,
|
||||
isLoyaltyProgramMaxedOut,
|
||||
} from 'models/helpers';
|
||||
import { StockTransfer } from 'models/inventory/StockTransfer';
|
||||
import { validateBatch } from 'models/inventory/helpers';
|
||||
@@ -1086,7 +1087,18 @@ export abstract class Invoice extends Transactional {
|
||||
ModelNameEnum.Party,
|
||||
this.party
|
||||
);
|
||||
return partyDoc?.loyaltyProgram as string;
|
||||
const loyaltyProgramName = partyDoc?.loyaltyProgram as string;
|
||||
|
||||
if (!loyaltyProgramName) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const maxedOut = await isLoyaltyProgramMaxedOut(
|
||||
this.fyo,
|
||||
loyaltyProgramName
|
||||
);
|
||||
|
||||
return maxedOut ? '' : loyaltyProgramName;
|
||||
},
|
||||
dependsOn: ['party', 'name'],
|
||||
},
|
||||
|
||||
@@ -1654,6 +1654,37 @@ export async function validateLoyaltyProgram(
|
||||
}
|
||||
}
|
||||
|
||||
export async function isLoyaltyProgramMaxedOut(
|
||||
fyo: Fyo,
|
||||
loyaltyProgramName: string
|
||||
): Promise<boolean> {
|
||||
if (!loyaltyProgramName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const loyaltyProgram = await fyo.db.getAll(ModelNameEnum.LoyaltyProgram, {
|
||||
fields: ['maximumUse', 'used', 'isEnabled'],
|
||||
filters: { name: loyaltyProgramName },
|
||||
});
|
||||
|
||||
if (!loyaltyProgram[0]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!loyaltyProgram[0]?.isEnabled) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const maximumUse = loyaltyProgram[0]?.maximumUse as number;
|
||||
const used = loyaltyProgram[0]?.used as number;
|
||||
|
||||
if (!maximumUse) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return used >= maximumUse;
|
||||
}
|
||||
|
||||
export function removeFreeItems(sinvDoc: SalesInvoice) {
|
||||
if (!sinvDoc || !sinvDoc.items) {
|
||||
return;
|
||||
|
||||
+18
-2
@@ -166,6 +166,7 @@ import {
|
||||
removeFreeItems,
|
||||
getItemRateFromPriceList,
|
||||
getItemVisibility,
|
||||
isLoyaltyProgramMaxedOut,
|
||||
} from 'models/helpers';
|
||||
import {
|
||||
POSItem,
|
||||
@@ -495,7 +496,21 @@ export default defineComponent({
|
||||
filters: { name: value },
|
||||
});
|
||||
|
||||
this.loyaltyProgram = party[0]?.loyaltyProgram as string;
|
||||
const loyaltyProgramName = party[0]?.loyaltyProgram as string;
|
||||
|
||||
if (loyaltyProgramName) {
|
||||
const isMaxedOut = await isLoyaltyProgramMaxedOut(
|
||||
this.fyo,
|
||||
loyaltyProgramName
|
||||
);
|
||||
if (isMaxedOut) {
|
||||
this.loyaltyProgram = '';
|
||||
this.loyaltyPoints = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.loyaltyProgram = loyaltyProgramName;
|
||||
this.loyaltyPoints = party[0]?.loyaltyPoints as number;
|
||||
},
|
||||
|
||||
@@ -644,7 +659,8 @@ export default defineComponent({
|
||||
this.fyo.singles.AccountingSettings?.enablePriceList &&
|
||||
this.loyaltyPoints &&
|
||||
this.sinvDoc.party &&
|
||||
this.sinvDoc.items?.length
|
||||
this.sinvDoc.items?.length &&
|
||||
this.loyaltyProgram
|
||||
) {
|
||||
this.toggleModal('LoyaltyProgram', true);
|
||||
}
|
||||
|
||||
@@ -76,7 +76,9 @@
|
||||
<div
|
||||
class="relative group"
|
||||
:class="{
|
||||
hidden: !fyo.singles.AccountingSettings?.enableLoyaltyProgram,
|
||||
hidden:
|
||||
!fyo.singles.AccountingSettings?.enableLoyaltyProgram ||
|
||||
!loyaltyProgram,
|
||||
}"
|
||||
>
|
||||
<div
|
||||
|
||||
Reference in New Issue
Block a user