32 lines
1011 B
TypeScript
32 lines
1011 B
TypeScript
import { Discount } from "../../model/discount";
|
|
import { Tariff } from "../../model/tariff";
|
|
import { calcCart } from "./calcCart";
|
|
|
|
|
|
export function calcTariffPrice(
|
|
targetTariff: Tariff,
|
|
discounts: Discount[],
|
|
purchasesAmount: number,
|
|
currentTariffs: Tariff[],
|
|
isUserNko: boolean,
|
|
userId: string,
|
|
): {
|
|
priceBeforeDiscounts: number;
|
|
priceAfterDiscounts: number;
|
|
} {
|
|
const priceBeforeDiscounts = targetTariff.price || targetTariff.privileges.reduce(
|
|
(sum, privilege) => sum + privilege.amount * privilege.price,
|
|
0
|
|
);
|
|
|
|
const cart = calcCart([...currentTariffs, targetTariff], discounts, purchasesAmount, userId, isUserNko);
|
|
|
|
const tariffCartData = cart.services.flatMap(service => service.tariffs).find(tariff => tariff.id === targetTariff._id);
|
|
if (!tariffCartData) throw new Error(`Target tariff ${targetTariff._id} not found in cart`);
|
|
|
|
return {
|
|
priceBeforeDiscounts,
|
|
priceAfterDiscounts: tariffCartData.price,
|
|
};
|
|
}
|