import { Tariff } from "@root/model/tariff"; import { ServiceKeyToPrivilegesMap } from "@root/model/privilege"; import { useCartStore } from "@root/stores/cart"; import { useUserStore } from "@root/stores/user"; import { Discount, findCartDiscount, findLoyaltyDiscount, findPrivilegeDiscount, findServiceDiscount } from "@frontend/kitui"; export function calcIndividualTariffPrices(tariff: Tariff, discounts: Discount[], privilegies: ServiceKeyToPrivilegesMap): { price: number | undefined; priceWithDiscounts: number | undefined; } { let price = tariff.price || tariff.privilegies.reduce((sum, privilege) => sum + privilege.amount * privilege.price, 0); let priceWithDiscounts = tariff.privilegies.reduce((sum, privilege) => { let privilegePrice = privilege.amount * privilege.price; let realprivilegie = privilegies[privilege.serviceKey].find(e => e._id === privilege.privilegeId); if (realprivilegie) privilege.privilegeId = realprivilegie.privilegeId; const privilegeDiscount = findPrivilegeDiscount(privilege.privilegeId, privilege.price * privilege.amount, discounts); privilegePrice *= privilegeDiscount.factor; const serviceCartData = useCartStore.getState().cart.services.find(e => e.serviceKey === privilege.serviceKey); let serviceprice = 0; if (serviceCartData) serviceprice = serviceCartData.price; const serviceDiscount = findServiceDiscount(privilege.serviceKey, privilegePrice + serviceprice, discounts); if (serviceDiscount) privilegePrice *= serviceDiscount.factor; return sum + privilegePrice; }, 0); const cartDiscount = findCartDiscount(priceWithDiscounts + useCartStore.getState().cart.priceAfterDiscounts, discounts); priceWithDiscounts *= cartDiscount.factor; const acc = useUserStore.getState(); const loyalDiscount = findLoyaltyDiscount(acc!.userAccount!.wallet.purchasesAmount, discounts); priceWithDiscounts *= loyalDiscount.factor; return { price, priceWithDiscounts, }; }