2023-07-13 13:45:38 +00:00
|
|
|
import { CartData, Discount } from "../../model";
|
|
|
|
|
|
|
|
|
|
|
|
export function applyCartDiscount(
|
|
|
|
cartData: CartData,
|
|
|
|
discounts: Discount[],
|
|
|
|
) {
|
|
|
|
const cartDiscount = findCartDiscount(cartData.priceAfterDiscounts, discounts);
|
2023-07-22 14:02:07 +00:00
|
|
|
if (cartDiscount.discount) {
|
|
|
|
cartData.priceAfterDiscounts *= cartDiscount.factor;
|
2023-07-24 12:36:08 +00:00
|
|
|
cartData.allAppliedDiscounts.push(cartDiscount.discount);
|
|
|
|
cartData.appliedCartPurchasesDiscount = cartDiscount.discount;
|
2023-07-22 14:02:07 +00:00
|
|
|
}
|
2023-07-13 13:45:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export function findCartDiscount(
|
|
|
|
cartPurchasesAmount: number,
|
|
|
|
discounts: Discount[],
|
2023-07-13 14:14:59 +00:00
|
|
|
): {
|
|
|
|
discount: Discount | null,
|
|
|
|
factor: number,
|
|
|
|
} {
|
2023-07-13 13:45:38 +00:00
|
|
|
const applicableDiscounts = discounts.filter(discount => {
|
|
|
|
return (
|
|
|
|
discount.Layer === 3 &&
|
|
|
|
cartPurchasesAmount >= discount.Condition.CartPurchasesAmount
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2023-07-13 14:14:59 +00:00
|
|
|
if (!applicableDiscounts.length) return { discount: null, factor: 1 };
|
2023-07-13 13:45:38 +00:00
|
|
|
|
|
|
|
const maxValueDiscount = applicableDiscounts.reduce((prev, current) => {
|
|
|
|
return current.Condition.CartPurchasesAmount > prev.Condition.CartPurchasesAmount ? current : prev;
|
|
|
|
});
|
|
|
|
|
2023-07-13 14:14:59 +00:00
|
|
|
return { discount: maxValueDiscount, factor: maxValueDiscount.Target.Factor };
|
2023-07-13 13:45:38 +00:00
|
|
|
}
|