{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingGlobal.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/AddToCartTrackingModel.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/IAddToCartPush.ts","webpack:///./Typescript/Tracking/Models/AddToCartTracking/IEcondaPush.ts","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingStep1.ts","webpack:///./Typescript/Checkout/checkoutShared.ts","webpack:///./Typescript/Shared/Models/DummyImageSizeEnum.ts","webpack:///./Typescript/Checkout/checkoutStep1.ts","webpack:///./Typescript/Shared/PriceHelper.ts","webpack:///./Typescript/Tracking/GoogleTracking.ts","webpack:///./Typescript/Shared/ProductHelper.ts","webpack:///./Typescript/Factfinder/Tracking/factFinderTracking.ts","webpack:///./Typescript/Checkout/Tracking/checkoutTrackingHelper.ts","webpack:///./Typescript/Shared/AlertHelper.ts","webpack:///./Typescript/Checkout/checkoutService.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","3","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","AddToCartTracking","trackingModel","addToCartPush","JSON","stringify","econdaPush","dataLayer","parse","lineItem","price","product","prices","filter","x","priceType","priceTypeId","currentPriceType","titleMain","id","productId","formatPrice2Digits","getProductNetPrice","brand","publisher","publisherName","getBreadcrumbByTocId","mainTocNodeId","Products","category","variant","mediaType","mediaTypeName","quantity","sku","isbnIssn","comboName","authorList","displayFormat","dimension8","availabilityStatusId","isApproximatePrice","isNew","isStandardwerk","isStandard","isTop","isTopArticle","isPreview","addToCartTrackingData","AddToCartTrackingModel","miniBasket","current_basket","ItemCount","itemCount","TotalNet","totalNet","replace","TotalGross","totalGross","Currency","currency","ProductIdsCurrentBasket","productIds","label","event","eventCategory","eventAction","eventLabel","trackingData","this","AddToCartPush","EcondaPush","addTCartPushProducts","addToCartPushProducts","ecommerce","currencyCode","add","products","forEach","trackingProduct","AddToCartPushProduct","dimesion8","econdaPushProducts","emosUrl","ecSiteId","document","head","querySelector","getAttribute","ecContent","ecProducts","EcondaPushProduct","type","pid","group","count","var1","var2","var3","var4","toString","var5","firstPart","secondPart","buildVar5","var6","onloadTracking","cart","undefined","UC_UI","isInitialized","lineItems","productPrices","productNetPrice","singleItemNetPrice","ProductHelper","breadcrumb","totalNetPrice","amount","setTimeout","updatedLineItem","newQuantitiy","oldQuantity","quantityChange","Number","parseFloat","Math","abs","checkoutService","CheckoutService","basketContainer","$","fillBasket","currentItemList","find","basketItemListClone","clone","html","reverse","addLineItemToBasket","giftLineItems","addGiftLineItemToBasket","replaceWith","currentCart","addClass","areTotalPricesApproximated","removeClass","totalGrossPrice","toLocaleString","style","currencyIsoCode","basketItem","append","fillProductContainer","gift","attr","seoOptimizedUrlPart","hasProduktabbildung","image","getImagePath","getDummyImage","DummyImageSize","large","titleMainHead","remove","edition","publicationYear","totalItemGrossPrice","val","priceDescriptionShort","priceTypeDescription","canNotBeReturned","mediaTypeId","checkAvailabilityStatus","getAvailabilityStatus","dateOfPublicationDescription","mediaGroupName","getDRMInfo","dRMId","drmInfo","drmInfoLinks","bindingType","drmInfoRechts","getSystemanforderungenLink","systemanforderungenLink","displayName","href","target","deliveryTypeId","chosenDeliveryType","description","priceDescriptionLink","getAdditionalPriceInfoByDelivertypeId","additionalPriceInfo","singleItemGrossPrice","some","prepend","loadImage","each","index","element","imageWidth","width","round","buildLineItemChange","lineitem","lineItemChange","lineItemId","updateLineItem","newCart","deleteLineItemFromBasket","deleteElement","basketitem","parents","lineItemToDelete","getLineItemById","newQuantity","deleteLineItem","deletedLineItem","getItemCountForBasket","onChangeQuantityTracking","overrideEmptyBasket","getItemCountInBasket","setItemCountForBasket","TrackMiniBasket","items","basketOverlay","item","itemPrototype","title","availabilityStatus","imageUrl","seoPath","singleItemPrice","totalItemPrice","fillBasketOverlay","console","log","showModal","modal","show","hideModal","hide","on","counter","next","currentvalue","trigger","prev","countElement","lineItemToUpdate","oldQuantitiy","updateQuantityOfLineItem","catch","then","setNewQuantityOfBasketItem","modalId","currentLineItem","produktvariantenContainer","checkItemPrototype","pricetypeId","newCheckItem","priceAmount","priceGross","specialConditions","prop","fillProduktVariantenModal","removeAttr","container","checkitem","fillBezugsartenModal","button","parentContainer","newPricetypeId","updatePriceTypeOfLineItem","_","setNewPricetypeIdOfBasketItem","newChosenDeliveryType","updateChosenDeliveryTypeOfLineItem","setNewChosenDeliveryTypeOfBasketItem","initBasket","showBasket","response","additionalCartInfo","orderCode","customerMessage","fillAdditionalInfo","shippingCostInfo","hideNoShippingCostHintAtCart","showShippingNotification","initEvents","localStorage","setItem","factfinderBasketTracking","addProductByIsbn","input","isbn","addItemByIsbnSearch","dangerAlert","code","addDiscountToCart","e","keyCode","OrderCode","CustomerMessage","redirectLink","trim","addAdditionalInfoToCart","location","isCentPrice","toFixed","error","windowHeight","innerHeight","trackGooglePromotionEvent_view","eventName","promoView","promotions","ecCustomProperties","icampv","rqtype","trackGooglePromotionEvent_click","promoClick","icampc","trboPromotionViewTracking","IsVisibleElement","moduleName","campaignId","campaignName","usertype","_trboq","_trbo","app","tracker","trackExternalView","hasClass","top_of_element","offset","top","bottom_of_element","outerHeight","top_of_screen","scrollTop","Target","loginTracking","pageType","loggedInResult","includes","Cookies","pushTrboId","eId","external_user_id","trackIdLayerComplete","hId","hMail","hKid","externalIdHash","emailHash","kupCustomerNumberHash","trackIdLayerReduced","trackingParam","action","searchQuery","Promise","resolve","reject","storedAvailabilityStatusList","sessionStorage","getItem","text","ajax","method","dataType","url","success","availabilityStatusList","drmId","drmMapping","drmMappingItem","DRmid","AnzeigeText","storedOrderableAvailabilityStatusList","orderableAvailabilityStatusList","deliverytypeId","priceinfo","tocId","height","imageSize","DeliveryTypeID","Bruttopreis","PreisvariantenMerkmal","Urheberzeile","Verlag","factfinderCartTracking","sessionId","contentType","factfinderCheckoutTracking","parent","parseInt","origPos","query","pos","page","pagesize","simi","factFinderCampaign","searchResultClickTracking","closest","CalculatePrice","currentPrice","currentPriceTypeId","highestPriceDescription","highestPrice","laufzeitFaktor","getLaufzeitFaktor","aboWert","summeProbeAbosWerte","getHighestValidPriceFromLineItem","currentDate","Date","validPrices","validFrom","validUntil","max","map","y","summeProbeAbosGrossWerte","hoechsterPreis","priceCalculation","highestPriceAmount","priceNet","CalculatePriceFromLineItem","currentPricetypeId","CalculatePriceFromPriceCalculationModel","fadeIn","elementId","doNotShowAgain","set","fadeOut","spinnerModal","expressKauf","responseText","complete","headers","AddToCartTrackingLineItem","addProductToBasket","ChosenDeliveryType","addPaymentShippingDataToCart","addresschange","paymentmethodChange","bskAdditionalInfo","relatedBusinessPartnerId","paymentmethodchange","updateBillingaddressInCart","billingAddressId","getAvailableDeliveryAddresses","isBusiness","AddAddressesToCartGast","billingAddress","shippingAddress","emailAddress","shippingAsBilling","isGuestUser","reload","AddPaymentmethodToCartGast","isDataUsageAccepted","dataUsageAccepted","AddArvatoAddressesToCart","addresses","getSaferpayIframe","recaptchaResponse"],"mappings":"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","file":"checkoutStep1.4f34fe60c9c0c0fb7946.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([291,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","declare var dataLayer: any[];\r\nimport {\r\n IAddToCartTracking,\r\n ITrackingProduct,\r\n IAddToCartTrackingData,\r\n AddToCartTrackingModel,\r\n} from '../../Tracking/Models/AddToCartTracking/AddToCartTrackingModel';\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { getProductNetPrice } from '../Tracking/checkoutTrackingHelper';\r\nimport { formatPrice2Digits } from '../../Shared/PriceHelper';\r\nimport { getBreadcrumbByTocId } from '../../Shared/ProductHelper';\r\n\r\nexport function AddToCartTracking(trackingModel: IAddToCartTracking) {\r\n if (trackingModel) {\r\n let addToCartPush = JSON.stringify(trackingModel.addToCartPush);\r\n let econdaPush = JSON.stringify(trackingModel.econdaPush);\r\n dataLayer.push(JSON.parse(econdaPush));\r\n dataLayer.push(JSON.parse(addToCartPush));\r\n }\r\n}\r\n\r\nexport async function AddToCartTrackingLineItem(lineItem: ILineItem) {\r\n const price = lineItem.product.prices.filter((x) => x.priceType.priceTypeId ==\r\n lineItem.currentPriceType.priceTypeId)[0];\r\n \r\n let addToCartTrackingData = {\r\n Products: [\r\n {\r\n name: lineItem.product.titleMain,\r\n id: lineItem.product.productId,\r\n price: +formatPrice2Digits(getProductNetPrice(lineItem), true),\r\n brand: lineItem.product.publisher.publisherName,\r\n category: await getBreadcrumbByTocId(\r\n lineItem.product.mainTocNodeId\r\n ),\r\n variant: lineItem.product.mediaType.mediaTypeName,\r\n quantity: 1,\r\n sku: lineItem.product.isbnIssn,\r\n comboName:\r\n lineItem.product.authorList +\r\n ' - ' +\r\n lineItem.product.titleMain,\r\n displayFormat: lineItem.product.displayFormat,\r\n dimension8: lineItem.product.displayFormat,\r\n publisherName: lineItem.product.publisher.publisherName,\r\n availabilityStatusId: lineItem.product.availabilityStatusId,\r\n isApproximatePrice: price?.isApproximatePrice,\r\n isNew: lineItem.product.isNew,\r\n isStandardwerk: lineItem.product.isStandard,\r\n isTop: lineItem.product.isTopArticle,\r\n isPreview: lineItem.product.isPreview\r\n },\r\n ] as ITrackingProduct[],\r\n } as IAddToCartTrackingData;\r\n let addToCartTrackingModel = new AddToCartTrackingModel(\r\n addToCartTrackingData\r\n );\r\n AddToCartTracking(addToCartTrackingModel);\r\n}\r\n\r\nexport function TrackMiniBasket(miniBasket: any) {\r\n if (miniBasket) {\r\n dataLayer.push({\r\n current_basket: {\r\n ItemCount: miniBasket.itemCount,\r\n TotalNet: miniBasket.totalNet?.replace(',', '.'),\r\n TotalGross: miniBasket.totalGross?.replace(',', '.'),\r\n Currency: miniBasket.currency,\r\n ProductIdsCurrentBasket: miniBasket.productIds,\r\n },\r\n });\r\n }\r\n else {\r\n dataLayer.push({\r\n current_basket: {\r\n ItemCount: 0,\r\n TotalNet: 0,\r\n TotalGross: 0,\r\n Currency: 'EUR',\r\n ProductIdsCurrentBasket: '',\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function TrackBasketOverlayInteraction(label: string) {\r\n if (label) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'navigation data',\r\n eventAction: 'meta-cart_interaction',\r\n eventLabel: label,\r\n });\r\n\r\n dataLayer.push({\r\n 'event': \"econdaEvent\",\r\n 'ecCustomProperties': {\r\n 'Target' : ['navigation data', 'meta-cart_interaction' + '/' + label, 0, 'd'], \r\n 'rqtype' : 'hiddenpi'\r\n }\r\n });\r\n }\r\n}\r\n","import { AddToCartPush, IAddToCartPush } from \"./IAddToCartPush\";\r\nimport { EcondaPush, IEcondaPush } from \"./IEcondaPush\";\r\n\r\nexport class AddToCartTrackingModel implements IAddToCartTracking{\r\n constructor(trackingData: IAddToCartTrackingData) {\r\n this.addToCartPush = new AddToCartPush(trackingData.Products);\r\n this.econdaPush = new EcondaPush(trackingData.Products);\r\n }\r\n addToCartPush: IAddToCartPush;\r\n econdaPush: IEcondaPush;\r\n}\r\n\r\nexport interface IAddToCartTracking {\r\n addToCartPush: IAddToCartPush;\r\n econdaPush: IEcondaPush;\r\n}\r\n\r\nexport interface IAddToCartTrackingData {\r\n Products: ITrackingProduct[];\r\n}\r\n\r\nexport interface ITrackingProduct {\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n sku: string;\r\n comboName: string;\r\n displayFormat: string;\r\n publisherName: string;\r\n dimension8: string;\r\n availabilityStatusId: number;\r\n isApproximatePrice: boolean;\r\n isNew: boolean;\r\n isStandardwerk: boolean;\r\n isTop: boolean;\r\n isPreview: boolean;\r\n}\r\n\r\n\r\n\r\n","import { ITrackingProduct } from './AddToCartTrackingModel';\r\n\r\nexport class AddToCartPush implements IAddToCartPush {\r\n constructor(addTCartPushProducts: ITrackingProduct[]) {\r\n this.event = 'eec.addToCart';\r\n this.ecommerce = {} as IEcommerce;\r\n this.ecommerce.currencyCode = 'EUR';\r\n this.ecommerce.add = {} as IAdd;\r\n this.ecommerce.add.products = mapAddToCartPushProducts(addTCartPushProducts);\r\n }\r\n event: string;\r\n ecommerce: IEcommerce;\r\n}\r\n\r\nexport interface IAddToCartPush {\r\n event: string;\r\n ecommerce: IEcommerce;\r\n}\r\n\r\nclass AddToCartPushProduct {\r\n constructor(trackingProduct: ITrackingProduct) {\r\n this.name = trackingProduct.name;\r\n this.id = trackingProduct.id;\r\n this.price = trackingProduct.price;\r\n this.brand = trackingProduct.brand;\r\n this.category = trackingProduct.category;\r\n this.variant = trackingProduct.variant;\r\n this.quantity = trackingProduct.quantity;\r\n this.dimesion8 = trackingProduct.displayFormat;\r\n }\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n dimesion8: string;\r\n}\r\n\r\nexport interface IAddToCartPushProduct {\r\n name: string;\r\n id: number;\r\n price: number;\r\n brand: string;\r\n category: string;\r\n variant: string;\r\n quantity: number;\r\n dimesion8: string;\r\n}\r\n\r\ninterface IEcommerce {\r\n currencyCode: string;\r\n add: IAdd;\r\n}\r\n\r\ninterface IAdd {\r\n products: IAddToCartPushProduct[];\r\n}\r\n\r\nfunction mapAddToCartPushProducts(trackingProducts: ITrackingProduct[]): IAddToCartPushProduct[] {\r\n let addToCartPushProducts = [] as IAddToCartPushProduct[];\r\n trackingProducts.forEach((trackingProduct: ITrackingProduct) => {\r\n addToCartPushProducts.push(new AddToCartPushProduct(trackingProduct));\r\n });\r\n return addToCartPushProducts;\r\n}\r\n","import { ITrackingProduct } from './AddToCartTrackingModel';\r\n\r\nexport class EcondaPush implements IEcondaPush {\r\n constructor(products: ITrackingProduct[]) {\r\n this.emosUrl = '/scripts/Econda/emos3.js';\r\n this.ecSiteId = document.head.querySelector('[name~=econdaurl][content]').getAttribute('content');\r\n this.ecContent = '';\r\n this.ecProducts = mapEcondaPushProducts(products);\r\n }\r\n emosUrl: string;\r\n ecSiteId: string;\r\n ecContent: string;\r\n ecProducts: IEcondaPushProduct[];\r\n}\r\n\r\nexport interface IEcondaPush {\r\n emosUrl: string;\r\n ecSiteId: string;\r\n ecContent: string;\r\n ecProducts: IEcondaPushProduct[];\r\n}\r\n\r\nclass EcondaPushProduct implements IEcondaPushProduct {\r\n constructor(trackingProduct: ITrackingProduct) {\r\n this.type = 'c_add';\r\n this.pid = trackingProduct.id;\r\n this.sku = trackingProduct.sku;\r\n this.name = trackingProduct.comboName;\r\n this.price = trackingProduct.price;\r\n this.group = trackingProduct.category;\r\n this.count = trackingProduct.quantity;\r\n this.var1 = trackingProduct.variant;\r\n this.var2 = trackingProduct.displayFormat;\r\n this.var3 = trackingProduct.publisherName;\r\n this.var4 = trackingProduct.availabilityStatusId.toString();\r\n this.var5 = buildVar5(trackingProduct);\r\n this.var6 = trackingProduct.isApproximatePrice ? 'CaPreis' : 'Festpreis';\r\n }\r\n type: string;\r\n pid: number;\r\n sku: string;\r\n name: string;\r\n price: number;\r\n group: string;\r\n count: number;\r\n var1: string;\r\n var2: string;\r\n var3: string;\r\n var4: string;\r\n var5: string;\r\n var6: string;\r\n dimension8: string;\r\n}\r\n\r\nexport interface IEcondaPushProduct {\r\n type: string;\r\n pid: number;\r\n sku: string;\r\n name: string;\r\n price: number;\r\n group: string;\r\n count: number;\r\n var1: string;\r\n var2: string;\r\n var3: string;\r\n var4: string;\r\n var5: string;\r\n var6: string;\r\n dimension8: string;\r\n}\r\n\r\nfunction mapEcondaPushProducts(trackingProducts: ITrackingProduct[]): IEcondaPushProduct[] {\r\n let econdaPushProducts = [] as IEcondaPushProduct[];\r\n trackingProducts.forEach((trackingProduct: ITrackingProduct) => {\r\n econdaPushProducts.push(new EcondaPushProduct(trackingProduct));\r\n });\r\n return econdaPushProducts;\r\n}\r\n\r\nfunction buildVar5(trackingProduct: ITrackingProduct): string {\r\n let firstPart = 'none';\r\n if (trackingProduct.isTop === true) {\r\n firstPart = 'isTop';\r\n } else if (trackingProduct.isStandardwerk === true) {\r\n firstPart = 'isStandardwerk';\r\n }\r\n\r\n var secondPart = 'none';\r\n if (trackingProduct.isNew == true) {\r\n secondPart = 'isNew';\r\n } else if (trackingProduct.isPreview == true) {\r\n secondPart = 'isPreview';\r\n }\r\n\r\n return `${firstPart}_${secondPart}`;\r\n}\r\n","import ProductHelper = require(\"../../Shared/ProductHelper\");\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { formatPrice2Digits } from \"../../Shared/PriceHelper\";\r\nimport { buildVar5, getProductNetPrice } from \"./checkoutTrackingHelper\";\r\ndeclare var dataLayer: any[];\r\ndeclare var UC_UI: any;\r\n\r\n/**\r\n * führt die dataLayer-Pushes für die übergebenen LineItems aus.\r\n * Für Warenkorb-onload\r\n * @param lineItems\r\n */\r\nexport async function onloadTracking(cart: ICart) {\r\n if (window[\"UC_UI\"] !== undefined && UC_UI.isInitialized) {\r\n let lineItems = cart? cart.lineItems : [];\r\n let products = [];\r\n let productIds = [];\r\n let productPrices = [];\r\n for (let lineItem of lineItems) {\r\n let product = lineItem.product;\r\n productIds.push(product.productId)\r\n let productNetPrice = lineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(lineItem), true) : \"\";\r\n productPrices.push(productNetPrice);\r\n let breadcrumb: string = await ProductHelper.getBreadcrumbByTocId(product.mainTocNodeId);\r\n products.push(\r\n {\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': productNetPrice,\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb ? breadcrumb : \"\",\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': lineItem.quantity,\r\n 'dimension8': product.displayFormat\r\n\r\n });\r\n }\r\n dataLayer.push({\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'pageTitle': 'Warenkorb',\r\n 'event': 'eec.checkoutStep',\r\n 'ecommerce': {\r\n 'checkout': {\r\n 'actionField': { 'step': 1 },\r\n 'products': products\r\n }\r\n }\r\n });\r\n\r\n dataLayer.push({\r\n 'google_tag_params': {\r\n 'ecomm_pagetype': 'cart',\r\n 'ecomm_prodid': productIds,\r\n 'ecomm_pvalue': productPrices,\r\n 'ecomm_totalvalue':(cart && cart.totalNetPrice) ? formatPrice2Digits(cart.totalNetPrice.amount, true) : \"\"\r\n }\r\n\r\n });\r\n\r\n }\r\n else {\r\n setTimeout(onloadTracking.bind(null, cart), 100);\r\n }\r\n \r\n}\r\n\r\n\r\n\r\n /**\r\n * Führt die dataLayer-Pushes für das übergebene LineItem durch.\r\n * add, oder remove bei Quantity-change.\r\n * @param updatedLineItem\r\n * @param oldQuantity\r\n */\r\nexport async function onChangeQuantityTracking(cart: ICart, updatedLineItem: ILineItem, newQuantitiy: number, oldQuantity: number) {\r\n let product = updatedLineItem.product;\r\n let breadcrumb: string = await ProductHelper.getBreadcrumbByTocId(product.mainTocNodeId);\r\n let quantityChange = newQuantitiy - oldQuantity;\r\n const price = updatedLineItem.product.prices.filter((x) => x.priceType.priceTypeId ==\r\n updatedLineItem.currentPriceType.priceTypeId)[0];\r\n if (quantityChange > 0) {\r\n dataLayer.push({\r\n 'ecProducts': [\r\n {\r\n type: 'c_add',\r\n pid: product.productId,\r\n sku: product.isbnIssn,\r\n name: product.authorList + \" - \" + product.titleMain,\r\n price: updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n group: breadcrumb,\r\n count: quantityChange,\r\n var1: product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n var2: product.displayFormat,\r\n var3: product.publisher ? product.publisher.publisherName : \"\",\r\n var4: product.availabilityStatusId.toString(),\r\n var5: buildVar5(product),\r\n var6: price?.isApproximatePrice ? \"CaPreis\" : \"Festpreis\"\r\n }\r\n ],\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'ecSiteId': document.head.querySelector(\"[name~=econdaurl][content]\").getAttribute(\"content\"),\r\n 'ecContent': '',\r\n 'event': 'eec.addToCart',\r\n 'ecommerce': {\r\n 'currencyCode': 'EUR',\r\n 'add': { // 'add' actionFieldObject measures.\r\n 'products': [\r\n { // adding a product to a shopping cart.\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb,\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': quantityChange,\r\n 'dimension8': product.displayFormat\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n {\r\n 'google_tag_params': {\r\n 'ecomm_pagetype': 'cart',\r\n 'ecomm_prodid': product.productId,\r\n 'ecomm_pvalue': updatedLineItem.singleItemNetPrice ? formatPrice2Digits(getProductNetPrice(updatedLineItem), true) : \"\",\r\n 'ecomm_totalvalue': cart.totalNetPrice ? formatPrice2Digits(cart.totalNetPrice.amount, true) : \"\"\r\n\r\n }\r\n }\r\n );\r\n } else {\r\n dataLayer.push({\r\n 'emosUrl': '/scripts/Econda/emos3.js',\r\n 'ecSiteId': document.head.querySelector(\"[name~=econdaurl][content]\").getAttribute(\"content\"),\r\n 'ecContent': '',\r\n 'event': 'eec.removeFromCart',\r\n 'ecommerce': {\r\n 'currencyCode': 'EUR',\r\n 'remove': { // 'remove' actionFieldObject measures.\r\n 'products': [\r\n { // removing a product to a shopping cart.\r\n 'name': product.titleMain,\r\n 'id': product.productId,\r\n 'price': updatedLineItem.singleItemNetPrice ? Number.parseFloat(formatPrice2Digits(getProductNetPrice(updatedLineItem), true)) : \"\",\r\n 'brand': product.publisher ? product.publisher.publisherName : \"\",\r\n 'category': breadcrumb,\r\n 'variant': product.mediaType ? product.mediaType.mediaTypeName : \"\",\r\n 'quantity': Math.abs(quantityChange),\r\n 'dimension8': product.displayFormat\r\n }\r\n ]\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n \r\n","/*\r\n * Wording Info:\r\n * currentCart = zwischengespeicherter Warenkorb in der variable currentCart\r\n * Basket = Html-Objekt, das auf der Webseite zu sehen ist\r\n */\r\nimport { DummyImageSize } from '../Shared/Models/DummyImageSizeEnum';\r\nimport ProductHelper = require('../Shared/ProductHelper');\r\nimport { CheckoutService } from './checkoutService';\r\nimport { TrackMiniBasket } from './Tracking/checkoutTrackingGlobal';\r\nimport { IBasketOverlayModel } from './Models/BasketOverlay/IBasketOverlayModel';\r\nconst checkoutService = new CheckoutService();\r\nimport { onChangeQuantityTracking } from './Tracking/checkoutTrackingStep1';\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport IPrice = CheckoutflowReponse.IPrice;\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport IGiftLineItem = CheckoutflowReponse.IGiftLineItem;\r\nimport ILineItemChange = CheckoutflowRequest.ILineItemChange;\r\nvar basketPrototypes = $('#BasketPrototypes') as JQuery;\r\nvar basketContainer = $('#basket_container') as JQuery;\r\nexport var currentCart: ICart;\r\n\r\n/**\r\n * Füllt den basket_container mit den Daten aus der übergebenen Cart.\r\n * @param cart\r\n * @returns {}\r\n */\r\nexport async function fillBasket(cart: ICart) {\r\n let currentItemList = basketContainer.find('#BasketItemList');\r\n if (cart && cart.lineItems && cart.lineItems.length > 0) {\r\n let basketItemListClone = currentItemList.clone();\r\n basketItemListClone.html('');\r\n\r\n for (let lineItem of cart.lineItems.reverse()) {\r\n await addLineItemToBasket(lineItem, basketItemListClone);\r\n }\r\n\r\n if (cart.giftLineItems && cart.giftLineItems.length > 0) {\r\n for (let giftLineItem of cart.giftLineItems.reverse()) {\r\n addGiftLineItemToBasket(giftLineItem, basketItemListClone);\r\n }\r\n }\r\n\r\n currentItemList.replaceWith(basketItemListClone);\r\n } else {\r\n currentItemList.html('');\r\n }\r\n currentCart = cart;\r\n basketContainer.find('.approximatedPriceNote').addClass('hide');\r\n refreshTotalCartPrice();\r\n basketContainer.addClass('hide');\r\n hideOrShowElementsBasedOnNewCart();\r\n}\r\n\r\nasync function addGiftLineItemToBasket(lineItem: IGiftLineItem, basketItemListClone: JQuery) {\r\n let basketItem = $('#BasketPrototypes')\r\n .find('.basket_lineitem')\r\n .clone();\r\n basketItemListClone.append(basketItem);\r\n await fillProductContainer(basketItem, lineItem, true);\r\n}\r\n\r\nasync function addLineItemToBasket(lineItem: ILineItem, basketItemListClone: JQuery) {\r\n let basketItem = $('#BasketPrototypes')\r\n .find('.basket_lineitem')\r\n .clone();\r\n basketItemListClone.append(basketItem);\r\n await fillProductContainer(basketItem, lineItem, false);\r\n}\r\n\r\n/**\r\n * Füllt das übergebene BasketItem mit den Daten aus dem übergebenen LineItem und blendet es dannach ein\r\n * @param basketItem leerer ausgeblendeter (über die Klasse \"hide\") - aber bereits der Produktliste angehängter - Produktcontainer\r\n * @param lineItem das im Warenkorb liegende LineItem\r\n * @param gift Flag das anzeigt, ob es sich um ein Werbemittel handelt\r\n */\r\nasync function fillProductContainer(basketItem: JQuery, lineItem: ILineItem, gift: boolean) {\r\n let product = lineItem.product;\r\n let productId = product.productId;\r\n\r\n //basketItem\r\n basketItem.attr('id', 'basket_lineitem_' + lineItem.id);\r\n basketItem.attr('data-lineitemid', lineItem.id);\r\n\r\n //productdetails\r\n basketItem.find('.lineitem_productlink').attr('href', '/' + product.seoOptimizedUrlPart + '/product/' + productId);\r\n if (product.hasProduktabbildung) {\r\n let image = basketItem.find('.lineitem_productimage');\r\n image.attr('data-src', await ProductHelper.getImagePath(productId, 100));\r\n } else {\r\n basketItem\r\n .find('.lineitem_productimage')\r\n .attr('data-src', await ProductHelper.getDummyImage(DummyImageSize.large));\r\n }\r\n basketItem.find('.lineitem_title').html(product.titleMainHead ? product.titleMainHead : product.titleMain);\r\n\r\n if (!gift) {\r\n basketItem.find('.lineitem_authorlist').html(product.authorList);\r\n if (product.isbnIssn) {\r\n basketItem.find('.lineitem_isbn').html('ISBN ' + product.isbnIssn);\r\n } else {\r\n basketItem.find('.lineitem_isbn').addClass('hide');\r\n }\r\n basketItem.find('.lineitem_edition').html(product.edition);\r\n if (product.publicationYear > 0) {\r\n basketItem.find('.lineitem_publicationyear').html(product.publicationYear + '');\r\n }\r\n basketItem.find('.lineitem_mediatype').html(product.mediaType.mediaTypeName);\r\n } else {\r\n basketItem.find('.isbn-webcode.lineitem_isbn').remove();\r\n basketItem.find('.counter-elements.ajax_checkout_counter').remove();\r\n }\r\n\r\n if (product.publisher && product.publisher.publisherName) {\r\n basketItem.find('.lineitem_publisher').html(product.publisher.publisherName);\r\n }\r\n\r\n basketItem.find('.lineitem_totalprice').html(\r\n (lineItem.totalItemGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: lineItem.totalItemGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n\r\n basketItem\r\n .find('.lineitem_count')\r\n .val(lineItem.quantity + '')\r\n .html(lineItem.quantity + '');\r\n\r\n let price = product.prices.filter(\r\n x => x.priceType.priceTypeId == lineItem.currentPriceType.priceTypeId\r\n )[0] as IPrice;\r\n basketItem\r\n .find('.lineitem_pricetypedescription')\r\n .html(\r\n price.priceDescriptionShort ? price.priceDescriptionShort : lineItem.currentPriceType.priceTypeDescription\r\n );\r\n\r\n if (price.isApproximatePrice) {\r\n basketItem.find('.lineitem_caInfo').removeClass('hide');\r\n }\r\n\r\n // mediaTypeId == 213 entspricht e-Learning\r\n if (product.canNotBeReturned || product.mediaType.mediaTypeId == 213) {\r\n basketItem.find('.LineItem_CanNotBeReturnedLabel').removeClass('hide');\r\n }\r\n //Ebook oder kostenloses Produkt\r\n if (!gift && (product.mediaType.mediaTypeId == 82 || lineItem.totalItemGrossPrice.amount === 0)) {\r\n basketItem.find('.ajax_checkout_counter').addClass('disabled-Element');\r\n }\r\n if (!ProductHelper.checkAvailabilityStatus(product.availabilityStatusId)) {\r\n basketItem.find('.LineItem_CanNotBeOrderedLabel').removeClass('hide');\r\n } else {\r\n let status = await ProductHelper.getAvailabilityStatus(product.availabilityStatusId);\r\n if (\r\n product.availabilityStatusId == 3 &&\r\n product.dateOfPublicationDescription != null &&\r\n product.dateOfPublicationDescription != ''\r\n ) {\r\n basketItem\r\n .find('.lineitem_availability')\r\n .html(\r\n (await ProductHelper.getAvailabilityStatus(product.availabilityStatusId)) +\r\n ' (' +\r\n product.dateOfPublicationDescription +\r\n ')'\r\n );\r\n } else {\r\n basketItem\r\n .find('.lineitem_availability')\r\n .html(await ProductHelper.getAvailabilityStatus(product.availabilityStatusId));\r\n if (product.availabilityStatusId == 1 || product.availabilityStatusId == 4) {\r\n basketItem.find('.lineitem_availability').addClass('availabilityStatusColorGreen');\r\n basketItem.find('.lineitem_availability_img').removeClass('hide');\r\n }\r\n }\r\n }\r\n if (product.mediaType.mediaTypeId == 213) {\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n if (product.mediaType.mediaGroupName && product.mediaType.mediaGroupName === 'eBook') {\r\n let drmInfo = await ProductHelper.getDRMInfo(product.dRMId);\r\n if (drmInfo) {\r\n let drmInfoLinks = ` (${product.bindingType} ${drmInfo})`;\r\n let drmInfoRechts = `${product.bindingType} (${drmInfo})`;\r\n basketItem\r\n .find('.lineitem_kopierschutzInfo_details')\r\n .html(drmInfoLinks)\r\n .removeClass('hide');\r\n basketItem\r\n .find('.lineitem_kopierschutzInfo_price')\r\n .html(drmInfoRechts)\r\n .removeClass('hide');\r\n }\r\n let systemanforderungenLink = await ProductHelper.getSystemanforderungenLink();\r\n basketItem\r\n .find('.lineitem_systemvoraussetzungenLink')\r\n .removeClass('hide')\r\n .find('a')\r\n .html(systemanforderungenLink.displayName)\r\n .attr('href', systemanforderungenLink.href)\r\n .attr('target', systemanforderungenLink.target);\r\n basketItem.find('.LineItem_isEbook').removeClass('hide');\r\n basketItem.find('.checkoutServiceIcons').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n if (\r\n product.prices.length == 1 &&\r\n (product.deliveryTypeId == 5 || product.deliveryTypeId == 4) &&\r\n !(lineItem.currentPriceType.priceTypeId.toString()[0] === '3')\r\n ) {\r\n //Produktvarianten vorhanden\r\n basketItem.find('.aktualisierungsService_aendern_Button').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n if (lineItem.chosenDeliveryType == 2) {\r\n basketItem.find('.lineitem_aktualisierungsservice').removeClass('hide');\r\n }\r\n if (lineItem.chosenDeliveryType == 1) {\r\n basketItem.find('.lineitem_einzelbezug').removeClass('hide');\r\n }\r\n }\r\n if (product.deliveryTypeId == 2) {\r\n basketItem.find('.LineItem_AbonnementHinweistext').removeClass('hide');\r\n }\r\n basketItem\r\n .find('.lineitem_pricedescription')\r\n .html(\r\n product.prices.filter(x => x.priceType.priceTypeId == lineItem.currentPriceType.priceTypeId)[0].description\r\n )\r\n .removeClass('hide');\r\n\r\n // In der Pricedesription soll der Link auf die Info Seite für den Aktualisierungsservice entfernt werden.\r\n // Ticket ECOM-459\r\n let priceDescriptionLink = basketItem.find('.lineitem_pricedescription').find('a.internal') as JQuery<\r\n HTMLAnchorElement\r\n >;\r\n if (\r\n priceDescriptionLink &&\r\n priceDescriptionLink.length &&\r\n priceDescriptionLink[0].href === 'https://www.beck-shop.de/content/loseblattwerke/aktualisierungsservice/7841/'\r\n ) {\r\n priceDescriptionLink.remove();\r\n }\r\n\r\n if (product.deliveryTypeId == 3 || product.deliveryTypeId == 6) {\r\n let additionalPriceInfo = await ProductHelper.getAdditionalPriceInfoByDelivertypeId(product.deliveryTypeId);\r\n\r\n if (additionalPriceInfo) {\r\n basketItem\r\n .find('.lineitem_additionalPriceInfo')\r\n .html(additionalPriceInfo)\r\n .removeClass('hide');\r\n }\r\n }\r\n\r\n basketItem.find('.lineitem_unitprice').html(\r\n (lineItem.singleItemGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: lineItem.singleItemGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n\r\n if (isPriceApproximated(lineItem)) {\r\n basketItem.find('.lineitem_unitprice').prepend('ca. ');\r\n basketItem.find('.lineitem_totalprice').prepend('ca. ');\r\n }\r\n\r\n //Button-logik\r\n if (product.prices.length > 1) {\r\n //Produktvarianten vorhanden\r\n basketItem.find('.produktvariante_aendern_button').removeClass('hide');\r\n basketItem.find('.price_container').addClass('service');\r\n }\r\n basketItem.removeClass('hide');\r\n loadImage(basketItem);\r\n}\r\n\r\nexport async function loadImage(basketItem) {\r\n let allImageWrapper = $(basketItem).find('.imgWrapper');\r\n allImageWrapper.each((index, element) => {\r\n let imageWidth = $(element).width();\r\n let image = $(element).find('.lineitem_productimage');\r\n image.attr('src', `${image.attr('data-src')}&width=${Math.round(imageWidth)}`);\r\n });\r\n}\r\n\r\n/**\r\n * Überprüft ob ein Preis des LineItems ein Circa-Preis ist\r\n * @param lineitem\r\n */\r\nfunction isPriceApproximated(lineitem: ILineItem): boolean {\r\n return lineitem.product.prices.some(x => x.isApproximatePrice);\r\n}\r\n\r\n/**\r\n * füllt das update-Model mit den aktuellen Daten. Das was geändert werden soll wird in der entsprechenden Methode angepasst.\r\n * @param lineitem\r\n */\r\nfunction buildLineItemChange(lineitem: ILineItem): ILineItemChange {\r\n let lineItemChange = {} as ILineItemChange;\r\n lineItemChange.productId = lineitem.product.productId;\r\n lineItemChange.lineItemId = lineitem.id;\r\n lineItemChange.quantity = lineitem.quantity;\r\n return lineItemChange;\r\n}\r\n\r\n/*\r\n * Setzt den Gesamtpreis des Baskets auf den aktuellen Wert aus der currentCart.\r\n * Wenn es sich um einen Ca.-Preis handelt wird \"Preis auf Anfrage\" zusammen mit einer Erläuterung ausgegeben\r\n */\r\nfunction refreshTotalCartPrice() {\r\n if (currentCart) {\r\n if (currentCart.areTotalPricesApproximated) {\r\n $('#basket_container')\r\n .find('.basket_totalprice')\r\n .html('Preis auf Anfrage');\r\n $('#basket_container')\r\n .find('.approximatedPriceNote')\r\n .removeClass('hide');\r\n } else {\r\n if (currentCart.totalGrossPrice.amount != undefined) {\r\n $('#basket_container')\r\n .find('.basket_totalprice')\r\n .html(\r\n (currentCart.totalGrossPrice.amount / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: currentCart.totalGrossPrice.currency.currencyIsoCode,\r\n })\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n/*\r\n * Zeigt Elemente an oder blendet Sie aus je nachdem ob die currentCart befüllt ist oder nicht\r\n */\r\nfunction hideOrShowElementsBasedOnNewCart() {\r\n if (currentCart && currentCart.lineItems.length > 0) {\r\n $('#basket_container').removeClass('hide');\r\n $('.onlyShowInFilledBasket').removeClass('hide');\r\n $('.showInEmptyBasket').addClass('hide');\r\n $('.disableInEmptyBasket').removeClass('disabled-Element');\r\n } else {\r\n $('.onlyShowInFilledBasket').addClass('hide');\r\n $('.showInEmptyBasket').removeClass('hide');\r\n $('.disableInEmptyBasket').addClass('disabled-Element');\r\n }\r\n}\r\n\r\nexport function initEvents() {\r\n //Zieht dem Item-Quantity 1 ab und triggert das Change Event des input-Fields\r\n $(basketContainer).on('click', '.ajax_checkout_counter .counter-subtr', function() {\r\n let counter = $(this).next('.lineitem_count');\r\n let currentvalue = +counter.val();\r\n if (currentvalue > 1) {\r\n counter.val(currentvalue - 1);\r\n counter.trigger('change');\r\n } else {\r\n deleteLineItemFromBasket($(this));\r\n }\r\n });\r\n\r\n //Addiert 1 zu der Item-Quantity und triggert das Change Event des input-Fields\r\n $(basketContainer).on('click', '.ajax_checkout_counter .counter-add', function() {\r\n let counter = $(this).prev('.lineitem_count');\r\n let currentvalue = +counter.val();\r\n counter.val(currentvalue + 1);\r\n counter.trigger('change');\r\n });\r\n\r\n //Updatet die LineItem-Quantity auf den Wert des Input-Fields\r\n $(basketContainer).on('change', '.lineitem_count', function() {\r\n if ($(this).val() < 1) {\r\n $(this).val(1);\r\n } else {\r\n setNewQuantityOfBasketItem($(this));\r\n }\r\n });\r\n\r\n //Disabled den löschen-Button und löscht dann das LineItem\r\n $(basketContainer).on('click', '.ajax_checkout_delete_from_basket', function() {\r\n $(this).addClass('disabled-Element');\r\n deleteLineItemFromBasket($(this));\r\n });\r\n\r\n //Zeigt das Aktualisierungs-Service-Modal an\r\n $(basketContainer).on('click', '.changeServiceTrigger', function() {\r\n let modalId = $(this).attr('data-target');\r\n showModal($(modalId));\r\n });\r\n\r\n //Füllt das Modal aus dem geklickten LineItem und zeigt es an\r\n $(basketContainer).on('click', '.produktvariante_aendern_button', function() {\r\n let modalId = $(this).attr('data-target');\r\n let modal = $(modalId);\r\n let lineItemId = $(this)\r\n .parents('.basket_lineitem')\r\n .attr('data-lineitemid') as string;\r\n let currentLineItem = getLineItemById(lineItemId);\r\n fillProduktVariantenModal(modal, currentLineItem);\r\n showModal(modal);\r\n });\r\n\r\n //Füllt das Modal aus dem geklickten LineItem und zeigt es an\r\n $(basketContainer).on('click', '.aktualisierungsService_aendern_Button', function() {\r\n let modalId = $(this).attr('data-target');\r\n let modal = $(modalId);\r\n modal.find('.disabled-Element').removeClass('disabled-Element');\r\n modal.find('input[type=radio]').removeAttr('checked');\r\n let lineItemId = $(this)\r\n .parents('.basket_lineitem')\r\n .attr('data-lineitemid') as string;\r\n let currentLineItem = getLineItemById(lineItemId);\r\n fillBezugsartenModal(modal, currentLineItem);\r\n showModal(modal);\r\n });\r\n\r\n /**\r\n * Aktualisiert den Pricetype des aktuellen LineItems mit dem neu ausgewählten Pricetype\r\n */\r\n $(basketContainer).on('click', '.refresh-basket-btn_produktvariante', function() {\r\n setNewPricetypeIdOfBasketItem($(this));\r\n });\r\n\r\n //Aktualisiert den ChosenDeliveryType des aktuellen LineItems mit dem neu ausgewählten ChosenDeliveryType\r\n $('.refresh-basket-btn_bezugsarten').on('click', function() {\r\n setNewChosenDeliveryTypeOfBasketItem($(this));\r\n });\r\n}\r\n\r\n//Updatetet die Quantity des LineItems\r\nfunction setNewQuantityOfBasketItem(countElement: JQuery) {\r\n let basketitem = countElement.parents('.basket_lineitem');\r\n basketitem.find('.ajax_checkout_counter').addClass('disabled-Element');\r\n let quantity = countElement.val() as number;\r\n let lineItemId = basketitem.attr('data-lineitemid') as string;\r\n let lineItem = getLineItemById(lineItemId);\r\n updateQuantityOfLineItem(lineItem, quantity)\r\n .catch()\r\n .then(() => {});\r\n}\r\n\r\nfunction setNewPricetypeIdOfBasketItem(button: JQuery) {\r\n button.addClass('disabled-Element');\r\n let parentContainer = button.parents('.produktvarianten_modal_content');\r\n let lineItemId = parentContainer.attr('data-lineitemid') as string;\r\n let newPricetypeId = parentContainer.find('.produktvariante_radio:checked').val() as number;\r\n let lineItemToUpdate = getLineItemById(lineItemId);\r\n updatePriceTypeOfLineItem(lineItemToUpdate, newPricetypeId)\r\n .then(_ => {\r\n hideModal(parentContainer.parents('#produktvariantenModal'));\r\n })\r\n .catch()\r\n .then(_ => {\r\n button.removeClass('disabled-Element');\r\n });\r\n}\r\n\r\nfunction setNewChosenDeliveryTypeOfBasketItem(button: JQuery) {\r\n button.addClass('disabled-Element');\r\n let parentContainer = button.parents('.bezugsarten_modal_content');\r\n let lineItemId = parentContainer.attr('data-lineitemid') as string;\r\n let newChosenDeliveryType = +parentContainer.find('.chosenDeliveryType_radio:checked').val() as number;\r\n let lineItemToUpdate = getLineItemById(lineItemId);\r\n updateChosenDeliveryTypeOfLineItem(lineItemToUpdate, newChosenDeliveryType)\r\n .then(_ => {\r\n hideModal(button.parents('#aktualisierungsServiceModal'));\r\n })\r\n .catch()\r\n .then(_ => {\r\n button.removeClass('disabled-Element');\r\n });\r\n}\r\n\r\nasync function updateQuantityOfLineItem(lineItemToUpdate: ILineItem, quantity: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n let oldQuantitiy = lineItemToUpdate.quantity;\r\n lineItemChange.quantity = quantity;\r\n const cart = await updateLineItem(lineItemChange);\r\n var updatedLineItem = getLineItemById(lineItemToUpdate.id);\r\n await getItemCountForBasket();\r\n onChangeQuantityTracking(currentCart, updatedLineItem, quantity, oldQuantitiy);\r\n}\r\n\r\nasync function updatePriceTypeOfLineItem(lineItemToUpdate: ILineItem, pricetypeId: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n lineItemChange.priceTypeId = pricetypeId;\r\n await updateLineItem(lineItemChange);\r\n}\r\n\r\nasync function updateChosenDeliveryTypeOfLineItem(lineItemToUpdate: ILineItem, chosenDeliveryType: number) {\r\n let lineItemChange = buildLineItemChange(lineItemToUpdate);\r\n lineItemChange.chosenDeliveryType = chosenDeliveryType;\r\n lineItemChange.priceTypeId = lineItemToUpdate.currentPriceType.priceTypeId;\r\n await updateLineItem(lineItemChange);\r\n}\r\n\r\nasync function updateLineItem(lineItemChange: ILineItemChange) {\r\n try {\r\n const newCart = await checkoutService.updateLineItem(lineItemChange);\r\n fillBasket(newCart);\r\n return newCart;\r\n } catch {}\r\n}\r\n\r\n/**\r\n * Füllt das Produktvarianten-Modal mit den Preisen aus dem übergebenen LineItem\r\n * @param modal\r\n * @param lineItem\r\n */\r\nfunction fillProduktVariantenModal(modal: JQuery, currentLineItem: ILineItem) {\r\n let produktvariantenContainer = modal.find('.produktvariantenContainer');\r\n produktvariantenContainer.parents('.produktvarianten_modal_content').attr('data-lineitemid', currentLineItem.id);\r\n produktvariantenContainer.html('');\r\n let checkItemPrototype = $('#produktvariantePrototypes .check-item');\r\n for (let price of currentLineItem.product.prices) {\r\n let pricetypeId = price.priceType.priceTypeId;\r\n let newCheckItem = checkItemPrototype.clone();\r\n newCheckItem\r\n .find('input[type=radio]')\r\n .val(pricetypeId)\r\n .attr('id', 'produktvariante_checkbox_' + pricetypeId)\r\n .next('label')\r\n .attr('for', 'produktvariante_checkbox_' + pricetypeId);\r\n let priceAmount = (price.priceGross / 100).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: price.currency.currencyIsoCode,\r\n });\r\n newCheckItem\r\n .find('.produktvariante_head')\r\n .html(\r\n price.priceDescriptionShort\r\n ? price.priceDescriptionShort + ' ' + priceAmount\r\n : price.priceType.priceTypeDescription + ' ' + priceAmount\r\n );\r\n newCheckItem.find('.produktvariante_description').html(price.description);\r\n newCheckItem.find('.produktvariante_specialConditions').html(price.specialConditions);\r\n if (currentLineItem.currentPriceType.priceTypeId == price.priceType.priceTypeId) {\r\n newCheckItem.addClass('disabled-Element');\r\n }\r\n produktvariantenContainer.append(newCheckItem);\r\n }\r\n\r\n //Checked die aktuelle Produktvariante\r\n produktvariantenContainer\r\n .find('#produktvariante_checkbox_' + currentLineItem.currentPriceType.priceTypeId)\r\n .prop('checked', true);\r\n}\r\n\r\n/**\r\n * Füllt das Bezugsarten-Modal mit den chosenDeliveryType aus dem übergebenen LineItem\r\n * @param modal\r\n * @param lineItem\r\n */\r\nfunction fillBezugsartenModal(modal: JQuery, lineItem: ILineItem) {\r\n let container = modal.find('.bezugsartenContainer');\r\n container.find('.chosenDeliveryType_radio').prop('checked', false);\r\n if (lineItem.product.deliveryTypeId == 4) {\r\n container.find('.description_optionalefortsetzung').removeClass('hide');\r\n container.find('.description_standardfortsetzung').addClass('hide');\r\n }\r\n if (lineItem.product.deliveryTypeId == 5) {\r\n container.find('.description_standardfortsetzung').removeClass('hide');\r\n container.find('.description_optionalefortsetzung').addClass('hide');\r\n }\r\n container.parents('.bezugsarten_modal_content').attr('data-lineitemid', lineItem.id);\r\n let checkItems = container.find('.check-item');\r\n checkItems.each(function() {\r\n let checkitem = $(this);\r\n if (checkitem.find('input[name=bezugsart]').val() == lineItem.chosenDeliveryType) {\r\n checkitem.find('input[name=bezugsart]').prop('checked', true);\r\n checkitem.addClass('disabled-Element');\r\n } else {\r\n checkitem.removeClass('disabled-Element');\r\n }\r\n });\r\n}\r\n\r\n//Löscht das LineItem aus dem Warenkorb\r\nasync function deleteLineItemFromBasket(deleteElement: JQuery) {\r\n let basketitem = deleteElement.parents('.basket_lineitem');\r\n let lineItemId = basketitem.attr('data-lineitemid') as string;\r\n let lineItemToDelete = getLineItemById(lineItemId);\r\n let oldQuantity = lineItemToDelete.quantity;\r\n let newQuantity = 0;\r\n let lineItemChange = buildLineItemChange(lineItemToDelete);\r\n await deleteLineItem(lineItemChange);\r\n lineItemToDelete.quantity = 0;\r\n let deletedLineItem = lineItemToDelete;\r\n await getItemCountForBasket(true);\r\n onChangeQuantityTracking(currentCart, deletedLineItem, newQuantity, oldQuantity);\r\n}\r\n\r\nasync function deleteLineItem(lineItemChange: ILineItemChange) {\r\n const newCart = await checkoutService.deleteLineItem(lineItemChange);\r\n fillBasket(newCart);\r\n}\r\n\r\nfunction getLineItemById(lineItemId: string) {\r\n var lineItem = currentCart.lineItems.filter(x => x.id == lineItemId)[0];\r\n if (lineItem) {\r\n return lineItem;\r\n }\r\n return currentCart.giftLineItems.filter(x => x.id == lineItemId)[0];\r\n}\r\n\r\n/*\r\n * Ruft die Anzahl der Produkte im Warenkorb ab.\r\n */\r\nexport async function getItemCountForBasket(overrideEmptyBasket: boolean = false) {\r\n try {\r\n const cart = await checkoutService.getItemCountInBasket();\r\n if ((cart && cart.itemCount) || overrideEmptyBasket) {\r\n setItemCountForBasket(cart?.itemCount ?? 0);\r\n TrackMiniBasket(cart); \r\n }\r\n if (cart && cart.items) {\r\n fillBasketOverlay(cart);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n}\r\n\r\n/**\r\n * Zeigt die Anzahl der Produkte im Warenkorb an.\r\n * @param itemCount\r\n */\r\nfunction setItemCountForBasket(itemCount: number) {\r\n if (itemCount > 0) {\r\n $('.headerBasket.notify')\r\n .html(itemCount + '')\r\n .removeClass('hide');\r\n }\r\n if (itemCount == 0) {\r\n $('.headerBasket.notify')\r\n .html('')\r\n .addClass('hide');\r\n }\r\n}\r\n\r\nfunction showModal(modal: JQuery) {\r\n $('body').addClass('modal-open');\r\n $('#modal-bg-layover').show();\r\n modal.show();\r\n}\r\n\r\nfunction hideModal(modal: JQuery) {\r\n $('body').removeClass('modal-open');\r\n $('#modal-bg-layover').hide();\r\n modal.hide();\r\n}\r\n\r\nfunction fillBasketOverlay(cart: IBasketOverlayModel) {\r\n const basketOverlay = $('.basket-menu-bubble');\r\n\r\n basketOverlay.find('.basket-summary .pricebox .price').html(cart.totalGross);\r\n\r\n basketOverlay.find('.item.added').remove();\r\n\r\n for (let item of cart.items) {\r\n let itemPrototype = basketOverlay.find('.item.prototype').clone();\r\n itemPrototype\r\n .removeClass('prototype')\r\n .removeClass('hidden')\r\n .addClass('added');\r\n itemPrototype.find('.author').html(item.authorList);\r\n itemPrototype.find('.title').html(item.title);\r\n itemPrototype.find('.edition').html(item.edition);\r\n\r\n itemPrototype.find('.availability').html(item.availabilityStatus);\r\n if (item.availabilityStatusId !== 1) {\r\n itemPrototype.find('.availability').removeClass('available');\r\n }\r\n\r\n itemPrototype.find('.amount span').html(item.quantity.toString());\r\n itemPrototype.find('img').attr('src', item.imageUrl);\r\n itemPrototype.find('a').attr('href', `/${item.seoPath}/product/${item.productId}`);\r\n basketOverlay.find('.basket-items').append(itemPrototype);\r\n\r\n itemPrototype\r\n .find('.singleprice span')\r\n .html((item.singleItemPrice / 100).toLocaleString('de-De', { style: 'currency', currency: 'EUR' }));\r\n itemPrototype\r\n .find('.totalprice span')\r\n .html((item.totalItemPrice / 100).toLocaleString('de-De', { style: 'currency', currency: 'EUR' }));\r\n }\r\n}\r\n","export enum DummyImageSize {\r\n small,\r\n medium,\r\n large\r\n}\r\n","import { fillBasket, initEvents } from \"./checkoutShared\";\r\nimport { CheckoutService } from \"./checkoutService\";\r\nconst checkoutService = new CheckoutService();\r\nimport { onloadTracking } from './Tracking/checkoutTrackingStep1';\r\nimport { factfinderBasketTracking } from '../Factfinder/Tracking/factFinderTracking';\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport { dangerAlert } from \"../Shared/AlertHelper\";\r\n\r\n$(() => {\r\n initBasket();\r\n\r\n if ($(\"#ApiError\").val()) {\r\n dangerAlert($(\"#ApiError\").val());\r\n }\r\n});\r\n\r\n$(\"#checkoutDiscountButton\").on('click', function () {\r\n var code = $(\"#discountInputSearch\").val();\r\n if (code) {\r\n checkoutService.addDiscountToCart(code as string).then(data => {\r\n if (data == false) {\r\n initBasket();\r\n $(\"#discountInputSearch\").val('');\r\n $(\"#discountContainer .coupon-code\").addClass(\"hide\");\r\n $('#discountContainer .coupon-code-result').removeClass(\"hide\");\r\n }\r\n }).catch(() => {\r\n });;\r\n }\r\n});\r\n$(\"#checkoutIsbnSearchButton\").on('click',\r\n function () {\r\n addProductByIsbn($(this).next(\".inputEls\").find(\"#checkoutIsbnSearch\"));\r\n });\r\n\r\n$(\"#checkoutIsbnSearch\").on('keyup',\r\n function (e) {\r\n if (e.keyCode == 13) {\r\n addProductByIsbn($(this));\r\n }\r\n });\r\n\r\n$(\".addAdditionalCartInfo\").on('click',\r\n function () {\r\n let OrderCode = $(\".additionalCartInfoOrderCode\").val() as string;\r\n let CustomerMessage = $(\".additionalCartInfoCustomerMessage\").val() as string;\r\n let redirectLink = $(this).attr(\"data-redirectlink\") as string;\r\n if ((OrderCode && OrderCode.trim()) || (CustomerMessage && CustomerMessage.trim()))\r\n {\r\n checkoutService.addAdditionalInfoToCart(OrderCode, CustomerMessage)\r\n .then(() => {\r\n window.location.href = redirectLink;\r\n }).catch(() => {\r\n });\r\n }\r\n else {\r\n window.location.href = redirectLink;\r\n }\r\n });\r\n\r\n/**\r\n* Initialer Request beim Warenkorb-Aufruf.\r\n*/\r\nfunction initBasket() {\r\n checkoutService.showBasket()\r\n .then(async (response: ICheckoutflowResponse) => {\r\n let cart = response.cart;\r\n fillBasket(cart);\r\n fillAdditionalInfo(cart);\r\n showShippingNotification(response);\r\n initEvents();\r\n onloadTracking(cart);\r\n localStorage.setItem(\"currentCart\", JSON.stringify(response.cart));\r\n factfinderBasketTracking(cart.lineItems);\r\n })\r\n .catch(() => {\r\n $(\".hideInEmptyBasket\").addClass(\"hide\");\r\n $(\".showInEmptyBasket\").removeClass(\"hide\");\r\n $(\".disableInEmptyBasket\").addClass(\"disabled-Element\");\r\n });\r\n}\r\n\r\n/**\r\n * Ruft \"addItemByIsbnSearch\" mit dem value aus dem übergebenen Inputfield auf. \r\n * @param input\r\n */\r\nfunction addProductByIsbn(input: JQuery) {\r\n\r\n if (input) {\r\n let isbn = input.val() as string;\r\n if (isbn) {\r\n checkoutService.addItemByIsbnSearch(isbn)\r\n .then((cart: ICart) => {\r\n fillBasket(cart);\r\n }).catch(() => {\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction fillAdditionalInfo(cart: ICart) {\r\n if (cart && cart.additionalCartInfo) {\r\n $(\".additionalCartInfoOrderCode\").val(cart.additionalCartInfo.orderCode);\r\n $(\".additionalCartInfoCustomerMessage\").val(cart.additionalCartInfo.customerMessage);\r\n }\r\n}\r\n\r\n/**\r\n * Je nachdem, ob in der Cart das Flag zum Verstecken des Lieferkostsenhinweises gesetzt ist,\r\n * wird dieser asugeblendet\r\n * @param response \r\n */\r\nfunction showShippingNotification(response: ICheckoutflowResponse) {\r\n if (response.shippingCostInfo && response.shippingCostInfo.hideNoShippingCostHintAtCart) {\r\n $(\"#basket-shipping-taxCost\").addClass(\"hide\");\r\n $(\".total-shipping-notification-container\").html(\"\");\r\n $(\"#basket-shipping-taxCost_with_hyperLink\").removeClass(\"hide\");\r\n }\r\n else {\r\n $(\"#basket-shipping-taxCost_with_hyperLink\").addClass(\"hide\");\r\n $(\"#basket-shipping-taxCost\").removeClass(\"hide\");\r\n }\r\n}\r\n\r\n","/**\r\n * Formatiert den Übergebenen Betrag in das Format 0.00.\r\n * Wenn es sich um einen Cent-Betrag handelt wird vorher /100 geteilt\r\n * @param price\r\n * @param isCentPrice\r\n */\r\nexport function formatPrice2Digits(price: number, isCentPrice?: boolean) {\r\n try {\r\n if (!price && price != 0) {\r\n return null;\r\n }\r\n if (isCentPrice) {\r\n price = price / 100;\r\n }\r\n return price.toFixed(2);\r\n } catch (error) {\r\n return null;\r\n }\r\n}","import * as Cookies from 'js-cookie';\r\n\r\ndeclare var dataLayer: any[];\r\nvar windowHeight = $(window).innerHeight();\r\ndeclare var _trboq: any;\r\ndeclare var _trbo: any;\r\ndeclare var UC_UI: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n * @param eventName Der Name des Trackingevents\r\n */\r\nexport function trackGooglePromotionEvent_view(eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: 'eec.promotionView',\r\n ecommerce: {\r\n promoView: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampv: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n setTimeout(trackGooglePromotionEvent_view.bind(null, eventName), 100);\r\n }\r\n}\r\nexport function trackGooglePromotionEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'eec.promotionClick',\r\n ecommerce: {\r\n promoClick: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackGoogleAddToMerkliste_click(productId: number) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'add to wishlist',\r\n eventLabel: `add_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'add to wishlist' + '/' + `add_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackMerklisteInteraction_click(eventLabel: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_wishlist',\r\n eventLabel: eventLabel,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_wishlist' + '/' + eventLabel, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function MerklisteKarusellInViewTracking() {\r\n trackGooglePromotionEvent_view('all_merklisten_static');\r\n}\r\n\r\nexport function MerklisteKarusellProductClickedTracking() {\r\n trackGooglePromotionEvent_click('all_merklisten_static');\r\n}\r\n\r\nexport function trackNaviEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'navigation data',\r\n eventAction: 'navigation_click',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['navigation data', 'navigation_click' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function loginTracking(pageType: string, loggedInResult: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n if (pageType.includes('meine-daten')) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_meine-daten',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_meine-daten' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_checkout',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_checkout' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n Cookies.remove('LoggedInPageType');\r\n Cookies.remove('LoggedInResult');\r\n } else {\r\n setTimeout(loginTracking.bind(null, pageType, loggedInResult), 100);\r\n }\r\n}\r\n\r\nexport function pushTrboId(eId: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n _trboq = _trboq || [];\r\n _trboq.push([\r\n 'dataMatching',\r\n {\r\n external_user_id: eId,\r\n },\r\n ]);\r\n } else {\r\n setTimeout(pushTrboId.bind(null, eId), 100);\r\n }\r\n}\r\n\r\nexport function trackIdLayerComplete(hId: string, hMail: string, hKid: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: 'idLayer_complete_login',\r\n externalIdHash: hId,\r\n emailHash: hMail,\r\n kupCustomerNumberHash: hKid,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerComplete.bind(null, hId, hMail, hKid), 100);\r\n }\r\n}\r\n\r\nexport function trackIdLayerReduced(hMail: string, eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n dataLayer.push({\r\n event: eventName,\r\n emailHash: hMail,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerReduced.bind(null, hMail, eventName), 100);\r\n }\r\n}\r\n\r\nexport function trackNewsletterRegisterEvent(eventName: string) {\r\n if (eventName) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'newsletter_registrierung',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'newsletter_registrierung' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport function tracking_eecPromotionview() {\r\n const promotionElements = $('.googleTracking.promotionTracking:not(.promoted)');\r\n promotionElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const trackingParam = $(this).data('trackingevent');\r\n if (trackingParam) {\r\n trackGooglePromotionEvent_view(trackingParam);\r\n }\r\n $(this).addClass('promoted');\r\n }\r\n });\r\n\r\n trboPromotionViewTracking();\r\n}\r\n\r\nfunction trboPromotionViewTracking() {\r\n if (window['UC_UI'] !== undefined && UC_UI.isInitialized) {\r\n const promotionTrboElements = $('.trboPromotionTracking:not(.promoted)');\r\n promotionTrboElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const moduleId = $(this).data('moduleid');\r\n const moduleName = $(this).data('modulename');\r\n const campaignId = $(this).data('campaignid');\r\n const campaignName = $(this).data('campaignname');\r\n const usertype = $(this).data('usertype');\r\n\r\n if (window['_trboq'] !== undefined && window['_trbo'] !== undefined) {\r\n _trboq.push(['layerView', { moduleId: moduleId, campaignId: campaignId }]);\r\n _trbo.app.tracker.trackExternalView(usertype, campaignId, campaignName, moduleId, moduleName);\r\n $(this).addClass('promoted');\r\n }\r\n }\r\n });\r\n } else {\r\n setTimeout(trboPromotionViewTracking, 100);\r\n }\r\n}\r\n\r\nexport function trackExternalBasketClick(productId: number, eventLabel: string, eventAction: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: eventAction,\r\n eventLabel: `${eventLabel}_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'newsletter_registrierung' + '/' + `${eventLabel}_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackPrefixNameProblem() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_forms',\r\n eventLabel: 'problem_name-prefix',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_forms' + '/' + 'problem_name-prefix', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackLageRegistrationAccount(action: string, label: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: action,\r\n eventLabel: label,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', action + '/' + label, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function searchResultClickTracking(searchQuery: string) {\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[searchQuery ? `Suchergebnis/${searchQuery}` : 'Suchergebnis']],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nfunction IsVisibleElement(element) {\r\n if ($(element).hasClass('hide')) {\r\n return false;\r\n }\r\n var top_of_element = $(element).offset().top;\r\n var bottom_of_element = $(element).offset().top + $(element).outerHeight();\r\n var top_of_screen = $(window).scrollTop();\r\n var bottom_of_screen = top_of_screen + windowHeight;\r\n\r\n if (bottom_of_screen > top_of_element && top_of_screen < bottom_of_element) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","import request = require('request');\r\nimport { DummyImageSize } from '../Shared/Models/DummyImageSizeEnum';\r\nimport { IAvailabilityStatus } from './Models/AvailabilityStatus';\r\nimport { IDRMMapping } from './Models/DRMMapping';\r\nimport { StandardLink } from '../Produktdetails/Models/StandardLink';\r\n\r\n/**\r\n * Holt den availabilityStatus zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('availabilityStatusList')\r\n ) as IAvailabilityStatus[];\r\n if (storedAvailabilityStatusList) {\r\n resolve(storedAvailabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetAvailabilityStatusList',\r\n success: (availabilityStatusList: IAvailabilityStatus[]) => {\r\n sessionStorage.setItem('availabilityStatusList', JSON.stringify(availabilityStatusList));\r\n resolve(availabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die DRM-Info zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getDRMInfo(drmId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var drmMapping = JSON.parse(sessionStorage.getItem('drmMapping')) as IDRMMapping[];\r\n if (drmMapping) {\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetDRMMapping',\r\n success: (drmMapping: IDRMMapping[]) => {\r\n sessionStorage.setItem('drmMapping', JSON.stringify(drmMapping));\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt den Link zu den Systemanforderungen (In Umbraco hinterlegt)\r\n * @param availabilityStatusId\r\n */\r\nexport function getSystemanforderungenLink(): Promise {\r\n return new Promise((resolve, reject) => {\r\n var systemanforderungenLink = JSON.parse(sessionStorage.getItem('systemanforderungenLink')) as StandardLink;\r\n if (systemanforderungenLink) {\r\n resolve(systemanforderungenLink);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetSystemanforderungenLink',\r\n success: (systemanforderungenLink: StandardLink) => {\r\n sessionStorage.setItem('systemanforderungenLink', JSON.stringify(systemanforderungenLink));\r\n resolve(systemanforderungenLink);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Checkt, ob die übergene availabilityStatusId lieferbar ist oder nicht\r\n * @param availabilityStatusId\r\n */\r\nexport function checkAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedOrderableAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('orderableAvailabilityStatusList')\r\n ) as number[];\r\n if (storedOrderableAvailabilityStatusList) {\r\n resolve(storedOrderableAvailabilityStatusList.some(x => x == availabilityStatusId));\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetOrderableAvailabilityStatusList',\r\n success: (orderableAvailabilityStatusList: number[]) => {\r\n sessionStorage.setItem(\r\n 'orderableAvailabilityStatusList',\r\n JSON.stringify(orderableAvailabilityStatusList)\r\n );\r\n resolve(orderableAvailabilityStatusList.includes(availabilityStatusId));\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getAdditionalPriceInfoByDelivertypeId(deliverytypeId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n let priceinfo = sessionStorage.getItem('priceinfo_' + deliverytypeId) as string;\r\n if (priceinfo) {\r\n resolve(priceinfo);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetAdditionalPriceInfoByDelivertypeId?deliverytypeId=' + deliverytypeId,\r\n success: (priceinfo: any) => {\r\n sessionStorage.setItem('priceinfo_' + deliverytypeId, priceinfo);\r\n resolve(priceinfo);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getBreadcrumbByTocId(tocId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!tocId) {\r\n resolve('Produkt ohne Kategorie');\r\n }\r\n let breadcrumb = sessionStorage.getItem('breadcrumb_' + tocId) as string;\r\n if (breadcrumb) {\r\n resolve(breadcrumb);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetBreadcrumbByTocId?tocId=' + tocId,\r\n success: (breadcrumb: string) => {\r\n sessionStorage.setItem('breadcrumb_' + tocId, breadcrumb);\r\n resolve(breadcrumb);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Baut den Link zu einem Produktbild zusammen.\r\n * @param productId\r\n * @param width\r\n * @param height\r\n */\r\nexport function getImagePath(productId: number, width: number = -1, height: number = -1): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url:\r\n '/Umbraco/api/ImageServerApi/GetImageUrl?productId=' +\r\n productId +\r\n '&width=' +\r\n width +\r\n '&height=' +\r\n height,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gibt den Pfad des Dummybildes passend zur übergebenen Größe zurück\r\n * @param imageSize\r\n */\r\nexport function getDummyImage(imageSize: DummyImageSize): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/ImageServerApi/GetDummyImage?imageSize=' + imageSize,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gilt für Factfinder-Produkte\r\n * @param product\r\n */\r\nexport function showBezugsartOverlay(product): boolean {\r\n return (\r\n product.DeliveryTypeID == '5' &&\r\n product.Bruttopreis != null &&\r\n product.PreisvariantenMerkmal == 'false' &&\r\n product.Urheberzeile != null &&\r\n (product.Verlag == 'C.H.BECK' || product.Verlag == 'Vahlen')\r\n );\r\n}\r\n","import { searchResultClickTracking } from '../../Tracking/GoogleTracking';\r\nimport ILineItem = CheckoutflowReponse.ILineItem;\r\nimport { formatPrice2Digits } from '../../Shared/PriceHelper';\r\n\r\n$(() => {\r\n $('.FactFinderSearchResultContainer').on('click', '.factFinderTrackingItem', function() {\r\n var parent = $(this)\r\n .parents('.resultItem')\r\n .get(0);\r\n var id = parseInt($(parent).data('id'));\r\n var sessionId = $(parent).data('sessionid');\r\n var origPos = $(parent).data('origpos');\r\n var query = $(parent).data('query');\r\n var pos = $(parent).data('pos');\r\n var page = $(parent).data('page');\r\n var pagesize = $(parent).data('pagesize');\r\n var simi = $(parent).data('simi');\r\n var factFinderCampaign = $(parent).data('factfindercampaign');\r\n\r\n searchResultClickTracking(query);\r\n\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/ProductDetailTracking?' +\r\n 'productId=' +\r\n id +\r\n '&sessionId=' +\r\n sessionId +\r\n '&query=' +\r\n query +\r\n '&position=' +\r\n pos +\r\n '&origPosition=' +\r\n origPos +\r\n '&page=' +\r\n page +\r\n '&pageSize=' +\r\n pagesize +\r\n '&origPageSize=' +\r\n pagesize +\r\n '&simi=' +\r\n simi +\r\n '&factFinderCampaign=' +\r\n factFinderCampaign,\r\n\r\n success: data => {},\r\n error: function() {},\r\n });\r\n });\r\n\r\n $(document).on('click', '.factFinderCartTrackingItem', function() {\r\n var parent = $(this).closest('.resultItem');\r\n var id = parseInt($(parent).data('id'));\r\n var sessionId = $(parent).data('sessionid');\r\n var price = $(parent).data('price');\r\n\r\n factfinderCartTracking(id, sessionId, price, 1);\r\n });\r\n});\r\n\r\n/**\r\n * Ruft das FactfinderCartTracking für jedes LineItem im Warenkorb auf\r\n * @param lineItems\r\n */\r\nexport function factfinderBasketTracking(lineItems: ILineItem[]): void {\r\n for (let lineItem of lineItems) {\r\n let productId = lineItem.product.productId;\r\n let sessionId = $('#CurrentSessionId').val() as string;\r\n let price = lineItem.singleItemGrossPrice.amount;\r\n let count = lineItem.quantity;\r\n factfinderCartTracking(productId, sessionId, price, count);\r\n }\r\n}\r\n\r\n/**\r\n * Ruft das FactfinderCartTracking für jedes LineItem im Warenkorb auf\r\n * @param lineItems\r\n */\r\nexport function factfinderThankYouTracking(lineItems: ILineItem[]): void {\r\n for (let lineItem of lineItems) {\r\n let productId = lineItem.product.productId;\r\n let sessionId = $('#CurrentSessionId').val() as string;\r\n let price = lineItem.singleItemGrossPrice.amount;\r\n let count = lineItem.quantity;\r\n factfinderCheckoutTracking(productId, sessionId, price, count);\r\n }\r\n}\r\n\r\n/**\r\n * Ruft das Factfinder Cart-Tracking auf\r\n * @param productId\r\n * @param sessionId\r\n * @param price\r\n */\r\nexport function factfinderCartTracking(productId: number, sessionId: string, price: number, count: number) {\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/CartTracking?' +\r\n 'productId=' +\r\n productId +\r\n '&sessionId=' +\r\n sessionId +\r\n '&price=' +\r\n formatPrice2Digits(price, true),\r\n success: data => {},\r\n error: function() {},\r\n });\r\n}\r\n\r\n/**\r\n * Ruft das Factfinder Checkout-Tracking auf (Danke-Seite)\r\n * @param productId\r\n * @param sessionId\r\n * @param price\r\n */\r\nexport function factfinderCheckoutTracking(productId: number, sessionId: string, price: number, count: number) {\r\n $.ajax({\r\n method: 'GET',\r\n contentType: 'application/json',\r\n url:\r\n '/Umbraco/api/FactFinderTracking/ThankYouTracking?' +\r\n 'productId=' +\r\n productId +\r\n '&sessionId=' +\r\n sessionId +\r\n '&price=' +\r\n formatPrice2Digits(price, true),\r\n success: data => {},\r\n error: function() {},\r\n });\r\n}\r\n","import ILineItem = CheckoutflowReponse.ILineItem;\r\nimport IPrice = CheckoutflowReponse.IPrice;\r\nimport { IPriceCalculation } from '../models/pricecalculation';\r\nexport var summeProbeAbosWerte: number = 0;\r\nexport var summeProbeAbosGrossWerte: number = 0;\r\n\r\nexport function getProductGrossPrice(lineItem: ILineItem): number {\r\n /*Anpassung für Probe-Abos (Gross)\r\n \r\n Hier die Formel für den errechneten Wert eines Probe-Abos (BYTE-261):\r\n\r\n Höchster verfügbarer Produktpreis * Wandlungsrate (0.2) * Faktor für angenommene Laufzeit\r\n\r\n > Höchster, verfügbarer Produktpreis > max(PriceGross)\r\n > Wandlungsrate > aus der Datenanalyse gehen wir von einer Wandlungsrate von 20% aus\r\n > Faktor für die angenommene Laufzeit (2 Jahre) > richtet sich nach den Abrechnungszeiträumen der Abos. Hier die Regeln dazu:\r\n\r\n Faktor 4 (4 Halbjahre sind 2 Jahre) > Wenn das Feld \"Preisbeschreibung\" \"halbjährlich\" ODER \"Halbjahr\"enthält\r\n Faktor 2 (2 ganze Jahre sind 2 Jahre) > Wenn das Feld nichts enthält, \"^jährlich.\", \"\\sjährlich.\" oder \"^Jahres.*\" enthält*/\r\n if (lineItem.currentPriceType.priceTypeId.toString()[0] === '4' && lineItem.singleItemGrossPrice.amount == 0) {\r\n const wandlungsrate = 0.2;\r\n let hoechsterPreis = getHighestValidPriceFromLineItem(lineItem.product.prices);\r\n let laufzeitFaktor = getLaufzeitFaktor(hoechsterPreis.priceGross, hoechsterPreis.description);\r\n if (hoechsterPreis && laufzeitFaktor) {\r\n let aboWert = hoechsterPreis.priceGross * wandlungsrate * laufzeitFaktor;\r\n summeProbeAbosGrossWerte += aboWert;\r\n\r\n return aboWert;\r\n }\r\n }\r\n\r\n return lineItem.singleItemGrossPrice ? lineItem.singleItemGrossPrice.amount : null;\r\n}\r\n\r\n/**\r\n * Im priceCalculation müssen die Preise valid übergeben werden.\r\n * @param priceCalculation\r\n * @param lineItem\r\n */\r\nexport function getProductNetPrice(lineItem: ILineItem, priceCalculation?: IPriceCalculation): number {\r\n /*Anpassung für Probe-Abos (Net)\r\n \r\n Hier die Formel für den errechneten Wert eines Probe-Abos (BYTE-261):\r\n\r\n Höchster verfügbarer Produktpreis * Wandlungsrate (0.2) * Faktor für angenommene Laufzeit\r\n\r\n > Höchster, verfügbarer Produktpreis > max(PriceGross)\r\n > Wandlungsrate > aus der Datenanalyse gehen wir von einer Wandlungsrate von 20% aus\r\n > Faktor für die angenommene Laufzeit (2 Jahre) > richtet sich nach den Abrechnungszeiträumen der Abos. Hier die Regeln dazu:\r\n\r\n Faktor 4 (4 Halbjahre sind 2 Jahre) > Wenn das Feld \"Preisbeschreibung\" \"halbjährlich\" ODER \"Halbjahr\"enthält\r\n Faktor 2 (2 ganze Jahre sind 2 Jahre) > Wenn das Feld nichts enthält, \"^jährlich.\", \"\\sjährlich.\" oder \"^Jahres.*\" enthält*/\r\n try {\r\n if (!lineItem && !priceCalculation) {\r\n return null;\r\n }\r\n\r\n if (lineItem) {\r\n return CalculatePriceFromLineItem(lineItem);\r\n }\r\n return CalculatePriceFromPriceCalculationModel(priceCalculation);\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n}\r\n\r\nexport function buildVar5(trackingProduct: CheckoutflowReponse.IProduct): string {\r\n let firstPart = 'none';\r\n if (trackingProduct.isTopArticle === true) {\r\n firstPart = 'isTop';\r\n } else if (trackingProduct.isStandard === true) {\r\n firstPart = 'isStandardwerk';\r\n }\r\n\r\n let secondPart = 'none';\r\n if (trackingProduct.isNew == true) {\r\n secondPart = 'isNew';\r\n } else if (trackingProduct.isPreview == true) {\r\n secondPart = 'isPreview';\r\n }\r\n\r\n return `${firstPart}_${secondPart}`;\r\n}\r\n\r\nfunction CalculatePriceFromPriceCalculationModel(priceCalculation: IPriceCalculation) {\r\n return CalculatePrice(\r\n priceCalculation.currentPrice,\r\n priceCalculation.currentPricetypeId,\r\n priceCalculation.highestPriceDescription,\r\n priceCalculation.highestPrice\r\n );\r\n}\r\n\r\nfunction CalculatePriceFromLineItem(lineItem: ILineItem): number {\r\n let currentPrice: number = lineItem.singleItemNetPrice.amount;\r\n let currentPriceTypeId: number = lineItem.currentPriceType.priceTypeId;\r\n let highestPrice: IPrice = getHighestValidPriceFromLineItem(lineItem.product.prices);\r\n if (!highestPrice) {\r\n return null;\r\n }\r\n let highestPriceDescription: string = highestPrice.description;\r\n let highestPriceAmount: number = highestPrice.priceNet;\r\n return CalculatePrice(currentPrice, currentPriceTypeId, highestPriceDescription, highestPriceAmount);\r\n}\r\n\r\nfunction CalculatePrice(\r\n currentPrice: number,\r\n currentPriceTypeId: number,\r\n highestPriceDescription: string,\r\n highestPrice: number\r\n): number {\r\n if (currentPriceTypeId.toString()[0] === '4' && currentPrice == 0) {\r\n const wandlungsrate = 0.2;\r\n let laufzeitFaktor = getLaufzeitFaktor(highestPrice, highestPriceDescription);\r\n if (highestPrice && laufzeitFaktor) {\r\n let aboWert = highestPrice * wandlungsrate * laufzeitFaktor;\r\n summeProbeAbosWerte += aboWert;\r\n\r\n return aboWert;\r\n }\r\n }\r\n\r\n return currentPrice;\r\n}\r\n\r\nfunction getHighestValidPriceFromLineItem(prices: IPrice[]): IPrice {\r\n let currentDate = new Date();\r\n let validPrices = prices.filter(\r\n x =>\r\n (x.validFrom == null || new Date(x.validFrom) < currentDate) &&\r\n (x.validUntil == null || new Date(x.validUntil) > currentDate)\r\n );\r\n if (!validPrices) {\r\n return null;\r\n }\r\n return validPrices.filter(x => x.priceGross == Math.max(...validPrices.map(y => y.priceGross)))[0];\r\n}\r\n\r\nfunction getLaufzeitFaktor(highestPrice: number, highestPriceDescription: string): number {\r\n if (!highestPrice) {\r\n return null;\r\n }\r\n if (highestPriceDescription.includes('halbjährlich') || highestPriceDescription.includes('Halbjahr')) {\r\n return 4;\r\n }\r\n\r\n return 2;\r\n}\r\n","import * as Cookies from \"js-cookie\";\r\n//Blendet eine Allgemeine Fehlermeldung ein mit dem übergebenen Text, die nach 6 Sekunden langsam ausblendet\r\nexport function dangerAlert(text) {\r\n if (text) {\r\n $(\"#dangerAlert\").removeClass(\"hide\").fadeIn(\"fast\").find(\"p\").html(text);\r\n }\r\n}\r\n\r\nexport function successAlert(text) { \r\n if (text) {\r\n $(\"#successAlert\").removeClass(\"hide\").fadeIn(\"fast\").find(\"p\").html(text);\r\n }\r\n}\r\n\r\nexport function closeAlert(elementId, doNotShowAgain) {\r\n if (doNotShowAgain) {\r\n Cookies.set(\"doNotShowAgain\" + elementId, \"True\");\r\n }\r\n $(elementId).fadeOut(\"slow\", () => {\r\n $(elementId).addClass(\"hide\").find(\"p\").html(\"\");\r\n });\r\n}","import request = require('request');\r\nimport { dangerAlert } from '../Shared/AlertHelper';\r\nimport IAddressChange = CheckoutflowRequest.IAddressChange;\r\nimport IPaymentMethodChange = CheckoutflowRequest.IPaymentMethodChange;\r\nimport IBillingAddress = CheckoutflowRequest.IBillingAddress;\r\nimport IShippingAddress = CheckoutflowRequest.IShippingAddress;\r\nimport ILineItemChange = CheckoutflowRequest.ILineItemChange;\r\nimport ICheckoutflowResponse = CheckoutflowReponse.ICheckoutflowResponse;\r\nimport IBskAdditionalInfo = CheckoutflowRequest.IBskAdditionalInfo;\r\nimport ICart = CheckoutflowReponse.ICart;\r\nimport CheckoutActionResponseModel = require('./Models/Api/CheckoutActionResponseModel');\r\nimport ICheckoutActionResponseModel = CheckoutActionResponseModel.ICheckoutActionResponseModel;\r\nimport { AddToCartTrackingLineItem } from './Tracking/checkoutTrackingGlobal';\r\nlet spinnerModal: JQuery = $('#spinnerModal');\r\n\r\nexport class CheckoutService {\r\n expressKauf(): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/ExpressKaufApi/Checkout',\r\n success: (response: boolean) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n //Message im Fehlerfall\r\n reject(data.responseText);\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um den aktuellen Warenkorb zu bekommen\r\n */\r\n showBasket(): Promise {\r\n //Logs sind mit Absicht noch drin\r\n console.log('start-Request ' + new Date());\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/CheckoutApi/GetCart',\r\n success: (response: ICheckoutflowResponse) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n //Message im Fehlerfall\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n //Logs sind mit Absicht noch drin\r\n console.log('End-Request ' + new Date());\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Gibt die Zusätzlichen Informationen an die Cart weiter\r\n */\r\n addAdditionalInfoToCart(orderCode: string, customerMessage: string) {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({\r\n OrderCode: orderCode,\r\n CustomerMessage: customerMessage,\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/AddAdditionalCartInfo',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n *\r\n * @param lineItemChange\r\n */\r\n addDiscountToCart(code: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n //data: { \"code\": code },\r\n url: '/Umbraco/api/CheckoutApi/AddDiscountToCart?code=' + code,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt derm Warenkorb über seine ISBN hinzuzufügen\r\n * @param lineItemChange\r\n */\r\n addItemByIsbnSearch(isbn: string): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({ isbn: isbn }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/AddItemByIsbnSearch',\r\n success: (response: ICheckoutActionResponseModel) => {\r\n AddToCartTrackingLineItem(response.lineItem);\r\n resolve(response.cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt im Warenkorb zu updaten\r\n * @param lineItemChange\r\n */\r\n updateLineItem(lineItemChange: ILineItemChange): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify(lineItemChange),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CheckoutApi/UpdateLineItem',\r\n success: (cart: ICart) => {\r\n resolve(cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt aus dem Warenkorb zu löschen\r\n * @param lineItemChange\r\n */\r\n deleteLineItem(lineItemChange: ILineItemChange): Promise {\r\n spinnerModal.removeClass('hide');\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify(lineItemChange),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n url: '/Umbraco/api/CheckoutApi/DeleteLineItem',\r\n success: (cart: ICart) => {\r\n resolve(cart);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um ein Produkt dem Warenkorb hinzuzufügen\r\n * @param productId\r\n * @param pricetypeId\r\n */\r\n addProductToBasket(\r\n productId: number,\r\n pricetypeId: number,\r\n ChosenDeliveryType?: number\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: {\r\n productId: productId,\r\n priceTypeId: pricetypeId,\r\n chosenDeliveryType: ChosenDeliveryType,\r\n },\r\n url: '/Umbraco/api/CheckoutApi/AddItemToBasket',\r\n success: (response: ICheckoutActionResponseModel) => {\r\n resolve(response);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Called den Api Controller um die Anzahl der Produke im Warenkorb zu erhalten\r\n */\r\n getItemCountInBasket(): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/MiniBasket/GetMiniBasket',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n addPaymentShippingDataToCart(\r\n addresschange: IAddressChange,\r\n paymentmethodChange: IPaymentMethodChange,\r\n bskAdditionalInfo: IBskAdditionalInfo,\r\n relatedBusinessPartnerId: string\r\n ): Promise {\r\n spinnerModal.removeClass('hide');\r\n\r\n var data = {\r\n addresschange: addresschange,\r\n paymentmethodchange: paymentmethodChange,\r\n relatedBusinessPartnerId: relatedBusinessPartnerId,\r\n bskAdditionalInfo: bskAdditionalInfo,\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/api/CheckoutApi/AddPaymentShippingDataToCart',\r\n data: JSON.stringify(data),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText.replace(/\\\"/g, ''));\r\n reject();\r\n },\r\n complete: () => {\r\n spinnerModal.addClass('hide');\r\n },\r\n });\r\n });\r\n }\r\n\r\n updateBillingaddressInCart(billingAddressId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: `/Umbraco/surface/CheckoutSurface/UpdateBillingAddress?addressId=${billingAddressId}`,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject(data.responseText);\r\n },\r\n complete: () => {},\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Lädt die Lieferadressen die vom Benutzer ausgewählt werden können.\r\n * @param billingAddressId Die Id der BillingAddress\r\n */\r\n getAvailableDeliveryAddresses(billingAddressId: string, isBusiness: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n url: `/Umbraco/surface/CheckoutSurface/GetAvailableDeliveryAddresses?addressId=${billingAddressId}&isBusiness=${isBusiness}`,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n reject();\r\n },\r\n complete: () => {},\r\n });\r\n });\r\n }\r\n\r\n AddAddressesToCartGast(\r\n billingAddress: IBillingAddress,\r\n shippingAddress: IShippingAddress,\r\n emailAddress: string,\r\n shippingAsBilling: boolean,\r\n isGuestUser: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n billingAddress: billingAddress,\r\n shippingAddress: shippingAddress,\r\n emailAddress: emailAddress,\r\n shippingAsBilling: shippingAsBilling,\r\n isGuestUser: isGuestUser,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddAddressesToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n if (data.responseText == 'Reload') {\r\n window.location.reload();\r\n } else {\r\n dangerAlert(data.responseText);\r\n reject();\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n AddPaymentmethodToCartGast(\r\n paymentmethodchange: IPaymentMethodChange,\r\n isDataUsageAccepted: boolean,\r\n isGuestUser: boolean\r\n ): Promise {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n paymentmethodchange: paymentmethodchange,\r\n dataUsageAccepted: isDataUsageAccepted,\r\n isGuestUser: isGuestUser,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddPaymentmethodToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n\r\n AddArvatoAddressesToCart(addresses) {\r\n return new Promise((resolve, reject) => {\r\n var data = {\r\n billingAddress: addresses.billingAddress,\r\n shippingAddress: addresses.shippingAddress,\r\n };\r\n\r\n $.ajax({\r\n method: 'POST',\r\n url: '/Umbraco/surface/CheckoutSurface/AddArvatoAddressesToCartGast',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n data: JSON.stringify(data),\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n if (data.responseText == 'Reload') {\r\n window.location.reload();\r\n } else {\r\n dangerAlert(data.responseText);\r\n reject();\r\n }\r\n },\r\n });\r\n });\r\n }\r\n\r\n getSaferpayIframe(recaptchaResponse: string) {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'POST',\r\n data: JSON.stringify({\r\n value: recaptchaResponse,\r\n url: window.location.href,\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n type: 'json',\r\n url: '/Umbraco/api/CreditCardApi/GetsaferpayIframe',\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: data => {\r\n dangerAlert(data.responseText);\r\n reject();\r\n },\r\n });\r\n });\r\n }\r\n}\r\n"],"sourceRoot":""}