{"version":3,"file":"price-processor.js","sourceRoot":"","sources":["../../Assets/js/src/modules/price-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import PriceInformation = require(\"../models/priceInformation\");\r\nimport DiscountNudge = require(\"../models/discountNudge\");\r\nimport Utility = require(\"helper-module\");\r\nimport DisplayPrice = require(\"../models/displayPrice\");\r\nimport DiscountType = require(\"../models/discountType\");\r\nimport DiscountNudgeType = require(\"../models/discountNudgeType\");\r\n\r\nconst basketRowSelectorName = \"data-basket-row\";\r\nconst priceInformationSelectorName = \"data-discount-information\";\r\nconst quantityPriceSelectorName = \"data-quantity-price\";\r\nconst displayCurrencySelectorName = \"data-display-currency\";\r\nconst discountNudgeStockCodeSelectorName = \"data-discount-nudge-stock-code\";\r\nconst productListSelectorName = '[data-product-list]';\r\nconst discountInformationPriceWasContainerSelectorName = \"[data-discount-information-price-was-container]\";\r\nconst discountInformationPriceNowLabelSelectorName = \"[data-discount-information-price-now-label]\";\r\nconst discountInformationTextSelectorName = \"[data-discount-information-text]\";\r\nconst discountInformationPercentageSelectorName = \"[data-discount-information-percentage]\";\r\nconst discountInformationPriceNowSelectorName = \"[data-discount-information-price-now]\";\r\nconst addToBasketCurrencyItemSelectorName = \"#itemAddToBasket [data-quantity-price] [data-display-currency]\";\r\nconst multiBasketCurrencyTotalSelectorName = \"[data-multi-basket-total] [data-display-currency]\";\r\nconst priceInformationPriceWasSelectorName = \"[data-price-information-price-was]\";\r\nconst priceInformationPriceNowSelectorName = \"[data-price-information-price-now]\";\r\n\r\nconst calculateNewTotal = function (itemPrice: number, discount: number, quantity: number): number {\r\n const totalWithoutDiscount = Utility.round(itemPrice * quantity);\r\n const unitDiscount = Utility.roundDown(itemPrice / 100 * discount);\r\n return Utility.round(totalWithoutDiscount - Utility.round(unitDiscount * quantity));\r\n}\r\n\r\nconst makeABigPrice = function (currency: string, price: number): string {\r\n const priceArray = price.toFixed(2).split('.');\r\n\r\n return currency + \"<span class='big-price'>\" + priceArray[0] + \"</span>.\" + priceArray[1];\r\n}\r\n\r\nconst calculateDiscountedPrice = function (itemPrice: number, discount: number): number {\r\n const discountValue = Utility.roundDown(itemPrice / 100 * discount);\r\n return Utility.roundDown(itemPrice - discountValue);\r\n}\r\n\r\nconst updateCurrencyPrice = function (container: HTMLElement, value: number, currencySymbol: string) {\r\n container.querySelectorAll(\"[\" + displayCurrencySelectorName + \"='\" + currencySymbol + \"']\")\r\n .forEach(el => {\r\n el.innerHTML = makeABigPrice(currencySymbol, value);\r\n });\r\n}\r\n\r\nconst discountTypeApplicableForCartonDiscount = function (discountType: string) {\r\n return discountType === DiscountType.Price4 || discountType === DiscountType.Price6\r\n || discountType === DiscountType.S || discountType === DiscountType.R;\r\n}\r\n\r\n\r\nconst getBasePriceByStockCode = function (discountNudge: DiscountNudge, stockCode: string): number {\r\n let basePrice: number;\r\n discountNudge.products.forEach(product => {\r\n if (product.stockCode === stockCode) {\r\n basePrice = product.basePrice;\r\n }\r\n });\r\n\r\n return basePrice;\r\n}\r\n\r\nconst getBasePrice = function (priceInformation: PriceInformation, achievedDiscount: DiscountNudge): number {\r\n\r\n if (discountTypeApplicableForCartonDiscount(priceInformation.discountType) && achievedDiscount === null) {\r\n return priceInformation.displayWasAmount.price;\r\n }\r\n\r\n // no discount - return current price\r\n if (achievedDiscount === null || achievedDiscount.discountNudgeType === DiscountNudgeType.Promotion) {\r\n return priceInformation.displayNowAmount.primaryPrice.price;\r\n }\r\n\r\n // return was price for discount calculation\r\n return priceInformation.displayWasAmount.price;\r\n}\r\n\r\nconst getDiscount = function (priceInformation: PriceInformation, achievedDiscount: DiscountNudge): number {\r\n // if base discount is applicable for carton discount\r\n if (discountTypeApplicableForCartonDiscount(priceInformation.discountType) && achievedDiscount === null) {\r\n return priceInformation.discountPercentage;\r\n }\r\n\r\n // no discount - return current price\r\n if (achievedDiscount === null || achievedDiscount.discountNudgeType === DiscountNudgeType.Promotion) {\r\n return 0;\r\n }\r\n\r\n // for group discount is always a given discount\r\n if (achievedDiscount.discountNudgeType === DiscountNudgeType.GroupDiscount\r\n || achievedDiscount.discountNudgeType === DiscountNudgeType.VolumeDiscount) {\r\n return achievedDiscount.discount;\r\n }\r\n\r\n // carton discount could be combined with some other disocunts so we need to calculate proper discount\r\n if (priceInformation.discountPercentage > 0 && priceInformation.discountType !== DiscountType.T) {\r\n return achievedDiscount.discount + priceInformation.discountPercentage - (achievedDiscount.discount * priceInformation.discountPercentage / 100);\r\n } else {\r\n return achievedDiscount.discount;\r\n }\r\n}\r\n\r\nconst getDiscountName = function (discount: DiscountNudge): string {\r\n return discount.discountNudgeType === DiscountNudgeType.VolumeDiscount ? \"Volume Discount\" : \"Customer Discount\"\r\n}\r\n\r\n\r\nconst updateGrandTotal = function() {\r\n const currencyTotals: DisplayPrice[] = [];\r\n const currencyItems = document.querySelectorAll(addToBasketCurrencyItemSelectorName) as NodeListOf<HTMLElement>;\r\n\r\n // find total prices for each line\r\n currencyItems.forEach(currencyItem => {\r\n const currencySymbol = currencyItem.getAttribute(displayCurrencySelectorName);\r\n const price = parseFloat(currencyItem.innerText.replace(currencySymbol, \"\"));\r\n\r\n currencyTotals.push({ currencySymbol: currencySymbol, price: price });\r\n });\r\n\r\n //update totals\r\n const multiBasketCurrencyTotals = document.querySelectorAll(multiBasketCurrencyTotalSelectorName) as NodeListOf<HTMLElement>;\r\n multiBasketCurrencyTotals.forEach(multiBasketCurrencyTotal => {\r\n const totalCurrencySymbol = multiBasketCurrencyTotal.getAttribute(displayCurrencySelectorName);\r\n const applicablePrices = currencyTotals.filter(x => x.currencySymbol === totalCurrencySymbol);\r\n\r\n let grandTotal = 0;\r\n applicablePrices.forEach(applicablePrice => {\r\n grandTotal += applicablePrice.price;\r\n });\r\n\r\n multiBasketCurrencyTotal.innerHTML = makeABigPrice(totalCurrencySymbol, Utility.round(grandTotal));\r\n });\r\n}\r\n\r\nconst updateDiscountInformation = function (\r\n priceInformationContainer: HTMLElement,\r\n basePriceInformation: PriceInformation,\r\n achivedDiscount: DiscountNudge,\r\n newTotal: number,\r\n basketQuantity: number) {\r\n if (basePriceInformation === null) {\r\n return;\r\n }\r\n\r\n const isDiscountAchieved = achivedDiscount !== null;\r\n const baseDiscountType = basePriceInformation.discountType;\r\n const originalPrice = basePriceInformation.displayWasAmount.price;\r\n const appliedDiscount = isDiscountAchieved ? achivedDiscount.discount : 0;\r\n const currency = basePriceInformation.displayNowAmount.primaryPrice.currencySymbol;\r\n let priceNow = 0;\r\n let discountInformationText = \"\";\r\n let discountPercentage = 0;\r\n let showDiscountInformation = basePriceInformation.showDiscountInformation;\r\n \r\n // based on discount achived and previous discount process discount information, percentage and price\r\n if (isDiscountAchieved && achivedDiscount.discountNudgeType === DiscountNudgeType.CartonDiscount) {\r\n if (discountTypeApplicableForCartonDiscount(baseDiscountType)) {\r\n discountInformationText = \"Sale and Carton Discount\";\r\n } else {\r\n discountInformationText = \"Carton discount\";\r\n }\r\n\r\n priceNow = basketQuantity > 0\r\n ? Utility.round(newTotal / basketQuantity)\r\n : basePriceInformation.displayWasAmount.price - Utility.round(basePriceInformation.displayWasAmount.price / 100 * appliedDiscount);\r\n discountPercentage = Utility.round(100 * (originalPrice - priceNow) / originalPrice);\r\n\r\n if (achivedDiscount.additionalDiscount !== null && achivedDiscount.combinedDiscount !== null) {\r\n // regular discount\r\n priceNow = basePriceInformation.displayWasAmount.price - Utility.round(basePriceInformation.displayWasAmount.price / 100 * appliedDiscount);\r\n // additional discount\r\n priceNow = priceNow - Utility.round(priceNow / 100 * achivedDiscount.additionalDiscount);\r\n discountPercentage = achivedDiscount.combinedDiscount;\r\n }\r\n\r\n showDiscountInformation = true;\r\n } else if (appliedDiscount > 0 && basketQuantity === 0) {\r\n priceNow = originalPrice - Utility.roundDown(originalPrice * appliedDiscount / 100);\r\n discountInformationText = getDiscountName(achivedDiscount);\r\n discountPercentage = Math.round(appliedDiscount);\r\n showDiscountInformation = true;\r\n } else if (appliedDiscount > 0) {\r\n priceNow = Utility.round(newTotal / basketQuantity);\r\n discountInformationText = getDiscountName(achivedDiscount);\r\n discountPercentage = Math.round(100 * (originalPrice - priceNow) / originalPrice);\r\n showDiscountInformation = true;\r\n } else if (!isDiscountAchieved && discountTypeApplicableForCartonDiscount(baseDiscountType) && basketQuantity > 0) {\r\n priceNow = Utility.round(newTotal / basketQuantity);\r\n discountInformationText = \"Sale Discount\";\r\n discountPercentage = Utility.round(100 * (originalPrice - priceNow) / originalPrice);\r\n showDiscountInformation = true;\r\n } else {\r\n priceNow = basePriceInformation.displayNowAmount.primaryPrice.price;\r\n discountInformationText = basePriceInformation.discountInformation;\r\n discountPercentage = basePriceInformation.discountPercentage;\r\n if (discountPercentage > 0) {\r\n showDiscountInformation = true;\r\n } else {\r\n showDiscountInformation = false;\r\n }\r\n }\r\n\r\n // show/hide discount information\r\n\r\n const discountInformationPriceNowLabel = priceInformationContainer.querySelector(discountInformationPriceNowLabelSelectorName);\r\n if (showDiscountInformation === true) {\r\n priceInformationContainer.querySelector(discountInformationPriceWasContainerSelectorName).classList.remove('hidden');\r\n if (discountInformationPriceNowLabel !== null) {\r\n discountInformationPriceNowLabel.innerHTML = 'Nett';\r\n }\r\n } else {\r\n priceInformationContainer.querySelector(discountInformationPriceWasContainerSelectorName).classList.add('hidden');\r\n if (discountInformationPriceNowLabel !== null) {\r\n discountInformationPriceNowLabel.innerHTML = 'Price';\r\n }\r\n }\r\n\r\n // update discount information text and percentage information\r\n priceInformationContainer.querySelector(discountInformationTextSelectorName).innerHTML = discountInformationText;\r\n const discountPercentageText = discountPercentage > 0 ? Math.round(discountPercentage) + '% discount' : '';\r\n priceInformationContainer.querySelector(discountInformationPercentageSelectorName).innerHTML = discountPercentageText;\r\n\r\n updateCurrencyPrice(\r\n priceInformationContainer.querySelector(discountInformationPriceNowSelectorName),\r\n priceNow,\r\n currency);\r\n updateGrandTotal();\r\n}\r\n\r\n// Method called when quantite has been updated\r\nexport function processPrices(discountNudgeContainer: HTMLElement, achivedDiscount: DiscountNudge, basketQuantity: number) {\r\n basketQuantity = basketQuantity !== undefined ? basketQuantity : 0;\r\n const basketRowContainer = discountNudgeContainer.closest('[' + basketRowSelectorName + ']');\r\n const priceInformationContainer = basketRowContainer.querySelector('[' + priceInformationSelectorName + ']') as HTMLElement;\r\n\r\n if (priceInformationContainer !== null) {\r\n const priceInformationJSON = JSON.parse(priceInformationContainer.getAttribute(priceInformationSelectorName), Utility.toCamelCase);\r\n\r\n const priceInformation: PriceInformation = Object.assign(new PriceInformation(), priceInformationJSON);\r\n const totalContainer = basketRowContainer.querySelector('[' + quantityPriceSelectorName + ']') as HTMLElement;\r\n\r\n const basePrice = getBasePrice(priceInformation, achivedDiscount);\r\n const currency = priceInformation.displayNowAmount.primaryPrice.currencySymbol;\r\n const discount = getDiscount(priceInformation, achivedDiscount);\r\n\r\n const newTotal = calculateNewTotal(basePrice, discount, basketQuantity);\r\n updateCurrencyPrice(totalContainer, newTotal, currency);\r\n if (!priceInformation.hideDiscountsForCustomer) {\r\n updateDiscountInformation(priceInformationContainer, priceInformation, achivedDiscount, newTotal, basketQuantity);\r\n } else {\r\n updateGrandTotal();\r\n }\r\n } else {\r\n const isProductListPage = document.querySelector(productListSelectorName) !== null;\r\n if (isProductListPage && achivedDiscount !== null) {\r\n const stockCode = discountNudgeContainer.getAttribute(discountNudgeStockCodeSelectorName);\r\n const basePrice = getBasePriceByStockCode(achivedDiscount, stockCode);\r\n if (basePrice != null) {\r\n const discount = achivedDiscount.discount;\r\n const priceInformationPriceNowContainer = basketRowContainer.querySelector(priceInformationPriceNowSelectorName);\r\n const currencyContainer = priceInformationPriceNowContainer.querySelector('[' + displayCurrencySelectorName + ']');\r\n const currency = currencyContainer.getAttribute(displayCurrencySelectorName);\r\n\r\n const discountedPrice = calculateDiscountedPrice(basePrice, discount);\r\n\r\n const priceInformationPriceWasElement = basketRowContainer.querySelector(priceInformationPriceWasSelectorName);\r\n\r\n if (priceInformationPriceWasElement !== null) {\r\n basketRowContainer.querySelector(priceInformationPriceWasSelectorName).classList.remove('hidden');\r\n }\r\n\r\n currencyContainer.innerHTML = makeABigPrice(currency, discountedPrice);\r\n }\r\n }\r\n }\r\n}"]}