39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { Discount } from "../../model";
|
|
|
|
|
|
export function findPrivilegeDiscount(
|
|
privilegeId: string,
|
|
privilegePrice: number,
|
|
discounts: Discount[],
|
|
userId: string,
|
|
): Discount | null {
|
|
const applicableDiscounts = discounts.filter(discount => {
|
|
if (discount.Condition.User !== "" && discount.Condition.User === userId) return true;
|
|
|
|
const conditionMinPrice = parseFloat(discount.Condition.Term);
|
|
if (!isFinite(conditionMinPrice)) throw new Error(`Couldn't parse Discount.Condition.Term: ${discount.Condition.Term}`);
|
|
|
|
return (
|
|
discount.Layer === 1 &&
|
|
privilegeId === discount.Condition.Product &&
|
|
privilegePrice >= conditionMinPrice
|
|
);
|
|
});
|
|
|
|
if (!applicableDiscounts.length) return null;
|
|
|
|
let maxValueDiscount: Discount = applicableDiscounts[0];
|
|
for (const discount of applicableDiscounts) {
|
|
if (discount.Condition.User !== "" && discount.Condition.User === userId) {
|
|
maxValueDiscount = discount;
|
|
break;
|
|
}
|
|
|
|
if (Number(discount.Condition.Term) > Number(maxValueDiscount.Condition.Term)) {
|
|
maxValueDiscount = discount;
|
|
}
|
|
}
|
|
|
|
return maxValueDiscount;
|
|
}
|