38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { CartData, Discount } from "../../model";
|
|
import { findDiscountFactor } from "./findDiscountFactor";
|
|
|
|
|
|
export function applyLoyaltyDiscount(
|
|
cartData: CartData,
|
|
discounts: Discount[],
|
|
purchasesAmount: number,
|
|
) {
|
|
const loyalDiscount = findLoyaltyDiscount(purchasesAmount, discounts);
|
|
if (!loyalDiscount) return;
|
|
|
|
cartData.priceAfterDiscounts *= findDiscountFactor(loyalDiscount);
|
|
cartData.allAppliedDiscounts.push(loyalDiscount);
|
|
cartData.appliedLoyaltyDiscount = loyalDiscount;
|
|
}
|
|
|
|
export function findLoyaltyDiscount(
|
|
purchasesAmount: number,
|
|
discounts: Discount[],
|
|
): Discount | null {
|
|
const applicableDiscounts = discounts.filter(discount => {
|
|
return (
|
|
discount.Layer === 4 &&
|
|
discount.Condition.UserType !== "nko" &&
|
|
purchasesAmount >= discount.Condition.PurchasesAmount
|
|
);
|
|
});
|
|
|
|
if (!applicableDiscounts.length) return null;
|
|
|
|
const maxValueDiscount = applicableDiscounts.reduce((prev, current) => {
|
|
return current.Condition.PurchasesAmount > prev.Condition.PurchasesAmount ? current : prev;
|
|
});
|
|
|
|
return maxValueDiscount;
|
|
}
|