{"version":3,"sources":["add-product.controller.js","app.js","cart.controller.js","installation-offer.controller.js","modify-license.controller.js"],"names":["angular","$scope","$location","authenticationService","$routeParams","$http","vm","this","activate","addProduct","selections","Product","product","state","productCounts","alaCarteCost","cartGuid","SessionStorageWithFallback","get","set","autoSpinner","addProductQueryOptions","getCartContents","stg","sessionStorage","getItem","back","JSON","parse","display","url","removeItem","getBack","findOption","title","id","section","option","sections","Sections","i","length","Title","j","Options","Value","isReseller","addProductTotal","Total","canOfferInstallation","addProductIncrementAlaCarte","e","cost","preventDefault","addProductDecrementAlaCarte","Selected","post","apiRootUrl","stringify","response","data","DefaultTitle","$applyAsync","addProductUpdateOption","key","val","addProductToCart","CartId","AlaCarteItems","push","Id","Count","data2","path","Items","cartContents","toggleSupportOption","isDefaultPrevented","isInCart","selected","ProductId","Name","item","EnableFinishButton","switchToSection","CurrentSection","addInstallationOffer","moment","$rootScope","$on","window","scrollTo","RecalculateAllFloatLabelControls","event","currentRoute","previousRoute","$routeProvider","templateUrl","controller","redirectTo","$timeout","ticketService","$q","cacheControl","partnerService","hostingService","submitTickets","callBack","details","sessionKey","invoiceNumber","sendingEmergencyTicket","promises","userEmail","customerEmail","primaryEmail","items","isFree","Invoice","submitTicket","IsEmergency","IsInstall","IsTraining","FromAddress","CCAddress","Subject","rawBody","Body","IsHtml","IsFree","Addons","addon","OriginalProductId","ListPrice","all","arr","getCache","removeAll","sentEmergencyTicket","clearTickets","agreeToInvoiceTerms","cartGuidForAgentList","checkoutFailureMessage","checkoutStage","countryList","geographicLocations","countries","getLoggedInEmail","displayItems","emergencyTicket","grandTotal","hasContents","isSupportAndNotReseller","referenceNumber","selectedPaymentMethod","selectedPaymentMethodId","selectedStaffMember","showDiscountColumn","showTaxColumn","showTotalColumn","stateList","statesByCountry","totalDiscount","totalPrice","totalTax","addonsExpire","expires","forEach","ExpiresUtc","addonName","name","dateString","Date","toLocaleDateString","undefined","dateStyle","backFromPaymentText","backFromPaymentUrl","checkPartnershipsAndHosted","getPartnershipDetails","getServices","IsActivePartner","hostedData","Services","Status","hasHosted","clearAll","includesEmergencyTicket","hasOwnProperty","completePurchase","Charged","onComplete","ResultMessage","setStage","d","d2","ga","InvoiceNumber","affiliation","revenue","index","IsUpgrade","price","FinalPrice","quantity","ex","trackPurchase","clearAllCaches","$broadcast","RefreshLoginTopArea","getPrimaryEmail","getAccountSettings","Details","EmailAddress","getStaffImage","gotoPaymentPage","isLoggedIn","showTermsCondition","ShowTermsAgreementOverlay","availablePaymentMethods","Methods","SecurityCode","CardNumber","NameOnCard","SaveCard","selectedPaymentMethodChanged","ShowLoginOverlay","goToVerification","setFromCartContents","loadStaffList","callback","$","salesAgents","Agents","refreshCartContents","setTicketsFromCartContents","initialLoadCartContents","CartItemId","scrollTop","p","PaymentType","PaymentMethodId","selectStaff","agentId","json","agentid","cartguid","cartguidforagentlist","selectedstaffmember","ShowTaxColumn","ShowDiscountColumn","ShowTotalColumn","TotalPrice","TotalDiscount","TotalTax","GrandTotal","ReferenceNumber","hasTraining","Object","assign","i2","displayItem","ListPriceIncludingAddons","CartIDs","addons","indexToRemove","splice","newStage","fromEmail","ccEmail","subject","phoneNumber","Phone","message","ticketDoContinueCheckout","purchasedTicketsForm","$invalid","setItem","load","location","href","productTotal","getTitle","Edition","productQueryOptions","hasEnterprise","wantsInstallation","addInstallation","FreeInstallationHelp","needRemoval","autoNav","search","LicenseKey","chooseLicenseToModify","licenseKeyString","licenseKey","modificationState","modifyProductQueryOptions","searchText","loginRequired","modifyProductUpdateOption","currentTotal","addModificationToCart","showLoginOverlay","refreshLicenseList","licenses","Licenses","l","LicenseKeyString","Key","upgradeProtectionWarnClass","expiration","up","today","warnPeriod","setDate","getDate","isPast","friendlyUpgradeProtectionDate","format","showLicenseList","doResellerSearch","lk","resellerSearchText","replace","lk2","len","charAt","resellerSearchPerformed","resellerSearchTextResults","resellerSearchLicenseKeyBox","document","getElementById","select","focus","switchToModSection","renewMode","licenseTab","modifyLicense"],"mappings":"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","file":"shopping-cart.min.js","sourcesContent":["(() => {\n\n angular\n .module('smartertoolsApp')\n .controller('cartAddProductController',\n ['$scope', '$location', 'authenticationService', '$routeParams', '$http', cartAddProductController]);\n\n function cartAddProductController($scope, $location, authenticationService, $routeParams, $http) {\n const vm = this;\n vm.isReseller = authenticationService.isReseller();\n\n // Functions\n vm.addProductTotal = addProductTotal;\n vm.canOfferInstallation = canOfferInstallation;\n vm.addProductIncrementAlaCarte = addProductIncrementAlaCarte;\n vm.addProductDecrementAlaCarte = addProductDecrementAlaCarte;\n vm.addProductQueryOptions = addProductQueryOptions;\n vm.addProductUpdateOption = addProductUpdateOption;\n vm.addProductToCart = addProductToCart;\n vm.getCartContents = getCartContents;\n vm.toggleSupportOption = toggleSupportOption;\n vm.switchToSection = switchToSection;\n vm.addInstallationOffer = addInstallationOffer;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n vm.addProduct = {\n selections: {Product: $routeParams.product},\n state: null,\n productCounts: {},\n alaCarteCost: 0\n };\n vm.cartGuid = SessionStorageWithFallback.get('smartertoolsCartGuid');\n SessionStorageWithFallback.set('RemovalItemId', '');\n SessionStorageWithFallback.set('smartertoolsPreCart', '');\n autoSpinner = true;\n vm.addProductQueryOptions();\n vm.getCartContents();\n getBack();\n }\n\n function switchToSection(section) {\n if (section === 'Edition') {\n activate();\n return false;\n }\n vm.addProduct.state.CurrentSection = section;\n }\n\n function canOfferInstallation() {\n if (vm.isReseller) {\n return vm.isReseller;\n }\n return (vm.addProduct.state ? vm.addProduct.state.Product === 'support' : true);\n }\n\n function addProductTotal() {\n return (vm.addProduct.state ? vm.addProduct.state.Total + 0 : 0) + vm.addProduct.alaCarteCost;\n }\n\n function addProductIncrementAlaCarte(e, id, cost) {\n if (!vm.addProduct.productCounts[`${id}`])\n vm.addProduct.productCounts[`${id}`] = 1;\n else\n vm.addProduct.productCounts[`${id}`] = vm.addProduct.productCounts[`${id}`] + 1;\n vm.addProduct.alaCarteCost += cost;\n\n e.preventDefault();\n }\n\n function addProductDecrementAlaCarte(e, title, id, cost) {\n if (!vm.addProduct.productCounts[`${id}`] || vm.addProduct.productCounts[`${id}`] < 1) {\n vm.addProduct.productCounts[`${id}`] = 0;\n } else {\n vm.addProduct.productCounts[`${id}`] = vm.addProduct.productCounts[`${id}`] - 1;\n vm.addProduct.alaCarteCost -= cost;\n }\n\n if (vm.addProduct.productCounts[`${id}`] == 0) {\n let option = findOption(title, id);\n if (option) option.Selected = false;\n }\n\n e.preventDefault();\n }\n\n function addProductQueryOptions() {\n $http.post(`${apiRootUrl}v1/cart/new-purchase-options`, JSON.stringify(vm.addProduct.selections))\n .then(response => {\n let data = response.data;\n vm.addProduct.state = data;\n for (let i = 0; i < data.Sections.length; i++) {\n data.Sections[i].DefaultTitle = data.Sections[i].Title;\n }\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function addProductUpdateOption(key, val) {\n vm.addProduct.selections[key] = val;\n vm.addProductQueryOptions();\n }\n\n function addProductToCart() {\n vm.addProduct.selections.CartId = vm.cartGuid;\n let data = vm.addProduct.selections;\n data.AlaCarteItems = [];\n for (let key in vm.addProduct.productCounts) {\n data.AlaCarteItems.push({Id: key, Count: vm.addProduct.productCounts[key]});\n }\n\n $http.post(`${apiRootUrl}v1/cart/new-purchase-add`, JSON.stringify(data))\n .then(response => {\n let data2 = response.data;\n vm.cartGuid = data2.CartId;\n SessionStorageWithFallback.set('smartertoolsCartGuid', vm.cartGuid);\n $location.path('/');\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function addInstallationOffer() {\n vm.addProduct.selections.CartId = vm.cartGuid;\n let data = vm.addProduct.selections;\n data.AlaCarteItems = [];\n for (let key in vm.addProduct.productCounts) {\n data.AlaCarteItems.push({Id: key, Count: vm.addProduct.productCounts[key]});\n }\n\n SessionStorageWithFallback.set('smartertoolsPreCart', JSON.stringify(data));\n\n $location.path('/installation-offer');\n $scope.$applyAsync();\n }\n\n function getCartContents() {\n if ($routeParams.product === 'support' && vm.cartGuid) {\n $http.post(`${apiRootUrl}v1/cart/contents`, JSON.stringify({CartId: vm.cartGuid}))\n .then(response => {\n let data = response.data;\n if (data.Items && data.Items.length) {\n vm.cartContents = data.Items;\n }\n }, () => {\n });\n }\n }\n\n function toggleSupportOption(e, title, id, cost) {\n if (e.isDefaultPrevented())\n return;\n\n vm.addProduct.state = vm.addProduct.state || {};\n\n let option = findOption(title, id);\n if (!option) return;\n\n vm.isInCart = {};\n\n if (!option.selected && vm.cartContents && vm.cartContents.length) {\n for (let i = 0; i < vm.cartContents.length; i++) {\n if (id == vm.cartContents[i].ProductId) {\n vm.isInCart[option.Name] = {item: option.Name};\n\n $scope.$applyAsync();\n return;\n }\n }\n }\n\n if (!option.Selected) {\n option.Selected = true;\n vm.addProduct.productCounts[`${id}`] = 1;\n vm.addProduct.alaCarteCost += cost;\n } else {\n option.Selected = false;\n vm.addProduct.alaCarteCost -= (cost * vm.addProduct.productCounts[`${id}`]);\n vm.addProduct.productCounts[`${id}`] = 0;\n }\n\n vm.addProduct.state.EnableFinishButton = vm.addProduct.alaCarteCost;\n\n $scope.$applyAsync();\n }\n\n function findOption(title, id) {\n let sections = vm.addProduct.state.Sections;\n let section;\n for (let i = 0; i < sections.length; i++) {\n if (sections[i].Title === title) {\n section = sections[i];\n break;\n }\n }\n if (!section) return null;\n\n let option;\n for (let j = 0; j < section.Options.length; j++) {\n if (section.Options[j].Value && section.Options[j].Value == id) {\n option = section.Options[j];\n break;\n }\n }\n return option;\n }\n\n function getBack() {\n let stg = sessionStorage.getItem('addProduct_back');\n vm.addProduct.back = stg\n ? JSON.parse(stg)\n : {display: 'Select Product', url: '/purchase/select-product'};\n sessionStorage.removeItem('addProduct_back');\n }\n }\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .constant('moment', moment)\n .run([\n '$rootScope',\n function ($rootScope) {\n $rootScope.$on('$stateChangeSuccess', () => {\n window.scrollTo(0, 0);\n RecalculateAllFloatLabelControls();\n });\n $rootScope.$on('$routeChangeSuccess', (event, currentRoute, previousRoute) => {\n window.scrollTo(0, 0);\n RecalculateAllFloatLabelControls();\n });\n }\n ])\n .config([\n '$routeProvider',\n function ($routeProvider) {\n $routeProvider\n .when('/', {\n templateUrl: '/app/shopping-cart/cart.html',\n controller: 'cartContentsController as cart'\n })\n .when('/add/:product', {\n templateUrl: '/app/shopping-cart/add-product.html',\n controller: 'cartAddProductController as cart'\n })\n .when('/modify-license', {\n templateUrl: '/app/shopping-cart/modify-license.html',\n controller: 'cartModifyLicenseController as cart'\n })\n .when('/renew-license', {\n templateUrl: '/app/shopping-cart/modify-license.html',\n controller: 'cartModifyLicenseController as cart'\n })\n .when('/ticket-details', {\n templateUrl: '/app/shopping-cart/ticket-details.html',\n controller: 'cartContentsController as cart'\n })\n .when('/checkout', {\n templateUrl: '/app/shopping-cart/checkout.html',\n controller: 'cartContentsController as cart'\n })\n .when('/installation-offer', {\n templateUrl: '/app/shopping-cart/installation-offer.html',\n controller: 'cartInstallationOfferController as cart'\n })\n .otherwise({redirectTo: '/'});\n }\n ]);\n\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('cartContentsController',\n [\n '$scope', '$location', '$timeout', 'ticketService', '$q', 'authenticationService', '$rootScope', 'cacheControl', 'userPartnerService', 'hostingService', '$http',\n cartContentsController\n ]);\n\n function cartContentsController($scope, $location, $timeout, ticketService, $q, authenticationService, $rootScope, cacheControl, partnerService, hostingService, $http) {\n const vm = this;\n vm.agreeToInvoiceTerms = false;\n vm.cartGuid = SessionStorageWithFallback.get('smartertoolsCartGuid');\n vm.cartGuidForAgentList = null;\n vm.checkoutFailureMessage = 'FAILURE_MESSAGE';\n vm.checkoutStage = 'checkout';\n vm.countryList = geographicLocations.countries;\n vm.customerEmail = authenticationService.getLoggedInEmail();\n vm.displayItems = [];\n vm.emergencyTicket = null;\n vm.grandTotal = 0;\n vm.hasContents = false;\n vm.invoiceNumber = 'INVOICE_NUMBER';\n vm.isReseller = authenticationService.isReseller();\n vm.isSupportAndNotReseller = false;\n vm.items = [];\n vm.referenceNumber = '';\n vm.selectedPaymentMethod = null;\n vm.selectedPaymentMethodId = 'new';\n vm.selectedStaffMember = null;\n vm.sentEmergencyTicket = false;\n vm.showDiscountColumn = false;\n vm.showTaxColumn = false;\n vm.showTotalColumn = false;\n vm.stateList = geographicLocations.statesByCountry;\n vm.totalDiscount = 0;\n vm.totalPrice = 0;\n vm.totalTax = 0;\n\n // Functions\n vm.addonsExpire = addonsExpire;\n vm.addonName = addonName;\n vm.backFromPaymentText = backFromPaymentText;\n vm.backFromPaymentUrl = backFromPaymentUrl;\n vm.checkPartnershipsAndHosted = checkPartnershipsAndHosted;\n vm.clearAll = clearAll;\n vm.clearTickets = clearTickets;\n vm.completePurchase = completePurchase;\n vm.getPrimaryEmail = getPrimaryEmail;\n vm.getStaffImage = getStaffImage;\n vm.gotoPaymentPage = gotoPaymentPage;\n vm.goToVerification = goToVerification;\n vm.loadStaffList = loadStaffList;\n vm.refreshCartContents = refreshCartContents;\n vm.initialLoadCartContents = initialLoadCartContents;\n vm.removeItem = removeItem;\n vm.scrollTop = scrollTop;\n vm.selectedPaymentMethodChanged = selectedPaymentMethodChanged;\n vm.selectStaff = selectStaff;\n vm.setFromCartContents = setFromCartContents;\n vm.setStage = setStage;\n vm.setTicketsFromCartContents = setTicketsFromCartContents;\n vm.submitTickets = submitTickets;\n vm.ticketDoContinueCheckout = ticketDoContinueCheckout;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n $scope.load = function () {\n if ($location.path() === '/checkout' && vm.checkoutStage === 'checkout') {\n if (!vm.cartGuid)\n location.href = '/purchase/select-product.html';\n else\n vm.gotoPaymentPage();\n }\n };\n\n autoSpinner = true;\n $scope.load();\n vm.initialLoadCartContents();\n vm.getPrimaryEmail();\n vm.checkPartnershipsAndHosted();\n\n // TESTING - This next section will show the thank you page, so it can be worked on\n //$timeout(function() {\n // vm.invoiceNumber = '2110136230';\n // vm.isSupportAndNotReseller = false;\n // vm.checkoutFailureMessage = null;\n // vm.cartGuidForAgentList = '4055e5f4-9a0c-40c2-ba84-6ce99a8250c1';\n // vm.loadStaffList(function () { vm.setStage(\"charge-success\"); });\n //}, 500);\n }\n\n function addonsExpire(item) {\n let expires = null;\n item.Addons.forEach(function (addon) {\n if (addon.ExpiresUtc && !expires)\n expires = addon.ExpiresUtc;\n });\n return expires;\n }\n\n function addonName(addon) {\n let name = addon.Name;\n if (!addon.ExpiresUtc)\n return name;\n\n const options = { dateStyle: 'medium' };\n\n // The following if statement is mostly so that we can style the expiration note \n // differently for the main renewal notice if we so desire\n const exDate = new Date(addon.ExpiresUtc);\n const dateString = exDate.toLocaleDateString(undefined, options);\n if (name === 'INCLUDES: 12 months of Maintenance and Support' ||\n name === '12 months of Maintenance and Support' ||\n name === 'Maintenance and Support' ||\n name === 'Maintenance and Support Reinstatement') {\n name += ` (expires ${dateString})`;\n } else {\n name += ` (expires ${dateString})`;\n }\n return name;\n }\n\n function backFromPaymentText() {\n return vm.emergencyTicket ? 'Ticket Details' : 'Shopping Cart';\n }\n\n function backFromPaymentUrl() {\n return '/purchase/#/' + (vm.emergencyTicket ? 'ticket-details' : '');\n }\n\n function checkPartnershipsAndHosted() {\n $q\n .all([\n partnerService.getPartnershipDetails(),\n hostingService.getServices()\n ])\n .then(function (arr) {\n vm.IsActivePartner = arr[0] && arr[0].IsActivePartner;\n\n let hostedData = arr[1];\n if (hostedData.Services) {\n for (let i = 0; i < hostedData.Services.length; i++) {\n if (hostedData.Services[i].Status === 'active' || hostedData.Services[i].Status === 'trial') {\n vm.hasHosted = true;\n break;\n }\n }\n }\n });\n }\n\n function clearAll() {\n vm.hasContents = false;\n vm.showTaxColumn = false;\n vm.showDiscountColumn = false;\n vm.showTotalColumn = false;\n vm.totalPrice = 0;\n vm.totalDiscount = 0;\n vm.totalTax = 0;\n vm.grandTotal = 0;\n vm.items = [];\n vm.displayItems = [];\n vm.cartGuid = null;\n vm.emergencyTicket = null;\n vm.includesEmergencyTicket = false;\n vm.customerEmail = null;\n SessionStorageWithFallback.set('smartertoolsCartItemCount', 0);\n SessionStorageWithFallback.set('smartertoolsCartGuid', '');\n SessionStorageWithFallback.set('smartertoolsPreCart', '');\n SessionStorageWithFallback.set('RemovalItemId', '');\n }\n\n function clearTickets() {\n vm.emergencyTicket = null;\n\n for (let item in vm.displayItems) {\n if (!vm.displayItems.hasOwnProperty(item)) continue;\n let key = `${item.ProductId}_${item.Id}_ticketDetails`;\n sessionStorage.removeItem(key);\n }\n }\n\n function completePurchase() {\n if (vm.selectedPaymentMethodId === 'invoice') {\n $http.post(`${apiRootUrl}v1/cart/complete-purchase/invoice-later`, JSON.stringify({ CartId: vm.cartGuid }))\n .then(response => {\n let data = response.data;\n if (data.Charged) {\n submitTickets(function () {\n onComplete(data);\n });\n } else {\n vm.checkoutFailureMessage = data.ResultMessage;\n vm.setStage('charge-failure');\n }\n }, () => {\n });\n } else if (vm.selectedPaymentMethodId === 'new') {\n let d = vm.selectedPaymentMethod;\n d.CartId = vm.cartGuid;\n\n $http.post(`${apiRootUrl}v1/cart/complete-purchase/new-card`, JSON.stringify(d))\n .then(function (response) {\n let data = response.data;\n if (data.Charged) {\n submitTickets(() => {\n onComplete(data);\n });\n } else {\n vm.checkoutFailureMessage = data.ResultMessage;\n vm.setStage('charge-failure');\n }\n }, () => {\n });\n } else {\n let d2 = vm.selectedPaymentMethod;\n d2.CartId = vm.cartGuid;\n\n $http.post(`${apiRootUrl}v1/cart/complete-purchase/card-on-file`, JSON.stringify(d2))\n .then(response => {\n let data = response.data;\n if (data.Charged) {\n submitTickets(function () {\n onComplete(data);\n });\n } else {\n vm.checkoutFailureMessage = data.ResultMessage;\n vm.setStage('charge-failure');\n }\n }, () => {\n });\n }\n\n function onComplete(data) {\n trackPurchase(data);\n vm.invoiceNumber = data.InvoiceNumber;\n vm.isSupportAndNotReseller = data.isSupportAndNotReseller;\n vm.checkoutFailureMessage = null;\n vm.cartGuidForAgentList = vm.cartGuid;\n vm.clearAll();\n vm.clearTickets();\n cacheControl.clearAllCaches();\n $rootScope.$broadcast('cache-clear', {});\n vm.setStage('charge-success');\n RefreshLoginTopArea();\n $rootScope.$broadcast('userAccessService:changed', {});\n $rootScope.$applyAsync();\n }\n }\n\n function getPrimaryEmail() {\n ticketService.getAccountSettings()\n .then(data => {\n if (data) {\n vm.primaryEmail = data.Details.EmailAddress;\n }\n });\n }\n\n function gotoPaymentPage() {\n if (!authenticationService.isLoggedIn()) {\n ShowLoginOverlay(() => vm.gotoPaymentPage());\n } else {\n if ($location.path() === '/'\n && vm.emergencyTicket) {\n $location.path('/ticket-details');\n $scope.$applyAsync();\n return;\n }\n authenticationService.showTermsCondition(\n function (data) {\n const showAgreement = data;\n if (showAgreement == true) {\n ShowTermsAgreementOverlay();\n }\n });\n\n $http.post(`${apiRootUrl}v1/cart/payment-methods`, JSON.stringify({}))\n .then(response => {\n let data = response.data;\n vm.availablePaymentMethods = data.Methods;\n for (let i = 0; i < vm.availablePaymentMethods.length; i++) {\n vm.availablePaymentMethods[i].SecurityCode = vm.availablePaymentMethods[i].SecurityCode || '';\n vm.availablePaymentMethods[i].CardNumber = vm.availablePaymentMethods[i].CardNumber || '';\n vm.availablePaymentMethods[i].NameOnCard = vm.availablePaymentMethods[i].NameOnCard || '';\n vm.availablePaymentMethods[i].SaveCard = vm.availablePaymentMethods[i].SaveCard || false;\n }\n vm.selectedPaymentMethodChanged();\n vm.setStage('payment');\n $location.path('/checkout');\n\n $scope.$applyAsync();\n RecalculateAllFloatLabelControls();\n }, () => {\n ShowLoginOverlay(() => vm.gotoPaymentPage());\n });\n }\n }\n\n function goToVerification() {\n $http.post(`${apiRootUrl}v1/cart/pre-verify`, JSON.stringify({ CartId: vm.cartGuid }))\n .then(response => {\n let data = response.data;\n vm.setFromCartContents(data);\n vm.setStage('verify');\n }, () => {\n });\n }\n\n function loadStaffList(callback) {\n $.get(`${apiRootUrl}v1/cart/sales-agents`)\n .done(data => {\n vm.salesAgents = data.Agents;\n $scope.$applyAsync();\n if (callback)\n callback();\n });\n }\n\n function getStaffImage(id) {\n return id ? `${apiRootUrl}v1/cart/sales-agent-image/${id}` : '/img/employees/no-image.svg';\n }\n\n function refreshCartContents() {\n if (!vm.cartGuid) {\n vm.clearAll();\n return;\n }\n\n $http.post(`${apiRootUrl}v1/cart/contents`, JSON.stringify({ CartId: vm.cartGuid }))\n .then(response => {\n let data = response.data;\n vm.setFromCartContents(data);\n vm.setTicketsFromCartContents(data);\n }, () => {\n vm.setFromCartContents(null);\n vm.setTicketsFromCartContents(null);\n });\n }\n\n function initialLoadCartContents() {\n if (!vm.cartGuid) {\n vm.clearAll();\n return;\n }\n\n $http.post(`${apiRootUrl}v1/cart/contents`, JSON.stringify({ CartId: vm.cartGuid }))\n .then(response => {\n let data = response.data;\n let removeItem = data.Items[data.Items.length - 1];\n SessionStorageWithFallback.set('RemovalItemId', removeItem.Id);\n vm.setFromCartContents(data);\n vm.setTicketsFromCartContents(data);\n }, () => {\n vm.setFromCartContents(null);\n vm.setTicketsFromCartContents(null);\n });\n }\n\n function removeItem(item) {\n const url = item.IsUpgrade ? 'v1/cart/remove-upgrade-item' : 'v1/cart/remove-purchase-item';\n $http.post(apiRootUrl + url, JSON.stringify({ CartId: vm.cartGuid, CartItemId: item.Id }))\n .then(response => {\n let data = response.data;\n vm.setFromCartContents(data);\n }, () => {\n });\n }\n\n function scrollTop() {\n window.scrollTo(0, 0);\n }\n\n function selectedPaymentMethodChanged() {\n if (!vm.availablePaymentMethods)\n return;\n vm.availablePaymentMethods.forEach(p => {\n if (vm.selectedPaymentMethodId &&\n vm.selectedPaymentMethodId === 'new' &&\n p &&\n p.PaymentType === 'new') {\n vm.selectedPaymentMethod = p;\n } else if (vm.selectedPaymentMethodId === 'invoice' && p.PaymentType === 'invoice') {\n vm.selectedPaymentMethod = p;\n } else if (vm.selectedPaymentMethodId !== 'new' &&\n vm.selectedPaymentMethodId !== 'invoice' &&\n p.PaymentType === 'card' &&\n p.PaymentMethodId == vm.selectedPaymentMethodId) {\n vm.selectedPaymentMethod = p;\n }\n });\n\n $scope.$applyAsync();\n RecalculateAllFloatLabelControls();\n }\n\n function selectStaff(agentId) {\n // this is a fire and forget call\n $http.post(`${apiRootUrl}v1/cart/sales-agent`, json.stringify({\n agentid: agentid,\n cartguid: vm.cartguidforagentlist\n }))\n .then(() => {\n }, () => {\n });\n\n vm.selectedstaffmember = agentid;\n }\n\n function setFromCartContents(data) {\n if (data === null) {\n vm.clearAll();\n\n $scope.$applyAsync();\n return;\n }\n vm.showTaxColumn = data.ShowTaxColumn;\n vm.showDiscountColumn = data.ShowDiscountColumn;\n vm.showTotalColumn = data.ShowTotalColumn;\n vm.totalPrice = data.TotalPrice;\n vm.totalDiscount = data.TotalDiscount;\n vm.totalTax = data.TotalTax;\n vm.grandTotal = data.GrandTotal;\n vm.referenceNumber = data.ReferenceNumber;\n\n vm.items = data.Items || [];\n vm.displayItems = [];\n let hasTraining = false;\n\n vm.isReseller = authenticationService.isReseller();\n for (let i = 0; i < vm.items.length; i++) {\n let item = Object.assign({}, vm.items[i]);\n if (!item)\n continue;\n\n if (hasTraining && item.ProductId === 789) {\n for (let i2 = 0; i2 < vm.displayItems.length; i2++) {\n let displayItem = vm.displayItems[i2];\n\n if (!displayItem || displayItem.ProductId !== 789)\n continue;\n\n displayItem.TotalPrice += item.ListPriceIncludingAddons;\n displayItem.CartIDs.push(item.Id);\n displayItem.quantity++;\n break;\n }\n } else {\n if (item.ProductId === 789) {\n hasTraining = true;\n item.CartIDs = [];\n item.CartIDs.push(item.Id);\n }\n\n item.TotalPrice = item.ListPriceIncludingAddons;\n item.quantity = item.quantity ? item.quantity : 1;\n vm.displayItems.push(item);\n }\n\n if (vm.isReseller != null && vm.isReseller && item.Addons.length > 0) {\n let addons = item.Addons;\n let indexToRemove = null;\n for (let j = 0; j < addons.length; j++) {\n if (addons[j].OriginalProductId == 788)\n indexToRemove = j;\n }\n if (indexToRemove != null)\n item.Addons.splice(indexToRemove, 1);\n }\n }\n\n vm.hasContents = vm.items.length > 0;\n SessionStorageWithFallback.set('smartertoolsCartItemCount', vm.items.length);\n\n $scope.$applyAsync();\n RefreshLoginTopArea();\n }\n\n function setStage(newStage) {\n vm.checkoutStage = newStage;\n $scope.$applyAsync();\n $timeout(vm.scrollTop, 10);\n }\n\n function setTicketsFromCartContents(data) {\n if (!data || !data.Items) {\n vm.clearAll();\n $scope.$applyAsync();\n return;\n }\n\n vm.clearTickets();\n\n // customer email is actually the logged in user email, so handle accordingly.\n let userEmail = vm.customerEmail === vm.primaryEmail\n ? ''\n : vm.customerEmail;\n\n for (let i = 0; i < data.Items.length; i++) {\n let details;\n if (data.Items[i].ProductId === 203) {\n vm.emergencyTicket = {\n ProductId: data.Items[i].ProductId,\n CartItemId: data.Items[i].Id,\n fromEmail: vm.primaryEmail,\n ccEmail: userEmail\n };\n\n details = JSON.parse(sessionStorage.getItem(`${vm.emergencyTicket.ProductId}_${vm.emergencyTicket.CartItemId}_ticketDetails`));\n if (details) {\n vm.emergencyTicket.Product = details.Product;\n vm.emergencyTicket.ccEmail = details.CCAddress;\n vm.emergencyTicket.subject = details.Subject;\n vm.emergencyTicket.phoneNumber = details.Phone;\n vm.emergencyTicket.message = details.rawBody;\n }\n }\n }\n\n $scope.$applyAsync();\n\n $timeout(() => RecalculateAllFloatLabelControls());\n }\n\n function submitTickets(callBack) {\n let details = {};\n let sessionKey = '';\n let invoiceNumber = vm.invoiceNumber;\n let sendingEmergencyTicket = false;\n let promises = [];\n\n // customer email is actually the logged in user email, so handle accordingly.\n let userEmail = vm.customerEmail === vm.primaryEmail\n ? ''\n : vm.customerEmail;\n\n for (let i = 0; i < vm.items.length; i++) {\n let item = vm.items[i];\n let isFree = false;\n switch (item.ProductId) {\n case 203:\n sessionKey = `${item.ProductId}_${item.Id}_ticketDetails`;\n details = JSON.parse(sessionStorage.getItem(sessionKey));\n if (!details)\n continue;\n\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n sendingEmergencyTicket = true;\n\n break;\n case 788:\n details = {\n IsEmergency: false,\n IsInstall: true,\n IsTraining: false,\n FromAddress: vm.primaryEmail,\n CCAddress: userEmail,\n Subject: 'SmarterTools Installation Assistance',\n rawBody: `${vm.primaryEmail} has purchased Installation Assistance.`,\n Body: `${vm.primaryEmail} has purchased Installation Assistance.`,\n IsHtml: false,\n IsFree: isFree\n };\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n\n break;\n case 789:\n details = {\n IsEmergency: false,\n IsInstall: false,\n IsTraining: true,\n FromAddress: vm.primaryEmail,\n CCAddress: userEmail,\n Subject: 'SmarterTools Product Training',\n rawBody: `${vm.primaryEmail} has purchased Product Training.`,\n Body: `${vm.primaryEmail} has purchased Product Training.`,\n IsHtml: false,\n IsFree: isFree\n };\n\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n\n break;\n }\n\n if (vm.isReseller != null && !vm.isReseller) {\n for (let j = 0; j < item.Addons.length; j++) {\n let addon = item.Addons[j];\n isFree = false;\n switch (addon.OriginalProductId) {\n case 203:\n sessionKey = `${item.ProductId}_${item.Id}_ticketDetails`;\n details = JSON.parse(sessionStorage.getItem(sessionKey));\n if (!details)\n continue;\n\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n sendingEmergencyTicket = true;\n\n break;\n case 788:\n isFree = addon.ListPrice <= 0;\n details = {\n IsEmergency: false,\n IsInstall: true,\n IsTraining: false,\n FromAddress: vm.primaryEmail,\n CCAddress: userEmail,\n Subject: 'SmarterTools Installation Assistance',\n rawBody: `${vm.primaryEmail} has submitted an Installation Assistance request.`,\n Body: `${vm.primaryEmail} has submitted an Installation Assistance request.`,\n IsHtml: false,\n IsFree: isFree\n };\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n\n break;\n case 789:\n details = {\n IsEmergency: false,\n IsInstall: false,\n IsTraining: true,\n FromAddress: vm.primaryEmail,\n CCAddress: userEmail,\n Subject: 'SmarterTools Product Training',\n rawBody: `${vm.primaryEmail} has purchased Product Training.`,\n Body: `${vm.primaryEmail} has purchased Product Training.`,\n IsHtml: false,\n IsFree: isFree\n };\n\n details.Invoice = invoiceNumber;\n promises.push(ticketService.submitTicket(details));\n\n break;\n }\n }\n }\n }\n\n if (!promises.length) {\n if (typeof callBack === 'function')\n callBack();\n\n return;\n }\n\n $q.all(promises)\n .then(arr => {\n cacheControl.getCache('rsaaTicketCache').removeAll();\n vm.sentEmergencyTicket = sendingEmergencyTicket;\n vm.clearTickets();\n if (typeof callBack === 'function')\n callBack();\n })\n .catch(() => {\n vm.clearTickets();\n if (typeof callBack === 'function')\n callBack();\n });\n }\n\n function ticketDoContinueCheckout() {\n if (vm.purchasedTicketsForm.$invalid)\n return;\n\n if (!vm.emergencyTicket.Product)\n return;\n\n let details;\n let sessionKey;\n\n if (vm.emergencyTicket) {\n details = {\n IsEmergency: true,\n IsInstall: false,\n IsTraining: false,\n FromAddress: vm.customerEmail,\n CCAddress: vm.emergencyTicket.ccEmail,\n Subject: vm.emergencyTicket.subject,\n Phone: vm.emergencyTicket.phoneNumber,\n Product: vm.emergencyTicket.Product,\n rawBody: vm.emergencyTicket.message,\n Body: vm.emergencyTicket.message,\n IsHtml: false\n };\n\n sessionKey = `${vm.emergencyTicket.ProductId}_${vm.emergencyTicket.CartItemId}_ticketDetails`;\n sessionStorage.setItem(sessionKey, JSON.stringify(details));\n }\n\n vm.gotoPaymentPage();\n }\n\n function trackPurchase(data) {\n try {\n if (typeof ga === 'function' && data) {\n ga('require', 'ecommerce');\n ga('ecommerce:addTransaction',\n {\n 'id': data.InvoiceNumber,\n 'affiliation': 'SmarterTools',\n 'revenue': vm.grandTotal\n });\n\n if (vm.items) {\n for (let index = 0; index < vm.items.length; ++index) {\n let item = vm.items[index];\n if (!item)\n continue;\n let name = item.Name;\n if (vm.IsUpgrade)\n name = 'License Upgrade';\n ga('ecommerce:addItem',\n {\n 'id': item.Id, // Transaction ID. Required.\n 'name': name, // Product name. Required.\n 'price': item.FinalPrice, // Unit price.\n 'quantity': '1' // Quantity.\n });\n if (item.Addons) {\n for (let j = 0; j < item.Addons.length; ++j) {\n let addon = item.Addons[j];\n if (addon.FinalPrice)\n ga('ecommerce:addItem',\n {\n 'id': addon.Id, // Transaction ID. Required.\n 'name': addon.Name, // Product name. Required.\n 'price': addon.FinalPrice, // Unit price.\n 'quantity': '1' // Quantity.\n });\n }\n }\n }\n }\n ga('ecommerce:send');\n }\n } catch (ex) {\n /* discard errors */\n }\n }\n }\n\n})();","(function () {\n angular\n .module('smartertoolsApp')\n .controller('cartInstallationOfferController', ['$scope', '$location', '$http', cartInstallationOfferController]);\n\n function cartInstallationOfferController($scope, $location, $http) {\n const vm = this;\n vm.productTotal = productTotal;\n vm.getTitle = getTitle;\n vm.productQueryOptions = productQueryOptions;\n vm.addProductToCart = addProductToCart;\n vm.removeItem = removeItem;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n vm.product = {\n selections: JSON.parse(SessionStorageWithFallback.get('smartertoolsPreCart')),\n state: null,\n hasEnterprise: false,\n wantsInstallation: true\n };\n vm.cartGuid = SessionStorageWithFallback.get('smartertoolsCartGuid');\n\n const needRemoval = JSON.parse(SessionStorageWithFallback.get('RemovalItemId'));\n if (needRemoval) {\n vm.removeItem(needRemoval);\n }\n SessionStorageWithFallback.set('RemovalItemId', '');\n vm.product.hasEnterprise = vm.product.selections.Edition !== 'Professional';\n vm.productQueryOptions();\n getBack();\n }\n\n function removeItem(item) {\n $http.post(`${apiRootUrl}v1/cart/remove-purchase-item`, JSON.stringify({CartId: vm.cartGuid, CartItemId: item}))\n .then(() => {}, () => {});\n }\n\n function productQueryOptions() {\n $http.post(`${apiRootUrl}v1/cart/new-purchase-options`, JSON.stringify(vm.product.selections))\n .then(response => {\n let data = response.data;\n vm.product.state = data;\n vm.product.hasEnterprise = vm.product.selections.Edition !== 'Professional';\n vm.product.wantsInstallation = true;\n for (let i = 0; i < data.Sections.length; i++) {\n data.Sections[i].DefaultTitle = data.Sections[i].Title;\n }\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function addProductToCart() {\n let addInstallation = vm.product.wantsInstallation;\n vm.product.selections.CartId = vm.cartGuid;\n let data = vm.product.selections;\n data.AlaCarteItems = vm.product.selections.AlaCarteItems;\n\n if (addInstallation) {\n data.FreeInstallationHelp = true;\n }\n\n $http.post(`${apiRootUrl}v1/cart/new-purchase-add`, JSON.stringify(data))\n .then(response => {\n let data2 = response.data;\n vm.cartGuid = data2.CartId;\n SessionStorageWithFallback.set('smartertoolsCartGuid', vm.cartGuid);\n $location.path('/');\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function productTotal() {\n return (vm.product.state ? vm.product.state.Total + 0 : 0);\n }\n\n function getTitle() {\n let title = 'Congratulations on choosing ';\n if (vm.product.state)\n title += vm.product.state.Title;\n if (vm.product.selections.Edition) {\n title += vm.product.selections.Edition ? ' ' + vm.product.selections.Edition : '';\n }\n if (vm.product.state) {\n if (vm.product.state.Sections[1]) {\n title += vm.product.state.Sections[1].Selected ? ' - ' + vm.product.state.Sections[1].DefaultTitle : '';\n }\n }\n title += '!';\n return title;\n }\n\n function getBack() {\n vm.product.back = {display: 'Add Product', url: '/purchase/#/add/' + vm.product.selections.Product};\n }\n }\n})();","(function () {\n\n angular\n .module('smartertoolsApp')\n .controller('cartModifyLicenseController',\n [\n '$scope', '$location', 'moment', 'authenticationService', '$rootScope', '$http',\n cartModifyLicenseController\n ]);\n\n function cartModifyLicenseController($scope, $location, moment, authenticationService, $rootScope, $http) {\n const vm = this;\n let autoNav = $location.search().LicenseKey;\n vm.searchText = $location.search().LicenseKey;\n vm.loginRequired = !authenticationService.isLoggedIn();\n\n // Functions\n vm.modifyProductUpdateOption = modifyProductUpdateOption;\n vm.currentTotal = currentTotal;\n vm.addModificationToCart = addModificationToCart;\n vm.showLoginOverlay = showLoginOverlay;\n vm.refreshLicenseList = refreshLicenseList;\n vm.modifyProductQueryOptions = modifyProductQueryOptions;\n vm.upgradeProtectionWarnClass = upgradeProtectionWarnClass;\n vm.friendlyUpgradeProtectionDate = friendlyUpgradeProtectionDate;\n vm.chooseLicenseToModify = chooseLicenseToModify;\n vm.showLicenseList = showLicenseList;\n vm.doResellerSearch = doResellerSearch;\n vm.switchToModSection = switchToModSection;\n\n activate();\n\n // -----------------------------------------------\n\n function activate() {\n vm.cartGuid = SessionStorageWithFallback.get('smartertoolsCartGuid');\n vm.renewMode = $location.path() === '/renew-license';\n vm.licenseKey = null;\n vm.loginRequired = !authenticationService.isLoggedIn();\n vm.licenses = null;\n vm.isReseller = authenticationService.isReseller();\n vm.licenseTab = '';\n vm.modificationState = {\n licenseKey: vm.licenseKey,\n selections: {LicenseKey: vm.licenseKey}\n };\n\n autoSpinner = true;\n vm.refreshLicenseList();\n getBack();\n\n $rootScope.$on('authentication:logged-in', (event, data) => {\n vm.loginRequired = !authenticationService.isLoggedIn();\n });\n $rootScope.$on('authentication:logged-out', (event, data) => {\n vm.loginRequired = !authenticationService.isLoggedIn();\n });\n }\n\n function modifyProductUpdateOption(key, val) {\n vm.modificationState.selections[key] = val;\n vm.modifyProductQueryOptions();\n }\n\n function switchToModSection(section) {\n vm.modificationState.state.CurrentSection = section;\n }\n\n function currentTotal() {\n return vm.modificationState.state ? vm.modificationState.state.Total + 0 : 0;\n }\n\n function addModificationToCart() {\n vm.modificationState.selections.CartId = vm.cartGuid;\n let data = vm.modificationState.selections;\n \n $http.post(`${apiRootUrl}v1/cart/modify-license-add`, JSON.stringify(data))\n .then(response => {\n let data2 = response.data;\n vm.cartGuid = data2.CartId;\n SessionStorageWithFallback.set('smartertoolsCartGuid', vm.cartGuid);\n $location.path('/');\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function showLoginOverlay() {\n ShowLoginOverlay(() => {\n vm.refreshLicenseList();\n $scope.$applyAsync();\n });\n }\n\n function refreshLicenseList() {\n if (!authenticationService.isLoggedIn()) {\n vm.loginRequired = true;\n vm.isReseller = authenticationService.isReseller();\n } else {\n $http.post(`${apiRootUrl}v1/cart/user-licenses`, JSON.stringify({CartId: vm.cartGuid}))\n .then(response => {\n let data = response.data;\n vm.licenses = data.Licenses;\n vm.isReseller = authenticationService.isReseller();\n vm.loginRequired = false;\n vm.licenseKey = null;\n if (autoNav && vm.licenses) {\n for (let i = 0; i < vm.licenses.length; i++) {\n const l = vm.licenses[i];\n if (l.LicenseKeyString == autoNav) {\n chooseLicenseToModify(l.LicenseKeyString);\n }\n }\n autoNav = null;\n }\n $scope.$applyAsync();\n }, () => {\n vm.loginRequired = true;\n vm.isReseller = authenticationService.isReseller();\n $scope.$applyAsync();\n });\n }\n }\n\n function modifyProductQueryOptions() {\n vm.modificationState.selections.LicenseKey = vm.licenseKey;\n $http.post(`${apiRootUrl}v1/cart/modify-license-options`, JSON.stringify(vm.modificationState.selections))\n .then(response => {\n vm.modificationState.state = response.data;\n vm.modificationState.state.Sections.forEach(function (p) {\n vm.modificationState.selections[p.Key] = p.Selected;\n });\n $scope.$applyAsync();\n }, () => {\n });\n }\n\n function upgradeProtectionWarnClass(expiration) {\n let up = new Date(expiration);\n let today = new Date();\n let warnPeriod = new Date();\n warnPeriod.setDate(today.getDate() + 60);\n let isPast = up < today;\n let isWarn = !isPast && up < warnPeriod;\n return isPast ? 'past' : isWarn ? 'warn' : '';\n }\n\n function friendlyUpgradeProtectionDate(expiration) {\n if (new Date(expiration) < new Date())\n return 'Expired ' + (new moment(expiration)).format('ll');\n else\n return 'Expires ' + (new moment(expiration)).format('ll');\n }\n\n function chooseLicenseToModify(licenseKeyString) {\n vm.licenseKey = licenseKeyString;\n vm.modificationState.selections = {};\n vm.modifyProductQueryOptions();\n window.scrollTo(0, 0);\n }\n\n function showLicenseList(licenseKeyString) {\n vm.licenseKey = null;\n vm.modificationState.selections = {};\n window.scrollTo(0, 0);\n }\n\n function doResellerSearch(licenseKeyString) {\n let lk = vm.resellerSearchText.replace(/[^a-fA-F0-9]/g, '');\n let lk2 = '';\n for (let i = 0, len = lk.length; i < len; i++) {\n if (i !== 0 && (i % 6) === 0)\n lk2 += '-';\n lk2 += lk.charAt(i);\n }\n vm.resellerSearchText = lk2;\n vm.resellerSearchPerformed = false;\n\n $http.post(`${apiRootUrl}v1/cart/reseller-license-search`, JSON.stringify({\n LicenseKeyString: lk2,\n CartId: vm.cartGuid\n }))\n .then(response => {\n let data = response.data;\n if (data && data.Licenses && data.Licenses.length > 0)\n vm.resellerSearchTextResults = data.Licenses[0];\n else\n vm.resellerSearchTextResults = null;\n vm.resellerSearchPerformed = true;\n $scope.$applyAsync();\n\n const resellerSearchLicenseKeyBox = document.getElementById('resellerSearchLicenseKeyBox');\n resellerSearchLicenseKeyBox.select();\n resellerSearchLicenseKeyBox.focus();\n }, () => {\n });\n }\n\n function getBack() {\n const stg = sessionStorage.getItem('modifyLicense_back');\n vm.modifyLicense = vm.modifyLicense || {};\n vm.modifyLicense.back = stg\n ? JSON.parse(stg)\n : {display: 'Select Product', url: '/purchase/select-product'};\n sessionStorage.removeItem('modifyLicense_back');\n }\n }\n\n})();"]}