(function(n){"use strict";n.module("app",["app.core","templates","app.services","app.accountBalance","app.accountManagement","app.accounts","app.auth","app.dash","app.deliveries","app.documents","app.home","app.invoices","app.jobs","app.leads","app.lite","app.orders","app.ordersv2","app.payments","app.productsv2","app.quotes","app.registration","app.thankyou","app.components","app.reports","app.resources","app.sales","app.statements","app.users","app.cms","app.permalinks","app.mobile","app.permissions","app.downloads","app.plants","app.integrations"])})(angular),function(){"use strict";angular.module("app.accountBalance",["app.core"])}(),function(n){"use strict";n.module("app.accountManagement",["component.routerHelper","component.accountManagement","component.breadcrumb","component.modal","component.auth","ui.bootstrap"])}(angular),function(){"use strict";angular.module("app.accounts",["app.core"])}(),function(){"use strict";angular.module("app.auth",["vcRecaptcha"])}(),function(){"use strict";angular.module("app.cms",["app.core","angularMoment"])}(),function(){"use strict";angular.module("app.components",["app.core"])}(),function(){"use strict";angular.module("component.account",["app.core"])}(),function(n){"use strict";n.module("component.accountManagement",["component.sbuImage","component.formFeedback","component.account","component.pageEmptyMessage","component.pageErrorMessage","component.pageLoadingMessage","component.lists","ui.bootstrap","ngCookies"])}(angular),function(){"use strict";angular.module("component.accountNotificationToggle",[])}(),function(){"use strict";angular.module("component.achievements",["app.core"])}(),function(){"use strict";angular.module("component.auth",["component.accountManagement"])}(),function(){"use strict";angular.module("component.breadcrumb",[])}(),function(){"use strict";angular.module("component.brickInput",["ngAria","ui.bootstrap"])}(),function(n){"use strict";n.module("component.browserPlatform",[])}(angular),function(){"use strict";angular.module("component.calendar",[])}(),function(n){"use strict";n.module("component.clock",[])}(angular),function(){"use strict";angular.module("component.cms",["app.core","ngResource"])}(),function(n){"use strict";n.module("component.csatTray",[])}(angular),function(n){"use strict";n.module("component.dq",[])}(angular),function(n){"use strict";n.module("component.dqRemind",[])}(angular),function(n){"use strict";n.module("component.dateIcon",[])}(angular),function(){"use strict";angular.module("component.devicePreferences",["app.core"])}(),function(n){"use strict";n.module("component.documentSearch",[])}(angular),function(){"use strict";angular.module("component.loaders",["app.core"])}(),function(){"use strict";angular.module("component.export",[])}(),function(n){"use strict";n.module("component.featureToggle",[])}(angular),function(){"use strict";angular.module("component.feedback",[])}(),function(){"use strict";angular.module("component.filters",[])}(),function(){"use strict";angular.module("component.flags",["ngAria","ui.bootstrap"])}(),function(){"use strict";angular.module("component.form",["validation"])}(),function(n){"use strict";n.module("component.formFeedback",[])}(angular),function(){"use  strict";angular.module("component.appHeader",["app.services"])}(),function(){"use strict";angular.module("component.help",[])}(),function(n){"use strict";n.module("component.insightQuestions",["app.core"])}(angular),function(n){"use strict";n.module("component.intercom",["component.metrics"])}(angular),function(){"use strict";angular.module("component.layout",["app.core"])}(),function(n){"use strict";n.module("component.lists",[])}(angular),function(){"use strict";angular.module("component.listView",["component.oData"])}(),function(){"use strict";angular.module("component.liteMarketing",[])}(),function(){"use strict";angular.module("component.locationFilterProvider",[])}(),function(){"use strict";angular.module("component.lookupAddress",["app.core"])}();angular.module("component.metrics",[]),function(n){"use strict";n.module("component.modal",[])}(angular),function(){"use strict";angular.module("component.ngTranscludeReplace",[])}(),function(){"use strict";angular.module("component.notes",["ngAria","ui.bootstrap"])}(),function(){"use strict";angular.module("component.notification",["app.core"])}(),function(){"use strict";angular.module("component.oData",["app.core"])}(),function(){"use strict";angular.module("component.orderUpload",["app.core"])}(),function(n){"use strict";n.module("component.pageEmptyMessage",[])}(angular),function(n){"use strict";n.module("component.pageErrorMessage",[])}(angular),function(n){"use strict";n.module("component.pageLoadingMessage",[])}(angular),function(n){"use strict";n.module("component.panels",[])}(angular),function(){"use strict";angular.module("component.passwordMatch",[])}(),function(){"use strict";angular.module("component.passwordStrength",[])}(),function(){"use strict";angular.module("component.permissions",["component.auth","component.account"])}(),function(){"use strict";angular.module("component.progressHub",["app.core"])}(),function(){"use strict";angular.module("component.progressIndicator",["app.core"])}(),function(){function n(){function n(n,t){var i="progress-step-complete ",r="progress-step-current ",u="progress-step-next ",f=t.children(),e=f.length,o=function(){for(var o,s=n.progressStep||1,t=1;t<=e;t++)o=f.eq(t-1),t<s?o.addClass(i).removeClass(r+u):t===s?o.addClass(r).removeClass(i+u):t===s+1?o.addClass(u).removeClass(r+i):o.removeClass(i+r+u)};n.$watch("progressStep",o)}return{link:n,restrict:"A"}}angular.module("component.progressStepper",[]).directive("progressStepper",n);n.$inject=["$window"]}(),function(n){"use strict";n.module("component.resetPassword",["component.auth","vcRecaptcha"])}(angular),function(){"use strict";angular.module("component.routerHelper",["ui.router"])}(),function(n){"use strict";n.module("component.sbuImage",[])}(angular),function(){"use strict";angular.module("component.selection",[])}(),function(n){"use strict";n.module("component.shareTools",["component.browserPlatform","angular-pdfjs","ui.bootstrap"])}(angular),function(){"use strict";angular.module("component.support",["app.core"])}(),function(){"use strict";angular.module("component.tableHelpers",[])}(),function(){"use strict";angular.module("component.tour",[])}(),function(n){"use strict";n.module("component.unicodeTools",[])}(angular),function(){"use strict";angular.module("component.upload",["csr.upload.formdata","csr.upload.iframe","csr.upload.directives"])}(),function(){"use strict";angular.module("component.companyDetails",["app.core"])}(),function(){"use strict";angular.module("component.user",["ngResource"])}(),function(){"use strict";angular.module("component.userAvatar",["app.core"])}(),function(n){"use strict";n.module("component.userDetails",["app.core"])}(angular),function(){"use strict";angular.module("component.utils",[])}(),function(){"use strict";angular.module("component.weather",[])}(),function(n){"use strict";n.module("app.core",["ngAnimate","ngAria","ngCookies","ngResource","ngSanitize","ngTouch","ngMessages","ui.bootstrap","ui.router","vcRecaptcha","component.appHeader","component.account","component.auth","component.accountNotificationToggle","component.brickInput","component.breadcrumb","component.browserPlatform","component.clock","component.csatTray","component.cms","component.calendar","component.companyDetails","component.dateIcon","component.devicePreferences","component.documentSearch","component.dq","component.dqRemind","component.panels","component.export","component.featureToggle","component.feedback","component.filters","component.flags","component.form","component.formFeedback","component.help","component.intercom","component.layout","component.listView","component.liteMarketing","component.loaders","component.locationFilterProvider","component.lookupAddress","component.notification","component.metrics","component.ngTranscludeReplace","component.orderUpload","component.orderLineItems","component.orderTotals","component.oData","component.pageEmptyMessage","component.pageErrorMessage","component.pageLoadingMessage","component.passwordMatch","component.passwordStrength","component.permissions","component.progressHub","component.progressIndicator","component.progressStepper","component.releaseLineItems","component.resetPassword","component.routerHelper","component.selection","component.shareTools","component.support","component.tableHelpers","component.tour","component.unicodeTools","component.upload","component.user","component.userAvatar","component.userDetails","component.utils","component.weather","amChartsDirective","angucomplete-alt","angular.filter","angular-pdfjs","angular-storage","as.sortable","ct.ui.router.extras","datePicker","lr.upload","ngAutocomplete","ngLetterAvatar","ngPlaceholder","oitozero.ngSweetAlert","selectionModel","ui.tree","validation","ngclipboard"])}(angular),function(){"use strict";angular.module("app.dash",["app.core"])}(),function(){"use strict";angular.module("app.deliveries",["app.core"])}(),function(){"use strict";angular.module("app.documents",["app.core","component.notes"])}(),function(){"use strict";angular.module("app.downloads",[])}(),function(){"use strict";angular.module("app.home",["app.core"])}(),function(){"use strict";angular.module("app.integrations",[])}(),function(){"use strict";angular.module("app.invoices",["app.core"])}(),function(){"use strict";angular.module("app.jobs",["app.core"]).filter("AddressLine1",function(){return function(n){if(n==null)return"";var t="";return n.Address1==null&&(n.Address1=""),n.Address2==null&&(n.Address2=""),n.Address1!=""&&(t=n.Address1),n.Address1!=""&&n.Address2!=""&&(t+=", "),n.Address2!=""&&(t+=n.Address2),t}}).filter("AddressLine2",function(){return function(n){if(n==null)return"";n.City==null&&(n.City="");n.State==null&&(n.State="");n.PostCode==null&&(n.PostCode="");var t=n.City+" "+n.State+" "+n.PostCode;return t.trim()}})}(),function(){"use strict";angular.module("app.leads",["app.core"])}(),function(){"use strict";angular.module("app.lite",["app.core","ui.bootstrap"])}(),function(){"use strict";angular.module("app.mobile",["app.core"])}(),function(){"use strict";angular.module("app.orders",["app.core"])}(),function(){"use strict";angular.module("app.ordersv2",["app.core"])}(),function(){"use strict";angular.module("component.orderLineItems",["app.core"])}(),function(n){"use strict";n.module("component.orderTotals",["app.core"])}(angular),function(){"use strict";angular.module("component.releaseLineItems",["app.core"])}(),function(){"use strict";angular.module("app.payments",["app.core","app.invoices"])}(),function(n){"use strict";n.module("app.permalinks",["component.routerHelper","oitozero.ngSweetAlert","component.auth","component.account","component.user","ui.bootstrap","component.featureToggle"])}(angular),function(){"use strict";angular.module("app.permissions",["app.core"])}(),function(){"use strict";angular.module("app.plants",[])}(),function(){"use strict";angular.module("app.productsv2",["app.core"])}(),function(){"use strict";angular.module("app.quotes",["app.core"])}(),function(){"use strict";angular.module("app.registration",["app.core"])}(),function(){"use strict";angular.module("app.reports",["app.core"])}(),function(){"use strict";angular.module("app.resources",["app.core"])}(),function(){"use strict";angular.module("app.sales",["app.core"])}(),function(){"use strict";angular.module("app.services",["app.core"])}(),function(){"use strict";angular.module("app.statements",["app.core"])}(),function(n){"use strict";n.module("templates",[])}(angular),function(){"use strict";angular.module("app.thankyou",[])}(),function(){"use strict";angular.module("app.users",["app.core","component.insightQuestions"])}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){t.initialised=!1;t.dataLoaded=!1;t.spinner=!0;t.mixedCurrencyMsg=!1;t.searchOption={};t.search={};t.search.searchDate=new Date(moment().format("YYYY-MM-DD"));t.search.searchDateTimeZone=jstz.determine().name();t.list={};t.list.sortColumn="Month";t.list.asc=!1;t.$watch("search.searchDate",function(){t.getData()});t.getData=function(){var e,s,h,f;if(r.removeAll(),e=i.getActiveData(),angular.isObject(e[0])){if(t.initialised=!0,t.dataLoaded=!1,t.spinner=!0,s=o.uniqueVals("CompanyCode",e),h=o.uniqueVals("Currency",e),s.length!==1){t.mixedCurrencyMsg=!0;t.list.items=[];t.list.totalItems=0;t.dataLoaded=!0;t.spinner=!1;return}t.mixedCurrencyMsg=!1;t.accountCurrency=h[0];f={};f.$skip=0;f.$top=25;f.date=moment(t.search.searchDate).format();f.timezone=t.search.searchDateTimeZone;u.get(f,function(i){n.debug("AccountBalanceController > accountBalance get ",i);t.list.items=i.Items;t.list.totalItems=i.Items.length;t.dataLoaded=!0;t.spinner=!1},function(n){t.list.items=[];t.list.totalItems=0;t.dataLoaded=!0;t.spinner=!1;r.add({id:"accounts-selection",type:"error",message:n.data.Message})})}};t.getRunningTotal=function(n){var r,i,u;if(!t.list.items)return 0;for(r=0,i=0;i<t.list.items.length;i++)u=t.list.items[i],r+=u[n];return r};t.tableHeaders=[{columnName:"",displayName:"",checkbox:!0},{displayName:"Month"},{displayName:"Debit",className:"tf-right"},{displayName:"Credit",className:"tf-right"},{displayName:"Balance",className:"tf-right"}];$("#btn-download-csv").on("click",function(n){t.exportFiles(n,e.csv)});$("#btn-download-excel").on("click",function(n){t.exportFiles(n,e.excel)});t.exportFiles=function(n,r){n.stopPropagation();var u=t.selectedItems.length?t.selectedItems:t.list.items,e=$.map(u,function(n){return moment(n.Month).format("YYYY-MM-DD")}),o=window.location.protocol+"//"+window.location.host+"/api/finance/accountbalance/sap?accountId="+i.getActive().join(",")+"&date="+moment(t.search.searchDate).format("YYYY-MM-DD")+"&timezone="+encodeURIComponent(t.search.searchDateTimeZone)+"&selectedMonths="+e.join(",")+"&access_token="+f.token()+"&fileType="+r.toLowerCase();window.open(o)};t.init=function(){i.isReady()&&t.getData()};t.$on("accounts.changed",t.init);t.$on("accounts.retrieved",function(){t.initialised||t.init()});t.init()}angular.module("app.accountBalance").controller("AccountBalanceController",n);n.$inject=["$log","$scope","accountsService","notificationService","accountBalance","authService","exportService","utilService"]}(),function(){"use strict";function n(n){var t="api/finance/accountbalance/sap";return n(t,null,{get:{method:"GET",url:t+"/",cancellable:!0,isArray:!1}})}angular.module("app.accountBalance").factory("accountBalance",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.accountBalance",config:{url:"/financials/accountbalance",pageTitle:"Account Balance",templateUrl:"financials/accountbalance",access:"Customer/Account/Balance"}}]}angular.module("app.accountBalance").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function l(n){return angular.forEach(n,function(t,i){n[i].ts=moment(n[i].Month).format("MMM")}),n=n.slice().reverse()}function a(n){var i=angular.merge({},c,n);return h.chartOptions=i,t.$broadcast("amCharts.renderChart",i),h.chartOptions}function v(n){return Math.round(Math.max(y(n),p(n))/10)*10}function y(n){return Math.min.apply(Math,n)*-1}function p(n){return Math.max.apply(Math,n)}var h=this,c;t.initialised=!1;t.dataLoaded=!1;t.spinner=!0;t.mixedCurrencyMsg=!1;t.searchOption={};t.searchDate=new Date(moment().format("YYYY-MM-DD"));t.searchDateTimeZone=jstz.determine().name();t.list={};t.list.sortColumn="Month";t.list.asc=!1;h.chartOptions=null;c={type:"serial",theme:"connect",balloon:{cornerRadius:0,shadowAlpha:0,borderThickness:0,color:"#000000",fillColor:"#FF00FF",fillAlpha:0},legend:{enabled:!1},startDuration:1,gridAboveGraphs:!0,autoMargins:!0,marginTop:20,marginRight:20,marginBottom:30,marginLeft:0,graphs:[{fillAlphas:1,type:"column",valueField:"PreviousBalance",balloonText:"<strong>[[category]]: $[[value]]<\/strong>",fillColors:"#c4df9b",lineColor:"#c4df9b",negativeFillColors:"#BA3B3B",negativeLineColor:"#BA3B3B"}],chartCursor:{categoryBalloonEnabled:!1,cursorAlpha:.1,cursorColor:"#000000",fullWidth:!0,valueBalloonsEnabled:!0,zoomable:!1},categoryField:"ts",categoryAxis:{parseDates:!1,gridAlpha:0,axisAlpha:0,labelsEnabled:!1},valueAxes:[{gridAlpha:0,axisAlpha:0,labelsEnabled:!1}],"export":{enabled:!1}};t.getData=function(){var e,h,c,n,o;if(r.remove("accounts-selection"),e=i.getActiveData(),t.initialised=!0,t.dataLoaded=!1,t.spinner=!0,h=s.uniqueVals("CompanyCode",e),c=s.uniqueVals("Currency",e),h.length!==1){t.mixedCurrencyMsg=!0;t.list.items=[];t.list.totalItems=0;t.dataLoaded=!0;t.spinner=!1;return}t.accountCurrency=c[0];t.mixedCurrencyMsg=!1;n={};n.$skip=0;n.$top=25;n.date=moment(t.searchDate).format();n.timezone=t.searchDateTimeZone;o=f.get(n);o.$promise.then(function(n){t.list.items=n.Items.slice(0,3);t.list.totalItems=n.Items.length;t.dataLoaded=!0;t.spinner=!1;var i=v($.map(n.Items,function(n){return n.PreviousBalance}));a({data:l(n.Items),valueAxes:[{maximum:i,minimum:i*-1}]});t.refreshLayout()},function(n){n.data&&(t.list.items=[],t.list.totalItems=0,t.dataLoaded=!0,t.spinner=!1,r.add({id:"accounts-selection",type:"error",message:n.data.Message}))});u.register(o)};t.getRunningTotal=function(n){var r,i,u;if(!t.list.items)return 0;for(r=0,i=0;i<t.list.items.length;i++)u=t.list.items[i],r+=u[n];return r};t.getSelectedCurrency=function(){if(!t.list.items||!t.list.items.length>0)return 0;var n=i.listSelected();return n?first(n).Currency:null};t.getCurrentBalance=function(){return t.list.items?!t.list.items.length>0?0:t.list.items[0].PreviousBalance:0};t.tableHeaders=[{displayName:"Month",className:"col-left"},{displayName:"Debit",className:"tf-right"},{displayName:"Credit",className:"tf-right"},{displayName:"Balance",className:"tf-right"}];t.init=function(){i.isReady()?(n.log("accountBalancePanel > Init"),debounce(t.getData(),250)):(n.log("accountBalancePanel > Deferring til account data is ready"),t.$on("accounts.dataReady",t.init))}}angular.module("app.accountBalance").controller("AccountBalancePanelController",n);n.$inject=["$log","$scope","accountsService","notificationService","resourceCancellingService","accountBalance","authService","exportService","utilService"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){return[{state:"app.orgs",config:{url:"/admin/organisations?page?searchTerm",templateUrl:"organisations.html",controller:"userOrganisationsController",controllerAs:"userOrganisations",access:"Customer/Account",reloadOnSearch:!0}},{state:"app.org",config:{abstract:!0,url:"/admin/organisations/{orgId}",template:"<div ui-view><\/div>",access:"Customer/Account"}},{state:"app.org.contacts",config:{abstract:!0,url:"/contacts",template:"<div ui-view><\/div>",access:"Customer/Account/Contact"}},{state:"app.org.contacts.list",config:{url:"",pageTitle:"Contacts",templateUrl:"view-org-contacts.html",controller:"orgContactsController",controllerAs:"orgContacts",access:"Customer/Account/Contact"}},{state:"app.org.contacts.newContact",config:{url:"/new",pageTitle:"New contact",templateUrl:"create-org-contact.html",controller:"createOrgContactController",controllerAs:"createOrgContact",access:"Customer/Account/Contact"}},{state:"app.org.contacts.contactDetails",config:{url:"/:contactId",pageTitle:"Contact details",templateUrl:"org-contact-details.html",controller:"orgContactDetailsController",controllerAs:"orgContactDetails",access:"Customer/Account/Contact"}},{state:"app.org.contacts.editContactDetails",config:{url:"/:contactId/edit?validate;concurrent",params:{validate:null,concurrent:null},pageTitle:"Edit contact details",templateUrl:"edit-org-contact-details.html",controller:"editOrgContactDetailsController",controllerAs:"editOrgContactDetails",access:"Customer/Account/Contact"}},{state:"app.org.contacts.contactPreferences",config:{url:"/:contactId/:accountId",pageTitle:"Account preferences",templateUrl:"org-contact-account-preferences.html",controller:"orgContactAccountPreferencesController",controllerAs:"orgContactAccountPreferences",access:"Customer/Account/Contact"}},{state:"app.org.accounts",config:{url:"",pageTitle:"Accounts",templateUrl:"accounts.html",controller:"accountsController",controllerAs:"orgAccounts",access:"Customer/Account"}},{state:"app.org.account",config:{abstract:!0,url:"/{accountId}",templateUrl:"account-view.html",controller:"accountViewController",controllerAs:"accountView",access:"Customer/Account"}},{state:"app.org.account.details",config:{url:"",pageTitle:"Account details",templateUrl:"account-details.html",controller:"accountDetailsController",controllerAs:"orgAccountDetails",access:"Customer/Account"}},{state:"app.org.account.history",config:{url:"/history",pageTitle:"Account change history",templateUrl:"account-change-history.html",controller:"accountChangeHistoryController",controllerAs:"orgAccountHistory",access:"Customer/Account/ChangeHistory"}},{state:"app.org.account.history.details",config:{url:"/:changeId",pageTitle:"Change history details",controller:"accountChangeHistoryDetailsController",controllerAs:"details",access:"Customer/Account/ChangeHistory"}},{state:"app.org.account.notifications",config:{url:"/notifications",pageTitle:"Account notifications",templateUrl:"account-notifications.html",controller:"orgAccountNotificationsController",controllerAs:"accountNotifications",access:"Customer/Account/Correspondence"}},{state:"app.org.account.editNotification",config:{url:"/notifications/{index}",pageTitle:"Edit account notification",templateUrl:"edit-account-notification.html",controller:"editOrgAccountNotificationController",controllerAs:"editNotification",access:"Customer/Account/Correspondence"}},{state:"app.org.account.editDetails",config:{url:"/edit",pageTitle:"Edit business details",templateUrl:"edit-account-details.html",controller:"editAccountDetailsController",controllerAs:"editAccountDetails",access:"Customer/Account"}},{state:"app.org.account.contacts",config:{url:"/contacts",pageTitle:"Contacts",templateUrl:"account-contacts.html",controller:"accountContactsController",controllerAs:"accountContacts",access:"Customer/Account"}},{state:"app.org.account.newContact",config:{url:"/contacts/new",pageTitle:"New contact",templateUrl:"create-account-contact.html",controller:"createAccountContactController",controllerAs:"createAccountContact",access:"Customer/Account/Contact"}},{state:"app.org.account.contactDetails",config:{url:"/contacts/:contactId",pageTitle:"Contact details",templateUrl:"account-contact-details.html",controller:"accountContactDetailsController",controllerAs:"contactDetails",access:"Customer/Account/Contact"}},{state:"app.org.account.editContactDetails",config:{url:"/contacts/:contactId/edit?validate;concurrent",params:{validate:null,concurrent:null},pageTitle:"Edit contact details",templateUrl:"edit-account-contact-details.html",controller:"editAccountContactDetailsController",controllerAs:"editAccountContactDetails",access:"Customer/Account/Contact"}}]}n.module("app.accountManagement").run(t);t.$inject=["routerHelper"]}(angular),function(n){"use strict";function t(n,t){function r(){return i.isInternalUser}var i={isInternalUser:undefined};return n.$watch(function(){return n.session.user},function(n){n&&(i.isInternalUser=t.isContactsInternalUser())},!0),{getIsInternalUser:r}}n.module("app.accountManagement").factory("accountManagementService",t);t.$inject=["$rootScope","authService"]}(angular),function(n){"use strict";function t(n,t){var i=this;i.breadcrumbDetails=n.getBreadcrumbDetails();t.$on("$destroy",function(){n.clearBreadcrumbDetails()})}n.module("app.accountManagement").controller("accountViewController",t);t.$inject=["breadcrumbs","$scope"]}(angular),function(n){"use strict";function t(n,t,r,u,f,e,o,s){function p(n){var t=e.open({templateUrl:"duplicate-contact-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactDetails:n},controller:i,controllerAs:"showDuplicateContactError"});o.$on("$destroy",function(){t.close()})}var h=this,c=t.orgId,l=u.getOrganisations(),a={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"}]},v={history:[{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"}]},y={history:[{name:"Accounts",sref:"app.orgs"},{name:"Contacts",sref:"app.org.account.contacts"}]};h.accounts=[t.accountId];h.isUpdating=!1;h.errorUpdatingDetails=!1;h.contactDetails={orgId:c,Contact:{OrganisationId:c,FirstName:"",LastName:"",JobTitle:"",PhoneNumbers:[],MobileNumbers:[],EmailAddresses:[],ConnectUsername:""},Accounts:[]};h.createContact=function(){h.form.$invalid?(h.form.contactDetails.$setSubmitted(),h.form.contactDetails.jobTitle.$setSubmitted()):(h.isUpdating=!0,h.errorUpdatingDetails=!1,r.createNewContact(h.contactDetails).then(function(n){f.go("^.contactDetails",{contactId:n.ContactId})},function(n){n&&n.status===409?p(n.data):n&&n.data&&n.data.WasFailureHandled===!0?f.go("app.org.account.contacts"):h.errorUpdatingDetails=!0}).finally(function(){h.isUpdating=!1}))};o.$watch(function(){return s.getIsInternalUser()},function(t){t===!1?n.updateBreadcrumb(l.length>1?a:v):t===!0&&n.updateBreadcrumb(y)})}function i(n,t){var i=this;i.contactDetails=n;i.closeModal=function(){return t.close()}}n.module("app.accountManagement").controller("createAccountContactController",t);t.$inject=["breadcrumbs","$stateParams","amContactsService","amOrganisationsService","$state","$modal","$scope","accountManagementService"];i.$inject=["contactDetails","$modalInstance"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f){var e=this,o=r.getOrganisations(),s={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"}]},h={history:[{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"}]},c={history:[{name:"Accounts",sref:"app.orgs"},{name:"Contacts",sref:"app.org.account.contacts"}]};e.orgId=t.orgId;e.accountId=t.accountId;e.contactId=t.contactId;f.loadAccountDetails(e.accountId).then(function(n){e.accountDetails=n},function(){e.accountDetails=undefined});i.$watch(function(){return u.getIsInternalUser()},function(t){t===!1?n.updateBreadcrumb(o.length>1?s:h):t===!0&&n.updateBreadcrumb(c)})}n.module("app.accountManagement").controller("accountContactDetailsController",t);t.$inject=["breadcrumbs","$stateParams","$scope","amOrganisationsService","accountManagementService","amAccountsService"]}(angular),function(n){"use strict";function t(n,t,r,u,f,e,o,s){function w(){o.$watch(function(){return h.form.contactDetails},function(n){n!=null&&(h.form.contactDetails.$setSubmitted(),h.form.contactDetails.jobTitle.$setSubmitted())})}var h=this,c=n.contactId,l=n.orgId,a=f.getOrganisations(),v={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"},{name:"Contact details",sref:'app.org.account.contactDetails({contactId: "'+c+'"})'}]},y={history:[{name:"Accounts",sref:"app.org.accounts"},{name:"Contacts",sref:"app.org.account.contacts"},{name:"Contact details",sref:'app.org.account.contactDetails({contactId: "'+c+'"})'}]},p={history:[{name:"Accounts",sref:"app.orgs"},{name:"Contacts",sref:"app.org.account.contacts"},{name:"Contact details",sref:'app.org.account.contactDetails({contactId: "'+c+'"})'}]};h.contactId=c;h.loadingMessage="Loading details";h.isLoading=!0;h.errorUpdatingDetails=!1;h.hasError=!1;h.form=null;h.saveButtonText=n.concurrent==="true"?"These details are correct":"Save changes";h.showOutOfDateMessage=n.concurrent==="true"?!0:!1;u.loadContactDetails(l,c).then(function(t){h.contactDetails=t;n.validate==="true"&&w()},function(){h.hasError=!0}).then(function(){h.isLoading=!1});h.saveChanges=function(){function n(n){var t=e.open({templateUrl:"edit-account-contact-duplicate-error-message.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactDetails:n},controller:i,controllerAs:"editAccountContactDuplicateError"});o.$on("$destroy",function(){t.close()})}h.form.$invalid?(h.form.contactDetails.$setSubmitted(),h.form.contactDetails.jobTitle.$setSubmitted()):(h.errorUpdatingDetails=!1,h.updatingDetails=!0,h.isLoading=!0,h.loadingMessage="Saving changes",u.saveContactDetails(l,c,h.contactDetails).then(function(){t.go("app.org.account.contactDetails",{contactId:c})},function(i){i&&i.status===409?n(i.data):i&&i.data&&i.data.WasFailureHandled===!0?t.go("app.org.account.contactDetails",{contactId:c}):h.errorUpdatingDetails=!0}).then(function(){h.updatingDetails=!1;h.isLoading=!1}))};o.$watch(function(){return s.getIsInternalUser()},function(n){n===!1?r.updateBreadcrumb(a.length>1?v:y):n===!0&&r.updateBreadcrumb(p)})}function i(n,t){var i=this;i.contactDetails=n;i.closeModal=function(){return t.close()}}n.module("app.accountManagement").controller("editAccountContactDetailsController",t);t.$inject=["$stateParams","$state","breadcrumbs","amContactsService","amOrganisationsService","$modal","$scope","accountManagementService"];i.$inject=["contactDetails","$modalInstance"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f){var e=this,s=n.orgId,o=n.accountId,h=f.getOrganisations(),c={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"}]},l={history:[{name:"Accounts",sref:"app.org.accounts"}]},a={history:[{name:"Accounts",sref:"app.orgs"}]};e.accountId=o;e.orgId=s;u.loadAccountDetails(o).then(function(n){e.accountDetails=n},function(){e.accountDetails=undefined}).finally(function(){i.$emit("achievements.taskComplete",{taskId:1,taskName:"contacts"})});i.$watch(function(){return r.getIsInternalUser()},function(n){n===!1?t.updateBreadcrumb(h.length>1?c:l):n===!0&&t.updateBreadcrumb(a)})}n.module("app.accountManagement").controller("accountContactsController",t);t.$inject=["$stateParams","breadcrumbs","$scope","accountManagementService","amAccountsService","amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t,i,r,u){var f=this,e=u.getOrganisations(),o={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"},{name:"Details",sref:"app.org.account.details"}]},s={history:[{name:"Accounts",sref:"app.org.accounts"},{name:"Details",sref:"app.org.account.details"}]},h={history:[{name:"Accounts",sref:"app.orgs"},{name:"Details",sref:"app.org.account.details"}]},c=n.accountId;f.accountId=c;i.$watch(function(){return r.getIsInternalUser()},function(n){n===!1?t.updateBreadcrumb(e.length>1?o:s):n===!0&&t.updateBreadcrumb(h)})}n.module("app.accountManagement").controller("editAccountDetailsController",t);t.$inject=["$stateParams","breadcrumbs","$scope","accountManagementService","amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f){function a(n){var t=n||{};return{address:{houseNo:t.HouseNo||"",street:t.Street||"",city:t.City||"",state:t.State||"",postcode:t.Postcode||"",country:t.Country||""},poBox:{no:t.POBoxNo||"",city:t.POBoxCity||"",state:t.POBoxState||"",postcode:t.POBoxPostcode||"",country:t.POBoxCountry||""},emailAddress:t.Email||"",phone:t.Phone||"",fax:t.Fax||""}}function v(n){var t=n||{};return{sbu:t.SbuCode||"",accountNo:t.AccountId||"",accountManager:{name:t.ClerkName||"",phone:t.ClerkPhone||""}}}var e=this,o=i.getOrganisations(),s=n.accountId,h={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"}]},c={history:[{name:"Accounts",sref:"app.org.accounts"}]},l={history:[{name:"Accounts",sref:"app.orgs"}]};t.loadAccountDetails(s).then(function(n){e.businessDetails=a(n);e.csrAccountDetails=v(n);e.accountDetails=n},function(){e.businessDetails=null;e.csrAccountDetails=null});f.$watch(function(){return u.getIsInternalUser()},function(n){n===!1?r.updateBreadcrumb(o.length>1?h:c):n===!0&&r.updateBreadcrumb(l)})}n.module("app.accountManagement").controller("accountDetailsController",t);t.$inject=["$stateParams","amAccountsService","amOrganisationsService","breadcrumbs","accountManagementService","$scope"]}(angular),function(n){"use strict";function t(n,t){var r=n.open({templateUrl:"account-change-history-details.html",animation:!1,size:"lg",backdrop:"static",controller:i,controllerAs:"history",bindToController:!0});t.$on("$destroy",function(){r.close()})}function i(n,t,i,r){var u=this,f=r.changeId;u.isLoading=!0;u.hasError=!1;u.details=undefined;i.loadAccountChangeHistoryDetails(f).then(function(n){u.details=n||null},function(){u.hasError=!0}).finally(function(){u.isLoading=!1});u.close=function(){return n.close()};n.result.finally(function(){t.go("app.org.account.history")})}n.module("app.accountManagement").controller("accountChangeHistoryDetailsController",t);t.$inject=["$modal","$scope"];i.$inject=["$modalInstance","$state","amAccountsService","$stateParams"]}(angular),function(){"use strict";function n(n,t,i,r,u,f){var e=this,s=f.getOrganisations(),h={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"}]},c={history:[{name:"Accounts",sref:"app.org.accounts"}]},l={history:[{name:"Accounts",sref:"app.orgs"}]},o=n.accountId;e.accountId=o;u.loadAccountDetails(o).then(function(n){e.accountDetails=n},function(){e.accountDetails=undefined});i.$watch(function(){return r.getIsInternalUser()},function(n){n===!1?t.updateBreadcrumb(s.length>1?h:c):n===!0&&t.updateBreadcrumb(l)})}angular.module("app.accountManagement").controller("accountChangeHistoryController",n);n.$inject=["$stateParams","breadcrumbs","$scope","accountManagementService","amAccountsService","amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f,e){var o=this,s=n.accountId,h=i.getOrganisations(),c=n.index,l={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"},{name:"Notifications",sref:"app.org.account.notifications"}]},a={history:[{name:"Accounts",sref:"app.org.accounts"},{name:"Notifications",sref:"app.org.account.notifications"}]},v={history:[{name:"Accounts",sref:"app.orgs"},{name:"Notifications",sref:"app.org.account.notifications"}]};o.isLoading=!0;o.hasError=!1;o.updatingDetails=!1;o.errorUpdatingDetails=!1;t.loadAccountNotifications(s).then(function(n){o.details=n[c]||null;o.details!==null?o.details.accountId=o.details.AccountId:o.hasError=!0},function(){o.hasError=!0}).then(function(){o.isLoading=!1});o.saveChanges=function(){o.form.$invalid?o.form.notificationDetails.$setSubmitted():(o.updatingDetails=!0,o.errorUpdatingDetails=!1,t.updateAccountNotificationDetails(o.details).then(function(){r.go("app.org.account.notifications")},function(){o.updatingDetails=!1;o.errorUpdatingDetails=!0}))};f.$watch(function(){return e.getIsInternalUser()},function(n){n===!1?u.updateBreadcrumb(h.length>1?l:a):n===!0&&u.updateBreadcrumb(v)})}n.module("app.accountManagement").controller("editOrgAccountNotificationController",t);t.$inject=["$stateParams","amAccountsService","amOrganisationsService","$state","breadcrumbs","$scope","accountManagementService"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f){var e=this,s=f.getOrganisations(),h={history:[{name:"Organisations",sref:"app.orgs"},{name:"Accounts",sref:"app.org.accounts"}]},c={history:[{name:"Accounts",sref:"app.org.accounts"}]},l={history:[{name:"Accounts",sref:"app.orgs"}]},o=n.accountId;e.accountId=o;u.loadAccountDetails(o).then(function(n){e.accountDetails=n},function(){e.accountDetails=undefined});i.$watch(function(){return r.getIsInternalUser()},function(n){n===!1?t.updateBreadcrumb(s.length>1?h:c):n===!0&&t.updateBreadcrumb(l)})}n.module("app.accountManagement").controller("orgAccountNotificationsController",t);t.$inject=["$stateParams","breadcrumbs","$scope","accountManagementService","amAccountsService","amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t,i,r,u){var f=this,e=n.orgId;f.orgId=e;f.isLoading=!0;f.hasError=!1;f.organisations=i.getOrganisations();f.breadcrumbDetails={history:[{name:"Organisations",sref:"app.orgs"}]};f.viewOptions=[{title:"Contacts",state:"app.org.contacts.list",stateParams:{orgId:e}},{title:"Accounts",state:"app.org.accounts",stateParams:{orgId:e}}];t.loadAccounts(f.orgId).then(function(n){f.accountsList=n},function(){f.hasError=!0}).finally(function(){f.isLoading=!1});r.$watch(function(){return u.getIsInternalUser()},function(n){f.isInternalUser=n===!0?!0:n===!1?!1:undefined})}n.module("app.accountManagement").controller("accountsController",t);t.$inject=["$stateParams","amAccountsService","amOrganisationsService","$scope","accountManagementService"]}(angular),function(n){"use strict";function t(t,r,u,f,e,o,s,h){function p(n){var t=o.open({templateUrl:"duplicate-org-contact-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactDetails:n},controller:i,controllerAs:"showDuplicateOrgContactError"});s.$on("$destroy",function(){t.close()})}var c=this,l=t.orgId,a=f.getOrganisations(),v={history:[{name:"Organisations",sref:"app.orgs"},{name:"Contacts",sref:"app.org.contacts.list"}]},y={history:[{name:"Contacts",sref:"app.org.contacts.list"}]};c.isUpdating=!1;c.isLoading=!0;c.hasError=!1;c.errorUpdatingDetails=!1;c.loadingMessage="Loading form";c.accounts=[];c.contactDetails={orgId:l,Contact:{OrganisationId:l,FirstName:"",LastName:"",JobTitle:"",PhoneNumbers:[],MobileNumbers:[],EmailAddresses:[],ConnectUsername:""},Accounts:[]};u.loadAccounts(l).then(function(t){n.forEach(t,function(n){c.accounts.push(n.AccountId)})},function(){c.hasError=!0}).finally(function(){c.isLoading=!1});c.createContact=function(){c.form.$invalid?(c.form.contactDetails.$setSubmitted(),c.form.contactDetails.jobTitle.$setSubmitted()):(c.isUpdating=!0,c.loadingMessage="Adding new contact",c.errorUpdatingDetails=!1,r.createNewContact(c.contactDetails).then(function(n){e.go("^.contactDetails",{contactId:n.ContactId})},function(n){n.status===409?p(n.data):n&&n.data&&n.data.WasFailureHandled===!0?e.go("app.org.contacts.list"):c.errorUpdatingDetails=!0}).finally(function(){c.isUpdating=!1}))};s.$watch(function(){return h.getIsInternalUser()},function(n){n===!0?c.isInternalUser=!0:n===!1?(c.isInternalUser=!1,c.breadcrumbDetails=a.length>1?v:y):c.isInternalUser=undefined})}function i(n,t){var i=this;i.contactDetails=n;i.closeModal=function(){return t.close()}}n.module("app.accountManagement").controller("createOrgContactController",t);t.$inject=["$stateParams","amContactsService","amAccountsService","amOrganisationsService","$state","$modal","$scope","accountManagementService"];i.$inject=["contactDetails","$modalInstance"]}(angular),function(n){"use strict";function t(n,t,i,r,u){var f=this,e=u.getOrganisations(),o={history:[{name:"Organisations",sref:"app.orgs"},{name:"Contacts",sref:"app.org.contacts.list"}]},s={history:[{name:"Contacts",sref:"app.org.contacts.list"}]};f.orgId=n.orgId;f.contactId=n.contactId;f.loadContactsList=function(){return r.go("app.org.contacts.list")};t.$watch(function(){return i.getIsInternalUser()},function(n){n===!0?f.isInternalUser=!0:n===!1?(f.isInternalUser=!1,f.breadcrumbDetails=e.length>1?o:s):f.isInternalUser=undefined})}n.module("app.accountManagement").controller("orgContactDetailsController",t);t.$inject=["$stateParams","$scope","accountManagementService","$state","amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t,r,u,f,e,o){function y(){f.$watch(function(){return s.form},function(n){n!=null&&(s.form.contactDetails.$setSubmitted(),s.form.contactDetails.jobTitle.$setSubmitted())})}var s=this,h=n.contactId,c=n.orgId,l=o.getOrganisations(),a={history:[{name:"Organisations",sref:"app.orgs"},{name:"Contacts",sref:"app.org.contacts.list"},{name:"Contact details",sref:'^.contactDetails({contactId: "'+h+'"})'}]},v={history:[{name:"Contacts",sref:"app.org.contacts.list"},{name:"Contact details",sref:'^.contactDetails({contactId: "'+h+'"})'}]};s.contactId=h;s.loadingMessage="Loading details";s.isLoading=!0;s.errorUpdatingDetails=!1;s.hasError=!1;s.form=null;s.saveButtonText=n.concurrent==="true"?"These details are correct":"Save changes";s.showOutOfDateMessage=n.concurrent==="true"?!0:!1;r.loadContactDetails(c,h).then(function(t){s.contactDetails=t;n.validate==="true"&&y()},function(){s.hasError=!0}).then(function(){s.isLoading=!1});s.saveChanges=function(){function n(n){var t=u.open({templateUrl:"edit-org-contact-duplicate-error-message.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactDetails:n},controller:i,controllerAs:"editOrgContactDuplicateError"});f.$on("$destroy",function(){t.close()})}s.form.$invalid?(s.form.contactDetails.$setSubmitted(),s.form.contactDetails.jobTitle.$setSubmitted()):(s.errorUpdatingDetails=!1,s.updatingDetails=!0,s.isLoading=!0,s.loadingMessage="Saving changes",r.saveContactDetails(c,h,s.contactDetails).then(function(){t.go("^.contactDetails",{contactId:h})},function(i){i&&i.status===409?n(i.data):i&&i.data&&i.data.WasFailureHandled===!0?t.go("^.contactDetails",{contactId:h}):s.errorUpdatingDetails=!0}).then(function(){s.updatingDetails=!1;s.isLoading=!1}))};f.$watch(function(){return e.getIsInternalUser()},function(n){n===!0?s.isInternalUser=!0:n===!1?(s.isInternalUser=!1,s.breadcrumbDetails=l.length>1?a:v):s.isInternalUser=undefined})}function i(n,t){var i=this;i.contactDetails=n;i.closeModal=function(){return t.close()}}n.module("app.accountManagement").controller("editOrgContactDetailsController",t);t.$inject=["$stateParams","$state","amContactsService","$modal","$scope","accountManagementService","amOrganisationsService"];i.$inject=["contactDetails","$modalInstance"]}(angular),function(n){"use strict";function t(n,t,i,r,u){var f=this,o=r.getOrganisations(),e=n.contactId,s={history:[{name:"Organisations",sref:"app.orgs"},{name:"Contacts",sref:"app.org.contacts.list"},{name:"Contact details",sref:"app.org.contacts.contactDetails({contactId: "+e+"})"}]},h={history:[{name:"Contacts",sref:"app.org.contacts.list"},{name:"Contact details",sref:"app.org.contacts.contactDetails({contactId: "+e+"})"}]};f.orgId=n.orgId;f.accountId=n.accountId;f.contactId=e;u.loadAccountDetails(f.accountId).then(function(n){f.accountDetails=n},function(){f.accountDetails=undefined});t.$watch(function(){return i.getIsInternalUser()},function(n){n===!0?f.isInternalUser=!0:n===!1?(f.isInternalUser=!1,f.breadcrumbDetails=o.length>1?s:h):f.isInternalUser=undefined})}n.module("app.accountManagement").controller("orgContactAccountPreferencesController",t);t.$inject=["$stateParams","$scope","accountManagementService","amOrganisationsService","amAccountsService"]}(angular),function(n){function t(n,t,i,r){var u=this,f=n.orgId;u.organisations=r.getOrganisations();u.orgId=f;u.breadcrumbDetails={history:[{name:"Organisations",sref:"app.orgs"}]};u.viewOptions=[{title:"Contacts",state:"app.org.contacts.list",stateParams:{orgId:f}},{title:"Accounts",state:"app.org.accounts",stateParams:{orgId:f}}];t.$watch(function(){return i.getIsInternalUser()},function(n){u.isInternalUser=n===!0?!0:n===!1?!1:undefined});t.$emit("achievements.taskComplete",{taskId:1,taskName:"contacts"})}n.module("app.accountManagement").controller("orgContactsController",t);t.$inject=["$stateParams","$scope","accountManagementService","amOrganisationsService"]}(angular),function(n,t){"use strict";function i(n,i,r,u,f,e,o){function h(){var n=f.page;s.searchTerm=f.searchTerm;s.isLoading=!0;s.hasError=!1;s.accountFilters={orderBy:"Name1 asc",searchTerm:s.searchTerm,page:n&&n>0?n-1:0,pageSize:25};i.loadAllAccounts(s.accountFilters).then(function(t){s.accountsList=t.Items.map(function(n){var t=n.Account;return t.OrgId=n.Organisation.Id,n.Account});s.paginationInfo={currentPage:n,itemsPerPage:s.accountFilters.pageSize,totalItems:t.Count};s.hasPagination=s.paginationInfo.totalItems>s.accountFilters.pageSize;s.changePage=function(){var n=s.paginationInfo.currentPage;e.go(".",{page:n})};s.search=function(){e.go(".",{page:1,searchTerm:s.searchTerm})}},function(){s.hasError=!0}).finally(function(){s.isLoading=!1;t(0)})}var s=this;r.$watch(function(){return u.getIsInternalUser()},function(t){t===!1?(n.loadOrganisations(),o.setPageTitle("Organisations")):t===!0&&(h(),o.setPageTitle("Accounts"));s.isInternalUser=t})}n.module("app.accountManagement").controller("userOrganisationsController",i);i.$inject=["amOrganisationsService","amAccountsService","$scope","accountManagementService","$stateParams","$state","$rootScope"]}(angular,scrollToY),function(){"use strict";function n(n){var t={};return t=n("api/accounts/:accountId"),t.info=n("api/accounts/:accountId/info"),t.edit=n("api/accounts/:accountId/info",{accountId:"@accountId"},{update:{method:"PUT"}}),t.contacts=n("api/accounts/:accountId/contacts/:contactId",{accountId:"@accountId",contactId:"@contactId"},{update:{method:"PUT"}}),t.correspondence=n("api/accounts/:accountId/correspondences",{accountId:"@accountId"}),t.changeset=n("api/accounts/:accountId/changehistory",{accountId:"@accountId"}),t.changeset.details=n("api/accounts/changehistory/:changesetId",{changesetId:"@changesetId"}),t}angular.module("app.accounts").factory("account",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,i,r,u,f){i.configureStates(t());f.isAuthenticated()?u.get(null,function(n){r.initActive(n.UserPreference.AccountSelection||[])}):r.initActive([])}function t(){return[{state:"app.accounts",config:{url:"/accounts",pageTitle:"Accounts list",templateUrl:"accounts/details",access:"Customer/Account"}},{state:"app.accountInfo",config:{url:"/accounts/:accountId/info",pageTitle:"Accounts Update",templateUrl:"accounts/details/editinfo",access:"Customer/Account"}},{state:"app.account",config:{url:"/accounts/:accountId",pageTitle:"Account Detail",templateUrl:"accounts/details/info",access:"Customer/Account"}},{state:"app.accountContacts",config:{url:"/accounts/{accountId}/contacts",pageTitle:"Account Contacts",templateUrl:"accounts/details/contacts",access:"Customer/Account/Contact"}},{state:"app.accountContactDetails",config:{url:"/accounts/{accountId}/contacts/{contactId}",pageTitle:"Account Contact Details",templateUrl:"accounts/details/contactdetails",access:"Customer/Account/Contact"}},{state:"app.accountCorrespondence",config:{url:"/accounts/{accountId}/correspondence",pageTitle:"Account Contact Information",templateUrl:"accounts/details/correspondences",access:"Customer/Account/Correspondence"}},{state:"app.accountChangeHistory",config:{url:"/accounts/{accountId}/changehistory",pageTitle:"Change History",templateUrl:"accounts/details/changehistory",access:"Customer/Account/ChangeHistory"}},{state:"app.accountChangeHistoryDetails",config:{url:"/accounts/{accountId}/changehistory/{changesetId}",pageTitle:"Change History Details",templateUrl:"accounts/details/changehistorydetails",access:"Customer/Account/ChangeHistory"}}]}angular.module("app.accounts").run(n);n.$inject=["$log","routerHelper","accountsService","userPreferences","authService"]}(),function(){"use strict";function n(n,t,i,r,u){n.loaded=!1;n.account=null;n.list={};n.list.items=null;n.list.query={};n.list.itemsPerPage=10;n.list.totalItems=0;n.list.asc=!1;n.list.sortColumn="Date";n.list.currentPage=1;n.init=function(){r.info.get({accountId:t.accountId},function(i){var r=u.get([t.accountId]);n.account=$.extend({},r[0],i)});n.loadData()};n.loadData=function(){var i={},u="asc";n.list.asc||(u="desc");i.accountId=t.accountId;i.$filter="length(UserDescription) gt 0";i.$orderby=n.list.sortColumn+" "+u;i.$top=n.list.itemsPerPage;i.$skip=((n.list.currentPage||1)-1)*n.list.itemsPerPage;r.changeset.get(i,function(t){n.list.items=t.Items;n.list.totalItems=t.Count;n.loaded=!0})};n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.loadData()};n.tableHeaders=[{columnName:"Description",displayName:"Description"},{columnName:"Date",displayName:"Submitted On"},{columnName:"UserDescription",displayName:"Submitted By"}];n.init();n.$on("accounts.retrieved",n.init);n.historyDetails=function(n){i.go("app.accountChangeHistoryDetails",{accountId:t.accountId,changesetId:n})}}angular.module("app.accounts").controller("AccountsChangeHistoryController",n);n.$inject=["$scope","$stateParams","$state","account","accountsService"]}(),function(){"use strict";function n(n,t,i,r){n.data={};n.accountId=t.accountId;n.init=function(){i.changeset.details.get({changesetId:t.changesetId},function(t){n.data=t});i.info.get({accountId:t.accountId},function(i){var u=r.get([t.accountId]);n.account=$.extend({},u[0],i)})};n.init();n.$on("accounts.retrieved",n.init)}angular.module("app.accounts").controller("AccountsChangeHistoryDetailsController",n);n.$inject=["$scope","$stateParams","account","accountsService"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.list={};n.list.items=null;n.list.query={};n.list.itemsPerPage=10;n.list.totalItems=0;n.list.asc=!0;n.list.sortColumn="FirstName";n.init=function(){var t={};t.accountId=r.accountId;t.$orderby=n.list.sortColumn+" "+n.list.asc?"asc":"desc";t.$top=10;t.$skip=0;u.contacts.get(t,function(t){n.list.items=t.Items;n.list.totalItems=t.Count})};n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.loadData()};n.tableHeaders=[{columnName:"",displayName:""},{columnName:"",displayName:""},{columnName:"Title",displayName:"Title"},{columnName:"FirstName",displayName:"First Name"},{columnName:"Last Name",displayName:"LastName"},{columnName:"JobTitle",displayName:"Job Title"},{columnName:"Mobile",displayName:"Mobile"},{columnName:"Phone",displayName:"Phone"},{columnName:"Email",displayName:"Email"}];n.deleteContact=function(t,i){u.contacts.remove({accountId:r.accountId,contactId:t},function(){n.list.items.splice(i,1);f.add({id:"account-delete-status",type:"success",message:"Contact deleted successfully",expire:!0})})};n.setPrimaryContact=function(t){i.post("/api/accounts/"+r.accountId+"/contacts/"+t+"/setprimary",{accountId:r.accountId,contactId:t}).success(function(){angular.forEach(n.list.items,function(n){n.IsDefault=parseInt(n.ContactId)==parseInt(t)});n.$emit("accountContacts.primaryChanged",t)})};n.contactDetails=function(n){t.go("app.accountContactDetails",{accountId:r.accountId,contactId:n})}}angular.module("app.accounts").controller("AccountsContactsController",n);n.$inject=["$scope","$state","$http","$stateParams","account","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.isAdding=t.contactId=="0";n.contact={};n.account=null;n.init=function(){r.contacts.get({accountId:t.accountId,contactId:t.contactId},function(t){n.contact=t});r.info.get({accountId:t.accountId},function(i){var r=u.get([t.accountId]);n.account=$.extend({},r[0],i)})};n.save=function(u){n.form.$valid&&(u.accountId=t.accountId,u.contactId=t.contactId,r.contacts.save(u,function(){i.go("app.account",{accountId:t.accountId});var r=[u.FirstName,u.LastName].join(" "),e=n.isAdding?" added":" updated";f.add({id:"contact-update",type:"success",message:r+e+" successfully",expire:!0})},function(n){f.add({id:"contact-update",type:"error",message:n.data,expire:!0})}))};n.init();n.$on("accounts.retrieved",n.init);n.$on("accountContacts.primaryChanged",function(i,r){n.contact.IsDefault=r==t.contactId})}angular.module("app.accounts").controller("AccountsContactsEditController",n);n.$inject=["$scope","$stateParams","$state","account","accountsService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u){n.cor=null;n.account=null;n.outputInEditMode=null;n.originalEmail=null;n.init=function(){i.info.get({accountId:t.accountId},function(i){var u=r.get([t.accountId]);n.account=$.extend({},u[0],i)});i.correspondence.query({accountId:t.accountId},function(t){n.cor=t})};n.init();n.$on("accounts.retrieved",n.init);n.isInEditMode=function(t){return n.outputInEditMode===t.OutputCode};n.edit=function(t){n.originalEmail=t.Email;n.outputInEditMode=t.OutputCode;u.removeAll()};n.cancel=function(t){t.Email=n.originalEmail;n.originalEmail=null;n.outputInEditMode=null;u.removeAll()};n.save=function(r){if(r.Email.trim()==""||r.Email.indexOf("@")==-1||r.Email.indexOf(".")==-1)return u.add({id:"account-update-status",type:"error",message:"This email address can't be deleted as it is your main correspondence email for the listed output against this account. Please enter a valid email address."}),!1;r.accountId=t.accountId;i.correspondence.save(r,function(){n.originalEmail=null;n.outputInEditMode=null;u.removeAll();u.add({id:"account-update-status",type:"success",message:"Correspondence preferences updated successfully",expire:!0})})}}angular.module("app.accounts").controller("AccountsCorrespondenceController",n);n.$inject=["$scope","$stateParams","account","accountsService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.account=null;r.edit.get({accountId:i.accountId},function(t){var r=u.get([i.accountId]);n.account=$.extend({},r[0],t)});n.submitAccountInfoForm=function(u){n.form.$valid&&(u.accountId=i.accountId,r.edit.update(u,function(){t.go("app.account",{accountId:i.accountId});f.add({id:"account-update-status",type:"success",message:"Account details updated successfully",expire:!0})}))}}angular.module("app.accounts").controller("AccountsEditController",n);n.$inject=["$scope","$state","$stateParams","account","accountsService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u){n.account=null;n.init=function(){u.setState(!1);r.info.get({accountId:t.accountId},function(t){n.account=t;n.breadcrumbDetails={history:[{name:"Accounts",sref:"app.accounts"}],currentPage:t.DisplayName||t.Name1}})};n.edit=function(){i.go("app.accountInfo",{accountId:t.accountId})};n.init();n.$on("accounts.retrieved",n.init)}angular.module("app.accounts").controller("AccountsInfoController",n);n.$inject=["$scope","$stateParams","$state","account","accountsService"]}(),function(){"use strict";function n(n,t,i){i.setState(!1);n.quickSearch=function(t){(t.length>1||t.length==0)&&n.list.search(!0)};n.tableHeaders=[{columnName:"Name1",displayName:"Name"},{columnName:"SbuName",displayName:"Business"},{columnName:"AccountId",displayName:"Account No."},{columnName:"IsActive",displayName:"Status"}];n.listViewConfig={resourceName:"userAccounts",filters:[{field:"IsActive",operator:"=",value:"true"},{field:"Name1",operator:"like",value:n.searchText,condition:"or"},{field:"AccountId",operator:"like",value:n.searchText,condition:"or"}],order:[{field:"Name1",orderBy:"asc"}],count:!0,sortColumn:"Name1",asc:!0,itemName:"account"};n.$on("list.search",function(){n.list.config.filters.Name1.value=n.searchText;n.list.config.filters.AccountId.value=n.searchText});n.viewDetails=function(n){t.path("accounts/"+n)}}angular.module("app.accounts").controller("AccountsListController",n);n.$inject=["$scope","$location","accountsService"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.login",config:{url:"/login?returnUrl&expiredLink",pageTitle:"Login",templateUrl:"authentication/identity/login",bodyClass:"landing",params:{LoginId:null}}},{state:"app.first-login",config:{url:"/first-login?t&e",pageTitle:"Let's get started",templateUrl:"authentication/identity/firstlogin",bodyClass:"first-time-setup",controller:"AuthFirstTimeSetupController",controllerAs:"fts",params:{token:null}}},{state:"app.logout",config:{url:"/logout",pageTitle:"Logged out",templateUrl:"authentication/identity/logout",bodyClass:"landing"}},{state:"app.forgot-password",config:{url:"/forgot-password",pageTitle:"Forgot password",templateUrl:"authentication/identity/forgotpassword",bodyClass:"landing",controller:"AuthForgotPasswordController",controllerAs:"forgotPassword"}},{state:"app.forgot-username",config:{url:"/forgot-username",pageTitle:"Forgot username",templateUrl:"authentication/identity/forgotusername",bodyClass:"landing"}},{state:"app.forgot-username.success",config:{url:"/forgot-username/sent",pageTitle:"username reset successfully",templateUrl:"authentication/identity/forgotusername/sent",bodyClass:"landing"}},{state:"app.unauthorised",config:{url:"/unauthorised",pageTitle:"Unauthorised",templateUrl:"home/unauthorized"}},{state:"app.reset-password",config:{url:"/passwordreset/{token:any}",pageTitle:"Reset password",templateUrl:"authentication/identity/resetpassword",bodyClass:"landing",controller:"AuthResetPasswordController",controllerAs:"resetPassword"}},{state:"app.change-password",config:{url:"/user/changepassword",pageTitle:"Change password",templateUrl:"authuser/changepassword",controller:"AuthChangePasswordController",controllerAs:"changePassword",needsAuth:!0}},{state:"app.change-password-forced",config:{url:"/user/changepassword/secure",pageTitle:"Change password",templateUrl:"authuser/changepassword",controller:"AuthChangePasswordController",controllerAs:"changePassword",needsAuth:!0,bodyClass:"fullscreenview"}}]}angular.module("app.auth").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t,i,r,u,f){function s(){f.add({id:"form-status",type:"success",message:"Your password has been updated",expire:!0})}function h(){e.hasError=!1;e.errorMessage=""}var o="[Change password]",e=this;e.details={};e.errorMessage="";e.hasError=!1;e.submittingForm=!1;e.submittingFormMessage="Checking your details";e.session=u.session;e.submit=function(){if(h(),e.form.$valid)n.log(o,"Sending request"),e.submittingForm=!0,t.changePassword.save(e.details).$promise.then(function(){u.session.changePassword=!1;n.log(o,"Success!");i.checkSession(function(){u.session.firstTimeUser?(u.session.firstTimeUser=!1,r.go("app.dash").then(function(){s();u.$broadcast("auth.firstTimeUserCleared")})):r.go("app.dash").then(function(){s()})})},function(t){n.log(o,"Failed >",t.data);e.errorMessage=t.data.Message;e.hasError=!0;e.submittingForm=!1});else return};e.showLiveChat=function(){LC_API.open_chat_window()}}angular.module("app.auth").controller("AuthChangePasswordController",n);n.$inject=["$log","userData","authService","$state","$rootScope","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function l(){if(e.isAuthenticated()&&!h.isReady()){u.log(c,"Init > Found an authenticated instance of the app, deferring until accounts ready");t.$on("accounts.dataReady",l);return}if(!r.t||!r.e){u.log(c,"No params supplied, going to app.dash");i.go("app.dash");return}u.log(c,"Fetching user details");s.firstTimeLogin().start({Token:r.t,EmailType:r.e},function(n){u.log(c,"Got user details, processing the response > ",n);a(n)},function(n){u.log(c,"Unsuccessful starting first time login > ",n);i.go("app.login")})}function a(n){var r=n.Profile,f;r==null&&(r={FirstLoginTokenExpired:!0,LoginId:null});f=r.FirstLoginTokenExpired!==null;u.log(c,"Checking the session - tokenUser: ",r,", tokenExpired: ",f);e.checkSession(function(){if(f){if(r.LoginId===e.getUser().Profile.LoginId){u.log(c,"Expired token for currently logged in user. ");i.go("app.dash");return}u.log(c,"Expired token for different user, logging out. ");e.logout(function(){u.log(c,"Redirecting to login page. ");i.go("app.login",{LoginId:r.LoginId});return});return}u.log(c,"Valid token but a user is logged in, logging out. ");e.logout(function(){u.log(c,"Recursively calling processToken with session logged out. ");a(n);return});return},function(){if(f){u.log(c,"Expired token with no logged in user.");u.log(c,"Redirecting to login page. ");i.go("app.login",{LoginId:r.LoginId});return}u.log(c,"Token valid > ",n);t.profile=r;t.loading=!1;return})}var c="[AuthFirstTimeSetup]";t.loading=!0;t.token=null;t.FirstTimeSetupModel={};t.validationErrors=null;t.allowPasswordReset=!0;t.isDisplayLogin=!1;l();t.submit=function(){t.form.$valid&&(u.log(c,"Sending first time setup request"),t.loading=!0,s.firstTimeLogin().complete({Token:r.t,NewPassword:t.changePasswordModel.NewPassword,TermsAndConditionsAccepted:!0},function(){u.log(c,"Success, logging in and sending the user to the dash.");t.error=null;t.loginSubmitting=!0;var n={UserName:t.profile.LoginId,Password:t.changePasswordModel.NewPassword};e.login(n,function(){o.location.href="/"},function(n){t.loginSubmitting=!1;t.error=n},!0)},function(n){u.log(c,"Failure during call to first time setup.");f.add({id:"form-status",type:"error",message:n.data.Message});t.loading=!1;u.log(c,"Unsuccessful >",n)}))}}angular.module("app.auth").controller("AuthFirstTimeSetupController",n);n.$inject=["$rootScope","$scope","$state","$stateParams","$log","notificationService","authService","$window","authResource","accountsService"]}(),function(n){"use strict";function t(t,i){function e(){r.hasError=!1;r.errorMessage="";r.iconStatus=""}var r=this,u=n.element("body"),f="stop-scrolling";r.details={LoginId:"",Email:"",CaptchaToken:null};r.validationErrors=null;r.submitting=!1;r.hasError=!1;r.errorMessage="";r.iconStatus="";r.captchaLoading=!0;r.hasSuccess=null;r.validateReCaptcha=function(){if(e(),r.form.$valid)return i.getResponse()?(i.reload(),i.execute()):i.execute()};r.requestPasswordReset=function(n){return u.addClass(f),r.submitting=!0,r.details.CaptchaToken=n,u.removeClass(f),t.requestPasswordResetToken(r.details).then(function(){r.hasSuccess=!0},function(){r.hasError=!0;r.errorMessage="We were unable to send a password reset, please check your username and email address are correct and try again.";r.iconStatus="warning"}).finally(function(){u.removeClass(f);r.submitting=!1})};r.reCaptchaErrorHandler=function(){u.removeClass(f);r.submitting=!1;r.hasError=!0;r.errorMessage="There was a problem requesting a password reset, please try again.";r.iconStatus="warning"}}n.module("app.auth").controller("AuthForgotPasswordController",t);t.$inject=["authService","vcRecaptchaService"]}(angular,document),function(){"use strict";function n(n,t,i){n.forgotUsername={};n.validationErrors=null;n.submitting=!1;n.submitForgottenUsernameForm=function(r){n.form.$valid&&(n.submitting=!0,t.post("/api/auth/forgotusername",r).success(function(){n.submitting=!1;i.add({id:"form-status",type:"success",message:'Please <strong>check your email<\/strong>. If your details matched our records then your username has been sent. Should you not receive an email shortly, please contact us at <a href="mailto:help@csr.com.au">help@csr.com.au<\/a> or call us on 1800 909 439(AU) or 0800 277 266(NZ) for assistance.'})}).error(function(t){n.submitting=!1;i.add({type:"error",message:t.Message})}))}}angular.module("app.auth").controller("AuthForgotUsernameController",n);n.$inject=["$scope","$http","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){function c(){u.LoginId&&(t.loginDetails={UserName:u.LoginId});u.expiredLink&&(t.error="Your link has expired. Please login using the form below.");f.localStorage.getItem("LoginUserName")!==undefined&&(t.rememberMe=!0,t.loginDetails={UserName:f.localStorage.getItem("LoginUserName")});return}var s,h;t.loginDetails={};t.error=null;t.loginSubmitting=!1;t.passwordVisible=!1;t.capslockEnabled=!1;t.rememberMe=!1;t.failedAttempts=0;c();t.formSubmit=function(){t.form.$valid&&(t.error=null,t.loginSubmitting=!0,o(function(){$("#login-form .loading").focus();t.rememberMe===!0?(n.info("Remembering username > ",t.loginDetails.UserName),f.localStorage.setItem("LoginUserName",t.loginDetails.UserName)):f.localStorage.removeItem("LoginUserName");e.login(t.loginDetails,function(){t.loginDetails.Password="";t.form.$setPristine();u.returnUrl!=null?f.location.href="#"+u.returnUrl:r.go("app.dash")},function(n){t.loginDetails.Password="";t.form.$setPristine();t.failedAttempts++;t.loginSubmitting=!1;t.error=n;$("#login-form .alert").focus()})}))};t.showPassword=function(){t.passwordVisible===!0?angular.element("#password").attr("type","password"):angular.element("#password").attr("type","text");t.passwordVisible=!t.passwordVisible};s=/\s/g;t.$watch("loginDetails.UserName",function(n,i){n!=i&&s.test(n)&&(t.loginDetails.UserName=n.replace(s,""))});h=document.querySelector('[name="username"]');h.addEventListener("keypress",function(n){var t=n.keyCode;t===32&&n.preventDefault()});t.checkCase=function(n){if(typeof n.originalEvent.getModifierState=="function"){var i=n.originalEvent.getModifierState("CapsLock");t.capslockEnabled=i}}}angular.module("component.auth").controller("AuthLoginController",n);n.$inject=["$log","$scope","$validation","$state","$stateParams","$window","authService","$timeout","$http","$rootScope","featureToggle","metrics"]}(),function(){"use strict";function n(n,t,i,r){t.loggedOut=!1;r.logout(function(){n.$broadcast("user.logout");i.log("%cLogout >","color: orange","Logged out");t.loggedOut=!0})}angular.module("component.auth").controller("AuthLogoutController",n);n.$inject=["$rootScope","$scope","$log","authService"]}(),function(){"use strict";function n(n,t,i){function f(){r.hasError=!1;r.iconStatus="";r.errorMessage=""}var r=this,u=i.token;if(r.validResetToken=null,r.newPassword="",r.confirmPassword="",r.pageLoading=!0,r.hasError=!1,r.iconStatus="",r.errorMessage="",r.submitting=!1,r.submittingMessage="",!u)return n.go("app.forgot-password");t.checkResetPasswordToken(u).then(function(){r.validResetToken=!0},function(n){n.status===410&&(r.validResetToken=!1)}).finally(function(){r.pageLoading=!1});r.updatePassword=function(){(f(),r.form.$invalid)||(r.submitting=!0,r.submittingMessage="Checking your details",t.resetUserPassword(u,r.newPassword).then(function(i){r.iconStatus="success";r.submittingMessage="Signing you in";var u=i.data.access_token;t.createSession(u);n.go("app.dash")},function(){r.hasError=!0;r.iconStatus="warning";r.errorMessage="We were unable to reset your password, please try again or contact Connect support.";r.submitting=!1;r.submittingMessage="resetPassword.submittingMessage"}))}}angular.module("app.auth").controller("AuthResetPasswordController",n);n.$inject=["$state","authService","$stateParams"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.submit=function(r){n.form.$valid&&(t.info("page is added....."),u.createPage(r).then(function(n){var r=n.DesignViewUrl+"/"+n.PageName;t.info(r);i.path(r).search(f.pageVersionQueryString,n.PageReference)}))};n.loadTemplates=function(){u.getPageTemplates().then(function(t){n.pageTemplates=t},function(n){t.info(n)})};n.loadTemplates()}angular.module("app.cms").controller("AddPageController",n);n.$inject=["$scope","$log","$location","$window","cmsService","cmsConstants"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.searchText="";n.selectedPageStatus="";n.pageStatusOptions=[];n.quickSearch=function(i){(i.length>1||i.length==0)&&(t.info("CmsContentListController > Searching on:",i),n.list.search(!0))};n.discard=function(i){t.info("CmsContentListController > discard",i);r.swal({title:"Discard this draft?",text:"By discarding this draft all editable regions on the selected page will be reset to their respective live versions. Are you sure you wish to do this?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(t){t&&f.discardPageRegions(i.PageName,i.PageReference).then(function(){u.add({type:"success",message:i.PageReference+" has been discarded successfully",expire:!0});n.list.search(!0)},function(){u.add({type:"error",message:i.PageReference+" has encountered an error whilst publishing",expire:!0})})})};n.publish=function(i){t.info("CmsContentListController > publish",i);r.swal({title:"Do you wish to publish this page?",text:"By publishing this draft all editable regions on this page will become visable on the live site. Are you sure you wish to do this?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(t){t&&f.publishPageRegions(i.PageName,i.PageReference).then(function(){u.add({type:"success",message:i.PageReference+" has been published successfully",expire:!0});n.list.search(!0)},function(){u.add({type:"error",message:i.PageReference+" has encountered an error whilst publishing",expire:!0})})})};n.preview=function(n){t.info("preview",n)};n.tableHeaders=[{columnName:"PageReference",displayName:"Page Reference"},{columnName:"PageName",displayName:"Page Name"},{columnName:"ModifiedOn",displayName:"Modified On"},{columnName:"CreatedBy",displayName:"Created By"},{columnName:"CreatedOn",displayName:"Created On"},{columnName:"StatusId",displayName:"Status"}];n.listViewConfig={resourceName:"searchContent",filters:[{field:"Reference",operator:"like",value:n.searchText},{field:"StatusId",operator:"=",value:n.selectedPageStatus}],order:[{field:"ModifiedOn",orderBy:"desc"}],count:!0,sortColumn:"ModifiedOn",asc:!1,itemName:"Content Page"};n.$on("list.search",function(){n.list.config.filters.Reference.value=n.searchText;n.list.config.filters.StatusId.value=n.selectedPageStatus?"CSRConnect.ContentManagement.Models.Enums.PageStatus'"+n.selectedPageStatus+"'":""});n.loadPageStatusOptions=function(){i.get().$promise.then(function(t){n.pageStatusOptions=t},function(n){t.info(n)})};n.loadPageStatusOptions()}angular.module("app.cms").controller("CmsContentListController",n);n.$inject=["$scope","$log","pageStatus","SweetAlert","notificationService","cmsService"]}(),function(){"use strict";function n(n){return n("api/content/page/search",null,{query:{isArray:!1}})}function t(n){return n("api/content/pagestatus",null,{get:{isArray:!0}})}angular.module("app.cms").factory("searchContent",n).factory("pageStatus",t);n.$inject=["$resource"];t.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.addPage",config:{url:"/admin/cms/addpage",pageTitle:"Add Page",templateUrl:"ContentManagement/Administration/AddPage",needsAuth:!0}},{state:"app.index",config:{url:"/admin/cms",pageTitle:"Add Page",templateUrl:"ContentManagement/Administration/Index",needsAuth:!0}}]}angular.module("app.cms").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t,i){t.accountTextInputTest1=null;t.fakeSubmit=function(){i.validate(t.form,!0);t.form.$valid?alert("Form Valid"):alert("Form Not Valid");n.log("Scope:",t)}}angular.module("app.components").controller("ComponentsController",n);n.$inject=["$log","$scope","$validation"]}(),function(){"use strict";function n(n){n.configureStates(i())}function i(){return[{state:"app.components",config:{url:"/components?experimentsDebug",pageTitle:"Components",templateUrl:"home/components",bodyClass:"landing",resolve:{allowed:["$rootScope","$state","$q","authService",function(n,i,r,u){return r(function(i,r){u.checkSession(function(){t(!n.prod||u.isInternalUser(),i,r)},function(){t(!n.prod,i,r)})})}]}}}]}function t(n,t,i){n?t(n):i(n)}angular.module("app.components").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(){function n(n,t,i,r){var u={$body:$("body"),$options:$(".account-options"),$btn:$(".account-selector-btn"),$overlay:$(".account-selector-overlay")},f="account-selector-active",e=debounce(function(){var n=window.innerHeight-100;u.$options.height(n)},250),o=function(){u.$btn.off(".accountSelector").on("click.accountSelector",function(){n.toggleAccountSelector()});u.$overlay.off(".accountSelector").on("click.accountSelector",function(){n.toggleAccountSelector()});$(window).off(".accountSelector").on("resize.accountSelector",function(){e()});e()};o();n.toggleAccountSelector=debounce(function(){r.isOpen?n.closeAccountSelector():n.showAccountSelector()},250);n.showAccountSelector=function(){r.accountSelectorActive&&(u.$body.addClass(f),u.$overlay.show(),r.showPanel())};n.closeAccountSelector=function(){r.isDirty&&r.setAccounts();u.$body.removeClass(f);u.$overlay.hide();r.hidePanel()}}return{restrict:"A",link:n,controller:t,controllerAs:"as"}}function t(n,t,i,r,u,f,e,o){function w(){n.log("[Accounts] Initialising account selector");r.setState(!0);s.accounts=t.session.accounts.list;s.currentSbus=r.getSbus(!1);s.selectedAccountIds=r.getActive();s.selectedAccountsText=l();s.faves=t.userPreferences.AccountFavourites||[];v();s.accounts.length==0&&r.setState(!1)}function b(){s.isOpen=!0;s.isDirty=!1;s.selectedAccountsText=s.selectedAccountsDisplay()}function k(){s.isOpen=!1;s.isDirty=!1;s.searchReset();s.selectedAccountsText=s.selectedAccountsDisplay()}function l(){var n=r.getActive();return s.isOpen&&s.isDirty?s.selectedAccountIds.length?"Confirm selection":"Use default accounts":!s.accountSelectorActive&&s.accounts.length?"All available accounts":n.length?n.length+" account"+(n.length>1?"s":"")+" selected":s.accountSelectorActive||s.accounts.length?!1:"No accounts available"}function d(){if(s.switchMode("list"),s.searchingAccounts=!0,s.accountSearch===""||s.accountSearch===" ")return s.accounts=r.list(),s.searchingAccounts=!1,!1;s.currentAccountSearch&&!s.currentAccountSearch.$resolved&&s.currentAccountSearch.$cancelRequest();var n=s.accountSearch.replace(/'/g,"''"),t=e.get({$filter:"contains(tolower(Name1),tolower('"+n+"')) or contains(AccountId,'"+n+"')",$orderby:"Name1 asc",$skip:"0",$top:"100"});return s.currentAccountSearch=t,t.$promise.then(function(n){s.searchingAccounts&&(s.accounts=n.Items,s.searchingAccounts=!1)})}function g(){s.searchingAccounts=!1;s.accountSearch="";s.accounts=r.list()}function nt(n,t){t.preventDefault();var i=n.AccountId,r=s.selectedAccountIds.indexOf(i);if(r>-1)s.selectedAccountIds.splice(r,1),delete s.selectedAccounts[i];else{if(s.selectedAccountIds.length===20)return f.swal({title:"Whoa, there!",text:"You can select up to 20 accounts to view simultaneously.",type:"info",confirmButtonText:"Ok, got it!"}),!1;s.selectedAccountIds.push(i);s.selectedAccounts[i]=n}s.isDirty=!0;s.selectedAccountsText=s.selectedAccountsDisplay()}function tt(){if(!s.selectedAccountIds.length)return s.setDefaultAccounts(!0),!1;r.locked?s.promptChange(function(){r.unlockAccounts();s.setAccounts()}):(t.session.accounts.selected=[],angular.forEach(s.selectedAccounts,function(n){t.session.accounts.selected.push(n)}),r.setActive(s.selectedAccountIds),s.selectedAccountIds=r.getActive(),s.selectedAccountsText=s.selectedAccountsDisplay())}function it(n){r.initActive([]);rt();angular.forEach(t.session.user.DefaultAccounts,function(n){s.selectedAccounts[n.AccountId]=n});s.selectedAccountIds=Object.keys(s.selectedAccounts);s.selectedAccountsText=s.selectedAccountsDisplay();n&&s.setAccounts()}function a(){s.selectedAccounts={};s.selectedAccountIds=[];s.searchingAccounts=!s.accountSearch.isEmpty;s.isDirty=!0;s.selectedAccountsText=s.selectedAccountsDisplay()}function rt(){s.accountSearch="";a()}function ut(n){f.swal({title:"Change accounts?",text:"Changing accounts will cancel the "+r.lockedBy+" process",type:"warning",showCancelButton:!0,confirmButtonText:"Yes, change accounts",cancelButtonText:"Continue "+r.lockedBy},function(t){t?n.call(s):s.selectedAccountIds=r.getActive()})}function v(n,i){s.selectedAccounts={};var u=[];angular.forEach(s.selectedAccountIds,function(n){var t=r.get([n])[0];t?s.selectedAccounts[n]=t:u.push(n)});u.length?e.get({$filter:"AccountId eq '"+u.join("' or AccountId eq '")+"'"},function(r){var f=!1;u.filter(function(n){var i=r.Items.filter(function(t){return t.AccountId==n}),t;i.length===0&&(t=s.selectedAccountIds.indexOf(n),s.selectedAccountIds.splice(t,1),f=!0)});r.Items.length?(angular.forEach(r.Items,function(n){s.selectedAccounts[n.AccountId]=n;t.session.accounts.list.push(n)}),(n||f)&&s.setAccounts(),t.$broadcast("accounts.dataReady"),angular.isDefined(i)&&i()):f&&(s.setAccounts(),t.$broadcast("accounts.dataReady"))}):(n&&s.setAccounts(),t.$broadcast("accounts.dataReady"),angular.isDefined(i)&&i())}function h(n){s.lastMode=s.mode;s.mode=n}function y(){switch(s.mode){case"faves":s.mode=s.lastMode;break;default:s.lastMode=s.mode;s.mode="faves"}}function ft(n){y();i.closeAccountSelector();s.selectedAccountIds=n.Accounts;s.getAccountData(!0,function(){u.add({id:"account-fave-load",type:"success",message:'<i class="fa fa-fw fa-check-circle"><\/i> Viewing '+n.Accounts.length+" accounts from "+n.Name,expire:!0})})}function et(){h("faves");s.savingFave=!0}function c(){s.newFave={name:null,colour:0};s.savingFave=!1;h(s.lastMode)}function ot(){o.updateAccountFave({Name:s.newFave.name,Colour:s.newFave.colour,Accounts:s.selectedAccountIds}).success(function(n){s.faves.push(n);c()}).error(function(){c()})}function st(n,t){f.swal({title:"Delete favourite?",text:"Are you sure you want to delete "+t.Name+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(i){i&&o.deleteAccountFave(t.Id).success(function(){s.faves.splice(n,1)})})}function ht(n){s.newFave.colour=n}var s=this,p;s.isOpen=!1;s.isDirty=!1;s.accounts=r.list();s.currentAccountSearch=null;s.currentSbus={};s.selectedAccounts={};s.selectedAccountIds=[];s.selectedAccountsText="";s.accountSelectorActive=!0;s.accountSearch="";s.searchingAccounts=!1;s.mode="list";s.lastMode=null;s.faves=[];s.faveColours=["Default","Blue","Pink","Orange","Green","Purple","Red"];s.newFave={name:null,colour:0};i.$on("accounts.state",function(n,t){s.accountSelectorActive=t;s.selectedAccountsText=s.selectedAccountsDisplay()});i.$on("accounts.changed",function(n,t){s.selectedAccountIds=t;s.selectedAccountsText=s.selectedAccountsDisplay()});p=i.$watch("userPreferences",function(n){n&&w()});s.showPanel=b;s.hidePanel=k;s.selectedAccountsDisplay=l;s.searchAccounts=d;s.setAccount=nt;s.setAccounts=tt;s.setDefaultAccounts=it;s.clearSelected=a;s.searchReset=g;s.promptChange=ut;s.getAccountData=v;s.switchMode=h;s.toggleFaves=y;s.loadFaveAccounts=ft;s.showFaveSaveForm=et;s.closeFaveSaveForm=c;s.saveFave=ot;s.deleteFave=st;s.changeFaveColour=ht;s.accountFilters={SbuCode:"!!"}}angular.module("component.account").directive("accountSelector",n);n.$inject=[];t.$inject=["$log","$rootScope","$scope","accountsService","notificationService","SweetAlert","userAccounts","userPreferencesService"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h){function l(n){c.locked=!0;c.lockedBy=n;i.$broadcast("accounts.locked")}function a(){c.locked=!1;c.lockedBy=null;i.$broadcast("accounts.unlocked")}function v(n){c.state=n;i.$broadcast("accounts.state",c.state)}function y(){if(c.getActive().length===0)return!1;var n=!0;return angular.forEach(c.getActiveData(),function(t){angular.isDefined(t)||(n=!1)}),n}function p(){return i.session.accounts.list}function w(){return i.session.accounts.selected}function b(n){var t=c.list().concat(c.listSelected()),i=[];return!angular.isDefined(t)||!angular.isDefined(first(t))?i:(angular.forEach(n,function(n){var i=$.grep(t,function(t){return t?t.AccountId==n:!1});this.push(i[0])},i),i)}function k(){return angular.copy(i.session.accounts.current)}function d(){var n=c.getActive();return c.get(n)}function g(n){for(var r=!n||!c.getActive().length?c.list():c.get(c.getActive()),i=s.uniqueVals("SbuCode",r),f=s.uniqueVals("SbuName",r),u={},t=0;t<i.length;t++)u[i[t]]={SbuCode:i[t],SbuName:f[t]};return u}function nt(n){var t=!n||!c.getActive().length?c.list():c.get(c.getActive());return s.uniqueVals("Currency",t)}function tt(n){c.locked||(c.initActive(n),i.$broadcast("accounts.changed",n))}function it(){h.get(null,function(r){var f=r.UserPreference.AccountSelection||[],e=r.UserPreference.AccountFavourites||[],u=r.UserPreference.AchievementTasks,o=r.UserPreference.CurrentOrderId||null,s=u||u==null?{UserPreference:{AccountSelection:f,AccountFavourites:e,AchievementTasks:u,NewFeaturesSeen:!0,CurrentOrderId:o}}:{UserPreference:{AccountSelection:f,AccountFavourites:e,NewFeaturesSeen:!0,CurrentOrderId:o}};h.save(s,function(){i.userPreferences.NewFeaturesSeen=!0;t.log(n,"new features seen")})})}function rt(r){!c.locked&&r&&(i.session||i.session&&!angular.equals(i.session.accounts.current,r))&&(r.length>0&&!ft(i.session.accounts.current,r)&&$.inArray("",r)===-1&&(t.log(n,"userPreferences.save",r),h.accounts.save(r,function(){i.userPreferences.AccountSelection=r})),i.session.accounts.current=r,o.defaults.headers.common["X-AccountIds"]=r.length?r.join(","):"0")}function ut(n){if(!n)return!1;var t=n;return t.AccountId&&(t=t.AccountId),c.getActive().indexOf(t)!==-1}function ft(n,t){return JSON.stringify(n)==JSON.stringify(t)}var c={locked:!1,lockedBy:null,lockAccounts:l,unlockAccounts:a,state:!0,setState:v,isReady:y,list:p,listSelected:w,get:b,getActive:k,getActiveData:d,getSbus:g,getCurrencies:nt,setActive:tt,initActive:rt,newFeaturesSeen:it,isValidAccount:ut};return c}angular.module("component.account").factory("accountsService",t);var n="[accountsService]";t.$inject=["$log","$rootScope","$window","$state","userAccounts","notificationService","$http","utilService","userPreferences"]}(),function(){function n(){return{restrict:"E",controller:t,controllerAs:"sac",templateUrl:"account.singleSelector.html",replace:!0}}function t(n,t,i,r){function f(){u.accounts=r.getActiveData();n.log("SingleAccountSelector > Init with %s accounts",u.accounts.length,u.accounts);var i=null;t.singleAccountSelectorInit&&(i=t.singleAccountSelectorInit);e(i)}function e(i,f){(u.accounts=r.getActiveData(),r.isValidAccount(i)||(n.log("SingleAccountSelector > Requested account ",i," overriden with ",first(u.accounts),f?" noEmit updated to false":""),i=first(u.accounts),f=!1),u.selected&&i&&u.selected.AccountId===i.AccountId)||(u.selected=i,n.log("SingleAccountSelector >",f?"Silently ":"","Selected >",i),f||t.$emit("singleAccount.selected",i))}var u=this;u.accounts=[];u.selected=null;u.selectAcc=e;t.$on("accounts.changed",f);t.$on("singleAccount.select",function(t,i){n.log("SingleAccountSelector > Asked to select >",i);e(i,!0)});r.isReady()?f():t.$on("accounts.dataReady",f)}angular.module("component.account").directive("singleAccountSelector",n);n.$inject=["$log"];t.$inject=["$log","$scope","$attrs","accountsService"]}(),function(){"use strict";function t(){return{require:"^form",restrict:"AE",isolate:!1,scope:{form:"=",inputId:"@",accounts:"="},bindToController:!0,controllerAs:"accountsTextInput",controller:n,templateUrl:"account.textInput.html",replace:!0}}function n(n){var t=this;t.validate=function(){var i=t.getErrors();n.accountsTextInputForm.accountsTextInputControl.$setValidity("required",!i)};t.getErrors=function(){var u;if(!(t.form.$submitted||!n.accountsTextInputForm.$pristine))return"";var f=/^([0-9]){4,7}$/,i="",e=[],r=0;return!t.accounts||t.accounts.length===0?i="Please enter at least one account number.":(t.accounts.every(function(n){return f.test(n)?e.push(n):(r+=1,!i||(i=i+", "),i=i+n),!0}),u=!!i,u)?i=r>1?i+" are invalid account numbers.":i+" is an invalid account number.":!1}}angular.module("component.account").directive("accountsTextInput",t);n.$inject=["$scope"]}(),function(n){"use strict";function t(n){function i(n){return function(t){return t.Id===n}}var t=n.getOrganisations()||[];return function(n){if(t.length===0)return n;if(t.length===1)return t[0].Name;var r=t.find(i(n))||{};return r.Name||n}}n.module("component.accountManagement").filter("orgName",t);t.$inject=["amOrganisationsService"]}(angular),function(n){"use strict";function t(n){var t=n("api/contacts/organisations"),i=n("api/user/accountsWithOrg"),r=n("api/contacts/organisations/:orgId/accounts"),u=n("api/accounts/:accountId/info",{accountId:"@accountId"},{update:{method:"PUT"}}),f=n("api/accounts/:accountId/changehistory"),e=n("api/accounts/changehistory/:changeId"),o=n("api/accounts/:accountId/correspondences",{accountId:"@accountId"}),s=n("api/contacts/organisations/:orgId/contacts/:contactId",{},{update:{method:"PUT"}}),h=n("api/contacts/organisations/:orgId/:accountId/contacts",{orgId:"@orgId",accountId:"@accountId"}),c=n("api/contacts/organisations/:orgId/contacts/:contactId/accounts"),l=n("api/contacts/organisations/:orgId/contacts/:contactId/accounts/:accountId",{},{update:{method:"PUT"}}),a=n("api/contacts/organisations/:orgId/contacts/:contactId/commprefs",{},{update:{method:"PUT"}}),v=n("api/contacts/organisations/:orgId/contacts/:contactId/accounts/:accountId/commprefs"),y=n("api/contacts/organisations/:orgId/contacts/:contactId/invite",{orgId:"@orgId",contactId:"@contactId"},{update:{method:"PUT"}}),p=n("/api/contacts/concurrency"),w=n("api/contacts/organisations/:orgId/contacts/:contactId/confirmunknown",{orgId:"@orgId",contactId:"@contactId"}),b=n("api/contacts/organisations/:orgId/contacts/:contactId/confirm",{orgId:"@orgId",contactId:"@contactId"});return{organisations:t,allAccounts:i,accounts:r,accountInfo:u,changeHistory:f,changeHistoryDetails:e,notifications:o,contacts:h,contact:s,contactPreferences:l,contactCommunicationPreferences:a,contactAccountCommunicationPreferences:v,contactAccounts:c,inviteContact:y,contactUpdates:p,contactDetailsUnknown:w,contactDetailsCorrect:b}}n.module("component.accountManagement").factory("AccountManagementResource",t);t.$inject=["$resource","$q","$timeout"]}(angular),function(){"use strict";function n(n,t){function f(f){if(r!==!0)return r=!0,t(function(t,e){n.accountInfo.get({accountId:f}).$promise.then(function(n){u();i.details=n;t(n)},function(n){e(n)}).finally(function(){r=!1})})}function u(){i.details={}}function e(){return i}var i={details:{}},r=!1;return{loadAccountDetails:f,getAccountDetails:e,clearAccountDetails:u}}angular.module("component.accountManagement").factory("accountManagementComponentService",n);n.$inject=["AccountManagementResource","$q"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"account-details-form.html",bindToController:{accountId:"<"},replace:!0,controller:t,controllerAs:"amAccountDetails"}}function t(t,i){var r=this;r.isLoading=!0;r.hasError=!1;r.updatingDetails=!1;r.errorUpdatingDetails=!1;i.loadAccountDetails(r.accountId).then(function(t){t.accountId=r.accountId;r.formDetails=n.copy(t);r.titleDetails=n.copy(t)},function(){r.hasError=!0}).finally(function(){r.isLoading=!1});r.saveChanges=function(){r.form.$invalid||i.updateAccountDetails(r.formDetails).then(function(){t.go("app.org.account.details")},function(){r.updatingDetails=!1;r.errorUpdatingDetails=!0})};r.countryChange=function(){r.formDetails.Country!=="AU"&&(r.formDetails.State=null)};r.poBoxCountryChange=function(){r.formDetails.POBoxCountry!=="AU"&&(r.formDetails.POBoxState=null)}}n.module("component.accountManagement").directive("accountDetailsForm",i);t.$inject=["$state","amAccountsService"]}(angular),function(n){"use strict";function t(){return{restrict:"E",templateUrl:"accounts-table.html",replace:!0,bindToController:{accountsList:"="},controller:i,controllerAs:"amAccountsTable"}}function i(){var n=this}n.module("component.accountManagement").directive("accountsTable",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",templateUrl:"account-status-icon.html",scope:{status:"="},replace:!0,link:function(n){n.status===1||n.status===!0?(n.statusStyle="fa-check-circle text-success",n.statusMessage="Active"):n.status===0||n.status===!1?(n.statusStyle="fa-times-circle text-danger",n.statusMessage="Inactive"):(n.statusStyle="fa-exclamation-circle text-muted",n.statusMessage="Unknown")}}}n.module("component.accountManagement").directive("accountStatusIcon",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,templateUrl:"account-title.html",bindToController:{details:"="},controllerAs:"accountTitle",controller:function(){}}}n.module("component.accountManagement").directive("accountTitle",t)}(angular),function(n){"use strict";function i(){return{restrict:"A",bindToController:{accountId:"=accountView"},controllerAs:"accountDetails",controller:t}}function t(n,t){var i=this;i.accountId&&n.loadAccountDetails(i.accountId);t.$on("$destroy",function(){n.clearAccountDetails()})}n.module("component.accountManagement").directive("accountView",i);t.$inject=["accountManagementComponentService","$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"business-details.html",replace:!0,bindToController:{details:"<"},controllerAs:"amBusinessDetails",controller:t}}function t(t){function r(t){var i=!1;return n.forEach(t,function(n){n.length>0&&(i=!0)}),i}var i=this;t.$watch(function(){return i.details},function(n){(i.isLoading=!0,i.hasError=!1,n!==undefined)&&(n===null?(i.isLoading=!1,i.hasError=!0):(i.isLoading=!1,i.hasAddress=r(i.details.address),i.hasPoBoxAddress=r(i.details.poBox)))})}n.module("component.accountManagement").directive("businessDetails",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{details:"="},templateUrl:"change-history-details.html"}}n.module("component.accountManagement").directive("changeHistoryDetails",t)}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,bindToController:{accountId:"<"},templateUrl:"change-history-table.html",controller:t,controllerAs:"amChangeHistory"}}function t(n){var t=this;t.isLoading=!0;t.hasError=!1;n.loadAccountChangeHistory(t.accountId).then(function(n){t.list=n.Items||[]},function(){t.hasError=!0}).finally(function(){t.isLoading=!1})}n.module("component.accountManagement").directive("changeHistoryTable",i);t.$inject=["amAccountsService"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,templateUrl:"contact-avatar.html",bindToController:{contactDetails:"=?",contactType:"@?",showAlertStatus:"=?"},controller:i,controllerAs:"contactAvatarDirective"}}function i(){var n=this;n.showAlertStatus=n.showAlertStatus?n.showAlertStatus:!1;n.contactTypeClass=n.contactDetails?"user":n.contactType?n.contactType:"unknown"}n.module("component.accountManagement").directive("contactAvatar",t)}(angular),function(n){"use strict";function r(){return{restrict:"E",replace:!0,bindToController:{orgId:"=",accountId:"=",contactId:"="},controller:t,controllerAs:"commPrefsCtrl",templateUrl:"contact-comm-prefs.html"}}function t(t,r,u,f,e,o){function p(t){var i=!0;return n.forEach(t,function(t){n.forEach(t.Notifications,function(n){if(s.isNotificationInvalid(n)){i=!1;return}});i===!1}),i}function w(t){var i=[];return n.forEach(t,function(t){var r={Id:t.Id,AccountId:t.AccountId,AccountName:t.AccountName,SbuCode:t.SbuCode,DivisionCode:t.DivisionCode,DistributionChannelCode:t.DistributionChannelCode,Code:t.Code,Description:t.Description,Enabled:!0,Notifications:[]};n.forEach(t.Notifications,function(n){r.Notifications.push({Id:n.Id,Code:n.Code,Description:n.Description,NotificationScope:n.NotificationScope,IsAvailableByEmail:n.IsAvailableByEmail,IsAvailableBySms:n.IsAvailableBySms,HasEmailEnabled:n.HasEmailEnabled,HasSmsEnabled:n.HasSmsEnabled})});i.push(r)}),i}function v(n,i,u){var f=w(n);t.updateContactCommunicationPreferences(s.orgId,s.contactId,f).then(function(){i&&i();r.add({type:"success",message:"Communication preferences updated successfully",expire:!0})}).finally(function(){u&&u()})}function y(n){return n.map(function(n){var t=n.Notifications.map(function(n){return{scope:n.NotificationScope,email:n.HasEmailEnabled,sms:n.HasSmsEnabled}});return{enabled:n.Enabled,notifications:t}})}function b(t){return t.reduce(function(t,i){var r=t.find(function(n){return n.header.code===i.Code});return r?(r.areas.push(i),n.forEach(i.Notifications,function(n){var t=r.sbuNotifications.find(function(t){return t.header.code===n.Code});r.header.enabled!==i.Enabled&&(r.header.enabled=null);t?(t.header.hasEmailEnabled=t.header.hasEmailEnabled||n.HasEmailEnabled,t.header.hasSmsEnabled=t.header.hasSmsEnabled||n.HasSmsEnabled,t.header.scopes.includes(n.NotificationScope)||t.header.scopes.push(n.NotificationScope),t.sbus.includes(i.SbuCode)||n.NotificationScope===a||t.sbus.push(i.SbuCode)):r.sbuNotifications.push({header:{code:n.Code,description:n.Description,hasEmailEnabled:n.HasEmailEnabled,hasSmsEnabled:n.HasSmsEnabled,scopes:[n.NotificationScope]},sbus:n.NotificationScope!==a?[i.SbuCode]:[]})})):t.push({header:{code:i.Code,description:i.Description,enabled:i.Enabled},areas:[i],sbuNotifications:i.Notifications.map(function(n){return{header:{code:n.Code,description:n.Description,hasEmailEnabled:n.HasEmailEnabled,hasSmsEnabled:n.HasSmsEnabled,scopes:[n.NotificationScope]},sbus:n.NotificationScope!==a?[i.SbuCode]:[]}})}),t},[])}function k(){s.hasMultiViewValidationErrors=!0;o(function(){s.hasMultiViewValidationErrors=!1},5e3)}function l(n){s.areas=undefined;s.isLoading=!0;s.hasError=!1;s.singleAccountView?s.origValues=undefined:s.groupedAreas=undefined;t.loadContactCommunicationPreferences(s.orgId,s.contactId,s.accountId).then(function(n){s.areas=n;s.singleAccountView?s.origValues=y(n):(s.groupedAreas=b(n),f.log(i,"Grouped areas",s.groupedAreas))},function(){s.hasError=!0}).finally(function(){s.isLoading=!1;n!=undefined&&n()})}var s=this,h,c;s.Enums=Enums;s.EnumDescriptions=EnumDescriptions;s.getSbuName=e("sbuName");s.singleAccountView=s.accountId>0;s.areas=undefined;s.isLoading=!0;s.hasError=!1;s.loadingMessage="Loading communication preferences";s.updatingPreferences=!1;const a=0;h=[];n.forEach(Object.keys(s.Enums.notificationScope),function(n,t){h.push({Id:t,Text:s.EnumDescriptions.notificationScope[n]})});s.notificationScopes=h;s.hasEmailChannelDisabled=function(n,t){return t.IsAvailableByEmail===!1||t.NotificationScope!==s.Enums.notificationScope.always&&t.NotificationScope!==s.Enums.notificationScope.myDocumentsOnly};s.hasSmsChannelDisabled=function(n,t){return t.IsAvailableBySms===!1||t.NotificationScope!==s.Enums.notificationScope.always&&t.NotificationScope!==s.Enums.notificationScope.myDocumentsOnly};s.onNotificationScopeChanged=function(n,t){n.NotificationScope=t;t===s.Enums.notificationScope.never?(n.HasEmailEnabled=!1,n.HasSmsEnabled=!1):(n.HasEmailEnabled=n.IsAvailableByEmail,n.HasSmsEnabled=n.IsAvailableBySms)};s.isNotificationInvalid=function(n){return(n.NotificationScope===s.Enums.notificationScope.always||n.NotificationScope===s.Enums.notificationScope.myDocumentsOnly)&&n.HasEmailEnabled===!1&&n.HasSmsEnabled===!1};s.origValues=undefined;s.updateSingleViewPreferences=function(){if(!p(s.areas)){r.add({type:"error",message:"Please specify a channel for all enabled notifications",expire:!0});return}var n=function(){s.origValues=y(s.areas)},t=function(){s.updatingPreferences=!1};s.updatingPreferences=!0;v(s.areas,n,t)};s.modelIsPristine=function(){return n.equals(s.origValues,y(s.areas))};s.groupedAreas=undefined;s.selectedGroup=undefined;s.selectedSbuNotification=undefined;s.allScope={Id:0};s.allEmail=!1;s.allSms=!1;s.updatingArea=!1;s.updatingPreferencesInDialog=!1;s.hasMultiViewValidationErrors=!1;u.$on("contacts.linked",l);u.$on("contacts.unlinked",l);c=$("#modal-update-preferences");s.selectedAreaNotification=function(n){return s.selectedSbuNotification?n.Notifications.find(function(n){return n.Code===s.selectedSbuNotification.header.code}):undefined};s.updateMultiViewPreferences=function(){if(!p(s.selectedGroup.areas)){k();return}var n=function(){l(function(){c.modal("hide")})},t=function(){s.updatingPreferencesInDialog=!1};s.updatingPreferencesInDialog=!0;v(s.selectedGroup.areas,n,t)};s.updatePreferencesDialog=function(t,i,r){t?(s.selectedGroup=n.copy(i),s.selectedSbuNotification=n.copy(r),c.modal("show")):(s.selectedGroup=undefined,s.selectedSbuNotification=undefined,c.modal("hide"))};s.enableArea=function(n){n.header.enabled=!0;s.changeAreaEnabled(n)};s.disableArea=function(n){n.header.enabled=!1;s.changeAreaEnabled(n)};s.changeAreaEnabled=function(t){n.forEach(t.areas,function(n){n.Enabled=t.header.enabled});var i=function(){s.updatingArea=!1};s.updatingArea=!0;v(t.areas,undefined,i)};s.getScopeDescription=function(n){switch(n.length){case 0:return"N/A";case 1:return h[n[0]].Text;default:return"Some accounts"}};s.getChannelsDescription=function(n,t){return n===!0?t===!0?"Multiple":"Email":t===!0?"SMS":"None"};s.onAllScopeChanged=function(){s.allEmail=s.allSms=s.allScope.Id!==s.Enums.notificationScope.never};s.setAllAccounts=function(){n.forEach(s.selectedGroup.areas,function(n){var t=s.selectedAreaNotification(n);t&&(t._scope=s.allScope,t.NotificationScope=s.allScope.Id,t.IsAvailableByEmail&&(t.HasEmailEnabled=s.allEmail),t.IsAvailableBySms&&(t.HasSmsEnabled=s.allSms))})};l()}var i="[contactCommPrefs Directive]";n.module("component.accountManagement").directive("contactCommPrefs",r);t.$inject=["amContactsService","notificationService","$scope","$log","$filter","$timeout"]}(angular),function(n){"use strict";function i(){return{restrict:"E",bindToController:{orgId:"<",contactId:"<",viewOnly:"<"},templateUrl:"contact-details-panel.html",replace:!0,controller:t,controllerAs:"detailsPanel"}}function t(n,t,i){var r=this;r.isLoading=!0;r.hasError=!1;n.loadContactDetails(r.orgId,r.contactId).then(function(n){r.contact=n;n.CanInviteUser===!0&&(r.invited=!1)},function(){r.hasError=!0}).finally(function(){r.isLoading=!1});r.inviteContactToConnect=function(){n.inviteContactToConnect(r.contactId,r.orgId,r.contact).then(function(){r.invited=!0;r.contact.hasBeenInvited=!0;r.contact.UserCreatedOn=new Date})};r.removeContactFromConnect=function(){n.removeContactFromConnect(r.contactId,r.orgId,r.contact).then(function(){return i.accountId?t.go("app.org.account.contacts",{orgId:i.orgId,accountId:i.accountId}):t.go("app.org.contacts.list",{orgId:i.orgId})})}}n.module("component.accountManagement").directive("contactDetailsPanel",i);t.$inject=["amContactsService","$state","$stateParams"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,templateUrl:"contacts-counter.html",bindToController:{outOfDateContacts:"=",invalidContacts:"=",combinedUniqueContacts:"="},controller:t,controllerAs:"contactsCounter"}}function t(n){var t=this;t.counterMessage=n({outOfDate:t.outOfDateContacts,invalid:t.invalidContacts})}n.module("component.accountManagement").directive("contactsCounter",i);t.$inject=["contactsCounterMessageFilter"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,templateUrl:"contacts-list.html",bindToController:{organisation:"<",account:"<",showInvalidContacts:"<",showOutOfDateContacts:"<"},controller:t,controllerAs:"amContacts"}}function t(t,i,r,u){function e(e,s){f.isLoading=!0;f.hasError=!1;f.list=null;e?t.loadContacts(e,s).then(function(t){var h=i(t),c=r(t);f.list=t||[];f.showAlertStatusIcons=h>0||c>0;f.showInvalidContacts!==!0&&f.showOutOfDateContacts!==!0||s||(f.contactsWithAlertsCount=h+c,f.alertTypeMessage=o(h,c),n.forEach(f.list,function(n){n.CanBeFiltered=n.IsOutOfDate===!0||n.IsValid===!1?!n.IsUnknownByUser:!1}),f.invalidContactsCount=f.showInvalidContacts===!0?h:null,f.outOfDateContactsCount=f.showOutOfDateContacts===!0?c:null,(f.invalidContactsCount>0||f.outOfDateContactsCount>0)&&(f.filterContactsCookieName="org_"+e+"_filterContactsView",f.filterContactView=u.get(f.filterContactsCookieName)))},function(){f.hasError=!0}).finally(function(){f.isLoading=!1}):(f.isLoading=!1,f.list=[])}function o(n,t){return n>0&&t===0?"with missing details":n===0&&t>0?"that may be out of date":"that require attention"}var f=this;e(f.organisation,f.account);f.reloadContacts=function(){e(f.organisation,f.account)};f.updateFilteredContactsView=function(n){var t=u.get(n);t==="true"?u.remove(n):u.put(n,"true")}}n.module("component.accountManagement").directive("contactsList",i);t.$inject=["amContactsService","invalidContactsCountFilter","outOfDateContactsCountFilter","$cookies"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,require:"^contactsList",controller:t,bindToController:{details:"=",accountId:"=",orgId:"=",onDeleteContactSuccess:"&",validateContact:"<",checkContactCurrency:"<",showAlertStatus:"=?"},controllerAs:"contactItem",templateUrl:"contacts-list-item.html"}}function t(n,t,i,r){function y(){var n=u.details.AssociatedAccountIds,t=u.accountId;return n&&n.length>0?n.indexOf(t)>=0:!1}function s(i){return t(function(t,r){n.updateContactPreferences(u.orgId,u.accountId,u.details.Id,i).then(function(n){t(n)},function(n){r(n)})})}function p(){function t(){u.removeContactButtonText=f;u.updatingContact=!1}var n=i.open({templateUrl:"contact-last-account-no-permission.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1});n.result.then(function(){t()},function(){t()});r.$on("$destroy",function(){n.close()})}function w(){var n=i.open({templateUrl:"contact-last-account-message.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1});n.result.then(function(){s(l).then(function(){u.onDeleteContactSuccess()},function(n){u.removeContactButtonText=n&&n.data&&n.data.WasFailureHandled===!0?f:o;u.updatingContact=!1})},function(){u.removeContactButtonText=f;u.updatingContact=!1});r.$on("$destroy",function(){n.dismiss()})}var u=this,h={IsAssociated:!1},c={IsAssociated:!0},l={CanRemoveFinalAccount:!0,IsAssociated:!1},f="Remove",a="Removing...",e="Link",v="Linking...",o="Try again";u.updatingContact=!1;u.addContactButtonText=e;u.removeContactButtonText=f;u.accountId&&u.orgId&&u.details?(u.isAssociated=y(),u.showOptions=!0):u.showOptions=!1;u.removeContact=function(){u.updatingContact=!0;u.removeContactButtonText=a;s(h).then(function(){u.isAssociated=!1;u.updatingContact=!1;u.removeContactButtonText=f;var n=u.details.AssociatedAccountIds.indexOf(u.accountId);u.details.AssociatedAccountIds.splice(n,1)},function(n){n&&n.status&&n.status===403?p():n&&n.status&&n.status===412?w():n&&n.data&&n.data.WasFailureHandled===!0?(u.updatingContact=!1,u.removeContactButtonText=f):(u.updatingContact=!1,u.removeContactButtonText=o)})};u.addContact=function(){u.updatingContact=!0;u.addContactButtonText=v;s(c).then(function(){u.isAssociated=!0;u.addContactButtonText=e;u.details.AssociatedAccountIds.push(u.accountId)},function(n){u.addContactButtonText=n&&n.data&&n.data.WasFailureHandled===!0?e:o}).finally(function(){u.updatingContact=!1})};u.singleContactDetailsUnknown=function(t,i){u.updatingContact=!0;n.contactDetailsUnknownToUser(t,i).then(function(){u.checkContactCurrency=!1;u.validateContact=!1},function(){u.view.loading=!1;u.view.error=!0}).finally(function(){u.updatingContact=!1})}}n.module("component.accountManagement").directive("contactsListItem",i);t.$inject=["amContactsService","$q","$modal","$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,bindToController:{details:"="},controller:t,controllerAs:"contactValidation",templateUrl:"contact-validation.html"}}function t(t,i,r,u,f,e,o){function l(){return s.view.multiContactMixedConfirmAndMissingDetails===!1}function h(t){if(t)u.put("org_"+t+"_filterContactsView","true");else{var i=e.getOrganisations();n.forEach(i,function(n){u.put("org_"+n.Id+"_filterContactsView","true")})}}function c(){return i(function(){t.close()},2e3)}var s=this;s.loadingMessage="Saving";s.successTitle="Done";s.successMessage="Thank you";s.view={multiContactConfirmDetails:!1,remindMeLater:!1,loading:!1,error:!1,remindMeLaterSuccess:!1,contactUnknownSuccess:!1,contactDetailsAreCorrectSuccess:!1};s.view.multiContactMixedConfirmAndMissingDetails=s.details.Invalid&&s.details.Invalid.Count>0&&s.details.OutOfDate&&s.details.OutOfDate.Count>0;s.view.singleContactWithMissingDetails=!1;s.view.multiContactsWithMissingDetails=l()&&s.details.Invalid&&s.details.Invalid.Count>0?!0:!1;s.view.singleContactConfirmDetails=!1;s.view.multiContactConfirmDetails=l()&&s.details.OutOfDate&&s.details.OutOfDate.Count>0?!0:!1;s.reminderOption="nextTime";s.closeAndMove=function(n){return t.close(),r.go(n)};s.fixSingleContactMissingDetails=function(n,i){h(n);var u={orgId:n,contactId:i,validate:!0};return t.close(),r.go("app.org.contacts.editContactDetails",u)};s.fixMultipleContactsMissingDetails=function(){var f=s.details.Invalid.MultiOrg,n=undefined,u=undefined,i;return f===!0?(h(),n="app.orgs"):(i=s.details.Invalid.Contacts[0].OrganisationId,h(i),n="app.org.contacts.list",u={orgId:i}),t.close(),r.go(n,u)};s.singleContactDetailsAreCorrect=function(n,t){s.view.loading=!0;s.view.error=!1;f.contactDetailsAreCorrect(n,t).then(function(){s.view.loading=!1;s.view.contactDetailsAreCorrectSuccess=!0;h(n);c()},function(){s.view.loading=!1;s.view.error=!0})};s.singleContactDetailsAreNotCorrect=function(n,i){var u={orgId:n,contactId:i,concurrent:!0};return t.close(),h(n),r.go("app.org.contacts.editContactDetails",u)};s.singleContactDetailsUnknown=function(n,t){s.view.loading=!0;s.view.error=!0;f.contactDetailsUnknownToUser(n,t).then(function(){s.view.loading=!1;s.view.contactUnknownSuccess=!0;c()},function(){s.view.loading=!1;s.view.error=!0})};s.validateMultipleContactsDetails=function(){var f=s.details.OutOfDate.MultiOrg,n=undefined,u=undefined,i;return f===!0?(h(),n="app.orgs"):(i=s.details.OutOfDate.Contacts[0].OrganisationId,h(i),n="app.org.contacts.list",u={orgId:i}),t.close(),r.go(n,u)};s.fixMultipleContactsMixedDetails=function(){var u=s.details.OutOfDate.MultiOrg===!0||s.details.Invalid.MultiOrg===!0,n=undefined,f=undefined,i;return u||!u&&s.details.OutOfDate.Contacts[0].OrganisationId!==s.details.Invalid.Contacts[0].OrganisationId?(h(),n="app.orgs"):(i=s.details.OutOfDate.Contacts[0].OrganisationId,h(i),n="app.org.contacts.list",f={orgId:i}),t.close(),r.go(n,f)};s.remindMeLater=function(){s.view.remindMeLater=!0};s.setReminder=function(n){s.view.loading=!0;s.view.error=!1;o.contactRemindMeLater(n).then(function(){s.view.loading=!1;s.view.remindMeLaterSuccess=!0;c()},function(){s.view.loading=!1;s.view.error=!0})}}n.module("component.accountManagement").directive("contactValidation",i);t.$inject=["ContactValidation","$timeout","$state","$cookies","amContactsService","amOrganisationsService","dqService"]}(angular),function(n){"use strict";function t(n){function i(i){if(t)return!1;t=n.open({templateUrl:"contact-validation-prompt.html",bindToController:!0,controller:"contactValidationPromptController",controllerAs:"contactValidationPrompt",resolve:{updateDetails:i.data},size:"md",backdrop:"static",keyboard:!1,animation:!0})}function r(){if(t)t.close(),t.result.then(function(){t=null});else return!1}var t;return{open:i,close:r}}n.module("component.accountManagement").factory("ContactValidation",t);t.$inject=["$modal"]}(angular),function(n){"use strict";function t(n){var t=this;t.details=n}n.module("component.accountManagement").controller("contactValidationPromptController",t);t.$inject=["updateDetails"]}(angular),function(n){"use strict";function t(){return{restrict:"A",transclude:!0,templateUrl:"content-unavailable-when.html",replace:!1,scope:{contentUnavailableWhen:"=",contentUnavailableMessage:"@"}}}n.module("component.accountManagement").directive("contentUnavailableWhen",t)}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"csr-account-details.html",replace:!0,bindToController:{details:"<"},controller:t,controllerAs:"amCsrAccountDetails"}}function t(n){var t=this;n.$watch(function(){return t.details},function(n){(t.isLoading=!0,t.hasError=!1,n!==undefined)&&(n===null?(t.isLoading=!1,t.hasError=!0):t.isLoading=!1)})}n.module("component.accountManagement").directive("csrAccountDetails",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,bindToController:{orgId:"=",contactId:"=",onLoad:"&?",onContactDeleteSuccess:"&?"},controller:t,controllerAs:"contactAccountsTable",templateUrl:"contact-accounts-table.html"}}function t(t,i,r,u,f){function o(n){function i(){n.IsAssociated=!0;n.updatingStatus=!1}var t=u.open({templateUrl:"contact-last-account-no-permission.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1});t.result.then(function(){i()},function(){i()});f.$on("$destroy",function(){t.close()})}function s(n){var i=u.open({templateUrl:"contact-last-account-message.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1});i.result.then(function(){t.removeContactFromAccount(e.orgId,n.AccountId,e.contactId,!0).then(function(){e.onContactDeleteSuccess()},function(){n.IsAssociated=!0;n.updatingStatus=!1})},function(){n.updatingStatus=!1;n.IsAssociated=!0});f.$on("$destroy",function(){i.dismiss()})}var e=this;e.isLoading=!0;e.hasError=!1;t.loadContactAccounts(e.orgId,e.contactId).then(function(t){e.accounts=r("orderBy")(t,"IsAssociated",!0);n.forEach(e.accounts,function(n){n.AssociationOrder=n.IsAssociated?"0":"1"})},function(){e.hasError=!0}).finally(function(){e.isLoading=!1;e.onLoad()});e.addContact=function(n){n.updatingStatus=!0;t.addContactToAccount(e.orgId,n.AccountId,e.contactId).then(function(){n.IsAssociated=!0;i.$broadcast("contacts.linked")},function(){n.IsAssociated=!1}).finally(function(){n.updatingStatus=!1})};e.removeContact=function(n){n.updatingStatus=!0;t.removeContactFromAccount(e.orgId,n.AccountId,e.contactId).then(function(){n.IsAssociated=!1;n.updatingStatus=!1;i.$broadcast("contacts.unlinked")},function(t){t&&t.status&&t.status===403?o(n):t&&t.status&&t.status===412?s(n):(n.IsAssociated=!0,n.updatingStatus=!1)})}}n.module("component.accountManagement").directive("contactAccountsTable",i);t.$inject=["amContactsService","$rootScope","$filter","$modal","$scope"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,templateUrl:"am-account-selector.html",bindToController:{availableAccounts:"<",selectedAccounts:"="},controller:i,controllerAs:"amAccountSelector"}}function i(){var n=this}n.module("component.accountManagement").directive("amAccountSelector",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,require:"ngModel",priority:10,link:function(t,i,r,u){function e(t){var i=[];return n.forEach(t,function(n){if(n.selected===!0)i.push({AccountId:n.AccountId});else return}),i}var f=[];t.$watch(function(){return t.amAccountList.accountsToSelectFrom},function(n){f=e(n);u.$setViewValue(f);r.required&&(u.$setTouched(),u.$setValidity("required",f.length>0))},!0)},templateUrl:"am-account-list.html",bindToController:{availableAccounts:"<"},controller:i,controllerAs:"amAccountList"}}function i(){var t=this;t.accountsToSelectFrom=[];n.forEach(t.availableAccounts,function(n){var i={selected:!0,AccountId:n};t.accountsToSelectFrom.push(i)})}n.module("component.accountManagement").directive("amAccountList",t)}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,bindToController:{accountId:"="},controller:t,controllerAs:"amAccountListDetails",templateUrl:"am-account-list-details.html"}}function t(n){var t=this;t.isLoading=!0;t.hasError=!1;n.loadAccountDetails(t.accountId).then(function(n){t.accountDetails=n},function(){t.hasError=!0}).finally(function(){t.isLoading=!1})}n.module("component.accountManagement").directive("amAccountListDetails",i);t.$inject=["amAccountsService"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,templateUrl:"am-contact-details.html",bindToController:{contactDetails:"="},controller:t,controllerAs:"amContactDetails"}}function t(n,t,i){var r=this;r.isExistingContact=r.contactDetails.Id!=undefined;r.removeContactFromConnect=function(){i.removeContactFromConnect(r.contactDetails.Id,n.orgId,r.contactDetails).then(function(){return n.accountId?t.go("app.org.account.contacts",{orgId:n.orgId,accountId:n.accountId}):t.go("app.org.contacts.list",{orgId:n.orgId})})}}n.module("component.accountManagement").directive("amContactDetails",i);t.$inject=["$stateParams","$state","amContactsService"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,templateUrl:"am-job-title-selector.html",bindToController:{selectedJobTitle:"="},controller:t,controllerAs:"amJobTitleSelector"}}function t(n){function i(){return t.jobTitles.indexOf(t.selectedJobTitle)===-1?"Other":t.selectedJobTitle}var t=this;n.getLists().then(function(n){t.jobTitles=n.positions||[];t.selectedJobOption=t.selectedJobTitle&&t.selectedJobTitle.length>0?i():""});t.selectJobOption=function(){t.selectedJobTitle=t.selectedJobOption!=="Other"?t.selectedJobOption:""}}n.module("component.accountManagement").directive("amJobTitleSelector",i);t.$inject=["Lists","$scope"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,require:"ngModel",templateUrl:"form-toggle.html",controller:i,controllerAs:"formToggle",bindToController:{ngModel:"=",trueValue:"=?",falseValue:"=?"}}}function i(){var n=this;n.trueValue||n.falseValue||(n.trueValue=!0,n.falseValue=!1)}n.module("component.accountManagement").directive("formToggle",t)}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,templateUrl:"am-org-view-select.html",controller:t,controllerAs:"amOrgViewSelect",bindToController:{options:"="}}}function t(t){function r(){var t="";return n.forEach(i.options,function(n){i.currentState===n.state&&(t=n)}),t}var i=this;i.currentState=t.current.name;i.selectedState=r()||"";i.changeState=function(){t.transitionTo(i.selectedState.state,i.selectedState.stateParams)}}n.module("component.accountManagement").directive("amOrgViewSelect",i);t.$inject=["$state"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{details:"="},templateUrl:"edit-notification-form.html"}}n.module("component.accountManagement").directive("editNotificationForm",t)}(angular),function(n){"use strict";function t(){return function(n){function t(n,t){return t>0&&n===0?t===1?"Contact missing details":"Contacts missing details":t===0&&n>0?"Out of date Contact details":"Contacts requiring attention"}return n&&n.outOfDate!==undefined&&n.invalid!==undefined?t(n.outOfDate,n.invalid):""}}n.module("component.accountManagement").filter("contactsCounterMessage",t)}(angular),function(n){"use strict";function t(n){return function(t,i){var u=[],r;if(i||n.warn("contactsLinkedToAccount filter requires an account ID"),t&&i)for(r in t)t[r].AssociatedAccountIds&&t[r].AssociatedAccountIds.indexOf(i)>=0&&u.push(t[r]);return u}}n.module("component.accountManagement").filter("contactsLinkedToAccount",t);t.$inject=["$log"]}(angular),function(n){"use strict";function t(n){return function(t,i){var u=[],r;if(i||n.warn("contactsNotLinkedToAccount filter requires an account ID"),t&&i)for(r in t)t[r].AssociatedAccountIds&&t[r].AssociatedAccountIds.indexOf(i)===-1&&u.push(t[r]);return u}}n.module("component.accountManagement").filter("contactsNotLinkedToAccount",t);t.$inject=["$log"]}(angular),function(n){"use strict";function t(){return function(n){var t=0;for(var i in n)n[i].IsValid===!1&&n[i].IsUnknownByUser===!1&&t++;return t}}n.module("component.accountManagement").filter("invalidContactsCount",t)}(angular),function(n){"use strict";function t(){return function(n){var t=0;for(var i in n)t+=n[i].InvalidContacts;return t}}n.module("component.accountManagement").filter("organisationsInvalidContactsCount",t)}(angular),function(n){"use strict";function t(){return function(n){var t=0;for(var i in n)t+=n[i].OutOfDateContacts;return t}}n.module("component.accountManagement").filter("organisationsOutOfDateContactsCount",t)}(angular),function(n){"use strict";function t(){return function(n){var t=0;for(var i in n)t+=n[i].IncludeInUiCount;return t}}n.module("component.accountManagement").filter("organisationsUniqueContactsRequireAttentionCount",t)}(angular),function(n){"use strict";function t(){return function(n){var i=0;for(var t in n)n[t].IsOutOfDate===!0&&n[t].IsValid===!0&&n[t].IsUnknownByUser===!1&&i++;return i}}n.module("component.accountManagement").filter("outOfDateContactsCount",t)}(angular),function(){"use strict";function t(){return{restrict:"E",replace:!0,templateUrl:"organisation-launchpad-link.html",controller:n,controllerAs:"orgLaunchpadLink",bindToController:{}}}function n(n,t,i,r){function f(){return u.organisations.length===0?"Manage accounts":u.organisations.length===1?"Manage contacts":"Accounts & contacts"}var u=this;u.organisations=n.getOrganisations();u.linkTitle=f();u.totalInvalidContacts=t(u.organisations);u.totalOutOfDateContacts=i(u.organisations);u.combinedUniqueContacts=r(u.organisations)}angular.module("component.accountManagement").directive("organisationLaunchpadLink",t);n.$inject=["amOrganisationsService","organisationsInvalidContactsCountFilter","organisationsOutOfDateContactsCountFilter","organisationsUniqueContactsRequireAttentionCountFilter"]}(angular),function(n){"use strict";function i(){return{restrict:"E",replace:!0,bindToController:{accountId:"<"},templateUrl:"org-account-notifications.html",controller:t,controllerAs:"amNotifications"}}function t(n){var t=this;t.isLoading=!0;t.hasError=!1;n.loadAccountNotifications(t.accountId).then(function(n){t.list=n||[]},function(){t.hasError=!0}).finally(function(){t.isLoading=!1})}n.module("component.accountManagement").directive("notificationsTable",i);t.$inject=["amAccountsService"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"organisations-list.html",replace:!0,controller:t,controllerAs:"organisationsList"}}function t(n){var t=this;t.organisations=n.getOrganisations()}n.module("component.accountManagement").directive("organisationsList",i);t.$inject=["amOrganisationsService"]}(angular),function(n){"use strict";function t(n,t){function i(i){return t(function(t,r){n.accountInfo.update(i).$promise.then(function(n){t(n)},function(n){r(n)})})}function r(i){return t(function(t,r){n.accounts.query({orgId:i}).$promise.then(function(n){t(n)},function(n){r(n)})})}function u(i){return t(function(t,r){n.changeHistory.get({accountId:i}).$promise.then(function(n){t(n)},function(n){r(n)})})}function f(i){return t(function(t,r){n.changeHistoryDetails.get({changeId:i}).$promise.then(function(n){t(n)},function(n){r(n)})})}function e(i){return t(function(t,r){n.notifications.query({accountId:i}).$promise.then(function(n){t(n)},function(n){r(n)})})}function o(i){return t(function(t,r){n.accountInfo.get({accountId:i}).$promise.then(function(n){t(n)},function(n){r(n)})})}function s(i){return t(function(t,r){n.notifications.save(i).$promise.then(function(n){t(n)},function(n){r(n)})})}function h(i){function e(n){if(n&&n.searchTerm){var t=n.searchTerm.replace(/'/g,"''");return" and contains(tolower(Name1),tolower('"+t+"')) or contains(tolower(AccountId),tolower('"+t+"'))"}return""}var r=i.pageSize||20,u=i&&i.orderBy?i.orderBy:"Name1 asc",f=i&&i.page?i.page*r:0;return t(function(t,o){n.allAccounts.get({$count:!0,$filter:"IsActive eq true"+e(i),$orderby:u,$skip:f,$top:r}).$promise.then(function(n){t(n)},function(n){o(n)})})}return{loadAccounts:r,loadAccountDetails:o,updateAccountDetails:i,loadAccountChangeHistory:u,loadAccountChangeHistoryDetails:f,loadAccountNotifications:e,updateAccountNotificationDetails:s,loadAllAccounts:h}}n.module("component.accountManagement").factory("amAccountsService",t);t.$inject=["AccountManagementResource","$q"]}(angular),function(n){"use strict";function t(n,t,i){function f(i,r){return t(function(t,u){n.contacts.query({orgId:i,accountId:r}).$promise.then(function(n){t(n)},function(n){u(n)})})}function e(i,r){return t(function(t,u){n.contact.get({orgId:i,contactId:r}).$promise.then(function(n){t(n)},function(n){u(n)})})}function o(i,f,e){var o={orgId:i,contactId:f};return t(function(t,i){n.contact.update(o,e).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){i(n)}):i(n)})})}function s(i,r,u){var f={orgId:i,accountId:r,contactId:u};return t(function(t,i){n.contactPreferences.query(f).$promise.then(function(n){t(n[0])},function(n){i(n)})})}function h(i,f,e,o){var s={orgId:i,accountId:f,contactId:e};return t(function(t,i){n.contactPreferences.update(s,o).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){i(n)}):i(n)})})}function c(i,r,u){var f;return u?(f={orgId:i,accountId:u,contactId:r},t(function(t,i){n.contactAccountCommunicationPreferences.query(f).$promise.then(function(n){t(n)},function(n){i(n)})})):(f={orgId:i,contactId:r},t(function(t,i){n.contactCommunicationPreferences.query(f).$promise.then(function(n){t(n)},function(n){i(n)})}))}function l(i,f,e){var o={orgId:i,contactId:f};return t(function(t,i){n.contactCommunicationPreferences.update(o,e).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){i(n)}):i(n)})})}function a(i,f,e){var o={orgId:i,accountId:f,contactId:e},s={IsAssociated:!0};return t(function(t,i){n.contactPreferences.update(o,s).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){i(n)}):i(n)})})}function v(i,f,e,o){var h={orgId:i,accountId:f,contactId:e},s={IsAssociated:!1};return o===!0&&(s.CanRemoveFinalAccount=!0),t(function(t,i){n.contactPreferences.update(h,s).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){i(n)}):i(n)})})}function y(i,r){return t(function(t,u){n.contactAccounts.query({orgId:i,contactId:r}).$promise.then(function(n){t(n)},function(n){u(n)})})}function p(i){return t(function(t,f){n.contacts.save(i).$promise.then(function(n){t(n)},function(n){r(n)?u(n.data.Message).result.finally(function(){f(n)}):f(n)})})}function w(t,r,u){function f(t,i,r,u){var f=this;f.loading=!1;f.hasError=!1;f.contactDetails=r;f.sendInvitation=function(){f.loading=!0;n.inviteContact.update({orgId:i,contactId:t}).$promise.then(function(){u.close()},function(){f.loading=!1;f.hasError=!0})}}var e=i.open({templateUrl:"invite-contact-to-connect.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactId:function(){return t||null},orgId:function(){return r||null},contactDetails:function(){return u||null}},bindToController:!0,controller:f,controllerAs:"inviteContact"});return f.$inject=["contactId","orgId","contactDetails","$modalInstance"],e.result}function b(t,r,u){function f(t,i,r,u){var f=this;f.loading=!1;f.hasError=!1;f.contactDetails=r;f.removeContact=function(){f.loading=!0;n.contact.remove({orgId:i,contactId:t}).$promise.then(function(){u.close()},function(){f.loading=!1;f.hasError=!0})}}var e=i.open({templateUrl:"remove-contact-from-connect.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{contactId:function(){return t||null},orgId:function(){return r||null},contactDetails:function(){return u||null}},bindToController:!0,controller:f,controllerAs:"removeContact"});return f.$inject=["contactId","orgId","contactDetails","$modalInstance"],e.result}function k(i,r){return t(function(t,u){n.contactDetailsUnknown.save({orgId:i,contactId:r}).$promise.then(function(){t()},function(){u()})})}function d(i,r){return t(function(t,u){n.contactDetailsCorrect.save({orgId:i,contactId:r}).$promise.then(function(){t()},function(){u()})})}function r(n){return n&&n.status===500&&n.data&&n.data.WasFailureHandled}function u(){return i.open({templateUrl:"handled-error-message.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1})}return{loadContacts:f,saveContactDetails:o,loadContactDetails:e,loadContactPreferences:s,updateContactPreferences:h,loadContactCommunicationPreferences:c,updateContactCommunicationPreferences:l,addContactToAccount:a,removeContactFromAccount:v,createNewContact:p,loadContactAccounts:y,inviteContactToConnect:w,removeContactFromConnect:b,contactDetailsUnknownToUser:k,contactDetailsAreCorrect:d}}n.module("component.accountManagement").factory("amContactsService",t);t.$inject=["AccountManagementResource","$q","$modal"]}(angular),function(n){"use strict";function t(t,i){function u(){return i(function(n,i){t.organisations.query().$promise.then(function(t){e();o(t);n(t)},function(n){i(n)})})}function f(){return r}function e(){return r.length=0}function o(t){return n.forEach(t,function(n){r.push(n)})}function s(){return i(function(n,i){t.contactUpdates.get().$promise.then(function(t){n(t.Data)},function(n){i(n)})})}var r=[];return{loadOrganisations:u,getOrganisations:f,loadContactUpdates:s}}n.module("component.accountManagement").factory("amOrganisationsService",t);t.$inject=["AccountManagementResource","$q"]}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,templateUrl:"side-menu.html",transclude:!0,scope:{menuTitle:"@"}}}n.module("component.accountManagement").directive("sideMenu",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,transclude:!0,templateUrl:"side-menu-item.html"}}n.module("component.accountManagement").directive("sideMenuItem",t)}(angular),function(){"use strict";function n(){var n=this;n.isReadOnly=n.account.isInv===!0&&n.account.enabled===!0}angular.module("component.accountNotificationToggle").controller("accountNotificationToggleController",n)}(),function(){"use strict";function n(){return{restrict:"E",transclude:!1,scope:{account:"="},controller:"accountNotificationToggleController",controllerAs:"toggle",bindToController:!0,templateUrl:"accountNotificationToggle.html",replace:!0}}angular.module("component.accountNotificationToggle").directive("accountNotificationToggle",n)}(),function(n){"use strict";function t(){return{bindToController:!0,controller:i,controllerAs:"at",restrict:"A",templateUrl:"achievements.html"}}function i(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function ot(){w.currentTask=null;w.loadingContent=!0;w.wordsRemaining=it;w.isInternalUser=!1;w.completedAchievements=!1;w.currentTaskNumber=0;w.currentQuestionNumber=0;w.completeCount=0;w.submitting=!1;w.cardActive=!1;w.cardPendingCollection=!1}function rt(){if(k&&k(),!ii()||h.isImpersonating()||!p.isEnabledFor("achievements")){r.log(b,"Abort init and hide UI; User is excluded or impersonating");w.enabled=!1;return}ot();w.isInternalUser=h.isInternalUser();w.hasNoJobsNotesPermissions=!h.hasPermission("Customer/Jobs")&&!h.hasPermission("Customer/Documents");a.init(function(n){if(r.log(b,"Achievements status:",n),n.OptedOut){r.log(b,"Init > User has opted out");ft();return}w.completedAchievements=n.Completed;w.completedAchievements?(w.completeCount=w.tasks.length,w.currentTaskNumber=w.tasks.length+1):(w.completeCount=n.LastTask!=null?n.LastTask+1:0,w.currentTaskNumber=n.LastTask==null?0:n.LastTask+1);r.log(b,"Init >",w.completeCount+" tasks completed");w.enabled=!0;for(var t=0;t<w.tasks.length;t++)w.tasks[t].complete=t<w.currentTaskNumber;w.tracker.loading=!1;w.completedAchievements?r.log(b,"User has completed the current competition"):bt()?(r.log(b,"Prompting to start"),d()):r.log(b,"Skipping prompts");f(function(){e.enabled(o,!0)})})}function bt(){if(u.current.name.indexOf("app.payments")>-1)return!1;var n=h.getUser().Profile.VisitedTours;return n&&n.length===0?!1:h.getUser().Profile.DataQualityStatus.ShouldPrompt?!1:!0}function ut(){r.log(b,"Deferring init...");k&&k();k=i.$on("accounts.dataReady",rt)}function ft(){h.isAuthenticated()&&w.enabled&&l.refreshLocalPrefs();w.enabled=!1}function d(n){var t,r;g(!1);w.introModal=w.introModal||$(at);w.introModal.modal(n===!1?"hide":"show");w.introModal.focus();t="hide.bs.modal";w.introModal.off(t).on(t,function(n){i.cw4.$pristine||(n.preventDefault(),n.stopImmediatePropagation(),v.swal({imageUrl:tt,title:"You haven't submitted your answer",text:"Are you sure you want to leave? Your answers won't be saved.",showCancelButton:!0,confirmButtonText:"Leave questions"},function(n){return n?(i.cw4.$setPristine(),d(!1),!0):!1}))});r="hidden.bs.modal";w.introModal.off(r).on(r,function(){w.currentQuestionNumber=0;w.questions=nt()})}function kt(n){w.cardActive=!0;w.currentTaskNumber=n;w.currentTask=w.tasks[n]}function dt(n){w.completedAchievements||n===undefined||w.tasks[n].complete||!w.cardActive||f(function(){w.cardPendingCollection=n},2e3)}function gt(n,t,i){if(t===w.currentTaskNumber){if(t+1===w.tasks.length){st(n,t,i);return}a.taskComplete({taskName:w.currentTaskNumber},null,function(){st(n,t,i);y.track("Achievements Task Completed",{task:t,page:u.current.name})})}}function st(n,t,i){w.tracker.open=!0;w.cardPendingCollection=!1;r.log(b,"Collected card",t);var u=600,e=i?u*2:0,o=$("#at-cards-deck .at-cards-card:first-child");f(function(){o.addClass("at-cards-card-collected")},i?e:250);f(function(){w.cardActive=!1;w.tasks[t].complete=!0;o.remove()},e+u);f(function(){w.completeCount=t+1},e+u*2)}function ni(){v.swal({imageUrl:tt,title:"Are you sure?",text:"By selecting \"I'm sure\" you won't see any further messages for this promotion, and you'll be unable to opt-in at a later stage.",showCancelButton:!0,confirmButtonText:"I'm sure",showLoaderOnConfirm:!0},function(n){n&&a.optOut(null,null,function(){d(!1);ft()})})}function ht(n){var t,r;g(!1);w.questionModal=w.questionModal||$(vt);w.questionModal.modal(n===!1?"hide":"show");w.questionModal.focus();t="hide.bs.modal";w.questionModal.off(t).on(t,function(n){i.cw4.$pristine||(n.preventDefault(),n.stopImmediatePropagation(),v.swal({imageUrl:tt,title:"You haven't submitted your answer",text:"Are you sure you want to leave? Your answer won't be saved.",showCancelButton:!0,confirmButtonText:"Leave questions"},function(n){return n?(i.cw4.$setPristine(),ht(!1),!0):!1}))});r="hidden.bs.modal";w.questionModal.off(r).on(r,function(){w.currentQuestionNumber=0;w.questions=nt()})}function ti(){s.validate(i.cw4).success(function(){w.submitting=!0;a.complete({Answer:w.questions[1].answer},function(){f(function(){i.cw4.$setPristine();w.questionModal.modal("hide");w.completedAchievements=!0;w.questions=nt();w.submitting=!1},500);f(function(){w.collectCard({type:"completedAchievements"},3,!0)},1500)},function(){v.error("We couldn't submit your entry","Please try again, or contact CSR Connect support on 1800 909 439 if the issue persists.");w.submitting=!1})})}function g(n){if(w.cardPendingCollection){w.collectCard({type:"tracker"},w.cardPendingCollection,!0);return}n||(w.tracker.feedback=!1);w.tracker.open=n===!1?!1:!w.tracker.open;$("body").toggleClass("modal-open",w.tracker.open);r.log(b,"Tracker >",w.tracker.open?"open":"close")}function ii(){return ri()?ui()?!0:!1:!1}function ri(){return t.session.firstTimeUser?(r.log(b,"First time user detected. Defer init until clear."),!1):!0}function ui(){var u=[],n=Object.keys(c.getSbus()),t,i;for(n.length||ut(),t=0,i=0;i<u.length;i++)n.indexOf(u[i])>-1&&t++;return t===n.length?(r.log(b+" Excluded: %s / %s user SBUs are excluded >",t,n.length,n),!1):!0}function fi(n){w.overlay=$(lt);w.overlay.is(n.target)&&g(!1)}function ei(n){n.wordsRemaining=it-(n.answer?n.answer.split(" ").length:0)}function oi(t){w.currentQuestionNumber===0?(y.track("Achievements Started",{trigger:et,question:0}),w.currentQuestionNumber=t):(w.questions[w.currentQuestionNumber].submitted=!0,s.validate(i.cw4).success(function(){var r=w.questions[w.currentQuestionNumber],i=ct(r.selected);y.track("Achievements Question Answered",{trigger:et,question:w.currentQuestionNumber,selected:n.isArray(i)?i.join(","):i,answer:r.answer});w.currentQuestionNumber=t}))}function ct(t){var i=n.copy(t);if(n.isObject(i))n.forEach(i,function(n,t){n||delete i[t]}),i=Object.keys(i);else return i;return i.length&&i}function nt(){return{1:{question:"What's the <strong>best new idea<\/strong> that you've seen in your industry, and why?",answer:null,wordsRemaining:it}}}function si(n){return n.complete}var w=this,b="[Achievements]",lt="#at-wrapper",at="#at-intro-modal",vt="#at-question-modal",tt="/assets/img/promo/icon-task-list.png",k=null,it=50,et="201903";w.optOut=ni;w.showIntro=d;w.toggleTracker=g;w.submitEntry=ti;w.overlayHandler=fi;w.wordCounter=ei;w.nextQuestion=oi;w.getSelection=ct;w.flipCard=kt;w.collectCard=gt;w.showQuestion=ht;w.filterCompleteCards=si;w.enabled=!1;ot();w.tracker={open:!1,loading:!0,feedback:!1,title:"Connect & Win progress"};w.tasks=[{taskId:0,taskName:"login"},{taskId:1,taskName:"contacts",targetState:"app.orgs"},{taskId:2,taskName:"jobsOrNotes"},{taskId:3,taskName:"question"}];w.questions=nt();var yt=t.$on("user.impersonationEnded",function(){r.log(b,"Reinit due to 'user.impersonationEnded'");ut()}),pt=t.$on("auth.firstTimeUserCleared",rt),wt=t.$on("user.loggedOut",ft);t.$on("achievements.taskComplete",function(n,t){dt(t.taskId)});i.$on("$destroy",function(){yt();pt();wt()});e.enabled(o,!1);h.isAuthenticated()&&c.isReady()?rt():ut()}n.module("component.achievements").directive("achievementsTracker",t);t.$inject=[];i.$inject=["$rootScope","$scope","$log","$state","$timeout","$animate","$element","$validation","authService","accountsService","userPreferencesService","achievements","SweetAlert","metrics","featureToggle"]}(angular),function(){"use strict";function n(n){var t="/api/achievements";return n(t,null,{init:{method:"GET",url:t},start:{method:"POST",url:t+"/start"},task:{method:"GET",url:t+"/tasks/:taskName"},taskComplete:{method:"POST",url:t+"/tasks/:taskName"},complete:{method:"POST",url:t+"/complete"},optOut:{method:"POST",url:t+"/optout"}})}angular.module("component.achievements").factory("achievements",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){function t(){var t="/api/firsttimelogin";return n(t,null,{start:{method:"GET",url:t},complete:{method:"POST",url:t}})}return{firstTimeLogin:t}}angular.module("component.auth").factory("authResource",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a){function d(n){return r({method:"POST",url:"/oauth/token",headers:{Application:"application/json",Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"},data:$.param({username:n.username,password:n.password,grant_type:"password"})})}function g(){return r({method:"POST",url:"api/user/refreshToken",headers:{Application:"application/json",Accept:"application/json","Content-Type":"application/x-www-form-urlencoded"}})}function nt(n,t){return g().success(function(t){v.destroySession();v.createSession(t);v.checkSession(function(){n&&n.call()})}).error(function(n){v.destroySession();var i=n&&n.error_description?n.error_description:null;t&&t.call(null,i)})}function tt(n,t,i,u){return r.defaults.headers.common["X-AccountIds"]="0",v.getToken({username:n.UserName,password:n.Password}).success(function(n){var i=n.access_token;v.destroySession();v.createSession(i);v.checkSession(function(){u||w();t&&t.call()})}).error(function(n){v.destroySession();var t=n&&n.error_description?n.error_description:null;i&&i.call(null,t)})}function w(){s.add({id:"login",type:"success",message:"Successfully logged in",expire:!0})}function it(n){return r.post("/api/auth/logout").success(function(){v.destroySession();n&&n.call()})}function rt(){var t={};return n.forEach(i.session.auth,function(i){n.forEach(i,function(n,i){t[i]=n.Permission})}),t}function ut(){var t={};return n.forEach(i.session.auth,function(i){n.forEach(i,function(n,i){t[i]=n.Reference})}),t}function ft(n){i.isAuthenticated=!0;r.defaults.headers.common.Authorization="Bearer "+n;f.put("connectToken",n)}function et(){i.isAuthenticated=!1;v.killUser();delete r.defaults.headers.common.Authorization;delete r.defaults.headers.common["X-UserRole"];delete r.defaults.headers.common["X-AccountIds"];f.remove("loginMode");f.remove("connectToken");f.remove("connectToken_secondary");i.$broadcast("user.loggedOut")}function ot(){var t=f.get("connectToken");return n.isDefined(t)?t:!1}function st(){return i.isAuthenticated}function b(n,r){t.log("%cCheck session >","color: orange","Checking...   ");var o=v.token();o?(v.createSession(o),l.loadOrganisations().then(function(n){p(n)}),v.user().then(function(r){if(i.session.auth=r.Permissions,i.isImpersonating=f.get("connectToken_secondary"),i.session.changePassword=r.Profile.PasswordMustBeChanged,i.session.isForcedReset=r.Profile.IsForcedReset,i.session.acceptTerms=r.Profile.AcceptedTermCondOn,i.tempCredentialLogin)t.log("%cCheck session >","color: orange","Password reset in progress, bypass terms and change password "),i.tempCredentialLogin=!1;else{if(r.Profile.AcceptedTermCondOn===undefined||!r.Profile.AcceptedTermCondOn){t.log("%cCheck session >","color: orange","User must accept terms");i.session.firstTimeUser=!0;e(function(){u.go("app.registerTerms")});return}if(r.Profile.PasswordMustBeChanged){t.log("%cCheck session >","color: orange","User must change password");i.session.firstTimeUser=!0;e(function(){u.go("app.change-password-forced")});return}var o=!!i.isImpersonating;if(!o&&c.status.shouldPrompt){t.log("%cCheck session >","color: orange","User must complete data quality");e(function(){u.current.name!=="app.user-welcome"&&u.current.name!=="app.user-insights"&&u.go("app.user-welcome")});return}o||c.status.shouldPromptContactsConcurrency!==!0||l.loadContactUpdates().then(function(n){a.open({data:n})})}t.log("%cCheck session >","color: orange","Session good, continue ^_^");v.setUser(r);i.$broadcast("user.authenticated");n&&n.call()},function(n){t.log("%cCheck session >","color: orange","Got an error calling user()",n);t.log("%cCheck session >","color: orange","Session bad, DESTROY x_x");v.destroySession();v.notAuthenticated();r&&r.call(this,n)})):(t.log("%cCheck session >","color: orange","No session present"),r?r.call():v.notAuthenticated())}function ht(){v.isAuthenticated&&(t.log("%cUnauthenticated","color: red","Destroying session and redirecting to login"),v.destroySession(),e(function(){location.hash.indexOf("#/login?returnUrl=")!==0&&(location.hash="/login?returnUrl="+encodeURIComponent(h.$$url),s.add({id:"not-authenticated",type:"warning",message:"Please login and try again"}))}))}function ct(){var n=o.get().$promise;return n.then(function(n){v.setUser(n)}),n}function y(){return i.session.user}function lt(n){n.avatarUrl=i.checkAvatar(n.Profile.AvatarUrl);n.fullName=n.Profile.FirstName+" "+n.Profile.LastName;n.Permissions!=undefined&&(i.loginMode=Object.keys(n.Permissions)[0],n.type=Object.keys(n.Permissions)[0],f.put("loginMode",i.loginMode));f.get("loginMode")?n.type=f.get("loginMode"):(r.defaults.headers.common["X-UserRole"]=i.loginMode,i.loginMode=="supplier"&&u.go("app.supplierDashboard"));c.setStatus(n.Profile.DataQualityStatus);i.session.user=n;i.loginMode=n.type;i.$broadcast("user.setUser")}function at(){i.session={role:null,user:null,accounts:{current:[],list:[]},auth:{},impersonator:{}}}function vt(t){var i=v.getPermissions();return n.isDefined(i[t])}function yt(t){var r=v.getPermissionRole(),i=0;return n.forEach(r,function(n){n===t&&i++}),i>0}function pt(n,t){if(!n||!t)return!1;var r=v.getPermissions(),i=r[t];return i&&i.indexOf(n)>=0}function wt(n){var t=y().Profile.ProfileType;return["1","2","3","4"].indexOf(n||t.toString())>-1}function bt(){var n=y().Profile.ProfileType.toString();return["1","2","3","4","5"].indexOf(n)>=0}function kt(n){return["1"].indexOf(n)>-1}function dt(n){var t=n||y()?y().Profile.ProfileType:null;return t==7}function gt(n){return n==8}function ni(){var n=y().Profile;return k(n.ProfileType)}function k(n){return n==7||n==8}function ti(){return n.isDefined(i.isImpersonating)}function ii(){var n,r,e;t.log("%cImpersonation >","color: purple","Ending impersonation session");n=v.getUser().Profile.UserId;r=f.get("connectToken_secondary");v.destroySession();e=r;v.createSession(e);v.user().then(function(r){l.loadOrganisations().then(function(n){p(n)});i.session.auth=r.Permissions;i.isImpersonating=f.get("connectToken_secondary");v.setUser(r);i.$broadcast("user.authenticated");t.log("%cImpersonation >","color: purple","Ended > Returning to user admin");u.go("app.adminProfile.edit",{profileId:n},{reload:!0}).then(function(){s.add({id:"impersonation.status",type:"success",message:"Impersonation session ended",expire:!0});i.$broadcast("user.impersonationEnded")})})}function p(n){i.session.orgCount=n.length;n.length===1&&(i.session.orgId=n[0].Id)}function ri(n,t,i){return r.post("/api/auth/register",n).success(function(n){t&&t.call(null,n)}).error(function(n){i&&i.call(null,n)})}function ui(n,t,i){return r.post("/api/auth/validateusername",'"'+n+'"').success(function(n){n?i&&i.call(null,n):t&&t.call()}).error(function(n){var t=n&&n.Message?n.Message:null;i&&i.call(null,t)})}function fi(n,t,i,u){var f=t?"?userIdIgnore="+t:"";return r.post("/api/auth/matchLoginIdEmailAddress"+f,'"'+n+'"').success(function(n){i&&i.call(null,n)}).error(function(n){var t=n&&n.Message?n.Message:null;u&&u.call(null,t)})}function ei(n){return r.post("/api/auth/matchCustomerEmailAddress",'"'+n+'"').then(function(n){return n.data})}function oi(n,t,i,u){return r.post("/api/auth/validateuseremail?userId="+t,'"'+n+'"').success(function(n){n?u&&u.call(null,n):i&&i.call()}).error(function(n){var t=n&&n.Message?n.Message:null;u&&u.call(null,t)})}function si(n){return r.post("api/auth/resetpassword",{token:n})}function hi(n){return r.post("/api/auth/forgotpassword",n)}function ci(n,t){return r.post("api/auth/resetpassword",{token:n,newPassword:t})}function li(){return b(function(){u.go("app.dash")})}var v={checkSession:b,createSession:ft,destroySession:et,token:ot,getToken:d,refreshToken:nt,login:tt,postLoginNotify:w,logout:it,isAuthenticated:st,notAuthenticated:ht,user:ct,getUser:y,setUser:lt,killUser:at,getPermissions:rt,getPermissionRole:ut,hasPermission:vt,hasPermissionParentRef:yt,canDo:pt,isInternalUser:wt,isContactsInternalUser:bt,isAdminUser:kt,isCustomerUser:dt,isCustomerDelegateUser:gt,isCustomerOrCustomerDelegateUser:k,isUserCustomerOrCustomerDelegate:ni,isImpersonating:ti,unimpersonate:ii,registerUser:ri,validateUsername:ui,validateUserEmail:oi,matchLoginIdEmailAddress:fi,matchCustomerEmailAddress:ei,checkResetPasswordToken:si,requestPasswordResetToken:hi,resetUserPassword:ci,updateSessionOrg:p,exitToDash:li};return v}n.module("component.auth").factory("authService",t);t.$inject=["$log","$rootScope","$http","$state","$cookieStore","$timeout","userData","notificationService","$location","dqService","amOrganisationsService","ContactValidation"]}(angular),function(){"use strict";function n(){return{restrict:"E",transclude:!1,bindToController:{details:"<"},controller:function(){},controllerAs:"breadcrumb",replace:!0,templateUrl:"breadcrumb.html"}}angular.module("component.breadcrumb").directive("breadcrumb",n)}(),function(n){"use strict";function t(){function r(){return t}function i(){t.history.length=0;t.currentPage=""}function u(r){i();n.forEach(r.history,function(n){t.history.push(n)});t.currentPage=r.currentPage}var t={history:[],currentPage:""};return{getBreadcrumbDetails:r,updateBreadcrumb:u,clearBreadcrumbDetails:i}}n.module("component.breadcrumb").factory("breadcrumbs",t)}(angular),function(){"use strict";function t(){return{restrict:"E",transclude:!1,scope:{availableAmount:"<?",minValue:"<?",inputId:"@?",batchSize:"<",selectedValue:"=",callbackFunction:"&",callbackDebounce:"@",disabled:"@",enterPress:"&"},controllerAs:"brickInput",bindToController:!0,controller:n,templateUrl:"brick-input-component.html",replace:!0}}function n(n,t,i,r,u){var f=this;if(n.$on("brickInput.toggle",function(n,t){f.inputId.indexOf(t)>-1&&r(function(){f.isPanelOpen=!0})}),!f.batchSize)return i.warn("A batch Size is missing. Include 'data-batch-size' on 'brick-input' directive"),!1;if(!f.selectedValue&&f.selectedValue!=0)return i.warn("A selected value is missing. Include data-selected-value on brick-input directive"),!1;f.minValue||(f.minValue=0);f.isPanelOpen=!1;var e=u.calculateNextValue(f.batchSize,f.availableAmount,f.minValue),o=u.calculatePreviousValue(f.batchSize,f.availableAmount,f.minValue),h=u.checkValueAvailability(f.batchSize,f.availableAmount,f.minValue),s=null;f.keyPressed=u.keyPressed;f.selectedValueIs=function(n,t,i){return n&&(n.preventDefault(),n.stopPropagation()),f.selectedValue=parseInt(t),f.requestedValue=parseInt(t),typeof i=="function"?i():void 0};f.closeDropdown=function(){var n=t.find("input"),i=n[0];f.isPanelOpen=!1;i.focus()};f.togglePanelVisibility=function(){f.isPanelOpen=!f.isPanelOpen};f.isValueAvailable=function(n,t){f.isRequestedValueAvailable=h(n,t)};f.debouncedCallback=function(){r.cancel(s);s=r(function(){f.callbackFunction()},f.callbackDebounce||0)};f.keyPress=function(n){n.keyCode===13&&scope.enterPress&&scope.enterPress()};n.$watch(angular.bind(f,function(){return f.requestedValue}),function(n){var t=n!==null&&n===undefined?f.availableAmount:n;f.nextRequestValue=e(t);f.previousRequestValue=o(t)});n.$watch(angular.bind(f,function(){return f.selectedValue}),function(n,t){f.nextValue=e(n);f.previousValue=o(n);f.requestedValue=f.selectedValue;n!==t&&f.callbackFunction&&f.debouncedCallback()});n.$watch(angular.bind(f,function(){return f.isPanelOpen}),function(n){n===!1&&(f.requestedValue=f.selectedValue)})}angular.module("component.brickInput").directive("brickInput",t);n.$inject=["$scope","$element","$log","$timeout","brickServices"]}(),function(){"use strict";function n(){function r(r,u,f,e){var o;return(r=parseInt(r),e=parseInt(e),f===0)?0:((i(r)||r<0)&&(r=0),o=n(r,e)?r+e:t(r,e)+e,f&&(o>f||u>f))?f:o<u?n(u,e)?u:t(u,e)+e:o}function u(r,u,f,e){var o;if((r=parseInt(r),e=parseInt(e),i(r)||f===0||!e)||(o=n(r,e)?r-e:t(r,e),o<=0||o<e||o<u))return 0;if(f){if(f<u||f===e)return 0;if(o>=f)return n(f,e)?f-e:t(f,e)}return o}function f(t,r,u,f,e){t=parseInt(t);e=parseInt(e);var o=n(t,e);if(!e||i(t)||t<0||t===r)return!1;if(t===0)return!0;if(f){if(t===f)return!0;if(t>f)return!1}return o&&t>=u?!0:(t<u,!1)}function n(n,t){return(n=parseInt(n),t=parseInt(t),!n)?!1:n%t==0?!0:!1}function t(n,t){return n=parseInt(n),t=parseInt(t),Math.floor(n/t)*t}function e(n,t){return n.which===t?!0:!1}function i(n){return n===""||n===undefined||n===null||isNaN(n)?!0:!1}function o(n,t,i){return function(u){return r(u,i,t,n)}}function s(n,t,i){return function(r){return u(r,i,t,n)}}function h(n,t,i){return function(r,u){return f(r,u,i,t,n)}}return{calculateNextValue:o,calculatePreviousValue:s,checkValueAvailability:h,keyPressed:e}}angular.module("component.brickInput").factory("brickServices",n)}(),function(){"use strict";function n(){function n(){}function r(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream}function t(){return/CSRConnect-native/.test(navigator.userAgent)&&!window.MSStream}function i(){return/Android/.test(navigator.userAgent)}function u(){return!!document.documentMode}function f(){return"undefined"!=typeof InstallTrigger}function e(){return/Edge/.test(navigator.userAgent)}function o(){return!t()&&!i()}return n.prototype={isiOs:r,isiOsApp:t,isAndroid:i,isIe:u,isFirefox:f,isEdge:e,isPrintFriendly:o},new n}angular.module("component.browserPlatform").factory("browserPlatform",n);n.$inject=[]}(),function(n){"use strict";function t(n,t,r){function u(s,f,a){var specifiedDate=r.getFilterValueApplyToFilters(s,f,a.target);return(specifiedDate===null||specifiedDate===undefined)&&a.hasOwnProperty("singleEmptyStartOverride")&&a.singleEmptyStartOverride!==undefined&&(specifiedDate=eval(a.singleEmptyStartOverride)),specifiedDate}var f=[{label:"This month",start:moment().startOf("month"),end:moment().endOf("month")},{label:"Last month",start:moment().subtract(1,"month").startOf("month"),end:moment().subtract(1,"month").endOf("month")},{label:"Last 6 months",start:moment().subtract(6,"month").startOf("month"),end:moment().subtract(1,"month").endOf("month")},{label:"This financial year",start:moment().quarter()>=3?moment().month("July").startOf("month"):moment().subtract(1,"year").month("July").startOf("month"),end:moment().quarter()>=3?moment().add(1,"year").month("June").endOf("month"):moment().month("June").endOf("month")},{label:"Last financial year",start:moment().quarter()>=3?moment().month("July").subtract(1,"year").startOf("month"):moment().subtract(2,"year").month("July").startOf("month"),end:moment().quarter()>=3?moment().month("June").endOf("month"):moment().subtract(1,"year").month("June").endOf("month")}];return{restrict:"AE",controller:i,controllerAs:"cal",templateUrl:"calendar.html",replace:!0,scope:{start:"=",end:"=",filters:"=",customPresets:"=",applyToLocation:"=",earliestDate:"=",latestDate:"=",single:"=",target:"=",format:"="},link:function(n,i,e){var s,o;moment.locale()==="en-AU"&&moment.locale("en-au");s=n.single!==undefined;i.addClass(s?"daterange--single":"daterange--double");var c=t.search(),h={element:$(i),earliest_date:n.earliestDate===undefined?"January 1, 2008":n.earliestDate,latest_date:n.latestDate===undefined?new Date(moment(new Date).add(2,"years")):n.latestDate,callback:function(){n.cal.apply(this)},same_day_range:!0,format:{preset:"DD/MM/YYYY",input:"DD/MM/YYYY"}},l=n.filters;s?h.current_date=u(c,l,e):(h.start_date=r.getFilterValueApplyToFilters(c,l,e.start),h.end_date=r.getFilterValueApplyToFilters(c,l,e.end),h.presets=typeof n.customPresets=="object"?n.customPresets:f);o=new Calendar(h);n.$watch("filters",function(t){var f=s?t[n.target]!==o.current_date:!moment(t[e.start]).isSame(o.start_date,"day")||!moment(t[e.end]).isSame(o.end_date,"day"),i;f&&(i=n.filters,s?o.current_date=u({},i,e):(o.start_date=r.getFilterValueApplyToFilters({},i,e.start),o.end_date=r.getFilterValueApplyToFilters({},i,e.end)),o.calendarSetDates())},!0)}}}function i(n,t,i,r){var u=this,f=function(n){var u={},s,h,f,e;if(i.hasOwnProperty("single")&&i.single!==undefined?u[i.target]=n.current_date:(u[i.start]=n.start_date,u[i.end]=n.end_date),s=typeof i.applyFilters!="undefined",s)getObjectByString(t.$parent,i.applyFilters.replace("(","").replace(")",""))(u);else{h=typeof i.applyToLocation=="undefined"||i.applyToLocation.toLowerCase().trim()==="true";for(f in u)if(u.hasOwnProperty(f))if(e=u[f],h&&r.search(f,moment(e).format("YYYY-MM-DD")),i.format!=="undefined"&&(e=new Date(moment(e).format(i.format))),f.contains(".")){var o=f.split("."),c=o.length-1,l=o.splice(0,c).join(".");getObjectByString(t.filters,l)[o[c-1]]=e}else t.filters[f]=e;t.$apply()}};u.apply=f}n.module("component.calendar").directive("calendar",t);t.$inject=["$log","$location","locationFilterProvider"];i.$inject=["$log","$scope","$attrs","$location"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"clock.html",controllerAs:"clockCtrl",controller:t,replace:!0}}function t(n,t){function r(){i.time.raw=new Date;i.timeout=t(r,1e3)}function u(){t.cancel(i.timeout)}var i=this;i.time={};i.timeout=null;r();n.$on("$destroy",u)}n.module("component.clock").directive("clock",i);t.$inject=["$scope","$timeout"]}(angular),function(){"use strict";function n(){function n(){}return{restrict:"A",controller:t,controllerAs:"cms",link:n}}function t(n,t,i,r,u,f,e,o,s,h){function a(){return f.isCMSActived()}function d(){c.activePage&&c.activePage.regions&&angular.forEach(c.activePage.regions,function(n){n.element.removeAttr("style");n.element.removeAttr("dir")})}function g(){return c.activePage.pageVersion!=null}function nt(){return c.activeRegion!=null}function tt(){return h.absUrl()+"?uccid="+c.activePage.pageVersion}function it(n,r){a()&&(i.info("CMS > state change intercepted, determining status..."),c.activeRegion&&(n.preventDefault(),o.swal({title:"Unsaved regions",text:"You are currently editing a region, do you want to abandon your changes to "+c.activeRegion.id+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Ok",cancelButtonText:"Cancel"},function(n){if(n)i.info("CMS > ... user wants to navigate away, continue the state change"),t.go(r);else{i.info("CMS > ... user wants to keep on editing! Prevented state change");return}})));wt();i.info("CMS > No pending changes. Continuing with state change, vars cleared:",c.activePage)}function rt(n){return'<span class="'+y+'" ng-click="cms.editRegion(\''+n+'\')">                        <span class="cms-region-label">                            <i class="fa fa-pencil"><\/i><span class="cms-region-label-text">'+n+"<\/span>                        <\/span>                    <\/span>"}function ut(){c.activePage&&c.activePage.regions&&(angular.forEach(c.activePage.regions,function(t,u){t.element.find("."+y).length||(i.info("CMS > adding overlay DOM for region: ",u,t),t.element.append(r(angular.element(rt(u)))(n)))}),angular.element("body").addClass("cms-active"))}function b(){c.activePage&&c.activePage.regions&&(i.info("CMS > removing all region overlays",angular.element("."+y).length),angular.element("."+y).remove())}function ft(){c.activePage&&c.activePage.regions&&(i.info("CMS > adding all region overlays"),ut())}function et(){c.activePage&&c.activePage.regions&&(i.info("CMS > deactivating all region overlays"),b())}function ot(){return l}function st(){o.swal({title:"Discard this draft?",text:"By discarding this draft all editable regions on this page will be reset to their respective live versions. Are you sure you wish to do this?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(n){n&&(i.info("CMS > discarding draft page:",c.activePage.id),f.discardPageRegions(c.activePage.id,c.activePage.pageVersion).then(function(){c.activePage.pageVersion=null;v();u.location.reload()}))})}function ht(){c.activePage?c.activePage.pageVersion?l="Edit this page ("+c.activePage.pageVersion+")":(i.info("CMS > activate page but no page version setting default button text"),l=p):(i.info("CMS > no active page, setting default button text"),l=p)}function v(){a()&&(i.info("CMS > Deactivating CMS",c.activePage),et(),d(),f.deactivateCMS());ht();angular.element("body").removeClass("cms-active")}function ct(){o.swal({title:"Revert to the live version?",text:"By reverting this draft the active region will be reset to its current live version. Are you sure you wish to do this?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(n){n&&u.location.reload()})}function lt(){c.activePage&&o.swal({title:"Do you wish to publish this page?",text:"By publishing this draft all editable regions on this page will become visable on the live site. Are you sure you wish to do this?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(n){n&&(i.info("CMS > publishing the draft page:",c.activePage.id),f.publishPageRegions(c.activePage.id,c.activePage.pageVersion).then(function(n){i.info("CMS > performed publish regions and got back:",n);s.add({type:"success",message:c.activePage.pageVersion+" has been published successfully",expire:!0});c.activePage.pageVersion=null;v()},function(){s.add({type:"error",message:c.activePage.pageVersion+" has encountered an error whilst publishing",expire:!0})}))})}function at(){i.info("CMS > share draft page:",c.activePage.id);o.swal({title:"Share",text:"Please copy and paste the following link in order to share this with another user           "+h.absUrl()+"?uccid="+c.activePage.pageVersion,type:"info",showCancelButton:!1,confirmButtonText:"Ok"},function(n){n})}function vt(n){o.swal({title:"Draft page not found",text:n,type:"error",showCancelButton:!1,confirmButtonText:"Ok"},function(){t.reload();return})}function k(){i.info("CMS > Activating CMS");c.activePage&&c.activePage.regions?(i.info("CMS > getting pageRegions from server"),f.getPageRegions(c.activePage,c.activePage.pageVersion).then(function(n){n.InvalidPageReference?(vt(n.InvalidPageReferenceMessage),c.activePage.pageVersion=null):(i.info("CMS > pageRegionsReturned from server :",n.PageRegions),l=n.PageRegions.length?"Editing ("+n.PageReference+")":w,angular.forEach(n.PageRegions,function(n){var t=c.activePage.regions[n.Name];t&&(i.info("CMS > replacing region: "+t),t.element.html(n.Content))}),c.activePage.pageVersion=n.PageReference);ft()})):l=w;a()||f.activateCMS()}function yt(n){if(i.info("CMS > Edit region",n),c.activeRegion&&o.swal({title:"Unsaved regions",text:"Whoa there, one step at a time! Please complete your edits on "+c.activeRegion.id+" before continuing.",type:"warning",showCancelButton:!1,confirmButtonText:"Ok"},function(){return}),c.activePage.regions[n]){b();c.activeRegion=c.activePage.regions[n];i.info("CMS > Setting the active region:",c.activeRegion);l="Editing ("+c.activeRegion.id+")";c.activeRegion.element.trumbowyg({btnsDef:{image:{dropdown:["insertImage","upload"],ico:"insertImage"}},btns:["viewHTML","formatting","|","btnGrp-design","|","link","|","image","|","btnGrp-justify","|","btnGrp-lists","|","foreColor","|","horizontalRule"],autogrow:!0,semantic:!1,fileUploadUrl:"api/content/asset/?access_token="+e.token()});c.activeRegion.element.on("click","a[href]",function(n){n.preventDefault();i.warn("Click prevented")});i.info("CMS > Editing",n)}}function pt(){var n=c.activeRegion,t;n?(i.info("CMS > Saving region:"+n.id),n.element.trumbowyg("saveSelection"),t=n.element.trumbowyg("html"),i.info("CMS > HTML Content gathered: ",t),f.saveRegion(c.activePage.id,n.id,t).then(function(t){n.element.trumbowyg("destroy");c.activeRegion=null;i.info("setting the new page version",c.activePage);c.activePage.pageVersion=t.PageReference;v();s.add({type:"success",message:"Region "+n.id+" has been saved",expire:!0})})):s.add({type:"warning",message:"No regions changed, please select a page region to edit",expire:!0})}function wt(){c.activePage=null;c.activeRegion=null}function bt(n,t,r,u){c.activePage={id:n,element:t,regions:r,pageVersion:u};(a()||c.activePage.pageVersion)&&(i.info("CMS > CMS was activated on another page, so turn it on now"),k());i.info("CMS > Page >",n," > Version > ",u," registered with CMS, ready to edit",Object.keys(r).length,"region(s)!",c.activePage)}var c=this,y="cms-region-overlay",p="Edit this page",w="Editing (live)",l=p;c.activePage=null;c.activeRegion=null;c.registerPage=bt;c.editRegion=yt;c.saveRegion=pt;c.deactivateCms=v;c.revertToLive=ct;c.publishDraft=lt;c.shareDraft=at;c.activateCms=k;c.discardCmsDraft=st;c.isCmsActive=a;c.isDraftActive=g;c.isEditingRegion=nt;c.getMainButtonText=ot;c.getDraftLink=tt;n.$on("$stateChangeStart",it);n.$on("user.logout",function(){a()&&v()})}angular.module("component.cms").directive("cms",n);n.$inject=["$log"];t.$inject=["$scope","$state","$log","$compile","$window","cmsService","authService","SweetAlert","notificationService","$location"]}(),function(){"use strict";function n(n){var t={};return t.pageRegions=n("api/content/page/:pageName/regions/:version",{pageName:"@pageName",version:"@version"}),t.region=n("api/content/page/:pageName/region/:regionName"),t.pageTemplates=n("api/content/templates",null,{get:{isArray:!0}}),t.pageStatus=n("api/content/templates",null,{get:{isArray:!0}}),t.page=n("api/content/pages"),t}angular.module("component.cms").factory("cmsResources",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,t,i,r,u){function e(){return f=!f,f?n.$broadcast("cms.activated"):n.$broadcast("cms.deactivated"),f}function o(){f=!0;n.$broadcast("cms.activated")}function s(){f=!1;n.$broadcast("cms.deactivated")}function h(){return f}function c(n,t){return u.debug("CMS > retrieving regions for page: "+n.id+" and version: "+t),r.pageRegions.get({version:t,pageName:n.id}).$promise}function l(n,t){return u.debug("CMS > publishing regions for page: "+n+" and version: "+t),r.pageRegions.save({version:t,pageName:n}).$promise}function a(n,t){return u.debug("CMS > removing regions for page: "+n+" and version: "+t),r.pageRegions.delete({version:t,pageName:n}).$promise}function v(n,t,i){i=i.replace(/>\s\s+</g,"><");var u=window.btoa(unescape(encodeURIComponent(i)));return r.region.save({pageName:n,regionName:t},{content:u}).$promise}function y(){return r.pageTemplates.get().$promise}function p(){return r.pageTemplates.get().$promise}function w(n){return r.page.save(n).$promise}var f=!1;return{saveRegion:v,getPageRegions:c,toggleCMSStatus:e,isCMSActived:h,activateCMS:o,deactivateCMS:s,discardPageRegions:a,publishPageRegions:l,getPageTemplates:y,getPageStatusOptions:p,createPage:w}}angular.module("component.cms").factory("cmsService",n);n.$inject=["$rootScope","$http","notificationService","cmsResources","$log"]}(),function(){"use strict";function n(){function n(n,t,i,r){var f=r[0],u=r[1];u.pageId=i.cmsPage;f.registerPage(u.pageId,t,u.regions,u.pageVersion)}return{require:["^cms","cmsPage"],restrict:"A",controller:t,controllerAs:"cmsPage",link:n}}function t(n,t,i,r){function f(n,i){u.regions[n]={id:n,element:i};t.info("CMS > Regions >",n,"registered with page")}var u=this;u.pageId=null;u.regions={};u.pageVersion=i.search()[r.pageVersionQueryString];u.registerRegion=f}angular.module("component.cms").directive("cmsPage",n);n.$inject=[];t.$inject=["$scope","$log","$location","cmsConstants"]}(),function(){"use strict";function n(){function n(n,t,i,r){var u=i.cmsRegion;r.registerRegion(u,t)}return{require:"^cmsPage",restrict:"A",link:n}}angular.module("component.cms").directive("cmsRegion",n);n.$inject=["$log"]}(),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"csatGoodButton.html",controllerAs:"castGoodButtonCtrl",controller:t,replace:!0,scope:{responseClick:"&"}}}function t(n){n.buttonClick=function(){n.responseClick({response:"good"})}}n.module("component.csatTray").directive("csatGoodButton",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"csatNotGoodButton.html",controllerAs:"castNotGoodButtonCtrl",controller:t,replace:!0,scope:{responseClick:"&"}}}function t(n){n.buttonClick=function(){n.responseClick({response:"notGood"})}}n.module("component.csatTray").directive("csatNotGoodButton",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"E",templateUrl:"csatSpectacularButton.html",controllerAs:"castSpectacularButtonCtrl",controller:t,replace:!0,scope:{responseClick:"&"}}}function t(n){n.buttonClick=function(){n.responseClick({response:"spectacular"})}}n.module("component.csatTray").directive("csatSpectacularButton",i);t.$inject=["$scope"]}(angular),function(){"use strict";function i(){return{restrict:"E",templateUrl:"csatTray.html",controllerAs:"csatTrayCtrl",controller:t}}function t(t,i,r,u,f,e,o,s){function y(){if(p()){var n=angular.element(document.querySelector("#csatButton"));n.addClass("csat-button-animated csat-button-bounce")}}function p(){var n=s.store().get("LastCsatBounce")==undefined?moment().subtract(a+1,"h"):s.store().get("LastCsatBounce");return n<moment().subtract(a,"h")?(s.store().set("LastCsatBounce",moment()),!0):!1}function v(){var i=angular.element(document.querySelector("#csatButton")),n;i.removeClass("csat-button-animated csat-button-bounce");n=angular.element(document.querySelector("#csat-tray"));n.removeClass("csat-tray-slide-in-exit csat-tray-slide-out");n.addClass("csat-tray-slide-in-enter csat-tray-slide-in");t.trayOpen=!0}function w(){var n=angular.element(document.querySelector("#csat-tray"));n.removeClass("csat-tray-slide-in-enter csat-tray-slide-in");n.addClass("csat-tray-slide-in-exit csat-tray-slide-out");i(function(){t.trayOpen=!1;t.step=1;t.comment=""},350)}function b(n){return t.questions.find(function(t){return t.Feature.toLowerCase()===n.toLowerCase()})}function k(n){return Enums.csatQuestionResponse[n]}function d(){return l===!0?f.csatChannels.InAppPrompt:l===!1?f.csatChannels.InAppPassive:void 0}function g(n){return n.toLowerCase().indexOf("order")>-1?Enums.csatTrigger.ordering:n.toLowerCase().indexOf("payment")>-1?Enums.csatTrigger.payments:n.toLowerCase().indexOf("statement")>-1?Enums.csatTrigger.statements:Enums.csatTrigger.other}var a=48;t.openTray=v;t.closeTray=w;t.bounceTray=y;t.trigger=undefined;t.step=1;t.trayOpen=!1;t.question="How is your experience today?";t.questions={};t.comment="";var c=undefined,h=!1,l=!1;t.responseClick=function(i){f.trackResponse({questionId:t.question.Id,trigger:t.trigger,channel:d(),response:k(i)}).then(function(t){c=t;u.info(n,"Successfully tracked CSAT Response")});t.step=2};t.submitComment=function(r){if(c===undefined){i(function(){t.submitComment(r)},500);return}f.updateResponse({id:c.Id,comment:r}).then(function(){u.info(n,"Successfully updated CSAT Response")});t.closeTray();i(function(){h=!1},350)};t.trayEnabled=function(){return h};t.showTray=function(n){f.getQuestions().then(function(r){t.questions=r;var u=b(n);u!=undefined&&(t.question=u,h=!0,i(function(){t.bounceTray()},1e3))})};e.$on("$stateChangeSuccess",function(){h=!1});t.init=function(){};t.$on("csat.showTray",function(n,i){t.trigger=i.trigger;t.showTray(i.feature);f.getPromptData(g(i.trigger),i.trigger).then(function(n){t.promptData=n;t.promptData.ShouldPrompt===!0&&(v(),l=!0)})});t.init()}var n="[csatTrayDirective]";angular.module("component.csatTray").directive("csatTray",i);t.$inject=["$scope","$timeout","$location","$log","csatTrayService","$rootScope","featureToggle","devicePreferences"]}(),function(){"use strict";function n(n){var t={};return t.questions=n("api/csat/questions"),t.trackResponse=n("api/csat/trackResponse"),t.updateResponse=n("api/csat/updateResponse"),t.promptData=n("api/csat/promptData/:trigger/:triggerString"),t}angular.module("component.csatTray").factory("csatTrayResource",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(n,t,i){function r(){return i.questions.query().$promise}function u(n){return i.trackResponse.save(n).$promise}function f(n){return i.updateResponse.save(n).$promise}function e(n,t){return i.promptData.get({trigger:n,triggerString:t}).$promise}return{getQuestions:r,trackResponse:u,updateResponse:f,getPromptData:e,csatChannels:{InAppPassive:"InApp/Passive",InAppPrompt:"InApp/Prompt",EmailPostPrompt:"Email/PostPrompt"}}}n.module("component.csatTray").factory("csatTrayService",t);t.$inject=["$rootScope","$log","csatTrayResource"]}(angular),function(n){"use strict";function t(n){var t={};return t.refreshStatus=n("api/dq/dataqualitystatus",null,{query:{isArray:!1}}),t.contactsDqRemindLater=n("api/dq/updatecontactsreminder",null,{query:{isArray:!1}}),t}n.module("component.dq").factory("dqResource",t);t.$inject=["$resource"]}(angular),function(n){"use strict";function t(n,t,i){function f(n){u(n,!0)}function e(i,f){var e={UserPrompted:!!i.userPrompted,AvatarSkipped:!!i.avatarSkipped,DetailsConfirmed:!!i.detailsConfirmed,RemindLater:!!i.remindLater};e.UserPrompted||e.AvatarSkipped||e.DetailsConfirmed||e.RemindLater?(n.log("%cData Quality - Update Status > ","color: grey","Saving user status >",i),t.refreshStatus.save(null,e).$promise.then(function(n){r.setStatus(n);f!=undefined&&f()})):u(f)}function u(i,u){u||!r.dataLoaded||Date.now()-r.lastStatusCall>1e3?(n.log("%cData Quality - Refresh Status > ","color: grey","Initiating server side call for fresh status."),r.lastStatusCall=Date.now(),t.refreshStatus.query(null,function(n){r.setStatus(n);i!=undefined&&i()},null)):(n.log("%cData Quality - Refresh Status > ","color: grey","Server side call for fresh status skipped."),i!=undefined&&i())}function o(t){if(r.dataLoaded&&r.status.generatedDateTimeUtc>=t.GeneratedDateTimeUtc){n.log("%cData Quality - Apply status > ","color: grey"," new status ignored, same as existing or stale.");return}r.status.shouldPrompt=t.ShouldPrompt;r.status.isNewUser=t.IsNewUser;r.status.outstandingAreas=t.OutstandingAreas;r.status.percentComplete=t.PercentComplete;r.status.insightsPercentComplete=t.InsightsPercentComplete;r.status.insightQuestionsEnabled=t.InsightQuestionsEnabled;r.status.reminderDateUtc=t.ReminderDateUtc;r.status.detailsConfirmedDateUtc=t.DetailsConfirmedDateUtc;r.status.generatedDateTimeUtc=t.GeneratedDateTimeUtc;r.status.avatarUploadedByUser=t.AvatarUploadedByUser;r.status.isReminder=t.ReminderDateUtc!=null;r.status.shouldPromptContactsConcurrency=t.ShouldPromptContactsConcurrency;r.dataLoaded=!0;n.log("%cData Quality - Apply Status > ","color: grey",r.status)}function s(n){return i(function(i,r){t.contactsDqRemindLater.save({reminderOption:n},i(),r())})}var r={updateStatus:e,userChanged:f,setStatus:o,lastStatusCall:0,dataLoaded:!1,status:{shouldPrompt:!1,isNewUser:!1,outstandingAreas:[],percentComplete:100,insightsPercentComplete:0,reminderDateUtc:null,detailsConfirmedDateUtc:null,generatedDateTimeUtc:null,avatarUploadedByUser:!1,isReminder:!1,shouldPromptContactsConcurrency:!1},contactRemindMeLater:s};return r}n.module("component.dq").factory("dqService",t);t.$inject=["$log","dqResource","$q"]}(angular),function(n){"use strict";function i(){return{require:"^form",restrict:"AE",isolate:!0,scope:{},controller:t,controllerAs:"dqRemind",templateUrl:"dataQualityRemindLater.html"}}function t(n,t){n.remindLaterClicked=function(){t.updateStatus({remindLater:!0},function(){n.$emit("dq.remindLater")})}}n.module("component.dqRemind").directive("dqRemind",i);t.$inject=["$scope","dqService"]}(angular),function(n){"use strict";function i(){return{restrict:"A",templateUrl:"dateIcon.html",controllerAs:"dateIcon",controller:t,bindToController:{manualDate:"=dateIcon",dateIconVariant:"@"}}}function t(n,t){function u(){i.date=new Date;r=t(u,1e3)}function f(){r&&t.cancel(r)}var i=this,r=null;i.date=i.manualDate||null;i.manualDate||u();n.$on("$destroy",f)}n.module("component.dateIcon").directive("dateIcon",i);t.$inject=["$scope","$timeout"]}(angular),function(){"use strict";function n(n,t,i,r){function f(){var n=r.getUser(),f;return n&&n.Profile?(f="connect."+n.Profile.UserId,t.log("[devicePrefs] User store set to %s",f),u=i.getNamespacedStore(f)):(t.log("[devicePrefs] User session not ready, standing by..."),null)}var u=f();return n.$on("user.setUser",f),{store:function(){return u}}}angular.module("component.devicePreferences",["angular-storage"]).factory("devicePreferences",n);n.$inject=["$rootScope","$log","store","authService"]}(),function(n){"use strict";function r(){return{restrict:"E",templateUrl:"documentSearch.html",isolate:!0,scope:{onSelect:"&",isOpen:"="},controller:i,controllerAs:"docSearchCtrl"}}function i(i,r,u,f,e,o,s,h,c,l,a,v,y,p){function tt(){u(rt)}function rt(n){g=[{}];i.layout.page=1;it(n)}function ut(){i.filters=n.copy(d);r.$$search={};r.$$compose()}function ft(t){var r=[],u=keyFlip(Enums.documentType)[t];n.forEach(Object.keys(Enums.documentSortType),function(n,i){if(n.contains("_")){if(t&&t!==Enums.documentSortType.all){var f=n.substring(0,n.indexOf("_"));f===u&&r.push({Id:i,Text:et(n)})}}else r.push({Id:i,Text:et(n)})});i.filterSortByItems=r}function et(n){var r=keyFlip(Enums.documentType)[i.filters.type],t=EnumDescriptions.documentSortType[n];return r==="orders"&&t.toLowerCase()==="date"?"Requested For":t}function ot(){var n=[];return b(0)&&n.push({Id:0,Text:"Any Status"}),b(1)&&n.push({Id:1,Text:"Arrived Onsite"}),b(2)&&n.push({Id:2,Text:"Closed"}),b(3)&&n.push({Id:3,Text:"Complete"}),b(4)&&n.push({Id:4,Text:"Confirmed"}),b(5)&&n.push({Id:5,Text:"Credit"}),b(6)&&n.push({Id:6,Text:"Current"}),b(7)&&n.push({Id:7,Text:"Delivering"}),b(8)&&n.push({Id:8,Text:"Due"}),b(9)&&n.push({Id:9,Text:"Expired"}),b(10)&&n.push({Id:10,Text:"On Board"}),b(11)&&n.push({Id:11,Text:"Paid / Complete"}),b(12)&&n.push({Id:12,Text:"Pending"}),b(13)&&n.push({Id:13,Text:"Scheduled / Scheduled for Pickup"}),b(14)&&n.push({Id:14,Text:"Processing"}),b(15)&&n.push({Id:15,Text:"Processed"}),n}function lt(){var t=[];return n.forEach(Object.keys(Enums.documentSubType),function(n,i){t.push({Id:i,Text:EnumDescriptions.documentSubType[n]})}),t}function at(){var t=[];return n.forEach(Object.keys(Enums.flag),function(n,i){i===0?t.push({Id:i,Text:"All flags"}):t.push({Id:i,Text:EnumDescriptions.flag[n]+" flag"})}),t}function st(){console.log("[TEST] SETTING FILTER DOCUMENT TYPES");var n=[];return console.log("[TEST]  WHAT IS AUTH SERVICE?",e),e.hasPermission("Customer/Invoice")&&n.push({Id:1,Text:"Invoices"}),e.hasPermission("Customer/Quote")&&n.push({Id:2,Text:"Quotes"}),e.hasPermission("Customer/SalesOrder")&&n.push({Id:3,Text:"Orders"}),e.hasPermission("Customer/Deliveries")&&n.push({Id:4,Text:"Deliveries"}),n}function b(n){var u=i.filters.type,t,f,r;for(i.filters.type&&(u=i.filters.type),t="",o.isReady()&&(t=","+Object.keys(o.getSbus(!0)).join(",")+","),f=s.filter(function(n){var i=searchEnumCaseInsensitive(Enums.sbu,n.Sbu),r=searchEnumCaseInsensitive(Enums.documentType,n.DocType),f=!i||t===""||t.contains(","+i+","),e=!r||u==="0"||r.toString()===u;return f&&e}),r=0;r<f.length;r++)if(searchEnumCaseInsensitive(Enums.documentStatus,f[r].Status)===n)return!0;return!1}function vt(){r.search("status",null);i.filters.status="0"}function yt(n){return n.Id==this?n.Id:null}function it(r){var u,f;a.getByKey("docSearchCtrl").data=[];a.getByKey("docSearchCtrl").totalCount=0;i.layout.busy=!0;u=n.copy(r||i.filters);u.keyword!=null&&u.keyword.isEmpty()&&delete u.keyword;ft(u.type);f=i.filterSortByItems.find(yt,u.sortBy);f||(u.sortBy=i.filterSortByItems[0].Id.toString(),i.filters.sortBy=u.sortBy,r&&(i.filters.sortBy=u.sortBy));u.fromDate=u.fromDate?moment(u.fromDate).format("YYYY-MM-DD"):null;u.toDate=u.toDate?moment(u.toDate).format("YYYY-MM-DD"):null;u.perPage=i.layout.size;u.page=i.layout.page||1;u.offset=g[u.page-1];k!=null&&(k.$cancelRequest(),h.log(t,"Cancelling existing query"));h.log(t,"Querying documents:",u);k=c.query(u,function(t){g[u.page]=t.Progress;w.items=n.isArray(t.Results)?t.Results.map(pt):null;a.getByKey("docSearchCtrl").totalCount=t.TotalDocuments;i.layout.updatePages(t.TotalDocuments);i.layout.busy=!1;i.layout.initialised=!0;k=null});i.filterStatuses=ot()}function pt(n){var t=w.isRelease(n.type,n.accountId,n.sbuCode),i;return n.typeName=w.types[n.type],n.typeNameAlt=t?"Release":w.types[n.type],n.urlParams={accountId:n.accountId,documentType:n.typeName,documentNo:n.id},n.pdfUrl=l.isPdfEnabled(n)?l.getPdfUrl(n.accountId,n.type,n.id):null,i=t&&n.DocumentSummary.PulldownOrderNo!==0?"releases":w.types[n.type],n.iconSrc="/assets/img/icons/docs/"+i+".svg",n}function wt(){var t=n.copy(d),r=n.copy(i.filters);return delete t.fromDate,delete t.toDate,delete r.fromDate,delete r.toDate,!n.equals(t,r)}function ht(){return{fromDate:moment().subtract(6,"M").format("YYYY-MM-DD"),toDate:moment().add(1,"M").format("YYYY-MM-DD")}}function bt(){var n=ht();r.search("fromDate",n.fromDate);r.search("toDate",n.toDate);v.getFilterValueApplyToFilters(r.search(),i.filters,"fromDate");v.getFilterValueApplyToFilters(r.search(),i.filters,"toDate")}function kt(){var n=ht();return moment(i.filters.fromDate).isSame(n.fromDate)&&moment(i.filters.toDate).isSame(n.toDate)}function ct(){ut();i.isOpen=!1}function dt(){h.log(t,"Selected docs: ",a.elements[0].data);i.onSelect({docs:a.elements[0].data});ct()}var w=this,d={type:Enums.documentType.all.toString(),subType:Enums.documentSubType.all.toString(),flag:Enums.flag.none.toString(),keyword:null,fromDate:new Date(moment().subtract(3,"M").format("YYYY-MM-DD")),toDate:new Date(moment().add(1,"year").endOf("year").format("YYYY-MM-DD")),sort:Enums.sortOrder.desc.toString(),sortBy:Enums.documentSortType.date.toString(),status:Enums.documentStatus.all.toString()},nt,k,g;i.filters=n.copy(d);w.selectedDocs={};a.addKey("docSearchCtrl");nt=a.getByKey("docSearchCtrl");nt.totalCount=0;nt.data=[];k=null;g=[{}];w.docTypeFilterChange=vt;w.types=Object.keys(Enums.documentType);w.flags=Enums.flag;w.sortOrder=["ascending","descending"];w.sortType=Object.keys(Enums.documentSortType);w.iconPdf=f.iconPdf;w.items=null;i.layout={};w.search=it;w.close=ct;w.isRelease=l.isRelease;w.selectDocuments=dt;w.expandDateFilter=bt;w.hasExpandedDateFilter=kt;w.clearFilters=ut;w.hasActiveFilters=wt;i.filterDocTypes=st();i.filterDocSubTypes=lt();i.filterDocFlags=at();i.filterStatuses=ot();ft(Enums.documentType.all);i.layoutChangeCallback=function(){it()};i.$on("$locationChangeSuccess",function(){if(p.current.name==="app.documents"&&y.set("documentLauncher",p.current.name,{$$search:location.hash}),r.url().contains("/jobs/")&&i.layout.initialised){var t=r.search();Object.keys(t).length?n.forEach(t,function(n,t){i.$broadcast("filters.init",t)}):i.filters=n.copy(d);u(rt)}});i.$watch("filters",function(n,t){(t.type!==n.type||n.fromDate>t.fromDate||n.toDate<t.toDate)&&(a.getByKey("docSearchCtrl").data=[])},!0);o.isReady()?tt():i.$on("accounts.dataReady",tt);i.$on("accounts.changed",function(){h.log(t,"Reinitialising after account change");tt()});i.$on("user.authenticated",function(){i.filterDocTypes=st()})}n.module("component.documentSearch").directive("documentSearch",r);var t="[document-search]";i.$inject=["$scope","$location","$timeout","DOCS_CONFIG","authService","accountsService","DOCUMENTSTATUS_CONFIG","$log","documents","documentsHelper","selectionService","locationFilterProvider","$previousState","$state"]}(angular),function(n){"use strict";function t(){return{restrict:"A",transclude:!0,templateUrl:"dots-loader.html",link:i}}function i(){}n.module("component.loaders").directive("dotsLoader",t)}(angular),function(){"use strict";function n(){return{pdf:"PDF",csv:"CSV",excel:"Excel"}}angular.module("component.export").factory("exportService",n)}(),function(n){"use strict";function t(t,i,r,u){function f(r,f,e,o,s){function a(){var r=u.isEnabledFor(e.featureToggle);r?(l||s(function(n,r){l=r;n[n.length++]=i.$$createComment("end featureToggle",e.featureToggle);c={clone:n};t.enter(n,f.parent(),f)}),n.element(c.clone)):(h&&(h.remove(),h=null),l&&(l.$destroy(),l=null),c&&(h=n.element(c.clone),t.leave(h).done(function(n){n!==!1&&(h=null)}),c=null))}var c,l,h;r.featureToggle=u;r.$watch("featureToggle.toggles",a)}return{restrict:"A",transclude:"element",priority:600,terminal:!0,$$tlb:!0,link:f}}n.module("component.featureToggle").directive("featureToggle",t);t.$inject=["$animate","$compile","$log","featureToggle"]}(angular),function(n){"use strict";function t(){function r(t){return n.merge(i,t)}function u(){return i}var t={debugConditions:function(){return!0},identity:null,identityConditions:!1,trackConditions:function(){return!0},api:{},trackVerb:{impression:1,action:2},classes:{experimentDebug:"experiment-debug",experimentId:"experiment-id",experimentCohortActive:"experiment-cohort-active",experimentVariantActive:"experiment-variant-active"}},i;return t.api.endpoint="/api/features",t.api.actions={features:{url:t.api.endpoint,method:"GET"},track:{url:t.api.endpoint+"/track",method:"POST"}},i=n.copy(t),{configure:r,$get:u}}n.module("component.featureToggle").provider("featureToggleConfig",t)}(angular),function(n){"use strict";function t(n,t){return n(t.api.endpoint,null,t.api.actions)}n.module("component.featureToggle").factory("featureToggleApi",t);t.$inject=["$resource","featureToggleConfig"]}(angular),function(n){"use strict";function i(i,r,u,f,e,o,s){function w(){return o.identity&&(r.log(t,"Waiting for identity on",o.identity),i.$watch(o.identity,function(n,i){var u=f.defer();o.identityConditions?o.identityConditions(h.identity,n,i,u,e).then(function(n){r.log(t,"New identity, restart");h.identity=n;c(!0)},function(n){r.log(t,"Ignore identity, update:",n)}):c(!0)},!0)),h}function c(n){var u=f.defer();return h.identity&&h.features&&!n?u.resolve():(h.toggles=null,h.experiments=null,l().then(b).then(function(){r.log(t,"Feature toggle service ready",h.debug?"| Debug active":"");i.$broadcast("featureToggle.ready",[h.toggles,h.experiments]);u.resolve()}).catch(function(n){r.error(t,"Aborted start, unable to continue:",n)})),u.promise}function l(n){var t=f.defer();return h.identity||n||t.reject("Unable to determine identity"),h.identity=n||h.identity,t.resolve(h.identity),t.promise}function b(n){var i=f.defer();return r.log(t,"Getting assigned toggles for user...",n),s.features(n,function(n){h.toggles=n.data.toggles;h.experiments=n.data.experiments;r.log(t,"Got feature toggles and experiments",h.toggles,n.data.experiments);i.resolve([h.toggles,h.experiments])},function(n){i.reject(t,"Failed to get feature toggles",n)}),i.promise}function k(t){if(!t||!n.isArray(h.toggles))return!1;var i=t.indexOf("!")===0,u=i?t.slice(1):t,r=h.toggles.includes(u);return i?!r:r}function d(i){var e=f.defer(),u={experimentId:i,inCohort:!1,variantId:"control",trackAction:n.noop,debug:y()};return a()&&v(i)?(u.inCohort=!0,u.variantId=h.experiments[i],r.log(t,"In cohort for experiment",u.experimentId,"variant assigned:",u.variantId),e.resolve(u)):(r.log(t,"Not in cohort or couldn't determine variant for "+i),e.resolve(u)),e.promise}function g(n,i,u,c,l){var a=f.defer(),y;return!l&&(!v(i)||!o.trackConditions(e))?(a.reject(!1),a.promise):(y=l||{AnonymousId:h.identity.anonymousId,LiteLink:h.identity.liteLink,GrowthVerb:n,ExperimentId:i,Variant:u},r.log(t,"Track",p[n],y,c),s.track(y,function(n){n.data.Experiment.Variant?a.resolve(n.data.Experiment):a.reject(!1)},function(n){a.reject(n)}),a.promise)}function a(){return!!h.experiments&&n.isObject(h.experiments)}function v(n){return a()&&h.experiments.hasOwnProperty(n)}function y(){var n=!!u.search().experimentsDebug;return o.debugConditions(e)&&n}var p=keyFlip(o.trackVerb),h={init:w,start:c,identify:l,isEnabledFor:k,configureExperiment:d,trackExperiment:g,debug:y,identity:null,toggles:null,experiments:null};return h.init()}var t="[featureToggle Service]";n.module("component.featureToggle").factory("featureToggle",i);i.$inject=["$rootScope","$log","$location","$q","$injector","featureToggleConfig","featureToggleApi"]}(angular),function(n){"use strict";function i(){return{restrict:"A",controller:t}}function t(t,i,r,u,f,e){function l(n){n&&(h=p(),s="[Experiment "+h+"]",u.log(s,"Initialising..."),e.configureExperiment(h).then(y).catch(b))}function y(n){o.config=n;o.config.trackAction=function(n){a(f.trackVerb.action,n)};i.attr(f.classes.experimentCohortActive,o.config.inCohort);i.attr(f.classes.experimentDebug,o.config.debug);r.experiment=o.config;a(f.trackVerb.impression)}function a(n,t){return e.trackExperiment(n,o.config.experimentId,o.config.variantId,t)}function p(){var i=n.copy(t.experiment),u=r.$eval(t.experiment);return u&&(w(i),i=v(u)),i}function w(n){c&&c();c=r.$watch(n,function(n,t){n!==t&&(v(n),u.log(s,"Changing experimentId to",n),l(!0))},!0)}function v(n){return t.$set("experiment",n),n}function b(n){u.error(s,n)}var s=null,o=this,h,c;o.config=null;r.$watch(function(){return e.experiments},l,!0)}n.module("component.featureToggle").directive("experiment",i);t.$inject=["$attrs","$element","$scope","$log","featureToggleConfig","featureToggle"]}(angular),function(n){"use strict";function t(t,i,r,u){function f(f,e,o,s,h){function v(){var f=s.config&&s.config.variantId===o.experimentToggle,y=s.config&&s.config.debug,v=s.config&&"[Experiment "+s.config.experimentId+" / Variant Toggle]";f||y?(r.log(v,f?"Displaying":"Debug",o.experimentToggle),a||h(function(n,r){a=r;n[n.length++]=i.$$createComment("end experimentToggle",o.experimentToggle);l={clone:n};t.enter(n,e.parent(),e)}),n.element(l.clone).attr(u.classes.experimentVariantActive,!!f).attr(u.classes.experimentId,s.config.experimentId)):(s.config&&r.log(v,"Removing",o.experimentToggle),c&&(c.remove(),c=null),a&&(a.$destroy(),a=null),l&&(c=n.element(l.clone),t.leave(c).done(function(n){n!==!1&&(c=null)}),l=null))}var l,a,c;f.$watch("experiment",v)}return{restrict:"A",require:"^^experiment",transclude:"element",priority:600,terminal:!0,$$tlb:!0,link:f}}n.module("component.featureToggle").directive("experimentToggle",t);t.$inject=["$animate","$compile","$log","featureToggleConfig"]}(angular),function(n){"use strict";function t(){function n(n,t,i,r){var f=debounce(function(){var t=n.$eval(i.experimentTrack);r.config.trackAction(t)},250),u;if(i.experimentViewAction)f();else{u=".experiment";t.off(u).on("click"+u,f)}}return{require:"^^experiment",restrict:"A",link:n}}n.module("component.featureToggle").directive("experimentTrack",t);t.$inject=[]}(angular),function(n){"use strict";function t(){function n(n,t){t.on("click",".feedback-btn",function(n){n.preventDefault();n.stopPropagation()})}return{controller:i,controllerAs:"fbBtns",link:n,restrict:"A",templateUrl:"feedbackBtns.html",bindToController:!0,scope:{area:"@feedbackBtns",promptText:"@feedbackBtnsText",resetDelay:"@feedbackBtnsResetDelay"}}}function i(n,t,i,r,u,f){function h(n){c(n);u.track(f.feedback[n],{area:e.area,promptText:e.promptText})}function c(n){(e.submittedMsg=l(n),e.resetDelay)&&(o&&r.cancel(o),o=r(s,parseInt(e.resetDelay)))}function s(){e.submittedMsg=null}function l(n){var t;switch(n){case e.feedbackTypes.positive:t="Great, we're glad you're smiling.";break;case e.feedbackTypes.negative:t="We're sorry to hear that.";break;default:t="Thanks for your feedback."}return t+' If you have further feedback you can let us know at <a href="mailto:help@csr.com.au?subject=[Feedback]%20CSR%20Connect%20Feedback">help@csr.com.au<\/a>'}var e=this,o;e.area=e.area||"General";e.promptText=e.promptText||"How's Connect treating you today?";e.feedbackTypes={positive:"positive",neutral:"neutral",negative:"negative"};e.submittedMsg=null;e.sendFeedback=h;e.resetDelay&&n.$on("$stateChangeStart",s);n.$on("$destroy",function(){o&&r.cancel(o)})}n.module("component.feedback").directive("feedbackBtns",t);t.$inject=["$log","metrics","metricEvents"];i.$inject=["$scope","$state","$log","$timeout","metrics","metricEvents"]}(angular),function(){"use strict";function n(n,t,i,r){function u(t,u,f){function e(){r.getFilterValueApplyToFilters(i.search(),t.filters,t.field)}function o(){var n=angular.copy(t.filters[t.field]!=""?t.filters[t.field]:null);n&&n.getMonth&&(n=moment(n).format("YYYY-MM-DD"));i.search(t.field,n);t.filterCallback&&angular.isFunction(t.filterCallback)&&t.filterCallback(n)}u.removeAttr("filters-field");u.attr("ng-model","filters."+t.field);f.ngChange||u.attr("ng-change","applyFilter()");n(u)(t);e();t.$on("filters.init",function(n,i){i==t.field&&e()});t.$on("filters.apply",function(n,i){i==t.field&&o()});t.applyFilter=o}return{restrict:"A",scope:{field:"@filtersField",filters:"=",filterWatch:"=",filterItems:"=",filterCallback:"="},terminal:!0,priority:9999,link:u}}angular.module("component.filters").directive("filtersField",n);n.$inject=["$compile","$log","$location","locationFilterProvider"]}(),function(){"use strict";function n(n,t,i,r){var u=this;u.availableFlags=i;u.currentFlag=r;u.selectedFlag=r;u.update=function(){u.currentFlag==u.selectedFlag?t.dismiss():t.close(parseInt(u.selectedFlag))}}angular.module("component.flags").controller("flagOptionsCtrl",n);n.$inject=["$scope","$modalInstance","availableFlags","currentFlag"]}(),function(){"use strict";function t(){return{restrict:"E",transclude:!1,scope:{updateFlagFunction:"&",currentFlagColor:"=",availableFlags:"="},controllerAs:"flags",bindToController:!0,controller:n,templateUrl:"flags.html",replace:!0}}function n(n,t,i){var r=this;r.flagsList=i.convertToArray(r.availableFlags);r.showOptions=function(n){n.stopPropagation();n.preventDefault();var i=t.open({templateUrl:"flagOptions.html",size:"sm",controller:"flagOptionsCtrl",controllerAs:"flagOptions",bindToController:!0,resolve:{availableFlags:function(){return r.flagsList},currentFlag:function(){return r.currentFlagColor}}});i.result.then(function(n){r.updateFlagFunction({flagId:n})})}}angular.module("component.flags").directive("flag",t);n.$inject=["$scope","$modal","flagServices"]}(),function(){"use strict";function n(){var n=function(n){var i=[],t;if(n)for(t in n)n.hasOwnProperty(t)&&i.push(t);return i};return{convertToArray:n}}angular.module("component.flags").factory("flagServices",n)}(),function(){function n(){return{restrict:"A",compile:function(){return function(n,t,i){t.bind("keypress",function(n){var t=n.which||n.keyCode,r=String.fromCharCode(t);if(!r.match(new RegExp(i.allowPattern,"i")))return n.preventDefault(),!1})}}}}angular.module("component.form").directive("allowPattern",n)}(),function(n){function t(){function t(t,i,r){var u=n(i);t.$watch(r.ngModel,function(n){u.prop("indeterminate",n==null)},!0)}return{link:t,restrict:"A"}}angular.module("component.form").directive("checkboxTristate",t)}(jQuery),function(){function n(){return{restrict:"A",link:function(n,t,i){t.on("click",function(n){n.preventDefault();n.stopPropagation();var t=angular.element(i.focusOnClick);t&&t.focus().select()})}}}angular.module("component.form").directive("focusOnClick",n);n.$inject=["$window"]}(),function(){"use strict";function i(i,u,f,e){function o(o,s,h,c){function l(i){if(c.$dirty){var r=n+". "+t;return i.returnValue=r,r}}i.log(r,"Init",c.$name);u.addEventListener("beforeunload",l);o.$on("$stateChangeStart",function(i,r,u){c.$dirty&&(i.preventDefault(),e.swal({type:"warning",title:n,text:t,showCancelButton:!0,cancelButtonText:"Discard changes",confirmButtonText:"Stay here"},function(n){n||(c.$setPristine(),f.go(r,u))}))});o.$on("$destroy",function(){u.removeEventListener("beforeunload",l)})}return{restrict:"A",require:"^form",link:o}}var r="[dirtyDetector]",n="You have unsaved details",t="Would you like to stay on the page?";angular.module("component.form").directive("dirtyDetector",i);i.$inject=["$log","$window","$state","SweetAlert"]}(),function(){function n(){function n(n,t){t.bind("keydown keypress",function(i){i.which===13&&(n.$apply(function(){t.find("input[type=submit]").click()}),i.preventDefault())})}return{link:n,restrict:"A"}}angular.module("component.form").directive("formEnter",n)}(),function(){"use strict";function n(){function n(n,t,i,r){if(r){var u=r.$pristine&&!r.$dirty;u&&(r.$pristine=!1,r.$dirty=!0)}}return{restrict:"A",require:"ngModel",link:n}}angular.module("component.form").directive("notDirty",n)}(),function(){function n(){function n(n,t,i,r){function u(n){var t=n.replace(/[^0-9]/g,"");return i.inputNumeric&&!t&&(t=i.inputNumeric),t!==n&&(r.$setViewValue(t),r.$render()),t}r.$parsers.push(u)}return{link:n,require:"ngModel",restrict:"A"}}angular.module("component.form").directive("inputNumeric",n)}(),function(n){"use strict";function t(n){function r(r,u,f,e){function h(n){return parseFloat(Number(n)).toFixed(r.decimals)}function c(){var n=h(s);return s&&!isNaN(n)?n:h(r.min)}function o(n){r.val=n;e.$setViewValue(n);e.$render();isNaN(h(n))||(s=n)}function l(i){if(i.trim().length===0)return i;var r=i.replace(/[^0-9]/g,"");return r!==i&&(r===""&&(r=c()),n.log(t,"numericParser updated value to "+r),o(r)),r}i(r,f);var s=r.val;e.$viewValue=r.val;e.$parsers.push(l);r.decrement=function(){var n=parseFloat(parseFloat(Number(r.val))-parseFloat(r.step)).toFixed(r.decimals);n<r.min&&(n=parseFloat(r.min).toFixed(r.decimals));o(n)};r.increment=function(){var n=parseFloat(parseFloat(Number(r.val))+parseFloat(r.step)).toFixed(r.decimals);n>r.max&&(n=parseFloat(r.max).toFixed(r.decimals));o(n)};r.checkValue=function(i){var u;if(i!==!0||r.val!=undefined&&r.val.trim().length!==0&&r.val!=0){if(r.val==undefined||r.val.length===0||r.val<r.min||r.val>r.max){if(u=c(),u.length===0)return;n.log(t,"Resetting value to "+u+": NAN or out of min-max range",r.val);r.val=u}o(r.val)}};r.keyPress=function(n){console.log("Quantity key press",n);n.keyCode===13&&r.enterPress&&r.enterPress()}}var t="[qtySpinner]",i=function(n,t){n.id=t.qtySpinner;n.min=t.min||0;n.max=t.max||99999;n.step=t.step||1;n.prefix=t.prefix||undefined;n.postfix=t.postfix||undefined;n.decimals=t.decimals||0;n.initval=t.initval||"";n.val=t.value||n.initval};return{restrict:"A",require:"?ngModel",scope:{disabled:"@",enterPress:"&"},replace:!0,link:r,templateUrl:"form-qty-spinner.html"}}n.module("component.form").directive("qtySpinner",t);t.$inject=["$log"]}(angular),function(){"use strict";function n(n){function t(t,i){var f=$(i),r=".form-control-errors",u={validState:function(){n.remove("form-status")},invalidState:function(){n.add({id:"form-status",type:"error",message:"Please correct the errors with the form and try again"})},addError:function(n,i,u){var e=this,f=n.prev(r);f.length||($('<span class="form-control-errors"><\/span>').insertBefore(n),f=n.prev(r));f.html('<p role="alert" class="form-control-error form-control-server-error"><i class="fa fa-exclamation-triangle"><\/i> '+u+"<\/p>");t.form[i].$setValidity("server",!1);n.on("keyup",function(t){t.keyCode!==13&&e.removeErrors(n,i)})},removeErrors:function(n,i){var u=n.prev(r);u.html("");t.form[i].$setValidity("server",!0)}};t.$watch("validationErrors",function(n){var i,t;if(n==null||$.isEmptyObject(n)){i=document.getElementsByClassName("form-control-error");for(t in i)i.hasOwnProperty(t)&&(i[t].parentElement.innerHTML="")}else for(t in n)if(n.hasOwnProperty(t)){var r=t.split(".").pop(),e=f.find('[name="'+r+'"]'),o=n[t];u.addError(e,r,o)}});t.$watch("form.$valid",function(n){!n&&t.form&&t.form.$dirty&&t.validationErrors!=null&&!$.isEmptyObject(t.validationErrors)?u.invalidState():u.validState()})}return{restrict:"AC",require:"form",link:t}}angular.module("component.form").directive("formValidator",n);n.$inject=["notificationService"]}(),function(){"use strict";angular.module("component.form").config(["$validationProvider",function(n){var t=function(n,t){if(n&&t)switch(n){case"AmexCard":if(/^3[47][0-9]{13}$/.test(t)===!1)return!1;break;case"MasterCard":if(/^5[1-5][0-9]{14}$/.test(t)===!1)return!1;break;case"VisaCard":if(/^4[0-9]{12}(?:[0-9]{3})?$/.test(t)===!1)return!1;break;default:return!1}return!0},i={required:function(n){return!!n},url:/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/,email:/^((?!&)[\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,12}|[0-9]{1,3})(\]?)$/,number:/^\d+$/,phone:/^$|^(?:0|\+61[ ]?)[2378][ ]?[2-9]\d{3}[ ]?\d{4}$|^(?:0|\+64[ ]?)[34679][ ]?[2-9]\d{2}[ ]?\d{4}$/,mobile:/^$|^(?:0|\+61[ ]?)4\d{2}[ ]?\d{3}[ ]?\d{3}$|^(?:0|\+64[ ]?)2\d{7,9}$/,selector:/^[a-z0-9]+$/i,username:/^[A-Za-z0-9]{6,}$|^((?!&)[\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,12}|[0-9]{1,3})(\]?)$/,password:/(\s*(\S)\s*){6,}/,name:/^[A-Za-z].*$/,terms:function(n,t){return t.model&&t.model==="YES"},luhn:function(n){if(!/^\d+$/.test(n))return!1;for(var u=n.split(""),o=[0,2,4,6,8,1,3,5,7,9],f=0,t=0,r=!1,e,i=u.length-1;i>=0;i--)e=u[i],t=parseInt(e,10),r&&(t=o[t]),f+=t,r=!r;return f%10==0},cardNo:function(n,i){var r=i.$parent.cardDetails.CardType;return t(r,n)},cardType:function(n,i){var r=i.$parent.cardDetails.CardNo;return t(n,r)},contactNumberRequired:function(n){return!!n},payAmount:function(n,t){if(!angular.isDefined(t.$parent.itm.selected)||t.$parent.itm.selected===!1)return!0;var i=parseFloat(n)||0,r=t.$parent.itm.Amount?t.$parent.itm.Amount:0,u=t.$parent.itm.AmountPaid?t.$parent.itm.AmountPaid:0,f=t.$parent.itm.AmountPending?t.$parent.itm.AmountPending:0;return r>=0?i>0&&i<=r-u-f:i>=r&&i<0},payAccountBalanceAmount:function(n,t){if(!angular.isDefined(t.$parent.itm.selected)||t.$parent.itm.selected===!1)return!0;var i=parseFloat(n)||0;return i===0||i>=1},postCode:function(n){return/\d{4}/.test(n)},dateBeforeToday:function(n){var t=new Date(n),r=moment(new Date(t.getFullYear(),t.getMonth(),t.getDate())),i=new Date,u=new Date(i.getFullYear(),i.getMonth(),i.getDate()),f=moment(new Date(u)),e=r.isValid();return e&&r>=f?!0:!1},matchingEmail:function(n,t,i,r){return n==r.validatorMatch},matchingPassword:function(n,t,i,r){return n==r.validatorMatch},minDate:function(n,t,i,r){var u=moment(n).isValid()?moment(n):moment(n,"DD/MM/YYYY"),f=moment(r.minDate,"YYYY-MM-DD");return r.minDate?u.isSame(f,"day")||u.isAfter(f,"day"):!0},maxDate:function(n,t,i,r){var u=moment(n).isValid()?moment(n):moment(n,"DD/MM/YYYY"),f,e;return u.isValid()?(f=moment(r.maxDate,"YYYY-MM-DD"),e=r.maxDate?u.isSame(f,"day")||u.isBefore(f,"day"):!0,e):!1},wordsOrLess:function(n,t,i,r){return r.wordsOrLess?n.split(" ").length<=r.wordsOrLess:!1},minLength:function(n,t,i,r){var u=r.minLength;return n.length>=u},maxLength:function(n,t,i,r){var u=r.maxLength;return n.length<=u}};n.setExpression(i).setDefaultMsg({required:{error:"This field is required",success:"Thanks for providing this field"},url:{error:"Please provide a valid URL",success:"Valid URL"},email:{error:"Please provide a valid email",success:"Valid email"},number:{error:"Please provide numbers only",success:"Valid number"},phone:{error:"Please provide a valid AU/NZ phone number",success:"Valid number"},mobile:{error:"Please provide a valid AU/NZ mobile number",success:"Valid number"},selector:{error:"This field is required",success:"Thanks for providing this field"},terms:{error:"Please confirm the following field",success:"Valid"},luhn:{error:"Invalid card number",success:"Valid"},cardNo:{error:"The card number does not match the selected type of card",success:"Valid"},cardType:{error:"The selected type of card does not match the card number",success:"Valid"},contactNumberRequired:{error:"A contact number is required",success:"Valid"},payAmount:{error:'<span class="sr-only">The amount is invalid<\/span>',success:"Valid"},payAccountBalanceAmount:{error:'<span class="sr-only">The amount is invalid<\/span>',success:"Valid"},postCode:{error:"Postcode is invalid",success:"Valid"},dateBeforeToday:{error:"Date is invalid",success:"Valid"},matchingEmail:{error:"Please check that the provided email addresses match",success:"Valid"},matchingPassword:{error:"Please check that your new password and password confirmation match",success:"Valid"},username:{error:"Please provide an email address or a username of at least 6 characters, using letters and numbers only.",success:"Valid"},password:{error:"Please provide a password of at least 6 characters.",success:"Valid"},name:{error:"Names must start with a letter.",success:"Valid"},minDate:{error:"Please check the min. date",success:"Valid"},maxDate:{error:"Please check the max. date",success:"Valid"},wordsOrLess:{error:"You're over the word count, please refine your answer.",success:"Valid"},minLength:{error:"String is not long enough",success:"Valid"},maxLength:{error:"String is too long",success:"Valid"}})}])}.call(this),function(){function n(){return{restrict:"A",scope:{hasInitialFocus:"@"},link:function(n,t){n.hasInitialFocus==="true"&&t.focus()}}}angular.module("component.form").directive("hasInitialFocus",n)}(),function(n){"use strict";function t(){return{require:"ngModel",link:function(n,t,i,r){n.$watch(i.initialValueTakenFrom,function(n){n&&(r.$setViewValue(n),r.$render())},!0)}}}n.module("component.form").directive("initialValueTakenFrom",t)}(angular),function(){function n(){function n(){$(document).on({DOMNodeInserted:function(){$(".pac-item, .pac-item span",this).addClass("needsclick")}},".pac-container")}return{link:n,restrict:"A"}}angular.module("component.form").directive("ngAutocompleteTouchFix",n)}(),function(){function n(){return{restrict:"A",link:function(n,t){t.on("focus",function(){t.blur()})}}}angular.module("component.form").directive("noFocus",n);n.$inject=[]}(),function(){function n(n){return{restrict:"A",link:function(t,i){i.on("click",function(t){t.preventDefault();t.stopPropagation();n.getSelection().toString()||this.setSelectionRange(0,this.value.length)})}}}angular.module("component.form").directive("selectOnClick",n);n.$inject=["$window"]}(),function(n){"use strict";function t(n,t){return{restrict:"A",require:"ngModel",link:function(i,r,u,f){f.canSelfService=null;f.$asyncValidators.availableCustomerEmailAddress=function(i,r){return n(function(n,i){t.matchCustomerEmailAddress(r).then(function(t){t.EmailMatchesMany===!0?(f.canSelfService=!1,i("Email address in use by multiple accounts")):t.EmailMatch===!0?(f.canSelfService=!0,i("Email address already in use")):n()},function(n){i(n)})})}}}}n.module("component.form").directive("availableCustomerEmailAddress",t);t.$inject=["$q","authService"]}(angular),function(n){"use strict";function t(){return{restrict:"A",require:"ngModel",link:function(n,t,i,r){r.$validators.realName=function(n,t){return/^[A-Za-z].*$/.test(t)}}}}n.module("component.form").directive("realName",t)}(angular),function(){"use strict";function n(n,t){return{restrict:"A",require:"ngModel",link:function(i,r,u,f){f.$asyncValidators.uniqueComboEmailUsername=function(r,u){var f=t.defer(),e=i.model&&i.model.UserId||undefined;return n.matchLoginIdEmailAddress(u,e,function(n){n.EmailMatch===!0||n.LoginIdMatch===!0?f.reject("Email in use as login or email"):f.resolve()},function(){f.reject()}),f.promise}}}}angular.module("component.form").directive("uniqueComboEmailUsername",n);n.$inject=["authService","$q"]}(),function(){"use strict";function n(n,t){var i="";return{restrict:"A",require:"ngModel",link:function(r,u,f,e){e.$asyncValidators.uniqueEmail=function(u,f){var e=t.defer(),o;return i?i===f?e.resolve():(o=r.model&&r.model.UserId||undefined,n.validateUserEmail(f,o,function(){e.resolve()},function(){e.reject()})):(e.resolve(),i=u),e.promise}}}}angular.module("component.form").directive("uniqueEmail",n);n.$inject=["authService","$q"]}(),function(){"use strict";function n(n,t){var i="";return{restrict:"A",require:"ngModel",link:function(r,u,f,e){e.$asyncValidators.uniqueUsername=function(r,u){var f=t.defer();return i?i===u?f.resolve():n.validateUsername(u,function(){f.resolve()},function(){f.reject()}):(f.resolve(),i=r),f.promise}}}}angular.module("component.form").directive("uniqueUsername",n);n.$inject=["authService","$q"]}(),function(){"use strict";function n(){return{restrict:"A",require:"ngModel",link:function(n,t,i,r){r.$validators.email=function(n,t){return t?/^((?!&)[\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,12}|[0-9]{1,3})(\]?)$/.test(t):!0}}}}angular.module("component.form").directive("validEmail",n)}(),function(n){"use strict";function t(){return{restirct:"A",require:"ngModel",link:function(n,t,i,r){r.$validators.mobileNumber=function(n,t){return t?/^$|^(?:0|\+61[ ]?)4\d{2}[ ]?\d{3}[ ]?\d{3}$|^(?:0|\+64[ ]?)2\d{7,9}$/.test(t):!0}}}}n.module("component.form").directive("validMobileNumber",t)}(angular),function(n){"use strict";function t(){return{restirct:"A",require:"ngModel",link:function(n,t,i,r){r.$validators.phoneNumber=function(n,t){return t?/^$|^(?:0|\+61[ ]?)[2378][ ]?[2-9]\d{3}[ ]?\d{4}$|^(?:0|\+64[ ]?)[34679][ ]?[2-9]\d{2}[ ]?\d{4}$/.test(t):!0}}}}n.module("component.form").directive("validPhoneNumber",t)}(angular),function(){"use strict";function n(){return{restrict:"A",require:"ngModel",link:function(n,t,i,r){r.$validators.username=function(n,t){return t?/^[A-Za-z0-9]{6,}$|^((?!&)[\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,12}|[0-9]{1,3})(\]?)$/.test(t):!0}}}}angular.module("component.form").directive("validUsername",n)}(),function(n){"use strict";function t(t,i){function r(r){function s(t){var i=[];return n.forEach(t,function(n,t){i.push(t)}),i}function h(t,f,e){function a(n){return s.push(n)}function c(n){return o.splice(n,1)}function v(){var n;return t&&t.required?(n=t.required,delete t.required):f&&f.required?(n=f.required,delete f.required):n=!1,n}var s=[],o=e,h,l;return o.indexOf("required")>=0&&(h=v("required"),h&&(l=o.indexOf("required"),s.push({error:"required",message:h}),c(l))),t&&n.forEach(t,function(n,t){var f=o.indexOf(t);if(f>=0)a({error:t,message:n}),c(f);else return i.warn(u,"A custom "+t+" message is being supplied for "+r.formElement.$name+", but there is no validation for this. You will need to add the validator to the form element, or remove this custom message.")}),o.length>0&&n.forEach(f,function(n,t){var i=o.indexOf(t);if(i>=0&&o.length>0)a({error:t,message:n}),c(i);else return}),o.length>0&&n.forEach(o,function(n){i.warn(u,"There is "+n+" validation being applied to "+r.formElement.$name+', but there is no message available for this. You can add a custom-message="{'+n+": 'Validation Message'}\" attribute to the form-element-feedback directive or update the default messages through the formFeedbackMessagesProvider.")}),s}var u="[formElementFeedback directive]";if(!r.formElement)return i.warn(u,"A valid form element is missing.");var f=r.customMessages||undefined,e=n.copy(t),o=s(r.formElement.$validators);r.feedbackMessages=h(f,e,o);r.$watch(function(){return r.formElement.$touched},function(n){r.formItemTouched=n});r.$watch(function(){return r.formElement.$dirty},function(n){r.formItemDirty=n});r.$watch(function(){return r.formElement.$$parentForm.$submitted},function(n){r.parentFormSubmitted=n})}return{restrict:"E",replace:!0,link:r,templateUrl:"form-input-feedback.html",scope:{formElement:"=",customMessages:"<"}}}n.module("component.formFeedback").directive("formElementFeedback",t);t.$inject=["formFeedbackMessages","$log"]}(angular),function(n){"use strict";function t(){function i(i){n.isArray(i)||(t=r(i))}function r(i){var r=n.copy(t),u=i;for(var f in u)r[f]=u[f];return r}function u(){return t}var t={required:"This is required"};return{$get:u,setApplicationMessages:i}}n.module("component.formFeedback").provider("formFeedbackMessages",t)}(angular),function(){"use strict";function n(n){var t={config:{$html:$("html"),$body:$("body"),$viewport:$("#viewport"),$toggleEls:$(".navbar-toggle"),$fixEls:$("#header, #main, #footer"),closeEls:"#header a, #main, #footer",navOpenClass:"nav-open",viewportOpenClass:"viewport-open",asClass:"account-selector-active",$asBtn:$(".account-selector-btn"),timeout:200},navOpen:!1,init:function(){var n=this,t;this.navOpen=this.config.$html.hasClass(this.config.navOpenClass);this.config.$toggleEls.on("click",function(){n.navToggle()});this.config.$html.on("click",n.config.closeEls,function(){n.navCloseIfOpen()});t=debounce(function(){n.navOpen&&n.navClose()});$(window).resize(t)},navToggle:function(){this.config.$html.toggleClass(this.config.navOpenClass);this.config.$body.hasClass(this.config.asClass)&&this.config.$asBtn.click();this.navOpen=!this.navOpen;this.fixWidths()},navCloseIfOpen:function(){this.navOpen&&this.navClose()},navClose:function(){this.config.$html.removeClass(this.config.navOpenClass);this.navOpen=!1;this.fixWidths()},fixWidths:function(){var n=this;this.navOpen?(this.config.$fixEls.width(this.config.$html.width()),this.config.$viewport.addClass(this.config.viewportOpenClass)):setTimeout(function(){n.config.$viewport.removeClass(n.config.viewportOpenClass);n.config.$fixEls.width("100%")},n.config.timeout)},removeListeners:function(){this.config.$toggleEls.off("click");this.config.$html.off("click")}};t.init();n.$on("$destroy",function(){t.removeListeners()});n.$on("$stateChangeSuccess",function(){t.navCloseIfOpen()})}angular.module("component.appHeader").controller("appHeaderController",n);n.$inject=["$scope"]}(),function(n,t){"use strict";function u(u,f,e,o,s,h,c){function p(n){n.help?(l.current.name=n.help,l.current.tour=n.helpTour||null):w();v(l.current.name)}function k(t){n.isFunction(t)&&(y=t,r&&f.log(i,"Registered help centre"),p(o.current))}function v(n,t){if(l.current.name===n)return b(l.current,t)}function d(n,t){l.current.name=n;l.current.content=t;r&&f.log(i,"Registered content for",arguments);v(n)}function w(){l.current={name:null,content:null,firstTime:!1,tour:null}}function g(t){if(!s.isImpersonating())return l.current.firstTime=!1,e.post("/api/user/visitedtour",{Tours:[t]}).then(function(){var u=s.getUser().Profile.VisitedTours;u=n.isArray(u)?u:[];u.push(t);r&&f.log(i,"Dismissed",l.current.name,"first time experience");h.track(c.helpCentre.dismissed,{helpName:l.current.name})})}function nt(n){if(!n||!s.getUser())return!0;var t=s.getUser().Profile.VisitedTours;return t.indexOf(n)>=0}function tt(n){if(l.current.name)return s.isImpersonating()?void 0:(l.current.firstTime=!o.current.helpIgnoreFirstTime&&!l.hasDismissedFeature(l.current.name),l.deferFirstTimeContent()&&!n?(l.deferFirstTimeContent(l.current.name),!1):l.current.firstTime)}function it(t){return n.isDefined(t)&&(t===!1&&(r&&f.log(i,"Showing deferred help for",a),v(a,!0)),a=t,r&&f.log(i,"deferred help",a)),a}var y=n.noop,a=!1,b=t(function(){y.apply(this,arguments)},250),l={registerHelpCentre:k,updateHelpCenter:v,registerContent:d,resetContent:w,dismissFeature:g,hasDismissedFeature:nt,shouldShowFirstTime:tt,deferFirstTimeContent:it,current:{name:null,content:null,firstTime:!1,tour:null}};return u.$on("$stateChangeSuccess",function(n,t){p(t)}),l}var i="[helpService]",r=!1;n.module("component.help").factory("helpService",u);u.$inject=["$rootScope","$log","$http","$state","authService","metrics","metricEvents"]}(angular,debounce),function(n){"use strict";function r(t,i){function r(r,u,f,e){function y(){s.hasClass(p)&&s.addClass(c)}var o=u.parent(),s=n.element(document.body),a="open",c="stop-scrolling",p="mobile-view-activated",v=debounce(function(){e.dismissFirstTime()},250),h=n.element("#help-centre-overlay"),l;h.length||(s.append(n.element('<div id="help-centre-overlay"><\/div>')),h=n.element("#help-centre-overlay"));e.showHelpCentre=function(n){o.addClass(a);y();n&&h.fadeIn()};e.hideHelpCentre=function(){o.removeClass(a);h.fadeOut();s.removeClass(c);e.firstTime&&v()};o.off("show.bs.dropdown");o.on("show.bs.dropdown",function(){e.firstTime?h.fadeIn():t.track(i.helpCentre.opened,{currentPath:window.location.hash});y()});o.off("hide.bs.dropdown");o.on("hide.bs.dropdown",function(){h.fadeOut();s.removeClass(c);e.firstTime&&v()});u.off(".hcItems").on("click.hcItems",".list-group-item",function(r){r&&t.track(i.helpCentre.action,{helpCentreName:e.name||"general",helpCentreAction:n.element(r.target).text()})});l="a, button";u.off(".hcIgnore").on("click.hcIgnore",function(n){var t=$(n.target),i=t.is(l),r=t.parents(l).length;i||r||(n.preventDefault(),n.stopPropagation())});s.off(".tour").on("click.tour",".tour-tour button",function(r){var u=n.element(r.target).parent("button").data("role");i.tour.hasOwnProperty(u)&&t.track(i.tour[u],{tour:e.name})})}return{controller:u,controllerAs:"hc",link:r,restrict:"A",templateUrl:"helpCentre.html",scope:{}}}function u(r,u,f,e,o,s,h){function v(n,f){o.current.content?(i&&u.log(t,"Loading content",o.current),o.current.content=e(n.content)(r)):(i&&u.log(t,"Resetting content"),b());y(o.current.content,f)}function y(n,t){l=l||$("#help-centre-content");l.html(n);c.current=o.current;o.shouldShowFirstTime(t)&&p()}function p(){c.current=o.current;f(function(){c.showHelpCentre(!0)},250);i&&u.log(t,"Displaying first time experience for",o.current.name,o.current);a(o.current.name)}function w(){o.dismissFeature(c.current.name);c.hideHelpCentre()}function b(){o.resetContent();c.current=o.current;c.hideHelpCentre();i&&u.log(t,"Reset to default")}function k(){LC_API.open_chat_window()}var c=this,l,a=debounce(function(n){s.track(h.helpCentre.firstTime,{helpName:n})},250);c.current=o.current;c.showHelpCentre=n.noop();c.dismissFirstTime=w;c.showLiveChat=k;o.registerHelpCentre(v)}var t="[helpCentre]",i=!1;n.module("component.help").directive("helpCentre",r);r.$inject=["metrics","metricEvents"];u.$inject=["$scope","$log","$timeout","$compile","helpService","metrics","metricEvents"]}(angular),function(){"use strict";function n(n){function t(t,i){n.registerContent(t.helpCentreContent,i.html())}return{link:t,restrict:"A",scope:{helpCentreContent:"@"}}}angular.module("component.help").directive("helpCentreContent",n);n.$inject=["helpService"]}(),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{question:"=",form:"="},controller:t,controllerAs:"q",templateUrl:"checkBoxListQuestion.html"}}function t(n){function r(){i();t.qd.Parts.forEach(function(n){n.Response===""&&(n.Response="N")})}function u(n){var i=!1;return t.qd.Parts.forEach(function(n){if(n.IsSelectAll&&n.Response==="Y"){i=!0;return}}),i&&!n.IsSelectAll}function f(n){n.IsSelectAll&&t.qd.Parts.forEach(function(t){t.IsSelectAll||(t.Response=n.Response)});i()}function i(){t.hasActivitySelected=null;for(var n=0;n<t.qd.Parts.length;n++)if(t.qd.Parts[n].Response==="Y"){t.hasActivitySelected="Y";break}t.form.hasActivitySelectedValidator&&t.form.hasActivitySelectedValidator.$setDirty()}var t=this;t.qd=n.question;t.form=n.form;t.isOptionDisabled=u;t.optionChecked=f;t.hasActivitySelected=null;r()}n.module("component.insightQuestions").directive("checkboxListQuestion",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{question:"="},controller:t,controllerAs:"q",templateUrl:"companySizeQuestion.html"}}function t(n){var t=this;t.qd=n.question;t.options=[{Display:"1 - 2",Class:"dq-question-company-size-1"},{Display:"3 - 4",Class:"dq-question-company-size-2"},{Display:"5 - 19",Class:"dq-question-company-size-3"},{Display:"20 - 99",Class:"dq-question-company-size-4"},{Display:"100 +",Class:"dq-question-company-size-5"}]}n.module("component.insightQuestions").directive("companySizeQuestion",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{questionsComplete:"&",showProgress:"=",mode:"@",showReminder:"=",navLink:"@",navLinkDisplay:"@",userid:"@"},controller:t,controllerAs:"insights",templateUrl:"insightQuestions.html"}}function t(n,t,i,r,u,f,e){function h(){w()}function w(){t.log("%cData Quality - Insights > ","color: grey","Loading Insights Questions");n.userid?r.insightsEdit.get({userId:n.userid},c):r.insights.get({mode:n.mode},c)}function c(i){if(t.log("%cData Quality - Insights > ","color: grey","Loading Insights Questions Complete",i),n.mode==="edit"){var r=$(i.Groups).map(function(){return this.Questions});$.each(r,function(n,t){t.Type==="SubmitList"&&(t.Type="RadioList")});o.groups=[{Questions:$.makeArray(r)}]}else o.groups=i.Groups;i.Groups.length>0?l(o.groups[s]):y();o.loading=!1}function l(n){o.activeGroup=n;var t=$(n).map(function(){return this.Questions}).map(function(){return this.Type});o.hasSubmitQuestion=$.inArray("SubmitList",t)>-1}function b(u){if(i.validate(n.form,!0),!n.form.$invalid){n.form.$setPristine();var f=k(u);t.log("%cData Quality - Insights > ","color: grey","Saving Insights Responses");n.userid?r.insightsEdit.save({userId:n.userid},f,a,p):r.insights.save(f,a,p)}}function k(n){var t=$(n).map(function(){return this.Questions}),i=t.map(function(){return this.Parts});return $.makeArray(i)}function a(){t.log("%cData Quality - Insights > ","color: grey","Saving Insights Responses Complete");v()?(l(o.groups[++s]),u.updateStatus({userPrompted:!0})):y()}function v(){return o.groups.length>s+1}function y(){n.questionsComplete&&n.questionsComplete()}function p(){e.info("Error saving insights","An error occurred trying to save your responses.")}var o=this,s=0;o.groups=[];o.activeGroup=null;o.hasSubmitQuestion=!1;o.loading=!0;o.dqStatus=u.status;o.hasMoreGroups=v;o.hasNavLink=!!n.navLink;o.next=b;f.isReady()?h():(t.log("%cData Quality - Insights > ","color: grey","Deferring until accounts ready"),n.$on("accounts.dataReady",h))}n.module("component.insightQuestions").directive("insightQuestions",i);t.$inject=["$scope","$log","$validation","userData","dqService","accountsService","SweetAlert"]}(angular),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{question:"="},controller:t,controllerAs:"q",templateUrl:"radioListQuestion.html"}}function t(n){var t=this;t.qd=n.question}n.module("component.insightQuestions").directive("radioListQuestion",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{question:"="},controller:t,controllerAs:"q",templateUrl:"selectListQuestion.html"}}function t(n){var t=this;t.qd=n.question}n.module("component.insightQuestions").directive("selectListQuestion",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(){return{restrict:"A",isolate:!0,scope:{question:"=",questionSubmit:"&"},controller:t,controllerAs:"q",templateUrl:"submitListQuestion.html"}}function t(n){function i(t,i){t.Response=i.Display;n&&n.questionSubmit&&n.questionSubmit()}function r(n,t){return n.Response==null||n.Response===""?"btn-primary":n.Response===t.Display?"btn-primary":"btn-default"}function u(n,t){return n.Response==null||n.Response===""?!1:n.Response===t.Display?!0:!1}var t=this;t.qd=n.question;t.submit=i;t.getButtonStyle=r;t.isDefaultButton=u}n.module("component.insightQuestions").directive("submitListQuestion",i);t.$inject=["$scope"]}(angular),function(n){"use strict";function i(i,r,u){function c(){o()}function o(i){u.ready(function(){if(analytics&&analytics._integrations.Intercom&&window.Intercom){e();var u={app_id:analytics._integrations.Intercom.options.appId};i&&n.extend(u,{user_id:i.IntercomUserId,username:i.LoginId,email:i.EmailAddress,created_at:i.CreatedOn});f("boot",u);f("reattach_activator")}else r.error(t,"Intercom is not yet available")})}function s(){f("update")}function e(){f("shutdown")}function f(){try{window.Intercom&&window.Intercom.apply(null,arguments)}catch(n){r.error(t,n)}}var h={init:c,boot:o,update:s,shutdown:e};return i.$on("user.loggedOut",e),i.$on("state.changed",s),h}var t="[Intercom Service]";n.module("component.intercom").factory("$intercom",i);i.$inject=["$rootScope","$log","metrics"]}(angular),function(){"use strict";function n(){function n(n,t){t.on("click",'a[href="#"], [data-toggle]',function(n){n.preventDefault()})}return{link:n,restrict:"E"}}angular.module("component.layout").directive("body",n)}(),function(n,t,i){"use strict";function r(r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut){function lt(t){if(!t||t.length<1){r.warn("[Accounts] User has no accounts");tt.swal({type:"error",title:"No accounts are assigned",text:'Sorry, we\'ve let you down. It seems there are no accounts allocated for you to view.<br><br>Please contact us at <a href="mailto:help@csr.com.au&amp;subject=CSR%20ConnectNo%20accounts%20assigned">help@csr.com.au<\/a> or call us on <strong style="white-space: nowrap">1800 909 439<\/strong>(AU) or <strong style="white-space: nowrap">0800 277 266<\/strong>(NZ).',html:!0,confirmButtonText:h.isImpersonating()?"Stop impersonating":"Log out"},function(){h.isImpersonating()?e.unImpersonate():h.logout(function(){o.go("app.login")})});return}u.session.accounts.list=n.extend([],u.session.user.DefaultAccounts);n.forEach(t,function(n){u.session.accounts.list.findIndex(function(t){return t.AccountId===n.AccountId})<0&&u.session.accounts.list.push(n)});u.session.accounts.selected=n.copy(u.session.user.DefaultAccounts);k.get(null,function(n){var t=n.UserPreference.AccountSelection||[];c.initActive(t);u.userPreferences=n.UserPreference;u.$broadcast("accounts.retrieved")})}function ot(){at()}function at(){h.hasPermission("Customer/ProductList")&&Array.isArray(u.session.accounts.selected)&&u.session.accounts.selected.length>0&&p.get("/api/accounts/reports/cacheProductOrders").then(function(){})}function st(n,t){if(t.access){var i=h.hasPermission(t.access);i?r.log("%cStateChangeStart >","color: green","Authorisation passed"):(n.preventDefault(),u.$broadcast(y.notAuthorised),r.log("%cState unauthorised >","color: red",t.name),o.go("app.unauthorised"))}else r.log("%cStateChangeStart >","color: green","No permission required")}function ht(){return o.current.name.indexOf("app.home")>-1}function ct(){return u.bodyClass?u.bodyClass.indexOf("landing")>-1:!1}var et,ft;u.autoScroll=!1;u.CONNECT_CDN_ROOT=w.CONNECT_CDN_ROOT;u.CONNECT_CDN_S3ROOT=w.CONNECT_CDN_S3ROOT;u.CONNECT_UPDATE_AVAILABLE=!1;u.CONNECT_VERSION=w.CONNECT_VERSION;u.CONNECT_VERSION_HEADER_NAME=w.CONNECT_VERSION_HEADER_NAME;u.getCdnUrl=w.getCdnUrl;u.helpers={};e.localStorage=w.localStorage;e.goToHome=function(){ht()&&i(0)};e.goToDash=function(n,t){if(t&&t.preventDefault(),n&&ct()){o.go("app.home");return}o.go("app.dash");return};e.changeRole=function(n){u.loginMode=n;f.put("loginMode",n);p.defaults.headers.common["X-UserRole"]=u.loginMode;u.session.user.type=n;e.goToDash()};e.userRole=function(n){for(var t=0;t<n.length;t++)if(u.loginMode==n[t])return!0;return!1};e.hasRole=function(n){if(u.loginMode!==undefined)return n[0]==u.loginMode?!0:!1};e.hasPermissionParentRef=function(n){return h.hasPermissionParentRef(n)};e.hasPermission=function(n){return h.hasPermission(n)};e.hasProfileType=function(t){return n.isDefined(t)&&u.session.user?t.indexOf(u.session.user.Profile.ProfileType)>-1:!1};e.isCurrentUserAdmin=function(){return u.session.user.Profile.ProfileType==1};e.showLiveChat=function(){LC_API.open_chat_window()};e.dqStatus=it.status;e.mustChangePassword=function(){return u.session.changePassword};u.checkAvatar=function(n,t){var i=n.slice(-4);return([".jpg",".png"].indexOf(i)>=0?n:t||"/Assets/img/avatars/male.png")+"?"+Date.now()};e.goToApiUi=function(){if(h.hasPermission("Customer/API/Orders")){var n="/ConnectApi/ui/index?access_token="+f.get("connectToken");window.location.href=n}};e.closeFeatureNotificationPanel=function(){c.newFeaturesSeen()};e.firstName=null;h.killUser();ut.init();et=function(n){n!=undefined&&v.get({$orderby:"Name1 asc",$skip:"0",$top:"100"}).$promise.then(function(n){lt(n.Items)})};n.element(w).on("resize",function(){e.$broadcast("window.resize")});u.$on("accounts.changed",ot);u.$on("accounts.retrieved",ot);u.$watch("session.user",function(n,t){if(n&&n.Profile){if(t&&n.Profile.UserId===t.Profile.UserId)return;r.log("%cUser changed >","color: deepskyblue",t?t.Profile.LoginId:"none","->",n.Profile.LoginId);t&&u.$broadcast("user.changed");e.firstName=n.Profile.FirstName;et(u.loginMode);d.ready(function(){d.identify().then(function(){u.isImpersonating?ut.shutdown():ut.boot(n.Profile)})});it.userChanged(function(){!u.isImpersonating&&u.session.accounts.list.length>0&&e.dqStatus.shouldPrompt&&o.go("app.user-welcome")})}else e.firstName=null,u.session.accounts={current:[],list:[]}},!0);ft=!1;u.$on("$stateChangeSuccess",function(n,t,i){u.CONNECT_UPDATE_AVAILABLE===!0&&i.name!==n.name&&(r.log("%cNew version of connect, reloading page on navigate success > ","color: orange",n.name),b(function(){window.location.reload()},50))});u.$on("$stateChangeStart",function(n,f,o,s){if(a.cancelAllRequests(),f.name==="app.liteDocs"||f.name==="app.liteDocs.docViewer"){h.token()&&(u.isAuthenticated=!0);return}if(r.log("%cStateChangeStart >","color: green",s.name||"init","->",f.name),ft&&f.name==="app.page-not-found"){n.preventDefault();return}f.name==="app.login"&&s.name==="app.login"&&o.returnUrl&&n.preventDefault();var v=!u.isAuthenticated||!u.session.user;v&&f.name!=="app.login"&&f.name!=="app.logout"&&f.name!=="app.registerTerms"?h.checkSession(function(){st(n,f)},function(n){f.access||!f.access&&f.needsAuth?(r.log("%cState requires authentication >","color: red",f.name),u.$broadcast(y.notAuthenticated,n)):r.log("%cStateChangeStart >","color: green","No authentication required")}):st(n,f);(f.name==="app.login"||f.name==="app.home")&&h.isAuthenticated()&&(r.log("%cStateChangeStart >","color: green","Already logged in, go to dash"),n.preventDefault(),ft=!0,e.goToDash());c.setState(!0);l.removeAll();t.endActiveTour();w.swal.close();f.scroller||i(0)});u.$on("$stateChangeSuccess",function(t,i,r,f){var o=h.getUser()?nt.getValueOrUndefined(h.getUser().Profile.UserId):undefined,e;d.page({name:i.name,path:g.path(),title:i.pageTitle,userId:o});ft&&(ft=!1);n.isDefined(i.pageTitle)&&u.setPageTitle(i.pageTitle);u.bodyClass=n.isDefined(i.bodyClass)?i.bodyClass:!1;e="modalDocumentView";f&&(f.name===e||f.name==="app.login")||i.name!==e||s.set("documentLauncher",f.name,{$$search:location.hash});u.$broadcast("state.changed",{state:i})});u.$on("$stateChangeError",function(n,t,i,u,f,e){r.error("StateChangeError >",n,t,e);o.go("app.page-not-found")});u.$on("$stateNotFound",function(n,t){r.error("StateNotFound >",t);o.go("app.page-not-found")});u.$on("page-not-found",function(){w.location="/#/page-not-found"});u.setPageTitle=function(n){n&&(u.pageTitle=n+" | CSR Connect")};u.$on(y.notAuthenticated,function(n,t){h.notAuthenticated();t&&t.data&&t.data.ExceptionMessage==="Version"&&b(function(){location.reload()},100)});u.helpers.isHome=ht;u.helpers.isLanding=ct;e.unImpersonate=function(){h.unimpersonate()};e.logout=function(){o.go("app.logout")}}n.module("component.layout").controller("LayoutController",r);r.$inject=["$log","$rootScope","$cookieStore","$scope","$state","$previousState","authService","accountsService","notificationService","resourceCancellingService","userAccounts","AUTH_EVENTS","$http","$window","$timeout","userPreferences","metrics","$location","utilService","SweetAlert","dqService","featureToggle","$intercom"]}(angular,connectTour,scrollToY),function(){"use strict";function i(){function t(n,t){n.focusOnResults=function(){t.find(".list:first").focus()}}return{controller:n,link:t,scope:!1,restrict:"A"}}function n(n,i,r,u,f){function s(){var n=f.store().get(o)||{};i.layout=angular.merge({},i.layout,n);i.$broadcast("layout init")}function e(){scrollToY(0);n.log(t,"Requesting",i.layout.size,"items at page",i.layout.page,"of",i.layout.pages);i.layoutChangeCallback&&i.layoutChangeCallback.call()}function h(){f.store().set(o,{mode:i.layout.mode,size:i.layout.size})}var o=r.listLayout+"LayoutPrefs";i.layout={initialised:!1,busy:!0,mode:i.layoutDefaultMode||"grid",size:12,page:1,pages:0,totalItems:0,first:0,last:0,setMode:function(n){i.layout.mode=n;h()},setSize:function(n){i.layout.size=n;h();i.layout.page=1;e()},updatePage:function(n,t){i.layout.updatePages(t);i.layout.page=n;i.layout.first=(n-1)*i.layout.size+1;i.layout.last=Math.min(n*i.layout.size,i.layout.totalItems)},updatePages:function(n){i.layout.totalItems=n;i.layout.pages=Math.ceil((n||0)/i.layout.size)},nextPage:function(){i.layout.page<i.layout.pages&&(i.layout.page=i.layout.page+1,e(),i.focusOnResults())},prevPage:function(){i.layout.page-1>0&&(i.layout.page=i.layout.page-1,e(),i.focusOnResults())},update:e};u.getUser()&&s();i.$on("user.setUser",s)}angular.module("component.layout").directive("listLayout",i);var t="[layout]";n.$inject=["$log","$scope","$attrs","authService","devicePreferences"]}(),function(){"use strict";function n(){function n(n,t,i){var r=i.href;t.on("click",function(n){n.preventDefault();var t=angular.element(r),i=t.offset().top;t.attr("tabindex","-1");$("html, body").animate({scrollTop:i===0?0:i-100},250,function(){t.focus()})})}return{link:n,restrict:"A"}}angular.module("component.layout").directive("scrollToAnchor",n)}(),function(){"use strict";function n(){return{controller:t,controllerAs:"sort",restrict:"A"}}function t(n){function i(t){n.filters.sortBy!=t?(n.filters.sortBy=t,n.filters.sort="1"):n.filters.sortBy==t&&(n.filters.sort=n.filters.sort==="0"?"1":"0");n.layout.update()}var t=this;t.setSort=i}function i(){function n(n,t,i){t.off("click.layout.SortHeader.setSort").on("click.layout.SortHeader.setSort",function(){n.sort.setSort(i.sortHeader)})}return{link:n,restrict:"A"}}angular.module("component.layout").directive("sortHeaders",n).directive("sortHeader",i);n.$inject=[];t.$inject=["$scope"];i.$inject=[]}(),function(n){"use strict";n.module("component.layout").directive("navigation",function(){return{restrict:"AE",transclude:!0,replace:!0,controller:["$scope",function(){}],link:function(n,t){n.getElement=function(){return t}},templateUrl:"layout-navigation.html"}}).controller("NavGroupController",["$scope",function(t){t.active=!1;t.hasIcon=!1;t.hasIconCaption=n.isDefined(t.iconCaption);this.setActive=function(n){t.active=n}}]).directive("navGroup",function(){return{restrict:"AE",controller:"NavGroupController",transclude:!0,replace:!0,scope:{icon:"@",title:"@",iconCaption:"@",showNewTag:"=?",active:"=?"},templateUrl:"layout-nav-group.html"}}).controller("NavItemController",["$rootScope","$scope","$location",function(t,i,r){i.isChild=!1;i.active=!1;i.isActive=function(n){return i.active=n===r.path(),i.active};i.hasIcon=!1;i.hasIconCaption=n.isDefined(i.iconCaption);i.getItemUrl=function(t){return n.isDefined(i.href)?i.href:n.isDefined(t)?"#"+t:""};i.getItemTarget=function(){return n.isDefined(i.target)?i.target:"_self"}}]).directive("navItem",["$window",function(){return{require:["^navigation","^?navGroup"],restrict:"AE",controller:"NavItemController",scope:{title:"@",view:"@",icon:"@",iconCaption:"@",href:"@",target:"@"},link:function(t,i,r,u){var f=u[1];t.$watch("active",function(i){i?(f!=null&&n.isDefined(f)&&f.setActive(!0),t.setBreadcrumb()):f!=null&&n.isDefined(f)&&f.setActive(!1)});t.openParents=t.isActive(t.view);t.isChild=n.isDefined(f);t.setBreadcrumb=function(){[].push(t.title);t.openParents=!1}},transclude:!0,replace:!0,templateUrl:"layout-nav-item.html"}}])}(angular),function(n){"use strict";function t(n){function t(){var t=Lists||{};return n(function(n){n(t)})}return{getLists:t}}n.module("component.lists").factory("Lists",t);t.$inject=["$q"]}(angular),function(n){function i(){return{restrict:"A",controller:t}}function t(t,i,r,u,f,e){function o(){!t.list.initialised&&t.listViewConfig&&(t.list.init(t.listViewConfig),t.$on("accounts.changed",function(){t.list.search(!0)}))}var s={resourceName:{},filters:[],order:[],itemsPerPage:25,sortColumn:"",asc:!1,pageSizeList:[10,25,50],additionalQueryParams:null,lastQuery:{}};t.list={config:{},initialised:!1};t.list.init=function(i){var f=n.extend({},s,t.list.config,i),r,u;if(t.list.config=f,r=t.list.config.filters,t.list.config.filters={},r.length)for(u=0;u<r.length;u++)t.list.config.filters[r[u].alias==undefined?r[u].field:r[u].alias]={field:r[u].field,value:r[u].value,operator:r[u].operator,condition:r[u].condition,alias:r[u].alias===undefined?"":r[u].alias,nested:r[u].nested===undefined?"":r[u].nested};t.list.sortColumn=t.list.config.sortColumn;t.list.asc=t.list.config.asc;t.list.search(!0);t.list.initialised=!0};t.list.search=function(n,i){var o,r,f,s;t.$broadcast("list.search");t.list.busy=!0;for(o in t.list.config.filters)t.list.config.filters.hasOwnProperty(o)&&(r=t.list.config.filters[o],r.value&&u.filters.add(r.field,r.operator,r.value,r.condition,r.alias,r.nested));for(f=0;f<t.list.config.order.length;f++)u.order.add(t.list.config.order[f].field,t.list.config.order[f].orderBy);t.list.config.count&&u.setCountOn();u.itemsPerPage=t.list.config.itemsPerPage;n&&!i&&(u.currentPage=e.params.page||1);i&&(u.currentPage=1);s=u.query();t.list.query(s);t.list.data=u;t.$broadcast("list.loaded")};t.list.query=function(n){var f={};for(var u in n)f[u]=n[u];for(u in t.list.config.additionalQueryParams)f[u]=t.list.config.additionalQueryParams[u];i.has(t.list.config.resourceName)&&(t.list.resource=i.get(t.list.config.resourceName));t.list.config.lastQuery=f;t.list.resource&&t.list.resource.query(f,function(n){t.list.items=n.Count>0?n.Items:null;t.list.totalItems=n.Count;r(function(){t.$broadcast("list.onDataBind");t.list.busy=!1})})};t.list.sort=function(n,i){t.list.asc=!i;t.list.sortColumn!==n&&(t.list.asc=!0);t.list.config.order=[{field:n,orderBy:t.list.asc?"asc":"desc"}];t.list.sortColumn=n;t.list.search()};t.list.changePage=function(){scrollToY(0);t.list.search();var i=n.extend({},e.params,{page:t.list.data.currentPage});e.go(e.current.name,i,{notify:!1})};t.list.setPageSize=function(n){t.list.config.itemsPerPage=n;t.list.search()};f.isReady()?o():t.$on("accounts.dataReady",o);t.$watch("listViewConfig",function(){o()})}n.module("component.listView").directive("listView",i);t.$inject=["$scope","$injector","$timeout","oDataService","accountsService","$state","$log"]}(angular),function(n){"use strict";function t(){return{restrict:"A",templateUrl:"pagination-nav.html"}}n.module("component.listView").directive("paginationNav",t)}(angular),function(){function t(){return{restrict:"A",controller:n}}function n(n,t,i){i.isReady()?(n.log("ListViewLite > Init > Accs Ready"),t.list.search()):(n.log("ListViewLite > Init > Deferring"),t.$on("accounts.dataReady",t.list.search));t.$on("accounts.changed",function(){t.list.search(!0)});t.list.changePage=function(){scrollToY(0);t.list.search()}}angular.module("component.listView").directive("listViewLite",t);n.$inject=["$log","$scope","accountsService"]}(),function(){"use strict";function t(){return{restrict:"E",transclude:!1,scope:{sbuCode:"=",accountNumber:"=",requiresActivation:"=",isReactivation:"=",linkId:"=",emailAddress:"=",isAuthenticated:"=",campaignTemplate:"=?",content:"<?",customMarketing:"=",hasCustomMarketing:"=",loadingMarketing:"="},controller:n,controllerAs:"liteMarketing",bindToController:!0,templateUrl:"lite-marketing.html",replace:!0}}function n(n,t,i,r,u,f,e){function h(){var n=r.open({templateUrl:"lite-user-activation-success.html",animation:!1,windowClass:"liteDoc",size:"md",backdrop:"static",keyboard:!1});return n.result.then(function(){o.userHasActivatedSuccessfully=!0}),n}function s(){var n=r.open({templateUrl:"lite-user-activation-error.html",animation:!1,windowClass:"liteDoc",size:"md",backdrop:"static"});return n.result.then(function(){o.activateUserButtonDisabled=!1}),n}var o=this;o.marketingVisible=!1;o.userHasActivatedSuccessfully=!1;o.campaignTemplate=o.campaignTemplate||"lite-marketing-default.html";o.requiresActivation||(o.requiresActivation=!1);o.openMarketing=function(){o.marketingVisible=!0};o.closeMarketing=function(){o.marketingVisible=!1};o.notYou=function(){o.requiresActivation=!1};o.activateUser=function(){o.activateUserButtonDisabled=!0;t.activate(o.linkId).$promise.then(function(n){n.success===!1?s():h({Email:o.emailAddress},u)},function(n){i.log(n);s()});trackCc172(!0)};o.customMarketingRedirect=function(){n.customMarketing!=undefined&&(n.customMarketing.metricName!=undefined&&f.track(n.customMarketing.metricName,{url:window.location,user_agent:navigator.userAgent,account_id:accountNumber}),n.customMarketing.url!=undefined&&e.open(n.customMarketing.url,"_blank"))};n.$watch("liteMarketing.marketingVisible",function(n){n===!0?document.body.classList.add("full-page-lite-marketing-open"):document.body.classList.remove("full-page-lite-marketing-open")})}angular.module("component.liteMarketing").directive("liteMarketing",t);n.$inject=["$scope","liteDocsService","$log","$modal","$sce","metrics","$window"]}(),function(){"use strict";function n(){function t(n){if(!n||!n.match)return!1;return n.match(/^\d{4}-\d{2}-\d{2}$/)!=null}function n(){}return n.prototype={getFilterValueApplyToFilters:function(n,i,r){var o=undefined,f=undefined,u,e,s;return r.contains(".")&&(f=r.split("."),o=r[0]),u=angular.copy(n[r]?n[r]:getObjectByString(i,r)),u&&(u===""||u===" ")&&(u=null),u&&t(u)&&(u=new Date(moment(u,"YYYY-MM-DD",!0))),o===undefined||f===undefined?i[r]=u:(e=f.length-1,s=f.splice(0,e).join("."),getObjectByString(i,s)[f[e-1]]=u),u}},new n}angular.module("component.locationFilterProvider").factory("locationFilterProvider",n);n.$inject=[]}(),function(n){"use strict";function i(){return{require:"^form",restrict:"AE",isolate:!1,scope:{address:"=address",form:"=form",addressRequired:"=addressRequired",country:"=country",availableStates:"<?availableStates",prompt:"@prompt",addressChange:"&"},controller:t,controllerAs:"lookupAddress",templateUrl:"lookupAddress.html"}}function t(n,t){function f(n,t){n.charCode===13&&(n.preventDefault(),scrollToId(t),document.getElementById(t).focus())}function e(){var n="AddressLine1"+i.instanceId+"hidden";t.form&&t.form[n]&&t.form[n].$setDirty();u()}function u(){n(function(){t.addressChange()})}function o(){var n="",e=0,i=[],u=t.form.deliveryAddress.$error.required,r,f;if(u){for(r=0;r<u.length;r++)(u[r].$dirty||t.form.$submitted)&&u[r].$invalid&&(i[e]=u[r].$name,e++);n=i.length>1?i.slice(0,-1).join(", ")+" and "+i[i.length-1]:i[0];i.length===1?n+=" is required":i.length>1&&(n+=" are required")}if(t.form.deliveryAddress.$error.maxlength)for(f=0;f<t.form.deliveryAddress.$error.maxlength.length;f++)t.form.deliveryAddress.$error.maxlength[f].$valid===!1&&(n=(n.length>0?n+"; ":n)+(t.form.deliveryAddress.$error.maxlength[f].$name+" too long"));return n}var i=this;i.instanceId=r++;i.nextField=f;i.placeSearch={options:{types:"address",country:t.country},result:""};i.citiesSearch={options:{types:"(cities)",country:t.country},result:""};i.validateAddressAutoComplete=e;i.addressChange=u;i.getAddressErrors=o;(!t.availableStates||t.availableStates.length<=0)&&(t.availableStates=["ACT","NSW","NT","QLD","SA","TAS","VIC","WA"])}n.module("component.lookupAddress").directive("lookupAddress",i);t.$inject=["$timeout","$scope"];var r=1001}(angular);angular.module("component.metrics").constant("segmentDefaultConfig",{apiKey:null,autoload:!0,loadDelay:0,initialPageview:!0,condition:null,debug:!1,methods:["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","page","once","off","on"],tag:"[component.metrics] "}),function(n){function t(n){this.hasLoaded=n||!1;this.load=function(n,t){if(this.hasLoaded||window.analytics.initialized)throw new Error("Attempting to load Segment twice.");else if(n)this.hasLoaded=!0,window.setTimeout(function(){var t=document.createElement("script"),i;t.type="text/javascript";t.async=!0;t.src=(document.location.protocol==="https:"?"https://":"http://")+"cdn.segment.com/analytics.js/v1/"+n+"/analytics.min.js";t.onerror=function(){console.error("Error loading Segment library.")};i=document.getElementsByTagName("script")[0];i.parentNode.insertBefore(t,i)},t);else throw new Error("Cannot load Analytics.js without an API key.");}}function i(){t.call(this);this.$get=function(){return new t(this.hasLoaded)}}n.provider("segmentLoader",i)}(angular.module("component.metrics")),function(n,t){function u(n,u,f,e){this.config=n;this.httpParamSerializer=e;this.factory=function(n){return function(){if(this.config.condition&&!this.config.condition(n,arguments)){this.debug("Not calling method, condition returned false.",{method:n,arguments:arguments});return}if(this.debug("Calling method "+n+" with arguments:",arguments),n==="track"&&arguments.length===2){var e,h,o=arguments[0],s=arguments[1];return o.feature?(e=r.FVN,h=this.httpParamSerializer(o)):(e=r.default,h=this.httpParamSerializer({eventName:arguments[0]})),e===r.FVN&&s&&!s.eventTime&&(s.eventTime=moment().format("dddd, MMMM Do, YYYY h:mm:ss A")),f.post("api/user/"+e+"?"+h,s).then(function(n){n.data&&n.data.success?u.log("%cTrack successful>","color:green",o):(u.log("%cTrack failed>","color:red",o),u.log(n.data.msg))})}return n==="identify"?f.post("api/user/identify").then(function(n){n.data&&n.data.success?u.log("%cIdentify successful","color:green"):u.log("%cIdentify failed >","color:red",n.data.msg)}):t.analytics[n].apply(i,arguments)}.bind(this)}}function f(n){this.config=angular.copy(n);this.queue=[];this.factory=function(n){var t=this.queue;return function(){t.push({method:n,arguments:arguments})}};this.init();this.setKey=function(n){return this.config.apiKey=n,this.validate("apiKey"),this};this.setLoadDelay=function(n){return this.config.loadDelay=n,this.validate("loadDelay"),this};this.setCondition=function(n){return this.config.condition=n,this.validate("condition"),this};this.setEvents=function(n){return this.events=n,this};this.setConfig=function(n){if(!angular.isObject(n))throw new Error(this.config.tag+"Config must be an object.");return angular.extend(this.config,n),Object.keys(n).forEach(function(n){this.validate(n)}.bind(this)),this};this.setAutoload=function(n){return this.config.autoload=!!n,this};this.setDebug=function(n){return this.config.debug=!!n,this};this.setInitialPageview=function(n){return this.config.initialPageview=!!n,this.debug("setting config",this.config),this};var t={apiKey:function(n){if(!angular.isString(n.apiKey)||!n.apiKey)throw new Error(n.tag+"API key must be a valid string.");},loadDelay:function(n){if(!angular.isNumber(n.loadDelay))throw new Error(n.tag+"Load delay must be a number.");},condition:function(n){if(!angular.isFunction(n.condition))throw new Error(n.tag+"Condition callback must be a function.");}};this.validate=function(n){typeof t[n]=="function"&&t[n](this.config)};this.createService=function(n,t,i,r,f){var o,s,e;if(n.has("segmentConfig")){if(o=n.get("segmentConfig"),!angular.isObject(o))throw new Error(this.config.tag+"Config constant must be an object.");angular.extend(this.config,o);this.debug("Found segment config constant");Object.keys(o).forEach(function(n){this.validate(n)}.bind(this))}return this.config.autoload&&(this.debug("Autoloading Analytics.js"),this.config.apiKey?r.load(this.config.apiKey,this.config.loadDelay):this.debug(this.config.tag+" Warning: API key is not set and autoload is not disabled.")),typeof this.config.condition=="function"&&(s=this.config.condition,this.config.condition=function(t,i){return n.invoke(s,s,{method:t,params:i})}),e=new u(angular.copy(this.config),t,i,f),this.events&&(e.events=angular.copy(this.events)),e.init(),this.queue.forEach(function(n){e[n.method].apply(e,n.arguments)}),e};this.$get=["$injector","$log","$http","segmentLoader","$httpParamSerializer",this.createService]}var i=t.analytics=t.analytics||[],r;i.invoked?console.error("Segment or ngSegment included twice."):i.invoked=!0;i.factory=function(n){return function(){var t=Array.prototype.slice.call(arguments);return t.unshift(n),i.push(t),i}};r={"default":"track",FVN:"trackFVN"};u.prototype={init:function(){for(var n,t=0;t<this.config.methods.length;t++)n=this.config.methods[t],i[n]||(i[n]=i.factory(n)),this[n]=this.factory(n)},debug:function(){if(this.config.debug)return arguments[0]=this.config.tag+arguments[0],t.console&&Function.prototype.apply.call(console.log,console,arguments),!0}};f.prototype=Object.create(u.prototype);n.provider("metrics",["segmentDefaultConfig",f])}(angular.module("component.metrics"),window),function(){"use strict";function n(n,t,i){function r(n,t,r){var f=debounce(function(){n.data=angular.isObject(n.data)?n.data:{};i.track(u(n.event),n.data)},250);r.metricsTrackImmediately?f():t.click(f)}function u(n){var t=n.split("/");return t.length>=3?{feature:t[0],verb:t[1],noun:t[2],pluralisation:t[3]||EnumDescriptions.pluralisationEnum.undefined}:n}return{restrict:"A",link:r,scope:{event:"@metricsTrack",data:"<?metricsTrackData"}}}angular.module("component.metrics").directive("metricsTrack",n);n.$inject=["$window","$log","metrics"]}(),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{},templateUrl:"modal-empty-message.html"}}n.module("component.modal").directive("modalEmptyMessage",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{},templateUrl:"modal-loading-message.html",link:function(n,t,i){n.message=i.message||"Loading"}}}n.module("component.modal").directive("modalLoadingMessage",t)}(angular),function(){"use strict";angular.module("component.ngTranscludeReplace").directive("ngTranscludeReplace",["$log",function(n){return{terminal:!0,restrict:"EA",link:function(t,i,r,u,f){if(!f){n.error("orphan","Illegal use of ngTranscludeReplace directive in the template! No parent directive that requires a transclusion found. ");return}f(function(n){n.length?i.replaceWith(n):i.remove()})}}}])}(),function(){"use strict";function n(n,t,i,r,u){function o(){n.editNoteForm&&!n.editNoteForm.$invalid&&t.close({note:f.note,notify:f.notify})}var f=this,e;f.notify=!1;f.note=i;f.isAdd=r;f.update=o;e=u.getUser();f.isAccountManager=[1,2,3,4,5,6].indexOf(e.Profile.ProfileType)>-1;f.isCustomerOrDelegate=[7,8].indexOf(e.Profile.ProfileType)>-1}angular.module("component.notes").controller("editNoteController",n);n.$inject=["$scope","$modalInstance","note","isAdd","authService"]}(),function(){function n(){return{restrict:"A",scope:!0,controller:t,controllerAs:"vm"}}function t(n,t,i,r,u){function o(n){n.clickHandler&&(r.remove(n.id),n.clickHandler())}function s(){scrollToY(0)}var f=this,e;f.notifications={};f.clickHandler=o;i.$on("notifications.update",function(){t(function(){f.notifications=r.getNotifications();angular.equals({},f.notifications)||s()})});n.$on("progressHub.message",function(n,t){r.add({id:"progresshub-message",type:"info",message:t,clickHandler:function(){u.go("app.downloads")}})});e={info:" alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"};i.notificationClass=function(n){return e[n]};i.notificationsExist=function(){return!$.isEmptyObject(f.notifications)};i.removeNotification=function(n){r.remove(n)}}angular.module("component.notification").directive("notifications",n);n.$inject=["$window"];t.$inject=["$rootScope","$timeout","$scope","notificationService","$state"]}(),function(){"use strict";function n(n,t,i,r){function o(){return u.notifications}function s(t){if(t.id)f(t.id),u.notifications[t.id]=t;else{var i=(new Date).getTime();t.id=i;u.notifications[i]=t}t.expire&&e(t.id);n.$broadcast("notifications.update")}function e(n){t(function(){f(n)},5e3)}function f(t){u.notifications[t]&&(delete u.notifications[t],n.$broadcast("notifications.update"))}function h(){u.notifications={};n.$broadcast("notifications.update")}function c(n){var t=n||"complete your request";r.swal({type:"error",title:"Experiencing problems",text:"Sorry, we're unable to "+t+" right now. Please refresh and try again.",confirmButtonText:"Refresh now"},function(){i.location.reload(!0)})}var l=function(n,t){this.type=n;this.message=t},u={notifications:{},getNotifications:o,add:s,expire:e,remove:f,removeAll:h,handleProblem:c,types:{error:"error",success:"success",warning:"warning",info:"info"}};return u}angular.module("component.notification").factory("notificationService",n);n.$inject=["$rootScope","$timeout","$window","SweetAlert"]}(),function(){"use strict";function n(n){var i={};i.itemsPerPage=25;i.currentPage=1;var f={"=":"eq","!=":"ne",">":"gt",">=":"ge","<":"lt","<=":"le"},e=function(n,t,i,r,u,f){this.field=n;this.operator=t;this.value=i;this.alias=u;this.condition=r===undefined?"and":r;this.nested=f},o=function(n,t){this.field=n;this.orderBy=t},t=[],r=[],u=!1;return i.filters={},i.order={},i.setCountOn=function(){u=!0},i.setCountOff=function(){u=!1},i.filters.add=function(n,i,r,u,f,o){if(r!==""){var s=new e(n,i,r,u,f,o);t.push(s)}},i.order.add=function(n,t){var i=new o(n,t);r.push(i)},i.filters.query=function(){for(var h,o,u,r="",s=!0,i=0;i<t.length;i++){t[i].nested=="start"&&(r+="(");switch(t[i].operator){case"like":if(h=t[i].value,o=h.split(" "),o.length>1)for(u=0;u<o.length;u++)r+="contains(tolower("+t[i].field+"),tolower('"+o[u]+"'))",o.length-1>u&&(r+=" and ");else r+="contains(tolower("+t[i].field+"),tolower('"+t[i].value+"'))";break;case"=":t[i].value!=null&&t[i].value!=undefined?(n.info("oDataService > adding filter",t[i]),r+=t[i].field+" "+f[t[i].operator]+" "+t[i].value):(n.info("oDataService > not adding this filter",t[i]),s=!1);break;case"in":var e="",c=t[i].value.split(","),l=t[i].field;for(e+=" (",u=0;u<c.length;u++)e+="("+l+" eq "+c[u]+") or ";e=e.substr(0,e.length-4);e+=" ) ";r+=e;break;default:r+=t[i].field+" "+f[t[i].operator]+" "+t[i].value}t[i].nested=="end"&&(r+=")");t.length-1>i&&s&&(r+=" "+t[i].condition+" ");s=!0}return r},i.order.query=function(){return angular.isArray(r)&&r.length>0?r[0].field+" "+r[0].orderBy:""},i.query=function(){var n={},t=this.filters.query(),r=this.order.query();return t&&(n.$filter=t),r&&(n.$orderby=r),n.$top=this.itemsPerPage,n.$skip=((this.currentPage||1)-1)*this.itemsPerPage,u&&(n.$count="true"),i.clear(),n},i.reset=function(){i.itemsPerPage=itemsPerPage;i.currentPage=1},i.clear=function(){t=[];r=[];i.setCountOff()},i}angular.module("component.oData").factory("oDataService",n);n.$inject=["$log"]}(),function(){function i(){return{restrict:"A",scope:!0,controller:t,controllerAs:"ou",templateUrl:"/orders/orderUpload",link:r}}function t(t,i,r,u,f){function a(){h(e.uploadedOrderBase)}function h(n){angular.copy(n,e.uploadedOrder)}function v(){s.modal();s.on("click",".closer",function(){c()})}function c(){s.modal("hide")}function y(t){u.log(n,"Uploading",t);h(e.uploadedOrderBase);e.orderFileUploading=!0}function p(n){l(!0,n.data)}function w(n){l(!1,n.data)}function l(t,i){if(typeof i=="string"||i instanceof String)try{var r=JSON.parse(i);i=r}catch(f){}u.log(n,"Upload outcome:",i);e.clearUploadInput();c();h(i);e.orderUploadSuccessful=t;o.modal();o.on("click",".closer",function(){o.modal("hide")});e.orderFileUploading=!1}function b(){var n="hidden.bs.modal";if(e.orderUploadSuccessful)o.off(n).on(n,function(){r.go("app.orderEdit",{orderId:e.uploadedOrder.OrderId},{reload:!0,inherit:!0})});o.modal("hide")}function k(){var t=f.getUser(),n;return t?(n=t.Profile.ProfileType,n&&(n==1||n==2||n==3))?!0:!1:!1}var e=this,s=$("#modal-order-import-intro"),o=$("#modal-order-import-outcome");e.orderUploadSuccessful=!1;e.uploadedOrderBase={OrderId:null,OrderReference:"",Errors:[],ExcludedProductCodes:[],NonExistentProductCodes:[]};e.uploadedOrder={};e.orderFileUploading=!1;e.orderUploadUrl="/api/orders/import?stamp="+Date.now()+"&access_token="+f.token();e.templateUrl=AWS_STORAGE_URI+"assets/templates/CSR_Order_Upload_Template.xlsx";e.show=v;e.orderUpload=y;e.orderUploadSuccess=p;e.orderUploadError=w;e.modalOpenOrder=b;e.isAdminUser=k;a()}function r(n,t,i,r){var u=null;r.clearUploadInput=function(){(u=u||t.find("input"),u.length)&&(u[0].value=null,u[0].type="text",u[0].type="file")}}angular.module("component.orderUpload").directive("orderUpload",i);var n="[OrderUpload]";t.$inject=["$timeout","$scope","$state","$log","authService"]}(),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{},transclude:!0,templateUrl:"page-empty-message.html",link:function(n,t,i){n.feature=i.feature||"empty";n.title=i.title||"We looked, but couldn't find anything.";n.message=i.message||"Please try again or contact Connect support.";n.showIcon=i.showicon==="false"?!1:!0;n.showMessage=i.showmessage==="false"?!1:!0}}}n.module("component.pageEmptyMessage").directive("pageEmptyMessage",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",replace:!0,scope:{},templateUrl:"page-error-message.html",link:function(n,t,i){n.feature=i.feature||"technical";n.title=i.title||"We've encountered a problem.";n.message=i.message||"Please try again or contact Connect support."}}}n.module("component.pageErrorMessage").directive("pageErrorMessage",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",scope:{},templateUrl:"page-loading-message.html",replace:!0,link:function(n,t,i){n.message=i.message||"Loading"}}}n.module("component.pageLoadingMessage").directive("pageLoadingMessage",t)}(angular),function(n){"use strict";function t(){return{restrict:"E",templateUrl:"expandingPanel.html",transclude:!0,replace:!0,scope:{panelCanCollapse:"="},link:function(n,t,i){n.$watch(function(){return n.panelCanCollapse},function(t){t!==undefined&&(n.canCollapse=t===!0,n.collapsedHeight=n.canCollapse===!0?i.collapsedHeight||"200px":"auto",n.collapsedStyle={height:n.collapsedHeight})});n.canCollapse=n.panelCanCollapse===!0;n.isCollapsed=!0;n.collapsedHeight=n.canCollapse===!0?i.collapsedHeight||"200px":"auto";n.collapsedStyle={height:n.collapsedHeight};n.message="more";n.toggleExpansion=function(){n.isCollapsed=!n.isCollapsed;n.message=n.isCollapsed===!1?"less":"more";n.collapsedStyle=n.isCollapsed===!1?{height:"auto"}:{height:n.collapsedHeight}}}}}n.module("component.panels").directive("expandingPanel",t)}(angular),function(){"use strict";function n(){function n(n,t,i,r){r.$validators.matchesNewPassword=function(t){return t&&t===n.newPassword?!0:!1};n.$watch("newPassword",function(){r.$validate()})}return{restrict:"A",require:"ngModel",scope:{newPassword:"=passwordMatch"},link:n}}angular.module("component.passwordMatch").directive("passwordMatch",n)}(),function(){"use strict";function n(){function n(n,t,i,r){r.$validators.matchesCurrentPassword=function(t){return t&&t!=n.currentPassword?!0:!1};n.$watch("currentPassword",function(){r.$validate()})}return{restrict:"A",require:"ngModel",scope:{currentPassword:"=passwordNotMatch"},link:n}}angular.module("component.passwordMatch").directive("passwordNotMatch",n)}(),function(){"use strict";function n(n){function t(t,i,r,u){var f=/[A-Z]/,e=/[a-z]/,o=/\d/,s=8;u.$validators.uppercaseLetters=function(t){return n.modelContains(t,f)};u.$validators.lowercaseLetters=function(t){return n.modelContains(t,e)};u.$validators.numbers=function(t){return n.modelContains(t,o)};u.$validators.passwordLength=function(n){return n&&n.length>=s?!0:!1}}return{restrict:"A",require:"ngModel",link:t}}angular.module("component.passwordStrength").directive("passwordStrength",n);n.$inject=["passwordStrengthService"]}(),function(){"use strict";function n(){function n(n,t){return!n||!t?!1:n&&t.test(n)}return{modelContains:n}}angular.module("component.passwordStrength").factory("passwordStrengthService",n)}(),function(){"use strict";function n(n){function i(n,i,r,u){var f=u.getAuthKey();t(i,r,f);n.$on("user.setUser",function(){t(i,r,f)})}function t(t,i,r){var u=!1;r===""?u=!0:angular.forEach(i.auth,function(t){n.canDo(t,r)&&(u=!0)});t.toggle(u)}return{restrict:"A",require:"^authKey",link:i}}angular.module("component.permissions").directive("auth",n);n.$inject=["authService"]}(),function(){"use strict";function n(n){function r(n,t,r){i(t,r);n.$on("user.setUser",function(){i(t,r)})}function i(t,i){var f=!1,u,r;if(i.authKey==="")f=!0;else if(i.authKey.indexOf("&")>0)for(u=i.authKey.split("&"),f=u.length>0,r=0;r<u.length;r++)f=f&&n.hasPermission(u[r]);else for(u=i.authKey.split(";"),r=0;r<u.length;r++)if(n.hasPermission(u[r])){f=!0;break}t.toggle(f)}return{restrict:"A",controller:t,link:r}}function t(n,t){this.getAuthKey=function(){return t.authKey}}angular.module("component.permissions").directive("authKey",n);n.$inject=["authService"];t.$inject=["$scope","$attrs"]}(),function(){"use strict";function n(n){function i(n,i,r){t(i,r);n.$on("user.setUser",function(){t(i,r)})}function t(t,i){var r;r=i.authKeyHide===""?!0:n.hasPermission(i.authKeyHide);r&&t.hide()}return{restrict:"A",link:i,priority:1}}angular.module("component.permissions").directive("authKeyHide",n);n.$inject=["authService"]}(),function(){"use strict";function t(t){function r(n,t,r){i(t,r);n.$on("user.setUser",function(){i(t,r)})}function i(t){for(var e,i=!1,f=t.find("["+n+"]"),r=0;r<f.length;r++)if(e=f[r].getAttribute(n),i=u(e),i)break;t.toggle(i)}function u(n){for(var r=!1,u=n.split(";"),i=0;i<u.length;i++)if(t.hasPermission(u[i])){r=!0;break}return r}return{restrict:"A",link:r}}angular.module("component.permissions").directive("authKeyParent",t);t.$inject=["authService"];var n="auth-key"}(),function(){"use strict";function n(n,t){function i(i,r,u){i.initialiseScope=function(){n.hasPermission(u.authKey)&&i.init()};t.list().length?i.initialiseScope():i.$on("accounts.dataReady",i.initialiseScope);i.$on("accounts.changed",i.initialiseScope)}return{restrict:"A",link:i}}angular.module("component.permissions").directive("permissionInit",n);n.$inject=["authService","accountsService"]}(),function(){function t(){return{restrict:"A",scope:!0,controller:n,controllerAs:"hub",link:i}}function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v){function w(){var n=e.getUser();return n?n.Profile.UserId:null}function k(n){a.swal({title:"Cancel Download?",text:"The download will be cancelled, but you can start it again if you wish.",type:"warning",showCancelButton:!0,confirmButtonText:"Cancel Download",cancelButtonText:"Don't Cancel"},function(t){t&&v.cancelDownload({longRunningProcessId:n})})}function d(n){a.swal({title:"Remove Download?",text:"The download "+n.FileName+" will be removed from your list.",type:"warning",showCancelButton:!0,confirmButtonText:"Remove download",cancelButtonText:"Cancel"},function(t){t&&v.deleteDownload({longRunningProcessId:n.LongRunningProcessId})})}function g(n){if(y.lrps!=null){var t=y.lrps.filter(function(t){return t.LongRunningProcessId===n.LongRunningProcessId});t!=null&&t.length===1&&(t[0].Status=n.Status,t[0].Progress=n.Progress,t[0].Message=n.Message,t[0].Downloaded=n.Downloaded,b(y.lrps))}}function b(n){y.lrps=n;y.pending=!1;y.active=!1;y.downloadPending=!1;angular.forEach(n,function(n){if(n.Status===Enums.longRunningProcessStatus.notStarted&&(y.pending=!0),(n.Status===Enums.longRunningProcessStatus.running||n.Status===Enums.longRunningProcessStatus.uploading)&&(y.active=!0),n.Status===Enums.longRunningProcessStatus.complete){n.Downloaded||(y.downloadPending=!0);var t=moment(n.CreatedOn),r=moment(n.UpdateOn),i=moment(n.UpdatedOn);n.duration=i.diff(t)}})}function nt(){return f.get("/dosomethinglong/go")}var y=this,p;y.lrps=null;y.hubState=s.getState();y.loading=!0;s.addLoadingListener(function(n){y.loading=n});y.hasPermission=e.canDo("r","All/Download")&&e.canDo("r","Customer/Documents");p=w();t.$watch("session.user",function(){y.hasPermission=e.canDo("r","All/Download")&&e.canDo("r","Customer/Documents");p=w()});t.$on("progressHub.updateProcessList",function(t,r){n(function(){i.$apply(function(){b(r)})})});t.$on("progressHub.updateProgress",function(t,r){n(function(){i.$apply(function(){g(r)})})});t.$on("progressHub.connectionStateChange",function(t,r){n(function(){i.$apply(function(){y.hubState=r.newState})})});y.startLongRunningProcess=nt;y.statuses=Enums.longRunningProcessStatus;y.pending=!1;y.active=!1;y.downloadPending=!1;y.canRetry=function(n){return(n.Status===y.statuses.failed||n.Status===y.statuses.cancelled)&&n.RetryCount<3};y.needsHelp=function(n){return(n.Status===y.statuses.failed||n.Status===y.statuses.cancelled)&&n.RetryCount>=3};y.getResult=function(n,t){if(t.Status===Enums.longRunningProcessStatus.complete){var i="/api/lrp/"+t.LongRunningProcessId+"/result";i+="?access_token="+e.token();c.downloadUrl(i,t.FileName,undefined)}else t.Status===Enums.longRunningProcessStatus.failed&&t.RetryCount<3||t.Status===Enums.longRunningProcessStatus.cancelled?v.retryDownload({longRunningProcessId:t.LongRunningProcessId}):(t.Status===Enums.longRunningProcessStatus.running||t.Status===Enums.longRunningProcessStatus.notStarted)&&k(t.LongRunningProcessId)};y.delete=d;y.getActionColour=function(n){return n.Status===Enums.longRunningProcessStatus.complete&&!n.Downloaded?"success":"default"};y.getDisplayStatus=function(n){switch(n.Status){case y.statuses.notStarted:return"Queued";case y.statuses.running:return"";case y.statuses.cancelled:return"Cancelled";case y.statuses.failed:return"Failed";case y.statuses.complete:return"Complete";case y.statuses.uploading:return"Finalising";default:return""}};y.getDisplayAction=function(n){switch(n.Status){case y.statuses.notStarted:case y.statuses.running:return"Cancel";case y.statuses.complete:return"Download";case y.statuses.cancelled:return"Retry";case y.statuses.failed:return n.RetryCount<3?"Retry":"";default:return""}};y.getCanRemove=function(n){return n.UserId===p};y.hubState==="connected"&&s.getInitialList(!0)}function i(){}angular.module("component.progressHub").directive("progressHub",t);n.$inject=["$timeout","$rootScope","$scope","$state","$log","$http","authService","progressHub","progressHubService","documentsHelper","shareTools","documents","SweetAlert","downloads"]}(),function(){"use strict";function n(n){var t="/api/lrp";return n(t,null,{getAllForUserAsync:{url:t}})}angular.module("component.progressHub").factory("progressHub",n);n.$inject=["$resource"]}(),function(){"use strict";function t(t,i,r,u,f){function a(n){e.loadingListeners.push(n)}function c(n){e.loading=n;angular.forEach(e.loadingListeners,function(t){t(n)})}function v(){function f(){(h=!1,u.token())&&(e.hubState=s[$.connection.hub.state],$.connection.hub.qs={access_token:u.token()},o=$.connection.progressHub,o.client.onProgress=function(n){i.$emit("progressHub.updateProgress",n)},o.client.onUpdateProcessList=function(n){c(!1);h=!0;i.$emit("progressHub.updateProcessList",n);var t=0;angular.forEach(n,function(n){n.Status!==Enums.longRunningProcessStatus.complete&&n.Status!==Enums.longRunningProcessStatus.failed&&n.Status!==Enums.longRunningProcessStatus.cancelled&&t++});e.activeDownloads=t},o.client.onMessage=function(n){i.$emit("progressHub.message",n)},o.client.OnConnectionRegistered=function(){e.restartTime=1e3;l()},o.client.OnDataPush=function(n,t){i.$emit("progressHub."+n,t)},$.connection.hub.reconnected(function(){t.log(n,"reconnected");v()}),$.connection.hub.start().done(function(){v()}).fail(function(i){a(s[$.connection.hub.state]);t.log(n,"Start failed - "+i)}))}function p(){a(s[$.connection.hub.state]);t.log(n,"Restart delay: "+e.restartTime);r(function(){f()},e.restartTime);e.restartTime<=32e3&&(e.restartTime*=2)}function v(){e.restartTime=1e3;a(s[$.connection.hub.state]);y=$.connection.hub.id;o.server.registerConnection()}function a(r){var u=e.hubState;e.hubState=r;i.$emit("progressHub.connectionStateChange",{oldState:u,newState:r});t.log(n,"SignalR hub state change: "+u+" -> "+r);r==="disconnected"&&u!=="disconnected"&&p()}e.hubState=s[$.connection.hub.state];e.activeDownloads=0;o=null;var y="";i.$watch("session.user",function(n,t){var r=n?n.Profile.LoginId:"",u=t?t.Profile.LoginId:"";r!==u&&(n&&n.Profile?f():($.connection.hub.stop(),i.$emit("progressHub.updateProcessList",null)))});u.token()&&r(function(){f()})}function l(n){(n||!h)&&(c(!0),f.getAllForUserAsync())}var e=this,s,o,h;e.loadingListeners=[];e.hubId=null;e.restartTime=1e3;e.activeDownloads=0;e.getActiveDownloads=function(){return e.activeDownloads};this.getInitialList=l;e.addLoadingListener=a;c(!0);s=keyFlip($.signalR.connectionState);this.getState=function(){return e.hubState};v();o=null}angular.module("component.progressHub").service("progressHubService",t);var n="[progressHubService]";t.$inject=["$log","$rootScope","$timeout","authService","progressHub"]}(),function(n){"use strict";function i(){return{require:"^form",restrict:"AE",isolate:!0,scope:{innertext:"=",outertext:"=",percent:"="},controller:t,controllerAs:"progressIndicator",templateUrl:"progressIndicator.html"}}function t(n,t,i){function f(){r.outerStyle="";r.percent=u();t.innertext?r.innertext=i.trustAsHtml(t.innertext.replace("[0]",u()+"%")):(r.innertext="",r.styleHeight="height: 5px;");r.outertext=t.outertext?i.trustAsHtml(t.outertext.replace("[0]",u()+"%")):""}function u(){return!t.percent||t.percent===0?0:Math.round(t.percent)}var r=this;r.updateDisplay=f;t.$watchGroup(["innertext","outertext","percent"],function(){r.updateDisplay()})}n.module("component.progressIndicator").directive("progressIndicator",i);t.$inject=["$timeout","$scope","$sce"]}(angular),function(n){"use strict";function t(n){function i(i){var r=n.open({templateUrl:"request-password-reset.html",animation:!0,windowClass:"request-password-reset",size:"md",backdrop:"static",controller:t,controllerAs:"passwordReset",bindToController:!0,keyboard:!0,resolve:{emailAddress:function(){return i}}});return r.result}function t(n,t,i,r){var u=this;u.message="request-password-reset-prompt.html";u.captchaLoading=!0;u.requestInProgress=!1;u.details={Email:n,CaptchaToken:null};u.validateReCaptcha=function(){return u.requestInProgress=!0,r.getResponse()?(r.reload(),r.execute()):r.execute()};u.requestPasswordReset=function(n){return u.details.CaptchaToken=n,i.requestPasswordResetToken(u.details).then(function(){u.requestInProgress=!1;u.message="request-password-reset-success.html"},function(){u.showError()})};u.showError=function(){u.requestInProgress=!1;u.message="request-password-reset-error.html"};t.$on("$stateChangeStart",function(){if(u.requestInProgress!==!0)return u.$close()})}return t.$inject=["emailAddress","$scope","authService","vcRecaptchaService"],{requestPasswordReset:i}}n.module("component.resetPassword").factory("resetPassword",t);t.$inject=["$modal"]}(angular),function(){"use strict";function n(n,t,i){function u(n,u,f){function c(n,u){n.forEach(function(n){n.config.resolve=angular.extend(n.config.resolve||{},r.resolveAlways);t.state(n.state,n.config)});u&&!s&&(s=!0,i.otherwise(u))}function l(){u.$on("$stateChangeError",function(t,i,r,u,f,s){if(!e){o.errors++;e=!0;var h=i&&(i.title||i.name||i.loadedTemplateUrl)||"unknown target",c="Error routing to "+h+". "+(s.data||"")+". <br/>"+(s.statusText||"")+": "+(s.status||"");n.path("/")}})}function a(){l()}function v(){return f.get()}var e=!1,s=!1,o={errors:0,changes:0},h={configureStates:c,getStates:v,stateCounts:o};return a(),h}var r={docTitle:undefined,resolveAlways:{}};n.html5Mode(!1);this.configure=function(n){angular.extend(r,n)};this.$get=u;u.$inject=["$location","$rootScope","$state"]}angular.module("component.routerHelper").provider("routerHelper",n);n.$inject=["$locationProvider","$stateProvider","$urlRouterProvider"]}(),function(n){"use strict";function t(n,t){return{restrict:"E",templateUrl:"sbu-image.html",replace:!0,scope:{sbuCode:"="},link:function(i){i.$watch("sbuCode",function(){i.imgUrl=n(i.sbuCode);i.imgAlt=t(i.sbuCode)})}}}n.module("component.sbuImage").directive("sbuImage",t);t.$inject=["sbuLogoPathFilter","sbuNameFilter"]}(angular),function(n){"use strict";function t(n,t,i,r){function f(n,t,i,r){n.key=r.key=i.key;r.init()}var u=["$scope",function(n){n.clear=function(){t.getByKey(this.key).allSelected=!1;t.getByKey(this.key).data=[]};n.selectall=function(){t.getByKey(this.key).data=[];t.getByKey(this.key).allSelected=!0};n.pluralize=function(n,t){return t==1?n:n+"s"};n.download=function(targetType){var target,type;if(n.$emit("csat.showTray",{feature:"documents",trigger:"downloadDocument"}),i.getActiveDownloads()>=2)r.swal({title:"We can't do that right now",text:"You currently have 2 documents being prepared. Please wait until one of these has completed, then try again.",type:"warning",showCancelButton:!1,confirmButtonText:"Okay"},function(){return});else{if(target=t.getByKey(this.key),target===undefined||target===null)return;type=eval(targetType);target.allSelected===!0?t.beginDownloadByFilter(this.key,this.filters,type):t.beginDownloadByIds(this.key,type)}};this.init=function(){t.addKey(this.key);n.selectionService=t;var i=this.key;n.$watch("selectionService.elements",function(){if(t.containsKey(i)){var r=t.getByKey(i);n.count=r.allSelected?r.totalCount-r.data.length:r.data.length;n.totalCount=r.totalCount}},!0)}}];return{link:f,restrict:"EA",templateUrl:"selection.bar.html",controller:u,replace:!0}}n.module("component.selection").directive("selectionBar",t);t.$inject=["$window","selectionService","progressHubService","SweetAlert"]}(angular),function(n){"use strict";function t(n,t,r,u){function s(n,u,o,s){var h=o.element!==undefined;n.pageMode=!h;n.element=h?n[o.element]:{};n.elements=n[o.elements];n.elementsKey=o.elements;n.key=s.key=o.key;n.checkboxStyleClass=o.checkboxStyleClass;n.checkboxParentStyleClass=o.checkboxParentStyleClass;n.divStyleClass=o.divStyleClass;n.element.checked=n.pageMode?f(n.key,n.elements):e(n.key,n.element);"selectionCheckAuthKey"in o&&"selectionCheckAuth"in o?(n.dataAuthKey=o.selectionCheckAuthKey,n.dataAuth=o.selectionCheckAuth):r.error(i,"selection-check-auth-key and selection-check-auth attributes are required");t(u.contents())(n);s.init()}function e(n,t){var i=u.getByKey(n),r=u.getDataItem(n,u.getLookupForItem(n,t));return i===undefined||i.allSelected===!0&&r!==undefined||i.allSelected===!1&&r===undefined?!1:!0}function f(n,t){var i=u.getByKey(n),r,f,e;if(i===undefined||t===undefined||t===null)return!1;if(i.allSelected===!0&&i.data.length===0)return!0;for(r=0;r<t.length;r++)if(f=u.getDataItem(n,u.getLookupForItem(n,t[r])),e=i.allSelected===!1?f===undefined:f!==undefined,e)return!1;return!0}var o=["$scope",function(n){function t(n,t){for(var r,f=[],i=0;i<t.length;i++)r=u.getLookupForItem(n,t[i]),r!==undefined&&f.push(r);return f}n.preventClickPropagation=function(n){n.stopPropagation()};n.spanClick=function(t){t.preventDefault();t.stopPropagation();n.element.checked=!n.element.checked;n.checkitem()};n.checkitem=function(){var r=this.key,i=u.getByKey(r),e,o,f,c;if(i!==undefined)if(e=i.allSelected,this.pageMode){if(this.elements===undefined||this.elements===null)return;for(o=t(r,this.elements),f=0;f<o.length;f++)c=u.getDataItem(r,o[f]),c===undefined?i.data.push(o[f]):i.data.splice(c.$idx,1)}else{var s=u.getLookupForItem(r,n.element),h=u.getDataItem(r,s),l=h===undefined;n.element.checked?l?e||i.data.push(s):e&&i.data.splice(h.$idx,1):l?i.data.push(s):e||i.data.splice(h.$idx,1)}};this.init=function(){var t=this.key;n.selectionService=u;n.$watch("selectionService.elements",function(){n.element.checked=n.pageMode?f(t,n.elements):e(t,n.element)},!0);n.elementsKey!==undefined&&n.elementsKey!==null&&n.$watch(n.elementsKey,function(i){n.elements=i;n.element.checked=f(t,i)},!0)}}];return{link:s,restrict:"EA",transclude:!0,replace:!0,templateUrl:"selection-checkbox.html",controller:o}}n.module("component.selection").directive("selectionCheck",t);t.$inject=["$window","$compile","$log","selectionService"];var i="selectionCheck"}(angular),function(){"use strict";function n(){this.elements=[];this.addKey=function(n,t,i){this.containsKey(n)||this.elements.push({key:n,allSelected:!1,data:[],totalCount:0,resource:t,config:i||{documentNo:"id",accountId:"accountId",documentType:"type"}})};this.containsKey=function(n){return this.getByKey(n)!==undefined};this.getByKey=function(n){for(var t=0;t<this.elements.length;t+=1)if(this.elements[t].key===n)return this.elements[t];return undefined};this.getDataItem=function(n,t){var i=this.getByKey(n),r,u;if(i===undefined||i===null||i.data===undefined||i.data===null||i.data.length<=0)return undefined;for(r=0;r<i.data.length;r++){var f=i.data[r],e=0,o=0;for(u in t)t.hasOwnProperty(u)&&(o++,f[u]===t[u]&&e++);if(e===o)return{result:f,$idx:r}}return undefined};this.getLookupForItem=function(n,t){var i=this.getByKey(n),u,r;if(i===undefined||i===null||i.config===undefined||i.config===null)return{};u={};for(r in i.config)i.config.hasOwnProperty(r)&&(u[r]=t[i.config[r]]);return u};this.beginDownloadByIds=function(n,t){var i=this.getByKey(n);i.resource.beginDownloadByIds({documents:i.data,downloadType:t},function(){},function(){})};this.beginDownloadByFilter=function(n,t,i){var u=this.getByKey(n),r=angular.copy(t);r.keyword!=null&&r.keyword.isEmpty()&&delete r.keyword;r.fromDate=r.fromDate?moment(r.fromDate).format("YYYY-MM-DD"):null;r.toDate=r.toDate?moment(r.toDate).format("YYYY-MM-DD"):null;r.perPage=0;r.page=0;r.offset=0;r.exclusions=u.data;r.DownloadType=i;u.resource.beginDownloadByFilter(r,function(){},function(){})}}angular.module("component.selection").service("selectionService",n);n.$inject=[]}(),function(n){"use strict";function t(t,i){function e(f,e,o){function h(i){f.$emit("csat.showTray",{feature:"documents",trigger:"downloadDocument"});var e=s+"&intent=download",r=i.currentTarget;return n.element(r).toggleClass(u,!0),t.downloadUrl(e,null,r).then(function(){},function(n){t.printOrDownloadFailure(n)}).finally(function(){n.element(r).toggleClass(u,!1)})}var s=o.documentDownloadOnClick||undefined;if(s===undefined){e.attr("disabled",!0);i.log("document-download-on-click requires a document URL");return}o.ngClick&&i.log("document-download-on-click may compete with the ng-click event on this element");e.off(r).on(r,h)}var f={restrict:"A",link:e},r="click.downloadDocument",u="doc-action-pending";return f}n.module("component.shareTools").directive("documentDownloadOnClick",t);t.$inject=["shareTools","$log"]}(angular),function(n){"use strict";function t(n,t,i,r){function e(f,e,o){function l(){var t=r.open({templateUrl:"print-dialogue.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!1,animation:!1});return n.printDocument(s,c).catch(function(){n.printOrDownloadFailure()}).finally(function(){t.close()})}var h=t.isPrintFriendly(),s=o.documentToPrintOnClick||undefined,c=o.printTrackingOrigin||undefined;if(s===undefined){e.attr("disabled",!0);i.log("document-to-print-on-click requires a document URL");return}if(h){o.ngClick&&i.log("document-to-print-on-click may compete with the ng-click event on this element");e.off(u).on(u,l)}else{e.remove();return}}var f={restrict:"A",link:e},u="click.printDocument";return f}n.module("component.shareTools").directive("documentToPrintOnClick",t);t.$inject=["shareTools","browserPlatform","$log","$modal"]}(angular),function(n,t,i){"use strict";function r(n,t,r,u,f,e,o){function h(n,t,i){var f=r.defer(),e={responseType:"blob",bypassFilters:!0};return i&&(e.headers={"X-AccountIds":0}),u.get(n,e).then(function(n){var i=URL.createObjectURL(n.data);f.resolve({blobData:n.data,objectUrl:i,filename:y(n).replace(/["]/g,"")||t,disposeObjectUrl:function(){URL.revokeObjectURL(i)}})},function(n){f.reject(n)}),f.promise}function v(n){var t;try{t=n.config.url.split("&")[0]}catch(n){t="Generic; "+n}return t}function s(t,i,u,f){var e=r.defer();return h(t,i,f).then(function(i){var r,f;if(navigator.msSaveOrOpenBlob){navigator.msSaveOrOpenBlob(i.blobData,i.filename);i.disposeObjectUrl();e.resolve();return}r=document.createElement("a");!r.click||n.isiOs()||n.isAndroid()?(window.top===window&&t.split("#")[0]===window.location.href.split("#")[0]&&(f=t.indexOf("?")===-1?"?":"&",t=t.replace(/#|$/,f+"$&")),i.disposeObjectUrl(),e.resolve(),window.open(t,"_parent")):(r.href=i.objectUrl,r.target="_parent","download"in r&&(r.download=i.filename),u===undefined||u===null?(document.body||document.documentElement).appendChild(r):u.parentElement!==undefined&&u.parentElement!==null?u.parentElement.appendChild(r):u.appendChild(r),r.click(),r.parentNode.removeChild(r),i.disposeObjectUrl(),e.resolve())},function(n){e.reject(n)}),e.promise}function c(n,t){var u=r.defer();return i.isValidUrl(n,!0)||u.reject("restricted or invalid URL"),n.indexOf("/lite/")===-1&&(n=encodeURI(n+"#downloadManager.action=print")),h(n,null,t).then(function(t){var r="downloadManagerIFrame",i=document.getElementById(r)||document.createElement("iframe");i.className="ng-hide";i.id=r;i.src=t.objectUrl;document.body.appendChild(i);i.onload=function(){i.focus();var r=window.navigator.userAgent.indexOf("MSIE ");r>-1?i.contentWindow.document.execCommand("print",!1,null):i.contentWindow.print();t.disposeObjectUrl();u.resolve(n)}},function(n){u.reject(n)}),u.promise}function y(n){var t=n.headers("content-disposition"),i=t&&t.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);return i?i[1]:null}function l(){return n.isIe()||n.isFirefox()||n.isEdge()}function p(n,t){var i=n+(n.indexOf("?")===-1?"?":"&");return i+f({intent:"printDocument",origin:t})}function w(n){var u=r.defer();return i.getDocument(n).then(function(n){var i=n;i.getPage(1).then(function(n){u.resolve(t.print(i,{width:n.view[2],height:n.view[3]}))})}),u.promise}function b(n,t,i){var r=p(n,t);return l()?w(r):c(r,i)}function a(){}return a.prototype={shouldLegacyPrint:l,printDocument:b,printUrl:c,downloadUrl:function(n,t,r){return i.isValidUrl(n,!0)?s(n+"#downloadManager.action=download",t,r):!1},publicDownloadUrl:function(n,t,r){return i.isValidUrl(n,!0)?s(n+"#downloadManager.action=download",t,r,!0):!1},downloadData:function(n,t,r){if(navigator.msSaveBlob)return navigator.msSaveBlob(new Blob([n],{type:r}),t);var u=i.createObjectURL(n,r);return s(u,t)},download:function(n,t,i,r){if(!URL){this.downloadUrl(t,i);return}if(navigator.msSaveBlob){navigator.msSaveBlob(n,i)||this.downloadUrl(t,i,r);return}var u=URL.createObjectURL(n);s(u,i,r).finally(function(){URL.revokeObjectURL(u)})},printOrDownloadFailure:function(n){return e.track("Documents: Failed action",{message:v(n)}),o.swal({type:"info",title:"Print & download unavailable",text:"Sorry, there's no PDF available to print or download this document."})}},new a}n.module("component.shareTools").factory("shareTools",r);r.$inject=["browserPlatform","printService","$q","$http","$httpParamSerializer","metrics","SweetAlert"]}(angular,EnumDescriptions,PDFJS),function(){function n(n,t,i,r,u,f){function o(o){function l(){angular.isDefined(t.isAuthenticated)&&!t.isAuthenticated?a():angular.isDefined(t.isAuthenticated)&&t.isAuthenticated&&angular.isDefined(t.session.user)&&t.session.user&&p()}function a(){s.visitor={name:"",email:""};s.params=[];i.__lc=s;u.info(e,"We aren't authenticated and LiveChat directive is loaded");LC_API.on_message=function(n){n.text.indexOf("Can I help you with anything?")>-1&&n.text.indexOf("Welcome back")>-1||LC_API.open_chat_window()}}function v(){var t=document.createElement("script"),i;t.type="text/javascript";t.async=!0;t.src=("https"==n.protocol()?"https://":"http://")+"cdn.livechatinc.com/tracking.js";i=document.getElementsByTagName("script")[0];i.parentNode.insertBefore(t,i)}function h(){y()===!1?f(h,500):l()}function y(){return typeof LC_API=="object"}function p(){s.visitor={name:c(),email:t.session.user.Profile.EmailAddress};s.params=[{name:"Login Id",value:t.session.user.Profile.LoginId},{name:"User Id",value:t.session.user.Profile.UserId},{name:"Email",value:t.session.user.Profile.EmailAddress},{name:"First Name",value:t.session.user.Profile.FirstName},{name:"Last Name",value:t.session.user.Profile.LastName},{name:"Phone",value:t.session.user.Profile.Phone},{name:"Position",value:t.session.user.Profile.Position},{name:"Company Name",value:t.session.user.Profile.CompanyName},{name:"Profile Type",value:t.session.user.Profile.ProfileType},{name:"Windows User Name",value:t.session.user.Profile.WindowsId},{name:"Created By",value:t.session.user.Profile.CreatedBy},{name:"Created On",value:moment(t.session.user.Profile.CreatedOn).zone("+10:00").format("DD/MM/YYYY HH:mm:ss")}];i.__lc=s;u.info(e,"Settings authenticated parameters");LC_API.update_custom_variables(s.params);LC_API.set_visitor_name(c());LC_API.set_visitor_email(t.session.user.Profile.EmailAddress);LC_API.on_message=function(n){n.text.indexOf("Can I help you with anything?")>-1&&n.text.indexOf("Welcome back")>-1||LC_API.open_chat_window()}}function c(){return t.session.user.Profile.FirstName+" "+t.session.user.Profile.LastName}var s={};s.license=r.liveChatLicenseCode;i.__lc=s;v();f(h(),500);o.$on("user.authenticated",function(){u.log(e,"We are now authenticated and need to update LiveChat");h()})}var e="[LiveChatBox]";return{link:o,restrict:"E"}}angular.module("component.support").directive("liveChatBox",n);n.$inject=["$location","$rootScope","$window","siteSettings","$log","$timeout"]}(),function(n){"use strict";function t(){return{restrict:"A",transclude:!0,templateUrl:"support-dykPanel.html",replace:!0}}n.module("component.support").directive("supportDykPanel",t)}(angular),function(n){"use strict";function r(){function n(n,i){function r(n){i.toggleClass(t.openClass,n)}i.addClass(t.parentClass);i.on("click","."+t.toggleClass,function(n){n.preventDefault();n.stopPropagation();r()})}return{restrict:"A",scope:{},link:n,controller:i,controllerAs:"tip",bindToController:!0,transclude:!0,templateUrl:"support-tip.html"}}function i(t,i){function u(){var t;return i(function(i){t=n.element("<div>").append(i).html()}),t}var r=this;r.open=!1;r.tipId=t.supportTip;r.tipContent=u()}n.module("component.support").directive("supportTip",r);var t={parentClass:"support-tip",toggleClass:"support-tip-toggle",openClass:"open"};i.$inject=["$attrs","$transclude"]}(angular),function(){"use strict";function n(){function n(){}return{link:n,restrict:"A",scope:{}}}angular.module("component.tableHelpers").directive("tableBase",n);n.$inject=[]}(),function(){"use strict";function n(){function n(){}return{link:n,restrict:"A",scope:{}}}angular.module("component.tableHelpers").directive("tableClick",n);n.$inject=[]}(),function(n){"use strict";function t(t){function i(i,r){i.lockWidth=debounce(function(){n.forEach(r.find("th"),function(n){var t=$(n);t.width(t.width())})},250);t(i.lockWidth,100);$(window).resize(function(){i.lockWidth()})}return{link:i,templateUrl:"table-headers.html",transclude:!0}}n.module("component.tableHelpers").directive("tableHeaders",t);t.$inject=["$timeout"]}(angular),function(){function n(){function n(n,t){var i={complete:"complete",active:"active"},r,u;t.parent().append('<div class="loading complete"><i><\/i><\/div>');r=$(t).parent().find(".loading");u={show:function(){r.addClass(i.active).removeClass(i.complete)},hide:function(){r.addClass(i.complete);setTimeout(function(){r.removeClass(i.active)},500)}};n.list&&n.list.busy&&u.show();n.$on("list.search",u.show);n.$on("list.onDataBind",u.hide)}return{link:n,restrict:"C"}}angular.module("component.tableHelpers").directive("tableLoadingInd",n)}(),function(){function t(){function t(n){n.tableSelectAll=function(){var t=this.selectAll==="all"?!0:!1;angular.forEach(n.list.items,function(n){n.selected=t})}}return{link:t,restrict:"C",controller:n}}function n(n){n.selectedItems=[]}angular.module("component.tableHelpers").directive("tableSelectAll",t);n.$inject=["$scope"]}(),function(){"use strict";function n(){function n(){}return{link:n,restrict:"A",scope:{}}}angular.module("component.tableHelpers").directive("tableSort",n);n.$inject=[]}(),function(){function t(){function n(n,t,i){n.autostartTour&&t.addClass("tour-autostart");var u="/assets/scripts/tours/"+i.tour+".js",r=document.createElement("script");r.setAttribute("src",u+"?"+Date.now());r.setAttribute("type","text/javascript");t.append(r)}return{scope:!1,restrict:"A",controller:i,link:n}}function i(t,i,r,u){var f=i.tour;r.log(n,f,"available",u.tours);t.autostartTour=!1;u.tours[f]&&(t.autostartTour=!0,r.log(n,"Starting ",f,u.tours[f]),u.disembark(f))}angular.module("component.tour").directive("tour",t);var n="[tour]";t.$inject=["$window"];i.$inject=["$scope","$attrs","$log","tourQueue"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){return[{state:"app.tour",config:{url:"/tour?page&feature",templateUrl:"tour-layout.html",controller:["$state","$stateParams","$filter","$timeout","tourQueue",function(n,t,i,r,u){t.page&&(u.queue({tourPage:t.page,tourFeature:t.feature||"tour"+i("titleCase")(t.page)}),r(function(){n.go(t.page)}))}]}}]}n.module("component.tour").run(t);t.$inject=["routerHelper"]}(angular),function(){"use strict";function t(t){function r(r){r.tourPage&&(i.tours[r.tourFeature]=r,t.log(n,"Queued",r))}function u(r){t.log(n,"Disembarked for",r);delete i.tours[r]}var i={tours:{},queue:r,disembark:u};return i}angular.module("component.tour").factory("tourQueue",t);var n="[tours]";t.$inject=["$log"]}(),function(){"use strict";function t(t,i,r,u){function f(t,f,e){f.off().click(function(){angular.isDefined(window[e.tourLink])&&angular.isFunction(window[e.tourLink].restart)?(i.log(n,"Starting",e.tourLink),window[e.tourLink].restart(),window[e.tourLink].start(!0),r.track(u.tour.start,{tour:e.tourLink})):i.error(n,e.tourLink,"was not found")})}return{restrict:"A",link:f}}angular.module("component.tour").directive("tourLink",t);var n="[tourLink]";t.$inject=["$window","$log","metrics","metricEvents"]}(),function(n){"use strict";function t(n){return{require:"ngModel",link:function(t,i,r,u){function f(t){var i=n.cleanString(t);return u.$setViewValue(i),u.$render(),i}u.$parsers.unshift(function(n){return f(n)});u.$formatters.push(function(n){return f(n)})}}}n.module("component.unicodeTools").directive("escapeUnicode",t);t.$inject=["unicodeTools"]}(angular),function(n){"use strict";function t(){return{"«":'"',"":"-","´":"'","»":'"',"÷":"/","ǀ":"|","ǃ":"!","ʹ":"'","ʺ":'"',"ʼ":"'","˄":"^","ˆ":"^","ˈ":"'","ˋ":"`","ˍ":"_","˜":"~","̀":"`","́":"'","̂":"^","̃":"~","̋":'"',"̎":'"',"̱":"_","̲":"_","̸":"/","։":":","׀":"|","׃":":","٪":"%","٭":"*","​":"","‐":"-","‑":"-","‒":"-","–":"-","—":"-","―":"--","‖":"||","‗":"_","‘":"'","’":"'","‚":",","‛":"'","“":'"',"”":'"',"„":'"',"‟":'"',"′":"'","″":'"',"‴":"'''","‵":"`","‶":'"',"‷":"'''","‸":"^","‹":"<","›":">","‽":"?","⁄":"/","⁎":"*","⁒":"%","⁓":"~","⁠":"","⃥":"\\","−":"-","∕":"/","∖":"\\","∗":"*","∣":"|","∶":":","∼":"~","≤":"<=","≥":">=","≦":"<=","≧":">=","⌃":"^","〈":"<","〉":">","♯":"#","✱":"*","❘":"|","❢":"!","⟦":"[","⟨":"<","⟩":">","⦃":"{","⦄":"}","〃":'"',"〈":"<","〉":">","〛":"]","〜":"~","〝":'"',"〞":'"'}}n.module("component.unicodeTools").factory("unicodeLibrary",t)}(angular),function(n){"use strict";function t(n){function t(t){var u,i,r;if(t){for(u="",i=0;i<t.length;i++)r=t.charAt(i),u+=n[r]?n[r]:r;return u}}return{cleanString:t}}n.module("component.unicodeTools").service("unicodeTools",t);t.$inject=["unicodeLibrary"]}(angular),function(n){"use strict";n.module("csr.upload.formdata",[]).factory("csrFormDataTransform",function(){return function(t){var i=new FormData;return n.forEach(t,function(t,r){if(n.isElement(t)){var u=[];n.forEach(t,function(t){n.forEach(t.files,function(n){u.push(n)})});u.length!==0&&(u.length>1?n.forEach(u,function(n,t){i.append(r+"["+t+"]",n)}):i.append(r,u[0]))}else i.append(r,t)}),i}}).factory("csrNonFormDataTransform",function(){return function(n){return n.file[0].files[0]}}).factory("csrFormDataUpload",["$http","csrFormDataTransform","csrNonFormDataTransform",function(t,i,r){return function(u){return u.transformRequest=u.s3DirectUpload===!0?r:i,u.headers=n.extend(u.headers||{},{"Content-Type":undefined,Authorization:undefined}),t(u)}}])}(angular),function(n){n.module("csr.upload.directives",[]).directive("csrUploadButton",["csrUpload",function(t){return{restrict:"EA",scope:{data:"=?data",url:"@",param:"@",method:"@",onUpload:"&",onSuccess:"&",onError:"&",onComplete:"&",onPresignedUrlSuccess:"&",awsDirectUpload:"=",awsPresignedUrl:"&"},link:function(i,r,u){function s(n,t,i){n.awsDirectUpload===!0&&i.awsPresignedUrl===undefined&&console.error("csr-upload-button: You must specify aws-presigned-url if you have specified aws-direct-upload as true");n.awsDirectUpload===!0&&n.$eval(i.multiple)===!0&&console.error("csr-upload-button: You cannot specify both aws-direct-upload and multiple as true")}function e(n,i,r){var e={url:n.url,method:n.method||(n.awsDirectUpload===!0?"PUT":"POST"),forceIFrameUpload:n.$eval(r.forceIframeUpload)||!1,data:n.data||{},s3DirectUpload:n.awsDirectUpload||!1},u;e.data[n.param||"file"]=f;u=!0;u=n.onUpload({files:f[0].files});u||u===undefined?t(e).then(function(t){n.onSuccess({response:t});n.onComplete({response:t})},function(t){n.onError({response:t});n.onComplete({response:t})}):f.val(null)}function h(n,i,r){if("required"in r&&r.$observe("required",function(t){var r=t===""?!0:n.$eval(t);f.attr("required",r);i.toggleClass("ng-valid",!r);i.toggleClass("ng-invalid ng-invalid-required",r)}),"accept"in r&&r.$observe("accept",function(n){f.attr("accept",n)}),t.support.formData){var u=function(){f.attr("multiple",!!(n.$eval(r.multiple)&&!n.$eval(r.forceIframeUpload)))};r.$observe("multiple",u);r.$observe("forceIframeUpload",u)}}s(i,r,u);var o=n.element(r),f=n.element('<input type="file" />');o.append(f);f.on("change",function(){if(!f[0].files||f[0].files.length!==0)if(i.awsDirectUpload===!0&&u.awsPresignedUrl!==undefined){var n=i.awsPresignedUrl({filename:f[0].files[0]});n.$promise.then(function(n){if(n.success==!0){i.onPresignedUrlSuccess({response:n});i.url=n.data.Url;e(i,r,u)}else{i.onError({response:n});i.onComplete({response:n})}},function(n){i.onError({response:n});i.onComplete({response:n})})}else e(i,r,u)});h(i,r,u)}}}])}(angular),function(n){n.module("csr.upload.iframe",[]).factory("csriFrameUpload",["$q","$http","$document","$rootScope",function(t,i,r,u){function f(n,t){if(n.indexOf)return n.indexOf(t);for(var i=0;i<n.length;i++)if(t===n[i])return i;return-1}function e(e){var c=[],l=t.defer(),a=l.promise,s,o,h;n.forEach(e.data||{},function(t,i){n.isElement(t)&&(delete e.data[i],t.attr("name",i),c.push(t))});s=/\?/.test(e.url)?"&":"?";e.method==="DELETE"?(e.url=e.url+s+"_method=DELETE",e.method="POST"):e.method==="PUT"?(e.url=e.url+s+"_method=PUT",e.method="POST"):e.method==="PATCH"&&(e.url=e.url+s+"_method=PATCH",e.method="POST");var p=n.element(r[0].body),v=u.$new(),y="iframe-transport-"+v.$id;v.$destroy();o=n.element("<form><\/form>");o.attr("target",y);o.attr("action",e.url);o.attr("method",e.method||"POST");o.css("display","none");c.length&&(o.attr("enctype","multipart/form-data"),o.attr("encoding","multipart/form-data"));h=n.element('<iframe name="'+y+'" src="javascript:false;"><\/iframe>');h.on("load",function(){function r(t,i){var r=[];return n.isFunction(i)?i(t,r):(n.forEach(i,function(n){t=n(t,r)}),t)}function t(){var n=f(i.pendingRequests,e);n!==-1&&(i.pendingRequests.splice(n,1),e.$iframeTransportForm.remove(),delete e.$iframeTransportForm)}h.off("load").on("load",function(){var t,u;try{if(u=this.contentWindow?this.contentWindow.document:this.contentDocument,t=n.element(u.body).text(),!t.length)throw new Error;}catch(f){}o.append(n.element('<iframe src="javascript:false;"><\/iframe>'));try{t=r(t,i.defaults.transformResponse)}catch(f){}l.resolve({data:t,status:200,headers:[],config:e})});n.forEach(c,function(n){var t=n.clone(!0);n.after(t);o.append(n)});n.forEach(e.data,function(t,i){var r=n.element('<input type="hidden" />');r.attr("name",i);r.val(t);o.append(r)});e.$iframeTransportForm=o;i.pendingRequests.push(e);o[0].submit();a.then(t,t)});return o.append(h),p.append(o),a}return e}])}(angular),function(n){n.module("component.upload").factory("csrUpload",["$window","csrFormDataUpload","csriFrameUpload",function(t,i,r){function f(n){return u.formData&&!n.forceIFrameUpload?i(n):r(n)}var u={fileInput:!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(t.navigator.userAgent)||n.element('<input type="file">').prop("disabled")),fileUpload:!!(t.XMLHttpRequestUpload&&t.FileReader),formData:!!t.FormData};return f.support=u,f}])}(angular),function(){function t(){return{restrict:"A",scope:{model:"=",form:"="},controller:n,controllerAs:"dc",templateUrl:"companyDetails.html"}}function n(n){function i(){t.model.Mobile===null&&(t.model.Mobile="");t.model.Phone===null&&(t.model.Phone="");var n=t.model.Mobile.trim(),i=t.model.Phone.trim();return n+i}function u(){t.combinedNumbers=i();t.form.MobileCombinedNumbers&&t.form.MobileCombinedNumbers.$setDirty();t.form.PhoneCombinedNumbers&&t.form.PhoneCombinedNumbers.$setDirty()}function r(){var n,r;if(t.model&&(t.combinedNumbers=i(),t.selectedPosition=t.model.Position&&$.inArray(t.model.Position,t.positions)<0?"Other":t.model.Position,(!t.model.Country||!t.model.Timezone)&&(n=jstz.determine().name(),n))){if(r=n.split("/"),r.length!==2)return;r[0]==="Australia"?(t.model.Country="AU",t.model.Timezone=n):r[1]==="Auckland"&&(t.model.Country="NZ",t.model.Timezone=n)}}var t=this;t.model=n.model;t.form=n.form;n.$watch("model",function(n){t.model=n;t.form.$setPristine();r()});t.combinedNumbers="";t.positions=Lists.positions;t.selectedPosition=null;t.validateTelephones=u;t.countryChange=function(){t.model.Country==="AU"?(t.model.State=null,t.model.Timezone="Australia/Sydney"):(t.model.State=null,t.model.Timezone="Pacific/Auckland")};t.stateChange=function(){switch(t.model.State){case"ACT":case"NSW":case"TAS":case"VIC":t.model.Timezone="Australia/Sydney";break;case"NT":t.model.Timezone="Australia/Darwin";break;case"QLD":t.model.Timezone="Australia/Brisbane";break;case"SA":t.model.Timezone="Australia/Adelaide";break;case"WA":t.model.Timezone="Australia/Perth";break;default:t.model.Timezone=null}};t.selectedPositionChange=function(){t.model.Position=t.selectedPosition==="Other"?"":t.selectedPosition};r()}angular.module("component.companyDetails").directive("companyDetails",t);n.$inject=["$scope"]}(),function(){"use strict";function n(n){var t={};return t=n("/api/user",null,{update:{method:"PUT"}}),t.resetChangePassword=n("api/auth/loginchangepassword"),t.changePassword=n("api/user/changePassword"),t.acceptTerms=n("api/user/acceptterms"),t.insights=n("api/dq/insights/:mode",{mode:"@mode"}),t.insightsEdit=n("api/dq/insightsEdit/:userId",{userId:"@userId"}),t}function t(n){return n("/api/user/accounts",null,{query:{isArray:!1},get:{method:"GET",cancellable:!0}})}function i(n){var t={};return t=n("api/admin/profile/allCustomerAccounts"),t.load=n("api/admin/profile/:userId/accounts",{userId:"@userId"},{query:{isArray:!1}}),t.loadDelegates=n("api/admin/profile/:userId/delegateaccounts",{userId:"@userId"}),t.update=n("api/admin/profile/:userId/updateAccounts",{userId:"@userId"},{save:{method:"PUT"}}),t}function r(n){return n("/api/user/:userId/accounts",{userId:"@userId"},{query:{isArray:!1}})}function u(n){return n("api/admin/profile/customermasteraccountswithchildren/:userId/:assigneeId",{userId:"@userId",assigneeId:"@assigneeId"},{query:{isArray:!1}})}function f(n){var t="/api/admin/notifications";return n(t,null,{get:{url:t+"/:userid",isArray:!0},update:{method:"POST",url:t+"/update"},allowNotifications:{method:"POST",url:t+"/allow/:userid",isArray:!0},disallowNotifications:{method:"POST",url:t+"/disallow/:userid",isArray:!0}})}function e(n){var t={};return t=n("/api/admin/profile",null,{save:{method:"POST"},get:{isArray:!0}}),t.load=n("api/admin/profile/edit/"),t.remove=n("api/admin/profile/delete/:userId",{userId:"@userId"},{save:{method:"PUT"}}),t.edit=n("api/profiles/edit"),t.resetPwd=n("api/admin/profile/resetPwd/:userId/:pwd",{userId:"@userId"},{save:{method:"PUT"}}),t.inactive=n("api/admin/profile/inactive/:userId",{userId:"@userId"},{save:{method:"PUT"}}),t.active=n("api/admin/profile/active/:userId/:forceActivation",{userId:"@userId",forceActivation:"@forceActivation"},{save:{method:"PUT"}}),t.impersonate=n("api/admin/profile/impersonate/:userId",{userId:"@userId"},{save:{method:"PUT"}}),t.clearIntercomUserId=n("api/admin/profile/clearIntercomUserId/:userId",{userid:"@userId"},{save:{method:"POST"}}),t.createDelegate=n("/api/admin/profile/createDelegate",null,{save:{method:"POST"}}),t.lists=n("api/admin/profile/list"),t}function o(n){return n("api/admin/profile/list",null,{query:{isArray:!1}})}function s(n){var t={};return t.all=n("api/admin/profile/searchprofiletype",null,{get:{isArray:!0}}),t}function h(n){return n("api/admin/profile/delegates",null,{query:{isArray:!1}})}function c(n){var t={};return t.load=n("api/admin/profile/delegates",null,{query:{isArray:!1}}),t.profile=n("api/admin/profile/delegates/edit/",null,{save:{method:"PUT"}}),t}function l(n){var t={};return t=n("api/admin/profile/permission/",null,{save:{method:"PUT"}}),t.update=n("api/admin/profile/updatePermissions"),t}function a(n){var t=n("api/user/preferences");return t.accounts=n("api/user/preferences/saveaccounts",null,{save:{method:"POST",isArray:!1}}),t}function v(n){return n("api/admin/profile/usercsatdata",null,{query:{isArray:!1},get:{isArray:!0}})}function y(n){return n("api/admin/profile/:userId/usercsattrack",{userId:"@userId"},{save:{method:"PUT"},get:{isArray:!1}})}angular.module("component.user").factory("userData",n).factory("userAccounts",t).factory("userAccountsAssociate",i).factory("userAccountsById",r).factory("userCustomerMasterAccountsWithChildren",u).factory("userProfile",e).factory("userProfiles",o).factory("userProfileTypes",s).factory("userDelegates",h).factory("userProfilesDelegates",c).factory("userPermissionTypes",l).factory("userPreferences",a).factory("userCsat",v).factory("userCsatTrack",y).factory("userInvoiceNotifications",f);n.$inject=["$resource"];t.$inject=["$resource"];i.$inject=["$resource"];r.$inject=["$resource"];u.$inject=["$resource"];f.$inject=["$resource"];e.$inject=["$resource"];o.$inject=["$resource"];s.$inject=["$resource"];h.$inject=["$resource"];c.$inject=["$resource"];l.$inject=["$resource"];a.$inject=["$resource"];v.$inject=["$resource"];y.$inject=["$resource"]}(),function(){function t(){return{restrict:"A",controller:n,templateUrl:"userAvatar.html"}}function i(){return{restrict:"A",controller:n,templateUrl:"dqUserAvatar.html"}}function n(n,t,i,r,u){t.avatarUploading=!1;t.avatarUploadUrl="/api/user/avatar?stamp="+Date.now()+"&access_token="+i.token();t.avatarUpload=function(){t.avatarUploading=!0};t.avatarSuccess=function(i){n.session.user.avatarUrl=i.data+"?"+Date.now();r.add({id:"avatar",type:"success",message:"Your user photo has been successfully changed",expire:!0});u.status.avatarUploadedByUser=!0;t.avatarUploading=!1};t.avatarError=function(){r.add({id:"avatar",type:"error",message:"We are currently unable to update your user photo",expire:!0});t.avatarUploading=!1};t.hasProfileImage=function(n){var t=("."+n).indexOf("/Assets/img/avatars/male.png")>0;return(("."+n).indexOf(".jpg")>0||n.indexOf(".png")>0||n.indexOf(".gif")>0)&&!t}}angular.module("component.userAvatar").directive("userAvatar",t);angular.module("component.userAvatar").directive("dqUserAvatar",i);n.$inject=["$rootScope","$scope","authService","notificationService","dqService"]}(),function(n){function i(){return{restrict:"A",scope:{model:"=",form:"=",usernameVisible:"=",usernameEnabled:"=",passwordVisible:"="},controller:t,controllerAs:"dc",templateUrl:"userDetails.html"}}function t(t){var i=this;i.model=t.model;i.form=t.form;i.usernameVisible=n.isDefined(t.usernameVisible)?t.usernameVisible:!0;i.usernameEnabled=n.isDefined(t.usernameEnabled)?t.usernameEnabled:!0;i.passwordVisible=n.isDefined(t.passwordVisible)?t.passwordVisible:!0;t.$watch("model",function(n){i.model=n;i.form.$setPristine()});t.$watch("model.EmailAddress",function(n,t){i.usernameEnabled&&i.usernameVisible&&(!i.model.Username||i.model.Username===t)&&(i.model.Username=i.model.EmailAddress)})}n.module("component.userDetails").directive("userDetails",i);t.$inject=["$scope"]}(angular),function(){"use strict";function n(n,t,i,r){function u(i){return t.userPreferences.hasOwnProperty(i)?t.userPreferences[i]:(n.error("userPreferences > Could not get preference %s as it does not exist",i),null)}function f(i,u,f){t.userPreferences.hasOwnProperty(i)?(t.userPreferences[i]=u,r.save({UserPreference:t.userPreferences},function(){n.log("userPreferences > Set %s to %s",i,u);f&&f()})):n.error("userPreferences > Could not update preference %s as it does not exist",i)}function e(){r.get(function(i){i.UserPreference&&(t.userPreferences=i.UserPreference,n.log("Refreshed user preferences >",t.userPreferences))})}function o(n){return i.post("/api/user/preferences/faves",n)}function s(n){return i.delete("/api/user/preferences/faves",{params:{id:n}})}return{getPref:u,updatePref:f,refreshLocalPrefs:e,updateAccountFave:o,deleteAccountFave:s}}angular.module("component.account").factory("userPreferencesService",n);n.$inject=["$log","$rootScope","$http","userPreferences"]}(),function(){"use strict";function n(n){function t(n,t){if(!t.length)return!1;for(var r=[],u=[],f=t.length,i=0;i<f;i++)r[t[i][n]]||(r[t[i][n]]=!0,u.push(t[i][n]));return u}function i(n){return typeof n!="undefined"&&n!==null?n:undefined}function r(t){if(!t.length)return{};var i={},r=null;return angular.forEach(t.split("/"),function(n,t){t%2==0?(r=n,r.length&&(i[r]=null)):i[r]=n}),n.log("State Filters >",i),i}function u(n){var t=[];return angular.forEach(n,function(n,i){n&&n!=null&&t.push(i,n)}),t.join("/")}return{uniqueVals:t,getStateFilters:r,createStateFilters:u,getValueOrUndefined:i}}angular.module("component.utils").factory("utilService",n);n.$inject=["$log"]}(),function(){"use strict";function n(n){function i(){var i="https://api.apixu.com/v1/current.json?key="+t+"&q=auto:ip";return n.get(i,{headers:{Authorization:undefined,"X-AccountIds":undefined,"X-Requested-With":undefined,"X-UserRole":undefined}})}return{currentWeather:i}}angular.module("component.weather").factory("weatherService",n);var t="a4ca4736545b446cbe525945171608";n.$inject=["$http"]}(),function(){function n(){return{scope:!1,restrict:"A",controller:t,controllerAs:"weather",bindToController:!0}}function t(n,t,i){function s(){f();h()}function h(){u=n(f,o)}function c(){u&&(n.cancel(u),u=null)}function f(){i.currentWeather().then(l,e)}function l(n){n.data.location?(r.data=n.data,r.available=!0):e()}function e(){r.data=!1;r.available=!1}var r=this,u=null,o=9e5;r.available=!0;r.data=null;s();t.$on("$destroy",c)}angular.module("component.weather").directive("weatherIcon",n);n.$inject=[];t.$inject=["$interval","$scope","weatherService"]}(),function(){"use strict";function n(n,t,i,r){window.location.host===r.urlProd&&(n.debugInfoEnabled(!1),i.debugEnabled(!1),t.decorator("$log",["$delegate",function(n){return n.log=angular.noop,n}]),t.decorator("$log",["$delegate",function(n){return n.debug=angular.noop,n}]),t.decorator("$log",["$delegate",function(n){return n.table=angular.noop,n}]),t.decorator("$log",["$delegate",function(n){return n.info=angular.noop,n}]),t.decorator("$log",["$delegate",function(n){return n.warn=angular.noop,n}]),t.decorator("$log",["$delegate",function(n){return n.error=angular.noop,n}]))}function t(n,t){n.factory("HttpInterceptor",["$rootScope","$q","notificationService","AUTH_EVENTS","$log","$timeout","$cookies","$injector",function(n,r,u,f,e,o,s,h){return t.defaults.headers.common["no-product-price-cache"]=s.get("no-product-price-cache"),{request:function(n){return n.timeout=n.timeout||6e4,n||r.when(n)},requestError:function(n){return u.add({type:"error",message:"Request error "+n.status+": "+n.statusText}),r.reject(n)},response:function(t){function f(t){var i=t.headers(n.CONNECT_VERSION_HEADER_NAME);if(i){if(!n.CONNECT_VERSION){n.CONNECT_VERSION=i;return}i!==n.CONNECT_VERSION&&(e.log("New version of CSRConnect detected since last action -> taking note"),n.CONNECT_UPDATE_AVAILABLE=!0)}}var i;return i=i||h.get("$modal"),t.data.Message&&u.add({id:"form-status",type:"error",message:t.data.Message}),f(t),t.data&&(t.data.Message||t.data.ModelState)?r.reject(t):t||r.when(t)},responseError:function(t){var e,o,s;return(e=e||h.get("$modal"),t.status===0&&angular.isNumber(t.config.timeout))?(u.add({id:"timeout",type:"warning",message:"Things running a little slow? Please check your internet connection and try again. (Request timed out)"}),r.reject(!1)):(o=t.headers(n.CONNECT_VERSION_HEADER_NAME),o!==n.CONNECT_VERSION&&o!=null&&(s=e.open({templateUrl:"new-version-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue-center",keyboard:!0,animation:!1,resolve:{},controller:i,controllerAs:"newVersionModalController"})),t.config.bypassFilters)?r.reject(t):(n.$broadcast({401:f.notAuthenticated,403:f.notAuthorised,404:f.pageNotFound,419:f.sessionTimeout,440:f.sessionTimeout}[t.status],t),(n.localDev||n.dev||n.test)&&t.data&&t.data.Message&&u.add({type:"error",message:"Response "+t.status+" "+t.statusText+": "+(t.data.Message||null),expire:!0}),r.reject(t))}}}]);t.interceptors.push("HttpInterceptor");t.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";t.defaults.headers.common["X-AccountIds"]="0";t.defaults.headers.common["X-UserRole"]="customer"}function i(n,t){var i=this;i.refreshPage=function(){t(function(){location.reload(!0)},100)};i.showLiveChat=function(){LC_API.open_chat_window()};i.closeModal=function(){return n.close()}}function r(n,t,i){t.setKey(Enums.metricsApiKey).setDebug(!1).setAutoload(!0).setEvents(i)}function u(n,t){var i=t.$get(),r=i.RECAPTCHA_SITE_KEY;n.setDefaults({key:r,theme:"light",size:"invisible",type:"image",badge:"inline"})}function f(n){n.setApplicationMessages({email:"Please provide a valid email address",uppercaseLetters:"Your password needs an uppercase letter",lowercaseLetters:"Your password needs a lowercase letter",numbers:"Your password needs a number",passwordLength:"Your password is too short",matchesNewPassword:"This doesn't match the new password",realName:"Names must start with a letter",phoneNumber:"Please provide a valid AU/NZ phone number",mobileNumber:"Please provide a valid AU/NZ mobile number"})}function e(n){n.resourceUrlWhitelist(["self"])}function s(n){n.configure({debugConditions:function(n){var t=n.get("$rootScope");return t.prod?!1:!0},identity:"session.user",identityConditions:function(n,t,i,r,u){var e="[featureToggle Config]",h=u.get("$log"),l=u.get("$stateParams"),a=u.get("$window"),v=u.get("$rootScope"),y=u.get("authService"),s=u.get("featureToggle"),p=function(){return y.isAuthenticated()&&n&&t&&t.Profile&&t.Profile.UserId===n.userId},c,f;return p()&&r.reject("Same authenticated user"),c=a.analytics.user().anonymousId(),c||r.reject(e,"Anonymous ID missing"),f={userId:null,liteLink:l.linkId,anonymousId:c},o||(o=v.$on("$stateChangeStart",function(n,t,i,r,u){var c=s.identity||f,o=!!i.linkId,l=!!u.linkId&&!i.linkId&&!!s.identity.userId;(o||l)&&(c.liteLink=o?i.linkId:null,s.identify(c).then(function(){h.log(e,"Restarting featureToggle service for lite user",o?"arrival":"departure");s.start(!0)}))})),t?(h.log(e,"New user detected",t.Profile.UserId,t.Profile.LoginId),f.liteLink=null,f.userId=t.Profile.UserId):h.log(e,"New anonymous user detected",f),r.resolve(f),r.promise},trackConditions:function(n){var t=n.get("authService");return t.isImpersonating()?!1:!0}})}function h(n){n.options({placement:"bottom",appendToBody:!0})}function c(n,t,i){var r=function(n){return t.location.host===n};n.localDev=r(i.urlLocalDev);n.dev=r(i.urlDev);n.test=r(i.urlTest);n.stage=r(i.urlStage);n.prod=r(i.urlProd)}function l(n){n.isAuthenticated=!1;n.session=null}angular.module("app.core").config(n).config(t).config(e).config(h).config(r).config(s).config(u).config(f).run(c).run(l);n.$inject=["$compileProvider","$provide","$logProvider","siteSettings"];t.$inject=["$provide","$httpProvider"];i.$inject=["$modalInstance","$timeout"];r.$inject=["siteSettings","metricsProvider","metricEvents"];u.$inject=["vcRecaptchaServiceProvider","$windowProvider"];f.$inject=["formFeedbackMessagesProvider"];e.$inject=["$sceDelegateProvider"];var o;s.$inject=["featureToggleConfigProvider"];h.$inject=["$tooltipProvider"];c.$inject=["$rootScope","$window","siteSettings"];l.$inject=["$rootScope"]}(),function(){"use strict";angular.module("app.core").constant("AUTH_EVENTS",{loginSuccess:"auth-login-success",loginFailed:"auth-login-failed",logoutSuccess:"auth-logout-success",pageNotFound:"page-not-found",sessionTimeout:"auth-session-timeout",notAuthenticated:"auth-not-authenticated",notAuthorized:"auth-not-authorized"}).constant("siteSettings",{defaultPath:"/home",defaultState:"app.home",urlProd:"www.csrconnect.com.au",urlStage:"stage.tradusconnectus.com",urlTest:"test.tradusconnectus.com",urlDev:"develop.tradusconnectus.com",urlLocalDev:"csrconnect.local",liveChatLicenseCode:"4976311"}).constant("cmsConstants",{pageVersionQueryString:"uccid"}).constant("metricEvents",{clubGyprockActive:"Club Gyprock Active",clubGyprockInvitation:"Club Gyprock Invitation",helpCentre:{opened:"Help centre opened",closed:"Help centre closed",firstTime:"Help centre first time shown",dismissed:"Help centre first time dismissed",action:"Help centre item selected"},tour:{start:"Tour started",next:"Tour next step",prev:"Tour previous step",end:"Tour ended"},dash:{launchpadInit:"Launchpad initialised",launchpadToggle:"Launchpad toggled",launchpadAction:"Launchpad item selected",launchpadSearchToggle:"Launchpad search toggled",launchpadSearchPerformed:"Launchpad search performed"},feedback:{positive:"Positive feedback",neutral:"Neutral feedback",negative:"Negative feedback"}})}(),function(){"use strict";angular.module("app.core").filter("titleCase",function(){var n=["mm","x","m","XP","S.P.I.","SPI","(SPI)","FSK","NZ","PIR","BSB","MSB","MAB","LD","MD","HD","EC08","FC","RE","SE","RE/SE","MR","NSD","AFS","XL","GST","AAC","PGH"];return function(t,i){if(!angular.isString(t))return"";var r=t.replace(/_/," "),u=/^(?=.*[a-z])(?=.*[A-Z])/.test(r);return i&&u?r:r.replace(/\w\S*/g,function(t){return t=t.charAt(0).toUpperCase()+t.substr(1).toLowerCase(),angular.forEach(n,function(n){t=t.toLowerCase()===n.toLowerCase()?n:t}),t})}}).filter("productCode",function(){return function(n){return parseInt(n).toString()}}).filter("sbuLogoPath",function(){return function(n){return n?"/assets/img/logos/logo-bu-"+n.toString().substr(0,3)+".png":n}}).filter("ordinal",function(){return function(n){var t=["th","st","nd","rd"],i=n%100;return n+(t[(i-20)%10]||t[i]||t[0])}}).filter("filesize",function(){function n(n){if(n==0)return"0 Byte";var t=1024,i=Math.floor(Math.log(n)/Math.log(t));return parseFloat((n/Math.pow(t,i)).toFixed(1))+" "+["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"][i]}return function(t){return n(t)}}).filter("fileTypeIcon",function(){function n(n){switch(n.toLowerCase()){case"sit":case"sitx":case"zip":case"tgz":case"zipx":case"7z":case"s7z":return"fa-file-archive-o";case"mp3":case"wav":return"fa-file-audio-o";case"xls":case"xlt":case"xlm":case"xlsx":case"xlsm":case"xltx":case"xltm":return"fa-file-excel-o";case"mp4":case"mov":return"fa-file-movie-o";case"pdf":return"fa-file-pdf-o";case"ppt":case"pot":case"pps":case"pptx":case"pptm":case"potx":case"potm":case"ppsx":case"ppsm":case"sldx":case"sldm":return"fa-file-powerpoint-o";case"csv":case"txt":return"fa-file-text-o";case"doc":case"dot":case"docx":case"docm":case"dotx":case"dotm":case"docb":return"fa-file-word-o";case"":return"fa-file-o"}return null}return function(t){return n(t)}}).filter("isImagePath",function(){function n(n){return("."+n).indexOf(".jpg")>0||n.indexOf(".png")>0||n.indexOf(".PNG")>0||n.indexOf(".gif")>0}return function(t){return n(t)}}).filter("humanizeDate",function(){return function(n,t){var i=t!=="date"?null:{sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] ddd D MMM",sameElse:"D MMM YY"};return moment(n).calendar(null,i)}}).filter("removeSpaces",[function(){return function(n){return angular.isString(n)?n.replace(/[\s]/g,""):n}}]).filter("fromCamelCase",function(){return function(n){return n?n.replace(/([A-Z])/g," $1").replace(/^./,function(n){return n.toUpperCase()}):""}}).filter("capitalize",function(){return function(n){return!n?"":n.charAt(0).toUpperCase()+n.substr(1).toLowerCase()}}).filter("mapImgUrl",function(){return function(n,t,i,r,u){var f="https://maps.googleapis.com/maps/api/staticmap?scale=2&format=png&visual_refresh=true&key="+GOOGLE_API_KEY;return f+="&size="+(t||"640x300"),r&&(f+="&zoom="+r),u&&(f+="&style=element:geometry|color:0xf5f5f5&style=element:labels.icon|visibility:off&style=element:labels.text.fill|color:0x616161&style=element:labels.text.stroke|color:0xf5f5f5&style=feature:administrative.land_parcel|element:labels.text.fill|color:0xbdbdbd&style=feature:poi|element:geometry|color:0xeeeeee&style=feature:poi|element:labels.text.fill|color:0x757575&style=feature:poi.park|element:geometry|color:0xe5e5e5&style=feature:poi.park|element:labels.text.fill|color:0x9e9e9e&style=feature:road|element:geometry|color:0xffffff&style=feature:road.arterial|element:labels.text.fill|color:0x757575&style=feature:road.highway|element:geometry|color:0xdadada&style=feature:road.highway|element:labels.text.fill|color:0x616161&style=feature:road.local|element:labels.text.fill|color:0x9e9e9e&style=feature:transit.line|element:geometry|color:0xe5e5e5&style=feature:transit.station|element:geometry|color:0xeeeeee&style=feature:water|element:geometry|color:0xc9c9c9&style=feature:water|element:labels.text.fill|color:0x9e9e9e"),n&&n.length?(f+="&markers=",i&&i.length===6&&(f+="color:0x"+i+"|"),f+=n):f+="&center=-33.85219,151.21067",encodeURI(f)}}).filter("urlEncode",function(){return window.encodeURI}).filter("greeting",function(){return function(n){var t=(new Date).getHours(),i;return i=t<1?"Time for bed ":t>=1&&t<12?"Good morning ":t>=12&&t<=17?"Good afternoon ":t>17&&t<=24?"Good evening ":"G'day ",i+(n||"")}})}(),function(n){"use strict";function t(n,t){n.when("",t.defaultPath)}function i(n,t,i,u,f,e){f.configureStates(r(),function(){return i.path()==="/"&&t.current.name!=="app.page-not-found"?(u.log('Redirecting "/" to ',e.defaultState),t.go(e.defaultState),!1):(t.go("app.page-not-found"),i.path())});n.$state=t}function r(){return[{state:"app",config:{url:"",sticky:!0,views:{app:{templateUrl:"app-content.html"},"application-header":{templateUrl:"app-header.html",controller:"appHeaderController"},"application-footer":{templateUrl:"app-footer.html"}}}},{state:"app.document-not-found",config:{url:"/documentnotfound",pageTitle:"Document not found",templateUrl:"/documentnotfound"}},{state:"app.page-not-found",config:{url:"/404",pageTitle:"Page not found",templateUrl:"page-not-found"}}]}n.module("app.core").config(t).run(i);t.$inject=["$urlRouterProvider","siteSettings"];i.$inject=["$rootScope","$state","$location","$log","routerHelper","siteSettings"]}(angular),function(n){"use strict";function t(){return function(n){var t={0:"All",1:"Invoice",2:"Quote",3:"Order",4:"Delivery",5:"Pull Down Order",6:"Irrelevant",7:"Payment"};for(var i in t)if(n==i)return t[i];return"Document"}}n.module("app.core").filter("documentType",t)}(angular),function(n){"use strict";function t(){return function(n){var t,i={};for(t in n)n.hasOwnProperty(t)&&(i[n[t]]=t);return i}}n.module("app.core").filter("keyFlip",t)}(angular),function(n){"use strict";function t(){return function(n,t){if(n>12)return n;return t?["January","February","March","April","May","June","July","August","September","October","November","December"][n-1]:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"][n-1]}}n.module("app.core").filter("monthName",t)}(angular),function(n){"use strict";function t(){var t={};return n.forEach(Object.keys(Enums.sbu),function(n){t[Enums.sbu[n]]=EnumDescriptions.sbu[n]}),function(n){for(var i in t)if(n==i)return t[i];return n}}n.module("app.core").filter("sbuName",t)}(angular),function(n){"use strict";function t(){return function(n,t){var r,i;if(!t||typeof t!="string")return undefined;for(t=t.toLowerCase(),r=Object.keys(n),i=0;i<r.length;i++)if(r[i].toLowerCase()===t)return n[r[i]];return undefined}}n.module("app.core").filter("searchEnumCaseInsensitive",t)}(angular),function(n){"use strict";function t(n,t,r,u,f,e,o,s,h,c,l,a,v){function it(){y=$(k);tt=$(d);t.log(i,"initing packery");y.packery({itemSelector:".dash-panel",columnWidth:".dash-panel-sizer",gutter:0,transitionDuration:"0",stamp:".dash-panel-fixed"});var r=debounce(function(){tt.width()<420?y.addClass(g):y.removeClass(g)},50);r();$(window).off(nt).on(nt,r);n.refreshLayout()}function p(){var t=Object.keys(h.getSbus(!0)),i;t.length&&(i=[Enums.sbu.gyprockAustralia.toString(),Enums.sbu.bradfordAustralia.toString(),Enums.sbu.hebelAustralia.toString()],n.hasOrderingSbu=arrayDiff(i,t).length,n.isAFS=arrayDiff([Enums.sbu.aFS.toString()],t).length===t.length,n.clubGyprockStatus=s.getUser().Profile.ClubGyprockStatus,n.refreshLayout())}function rt(){p();ut();u(function(){n.dashInit=!0;u(function(){n.dashMode===1&&it()})})}function ut(){var i=a.store().get(b),t;n.dashMode=i!==null?i:st();t=a.store().get(n.dashSearch.pref);n.dashSearch.enabled=t!==null?t:n.dashSearch.enabled;l.track(n.dashMetricEvents.launchpadInit,{mode:w()})}function ft(){n.dashMode^=1;a.store().set(b,n.dashMode);u(function(){n.dashMode===1&&it()});l.track(n.dashMetricEvents.launchpadToggle,{mode:w()})}function w(){return n.dashMode?"panel":"full"}function et(){n.dashSearch.enabled^=1;a.store().set(n.dashSearch.pref,n.dashSearch.enabled);n.refreshLayout();l.track(n.dashMetricEvents.launchpadSearchToggle,{mode:n.dashSearch.enabled?"shown":"hidden"})}function ot(){l.track(n.dashMetricEvents.launchpadSearchPerformed,{keyword:n.dashSearch.keyword});var t=isNotNullOrEmpty(n.dashSearch.keyword)?n.dashSearch.keyword:"";location.hash="#/docs?keyword="+t}function st(){var t=o.get("connect.dashModeDefault");return t?t=="0"?0:1:ht()?0:n.dashMode}function ht(){var n=moment.utc(s.getUser().Profile.CreatedOn),t=moment.utc("2017-12-19T13:00:00");return n.isAfter(t)}function ct(){n.$emit("achievements.taskComplete",{taskName:"09Referral",status:2})}var b="dashMode";n.dashInit=!1;n.hasOrderingSbu=!1;n.clubGyprockStatus=Enums.clubGyprockStatus.undefined;n.clubGyprockStatuses=Enums.clubGyprockStatus;n.dashMode=1;n.getDashMode=w;n.toggleDashMode=ft;n.dashMetricEvents=c.dash;n.dashSearch={enabled:1,keyword:null,handler:ot,toggle:et,pref:"dashSearch"};n.referralLinkAction=ct;n.organisationsList=v.getOrganisations();v.loadOrganisations();f.current.name==="app.dash"&&e.set("documentLauncher",f.current.name,{$$search:"#/dash"});r.downloadPDF=function(n){if(n!==null&&n!==""){var t=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/export?ids="+n+"&access_token="+s.token()+"&accountId="+h.getActive().join(",")+"&fileType=pdf";window.open(t)}};n.downloadPDF=r.downloadPDF;n.clubGyprockPanelActive=function(){var t=s.getUser(),n;return t&&(n=t.Features,n&&n.ClubGyprockPanel===!0)?!0:!1};n.trackClubGyprockPanel=function(n){var t={eventDate:moment().format("dddd, MMMM Do, YYYY h:mm:ss A")};n==="invitation"?l.track(c.clubGyprockInvitation,t):n==="active"&&l.track(c.clubGyprockActive,t)};r.playVideo=function(t){Wistia.embed(t,{autoPlay:!0,videoFoam:!0,trackEmail:n.session.user.Profile.EmailAddress})};n.playVideo=r.playVideo;var k="#dash-panels",d=".dash-panel-sizer",g="dash-panels-sm",nt="resize.dash",y=$(k),tt=$(d);n.refreshLayout=function(){y.length&&u(function(){y.packery()},100)};h.isReady()?(rt(),n.$on("accounts.changed",p)):(n.$on("accounts.dataReady",rt),n.$on("accounts.changed",p))}n.module("app.dash").controller("DashController",t);var i="[dash]";t.$inject=["$scope","$log","$window","$timeout","$state","$previousState","$cookies","authService","accountsService","metricEvents","metrics","devicePreferences","amOrganisationsService"]}(angular),function(){"use strict";function t(){return{controller:n,controllerAs:"vm",restrict:"C"}}function n(n,t){function r(){return}function u(){i.modal.modal()}function f(r){r&&(t.newFeaturesSeen(),n.userPreferences.NewFeaturesSeen=!0);i.modal.modal("hide")}var i=this;i.modal=null;i.show=u;i.dismiss=f;t.isReady()&&r();n.$on("accounts.retrieved",r)}angular.module("app.dash").directive("modalAnnouncement",t);n.$inject=["$scope","accountsService"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.dash",config:{url:"/dash",pageTitle:"Dashboard",templateUrl:"authuser/dash",needsAuth:!0,help:"welcome",helpTour:"tourWelcome"}},{state:"app.dashArticle",config:{url:"/articles/article/:pageName",pageTitle:"Article",templateUrl:function(n){return"/authuser/article/"+n.pageName},needsAuth:!0}}]}angular.module("app.dash").run(n);n.$inject=["routerHelper"]}();angular.module("app.dash").controller("dash.announcementController",["$scope","$http",function(n,t){n.announcements=[];var i=$(".user-alert-count"),r=function(){i.text(n.announcements.length)};$(".user-alerts").click(function(){$(".announcements").slideToggle(300)});n.markRead=function(t){n.announcements.splice(t,1);r()};t.get("data/announcements.json").success(function(t){n.announcements=t})}]);angular.module("app.dash").controller("DashMapPanelController",["$rootScope","$window","$scope","$timeout","$log","oDataService","ordersRecentDeliveries","resourceCancellingService",function(n,t,i,r,u,f,e,o){var c={blue:"info",green:"success",amber:"warning",red:"danger"},v={Pai:c.green,Due:c.amber,Ove:c.red,Cre:c.blue},h,s,a,l;i.statusClass=function(n){return n?"label label-"+(v[n.substring(3,0)]||"default"):!1};h=t.debugMap||!1;s="[Map]";i.map=null;i.mapData=null;i.geocoder=null;i.markers=[];i.initialiseMap=function(){var f,t,n;(i.map=null,i.geocoder=null,i.markers=[],l=new google.maps.LatLng(-33.85219,151.21067),f={zoom:3,mapTypeControl:!1,scrollwheel:!1,center:l},i.fitAll(),a=new google.maps.LatLngBounds(new google.maps.LatLng(-49.95122,103.183594),new google.maps.LatLng(-3.740675,179.999999)),i.map=new google.maps.Map(document.getElementById("map-canvas"),f),i.geocoder=new google.maps.Geocoder,google.maps.event.addListener(i.map,"zoom_changed",function(){i.map.getZoom()>16&&i.map.setZoom(16)}),i.mapData.Items.length)&&(t=["PICK UP","PICKUP","PICKING","COLLECT"],n={},angular.forEach(i.mapData.Items,function(i){var r={street:i.ShipToStreet||"",formattedAddress:i.ShipToAddress||""};for(var f in t)if(t.hasOwnProperty(f)&&r.street.toUpperCase().indexOf(t[f])>=0){h&&u.log(s+"%c Ignoring pickup","color: magenta",r.formattedAddress);return}n[r.formattedAddress]||(n[r.formattedAddress]=[]);n[r.formattedAddress].push({address:r,docNo:i.DocumentNo.toString(),docStatus:i.OrderStatus})}),angular.forEach(n,function(n){var t="<p><strong>"+n[0].address.formattedAddress+"<\/strong><\/p>";angular.forEach(n,function(n){t+='<p><i class="fa fa-file-text"><\/i> <strong>Invoice:<\/strong> <a onclick="downloadPDF('+n.docNo+')" href="javascript:;">'+n.docNo+'<\/a> <span class="'+i.statusClass(n.docStatus)+'">'+n.docStatus+"<\/span><\/p>"});i.addMarker(n[0].address.formattedAddress,t,n.length,1)}),r(i.fitAll,1e3))};i.activeInfoWindow=null;i.addMarker=function(n,t,f,e){i.geocoder.geocode({address:n,bounds:a},function(o,c){var a,l,v,y;if(c===google.maps.GeocoderStatus.OK){for(h&&u.log(s+"%c Geocode OK for","color: lime",n,"Result",o),a=1;a<=f;a++)l=new google.maps.Marker({position:o[0].geometry.location,map:i.map,approx:o[0].partial_match}),i.markers.push(l),v=new google.maps.InfoWindow({content:t+(l.approx?"<small><em>Approximate location<\/em><\/small>":"")}),google.maps.event.addListener(l,"click",function(){i.activeInfoWindow&&i.activeInfoWindow.close();i.activeInfoWindow=v;v.open(i.map,l)});i.fitAll()}else c==="OVER_QUERY_LIMIT"&&e<=3?(y=e+1,h&&u.log(s,"Over query limit, queuing attempt "+y,"for",n),r(function(){i.addMarker(n,t,f,y)},3e3)):h&&u.error(s,c,"for",n)})};i.fitAll=debounce(function(){var f,t,r,n;if(i.map!=null){if(!i.markers.length){i.map.setCenter(l);i.map.setZoom(3);return}f=new MarkerClusterer(i.map,i.markers,{gridSize:50,maxZoom:13,styles:[{url:"/assets/img/map/m1.png",height:34,width:34,anchor:[0,0],textColor:"#5B1411",textSize:16}]});try{for(t=new google.maps.LatLngBounds,n=0;n<i.markers.length;n++)r=i.markers[n].getPosition(),t.extend(r);i.map.setCenter(r);i.map.fitBounds(t)}catch(e){u.error(s,e.message)}}},250);i.getIcon=function(n){var t={Delivered:"green-dot.png",Due:"yellow-dot.png",Issue:"red-dot.png"}[n];return"//maps.google.com/mapfiles/ms/icons/"+t};$(window).resize(function(){i.fitAll()});i.init=function(){i.loadMapData()};i.loadMapData=function(){var n=e.get();n.$promise.then(function(n){i.mapData=n;i.initialiseMap()});o.register(n)}}]),function(){"use strict";angular.module("app.deliveries").constant("DELIVERIES_CONFIG",{statusCodes:{CPL:"CPL",CPLP:"CPLP",ARV:"ARV",ENR:"ENR",EDEX:"EDEX",AVL:"AVL",AVLP:"AVLP",ACC:"ACC",ALL:"ALL"},statusStrings:{CPL:"Completed",CPLP:"Picked up",ARV:"Arrived onsite",ENR:"Delivering",EDEX:"Rescheduled",AVL:"Scheduled",AVLP:"Scheduled for pickup",ACC:"On board"}})}(),function(){"use strict";function n(n){var t="/api/deliveries";return n(t,null,{query:{isArray:!1},getDeliveryDetail:{method:"GET",url:t+"/:deliveryOrderId"},getDeliveriesProgress:{method:"GET",url:t+"/",cancellable:!0},getDeliveryCountByDate:{method:"GET",url:t+"/deliverycount"},requestPOD:{method:"POST",url:t+"/pod/request/:deliveryOrderId"}})}angular.module("app.deliveries").factory("deliveries",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.deliveriesIndex",config:{url:"/deliveries",pageTitle:"Deliveries",templateUrl:"deliveries/deliveries",access:"Customer/Deliveries",reloadOnSearch:!1,help:"deliveries",helpTour:"tourDeliveries"}},{state:"app.deliveryIndex",config:{url:"/deliveries/:deliveryNumber",pageTitle:"Deliveries",templateUrl:"deliveries/deliveries",access:"Customer/Deliveries",reloadOnSearch:!1}}]}angular.module("app.deliveries").run(n);n.$inject=["routerHelper"]}(),function(n){"use strict";function i(){return{controller:t,controllerAs:"dc",bindToController:!0,restrict:"A",templateUrl:"deliveries-counter.html",replace:!0,scope:{count:"="}}}function t(n,t,i){var r=this;(r.recentDeliveries=null,r.recentDeliveriesTruncated=null,r.recentDeliveriesString=null,r.count=null,n.isAuthenticated()&&n.canDo("r","Customer/Deliveries"))&&i.getDeliveriesProgress({start:new Date(moment().format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD")),status:t.statusCodes.ALL}).$promise.then(function(n){var t=n.details.today.total;r.recentDeliveries=t;r.recentDeliveriesTruncated=r.recentDeliveries<100?r.recentDeliveries:"99+";r.recentDeliveriesString=t+" deliver"+(t==1?"y":"ies")+" today";r.count=r.recentDeliveries})}n.module("app.deliveries").directive("deliveriesCount",i);t.$inject=["authService","DELIVERIES_CONFIG","deliveries"]}(angular),function(n){"use strict";function r(){return{controller:i,controllerAs:"dt",restrict:"A",link:u}}function u(n,t,i,r){var u=$("#deliveryTracker"),f=$("#"+r.map.mapId),e="delivery-tracker-sml";r.relayout=function(){if(r.isSml=i.deliveryTrackerDash||u.width()<800,u.toggleClass(e,!!r.isSml),u.hasClass("expanding")){var t=window.innerHeight-320;r.isSml||(t=window.innerHeight>719?t:400);u.height(t);f.height(t)}n.$evalAsync();setTimeout(function(){r.fitAll(!0)},200);n.refreshLayout&&n.refreshLayout()};$(window).resize(r.relayout).resize();n.$on("$destroy",function(){return $(window).off("resize",r.relayout)})}function i(i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function ft(){d.init=!0;d.showAccountsInList=l.getActive().length>1;var n=w.store().get(lt)||{};d.mapMode=n.mode;f.deliveryTracker?(d.singleDelivery=f.deliveryTracker,d.map.mapId+="-"+d.singleDelivery,i.log(t,"Focusing on single delivery",d.singleDelivery)):h.deliveryNumber!=undefined&&d.lastUpdated==undefined&&st(h.deliveryNumber);d.lastUpdated=new Date;f.deliveryTrackerDataSource&&(d.parentDataSource=u.$parent[f.deliveryTrackerDataSource],i.log(t,"Using manual data source",d.parentDataSource));o(function(){var n,e;ci();d.singleDelivery?d.parentDataSource?(d.deliveries={single:{details:[d.parentDataSource],total:1}},ot([d.deliveries.single]),d.deliveries.single.details[0].imageUrlPostFix="?access_token="+y.token(),d.init=!1,u.refreshLayout&&u.refreshLayout()):v.getDeliveryDetail({deliveryOrderId:d.singleDelivery},function(n){i.log(t,"Got single delivery",n.details);d.deliveries={single:{details:[n.details],total:1}};d.deliveries.single.details[0].imageUrlPostFix="?access_token="+y.token();ot([d.deliveries.single]);d.init=!1;u.refreshLayout&&u.refreshLayout()}):(n=f.deliveryTrackerDash?d.filters.today:d.filters.previous,n.status=d.filters.status,e=v.getDeliveriesProgress(n),e.$promise.then(function(n){i.log(t,"Got deliveries",n.details);d.deliveries=f.deliveryTrackerDash?{today:n.details.today}:n.details;d.noDeliveries=!1;ot(d.deliveries);d.init=!1;u.refreshLayout&&u.refreshLayout();r.$broadcast("dt.updated",d.deliveries)}),p.register(e));d.parentDataSource||di()})}function vt(){return{zoom:4,maxZoom:17,mapTypeControl:!1,streetViewControl:!1,scrollwheel:!0,clickableIcons:!1,fullscreenControl:!1,center:new google.maps.LatLng(-33.85219,151.21067)}}function ci(){d.map.ctrl=d.map.ctrl||new google.maps.Map(document.getElementById(d.map.mapId),vt());d.map.geocoder=d.map.geocoder||new google.maps.Geocoder;d.map.oms=d.map.oms||new OverlappingMarkerSpiderfier(d.map.ctrl,{keepSpiderfied:!0,nearbyDistance:1});d.map.oms.unspiderfy();d.map.clickListener&&d.map.oms.removeListener("click",ui);d.map.clickListener=d.map.oms.addListener("click",ui);d.map.spiderfyListener&&d.map.oms.removeListener("spiderfy",fi);d.map.spiderfyListener=d.map.oms.addListener("spiderfy",fi);d.map.unspiderfyListener&&d.map.oms.removeListener("unspiderfy",ei);d.map.unspiderfyListener=d.map.oms.addListener("unspiderfy",ei);google.maps.event.addListenerOnce(d.map.ctrl,"idle",function(){google.maps.event.trigger(d.map.ctrl,"resize");d.map.ready=!0});d.map.zoomListener&&google.maps.event.removeListener(d.map.zoomListener);d.map.zoomListener=google.maps.event.addListener(d.map.ctrl,"zoom_changed",li)}function li(){si()}function et(){ut=!1;ft()}function ot(r){d.map.ctrl&&d.map.geocoder&&(ai(),n.forEach(r,function(r){var u=r.details;u.length>0&&n.forEach(u,function(n){var u,r,f,e,o;n.PickupAddress&&n.PickupLatitude&&n.PickupLongitude?g(new google.maps.LatLng(n.PickupLatitude,n.PickupLongitude),n,"dest"):(u=!1,n.IsDelivered&&n.Gps&&(r=n.Gps.split(","),r.length===2&&(f=r[0].trim(),e=r[1].trim(),f&&e&&(u=!0,g(new google.maps.LatLng(f,e),n,"dest")))),u||(n.Latitude&&n.Longitude?g(new google.maps.LatLng(n.Latitude,n.Longitude),n,"dest"):!n.UnableToGeocodeAddress&&n.Address?d.map.geocoder.geocode({address:n.Address,bounds:d.map.geocodeBounds,region:"AU"},function(r,u){u===google.maps.GeocoderStatus.OK?g(r[0].geometry.location,n,"dest"):i.error(t,"Geocoder",n.Address,u)}):i.log(t,"No destination coords or address for delivery",n.Id)));n.DeliveryOnRoute&&n.CurrentOnRouteLatitude&&n.CurrentOnRouteLongtitude&&(o=new google.maps.LatLng(n.CurrentOnRouteLatitude,n.CurrentOnRouteLongtitude),g(o,n,"truck"));dt(n);bt(n);gt(n)})}))}function ai(){if(tt){i.error(t,"Cleanup called while in progress...");return}tt=!0;var r=yi();n.forEach(d.map.markers,function(n){if(n){var u=selectByProp("Id",n.deliveryId,r),t=n.deliveryId+"dest",i=n.deliveryId+"truck";u||(d.map.markers[i]&&yt(i),d.map.markers[t]&&yt(t))}});tt=!1}function yt(n){d.map.markers[n].setMap(null);d.map.markers[n]=null;delete d.map.markers[n];it()}function g(t,i,r){var f=d.map.markers?d.map.markers[i.Id+r]:!1,e;if(f)e=f.getIcon(),f.setIcon(n.extend(e,{url:wt(i,r)})),f.setPosition(t),f.truePosition=t,i[r==="truck"?"markerTruck":"markerDest"]=f;else{var o={delivery:"Delivery: "+i.DeliveryNumber+"\n"+i.Address,pickup:"Pickup: "+i.DeliveryNumber+"\nEx. "+i.PickupPlantName+"\n"+i.PickupAddress},s={position:t,truePosition:t,map:d.map.ctrl,title:i.DeliveryIndicator==="P"?o.pickup:o.delivery,deliveryId:i.Id,zIndex:1,icon:n.extend({},at,{url:wt(i,r)})},u=new google.maps.Marker(s);u.addListener("mouseover",function(){ii(u.deliveryId,!0)});u.addListener("mouseout",function(){ii(u.deliveryId,!1)});d.map.markers[i.Id+r]=u;i[r==="truck"?"markerTruck":"markerDest"]=u;d.map.oms.addMarker(u);it()}ct()}function wt(n,t){var i="marker-%STATUS%.png";return t==="truck"&&(i="delivery-truck-%STATUS%.png"),pt+i.replace(/%STATUS%/,n.Status+(n.DeliveryIndicator==="P"?"P":""))}function bt(n){var t=kt(n.Status,n.DeliveryIndicator==="P");return n.StatusF=t}function kt(n,t){switch(n){case d.statusCodes.CPL:return t?d.statusStrings.CPLP:d.statusStrings.CPL;case d.statusCodes.ARV:return d.statusStrings.ARV;case d.statusCodes.ENR:return d.statusStrings.ENR;case d.statusCodes.EDEX:return d.statusStrings.EDEX;case d.statusCodes.AVL:return t?d.statusStrings.AVLP:d.statusStrings.AVL;case d.statusCodes.ACC:return d.statusStrings.ACC;case d.statusCodes.ALL:return"All deliveries & pickups";default:return"Unknown"}}function dt(n){var t=selectByProp("SbuCode",n.SalesOrg,k),r=120,i,u,f,e;t&&t.result&&(r=t.result.DeliveryWindowMinutes||120);i=60*r;u=n.DeliveryIndicator==="P"&&!n.IsDelivered&&n.DeliveryDate!=null&&n.Status===d.statusCodes.AVL;n.hasPickupTime=u;n.hasGpsUpdateTime=isNotNullOrEmpty(n.CurrentOnRouteCreatedOn,n.CurrentOnRouteLongtitude,n.CurrentOnRouteLatitude);n.ArrivalTimeInSeconds&&!n.IsDelivered&&n.ArrivalTimeInSeconds+i>0&&n.DeliveryIndicator!=="P"&&(f=moment().add(n.ArrivalTimeInSeconds,"seconds"),e=moment().add(n.ArrivalTimeInSeconds+i,"seconds"),n.arrivalTime=f.format("h:mmA")+" - "+e.format("h:mmA")+moment.tz(moment.tz.guess()).format(" (z)"))}function gt(n){var t;return t=n.ErrorOccured?"default":ni(n.Status),n.StatusC=t}function ni(n){switch(n){case d.statusCodes.CPL:case d.statusCodes.ARV:return"success";case d.statusCodes.ENR:return"warning";case d.statusCodes.ALL:return"all";case d.statusCodes.EDEX:default:return"default"}}function ti(r){var u,e,f,o;if(d.map.ctrl!=null){u=ut||r===!0;google.maps.event.trigger(d.map.ctrl,"resize");e=n.equals({},d.map.markers);try{f=new google.maps.LatLngBounds;n.forEach(d.map.markers,function(n){o=n.getPosition();f.extend(o)});u&&d.map.ctrl.fitBounds(f)}catch(s){i.error(t,s.message)}e&&u&&(i.log("No markers, center on AU"),d.map.ctrl.setCenter(vt().center))}}function vi(t,i){var f=d.map.ctrl.getBounds(),r=new google.maps.LatLngBounds,u=!0;n.forEach([t.markerDest,t.markerTruck],function(n){if(n){n.setAnimation(i?google.maps.Animation.BOUNCE:null);var t=n.truePosition||n.getPosition();r.extend(t);u=f.contains(t);i&&nt(n);i||n.spidered||!d.map.oms.markersNearMarker(n,!0).length||ht(n)}});i&&!u&&(d.map.ctrl.fitBounds(r),t.markerDest&&nt(t.markerDest),t.markerTruck&&nt(t.markerTruck))}function ii(t,i){var r=null;(n.forEach(d.deliveries,function(n,i){var u=selectByProp("Id",t,n.details);u&&(r=d.deliveries[i].details[u.idx])}),r)&&u.$apply(function(){r.highlight=i})}function yi(){var t=[];return n.forEach(d.deliveries,function(n){t=t.concat(n.details)}),d.noDeliveries=!t.length,t}function st(n){if(!d.singleDelivery){u.$emit("achievements.taskComplete",{taskName:"07TrackDelivery",status:2});var t=e.open({templateUrl:"deliveryOrderDetail.html",resolve:{dt:function(){return d}},controller:["$scope","$modalInstance","$log","dt","featureToggle",function(t,i,r,u){function f(){v.getDeliveryDetail({deliveryOrderId:n},function(n){t.deliveryOrder=n.details;t.deliveryItemQty=t.deliveryOrder.Items.length;t.deliveryOrder.viewPodAction=pi;t.dt={feature:u.feature};dt(t.deliveryOrder);t.deliveryOrder.GpsTimestamp=moment().subtract(t.deliveryOrder.LastUpdatedSecondsAgo,"seconds");bt(t.deliveryOrder);gt(t.deliveryOrder);t.deliveryOrder.downloadUrlPostFix="?stamp="+Date.now()+"&access_token="+y.token();t.deliveryOrder.imageUrlPostFix="?access_token="+y.token();t.deliveryOrder.Note&&(t.deliveryOrder.Note=t.deliveryOrder.Note.replace(/\n/g,"<br />"));t.showPodPdf=t.deliveryOrder.HasPodPdf&&(t.deliveryOrder.HasSignedPOD&&t.deliveryOrder.DeliveryIndicator!=="P"||t.deliveryOrder.DeliveryIndicator==="P");t.showPodImages=t.deliveryOrder.Images&&Array.isArray(t.deliveryOrder.Images)&&t.deliveryOrder.Images.length!==0},function(){a.warning("Sorry!","We weren't able to load the delivery details at this time. Please try again later.");i.dismiss("cancel")})}t.deliveryOrder={};t.deliveryItemQty=0;t.defaultDisplayQty=3;t.displayQty=t.defaultDisplayQty;t.dt={feature:null};t.$on("dt.updated",f);f();t.toggleMore=function(n){n.preventDefault();t.displayQty=t.displayQty<t.deliveryItemQty?t.deliveryItemQty:t.defaultDisplayQty};t.close=function(n){n.preventDefault();i.dismiss("close")};t.requestPOD=function(){v.requestPOD({deliveryOrderId:t.deliveryOrder.Id},{},function(){var n={feature:EnumDescriptions.featureEnum.deliveries,verb:EnumDescriptions.verbEnum.request,noun:EnumDescriptions.nounEnum.pOD,pluralisation:EnumDescriptions.pluralisationEnum.single},i={eventDate:moment().format("dddd, MMMM Do, YYYY h:mm:ss A"),delivery_number:t.deliveryOrder.DeliveryNumber,AccountId:t.deliveryOrder.SoldToAccountNumber,type:t.deliveryOrder.DeliveryIndicator};b.track(n,i);a.swal({title:"Proof of Delivery Requested",text:"An email has been sent to CSR Connect Helpdesk requesting a copy of the Proof of Delivery document. You will receive a confirmation email at your registered email address.",showCancelButton:!1,confirmButtonText:"Close"});t.deliveryOrder.PodRequested=!0},function(){})}}]});u.$on("$destroy",function(){t.close()})}}function pi(){u.$emit("achievements.taskComplete",{taskName:"08ViewPOD",status:2})}function wi(n){$("#modal-deliveries-help").modal(n?"show":"hide")}function ri(){return{start:new Date(moment().subtract(31,"d").format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD"))}}function bi(){d.noDeliveries=!1;var n=ri();d.filters.previous.start=n.start;d.filters.previous.end=n.end}function ki(){var n=ri();return moment(d.filters.previous.start).isSame(n.start)&&moment(d.filters.previous.end).isSame(n.end)}function di(){s.cancel(rt);rt=s(et,18e4)}function gi(n){d.mapMode=n;d.mapMode===!0&&o(function(){d.fitAll(!0)});d.relayout();nr()}function ui(n){st(n.deliveryId)}function fi(n){for(var t=0;t<n.length;t++)nt(n[t]),n[t].spidered=!0}function ei(n){for(var t=0;t<n.length;t++)ht(n[t]),n[t].spidered=!1}function oi(t,i){var r=n.extend({},t.getIcon(),i);t.setIcon(r)}function ht(n){oi(n,hi)}function nt(n){oi(n,at)}function si(){if(!d.map.ready){it();return}n.forEach(d.map.markers,function(n){nt(n)});var t=d.map.oms.markersNearAnyOtherMarker();n.forEach(t,function(n){ht(n)})}function nr(){w.store().set(lt,{mode:d.mapMode})}var d=this,ct=debounce(ti,250),it=debounce(si,250),rt,ut=!0,lt="mapPreferences",at={size:new google.maps.Size(36,40),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(12,40),scaledSize:new google.maps.Size(46,100)},hi={size:new google.maps.Size(46,47),origin:new google.maps.Point(0,53),anchor:new google.maps.Point(22,47),scaledSize:new google.maps.Size(46,100)},tt,pt;d.singleDelivery=null;d.parentDataSource=null;d.deliveries={};d.noDeliveries=!1;d.statusCodes=c.statusCodes;d.statusStrings=c.statusStrings;d.isSml=!0;d.mapMode=!1;d.showAccountsInList=!1;d.feature=n.isDefined(u.$parent.dt)?u.$parent.dt.feature:f.deliveryTrackerFeature;d.map={mapId:"map-deliveries",ctrl:null,geocoder:null,directions:null,geocodeBounds:new google.maps.LatLngBounds(new google.maps.LatLng(-49.95122,103.183594),new google.maps.LatLng(-3.740675,179.99999)),markers:{},ready:!1,oms:null};d.init=!0;d.filters={today:{start:new Date(moment().format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD"))},previous:{start:new Date(moment().subtract(6,"d").format("YYYY-MM-DD")),end:new Date(moment().add(1,"d").format("YYYY-MM-DD"))},status:d.statusCodes.ALL};u.$on("$destroy",function(){s.cancel(rt)});u.$on("dt.refresh",et);u.$watchGroup(["dt.filters.previous.start","dt.filters.previous.end","dt.filters.status"],function(){d.init||(ut=!0,ft())},!0);u.init=ft;d.fitAll=ti;d.debouncedFitAll=ct;d.bounceDelivery=vi;d.showDelivery=st;d.refresh=et;d.getStatusClassColour=ni;d.getStatusText=kt;d.deliveriesHelp=wi;d.expandFilters=bi;d.hasExpandedFilters=ki;d.switchMode=gi;tt=!1;pt="/assets/img/deliveries/"}var t="[Deliveries]";n.module("app.deliveries").directive("deliveryTracker",r);i.$inject=["$log","$rootScope","$scope","$attrs","$modal","$timeout","$interval","$stateParams","DELIVERIES_CONFIG","accountsService","SweetAlert","deliveries","authService","resourceCancellingService","devicePreferences","metrics","SBU_CONFIG"]}(angular),function(){"use strict";angular.module("app.documents").constant("DOCS_CONFIG",{summaryContents:{quotes:["documentStatus","documentNo","accountId","date","requestedDate","total"],pulldownOrders:["documentStatus","dateOrdered","validTo","amountExclGst","gst"],orders:["documentStatus","date","deliveryDate","amountExclGST","gst"],deliveries:["documentStatus","date","contactName","contactPhone","soldTo","shipTo"],invoices:["documentStatus","accountId","type","date","reference","deliveryNo","total"]}}).constant("DOCS_CLASSES",{cssClasses:{pending:"label-pending",informative:"label-informative",problem:"label-problem",good:"label-good",attention:"label-attention"}})}(),function(n,t,i,r){"use strict";function f(f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt){function kt(){return et={type:t.documentType.all.toString(),subType:t.documentSubType.all.toString(),flag:t.flag.none.toString(),keyword:null,fromDate:new Date(i().subtract(3,"M").format("YYYY-MM-DD")),toDate:new Date(i().add(1,"year").endOf("year").format("YYYY-MM-DD")),sort:t.sortOrder.desc.toString(),sortBy:t.documentSortType.date.toString(),status:t.documentStatus.all.toString()}}function yt(i){var r=[],u=it(t.documentType)[i];n.forEach(Object.keys(t.documentSortType),function(n,f){if(n.contains("_")){if(i&&i!==t.documentSortType.all){var e=n.substring(0,n.indexOf("_"));e===u&&r.push({Id:f,Text:ct(n)})}}else r.push({Id:f,Text:ct(n)})});o.filterSortByItems=r}function ct(n){var u=it(t.documentType)[o.filters.type],i=r.documentSortType[n];return u==="orders"&&i.toLowerCase()==="date"?"Requested For":i}function pt(){var n=[];return ft(0)&&n.push({Id:0,Text:"Any Status"}),ft(1)&&n.push({Id:1,Text:"Arrived Onsite"}),ft(2)&&n.push({Id:2,Text:"Closed"}),ft(3)&&n.push({Id:3,Text:"Complete"}),ft(4)&&n.push({Id:4,Text:"Confirmed"}),ft(5)&&n.push({Id:5,Text:"Credit"}),ft(6)&&n.push({Id:6,Text:"Current"}),ft(7)&&n.push({Id:7,Text:"Delivering"}),ft(8)&&n.push({Id:8,Text:"Due"}),ft(9)&&n.push({Id:9,Text:"Expired"}),ft(10)&&n.push({Id:10,Text:"On Board"}),ft(11)&&n.push({Id:11,Text:"Paid / Complete"}),ft(12)&&n.push({Id:12,Text:"Pending"}),ft(13)&&n.push({Id:13,Text:"Scheduled / Scheduled for Pickup"}),ft(14)&&n.push({Id:14,Text:"Processing"}),ft(15)&&n.push({Id:15,Text:"Processed"}),n}function dt(){var i=[];return n.forEach(Object.keys(t.documentSubType),function(n,t){i.push({Id:t,Text:r.documentSubType[n]})}),i}function gt(){var i=[];return n.forEach(Object.keys(t.flag),function(n,t){t===0?i.push({Id:t,Text:"All flags"}):i.push({Id:t,Text:r.flag[n]+" flag"})}),i}function lt(){var n=[];return v.hasPermission("Customer/Invoice")&&n.push({Id:1,Text:"Invoices"}),v.hasPermission("Customer/Quote")&&n.push({Id:2,Text:"Quotes"}),v.hasPermission("Customer/SalesOrder")&&n.push({Id:3,Text:"Orders"}),v.hasPermission("Customer/Deliveries")&&n.push({Id:4,Text:"Deliveries"}),n}function at(){l(wt);o.filterDocTypes=lt();ut.hasTaxTimeDownload=v.getUser().Profile.HasTaxTimeDownload;a.current.name==="app.documents"&&b.set(a.current.name,a.current.name,{$$search:location.hash})}function wt(n){st=[{}];o.layout.page=1;vt(n)}function ni(n){return n.Id==this?n.Id:null}function vt(t){var r,f;o.layout.busy=!0;r=n.copy(t||o.filters);r.keyword!=null&&r.keyword.isEmpty()&&delete r.keyword;yt(r.type);f=o.filterSortByItems.find(ni,r.sortBy);f||(r.sortBy=o.filterSortByItems[0].Id.toString(),o.filters.sortBy=r.sortBy,t&&(t.sortBy=r.sortBy));r.fromDate=r.fromDate?i(r.fromDate).format("YYYY-MM-DD"):null;r.toDate=r.toDate?i(r.toDate).format("YYYY-MM-DD"):null;r.perPage=o.layout.size;r.page=o.layout.page||1;r.offset=st[r.page-1];ot!=null&&(ot.$cancelRequest(),c.log(u,"Cancelling existing query"));c.log(u,"Querying documents:",r);ot=p.query(r,function(t){st[r.page]=t.Progress;ut.items=n.isArray(t.Results)?t.Results.map(ti):null;k.getByKey("docs").totalCount=t.TotalDocuments;o.layout.updatePages(t.TotalDocuments);o.layout.busy=!1;o.layout.initialised=!0;ot=null});o.filterStatuses=pt()}function ti(n){var i=ut.isRelease(n.type,n.accountId),t;return n.typeName=ut.types[n.type],n.typeNameAlt=i?"Release":ut.types[n.type],n.urlParams={accountId:n.accountId,documentType:n.typeName,documentNo:n.id},n.pdfUrl=w.isPdfEnabled(n)?w.getPdfUrl(n.accountId,n.type,n.id):null,t=i&&n.DocumentSummary.PulldownOrderNo!==0?"releases":ut.types[n.type],i&&n.DocumentSummary.PulldownOrderNo!==0&&(t="releases"),n.DocumentSummary!=null&&n.DocumentSummary.DeliveryIndicator==="P"&&(t="pickups"),n.iconSrc="/assets/img/icons/docs/"+t+".svg",n}function ft(n){var u=o.filters.type,e=s.search(),i,f,r;for(e.type&&(u=e.type),i="",y.isReady()&&(i=","+Object.keys(y.getSbus(!0)).join(",")+","),f=nt.filter(function(n){var r=rt(t.sbu,n.Sbu),f=rt(t.documentType,n.DocType),e=!r||i===""||i.contains(","+r+","),o=!f||u==="0"||f.toString()===u;return e&&o}),r=0;r<f.length;r++)if(rt(t.documentStatus,f[r].Status)===n)return!0;return!1}function ii(){s.search("status",null);o.filters.status="0"}function ri(){var t=n.copy(et),i=n.copy(o.filters);return delete t.fromDate,delete t.toDate,delete i.fromDate,delete i.toDate,!n.equals(t,i)}function bt(){return{fromDate:i().subtract(6,"M").format("YYYY-MM-DD"),toDate:i().add(1,"M").format("YYYY-MM-DD")}}function ui(){var n=bt();return i(o.filters.fromDate).isSame(n.fromDate)&&i(o.filters.toDate).isSame(n.toDate)}function fi(){var n=bt();o.layout.busy=!0;s.search("fromDate",n.fromDate);s.search("toDate",n.toDate);d.getFilterValueApplyToFilters(s.search(),o.filters,"fromDate");d.getFilterValueApplyToFilters(s.search(),o.filters,"toDate")}function ei(n,t){var i=n.documentKey==null?[n.accountId,n.type,n.id,t]:[n.accountId,n.type,n.id,n.documentKey,t];h.post("api/docs/flag/"+i.join("/")).then(function(){n.flag=t},function(n){g.warning("Error updating document flag","We were unable to update the flag for this document at this time. Please try again, or contact CSR Connect support.");c.log(u,"Error updating document flag ","error: ",n)})}function oi(n,t,i){return w.getDocumentUrl(n,t,i)}function si(n){return a.go("modalDocumentView",n.urlParams)}var ut=this,ht,et,st,ot;k.addKey("docs",tt);ht=k.getByKey("docs");ht.totalCount=0;ht.data=[];et=kt();st=[{}];o.filters=n.copy(et);o.statusFilter=null;o.clearFilters=function(){o.layout.busy=!0;o.filters=n.copy(et);s.$$search={};s.$$compose()};o.sortByPresentationName=ct;o.layoutChangeCallback=function(){vt()};ot=null;a.current.name==="app.documents"&&b.set("documentLauncher",a.current.name,{$$search:location.hash});o.$on("$locationChangeSuccess",function(){if(a.current.name==="app.documents"&&b.set("documentLauncher",a.current.name,{$$search:location.hash}),s.path()==a.current.url&&o.layout.initialised){var t=s.search();Object.keys(t).length?n.forEach(t,function(n,t){o.$broadcast("filters.init",t)}):o.filters=n.copy(et);l(wt)}});o.$watch("filters",function(n,t){(t.type!==n.type||n.fromDate>t.fromDate||n.toDate<t.toDate)&&(k.getByKey("docs").data=[])},!0);e.$on("documents.flagchanged",function(t,i){ut.items!=null&&n.forEach(ut.items,function(n){n.accountId===i.accountId&&n.type===i.type&&n.id===i.id&&(n.flag=i.flag)})});ut.docTypeFilterChange=ii;ut.types=Object.keys(t.documentType);ut.flags=t.flag;ut.sortOrder=["ascending","descending"];ut.sortType=Object.keys(t.documentSortType);ut.hasTaxTimeDownload=!1;ut.iconPdf=f.iconPdf;ut.items=null;ut.search=vt;ut.isType=w.isType;ut.isRelease=w.isRelease;ut.hasActiveFilters=ri;ut.expandDateFilter=fi;ut.hasExpandedDateFilter=ui;ut.updateFlag=ei;ut.getDocumentUrl=oi;ut.goToDocument=si;o.showStatus=ft;o.filterDocTypes=lt();o.filterDocSubTypes=dt();o.filterDocFlags=gt();o.filterStatuses=pt();yt(t.documentType.all);y.isReady()?at():o.$on("accounts.dataReady",at);o.$on("accounts.changed",function(){c.log(u,"Reinitialising after account change");at()});o.$on("user.authenticated",function(){o.filterDocTypes=lt()})}n.module("app.documents").controller("DocumentsController",f);var u="[docs]";f.$inject=["DOCS_CONFIG","$rootScope","$scope","$location","$http","$log","$timeout","$state","authService","accountsService","documents","documentsHelper","$previousState","selectionService","locationFilterProvider","SweetAlert","DOCUMENTSTATUS_CONFIG","downloads","keyFlipFilter","searchEnumCaseInsensitiveFilter"]}(angular,Enums,moment,EnumDescriptions),function(n,t,i){"use strict";function u(){return{restrict:"A",controller:r,templateUrl:"doc-actions.html",controllerAs:"docActions",bindToController:!0}}function r(n,r){var u=this,f="/",e=i.featureEnum,o=i.pluralisationEnum,s=function(){return[].slice.call(arguments).join(f)};u.verbs=i.verbEnum;u.doc=n[r.docActions];u.docTypes=t.documentType;u.trackName=function(n){return s(e.documents,n,u.doc.typeName,o.single)};u.trackData={fileName:u.doc.pdfUrl,AccountId:u.doc.accountId,DocumentNo:u.doc.id,DocumentType:u.doc.typeName,location:"list"}}n.module("app.documents").directive("docActions",u);r.$inject=["$scope","$attrs"]}(angular,Enums,EnumDescriptions,moment),function(n){"use strict";function i(){return{restrict:"A",controller:t,replace:!1,templateUrl:"doc-status.html",controllerAs:"status",scope:{docStatus:"=",docStatusMessage:"="},bindToController:!0}}function t(n){var t=this;t.statusDescription=n.getDescription(t.docStatus);t.cssClass=n.getCssClass(t.docStatus)}n.module("app.documents").directive("docStatus",i);t.$inject=["documentStatus"]}(angular),function(){"use strict";function n(n){function i(n){try{return t[n].description}catch(i){return t[0].description}}function r(i){try{var r=t[i].name;return n.cssClasses[r]}catch(u){return n.cssClasses.problem}}var t={0:{name:"problem",description:"Unknown"},1:{name:"good",description:"Arrived Onsite"},2:{name:"good",description:"Closed"},3:{name:"good",description:"Complete"},4:{name:"informative",description:"Confirmed"},5:{name:"informative",description:"Credit"},6:{name:"pending",description:"Current"},7:{name:"attention",description:"Delivering"},8:{name:"attention",description:"Due"},9:{name:"problem",description:"Expired"},10:{name:"informative",description:"On Board"},11:{name:"good",description:"Paid / Complete"},12:{name:"pending",description:"Pending"},13:{name:"pending",description:"Scheduled"},14:{name:"attention",description:"Processing"},15:{name:"good",description:"Processed"},101:{name:"informative",description:"Example"}};return{getDescription:i,getCssClass:r}}angular.module("app.documents").factory("documentStatus",n);n.$inject=["DOCS_CLASSES","$log"]}(),function(){"use strict";function n(n){var t="/api/docs",i=n(t,null,{query:{cancellable:!0,url:t},requestInvoicePdf:{method:"POST",url:t+"/pdf/request"}});return i.getMock=function(n,t){for(var r=angular.extend({},{perPage:12},n),u=[],i={id:9805438233,type:r.type,name:"9805438233",jobName:n.keyword||"Acadia Apartments",accountId:354655,ref:"PO-465482",address:"321 Ocean Ave., Oceanside NSW 2000"},f=0;f<parseInt(r.perPage);f++)i.id=i.id+1,u.push(angular.extend({},i,{id:i.id}));t(u)},i}angular.module("app.documents").factory("documents",n);n.$inject=["$resource"]}(),function(n,t){"use strict";function i(n,i,u,f,e,o,s,h){function c(n,t,r){n.preventDefault();var f="app.documents";i.go(f,undefined,{location:!1}).then(function(){i.go(t,r).then(function(){u.set("documentLauncher",f,{$$search:"#/docs"})})})}e.configureStates(r(s,h,f));n.$on("$stateChangeStart",function(n,r,f,e){var a,l;if(r.name==="modalDocumentView"){if(a=s(t.documentType)[h(t.documentType,f.documentType)],a!==f.documentType)return n.preventDefault(),f.documentType=a,i.go(r,f);e.name===""?c(n,r,f):(l=u.get("documentLauncher"),l?i.current.name!==l.state.name&&(n.preventDefault(),location.hash=l.params.$$search,o(function(){i.go(r,f)})):c(n,r,f))}})}function r(n,i,r){function u(n,t){return{url:n,onEnter:["$timeout","$state",function(n){n(function(){location.hash="#/docs?type="+t})}]}}return[{state:"app.documents",config:{url:"/docs",pageTitle:"Documents",reloadOnSearch:!1,scroller:!0,templateUrl:"docs/documents",access:"Customer/Documents",help:"documentsRelease",helpTour:"tourDocuments"}},{state:"modalDocumentView",config:{url:"/docs/:accountId/:documentType/:documentNo",pageTitle:"Document",scroller:!0,access:"Customer/Documents",params:{originalState:null,search:null},views:{modal:{templateUrl:function(u){u.search=r.$$search;var f="";switch(u.documentType){case"deliveries":case"pulldownOrders":f=n(t.documentType)[i(t.documentType,u.documentType)]}return"docs/documents/documentView"+f}}}}},{state:"app.redirectQuotes",config:u("/products/quotes","2")},{state:"app.redirectOrders",config:u("/products/orders","3")},{state:"app.redirectInvoices",config:u("/financials/invoices","1")}]}n.module("app.documents").run(i);i.$inject=["$rootScope","$state","$previousState","$location","routerHelper","$timeout","keyFlipFilter","searchEnumCaseInsensitiveFilter"]}(angular,Enums),function(n,t){"use strict";function i(n,i,r,u,f){function o(n,i){return t.documentType.hasOwnProperty(i)&&n==t.documentType[i]}function s(n,i,u){if(!n||!i||!u)return!1;var f=selectByProp("SbuCode",u,r);return n==t.documentType.orders&&f.result.OrdersArePullDownType}function h(n,t,r){return i.href("modalDocumentView",{accountId:n,documentType:t,documentNo:r})}function c(n,i,r,u){var o=null;if(i==t.documentType.deliveries)o=u&&e("status",u)=="CPL"&&e("hasSignedPOD",u)?"/api/deliveries/pod/"+e("id",u):!1;else{if(i==t.documentType.pulldownOrders)return null;o=window.location.protocol+"//"+window.location.host+"/api/docs/"+n+"/"+i+"/"+r+"/pdf"}return o&&(o+="?stamp="+Date.now()+"&access_token="+f.token()),o}function l(n){var i=!0;return(n.type===t.documentType.deliveries||n.type===t.documentType.pulldownOrders||n.type===t.documentType.irrelevant)&&(i=!1),i}function e(n,t){return t.details.summary[n]}function a(n){var i=/[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i,r=/^(?:([^:]+:)?\/\/[^\/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/.exec(n),t=i.exec(r[1])||i.exec(r[2])||i.exec(r[3]);if(t&&(t=t[0],t.indexOf("%")!==-1))try{t=i.exec(decodeURIComponent(t))[0]}catch(u){}return t||"document.pdf"}return{isType:o,isRelease:s,isPdfEnabled:l,getDocumentUrl:h,getPdfUrl:c,getPDFFileNameFromURL:a}}n.module("app.documents").factory("documentsHelper",i);i.$inject=["$log","$state","SBU_CONFIG","accountsService","authService","metrics"]}(angular,window.Enums),function(n,t){function r(n){function t(t,i,r,u){t.$on("window.resize",debounce(function(){u.viewerFit()},250));t.$on("$destroy",function(){$(document).off(".docView")});n(function(){$(document).on("click.docView",u.clickOutsideHandler);$(document).on("keyup.docView",u.keyPressHandler)})}return{link:t,restrict:"A",controller:u,controllerAs:"doc"}}function u(r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut,ft){function yt(){u.setPageTitle(e("documentType")(et.details.type)+" "+et.details.id);ii();lt||st();et.details.type!=Enums.documentType.deliveries&&pt();a.hasPermission("Customer/Jobs")&&w.get(vt,function(n){et.availableJobs=n.Results})}function pt(){var n=at(et.details.accountId,et.details.type,et.details.id);n&&(f.pdfViewer?f.pdfViewer.loadDocument(n).then(function(){},function(){et.hasPdf=!1}):f.$on("angularPdfJs.available",function(){f.pdfViewer.loadDocument(n).then(function(){},function(){et.hasPdf=!1})}))}function ii(){s.get("api/docs/"+[et.details.accountId,et.details.type,et.details.id].join("/")).then(function(t){var u=t.data,e;u&&n.isObject(u)?(r.log(i,"Got doc details:",u),u.DocumentSummary.documentNo=et.details.id,u.DocumentSummary.accountId=et.details.accountId,u.DocumentSummary.amountExclGST&&u.DocumentSummary.gst&&(u.DocumentSummary.total=u.DocumentSummary.amountExclGST+u.DocumentSummary.gst),n.extend(et.details,{reference:u.poReference,addressLine1:u.addressLine1,city:u.city,state:u.state,postcode:u.postcode,summary:u.DocumentSummary,niceSummary:ai(u.DocumentSummary),pulldownOrderNo:u.pulldownOrderNo,pulldownOrderDetails:u.pulldownOrderDetails,flag:u.flag,pdfRequested:u.pdfRequested,sbuCode:u.sbuCode,canRequestNoteChange:u.DocumentSummary.canRequestNoteChange}),o.params.search&&o.params.search.reason==="regeneratePermalinks"&&(e={originalUrl:location.hash,accountId:et.details.accountId,documentNo:et.details.id,sbuCode:et.details.sbuCode,docType:et.details.type,showPrivateLink:!0,showRegenerateLink:!0},nt.showPermalinkShare(e)),ri(u.sbuCode,et.details.id),lt&&(et.details.documentKey=u.documentKey,st()),et.job=t.data.Job,f.docFlow=[t.data.docFlow],et.docFlowDocCount=t.data.docFlow!==null?countNestedProperties(t.data.docFlow,"Children")+1:0,et.docFlowCollapsed=et.docFlowDocCount>3,si(u),kt()&&r.log(i,"Cannot create release ... ","Multi-plant Pickup: ",et.details.summary.orderIsMultiPlantPickup,"Non-Connect Pickup Plant: ",et.details.summary.orderHasNonConnectPickupPlant,"Pre-validation Failure: ",et.details.summary.orderHasReleasePrevalidationFailure),et.noDataAvailable=!1,et.details.type==Enums.documentType.deliveries&&pt(),h(function(){et.viewerFit()},500)):(et.noDataAvailable=!0,et.hasPdf=!1)},function(n){n.data.ExceptionType==="System.UnauthorizedAccessException"&&(et.unauthorized=!0);et.noDataAvailable=!0;et.hasPdf=!1})}function ri(n,t){if(et.needHelpContact={PhoneNumber:ct.PhoneNumber,Name:ct.Name,OrderNumber:t},n){var i=selectByProp("SbuCode",n,ft);i&&i.result&&(et.needHelpContact={PhoneNumber:i.result.NeedHelpContactPhoneNumber||ct.PhoneNumber,Name:i.result.NeedHelpContactName||ct.Name,OrderNumber:t})}}function wt(){var n=lt?[et.details.accountId,et.details.type,et.details.id,et.details.documentKey]:[et.details.accountId,et.details.type,et.details.id];return n.join("/")}function st(){et.documentNotesLoading=!0;r.log(i,"Loading document notes");s.get("api/docs/notes/"+wt()).then(function(n){et.documentNotes=n.data;et.hasDocumentNotes=et.documentNotes&&et.documentNotes.length>0;r.log(i,"Load document notes:","success");et.documentNotesLoading=!1},function(n){r.log(i,"Load document notes:","failure: ",n);et.documentNotesLoading=!1})}function ui(n){b.swal({title:"Delete note?",text:"Are you sure you want to delete this note?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(t){t&&fi(n)})}function fi(n){et.documentNotesLoading=!0;r.log(i,"Deleting document note");s.delete("api/docs/note/"+[et.details.accountId,et.details.type,n.documentNoteId].join("/")).then(function(){st()},function(n){b.warning("Sorry!","We weren't able to delete the note at this time. Please try again later.");r.log(i,"Deleting document note:","failure: ",n);et.documentNotesLoading=!1})}function ei(n){r.log(i,"Editing document note");bt(n.note,!1,function(t){r.log(i,"Updating document note");s.post("api/docs/note/"+[et.details.accountId,et.details.type,n.documentNoteId].join("/"),{note:t.note,notify:t.notify}).then(function(n){if(n.data.success===!1){var t;t=n.data.msg==="Email contact not found"?"Your note has been saved, but we were unable to send the notification as no email contact was found.":n.msg;b.warning("Sorry!",t)}st();r.log(i,"Updating document note:","success")},function(n){b.warning("Sorry!","We weren't able to edit the note at this time. Please try again later.");r.log(i,"Updating document note:","failure: ",n)})})}function oi(){r.log(i,"Adding document note");bt("",!0,function(n){r.log(i,"Updating document note");s.put("api/docs/note/"+wt(),{note:n.note,notify:n.notify}).then(function(n){if(n.data.success===!1){var t;t=n.data.msg==="Email contact not found"?"Your note has been saved, but we were unable to send the notification as no email contact was found.":n.msg;b.warning("Sorry!",t)}st();r.log(i,"Adding document note:","success");f.$emit("achievements.taskComplete",{taskId:2,taskName:"note"})},function(n){b.warning("Sorry!","We weren't able to add the note at this time. Please try again later.");r.log(i,"Adding document note:","failure: ",n)})})}function bt(n,t,u){r.log(i,"Showing edit document note");ht=c.open({templateUrl:"editNote.html",controller:"editNoteController",controllerAs:"editNote",bindToController:!0,resolve:{note:function(){return n},isAdd:function(){return t}}});ht.result.then(function(n){u(n)})}function si(){et.details.typeName=g.isRelease(et.details.type,et.details.accountId,et.details.sbuCode)&&et.details.pulldownOrderNo!==0?"Releases":et.details.typeName}function hi(){if(f.pdfViewer){var n=ti.width();return f.pdfViewer.zoomToFit(n),n}}function ci(n){function i(n){p.downloadUrl(r,u,n)}if(f.pdfViewer){f.$emit("csat.showTray",{feature:"documents",trigger:"downloadDocument"});var e=f.pdfViewer.getDocument(),r=at(et.details.accountId,et.details.type,et.details.id),u=g.getPDFFileNameFromURL(r),o={feature:EnumDescriptions.featureEnum.documents,verb:EnumDescriptions.verbEnum.download,noun:et.details.typeName,pluralisation:EnumDescriptions.pluralisationEnum.single},s={fileName:u,DocumentNo:et.details.id,AccountId:et.details.accountId,DocumentType:EnumDescriptions.documentType[keyFlip(Enums.documentType)[et.details.type]],location:"detail"};if(k.track(o,s),et.details.type===Enums.documentType.deliveries&&f.$emit("achievements.taskComplete",{taskName:"08ViewPOD",status:2}),!e){i(n.currentTarget);return}if(!this.downloadComplete){i(n.currentTarget);return}return e.getData().then(function(i){var f=t.createBlob(i,"application/pdf");p.download(f,r,u,n.currentTarget)},function(){i(n.currentTarget)}).then(null,function(){i(n.currentTarget)})}}function li(){var n=at(et.details.accountId,et.details.type,et.details.id),t=g.getPDFFileNameFromURL(n),i={feature:EnumDescriptions.featureEnum.documents,verb:EnumDescriptions.verbEnum.print,noun:et.details.typeName,pluralisation:EnumDescriptions.pluralisationEnum.single},r={fileName:t,AccountId:et.details.accountId,DocumentNo:et.details.id,DocumentType:EnumDescriptions.documentType[keyFlip(Enums.documentType)[et.details.type]],location:"detail"};return k.track(i,r),p.shouldLegacyPrint()?(f.legacyBrowserPrint(),!0):p.printUrl(n)}function at(n,t,i){var r=g.getPdfUrl(n,t,i,et);return et.hasPdf=!!r,r}function ai(t){var i={},r=l.summaryContents[f.docTypes[et.details.type]];return n.forEach(r,function(r){var u,f,o;t.hasOwnProperty(r)&&(u=n.copy(t[r]),f=r.toLowerCase(),(f.indexOf("gst")>-1||f.indexOf("total")>-1)&&(u=e("currency")(u)),(f.indexOf("date")>-1||u!=null&&u.match&&u.match(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2}/i))&&(u=moment(u).format("D MMM YYYY")),f.indexOf("note")>-1&&(u=u.replace(/\n/g,"<br />")),f==="documentstatus"&&(u={type:"documentStatus",documentStatus:t.documentStatus,statusMessage:t.statusMessage}),t[r+"Alert"]!=undefined&&t[r+"Alert"].length>0&&(u={type:"alertspan",text:u,alert:t[r+"Alert"]}),o=vi(r),i[o]=u)}),i}function vi(n){var t=e("titleCase")(n.replace(/(?!GST)([A-Z])|(GST)/g," $1$2")).trim();return t==="Document Status"&&(t="Status"),t==="Delivery Date"&&g.isType(et.details.type,"orders")&&(t="Requested For"),t==="Date"&&g.isType(et.details.type,"orders")&&(t="Document Date"),t}function ot(n){return et.details.summary[n]}function kt(){return et.details.summary.orderIsMultiPlantPickup||et.details.summary.orderHasNonConnectPickupPlant||et.details.summary.orderHasReleasePrevalidationFailure}function yi(n){return Enums.documentType[n]===et.details.type}function pi(n,t){et.job&&(et.previousJobId=et.job.JobId);n.stopPropagation();et.selectingJob=t}function wi(){var n=d.get("documentLauncher");o.go("app.jobCreate",{previousState:"modalDocumentView",accountId:o.params.accountId,documentNo:o.params.documentNo,documentType:o.params.documentType,originalState:n})}function bi(){r.log(i,"We are off to create a release for sapOrderId: "+o.params.documentNo+" for accountId: "+o.params.accountId);it.createReleaseFromDocView(et.details.pulldownOrderDetails)}function ki(){var n;if(n=o.params.originalState?o.params.originalState:d.get("documentLauncher"),n&&n.params!==undefined&&n.params.$$search!==undefined&&n.params.$$search!==location.hash){location.hash=n.params.$$search;return}o.go("app.documents")}function dt(n){if($("div[documents-view]")[0]===undefined){$(document).off("click.docView",dt);return}if((!($(n.target).length>0)||!($(n.target).parents(".modal-content").length>0))&&$(".permalink")[0]==undefined){var t=$(".sweet-alert");$.contains($("div[documents-view]")[0],$(n.target)[0])||t[0]===undefined||$.contains(t[0],$(n.target)[0])||t[0]===n.target||$.contains($(".sweet-overlay")[0],$(n.target)[0])||$(".sweet-overlay")[0]===$(n.target)[0]||et.close()}}function di(n){if(ht&&ht.result.$$state.value==="escape key press"){ht=null;return}n.keyCode==27&&et.close()}function gi(n){o.go("app.jobDetail",{jobId:n})}function nr(n){if(n!==!0){gt();return}b.swal({title:"Remove job from document?",text:"Are you sure you want to remove the job from this document?",type:"warning",showCancelButton:!0,confirmButtonText:"Remove"},function(n){n&&gt()})}function gt(){et.clearingJobMessage="Clearing job...";et.removingFromJob=!0;w.deleteCsrDocument({jobid:et.job.JobId,accountId:et.details.accountId,documenttype:et.details.type,documentno:et.details.id},function(n){n.success?(u.$broadcast("removeJobFromDoc",{jobId:et.job.JobId}),et.job=null,et.removingFromJob=!1):(b.warning("Error removing job",n.msg+" Please contact CSR Connect support."),et.removingFromJob=!1)},function(){b.warning("Error removing job","We were unable to remove the job from this document at this time. Please try again, or contact CSR Connect support.");et.removingFromJob=!1})}function tr(){et.previousJobId!==null?(et.clearingJobMessage="Changing job...",et.removingFromJob=!0,w.deleteCsrDocument({jobid:et.previousJobId,accountId:et.details.accountId,documenttype:et.details.type,documentno:et.details.id},function(n){n.success?(et.removingFromJob=!1,u.$broadcast("removeJobFromDoc",{jobId:et.previousJobId}),ni()):(b.warning("Error changing job",n.msg+" Please contact CSR Connect support."),et.removingFromJob=!1)},function(){b.warning("Error changing job","We were unable to change the job for this document at this time. Please try again, or contact CSR Connect support.");et.removingFromJob=!1})):ni()}function ni(){w.addCsrDocument({jobid:et.job.JobId},{DocumentNo:et.details.id,DocumentType:et.details.type,AccountId:et.details.accountId},function(n){n.success?(et.selectingJob=!1,et.job=n.data.Job,u.$broadcast("assignJobToDoc",{jobId:et.job.JobId})):b.warning("Error assigning job",n.msg+" Please contact CSR Connect support.")},function(){et.selectingJob=!1})}function ir(){return"modalDocumentView({accountId: item.AccountId, documentType: docTypes[item.DocumentType], documentNo: item.DocumentNo})"}function rr(){tt.requestPOD({deliveryOrderId:ot("id")},{},function(){var n={feature:EnumDescriptions.featureEnum.documents,verb:EnumDescriptions.verbEnum.request,noun:EnumDescriptions.nounEnum.pOD,pluralisation:EnumDescriptions.pluralisationEnum.single},t={eventDate:moment().format("dddd, MMMM Do, YYYY h:mm:ss A"),delivery_number:ot("documentNo"),AccountId:ot("soldTo")||ot("accountId"),type:ot("DeliveryIndicator"),location:"detail"};k.track(n,t);b.swal({title:"Proof of Delivery Requested",text:"An email has been sent to CSR Connect Helpdesk requesting a copy of the Proof of Delivery document. You will receive a confirmation email at your registered email address.",showCancelButton:!1,confirmButtonText:"Close"});et.podRequested=!0})}function ur(n){var t=et.details.documentKey==null?[et.details.accountId,et.details.type,et.details.id,n]:[et.details.accountId,et.details.type,et.details.id,et.details.documentKey,n];s.post("api/docs/flag/"+t.join("/")).then(function(){et.details.flag=n;u.$broadcast("documents.flagchanged",{accountId:et.details.accountId,type:et.details.type,id:et.details.id,flag:n})},function(n){b.warning("Error updating document flag","We were unable to update the flag for this document at this time. Please try again, or contact CSR Connect support.");r.log(i,"Error updating document flag ","error: ",n)})}function fr(n){return("."+n).indexOf(".jpg")>0||("."+n).indexOf(".png")>0||("."+n).indexOf(".gif")>0}function er(){f.$emit("csat.showTray",{feature:"documents",trigger:"viewProofOfDelivery"});var n=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/pod?documentNo="+et.details.id+"&access_token="+a.token();window.open(n)}function or(){rt.requestInvoicePdf({accountId:ot("accountId"),documentNo:ot("documentNo"),invoiceId:et.details.documentKey},function(){b.swal({title:"Invoice PDF Requested",text:"An email has been sent to CSR Connect Accounts requesting a copy of the PDF. You will receive a confirmation email at your registered email address.",showCancelButton:!1,confirmButtonText:"Close"});et.pdfRequested=!0})}function sr(){et.docFlowCollapsed=!et.docFlowCollapsed;et.docFlowCollapsed||f.$broadcast("angular-ui-tree:expand-all")}var et=this,ti=$("#pdf-viewer"),vt;f.docTypes=Object.keys(Enums.documentType);f.Enums=Enums;f.getUiSref=ir;et.options={fitToWidth:!0,mouseZoom:!1,mousePan:!0};et.showChangeBox=!1;et.showChangeSuccessBox=!1;et.savingChanges=!1;et.showCustomerServiceChangeBox=!1;et.noteChange="";et.details={accountId:o.params.accountId,id:o.params.documentNo,documentKey:null,type:Enums.documentType[o.params.documentType],typeName:o.params.documentType!=="pulldownOrders"?o.params.documentType:"Orders",summary:{}};et.job=null;et.previousJobId=null;et.clearingJobMessage="Clearing job...";vt={keyword:null,fromDate:null,toDate:null,sort:Enums.sortOrder.asc.toString(),sortBy:Enums.jobSortType.name.toString(),perPage:100,page:1};et.isPullDownOrder=o.params.documentType==="pulldownOrders";f.docFlow=null;et.hasPdf=null;et.pdfViewerFile=null;et.noDataAvailable=null;et.notes=null;et.podRequested=!1;et.invoicePdfRequested=!1;et.docFlowCollapsed=!0;et.isPrintFriendly=ut.isPrintFriendly();et.documentNotesLoading=!0;et.hasDocumentNotes=!1;et.documentNotes=null;et.newDocumentNote="";et.getSummaryVal=ot;et.viewerFit=hi;et.downloadDoc=ci;et.printDoc=li;et.openPod=er;et.isType=yi;et.selectingJob=!1;et.loadingAvailableJobs=!1;et.removingFromJob=!1;et.showJobsSelect=pi;et.assignDocToJob=tr;et.removeJobFromDoc=nr;et.goToJob=gi;et.availableJobs=[];et.createJob=wi;et.goToCreateRelease=bi;et.close=ki;et.connectCantRelease=kt;et.clickOutsideHandler=dt;et.keyPressHandler=di;et.requestPOD=rr;et.requestInvoicePdf=or;et.updateFlag=ur;et.docFlowToggleCollapse=sr;et.loadDocumentNotes=st;et.deleteDocumentNote=ui;et.addDocumentNote=oi;et.editDocumentNote=ei;et.isImage=fr;var ht=null,lt=et.details.type===Enums.documentType.invoices,ct={PhoneNumber:"1800 909 439",Name:"CSR Connect Support"};et.needHelpContact=ct;v.isReady()?yt():f.$on("accounts.dataReady",yt);f.$on("accounts.changed",function(n,t){isInArray(et.details.accountId.toString(),t)||o.go("app.documents").then(function(){y.add({id:"docs.accountUnavailable",type:"info",message:"The document you were viewing has been closed, as you've deselected the account it belongs to.",expire:!0})})});et.requestChange=function(){et.showChangeFailureBox=!1;et.details.summary.canModify?o.go("app.orderModify",{accountId:o.params.accountId,orderNo:o.params.documentNo}):et.details.summary.canRequestNoteChange&&et.details.summary.isTextChangeEnabled?(et.showChangeBox=!0,focusOnId("change-notes-area"),scrollToId("change-notes-header")):et.showCustomerServiceChangeBox=!0};et.cancelChange=function(){et.noteChange="";et.showChangeBox=!1};et.saveChange=function(){et.showChangeFailureBox=!1;et.savingChanges=!0;var n="api/orders/"+[et.details.accountId,et.details.id].join("/")+"/modify";s.post(n,{note:et.noteChange}).then(function(n){et.details.summary.customerChangeRequest=n.data.Notes;et.details.summary.changeRequests=n.data.ChangeRequests;et.showChangeBox=!1;et.savingChanges=!1;et.noteChange="";et.showChangeSuccessBox=!0;h(function(){et.showChangeSuccessBox=!1},5e3)},function(){et.savingChanges=!1;et.showChangeFailureBox=!0;h(function(){et.showChangeFailureBox=!1},5e3)})}}n.module("app.documents").directive("documentsView",r);var i="[docView]";r.$inject=["$timeout"];u.$inject=["$log","$rootScope","$scope","$filter","$state","$http","$timeout","$modal","DOCS_CONFIG","authService","accountsService","notificationService","shareTools","jobs","SweetAlert","metrics","$previousState","documentsHelper","permalinksService","deliveries","releaseData","documents","browserPlatform","SBU_CONFIG"]}(angular,PDFJS),function(n){"use strict";function t(n){var t="/api/downloads";return n(t,null,{query:{cancellable:!0,url:t},beginDownloadByFilter:{method:"POST",url:t+"/filter"},beginDownloadByIds:{method:"POST",url:t+"/ids"},cancelDownload:{method:"POST",url:t+"/cancel"},deleteDownload:{method:"POST",url:t+"/delete"},retryDownload:{method:"POST",url:t+"/retry"}})}n.module("app.downloads").factory("downloads",t);t.$inject=["$resource"]}(angular),function(){"use strict";function n(n,i,r){r.configureStates(t())}function t(){return[{state:"app.downloads",config:{url:"/downloads",pageTitle:"Downloads",templateUrl:"downloads/downloads",access:"All/Download"}}]}angular.module("app.downloads").run(n);n.$inject=["$rootScope","$state","routerHelper"]}(),function(){"use strict";function n(n,t,i,r,u){function e(){f(!0)}function f(n){var r=t.$$path.split("/home/")[1],f;if(!angular.isDefined(r)){scrollToY(0);return}n&&(f=document.getElementById(r),f&&i.scrollTo(0,f.offsetTop));u(function(){scrollToId(r)},1e3);return}n.$on("$locationChangeStart",function(){f(!1)});n.$on("$viewContentLoaded",function(){f(!0)});e();n.goToSignup=function(){r.go("app.signUp.form")};n.goToLogin=function(){r.go("app.login")}}angular.module("app.home").controller("HomeController",n);n.$inject=["$scope","$location","$window","$state","$timeout"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.home",config:{url:"/home",pageTitle:"Home",templateUrl:"home.html",bodyClass:"landing"}},{state:"app.home.features",config:{url:"/features",pageTitle:"Features | CSR Connect",bodyClass:"landing",scroller:!0}},{state:"app.home.more-info",config:{url:"/more-info",pageTitle:"More information | CSR Connect",bodyClass:"landing",scroller:!0}},{state:"app.contact",config:{url:"/home/contact-us",pageTitle:"Contact Us",templateUrl:"home/contactus",bodyClass:"landing"}},{state:"app.terms",config:{url:"/home/terms",pageTitle:"Terms & Conditions",templateUrl:"home/terms",bodyClass:"landing"}},{state:"app.privacy",config:{url:"/home/privacy",pageTitle:"Privacy Policy",templateUrl:"home/privacypolicy",bodyClass:"landing"}},{state:"app.security",config:{url:"/home/security",pageTitle:"Security Policy",templateUrl:"home/securitypolicy",bodyClass:"landing"}},{state:"app.partners",config:{url:"/home/partners",pageTitle:"Partners",templateUrl:"partners.html",bodyClass:"landing"}},{state:"app.disclaimer",config:{url:"/disclaimer",pageTitle:"Disclaimer",templateUrl:"home/disclaimer",bodyClass:"landing"}},{state:"app.launchpad",config:{url:"/launch",pageTitle:"Home",templateUrl:"home/launchpad",needsAuth:!0}},{state:"app.promoOrderRewards",config:{url:"/promo/order-rewards",pageTitle:"Order Rewards Promotion Terms & Conditions",templateUrl:"home/orderRewardsTerms",bodyClass:"landing"}},{state:"app.promoConnectAndWin",config:{url:"/promo/connect-and-win",pageTitle:"Connect and Win Terms & Conditions",templateUrl:"home/connectAndWinTerms",bodyClass:"landing"}}]}angular.module("app.home").run(n);n.$inject=["routerHelper"]}(),function(){"user strict";function t(t,i,r,u,f){var e=this;e.dataLoaded=!1;e.showInitialSetup=!1;e.xeroConnection=null;e.xeroConnectionName="";e.connectDocumentTypes=[];e.selectedDocumentTypes={};e.xeroAccountCodes=[];e.xeroContacts=[];e.selectedAccountContacts={};e.startXeroIntegration=function(){r.getXeroIntegrationUrl().then(function(n){location.href=n.data}).catch(function(n){t.error(n);u.swal({title:"Uh oh",text:"Something went wrong trying to start Xero Integration",type:"error",confirmButtonText:"Ok"})})};e.saveConnectionDetails=function(){var i,f,o,n;if(e.selectedDocumentTypes==null||e.selectedAccountContacts==null||e.xeroConnection==null){u.swal({title:"Uh oh",text:"Invalid Configuration to Save Xero Integration details",type:"error",confirmButtonText:"Ok"});return}for(i={TenantId:e.xeroConnection.TenantId,AccountDetails:[],LedgerMappings:[]},f=Object.keys(e.selectedDocumentTypes),n=0;n<f.length;n++){if(e.selectedDocumentTypes[f[n]]==null){u.swal({title:"Uh oh",text:"You have to select the Xero Account Code for each CSR Connect Document type.",type:"error",confirmButtonText:"Ok"});return}i.LedgerMappings.push({XeroLedgerCode:e.selectedDocumentTypes[f[n]],DocumentType:f[n]})}for(o=Object.keys(e.selectedAccountContacts),n=0;n<o.length;n++)e.selectedAccountContacts[o[n]]!=null&&i.AccountDetails.push({XeroContactId:e.selectedAccountContacts[o[n]].description.ContactID,AccountId:o[n]});if(!e.isNonEmptyArray(i.AccountDetails)){u.swal({title:"Uh oh",text:"You have to select the Xero Contact for at least one CSR Connect Account.",type:"error",confirmButtonText:"Ok"});return}e.dataLoaded=!1;r.updateDetails(e.xeroConnection.UserIntegrationId,i).then(function(n){n.success===!1?(e.dataLoaded=!1,u.swal({title:"Uh oh",text:n.msg!=null?n.msg:"Something went wrong trying to update Xero Integration settings",type:"error",confirmButtonText:"Ok"})):(e.showInitialSetup=!1,e.getXeroOrganisations())}).catch(function(n){e.dataLoaded=!0;t.error(n);u.swal({title:"Uh oh",text:"Something went wrong trying to update Xero Integration settings",type:"error",confirmButtonText:"Ok"})})};e.connections=[];e.confirmDeleteConnection=function(n){u.swal({title:"Confirm Delete",text:"Are you sure you want to delete this Xero integration?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete",cancelButtonText:"Cancel"},function(t){t&&e.deleteIntegration(n)})};e.deleteIntegration=function(i){t.log(n,"delete",i);e.dataLoaded=!1;r.deleteConnection(i).then(function(i){t.log(n,"delete success",i);e.getXeroOrganisations()}).catch(function(n){e.dataLoaded=!0;t.error(n);u.swal({title:"Uh oh",text:"Something went wrong trying to delete Xero Integration",type:"error",confirmButtonText:"Ok"})})};e.getXeroOrganisations=function(){r.getXeroOrganisations().then(function(i){var f,o,s,u,r;if(e.dataLoaded=!0,e.connections=i.data,e.isNonEmptyArray(e.connections)&&(f=e.connections[0],!e.isNonEmptyArray(f.AccountDetails)||!e.isNonEmptyArray(f.LedgerMappings))){if(e.showInitialSetup=!0,e.xeroConnection=f,e.isNonEmptyArray(e.xeroConnection.Organisations)&&(e.xeroConnectionName=e.xeroConnection.Organisations[0].Name),o=!1,e.isNonEmptyArray(e.xeroConnection.XeroAccounts))for(r=0;r<e.xeroConnection.XeroAccounts.length;r++)s=e.xeroConnection.XeroAccounts[r].Type,e.xeroConnection.XeroAccounts[r].Code==="310"&&(o=!0),(s==="DIRECTCOSTS"||s==="EXPENSE")&&e.xeroAccountCodes.push({value:e.xeroConnection.XeroAccounts[r].Code,description:e.xeroConnection.XeroAccounts[r].Name});if(Enums.xeroSupportedDocumentType!=null)for(u=Object.keys(Enums.xeroSupportedDocumentType),r=0;r<u.length;r++)Enums.xeroSupportedDocumentType.hasOwnProperty(u[r])&&(e.connectDocumentTypes.push({docType:u[r],docVal:Enums.xeroSupportedDocumentType[u[r]],description:EnumDescriptions.xeroSupportedDocumentType[u[r]]}),e.selectedDocumentTypes[u[r]]=o?"310":null);if(e.isNonEmptyArray(e.xeroConnection.Contacts))for(r=0;r<e.xeroConnection.Contacts.length;r++)e.xeroContacts.push({value:e.xeroConnection.Contacts[r].ContactID,name:e.xeroConnection.Contacts[r].Name})}t.log(n,"getOrgs",i)}).catch(function(n){e.dataLoaded=!0;t.error(n);(n.status!==401||f.isAuthenticated())&&u.swal({title:"Uh oh",text:"Something went wrong trying to get Xero Integrations",type:"error",confirmButtonText:"Ok"})})};e.getMatchingAccountDetails=function(n,t){return _.find(n.CsrAccounts,function(n){return n.AccountId===t})};e.$onInit=function(){e.getXeroOrganisations()};e.isNonEmptyArray=function(n){return n!=null&&Array.isArray(n)&&n.length>0}}angular.module("app.integrations").controller("integrationsController",t);var n="IntegrationsController";t.$inject=["$log","$scope","integrationsService","SweetAlert","authService"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.integrations",config:{url:"/admin/integrations",pageTitle:"Integrations",templateUrl:"integrations.html"}}]}angular.module("app.integrations").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n){var t={};return t.getXeroIntegrationUrl=function(){return n.post("/api/admin/integrations/xero/start",{integration:"xero"})},t.getXeroOrganisations=function(){return n.get("/api/admin/integrations/xero/list",{timeout:18e4})},t.deleteConnection=function(t){return n.delete("/api/admin/integrations/xero/delete/"+t)},t.updateDetails=function(t,i){return n.post("/api/admin/integrations/xero/updateDetails/"+t,i)},t}angular.module("app.integrations").factory("integrationsService",n);n.$inject=["$http"]}(),function(){"use strict";function f(){return{restrict:"A",controller:r}}function r(n){function r(t){var i=t.target.attributes["autosave-field"];i||n.$broadcast("flags.hideAll")}var u=this;n.$on("flag.editing",function(t,i){n.$broadcast("flags.editing",i)});n.$on("flag.hideAll",function(){n.$broadcast("flags.hideAll")});t.on("click"+i,r);n.$on("$destroy",function(){t.off(i);n.$broadcast("flags.hideAll")})}function e(){function n(n,t,i,r){t.on("click",function(n){n.stopPropagation();n.preventDefault();r.cycleFlag()});t.on("mouseenter",function(){r.showPopover()});t.on("mouseleave",function(){r.editing||r.hidePopover()})}return{restrict:"A",controller:u,controllerAs:"flag",link:n}}function u(t,i,r,u,f,e){function w(){f(function(){o.open=!0})}function a(){f(function(){o.open=!1;o.editing=!1;o.saving=null})}function v(){f(function(){o.editing=!0;i.$emit("flag.editing",h)})}function b(){if(o.current>0&&!o.editing){v();return}v();f(function(){o.current==n.length-1?(o.current=0,o.editing=!1,i.$apply(o)):o.current++;k();o.saving=!0;l();w()})}function k(){o.label=n[o.current].label;o.icon=n[o.current].icon;o.color=n[o.current].color;i.$apply(o)}var o=this,s=i.itm,h=s.DocumentNo||s.InvoiceRef,y=s.InvoiceTags?s.InvoiceTags.Labels[0]:0,c=n[y],p,l;o.open=!1;o.editing=!1;o.saving=null;o.current=y;o.label=c.label;o.icon=c.icon;o.color=c.color;o.comment=s.InvoiceTags?s.InvoiceTags.Comment:null;o.updatedDate=s.InvoiceTags?s.InvoiceTags.UpdatedOn:null;o.updatedBy=s.InvoiceTags?s.InvoiceTags.UpdatedByUserName:null;p=debounce(function(n,t){n!=t?(u.log("Flag comment updated to:",n,"from:",t),l()):u.warn(n,n!=t)},750);l=debounce(function(){(o.comment==""||o.current==0)&&(o.comment=null);e.save({Labels:[o.current.toString()],Comment:o.comment,DocumentNo:h},function(){u.info("Saved tag >",o,"for",i.itm);o.saving=!1;o.updatedDate=Date.now();o.updated=t.session.user.Profile.LoginId},function(n){u.error(n);o.saving=!1})},1500);i.$watch("flag.comment",function(n,t){o.editing&&(o.saving=!0,p(n,t))});i.$on("flags.editing",function(n,t){t!=h&&a()});i.$on("flags.hideAll",a);o.showPopover=w;o.hidePopover=a;o.activateEdit=v;o.cycleFlag=b}function o(){function n(n,i){i.on("keydown.autosaveField",function(n){[9,13,27].indexOf(n.which)>-1&&t.trigger("click")});i.on("blur.autosaveField",function(){i.focus()});n.$on("$destroy",function(){i.off()})}return{restrict:"A",link:n}}angular.module("app.invoices").directive("invoiceFlags",f).directive("invoiceFlag",e).directive("autosaveField",o);var t=$("body"),i=".flag",n=[{label:"Not flagged",icon:"fa-flag-o",color:"flag-grey"},{label:"Flagged",icon:"fa-flag",color:"flag-green"},{label:"Flagged",icon:"fa-flag",color:"flag-orange"},{label:"Flagged",icon:"fa-flag",color:"flag-red"}];r.$inject=["$scope","$attrs","$log","invoiceTag"];u.$inject=["$rootScope","$scope","$attrs","$log","$timeout","invoiceTag"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){n.flags=[{label:"Not flagged",icon:"fa-flag-o",color:"flag-grey"},{label:"Green flags",icon:"fa-flag",color:"flag-green"},{label:"Amber flags",icon:"fa-flag",color:"flag-orange"},{label:"Red flags",icon:"fa-flag",color:"flag-red"}];n.flagTpl="flag.html";n.searchOption={};n.searchOption.dateRange={startDate:new Date(moment().subtract(12,"M").format("YYYY-MM-DD")),endDate:new Date(moment().format("YYYY-MM-DD"))};n.searchOption.flag=!1;n.selectFlag=function(t){n.searchOption.flag=angular.isNumber(t)?t:!1;n.list.search(!0)};n.quickSearch=function(t){(t.length>1||t.length===0)&&n.list.search()};n.tableHeaders=n.paymentsMode?[{columnName:"",displayName:"",checkbox:!0},{columnName:"",displayName:""},{columnName:"DocumentNo",displayName:"Invoice no."},{columnName:"AccountId",displayName:"Account no."},{columnName:"Status",displayName:"Status"},{columnName:"DocumentDate",displayName:"Date"},{columnName:"CustomerOrderNo",displayName:"Your reference"},{columnName:"DeliveryDocketNo",displayName:"Delivery no."},{columnName:"TotalIncGST",displayName:"Amount*",className:"tf-right"},{columnName:"",displayName:"Pay amount"}]:[{columnName:"",displayName:"",checkbox:!0},{columnName:"",displayName:""},{columnName:"DocumentNo",displayName:"Invoice No."},{columnName:"AccountId",displayName:"Account No."},{columnName:"Status",displayName:"Status"},{columnName:"Type",displayName:"Type"},{columnName:"Date",displayName:"Date"},{columnName:"CustomerOrderNo",displayName:"Your Reference"},{columnName:"DeliveryNo",displayName:"Delivery No."},{columnName:"Amount",displayName:"Amount*",className:"tf-right"}];n.listViewConfig={resourceName:"invoices",filters:[{field:"Date",alias:"From",operator:">=",value:moment(n.searchOption.dateRange.startDate).format()},{field:"Date",alias:"To",operator:"<",value:moment(n.searchOption.dateRange.endDate).format()},{field:"CustomerOrderNo",alias:"CustomerOrderNo",operator:"like",value:n.searchOption.searchText,condition:"or",nested:"start"},{field:"DocumentNo",alias:"DocumentNo",operator:"=",value:n.searchOption.searchText,condition:"or"},{field:"Status",alias:"Status",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"AccountId",alias:"AccountId",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"ShipToCompany",alias:"ShipToCompany",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"ShipToStreet",alias:"ShipToStreet",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"ShipToSuburb",alias:"ShipToSuburb",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"ShipToState",alias:"ShipToState",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"ShipToPostcode",alias:"ShipToPostcode",operator:"like",value:n.searchOption.searchText,condition:"or"},{field:"Amount",alias:"Amount",operator:"=",value:n.searchOption.searchText,condition:"or"},{field:"DeliveryNo",alias:"DeliveryNo",operator:"like",value:n.searchOption.searchText,condition:"or",nested:"end"}],order:[{field:"Date",orderBy:"desc"}],count:!0,sortColumn:"Date",asc:!1,itemName:"invoice"};n.$on("list.search",function(){n.list.config.resourceName="invoices";n.searchOption.flag!==!1&&(n.list.config.resourceName="invoicesByTag",n.list.config.additionalQueryParams={tag:n.searchOption.flag});n.list.config.filters.From.value=moment(n.searchOption.dateRange.startDate).format("YYYY-MM-DD");n.list.config.filters.To.value=moment(n.searchOption.dateRange.endDate).add(1,"day").format("YYYY-MM-DD");n.list.config.filters.CustomerOrderNo.value=n.searchOption.searchText;n.list.config.filters.DocumentNo.value=parseInt(n.searchOption.searchText);n.list.config.filters.Status.value=n.searchOption.searchText;n.list.config.filters.DeliveryNo.value=n.searchOption.searchText;n.list.config.filters.AccountId.value=n.searchOption.searchText;n.list.config.filters.Amount.value=parseFloat(n.searchOption.searchText);n.list.config.filters.ShipToCompany.value=n.searchOption.searchText;n.list.config.filters.ShipToStreet.value=n.searchOption.searchText;n.list.config.filters.ShipToSuburb.value=n.searchOption.searchText;n.list.config.filters.ShipToState.value=n.searchOption.searchText;n.list.config.filters.ShipToPostcode.value=n.searchOption.searchText});n.OpenInvoice=function(t){if(t!==null&&t!==""){var i=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/export?ids="+t+"&access_token="+r.token()+"&accountId="+s.getActive().join(",")+"&fileType=pdf";n.$emit("docs.openDoc",{src:i});window.open(i);n.$emit("achievements.taskComplete",{taskName:"viewInvoicePdf",status:2})}};n.OpenPod=function(n){if(n){var t=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/pod?documentNo="+n+"&access_token="+r.token();window.open(t)}};$("#btn-download-pdf").on("click",function(t){n.exportFiles(t,e.pdf);n.$emit("achievements.taskComplete",{taskName:"viewInvoicePdf",status:2})});$("#btn-download-csv").on("click",function(t){n.exportFiles(t,e.csv)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,e.excel)});n.exportFiles=function(t,i){t.stopPropagation();var u=n.selectedItems.length?n.selectedItems:n.list.items,f=$.map(u,function(n){return n.DocumentNo}),e=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/export?ids="+window.encodeURIComponent(f)+"&access_token="+r.token()+"&accountId="+s.getActive().join(",")+"&fileType="+i.toLowerCase();window.open(e)}}angular.module("app.invoices").controller("InvoicesController",n);n.$inject=["$scope","$stateParams","$templateCache","authService","invoices","invoicePDF","exportService","notificationService","accountsService","metrics","metricEvents","utilService"]}(),function(){"use strict";function n(n,t){var i="api/finance/invoices";return n(i,null,{query:{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-HTTP-Method-Override":"InvoiceSearch"},transformRequest:function(n){return t(n)},isArray:!1},get:{method:"GET",url:i+"/",cancellable:!0,isArray:!1}})}function t(n){return n("api/finance/invoices/tag/:tag",null,{query:{isArray:!1}})}function i(n){return n("api/finance/invoices/lastn",null,{query:{isArray:!0}})}function r(n){return n("api/finance/invoicepdf")}function u(n){return n("api/finance/invoice/tags")}function f(){return $resource("api/finance/invoice/taglabels")}angular.module("app.invoices").factory("invoices",n).factory("invoicesByTag",t).factory("invoicesLastN",i).factory("invoicePDF",r).factory("invoiceTag",u).factory("invoiceTags",f);n.$inject=["$resource","$httpParamSerializer"];t.$inject=["$resource"];i.$inject=["$resource"];r.$inject=["$resource"];u.$inject=["$resource"];f.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[]}angular.module("app.invoices").run(n);n.$inject=["routerHelper"]}(),function(n){"use strict";function i(){return{controller:t,controllerAs:"ic",bindToController:!0,restrict:"A",templateUrl:"invoices-counter.html",replace:!0,scope:{count:"="}}}function t(n,t,i){var r=this;r.recentInvoices=null;r.recentInvoicesTruncated=null;r.recentInvoicesString=null;r.count=null;r.canRefresh=function(){return!(!n.isAuthenticated()||!n.canDo("r","Customer/Invoice"))};r.refreshCount=function(){r.canRefresh()&&t.query({topN:100,maxAgeDays:1}).$promise.then(function(n){r.recentInvoices=n.length;r.recentInvoicesTruncated=r.recentInvoices<100?r.recentInvoices:"99+";r.recentInvoicesString=n.length+" recent invoice"+(n.length===1?"":"s");r.count=r.recentInvoices})};i.$on("accounts.changed",function(){r.refreshCount()});r.refreshCount()}n.module("app.invoices").directive("invoicesCount",i);t.$inject=["authService","invoicesLastN","$rootScope"]}(angular),function(){"use strict";function n(n){return n("api/payments/outstandinginvoices",null,{get:{cancellable:!0}})}function t(n){return n("api/payments/tag/:tag/outstandinginvoices",null,{get:{cancellable:!0}})}angular.module("app.invoices").factory("invoicesOutstanding",n).factory("invoicesOutstandingByTag",t);n.$inject=["$resource"];t.$inject=["$resource"]}(),function(){"use strict";function n(n,t,i){n.list={};n.list.data={};n.list.items=[];n.list.sortColumn="Date";n.list.asc=!1;n.list.orderBy="desc";n.list.totalItems=0;n.list.data.itemsPerPage=25;n.list.data.currentPage=1;n.dataLoaded=0;n.searchOption={};n.searchOption.dateRange={startDate:new Date(moment().subtract(12,"M").format("YYYY-MM-DD")),endDate:new Date(moment().format("YYYY-MM-DD"))};n.invoicePanelList={};n.invoicePanelList.Items=[];n.tableHeaders=[{columnName:"DocumentNo",displayName:"Invoice No."},{columnName:"Status",displayName:"Status"},{columnName:"Date",displayName:"Date"},{columnName:"CustomerOrderNo",displayName:"Your Reference"},{columnName:"DeliveryNo",displayName:"Delivery No."},{columnName:"PuchasePriceIncludingTaxes",displayName:"Amount*",className:"tf-right"}];n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.list.orderBy=n.list.asc?"asc":"desc";n.init()};n.init=function(){var r,u;n.invoicePanelList={};n.invoicePanelList.Items=[];r={};r.$orderby=n.list.sortColumn+" "+n.list.orderBy;r.$skip=0;r.$top=5;n.dataLoaded=0;u=t.get(r);u.$promise.then(function(t){n.dataLoaded=1;n.invoicePanelList.Items=t.Items;n.refreshLayout()},function(){n.dataLoaded=1;n.invoicePanelList={Count:0,Items:{}}});i.register(u)}}angular.module("app.invoices").controller("InvoicesPanelController",n);n.$inject=["$scope","invoices","resourceCancellingService","$state"]}(),function(){"use strict";function t(){return{restrict:"C",controller:n}}function n(n){var t={blue:"info",green:"success",amber:"warning",red:"danger"},i={Pai:t.green,Cre:t.blue,Due:t.amber,Ove:t.red};n.statusClass=function(n){return n?"label-"+(i[n.substring(3,0)]||"default"):!1}}angular.module("app.invoices").directive("invoiceStatuses",t);n.$inject=["$scope"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y){function ct(){nt&&nt();nt=i.$on("accounts.dataReady",ft)}function ft(){u.log(n,"JobDetailController init with: ",f.jobId);lt(f.jobId)}function lt(t){p.errorMsg=null;u.log(n,"loadJobDetails called with: ",t);c.getJob({jobid:t,includeInvoicesByAddress:r.search().suggestedJob==!0},function(f){f.success?(p.addAttachmentUrl="/api/jobs/"+t+"/attachments?access_token="+h.token(),p.loadingAttachments=!1,p.loadingNotes=!1,p.jobDetails=f.data,yi(),i.docFlowShowRemoveFromJob=!!p.jobDetails.CanUpdate,p.addingNote=p.jobDetails.Notes.length===0&&f.data.CanUpdate,ot(p.jobDetails),u.log(n,"loadJobDetails returned with: ",p.jobDetails),r.search().suggestedJob!=!0?b(t):(p.jobDetails.JobInvoices=f.data.JobInvoices,g(),p.loadingInvoices=!1,vi(t,f.data.ShortAddress)),r.$$search={},r.$$compose()):(p.errorCode=f.error,p.errorMsg=f.msg)})}function at(n){return n.DocumentType===Enums.documentType.payment?"modalPaymentView({ paymentId: item.Id })":"modalDocumentView({accountId: item.AccountId, documentType: docTypes[item.DocumentType], documentNo: item.DocumentNo})"}function vt(n){return c.getAttachmentUploadUrl({jobid:p.jobDetails.JobId},{filename:n.name})}function yt(n){p.attachmentJobFileId=n.data.JobFileId}function pt(t){if(u.log(n,"Uploading",t),t[0].size>p.jobDetails.Quota.MaxFileSizeBytes)return l.warning("Quota Exceeded","This file exceeds your maximum file size of "+v("filesize")(p.jobDetails.Quota.MaxFileSizeBytes)),!1;if(t[0].size+p.jobDetails.Quota.CurrentlyUsed>p.jobDetails.Quota.MaxCombinedSizeBytes)return l.warning("Quota Exceeded","Adding this file would exceed your per job quota of "+v("filesize")(p.jobDetails.Quota.MaxCombinedSizeBytes)),!1;p.attachmentFile=t[0];p.attachmentUploading=!0}function wt(t){if(t.status!=200){p.attachmentUploading=!1;l.warning("Unable to upload attachment",t.data.msg);return}var i={filename:p.attachmentFile.name,contentLength:p.attachmentFile.size,JobFileId:p.attachmentJobFileId};u.log(n,"Completing attachment upload",i);c.completeAttachmentUpload({jobid:p.jobDetails.JobId},i,function(){u.log(n,"Adding attachment success");p.attachmentUploading=!1;p.jobDetails.LastUpdated=new Date;et()},function(n){p.attachmentUploading=!1;l.warning("Unable to upload attachment",n.data.msg);return})}function bt(t){u.log(n,"Adding attachment error",t);p.attachmentUploading=!1;l.warning("Sorry!","We weren't able to upload the attachment at this time. Please try again later.")}function et(){h.canDo("r","Customer/Jobs")&&(p.loadingAttachments=!0,u.log(n,"Loading attachments",p.jobDetails.JobId),c.getAttachments({jobid:p.jobDetails.JobId},function(n){p.jobDetails.Attachments=n;ot(p.jobDetails);p.loadingAttachments=!1},function(){l.warning("Sorry!","We weren't able to load the attachments at this time. Please try again later.");p.loadingAttachments=!1}))}function ot(n){angular.forEach(n.Attachments,function(t){t.imageSrc="/api/jobs/"+n.JobId+"/attachments/"+t.JobAttachmentId+p.accessToken;t.fileTypeInitials=kt(t.FileType)})}function kt(n){return n.split("").join(" ")}function dt(n,t){l.swal({title:"Delete attachment?",text:"Are you sure you want to delete this attachment?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(i){i&&c.deleteAttachment({jobid:n,jobattachmentid:t},function(){p.jobDetails.LastUpdated=new Date;et()},function(){l.warning("Sorry!","We weren't able to delete the attachment at this time. Please try again later.")})})}function gt(){c.updateNote({jobid:p.jobDetails.JobId,jobnoteid:k.JobNoteId},{Text:p.userNote},function(){w=k.JobNoteId;tt()},function(){});p.userNote=null;p.editingNote=!1;i.form.$setPristine()}function ni(n,t){n.stopPropagation();k=t;p.userNote=t.Text;p.editingNote=!0}function ti(){p.editingNote=!1;p.addingNote=!1;p.userNote=null;i.form.$setPristine()}function ii(){p.addingNote=!0}function ri(n){n.expanded=!n.expanded}function ui(t){t.preventDefault();p.addingNote=!1;c.addNote({jobid:p.jobDetails.JobId},{Text:p.userNote},function(n){p.jobDetails.LastUpdated=new Date;w=n.JobNoteId;tt();p.userNote="";i.form.$setPristine()},function(t){u.log(n,t)})}function tt(){c.getNotes({jobid:p.jobDetails.JobId},function(n){if(w){var t=n.find(function(n){return n.JobNoteId===w});t.expanded=!0;w=null}p.jobDetails.Notes=n;p.addingNote=p.jobDetails.Notes.length===0})}function fi(n,t){n.stopPropagation();l.swal({title:"Delete note?",text:"Are you sure you want to delete this note?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(n){n&&c.deleteNote({noteid:t,jobid:p.jobDetails.JobId},function(){p.jobDetails.LastUpdated=new Date;tt()},function(){l.warning("Sorry!","We weren't able to delete the note at this time. Please try again later.")})})}function ei(n){n.preventDefault();var t=a.open({templateUrl:"JobMemberManagementPopup.html",controller:"JobMemberManagementController as management"});e(function(){var n=$(".modal-dialog");n.on("click","a.modal-dismiss",function(){n.off("click");t.close("close");d()})});t.result.catch(function(){d()})}function oi(n,t){l.swal({title:"Remove team member?",text:"Are you sure you want to remove this team member?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(n){n&&c.deleteJobMember({jobmemberid:t,jobid:p.jobDetails.JobId},function(){p.jobDetails.LastUpdated=new Date;d()},function(n){l.warning("Sorry!","We weren't able to remove the team member at this time. Please try again later.");u.log(n)})})}function d(){c.getJobMembers({jobid:p.jobDetails.JobId},function(n){p.jobDetails.TeamMembers=n})}function si(n){l.swal({title:"Delete job?",text:"Are you sure you want to delete this job?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(t){t&&(p.deletingJob=!0,p.associateDocumentsRequest&&p.associateDocumentsRequest.$cancelRequest(),c.deleteJob({jobid:n},function(){o.go("app.jobsList")},function(n){l.warning("Sorry!","We weren't able to delete the job at this time. Please try again later.");u.log(n)}))})}function st(n){return("."+n).indexOf(".jpg")>0||("."+n).indexOf(".png")>0||("."+n).indexOf(".gif")>0}function it(n,t){var i=t?p.docCount:0;return angular.forEach(n,function(n){n.NoDocFlowForDocument||(i++,n.Children&&(i+=it(n.Children,!0)))}),i}function rt(n){if(n==undefined||n.length===0)return 0;var t=0;return n.forEach(function(n){t+=Number(n.GstAmount)+Number(n.Amount)}),t.toFixed(2)}function hi(t){l.swal({title:"Remove document?",text:"All associated documents will also be removed from this job.",type:"warning",showCancelButton:!0,confirmButtonText:"Remove"},function(r){r&&(u.log(n,"Removing document from job:",t),i.docFlow.splice(i.docFlow.indexOf(t),1),ht(t),ut(),g(),c.deleteCsrDocument({jobid:p.jobDetails.JobId,accountId:t.AccountId,documenttype:t.DocumentType,documentno:t.DocumentNo},function(n){n.success||(l.warning("Error removing document",n.msg+" Please contact CSR Connect support."),p.docFlow=null,p.loadingDocuments=!0,p.loadingInvoices=!0,b(p.jobDetails.JobId))},function(){l.warning("Error removing document","We were unable to remove the document from this job at this time. Please try again, or contact CSR Connect support.");p.docFlow=null;p.loadingDocuments=!0;p.loadingInvoices=!0;b(p.jobDetails.JobId)}))})}function ci(){p.addingDocument=!0}function li(t){if(u.log(n,"Docs from modal:",t),p.loadingDocuments=!0,p.loadingInvoices=!0,p.documentsMessage="Adding documents...",t&&t.length>0){var r=t.length,i=[];t.forEach(function(n){c.addCsrDocument({jobid:p.jobDetails.JobId},{DocumentNo:n.documentNo,DocumentType:n.documentType,AccountId:n.accountId},function(n){n.success||i.push({Data:n})},function(n){i.push({Data:n})}).$promise.finally(function(){r--;r<=0&&ai(i)})})}}function ai(t){u.log(n,"Errors during addDocuments: ",t);t.length>0&&(l.warning("There were errors adding some documents.","Please try again or contact CSR Connect support."),i.docFlow=null);b(p.jobDetails.JobId);p.addingDocument=!1}function b(t){u.log(n,"loadDocuments called with: ",t);p.loadingInvoices=!0;p.loadingDocuments=!0;p.documentsMessage="Loading documents...";p.loadingDocsRequest=c.getJobDocuments({jobid:t},function(t){t.success?(i.docFlow=t.data.JobHistory,ut(),p.jobDetails.JobInvoices=t.data.JobInvoices,g(),p.loadingInvoices=!1,p.loadingDocuments=!1,u.log(n,"loadDocuments returned with: ",t.data)):(p.errorCode=t.error,p.errorMsg=t.msg,i.docFlow=null,p.loadingInvoices=!1,p.loadingDocuments=!1)},function(){p.deletingJob!==!0&&(l.warning("Error retrieving documents","Please contact CSR Connect support."),i.docFlow=null,p.loadingDocuments=!1,p.loadingInvoices=!1)})}function vi(t,r){u.log(n,"associateDocuments called with: ",t);f.suggestedJob=!1;p.documentsMessage="Attaching documents...";var o=e(function(){p.documentsMessage="Still attaching documents..."},1e4);p.associateDocumentsRequest=c.associateDocumentsToJob({jobid:t},{address:r},function(t){t.success?(i.docFlow=t.data.JobHistory,ut(),p.csrTotal=rt(t.data.JobInvoices),p.jobDetails.JobInvoices=t.data.JobInvoices,g(),e.cancel(o),p.documentsMessage="Loading documents...",p.loadingInvoices=!1,p.loadingDocuments=!1,u.log(n,"associateDocuments returned with: ",p.jobDetails)):(p.errorCode=t.error,p.errorMsg=t.msg,p.docFlow=null,p.loadingInvoices=!1,p.loadingDocuments=!1)},function(){p.deletingJob!==!0&&(l.warning("Error attaching documents",'Please contact CSR Connect support or attach documents using the "Add Document" button.'),p.docFlow=null,p.loadingInvoices=!1,p.loadingDocuments=!1)})}function ut(){p.docCount=0;p.docCount=it(i.docFlow);p.docFlowPanel.docCount=p.docCount;p.docFlowPanel.canCollapse=p.docCount>5}function ht(n){if(n.DocumentType===Enums.documentType.invoices){var t=p.jobDetails.JobInvoices.find(function(t){return Number(t.DocumentNo)===Number(n.DocumentNo)});p.jobDetails.JobInvoices.splice(p.jobDetails.JobInvoices.indexOf(t),1)}n.Children!==undefined&&n.Children.length>0&&n.Children.forEach(function(n){ht(n)})}function g(){p.csrTotal=rt(p.jobDetails.JobInvoices);p.invoiceCount=p.jobDetails.JobInvoices==undefined?0:p.jobDetails.JobInvoices.length;p.invoiceErrors=p.jobDetails.JobInvoices.find(function(n){return n.RetrievedSuccessfully===!1})!==undefined}function yi(){p.breadcrumb={history:[{name:"Jobs",sref:"app.jobsList"}],currentPage:p.jobDetails.Name}}var p=this,nt=null,k,w;p.assigningJobMembers=!1;p.addingDocument=!1;p.attachmentUploading=!1;p.addAttachmentSuccessful=!1;p.attachmentFile=null;p.attachmentJobFileId=null;p.addingNote=!1;p.editingNote=!1;p.loadingDocuments=!0;p.loadingInvoices=!0;p.documentsMessage="Loading documents...";p.associateDocumentsRequest=null;p.loadingDocsRequest=null;p.deletingJob=!1;p.accessToken="?access_token="+h.token();p.isImage=st;i.docTypes=Object.keys(Enums.documentType);i.docFlow=null;i.docFlowShowRemoveFromJob=!0;p.docFlowPanel={};p.docCount=null;p.invoiceCount=null;p.csrTotal=null;p.beginManageJobMembers=ei;p.beginAddDocument=ci;p.addDocuments=li;p.getAttachmentUploadUrl=vt;p.gotAttachmentUploadUrl=yt;p.addAttachment=pt;p.addAttachmentSuccess=wt;p.addAttachmentError=bt;p.deleteAttachment=dt;p.beginAddNote=ii;p.toggleExpanded=ri;p.editNote=ni;p.cancelEditNote=ti;p.updateNote=gt;p.addNote=ui;p.deleteNote=fi;p.getJobMembers=d;p.deleteJobMember=oi;p.deleteJob=si;p.getDocumentCount=it;p.getCsrTotal=rt;i.getUiSref=at;p.isImage=st;p.payByJobEnabled=!1;i.removeDocumentFromJob=hi;i.jobDetails=null;y.set("documentLauncher",o.current.name,{$$search:location.hash});s.isReady()?ft():ct();i.$on("removeJobFromDoc",function(t,i){(u.log(n,"Received removeJobFromDoc event"),i.jobId===p.jobDetails.JobId)&&b(p.jobDetails.JobId)});i.$on("assignJobToDoc",function(t,i){(u.log(n,"Received assignJobToDoc event"),i.jobId===p.jobDetails.JobId)&&b(p.jobDetails.JobId)});k=null;w=null}angular.module("app.jobs").controller("JobDetailController",t);var n="[job-detail]";t.$inject=["JOBS_CONFIG","$scope","$location","$log","$stateParams","$timeout","$state","accountsService","authService","jobs","SweetAlert","$modal","$filter","$previousState"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a){function it(){y&&y();y=i.$on("accounts.dataReady",g)}function g(){u.log(n,"JobEditController init with: ",f.jobId);p=rt()?"nz":"au";v.placeSearch={options:{types:"address",country:p},result:""};f.jobId?ht(f.jobId):(v.isNew=!0,v.details={},v.details.Colour=t.grey,v.details.Country=p.toUpperCase(),w(),tt())}function rt(){var n=h.getCurrencies(!0);return n.length>0&&!isInArray("AUD",n)}function ut(){v.placeSearch.options.country=v.details.Country}function ft(){if(i.saving=!0,et(),u.log(n,"date filters",i.dateFilters),v.details.StartDate=i.dateFilters.fromDate,v.details.EndDate=i.dateFilters.toDate,i.form.$invalid){s.validate(i.form,!0);i.saving=!1;return}v.details.JobId?a.saveJob({jobid:v.details.JobId},v.details,function(t){u.log(n,"Job updated",t);t.success&&(c.add({id:"job-save-success",type:"success",message:"Job updated successully",expire:!0}),o.go("app.jobDetail",{jobId:t.data.JobId}))},function(n){n.ModelState&&(i.validationErrors=n.ModelState)}):a.createJob(v.details,function(t){u.log(n,"Job created",t);t.success&&(c.add({id:"job-save-success",type:"success",message:"Job created successully",expire:!0}),f.previousState?f.previousState==="modalDocumentView"?a.addCsrDocument({jobid:t.data.JobId},{DocumentNo:f.documentNo,DocumentType:f.documentType,AccountId:f.accountId},function(){nt()}):o.go(f.previousState,{jobId:t.data.JobId}):o.go("app.jobDetail",{jobId:t.data.JobId}),i.$emit("achievements.taskComplete",{taskId:2,taskName:"job"}))},function(n){n.ModelState&&(i.validationErrors=n.ModelState)});i.form.$setPristine()}function et(){var n=v.details.Address2,t=angular.isDefined(n)&&(n||"").trim().length>0;i.form.address2.$setValidity("required",t)}function ot(){i.form.$setPristine();v.details.JobId?o.go("app.jobDetail",{jobId:v.details.JobId}):f.previousState?f.previousState==="modalDocumentView"?nt():o.go(f.previousState):o.go("app.jobsList",{jobId:v.details.JobId})}function nt(){var n=f.accountId,t=f.documentNo,i=f.documentType,r=f.originalState;o.go("app.documents").then(function(){o.go("modalDocumentView",{accountId:n,documentNo:t,documentType:i,originalState:r})})}function st(){i.dateFilters.fromDate=new Date(moment(v.details.StartDate).format(t.dateFilterFormat));i.dateFilters.toDate=new Date(moment(v.details.EndDate).format(t.dateFilterFormat))}function ht(t){u.log(n,"loaddetails called with jobid:",t);a.getJob({jobid:t},function(t){t.success?(u.log(n,"loaddetails returned with: ",v.details),v.details=t.data,st(),w(),tt()):(v.errorMsg=t.msg,v.errorCode=t.error)})}function w(){(v.map=v.map||new google.maps.Map(document.getElementById("map-contact"),k),v.details.FullAddress)&&(u.log(n,"refreshmap called with:",v.details.FullAddress),v.geocoder=new google.maps.Geocoder,v.geocoder.geocode({address:v.details.FullAddress,bounds:d},function(t,i){i===google.maps.GeocoderStatus.OK?(u.log(n,"Geocoder",t),google.maps.event.addListenerOnce(v.map,"idle",function(){google.maps.event.trigger(v.map,"resize")}),v.marker=new google.maps.Marker({position:t[0].geometry.location,map:v.map}),e(function(){ct()})):e(function(){v.mapFailure=!0})}))}function ct(){google.maps.event.trigger(v.map,"resize");v.map.setCenter(v.marker.getPosition());v.map.setZoom(14)}function lt(t,i){if(i){var r=[];$.each(i.address_components,function(n,t){$.each(t.types,function(n,i){r[i]={long:t.long_name,short:t.short_name}})});u.log(n,"Populating address with result",r);at({Address2:i.name,City:i.vicinity,Country:r.country.short,State:r.administrative_area_level_1?r.administrative_area_level_1.short:null,PostCode:r.postal_code?r.postal_code.long:null})}}function at(n){n.State||delete n.State;n.Country||delete n.Country;angular.merge(v.details,n);v.details.FullAddress=vt(v.details);w()}function vt(n){return n.Address2+", "+n.City+" "+n.State+" "+n.PostCode+" "+n.Country}function tt(){var n={history:[{name:"Jobs",sref:"app.jobsList"}],currentPage:"Create new job"};v.isNew||(n.history.push({name:v.details.Name,sref:'app.jobDetail({jobId: "'+v.details.JobId+'"})'}),n.currentPage="Edit");v.breadcrumb=n}var v=this,y,p,b,k,d;v.isNew=!1;v.initFinished=!1;v.map=null;v.mapFailure=!1;y=null;v.colours=[t.grey,t.blue,t.green,t.yellow,t.orange,t.red,t.purple,t.pink];b={toDate:new Date(moment().add(3,"M").format(t.dateFilterFormat)),fromDate:new Date(moment().format(t.dateFilterFormat))};i.dateFilters=angular.copy(b);i.saving=!1;i.jobImageUploading=!1;i.countrySelected=ut;i.$on("placeChanged",lt);k={zoom:3,mapTypeControl:!1,center:new google.maps.LatLng(-33.85219,151.21067)};d=new google.maps.LatLngBounds(new google.maps.LatLng(-49.95122,103.183594),new google.maps.LatLng(-3.740675,179.999999));v.save=ft;v.cancel=ot;v.details=null;h.isReady()?g():it();i.jobImageUpload=function(){i.jobImageUploading=!0};i.jobImageUploadGetUrl=function(n){return a.getImageUploadUrl({filename:n.name})};i.jobImageUploadSuccess=function(t){u.log(n,"jobImageUploadSuccess:",t);v.details.ImageName=t.config.url.split("?")[0];u.log(n,"ImageUrl:",v.details.ImageName);i.jobImageUploading=!1};i.jobImageUploadError=function(){c.add({id:"avatar",type:"error",message:"Sorry! We are currently unable to update your job image",expire:!0});i.jobImageUploading=!1};i.emptyCalendarPreset=[]}angular.module("app.jobs").controller("JobEditController",t);var n="[job-edit-create]";t.$inject=["JOBS_CONFIG","$scope","$location","$log","$stateParams","$timeout","$state","$validation","accountsService","notificationService","authService","jobs"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l){function y(){u.log(n,"JobDetailController init with: ",f.jobId);v(f.jobId)}function v(t){i.addingTeamMember=!1;u.log(n,"loadJobMemberManagementViewModel called with: ",t);c.getJobMemberManagementModel({jobid:t},function(t){i.loadingModel=!1;angular.forEach(t.ExistingTeamMembers,function(n){n.ReadOnly=!n.Update});a.vm=t;u.log(n,"loadJobMemberManagementViewModel returned with: ",a.vm)},function(t){u.log(n,t)})}function p(){i.addingTeamMember=!1;a.newUser.Id="";a.newUser.UserName=""}function w(){i.addingTeamMember=!0}function b(n,t){n.preventDefault();l.swal({title:"Remove team member?",text:"Are you sure you want to remove this team member?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(n){n&&c.deleteJobMember({jobmemberid:t,jobid:a.vm.JobId},function(){v(a.vm.JobId)},function(n){l.warning("Sorry!","We weren't able to remove the team member at this time. Please try again later.");u.log(n)})})}function k(n){c.updateJobMember({jobid:a.vm.JobId,jobmemberid:n.JobMemberId},{PermissionToRead:n.Read,PermissionToUpdate:!n.ReadOnly},function(){v(a.vm.JobId)},function(n){v(a.vm.JobId);l.warning("Sorry!","We weren't able to assign the team member at this time. Please try again later.");u.log(n)})}function d(){var n=a.newUser.Id===""?null:a.newUser.Id,t=a.newUser.UserName===""?null:a.newUser.UserName;a.newUser.Id="";a.newUser.UserName="";c.assignJobMember({jobid:a.vm.JobId},{UserName:t,UserId:n,Read:!0,Update:!a.newUser.readonly},function(n){n.success?v(a.vm.JobId):(l.warning("Unable to add team member",n.msg),u.log(n.msg))},function(n){l.warning("Sorry!","We weren't able to assign the team member at this time. Please try again later.");u.log(n)})}var a=this;i.addingTeamMember=!1;i.loadingModel=!0;i.accessToken="?access_token="+h.token();i.beginAddingJobMember=w;i.cancelAddingJobMember=p;i.addJobMember=d;i.updateJobMember=k;i.removeJobMember=b;a.vm=null;a.newUser={};a.newUser.UserName="";a.newUser.Id="";a.newUser.readonly=!1;y()}angular.module("app.jobs").controller("JobMemberManagementController",t);var n="[job-member-management]";t.$inject=["JOBS_CONFIG","$scope","$location","$log","$stateParams","$timeout","$state","accountsService","authService","jobs","SweetAlert"]}(),function(){"use strict";angular.module("app.jobs").constant("JOBS_CONFIG",{jobsPermissionType:"Customer/Jobs",dateFilterFormat:"YYYY-MM-DD",grey:"37474f",blue:"1565c0",green:"2e7d32",yellow:"f9a825",orange:"ef6c00",red:"c62828",purple:"6a1b9a",pink:"ad1457",opacity:.8,minimalViewPageSize:7})}(),function(){"use strict";function t(t,i,r,u,f,e,o,s){function v(){f(l)}function p(){u.log(n,"create new job")}function w(t){u.log(n,"load job",t)}function l(r){i.layout.busy=!0;var f=angular.copy(r||i.filters);f.keyword||delete f.keyword;f.fromDate=f.fromDate?moment(f.fromDate).format("YYYY-MM-DD"):null;f.toDate=f.toDate?moment(f.toDate).format("YYYY-MM-DD"):null;f.perPage=i.layout.size;f.page=i.layout.page||1;f.offset=y[f.page-1];c!=null&&(c.$cancelRequest(),u.log(n,"Cancelling existing query"));u.log(n,"Querying jobs:",f);c=s.query(f,function(r){u.log(n,"search finished",r);y[f.page]=r.Progress;u.log(n,"Update layout :",i.layout);i.layout.updatePage(f.page,r.TotalJobs);h.items=angular.isDefined(r.Results)?r.Results:null;i.layout.busy=!1;i.layout.initialised=!0;angular.forEach(h.items,function(n){n.Colour=b(n.Colour||t.grey,.85)});c=null;i.hasErrors=!1},function(n){i.layout.initialised=!0;i.layout.busy=!1;h.items=null;i.isXSSError=n.status===400&&n.data.ModelState.keyword.includes("XSS");i.hasErrors=!0})}function b(n,t){n=n.replace("#","");var i=parseInt(n.substring(0,2),16),r=parseInt(n.substring(2,4),16),u=parseInt(n.substring(4,6),16);return"rgba("+i+","+r+","+u+","+t+")"}function k(){l(i.filters)}var a={keyword:null,fromDate:new Date(moment().subtract(3,"M").format("YYYY-MM-DD")),toDate:new Date(moment().add(1,"month").format("YYYY-MM-DD")),sort:Enums.sortOrder.desc.toString(),sortBy:Enums.jobSortType.date.toString()},y=[{}],c,h;i.filters=angular.copy(a);i.retry=k;i.hasErrors=!1;i.isXSSError=!1;i.clearFilters=function(){i.filters=angular.copy(a);r.$$search={};r.$$compose()};i.layoutChangeCallback=function(){l()};c=null;i.$on("$locationChangeSuccess",function(){if(r.path()==e.current.url&&i.layout.initialised){var n=r.search();Object.keys(n).length?angular.forEach(n,function(n,t){i.$broadcast("filters.init",t)}):i.filters=angular.copy(a);i.layout.page=1;f(l)}});h=this;h.sortOrder=["ascending","descending"];h.sortType=Object.keys(Enums.jobSortType);h.items=null;h.search=l;h.createNew=p;h.loadJob=w;o.isReady()?v():i.$on("accounts.dataReady",v);i.$on("accounts.changed",function(){u.log(n,"Reinitialising after account change");v()});h.colours=[{colour:t.grey,gradient:"jobs-gradient-grey"},{colour:t.blue,gradient:"jobs-gradient-blue"},{colour:t.green,gradient:"jobs-gradient-green"},{colour:t.yellow,gradient:"jobs-gradient-yellow"},{colour:t.orange,gradient:"jobs-gradient-orange"},{colour:t.red,gradient:"jobs-gradient-red"},{colour:t.purple,gradient:"jobs-gradient-purple"},{colour:t.violet,gradient:"jobs-gradient-violet"}]}angular.module("app.jobs").controller("JobsController",t);var n="[jobs]";t.$inject=["JOBS_CONFIG","$scope","$location","$log","$timeout","$state","accountsService","jobs"]}(),function(){"use strict";function n(n){var t="/api/jobs";return n(t,null,{query:{cancellable:!0,url:t},getJob:{method:"GET",url:t+"/:jobid"},getJobDocuments:{cancellable:!0,method:"GET",url:t+"/documents/:jobid"},saveJob:{method:"POST",url:t+"/:jobid"},createJob:{method:"POST",url:t},createJobFromSuggestion:{method:"POST",url:t+"/suggested"},deleteJob:{method:"DELETE",url:t+"/:jobid"},getAttachments:{method:"GET",url:t+"/:jobid/attachments",isArray:!0},deleteAttachment:{method:"DELETE",url:t+"/:jobid/attachments/:jobattachmentid"},getAttachmentUploadUrl:{method:"POST",url:t+"/:jobid/attachments/attachmentUrl"},completeAttachmentUpload:{method:"POST",url:t+"/:jobid/attachments/attachmentUploaded"},addNote:{method:"POST",url:t+"/:jobid/notes",headers:{"Content-Type":"application/json; charset=utf-8"}},updateNote:{method:"POST",url:t+"/:jobid/notes/:jobnoteid",headers:{"Content-Type":"application/json; charset=utf-8"}},getNotes:{method:"GET",url:t+"/:jobid/notes",isArray:!0},deleteNote:{method:"DELETE",url:t+"/:jobid/notes/:noteid"},getJobMembers:{method:"GET",url:t+"/:jobid/teammembers",isArray:!0},deleteJobMember:{method:"DELETE",url:t+"/:jobid/teammembers/:jobmemberid"},getJobMemberManagementModel:{method:"GET",url:t+"/:jobid/teammembersmanagement"},assignJobMember:{method:"POST",url:t+"/:jobid/teammembers",headers:{"Content-Type":"application/json; charset=utf-8"}},updateJobMember:{method:"POST",url:t+"/:jobid/teammembers/:jobmemberid",headers:{"Content-Type":"application/json; charset=utf-8"}},addCsrDocument:{method:"POST",url:t+"/:jobid/documents",headers:{"Content-Type":"application/json; charset=utf-8"}},deleteCsrDocument:{method:"DELETE",url:t+"/:jobid/documents/:accountId/:documenttype/:documentno"},suggestedJobs:{cancellable:!0,method:"GET",url:t+"/suggested"},associateDocumentsToJob:{cancellable:!0,method:"POST",url:t+"/:jobid/associatedocuments",headers:{"Content-Type":"application/json; charset=utf-8"}},getImageUploadUrl:{method:"POST",url:t+"/imageUrl"}})}angular.module("app.jobs").factory("jobs",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,i){n.configureStates(t(i))}function t(n){return[{state:"app.jobsList",config:{url:"/jobs",pageTitle:"Jobs",templateUrl:"jobs/jobs",access:n.jobsPermissionType,reloadOnSearch:!1,scroller:!0}},{state:"app.jobSample",config:{url:"/jobs/help/sample",pageTitle:"Sample job",templateUrl:"jobs/jobs/SampleJob",access:n.jobsPermissionType}},{state:"app.jobCreate",config:{url:"/jobs/create",pageTitle:"Create new job",templateUrl:"jobs/jobs/edit",access:n.jobsPermissionType,params:{previousState:null,accountId:null,documentNo:null,documentType:null,originalState:null}}},{state:"app.jobSuggestions",config:{url:"/jobs/suggestions",pageTitle:"Suggested jobs",templateUrl:"suggestedJobsView.html",access:n.jobsPermissionType}},{state:"app.jobDetail",config:{url:"/jobs/:jobId?:suggestedJob",reloadOnSearch:!1,pageTitle:"Job Detail",templateUrl:"jobs/jobs/detail",access:n.jobsPermissionType}},{state:"app.jobEdit",config:{url:"/jobs/edit/:jobId",pageTitle:"Edit job",templateUrl:"jobs/jobs/edit",access:n.jobsPermissionType}}]}angular.module("app.jobs").run(n);n.$inject=["routerHelper","JOBS_CONFIG"]}(),function(){"use strict";function n(n,t,i,r){function s(n,t){n?e(n,!1,t):f()}function f(){if(r.canDo("r","Customer/Jobs")){u.loadingAvailableJobs=!0;u.availableJobs=null;var t={sortBy:Enums.jobSortType.name.toString(),perPage:100,excludeReadOnly:!0};i.get(t,function(t){u.loadingAvailableJobs=!1;u.availableJobs=t.Results;n.$broadcast("job.available.changed")})}}function h(){u.job=null;u.jobId=null;u.selectedJobId=null;t.jobId=null;f();o()}function e(n,t,i){r.canDo("r","Customer/Jobs")&&u.jobId!==(n||null)&&(u.jobId=n,i||o(),n?c(n,t,i):(u.jobId=null,u.job=null))}function c(n,t,r){u.loadingJobDetails=!0;u.job=null;i.getJob({jobid:n},function(i){u.loadingJobDetails=!1;i.success&&(i.data.CanUpdate?(u.job=i.data,u.jobId=n):(u.job=null,u.jobId=null),r||l(t))})}function o(){n.$broadcast("job.id.changed",{jobId:u.jobId});u.onJobIdChanged!=null&&u.onJobIdChanged()}function l(t){if(n.$broadcast("job.details.loaded",{jobId:u.jobId,queryUpdateDetails:t}),u.onJobDetailsLoaded!=null)u.onJobDetailsLoaded(t)}var u={jobId:null,job:null,init:s,clearJob:h,setJob:e,onJobIdChanged:null,onJobDetailsLoaded:null,loadingAvailableJobs:!1,loadingJobDetails:!1};return n.$on("$stateChangeStart",function(){u.job=null;u.jobId=null}),u}angular.module("app.jobs").factory("jobData",n);n.$inject=["$rootScope","$stateParams","jobs","authService"]}(),function(n){"use strict";function i(){return{link:r,restrict:"A",isolate:!1,scope:{},controller:t,controllerAs:"jh",templateUrl:"jobHeader.html"}}function r(n,t,i){n.jh.heading=i.heading||"Job";n.jh.showNew=i.showNew;n.jh.subHeading=i.subheading;n.jh.shouldQueryUpdateDetails="queryUpdateDetails"in i;n.jh.detailsOnly="detailsOnly"in i;n.jh.showDocumentsLink="showDocumentsLink"in i;n.jh.showDocumentsLink&&(n.jh.documentsLinkLabel="documentsLinkLabel"in i?i.documentsLinkLabel:"Link Documents");n.jh.docType="docType"in i?Enums.documentType[i.docType]:0}function t(n,t){function r(){n.go("app.jobCreate",{previousState:n.current.name,accountId:n.params.accountId,documentNo:n.params.documentNo,documentType:n.params.documentType})}function u(n,i,r){t.setJob(n,i,r)}var i=this;i.jd=t;i.subHeading="";i.selectedJobId=null;i.clearJob=function(){i.selectedJobId=null;i.jd.clearJob()};i.createJob=r;i.setJob=u;i.Enums=Enums;i.orderType=keyFlip(i.Enums.orderType)}n.module("app.jobs").directive("jobHeader",i);t.$inject=["$state","jobData"]}(angular),function(n){"use strict";function i(){return{link:r,restrict:"A",isolate:!1,scope:{},controller:t,controllerAs:"jd",templateUrl:"jobsDropdown.html"}}function r(n,t,i){t.addClass("form-group");n.jd.title=i.title}function t(n,t,i,r,u,f,e){function s(){o.job=e.job;o.title=o.job.Name}function h(){o.availableJobs=e.availableJobs}var o=this;o.title="";o.jobData=e;o.selectedJobId=null;o.availableJobs=null;o.job=null;o.clearJob=e.clearJob;o.setJob=e.setJob;o.Enums=Enums;o.orderType=keyFlip(o.Enums.orderType);n.$on("job.details.loaded",s);n.$on("job.available.changed",h);e.init()}n.module("app.jobs").directive("jobsDropdown",i);t.$inject=["$rootScope","$timeout","$stateParams","$scope","$log","jobs","jobData"]}(angular),function(n){function r(){return{restrict:"E",isolate:!0,scope:{minimalView:"@"},controller:i,controllerAs:"suggestedJobs",templateUrl:"suggestedJobs.html",bindToController:!0}}function i(i,r,u,f,e,o,s,h,c){function y(){u(v)}function b(n){if(w!==!0){l.busyMessage="Creating Job...";e.log(t,"Creating job from suggestion:",n);l.creatingJob=!0;r.layout.busy=!0;var u={};u.Name=n.SuggestedName.length>50?n.SuggestedName.substring(0,49):n.SuggestedName;u.Address1=n.Address1;u.Address2=n.Address2;u.City=n.City;u.State=n.State;u.PostCode=n.PostCode;u.Country=n.Country;u.Colour=n.Colour;u.DocumentNumber=n.DocumentNumber;u.AccountId=n.AccountId;u.StartDate=new Date(moment().format(i.dateFilterFormat));u.EndDate=new Date(moment().add(3,"M").format(i.dateFilterFormat));e.log(t,"Job creation object: ",u);h.createJobFromSuggestion(u,function(n){e.log(t,"Job created: ",n);n.success&&(c.add({id:"job-save-success",type:"success",message:"Job created successully",expire:!0}),f.go("app.jobDetail",{jobId:n.data.JobId,suggestedJob:1}),r.$emit("achievements.taskComplete",{taskId:2,taskName:"job"}))},function(n){e.log(t,"Failed to create job: ",n);n.ModelState&&(r.validationErrors=n.ModelState)})}}function v(u){r.layout.busy=!0;var f=n.copy(u||r.filters);f.keyword=l.keyword==null||l.keyword.trim()===""?null:l.keyword.trim();f.perPage=l.minimalView?i.minimalViewPageSize:r.layout.size;f.page=r.layout.page||1;f.offset=p[f.page-1];a!=null&&(a.$cancelRequest(),e.log(t,"Cancelling existing query"));e.log(t,"Querying suggested jobs:",f);a=h.suggestedJobs(f,function(i){e.log(t,"search finished",i);p[f.page]=i.Progress;e.log(t,"Update layout: ",r.layout);r.layout.updatePage(f.page,i.TotalSuggestedJobs);l.suggestedJobs=n.isDefined(i.Results)?i.Results:null;r.layout.busy=!1;r.layout.initialised=!0;a=null;r.hasErrors=!1},function(n){n.status!=-1&&(r.layout.initialised=!0,r.layout.busy=!1,l.suggestedJobs=null,r.isXSSErrror=n.status===400&&n.data.ModelState.keyword.includes("XSS"),r.hasErrors=!0)})}function k(){v()}var l=this;r.filters=n.copy({keyword:null});r.layoutChangeCallback=function(){v()};var a=null,p=[{}],w=!1;l.suggestedJobs=null;l.busyMessage="Loading suggested jobs...";l.search=v;l.retry=k;l.createJobFromSuggestion=b;s.isReady()?y():r.$on("accounts.dataReady",y);r.$on("accounts.changed",function(){e.log(t,"Reinitialising after account change");y()})}n.module("app.jobs").directive("suggestedJobs",r);var t="[suggested-jobs]";i.$inject=["JOBS_CONFIG","$scope","$timeout","$state","$log","$modal","accountsService","jobs","notificationService"]}(angular),function(){"use strict";function n(n){var t="/api/leads";return n(t,null,{query:{isArray:!1},getLead:{method:"GET",url:t+"/:leadId"},updateStatus:{method:"POST",url:t+"/updateStatus"},getNotes:{method:"GET",isArray:!0,url:t+"/:leadId/notes"},addNote:{method:"POST",url:t+"/addNote"},deleteNote:{method:"DELETE",url:t+"/:leadId/notes/:noteId"},getAttachments:{method:"GET",isArray:!0,url:t+"/:leadId/attachments"},deleteAttachment:{method:"DELETE",url:t+"/:leadId/attachments/:attachmentId"},getDashPanel:{method:"GET",url:t+"/dash",cancellable:!0}})}angular.module("app.leads").factory("leads",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.leadsIndex",config:{url:"/leads",pageTitle:"Job leads",templateUrl:"leads/leads",access:"Customer/Leads",reloadOnSearch:!1}},{state:"app.leadDetail",config:{url:"/leads/:leadId",pageTitle:"Job lead",templateUrl:"leads/leads/detail",access:"Customer/Leads"}}]}angular.module("app.leads").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c){function v(){t.log(n,"Grabbing lead",r.leadId);s.getLead({leadId:r.leadId},function(r){t.log(n,"Got lead",r);l.details=r.details;i.viewUrlPostFix="?stamp="+Date.now()+"&access_token="+h.token()+"&accountId="+e.getActive().join(",");i.imageUrlPostFix="?access_token="+h.token()+"&accountId="+e.getActive().join(",");i.addAttachmentUrl="/api/leads/"+l.details.LeadId+"/attachments?stamp="+Date.now()+"&access_token="+h.token();l.account=first(e.get([l.details.AccountId]));tt();y();p()});$(window).resize(function(){l.marker&&w()})}function nt(){a&&a();a=i.$on("accounts.dataReady",v)}function tt(){l.geocoder=new google.maps.Geocoder;l.geocoder.geocode({address:l.details.Address,bounds:g},function(i,r){r===google.maps.GeocoderStatus.OK?(t.log(n,"Geocoder",i),l.map=l.map||new google.maps.Map(document.getElementById("map-contact"),d),google.maps.event.addListenerOnce(l.map,"idle",function(){google.maps.event.trigger(l.map,"resize")}),l.marker=new google.maps.Marker({position:i[0].geometry.location,map:l.map}),f(function(){w()})):f(function(){l.mapFailure=!0})})}function it(n){switch(n){case null:return"Open Leads";case"Available":return"Available";case"OnHold":return"On hold";case"Quoted":return"Quoted";case"QuotedPriceOnly":return"Quoted - price only";case"Won":return"Won";case"Lost":return"Lost";case"Declined":return"Declined";case"All":return"All";default:return n}}function rt(n){switch(n){case null:return"label-neutral";case"Available":return"label-fresh";case"OnHold":return"label-info";case"Quoted":return"label-warning";case"QuotedPriceOnly":return"label-highlight";case"Won":return"label-success";case"Lost":return"label-danger";case"Declined":return"label-default";case"All":return"";default:return n}}function w(){google.maps.event.trigger(l.map,"resize");l.map.setCenter(l.marker.getPosition())}function ut(n,t){n.preventDefault();ft(l.details,t)}function ft(n,t){var i=u.open({templateUrl:"leadStatus.html",controller:"LeadsStatusController",resolve:{lead:function(){return n},status:function(){return t}}});i.result.catch(function(){c.removeAll()})}function et(n){n.preventDefault();s.addNote({leadId:l.details.LeadId,note:i.userNote},function(){p();i.userNote="";i.form.$setPristine()},function(){o.warning("Sorry!","We weren't able to add a note to the lead at this time. Please try again later.")})}function y(){h.canDo("r","Customer/Leads/Attachments")&&(i.loadingAttachments=!0,t.log(n,"Loading attachments",l.details.LeadId),s.getAttachments({leadId:l.details.LeadId},function(n){l.attachments=n;angular.forEach(l.attachments,function(n){n.imageSrc="/api/leads/"+l.details.LeadId+"/attachments/"+n.Id+i.imageUrlPostFix;n.fileTypeInitials=k(n.FileType)});i.loadingAttachments=!1},function(){o.warning("Sorry!","We weren't able to load the attachments at this time. Please try again later.");i.loadingAttachments=!1}))}function p(){i.loadingNotes=!0;t.log(n,"Loading notes",l.details.LeadId);s.getNotes({leadId:l.details.LeadId},function(n){l.notes=n;i.loadingNotes=!1},function(){o.warning("Sorry!","We weren't able to load the notes at this time. Please try again later.");i.loadingNotes=!1})}function ot(i,r){t.log(n,"Deleting attachments",{attachmentId:r,leadId:l.details.LeadId});i.preventDefault();o.swal({title:"Delete attachment?",text:"Are you sure you want to delete this attachment?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(n){n&&s.deleteAttachment({attachmentId:r,leadId:l.details.LeadId},function(){y()},function(){o.warning("Sorry!","We weren't able to delete the attachment at this time. Please try again later.")})})}function st(n,t){n.preventDefault();o.swal({title:"Delete note?",text:"Are you sure you want to delete this note?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete"},function(n){n&&s.deleteNote({noteId:t,leadId:l.details.LeadId},function(){p()},function(){o.warning("Sorry!","We weren't able to delete the note at this time. Please try again later.")})})}function b(r){t.log(n,"Uploading",r);i.attachmentUploading=!0}function ht(r){t.log(n,"Adding attachment success",r);i.attachmentUploading=!1;y()}function ct(r){t.log(n,"Adding attachment error",r);i.attachmentUploading=!1;r.data?o.warning("Sorry!","We weren't able to upload the attachment at this time.\n\n"+r.data+"\n\n Please try again."):o.warning("Sorry!","We weren't able to upload the attachment at this time. Please try again later.")}function lt(n){return("."+n).indexOf(".jpg")>0||n.indexOf(".png")>0||n.indexOf(".gif")>0}function k(n){return n.split("").join(" ")}var l=this,a=null,d={zoom:14,mapTypeControl:!1,center:new google.maps.LatLng(-33.85219,151.21067)},g=new google.maps.LatLngBounds(new google.maps.LatLng(-49.95122,103.183594),new google.maps.LatLng(-3.740675,179.999999));i.updateStatus=ut;i.addNote=et;i.deleteNote=st;i.addAttachment=b;i.deleteAttachment=ot;i.isImage=lt;i.fileTypeInitials=k;i.getStatusText=it;i.getStatusLabel=rt;i.attachmentUploading=!1;i.addAttachmentUrl="/api/leads/attachments?stamp="+Date.now()+"&access_token="+h.token();i.addAttachmentSuccessful=!1;i.addAttachment=b;i.addAttachmentSuccess=ht;i.addAttachmentError=ct;l.details=null;l.account=null;l.map=null;l.mapFailure=!1;l.Note="";i.userNote="";i.loadingAttachments=!0;i.loadingNotes=!0;l.init=v;e.isReady()?v():nt()}angular.module("app.leads").controller("LeadsDetailController",t);var n="[Leads]";t.$inject=["$log","$scope","$stateParams","$modal","$timeout","accountsService","SweetAlert","leads","authService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e){function a(){l()}function v(){e(function(){t.list.busy||t.list.search()})}function y(n){t.filters.dateRange.start=n.start;t.filters.dateRange.end=n.end;t.list.search()}function p(){t.list.config.order.length===0&&c();t.filters.followUp?(t.list.config.filters.From.value=null,t.list.config.filters.To.value=null):(t.list.config.filters.From.value=moment(t.filters.dateRange.start).format("YYYY-MM-DD"),t.list.config.filters.To.value=moment(t.filters.dateRange.end).add(1,"day").format("YYYY-MM-DD"));t.list.config.filters.Caller.value=t.filters.keyword;t.list.config.filters.City.value=t.filters.keyword;t.list.config.filters.FollowUp.value=t.filters.followUp===!0?"true":null;t.filters.status==null?(t.list.config.filters.Status.value="'Available','OnHold','Quoted'",i.search("status",null)):t.filters.status==="All"?(t.list.config.filters.Status.value=null,i.search("status","All")):(t.list.config.filters.Status.value="'"+t.filters.status+"'",i.search("status",t.filters.status));t.updatedOn=new Date}function w(){c();s&&t.list.search();s=!0;t.tableHeaders=t.filters.followUp?h:o}function c(){t.list.config.order=t.filters.followUp?[{field:"FollowUpDate",orderBy:"asc"}]:[{field:"CreatedOn",orderBy:"desc"}]}function b(n,t,i){n.preventDefault();g(t,i)}function l(){f.getDashPanel({},function(n){t.totalFollowUps=n.TotalFollowUps})}function k(n){switch(n){case null:return"Open Leads";case"Available":return"Available";case"OnHold":return"On hold";case"Quoted":return"Quoted";case"QuotedPriceOnly":return"Quoted - price only";case"Won":return"Won";case"Lost":return"Lost";case"Declined":return"Declined";case"All":return"Any Status";default:return n}}function d(n){switch(n){case null:return"label-neutral";case"Available":return"label-fresh";case"OnHold":return"label-info";case"Quoted":return"label-warning";case"QuotedPriceOnly":return"label-highlight";case"Won":return"label-success";case"Lost":return"label-danger";case"Declined":return"label-default";case"All":return"";default:return n}}function g(n,i){var u=r.open({templateUrl:"leadStatus.html",controller:"LeadsStatusController",resolve:{lead:function(){return n},status:function(){return i}}});u.result.catch(function(){l();t.list.search()})}var s=!1,o,h;t.updateStatus=b;t.getStatusText=k;t.getStatusLabel=d;t.updateDateFilter=y;t.search=v;t.updatedOn=new Date;t.totalFollowUps=0;t.filters={keyword:null,dateRange:{start:new Date(moment().subtract(6,"M").format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD"))},status:i.$$search.status||null,followUp:i.$$search.followUp==="true"||null,orderby:""};t.$on("list.search",p);t.$watch("filters.followUp",w);t.listViewConfig={resourceName:"leads",itemName:"lead",filters:[{field:"CreatedOn",alias:"From",operator:">=",value:moment(t.filters.dateRange.start).format()},{field:"CreatedOn",alias:"To",operator:"<",value:moment(t.filters.dateRange.end).format()},{field:"FollowUp",operator:"=",value:t.filters.followUp},{field:"Caller",operator:"like",value:t.filters.keyword,condition:"or",nested:"start"},{field:"City",operator:"like",value:t.filters.keyword,nested:"end"},{field:"Status",operator:"in",value:t.filters.status,condition:"and"}],count:!0};o=[{columnName:"Caller",displayName:"Customer"},{columnName:"Status"},{columnName:"City"},{columnName:"CreatedOn",displayName:"Created Date"},{columnName:"ServiceType",displayName:"Service Type"},{columnName:"",displayName:"Product Type"},{columnName:"LeadValue",displayName:"Lead Value"},{columnName:"",displayName:"",className:"tf-right",authKey:"Customer/Leads",auth:"u"}];h=[{columnName:"Caller",displayName:"Customer"},{columnName:"Status"},{columnName:"City"},{columnName:"FollowUpDate",displayName:"Follow Up Date"},{columnName:"ServiceType",displayName:"Service Type"},{columnName:"",displayName:"Product Type"},{columnName:"LeadValue",displayName:"Lead Value"},{columnName:"",displayName:"",className:"tf-right",authKey:"Customer/Leads",auth:"u"}];t.tableHeaders=o;a()}angular.module("app.leads").controller("LeadsIndexController",n);n.$inject=["$log","$scope","$location","$modal","SweetAlert","leads","$timeout"]}(),function(){"use strict";function n(n,t,i,r){var u=this;u.stats=null;u.followUpLeads=null;u.totalFollowUps=0;t.init=function(){var n=i.getDashPanel();n.$promise.then(function(n){u.stats=n.Stats;u.followUpLeads=n.FollowUpLeads;t.refreshLayout&&t.refreshLayout();u.totalFollowUps=n.TotalFollowUps});r.register(n)}}angular.module("app.leads").controller("LeadsPanelController",n);n.$inject=["$log","$scope","leads","resourceCancellingService"]}(),function(){"use strict";function n(n,t,i,r,u,f){function h(t){var i=t.followUpDate;n.$apply(function(){e(i)})}function c(t){var i=t.dateQuoted;n.$apply(function(){o(i)})}function e(t){return t&&(n.statusUpdate.followUpDate=t),n.isFollowUpDateValid=n.statusUpdate.followUp?!moment(n.statusUpdate.followUpDate).isBefore(n.minDate,"day"):!0,n.isFollowUpDateValid}function o(t){return t&&(n.statusUpdate.dateQuoted=t),n.isQuotedDateValid=s()?!moment(n.statusUpdate.dateQuoted).isAfter(n.maxDate,"day"):!0,n.isQuotedDateValid}function l(n){switch(n){case null:return"Open Leads";case"Available":return"Available";case"OnHold":return"On hold";case"Quoted":return"Quoted";case"QuotedPriceOnly":return"Quoted - price only";case"Won":return"Won";case"Lost":return"Lost";case"Declined":return"Declined";case"All":return"All";default:return n}}function a(n){switch(n){case null:return"label-neutral";case"Available":return"label-fresh";case"OnHold":return"label-info";case"Quoted":return"label-warning";case"QuotedPriceOnly":return"label-highlight";case"Won":return"label-success";case"Lost":return"label-danger";case"Declined":return"label-default";case"All":return"";default:return n}}function v(n){n.preventDefault();t.dismiss("cancel")}function s(){return n.quotedDateStatuses.indexOf(n.statusUpdate.status)>-1}function y(){if(n.form.$valid&&o()&&e()){n.isBusy=!0;var c=s()?moment(n.statusUpdate.dateQuoted).format("YYYY/MM/DD"):null,l=n.statusUpdate.followUp?moment(n.statusUpdate.followUpDate).format("YYYY/MM/DD"):null,h=n.statusUpdate.status==="Declined",a=h&&n.statusUpdate.declinedReason==="Other",r=n.statusUpdate.status==="Lost",v=r&&n.statusUpdate.lostReason==="Other",y=r&&n.statusUpdate.lostReason==="Chose other supplier";f.updateStatus({leadId:i.LeadId,status:n.statusUpdate.status,dateQuoted:c,leadValue:n.statusUpdate.leadValue,followUp:n.statusUpdate.followUp,followUpDate:l,declinedReason:h?n.statusUpdate.declinedReason:null,declinedReasonOther:a?n.statusUpdate.declinedReasonOther:null,lostReason:r?n.statusUpdate.lostReason:null,lostReasonOther:v?n.statusUpdate.lostReasonOther:null,lostToSupplier:y?n.statusUpdate.lostToSupplier:null},function(n){angular.extend(i,{},n.details);t.dismiss("cancel")},function(){u.warning("Sorry!","We weren't able to update the lead status at this time. Please try again later.");n.isBusy=!1})}}n.lead=i;n.isBusy=!1;n.maxDate=new Date(moment());n.minDate=new Date(moment());n.quotedDateStatuses=["Quoted","QuotedPriceOnly","Won","Lost"];n.statusUpdate={status:(r||"").length>0?r:i.Status,dateQuoted:i.DateQuoted==null?new Date(moment()):new Date(i.DateQuoted),leadValue:i.LeadValue,followUp:i.FollowUp,followUpDate:i.FollowUpDate==null?new Date(moment()):new Date(i.FollowUpDate),noFollowUp:!i.FollowUp,declinedReason:i.DeclinedReason,declinedReasonOther:i.DeclinedReasonOther,lostReason:i.LostReason,lostReasonOther:i.LostReasonOther,lostToSupplier:i.LostToSupplier};n.isQuotedDateValid=!0;n.isFollowUpDateValid=!0;n.cancel=v;n.update=y;n.getStatusText=l;n.getStatusLabel=a;n.onQuotedDateChange=c;n.onFollowUpDateChange=h}angular.module("app.leads").controller("LeadsStatusController",n);n.$inject=["$scope","$modalInstance","lead","status","SweetAlert","leads"]}(),function(n){"use strict";function t(t,i,r,u,f){function c(){return r.setPageTitle("Invoices - "+e.accountName+" - "+e.sbuName)}function s(n){e.showEmptyState=!0;e.emptyStateUrl=n}function l(){var n=e.documents&&e.documents.length;return n&&e.documents[0].DocumentDate}var o=f.params.linkId,h="app.liteDocs",e=this;e.loadingMessage="Loading invoices...";e.loading=!0;e.hasError=null;e.linkId=o;e.invoiceListDetailsLoaded=!1;e.isExpired=!1;e.showEmptyState=!0;e.emptyStateUrl=null;e.origin="liteInvoiceList";e.loadingMarketing=!1;e.hasCustomMarketing=!1;e.customMarketing=undefined;u.documents.get({docsId:o}).$promise.then(function(t){e.hasError=!1;e.accountNumber=t.AccountNumber;e.sbuCode=t.SbuCode;e.sbuName=i("sbuName")(t.SbuCode);e.accountName=t.AccountName;e.userActivation=t.CanActivate;e.userEmailAddress=t.EmailAddress;e.documents=t.Documents;e.printAllPdfUrl=u.getPdfUrl(o);e.content={dateIssued:l()};e.isReactivation=t.IsReactivation;n.forEach(e.documents,function(n){n.pdfUrl=u.getPdfUrl(o,n.DocumentNumber)});t.IsExpired&&(e.isExpired=!0,t.RenewedOn!==null?(s("lite-docs-new-link-exists-message.html"),e.renewedOnDate=i("date")(t.RenewedOn)):s("lite-docs-expired-message.html"));e.invoiceListDetailsLoaded=!0;f.current.name===h&&c()},function(){e.hasError=!0}).then(function(){e.loading=!1});e.downloadDocument=function(n){u.downloadDocument(o,n,e.origin)};e.downloadAllDocuments=function(){u.downloadAllDocuments(o)};e.requestNewLink=function(){e.loading=!0;e.loadingMessage="Requesting new link...";u.sendNewLink(o).$promise.then(function(){s("lite-docs-new-link-success-message.html")},function(){s("lite-docs-new-link-failed-message.html")}).then(function(){e.loading=!1})};t.$on("$stateChangeSuccess",function(n,t){t.name===h&&e.accountName&&e.sbuName&&c()})}n.module("app.lite").controller("DocumentsLiteController",t);t.$inject=["$scope","$filter","$rootScope","liteDocsService","$state","$http","$window","metrics"]}(angular),function(){"use strict";function n(n,t,i,r,u,f){function h(n){r.activateFromEmail(n).$promise.then(function(n){n.success===!1?o():c()},function(n){f.log(n);o()}).then(function(){e.loading=!1})}function c(){e.loading=!1;e.hasError=!1}function o(){e.loading=!1;e.hasError=!0}var s=u.params.linkId,e=this;e.loading=!0;e.hasError=null;e.linkId=s;r.documents.get({docsId:s}).$promise.then(function(n){n.CanActivate?h(s):o()},function(n){f.log(n);o()})}angular.module("app.lite").controller("DocumentsLiteActivateController",n);n.$inject=["$scope","$filter","$rootScope","liteDocsService","$state","$log","$modal","$timeout"]}(),function(n){"use strict";function t(n,t,i){function u(t){return n("/api/lite/docs/:linkId/activate",{},{activate:{method:"POST",headers:{"X-AccountIds":0}}}).activate({linkId:t},{})}function f(){return n("/api/lite/docs/:docsId",{},{get:{method:"GET",headers:{"X-AccountIds":0}}})}function e(){return n("/api/lite/docs/:linkId/:documentNumber/pdf",{},{get:{method:"GET",headers:{"X-AccountIds":0}}})}function o(t){return n("/api/lite/docs/:linkId/renew",{},{activate:{method:"POST",headers:{"X-AccountIds":0}}}).activate({linkId:t},{})}function s(t){return n("/api/lite/docs/:linkId/activate/email",{},{activate:{method:"POST",headers:{"X-AccountIds":0}}}).activate({linkId:t},{})}function h(n,t){return t?window.location.protocol+"//"+window.location.host+"/api/lite/docs/"+n+"/"+t+"/pdf":window.location.protocol+"//"+window.location.host+"/api/lite/docs/"+n+"/pdf"}function c(n,u,f){i.log(r,"Downloading document: "+n+", "+u);t.downloadUrl("/api/lite/docs/"+n+"/"+u+"/pdf?intent=downloadDocument&origin="+f,"invoice.pdf")}function l(n,u){i.log(r,"Downloading document: "+n);t.publicDownloadUrl("/api/lite/orders/"+n+"/pdf?intent=downloadDocument&source="+u,"order.pdf")}function a(n){i.log(r,"Downloading all documents: "+n);t.downloadUrl("/api/lite/docs/"+n+"/pdf")}function v(){return n("/api/lite/deliveries/:deliveriesLiteLinkId",{},{getDeliveryDetail:{method:"GET",headers:{"X-AccountIds":0}}})}function y(){return n("/api/lite/orders/:ordersLiteLinkId?source=:source",{source:"@source"},{getOrderDetail:{method:"GET",headers:{"X-AccountIds":0}}})}function p(){return n("/api/lite/orders/:ordersLiteLinkId/publicUrl?source=:source&reason=:reason",{source:"@source",reason:"@reason"},{getOrderLitePublicUrl:{method:"GET",headers:{"X-AccountIds":0}}})}function w(t,i){return n("/api/lite/orders/:linkId/:confirmationId/confirm",{},{confirmOrderChange:{method:"POST",headers:{"X-AccountIds":0}}}).confirmOrderChange({linkId:t},{confirmationId:i})}function b(t,i){return n("/api/lite/orders/:linkId/requestNoteChange",{},{requestNoteChange:{method:"POST",headers:{"X-AccountIds":0}}}).requestNoteChange({linkId:t},{note:i})}var r="[Connect Lite]";return{activate:u,activateFromEmail:s,documents:f(),downloadDocument:c,downloadLiteOrderDocument:l,downloadAllDocuments:a,getPdfUrl:h,pdfDocument:e(),sendNewLink:o,deliveriesLiteResource:v(),ordersLiteResource:y(),confirmOrderChange:w,requestNoteChange:b,getOrderLitePublicUrlResource:p()}}n.module("app.lite").factory("liteDocsService",t);t.$inject=["$resource","shareTools","$log"]}(angular),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.liteDocs",config:{url:"/lite/invoices/:linkId",bodyClass:"lite-docs",pageTitle:"Invoices",views:{"app@":{templateUrl:"lite/documents",controller:"DocumentsLiteController",controllerAs:"liteDocs"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"lite-footer.html"}}}},{state:"app.liteDocsActivate",config:{url:"/lite/activate/:linkId",bodyClass:"lite-docs",pageTitle:"Activate",views:{"app@":{templateUrl:"lite/documents/activate",controller:"DocumentsLiteActivateController",controllerAs:"liteDocs"},"application-header@":{templateUrl:"lite-header.html"}}}},{state:"app.liteDocs.docViewer",config:{url:"/:documentNumber?origin",controller:"liteDocumentViewerController",controllerAs:"liteDoc",bodyClass:"lite-docs"}},{state:"app.liteDeliveries",config:{url:"/lite/deliveries/:deliveryLinkId",bodyClass:"lite-deliveries",pageTitle:"Deliveries",views:{"app@":{templateUrl:"lite/deliveries",controller:"DeliveriesLiteController",controllerAs:"liteDeliveries"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"lite-footer-deliveries.html"}}}},{state:"app.liteOrders",config:{url:"/lite/orders/:orderLinkId",bodyClass:"lite-docs",pageTitle:"Orders",views:{"app@":{templateUrl:"lite/orders",controller:"OrdersLiteController",controllerAs:"liteOrders"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"lite-footer-orders.html"}}}},{state:"app.liteCsat",config:{url:"/lite/csat/:userId/:trigger/:response",bodyClass:"lite-docs",pageTitle:"CSR Feedback",resolve:{emailReminder:["$q","csatLiteService","$stateParams",function(n){var t=n.defer();return t.resolve({UserResponded:!0}),t.promise}]},views:{"app@":{templateUrl:"lite/csat",controller:"CsatLiteController",controllerAs:"liteCsat"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"lite-footer-csat.html"}}}},{state:"app.liteCsatUnique",config:{url:"/lite/csat-email/:emailId/:response",bodyClass:"lite-docs",pageTitle:"CSR Feedback",resolve:{emailReminder:["$q","csatLiteService","$stateParams",function(n,t,i){var r=n.defer();return t.emailReminder(i.emailId).then(function(n){r.resolve(n)}),r.promise}]},views:{"app@":{templateUrl:"lite/csat",controller:"CsatLiteController",controllerAs:"liteCsat"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"lite-footer-csat.html"}}}}]}angular.module("app.lite").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t){var i=t.open({templateUrl:"liteDocumentModal.html",animation:!1,windowClass:"liteDoc",size:"lg",backdrop:"static",controller:"liteModalController",controllerAs:"doc",bindToController:!0});n.$on("$destroy",function(){i.close()})}angular.module("app.lite").controller("liteDocumentViewerController",n);n.$inject=["$scope","$modal"]}(),function(n){"use strict";function t(n,t,i,r,u,f,e){function c(){var n=$("#pdf-viewer"),i=n.width();t.pdfViewer.zoomToFit(i)}var o=this,h=r.params.origin||"liteInvoiceDocument",s={linkId:r.params.linkId,type:1,documentNumber:r.params.documentNumber},l=u.getPdfUrl(s.linkId,s.documentNumber);o.documentId=s.documentNumber;o.resetPdfSize=c;o.docAvailable=null;o.isPrintFriendly=e.isPrintFriendly();o.options={fitToWidth:!0,mouseZoom:!1};t.$watch("pdfViewer",function(n){if(n){var i=l+"?origin="+h;t.pdfViewer.loadDocument(i).then(function(){o.docAvailable=!0},function(){o.docAvailable=!1})}});n.setPageTitle("Invoice "+o.documentId);o.downloadDocument=function(){return u.downloadDocument(s.linkId,s.documentNumber,h)};o.printDocument=function(){return f.printDocument(l,h)};o.close=function(){i.close()};i.result.finally(function(){r.go("app.liteDocs")});window.addEventListener("resize",c);t.$on("$destroy",function(){window.removeEventListener("resize",c)})}n.module("app.lite").controller("liteModalController",t);t.$inject=["$rootScope","$scope","$modalInstance","$state","liteDocsService","shareTools","browserPlatform"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f,e){function c(){o.v2===!0&&e!=undefined&&e.UserResponded===!0?o.commentSubmitted=!0:r.trackResponse({userId:i.userId,response:i.response,trigger:i.trigger}).then(function(n){s=n})}function h(n){if(s===undefined){u(function(){h(n)},500);return}r.updateResponse({userId:i.userId,id:s.Id,comment:n});o.commentSubmitted=!0}var o=this,s;o.submitComment=h;o.v2=f.url().indexOf("csat-email")>-1;console.log("EmailReminder > ",e);o.comment="";o.commentSubmitted=!1;o.response=i.response;s=undefined;o.hasError=null;o.isLoading=!1;c()}n.module("app.lite").controller("CsatLiteController",t);t.$inject=["$rootScope","$scope","$stateParams","csatLiteService","$timeout","$location","emailReminder"]}(angular),function(){"use strict";function n(n){var t={};return t.trackResponse=n("api/lite/csat/trackResponse"),t.updateResponse=n("api/lite/csat/updateResponse"),t.emailReminder=n("api/lite/csat/emailReminder/:id"),t}angular.module("app.lite").factory("csatLiteResource",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(n,t,i){function r(n){return i.trackResponse.save(n).$promise}function u(n){return i.updateResponse.save(n).$promise}function f(n){return i.emailReminder.get({id:n}).$promise}return{trackResponse:r,updateResponse:u,emailReminder:f}}n.module("app.lite").factory("csatLiteService",t);t.$inject=["$rootScope","$log","csatLiteResource"]}(angular),function(n,t){"use strict";function i(n,i,r,u,f,e,o,s){function a(){h.init=!0;h.showAccountsInList=f.getActive().length>1;h.lastUpdated=new Date;h.linkId=r.deliveryLinkId;l();k(h.linkId)}function v(n){var t=y(n.Status,n.DeliveryIndicator==="P");return n.StatusF=t}function y(n,t){switch(n){case h.statusCodes.CPL:return t?h.statusStrings.CPLP:h.statusStrings.CPL;case h.statusCodes.ARV:return h.statusStrings.ARV;case h.statusCodes.ENR:return h.statusStrings.ENR;case h.statusCodes.EDEX:return h.statusStrings.EDEX;case h.statusCodes.AVL:return t?h.statusStrings.AVLP:h.statusStrings.AVL;case h.statusCodes.ACC:return h.statusStrings.ACC;case h.statusCodes.ALL:return"All deliveries & pickups";default:return"Unknown"}}function p(n){var i=selectByProp("SbuCode",n.SalesOrg,s),u=120,r,f,e,o;i&&i.result&&(u=i.result.DeliveryWindowMinutes||120);r=60*u;f=n.DeliveryIndicator==="P"&&!n.IsDelivered&&n.DeliveryDate!=null&&n.Status===h.statusCodes.AVL;n.hasPickupTime=f;n.hasGpsUpdateTime=isNotNullOrEmpty(n.CurrentOnRouteCreatedOn,n.CurrentOnRouteLongtitude,n.CurrentOnRouteLatitude);n.ArrivalTimeInSeconds&&!n.IsDelivered&&n.ArrivalTimeInSeconds+r>0&&n.DeliveryIndicator!=="P"&&(e=t().add(n.ArrivalTimeInSeconds,"seconds"),o=t().add(n.ArrivalTimeInSeconds+r,"seconds"),n.arrivalTime=e.format("h:mmA")+" - "+o.format("h:mmA")+t.tz(t.tz.guess()).format(" (z)"))}function w(n){var t;return t=n.ErrorOccured?"default":b(n.Status),n.StatusC=t}function b(n){switch(n){case h.statusCodes.CPL:case h.statusCodes.ARV:return"success";case h.statusCodes.ENR:return"warning";case h.statusCodes.ALL:return"all";case h.statusCodes.EDEX:default:return"default"}}function k(r){i.deliveryOrder={};i.linkId=r;i.deliveryItemQty=0;i.defaultDisplayQty=3;i.displayQty=i.defaultDisplayQty;i.dt={feature:null};i.$on("dt.updated",a);var u={deliveriesLiteLinkId:r};o.deliveriesLiteResource.getDeliveryDetail(u).$promise.then(function(r){l(r.details.SalesOrg,r.details.DeliveryNumber);n.session.accounts.list.push(r.details.SoldToAccountNumber);i.deliveryOrder=r.details;i.deliveryItemQty=i.deliveryOrder.Items.length;i.deliveryOrder.viewPodAction=d;i.dt={feature:h.feature};p(i.deliveryOrder);i.deliveryOrder.GpsTimestamp=t().subtract(i.deliveryOrder.LastUpdatedSecondsAgo,"seconds");v(i.deliveryOrder);w(i.deliveryOrder);i.deliveryOrder.downloadUrlPostFix="?stamp="+Date.now()+"&access_token="+e.token();i.deliveryOrder.imageUrlPostFix="?access_token="+e.token();i.deliveryOrder.Note&&(i.deliveryOrder.Note=i.deliveryOrder.Note.replace(/\n/g,"<br />"));i.showPodPdf=i.deliveryOrder.HasPodPdf&&(i.deliveryOrder.HasSignedPOD&&i.deliveryOrder.DeliveryIndicator!=="P"||i.deliveryOrder.DeliveryIndicator==="P");i.showPodImages=i.deliveryOrder.Images&&Array.isArray(i.deliveryOrder.Images)&&i.deliveryOrder.Images.length!==0;r.details&&r.details.DeliveryNumber&&n.setPageTitle("Delivery - "+r.details.DeliveryNumber);h.hasError=!1},function(n){h.errorStatusCode=n.status;n.status===410&&n.data&&n.data.IsExpired?l(n.data.SalesOrg,n.data.DeliveryNumber):l();h.hasError=!0}).then(function(){h.isLoading=!1});i.toggleMore=function(n){n.preventDefault();i.displayQty=i.displayQty<i.deliveryItemQty?i.deliveryItemQty:i.defaultDisplayQty}}function l(n,t){if(h.needHelpContact={PhoneNumber:c.PhoneNumber,Name:c.Name,DeliveryNumber:t},n){var i=selectByProp("SbuCode",n,s);i&&i.result&&(h.needHelpContact={PhoneNumber:i.result.NeedHelpContactPhoneNumber||c.PhoneNumber,Name:i.result.NeedHelpContactName||c.Name,DeliveryNumber:t})}}function d(){i.$emit("achievements.taskComplete",{taskName:"08ViewPOD",status:2})}var h=this,c;h.linkId=null;h.hasError=null;h.isLoading=!0;h.deliveries={};h.noDeliveries=!1;h.statusCodes=u.statusCodes;h.statusStrings=u.statusStrings;h.showAccountsInList=!1;h.feature="Deliveries";c={PhoneNumber:"1800 909 439",Name:"CSR Connect Support"};h.needHelpContact=c;a()}n.module("app.lite").controller("DeliveriesLiteController",i);i.$inject=["$rootScope","$scope","$stateParams","DELIVERIES_CONFIG","accountsService","authService","liteDocsService","SBU_CONFIG"]}(angular,moment),function(n){"use strict";function r(){return{controller:i,controllerAs:"dt",restrict:"A",link:u}}function u(n,t,i,r){var u=$("#deliveryTracker"),f=$("#"+r.map.mapId),e="delivery-tracker-sml";r.relayout=function(){if(r.isSml=i.deliveryTrackerDash||u.width()<800,u.toggleClass(e,!!r.isSml),u.hasClass("expanding")){var t=window.innerHeight-320;r.isSml||(t=window.innerHeight>719?t:400);u.height(t);f.height(t)}n.$evalAsync();setTimeout(function(){r.fitAll(!0)},200);n.refreshLayout&&n.refreshLayout()};$(window).resize(r.relayout).resize();n.$on("$destroy",function(){return $(window).off("resize",r.relayout)})}function i(i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k){function ft(){d.init=!0;d.showAccountsInList=l.getActive().length>1;f.deliveriesLiteTracker?(d.singleDelivery=f.deliveriesLiteTracker,d.map.mapId+="-"+d.singleDelivery,i.log(t,"Focusing on single delivery",d.singleDelivery)):h.deliveryNumber!=undefined&&d.lastUpdated==undefined&&st(h.deliveryNumber);d.lastUpdated=new Date;f.deliveryTrackerDataSource&&(d.parentDataSource=u.$parent[f.deliveryTrackerDataSource],i.log(t,"Using manual data source",d.parentDataSource));o(function(){var n,e;ci();d.singleDelivery?d.parentDataSource?(d.deliveries={single:{details:[d.parentDataSource],total:1}},ot([d.deliveries.single]),d.deliveries.single.details[0].imageUrlPostFix="?access_token="+y.token(),d.init=!1,u.refreshLayout&&u.refreshLayout()):v.getDeliveryDetail({deliveryOrderId:d.singleDelivery},function(n){i.log(t,"Got single delivery",n.details);d.deliveries={single:{details:[n.details],total:1}};d.deliveries.single.details[0].imageUrlPostFix="?access_token="+y.token();ot([d.deliveries.single]);d.init=!1;u.refreshLayout&&u.refreshLayout()}):(n=f.deliveryTrackerDash?d.filters.today:d.filters.previous,n.status=d.filters.status,e=v.getDeliveriesProgress(n),e.$promise.then(function(n){i.log(t,"Got deliveries",n.details);d.deliveries=f.deliveryTrackerDash?{today:n.details.today}:n.details;d.noDeliveries=!1;ot(d.deliveries);d.init=!1;u.refreshLayout&&u.refreshLayout();r.$broadcast("dt.updated",d.deliveries)}),p.register(e));d.parentDataSource||di()})}function at(){return{zoom:4,maxZoom:17,mapTypeControl:!1,streetViewControl:!1,scrollwheel:!0,clickableIcons:!1,fullscreenControl:!1,center:new google.maps.LatLng(-33.85219,151.21067)}}function ci(){d.map.ctrl=d.map.ctrl||new google.maps.Map(document.getElementById(d.map.mapId),at());d.map.geocoder=d.map.geocoder||new google.maps.Geocoder;d.map.oms=d.map.oms||new OverlappingMarkerSpiderfier(d.map.ctrl,{keepSpiderfied:!0,nearbyDistance:1});d.map.oms.unspiderfy();d.map.clickListener&&d.map.oms.removeListener("click",ri);d.map.clickListener=d.map.oms.addListener("click",ri);d.map.spiderfyListener&&d.map.oms.removeListener("spiderfy",ui);d.map.spiderfyListener=d.map.oms.addListener("spiderfy",ui);d.map.unspiderfyListener&&d.map.oms.removeListener("unspiderfy",fi);d.map.unspiderfyListener=d.map.oms.addListener("unspiderfy",fi);google.maps.event.addListenerOnce(d.map.ctrl,"idle",function(){google.maps.event.trigger(d.map.ctrl,"resize");d.map.ready=!0});d.map.zoomListener&&google.maps.event.removeListener(d.map.zoomListener);d.map.zoomListener=google.maps.event.addListener(d.map.ctrl,"zoom_changed",li)}function li(){oi()}function et(){ut=!1;ft()}function ot(r){d.map.ctrl&&d.map.geocoder&&(ai(),n.forEach(r,function(r){var u=r.details;u.length>0&&n.forEach(u,function(n){var u,r,f,e,o;n.PickupAddress&&n.PickupLatitude&&n.PickupLongitude?g(new google.maps.LatLng(n.PickupLatitude,n.PickupLongitude),n,"dest"):(u=!1,n.IsDelivered&&n.Gps&&(r=n.Gps.split(","),r.length===2&&(f=r[0].trim(),e=r[1].trim(),f&&e&&(u=!0,g(new google.maps.LatLng(f,e),n,"dest")))),u||(n.Latitude&&n.Longitude?g(new google.maps.LatLng(n.Latitude,n.Longitude),n,"dest"):!n.UnableToGeocodeAddress&&n.Address?d.map.geocoder.geocode({address:n.Address,bounds:d.map.geocodeBounds,region:"AU"},function(r,u){u===google.maps.GeocoderStatus.OK?g(r[0].geometry.location,n,"dest"):i.error(t,"Geocoder",n.Address,u)}):i.log(t,"No destination coords or address for delivery",n.Id)));n.DeliveryOnRoute&&n.CurrentOnRouteLatitude&&n.CurrentOnRouteLongtitude&&(o=new google.maps.LatLng(n.CurrentOnRouteLatitude,n.CurrentOnRouteLongtitude),g(o,n,"truck"));kt(n);wt(n);dt(n)})}))}function ai(){if(tt){i.error(t,"Cleanup called while in progress...");return}tt=!0;var r=yi();n.forEach(d.map.markers,function(n){if(n){var u=selectByProp("Id",n.deliveryId,r),t=n.deliveryId+"dest",i=n.deliveryId+"truck";u||(d.map.markers[i]&&vt(i),d.map.markers[t]&&vt(t))}});tt=!1}function vt(n){d.map.markers[n].setMap(null);d.map.markers[n]=null;delete d.map.markers[n];it()}function g(t,i,r){var f=d.map.markers?d.map.markers[i.Id+r]:!1,e;if(f)e=f.getIcon(),f.setIcon(n.extend(e,{url:pt(i,r)})),f.setPosition(t),f.truePosition=t,i[r==="truck"?"markerTruck":"markerDest"]=f;else{var o={delivery:"Delivery: "+i.DeliveryNumber+"\n"+i.Address,pickup:"Pickup: "+i.DeliveryNumber+"\nEx. "+i.PickupPlantName+"\n"+i.PickupAddress},s={position:t,truePosition:t,map:d.map.ctrl,title:i.DeliveryIndicator==="P"?o.pickup:o.delivery,deliveryId:i.Id,zIndex:1,icon:n.extend({},lt,{url:pt(i,r)})},u=new google.maps.Marker(s);u.addListener("mouseover",function(){ti(u.deliveryId,!0)});u.addListener("mouseout",function(){ti(u.deliveryId,!1)});d.map.markers[i.Id+r]=u;i[r==="truck"?"markerTruck":"markerDest"]=u;d.map.oms.addMarker(u);it()}ct()}function pt(n,t){var i="marker-%STATUS%.png";return t==="truck"&&(i="delivery-truck-%STATUS%.png"),yt+i.replace(/%STATUS%/,n.Status+(n.DeliveryIndicator==="P"?"P":""))}function wt(n){var t=bt(n.Status,n.DeliveryIndicator==="P");return n.StatusF=t}function bt(n,t){switch(n){case d.statusCodes.CPL:return t?d.statusStrings.CPLP:d.statusStrings.CPL;case d.statusCodes.ARV:return d.statusStrings.ARV;case d.statusCodes.ENR:return d.statusStrings.ENR;case d.statusCodes.EDEX:return d.statusStrings.EDEX;case d.statusCodes.AVL:return t?d.statusStrings.AVLP:d.statusStrings.AVL;case d.statusCodes.ACC:return d.statusStrings.ACC;case d.statusCodes.ALL:return"All deliveries & pickups";default:return"Unknown"}}function kt(n){var t=selectByProp("SbuCode",n.SalesOrg,k),r=120,i,u,f,e;t&&t.result&&(r=t.result.DeliveryWindowMinutes||120);i=60*r;u=n.DeliveryIndicator==="P"&&!n.IsDelivered&&n.DeliveryDate!=null&&n.Status===d.statusCodes.AVL;n.hasPickupTime=u;n.hasGpsUpdateTime=isNotNullOrEmpty(n.CurrentOnRouteCreatedOn,n.CurrentOnRouteLongtitude,n.CurrentOnRouteLatitude);n.ArrivalTimeInSeconds&&!n.IsDelivered&&n.ArrivalTimeInSeconds+i>0&&n.DeliveryIndicator!=="P"&&(f=moment().add(n.ArrivalTimeInSeconds,"seconds"),e=moment().add(n.ArrivalTimeInSeconds+i,"seconds"),n.arrivalTime=f.format("h:mmA")+" - "+e.format("h:mmA")+moment.tz(moment.tz.guess()).format(" (z)"))}function dt(n){var t;return t=n.ErrorOccured?"default":gt(n.Status),n.StatusC=t}function gt(n){switch(n){case d.statusCodes.CPL:case d.statusCodes.ARV:return"success";case d.statusCodes.ENR:return"warning";case d.statusCodes.ALL:return"all";case d.statusCodes.EDEX:default:return"default"}}function ni(r){var u,e,f,o;if(d.map.ctrl!=null){u=ut||r===!0;google.maps.event.trigger(d.map.ctrl,"resize");e=n.equals({},d.map.markers);try{f=new google.maps.LatLngBounds;n.forEach(d.map.markers,function(n){o=n.getPosition();f.extend(o)});u&&d.map.ctrl.fitBounds(f)}catch(s){i.error(t,s)}e&&u&&(i.log("No markers, center on AU"),d.map.ctrl.setCenter(at().center))}}function vi(t,i){var f=d.map.ctrl.getBounds(),r=new google.maps.LatLngBounds,u=!0;n.forEach([t.markerDest,t.markerTruck],function(n){if(n){n.setAnimation(i?google.maps.Animation.BOUNCE:null);var t=n.truePosition||n.getPosition();r.extend(t);u=f.contains(t);i&&nt(n);i||n.spidered||!d.map.oms.markersNearMarker(n,!0).length||ht(n)}});i&&!u&&(d.map.ctrl.fitBounds(r),t.markerDest&&nt(t.markerDest),t.markerTruck&&nt(t.markerTruck))}function ti(t,i){var r=null;(n.forEach(d.deliveries,function(n,i){var u=selectByProp("Id",t,n.details);u&&(r=d.deliveries[i].details[u.idx])}),r)&&u.$apply(function(){r.highlight=i})}function yi(){var t=[];return n.forEach(d.deliveries,function(n){t=t.concat(n.details)}),d.noDeliveries=!t.length,t}function st(n){d.singleDelivery||(u.$emit("achievements.taskComplete",{taskName:"07TrackDelivery",status:2}),e.open({templateUrl:"deliveryOrderDetail.html",resolve:{dt:function(){return d}},controller:["$scope","$modalInstance","$log","dt",function(t,i,r,u){function f(){v.getDeliveryDetail({deliveryOrderId:n},function(n){t.deliveryOrder=n.details;t.deliveryItemQty=t.deliveryOrder.Items.length;t.deliveryOrder.viewPodAction=pi;t.dt={feature:u.feature};kt(t.deliveryOrder);t.deliveryOrder.GpsTimestamp=moment().subtract(t.deliveryOrder.LastUpdatedSecondsAgo,"seconds");wt(t.deliveryOrder);dt(t.deliveryOrder);t.deliveryOrder.downloadUrlPostFix="?stamp="+Date.now()+"&access_token="+y.token();t.deliveryOrder.imageUrlPostFix="?access_token="+y.token();t.deliveryOrder.Note&&(t.deliveryOrder.Note=t.deliveryOrder.Note.replace(/\n/g,"<br />"));t.showPodPdf=t.deliveryOrder.HasPodPdf&&(t.deliveryOrder.HasSignedPOD&&t.deliveryOrder.DeliveryIndicator!=="P"||t.deliveryOrder.DeliveryIndicator==="P");t.showPodImages=t.deliveryOrder.Images&&Array.isArray(t.deliveryOrder.Images)&&t.deliveryOrder.Images.length!==0},function(){a.warning("Sorry!","We weren't able to load the delivery details at this time. Please try again later.");i.dismiss("cancel")})}t.deliveryOrder={};t.deliveryItemQty=0;t.defaultDisplayQty=3;t.displayQty=t.defaultDisplayQty;t.dt={feature:null};t.$on("dt.updated",f);f();t.toggleMore=function(n){n.preventDefault();t.displayQty=t.displayQty<t.deliveryItemQty?t.deliveryItemQty:t.defaultDisplayQty};t.close=function(n){n.preventDefault();i.dismiss("close")};t.requestPOD=function(){v.requestPOD({deliveryOrderId:t.deliveryOrder.Id},{},function(){a.swal({title:"Proof of Delivery Requested",text:"An email has been sent to CSR Connect Helpdesk requesting a copy of the Proof of Delivery document. You will receive a confirmation email at your registered email address.",showCancelButton:!1,confirmButtonText:"Close"});t.deliveryOrder.PodRequested=!0},function(){})}}]}))}function pi(){u.$emit("achievements.taskComplete",{taskName:"08ViewPOD",status:2})}function wi(n){$("#modal-deliveries-help").modal(n?"show":"hide")}function ii(){return{start:new Date(moment().subtract(31,"d").format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD"))}}function bi(){d.noDeliveries=!1;var n=ii();d.filters.previous.start=n.start;d.filters.previous.end=n.end}function ki(){var n=ii();return moment(d.filters.previous.start).isSame(n.start)&&moment(d.filters.previous.end).isSame(n.end)}function di(){s.cancel(rt);rt=s(et,18e4)}function gi(n){d.mapMode=n;d.mapMode===!0&&o(function(){d.fitAll(!0)});d.relayout();nr()}function ri(n){st(n.deliveryId)}function ui(n){for(var t=0;t<n.length;t++)nt(n[t]),n[t].spidered=!0}function fi(n){for(var t=0;t<n.length;t++)ht(n[t]),n[t].spidered=!1}function ei(t,i){var r=n.extend({},t.getIcon(),i);t.setIcon(r)}function ht(n){ei(n,hi)}function nt(n){ei(n,lt)}function oi(){if(!d.map.ready){it();return}n.forEach(d.map.markers,function(n){nt(n)});var t=d.map.oms.markersNearAnyOtherMarker();n.forEach(t,function(n){ht(n)})}function nr(){w.store().set(si,{mode:d.mapMode})}var d=this,ct=debounce(ni,250),it=debounce(oi,250),rt,ut=!0,si="mapPreferences",lt={size:new google.maps.Size(36,40),origin:new google.maps.Point(0,0),anchor:new google.maps.Point(12,40),scaledSize:new google.maps.Size(46,100)},hi={size:new google.maps.Size(46,47),origin:new google.maps.Point(0,53),anchor:new google.maps.Point(22,47),scaledSize:new google.maps.Size(46,100)},tt,yt;d.singleDelivery=null;d.parentDataSource=null;d.deliveries={};d.noDeliveries=!1;d.statusCodes=c.statusCodes;d.statusStrings=c.statusStrings;d.isSml=!0;d.mapMode=!1;d.showAccountsInList=!1;d.feature=n.isDefined(u.$parent.dt)?u.$parent.dt.feature:f.deliveryTrackerFeature;d.map={mapId:"map-deliveries",ctrl:null,geocoder:null,directions:null,geocodeBounds:new google.maps.LatLngBounds(new google.maps.LatLng(-49.95122,103.183594),new google.maps.LatLng(-3.740675,179.99999)),markers:{},ready:!1,oms:null};d.init=!0;d.filters={today:{start:new Date(moment().format("YYYY-MM-DD")),end:new Date(moment().format("YYYY-MM-DD"))},previous:{start:new Date(moment().subtract(6,"d").format("YYYY-MM-DD")),end:new Date(moment().add(1,"d").format("YYYY-MM-DD"))},status:d.statusCodes.ALL};u.$on("$destroy",function(){s.cancel(rt)});u.$on("dt.refresh",et);u.$watchGroup(["dt.filters.previous.start","dt.filters.previous.end","dt.filters.status"],function(){d.init||(ut=!0,ft())},!0);o(function(){ft()});d.fitAll=ni;d.debouncedFitAll=ct;d.bounceDelivery=vi;d.showDelivery=st;d.refresh=et;d.getStatusClassColour=gt;d.getStatusText=bt;d.deliveriesHelp=wi;d.expandFilters=bi;d.hasExpandedFilters=ki;d.switchMode=gi;tt=!1;yt="/assets/img/deliveries/"}var t="[Lite Deliveries]";n.module("app.lite").directive("deliveriesLiteTracker",r);i.$inject=["$log","$rootScope","$scope","$attrs","$modal","$timeout","$interval","$stateParams","DELIVERIES_CONFIG","accountsService","SweetAlert","deliveries","authService","resourceCancellingService","devicePreferences","metrics","SBU_CONFIG"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y){function d(){k();tt();g()}function g(){const n=u.$$search.confirm;if(n){const t=f.confirmOrderChange(p.linkId,n);t.$promise.then(function(n){s.removeAll();s.add({id:"orders-lite-change-note-confirmation",type:"success",message:"Change confirmation has been sent to the customer",expire:!0});p.order.ChangeRequests=n.ChangeRequests},function(n){s.removeAll();s.add({id:"orders-lite-change-note-confirmation",type:"error",message:"Order change confirmation failed: "+n.data.ExceptionMessage,expire:!0})})}}function nt(n){a.get("/api/lite/common/marketing/"+n).then(function(n){Object.keys(n.data).length>0&&(p.customMarketing=n.data,p.hasCustomMarketing=!0);p.loadingMarketing=!1})}function tt(){p.order={};t.doc={feature:null};t.$on("doc.updated",d);f.ordersLiteResource.getOrderDetail(b).$promise.then(function(t){p.order=t.details;p.pdfurl="/api/lite/orders/"+p.linkId+"/pdf"+p.trackingSourceUrlPostfix;k(t.details.SalesOrg,t.details.OrderNumber);p.doc={feature:p.feature};t.details&&t.details.OrderNumber&&n.setPageTitle("Order - "+t.details.OrderNumber);p.hasOrder=!0;p.hasError=!1;nt(p.order.SalesOrg);c.info(p.order)},function(n){n.status===498?(p.order={IsExpired:!0},b.reason="regeneratePermalinks",p.hasOrder=!0,p.hasError=!1):(p.errorStatusCode=n.status,p.hasError=!0);k()}).then(function(){p.isLoading=!1})}function k(n,t){if(p.needHelpContact={PhoneNumber:w.PhoneNumber,Name:w.Name,OrderNumber:t},n){var i=selectByProp("SbuCode",n,o);i&&i.result&&(p.needHelpContact={PhoneNumber:i.result.NeedHelpContactPhoneNumber||w.PhoneNumber,Name:i.result.NeedHelpContactName||w.Name,OrderNumber:t})}}var p=this,w,b;p.showChangeBox=!1;p.showChangeSuccessBox=!1;p.savingChanges=!1;p.showCustomerServiceChangeBox=!1;p.loadingMarketing=!0;p.hasCustomMarketing=!1;p.customMarketing=undefined;p.linkId=r.orderLinkId;p.options={fitToWidth:!0,mouseZoom:!1,mousePan:!0};p.hasError=null;p.isLoading=!0;p.hasOrder=!1;p.trackingSource=u.$$search.source;p.trackingSourceUrlPostfix="?source="+p.trackingSource;p.feature="Orders";w={PhoneNumber:"1800 909 439",Name:"CSR Connect Support"};p.needHelpContact=w;p.pdfurl="/api/lite/orders/"+p.linkId+"/pdf"+p.trackingSourceUrlPostfix;b={ordersLiteLinkId:p.linkId,source:p.trackingSource,reason:"viewLiteOrder"};d();p.customMarketingRedirect=function(){p.customMarketing!=undefined&&(p.customMarketing.metricName!=undefined&&v.track(p.customMarketing.metricName,{url:window.location,user_agent:navigator.userAgent,document_no:p.order.OrderNumber,account_id:p.order.AccountId}),p.customMarketing.url!=undefined&&y.open(p.customMarketing.url,"_blank"))};p.printDoc=function(){return e.shouldLegacyPrint()?(t.legacyBrowserPrint(),!0):e.printDocument(p.pdfurl,"LiteOrders",!0)};p.downloadDoc=function(){f.downloadLiteOrderDocument(p.linkId,p.trackingSource)};p.viewOrderInConnect=function(){f.getOrderLitePublicUrlResource.getOrderLitePublicUrl(b).$promise.then(function(n){window.location.assign("/#/p/"+n.url)},function(){i.go("app.dash")})};p.noteChange="";p.canRequestChange=function(){return p.order.CanRequestNoteChange&&p.order.IsTextChangeEnabled};p.requestChange=function(){p.showChangeFailureBox=!1;p.order.CanModify?i.go("app.orderModify",{accountId:p.order.AccountId,orderNo:p.order.OrderNumber}):p.order.CanRequestNoteChange&&p.order.IsTextChangeEnabled?(p.showChangeBox=!0,focusOnId("change-notes-area"),scrollToId("changes-container")):p.showCustomerServiceChangeBox=!0};p.cancelChange=function(){p.noteChange="";p.showChangeBox=!1};p.saveChange=function(){if(p.showChangeFailureBox=!1,p.noteChange==null||p.noteChange.length<=0){s.removeAll();s.add({id:"orders-lite-change-note-error",type:"error",message:"Please type something first!",expire:!0});return}p.savingChanges=!0;var n=f.requestNoteChange(p.linkId,p.noteChange);n.$promise.then(function(n){p.order.CustomerChangeRequest=n.Notes;p.order.ChangeRequests=n.ChangeRequests;p.showChangeBox=!1;p.savingChanges=!1;p.noteChange="";p.showChangeSuccessBox=!0;h(function(){p.showChangeSuccessBox=!1},5e3)},function(){s.removeAll();p.savingChanges=!1;p.showChangeFailureBox=!0;h(function(){p.showChangeFailureBox=!1},5e3)})}}n.module("app.lite").controller("OrdersLiteController",t);t.$inject=["$rootScope","$scope","$state","$stateParams","$location","liteDocsService","shareTools","SBU_CONFIG","notificationService","$timeout","$log","featureToggle","$http","metrics","$window"]}(angular),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.mobileLanding",config:{url:"/mobilelanding",pageTitle:"Welcome to CSR Connect",templateUrl:"mobile/landing"}}]}angular.module("app.mobile").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){r.current.name==="app.salesOrders"&&u.set("documentLauncher",r.current.name,{$$search:"#/products/orders"});n.list={};n.list.data={};n.list.items=[];n.list.sortColumn="SalesOrderDate";n.list.asc=!1;n.list.orderBy="desc";n.list.totalItems=0;n.list.data.itemsPerPage=25;n.list.data.pageSizeList=[10,25,50];n.list.data.currentPage=1;n.searchKeyword="";n.dataLoaded=!1;n.spinner=!1;n.searchOption={};n.searchOption.dateRange={startDate:new Date(moment().subtract(1,"M").format("YYYY-MM-DD")),endDate:new Date(moment().add(1,"M").format("YYYY-MM-DD"))};$("#btn-download-pdf").on("click",function(t){n.exportFiles(t,h.pdf)});$("#btn-download-csv").on("click",function(t){n.exportFiles(t,h.csv)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,h.excel)});n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.list.orderBy=n.list.asc?"asc":"desc";n.list.search(!0)};n.list.search=function(t){e.removeAll();var i={};t&&(n.list.data.currentPage=1);i.Skip=((n.list.data.currentPage||1)-1)*n.list.data.itemsPerPage;i.Top=n.list.data.itemsPerPage;i.FromDate=moment(n.searchOption.dateRange.startDate).format();i.ToDate=moment(n.searchOption.dateRange.endDate).format();i.SortColumn=n.list.sortColumn;i.OrderBy=n.list.orderBy;n.searchKeyword!=""&&(i.SearchKeyword=n.searchKeyword);n.dataLoaded=!1;n.spinner=!0;f.get(i,function(t){n.list.items=t.Items;n.list.totalItems=t.Count;n.dataLoaded=!0;n.spinner=!1;e.removeAll()},function(t){e.add({id:"accounts-selection",type:"error",message:t.data.Message});n.list.items=[];n.list.totalItems=0;n.dataLoaded=!0;n.spinner=!1})};n.downloadPDF=function(n,t,i,u){var e=selectByProp("SbuCode",i,l),f;e.result.OrdersArePullDownType==!0&&u.IsPullDownOrder?c.swal({imageUrl:"/assets/img/onboarding/connect-candy-circle.svg",title:"PGH orders are coming soon",text:"Would you like early access? Activate the Connect 2017 preview.",showCancelButton:!0,confirmButtonText:"Activate preview",closeOnConfirm:!1,showLoaderOnConfirm:!0},function(n){n&&r.go("app.togglePreview")}):n&&t&&(f=window.location.protocol+"//"+window.location.host+"/api/products/order/export?accountId="+n+"&documentNo="+t+"&access_token="+o.token(),window.open(f))};n.list.setPageSize=function(t){n.list.data.itemsPerPage=t;n.list.search()};n.tableHeaders=[{columnName:"",displayName:"",checkbox:!0},{columnName:"DocumentNo",displayName:"Order No."},{columnName:"AccountId",displayName:"Account No."},{columnName:"OrderStatus",displayName:"Status"},{columnName:"ExternalReference",displayName:"Your Reference"},{columnName:"ShipToStreet",displayName:"Delivery Address"},{columnName:"SalesOrderDate",displayName:"Ordered On"},{columnName:"DeliveryDate",displayName:"Requested For"},{columnName:"Amount",displayName:"Total*",className:"tf-right"}];n.exportFiles=function(t,i){t.stopPropagation();var r=n.selectedItems.length?n.selectedItems:n.list.items,u=$.map(r,function(n){return n.DocumentNo}),f=i.toLowerCase()=="pdf"?"order/export":"orders/export",e=window.location.protocol+"//"+window.location.host+"/api/products/"+f+"?ids="+window.encodeURIComponent(u)+"&fileType="+i+"&access_token="+o.token()+"&accountId="+s.getActive().join(",");window.open(e)}}angular.module("app.orders").controller("OrdersController",n);n.$inject=["$scope","$stateParams","$rootScope","$state","$previousState","orders","notificationService","authService","accountsService","exportService","SweetAlert","SBU_CONFIG"]}(),function(){"use strict";function n(n){var t="api/products/orders/sap";return n(t,null,{get:{method:"GET",url:t+"/",cancellable:!0,isArray:!1}})}angular.module("app.orders").factory("orders",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[]}angular.module("app.orders").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";angular.module("app.orders").controller("OrdersPanelController",["$scope","$rootScope","$timeout","$state","$window","orders","authService","notificationService","resourceCancellingService","SweetAlert","SBU_CONFIG",function(n,t,i,r,u,f,e,o,s,h,c){n.openOrderDocument=function(n,t,i,u){var f=selectByProp("SbuCode",i,c),e=f.result.OrdersArePullDownType==!0&&u.IsPullDownOrder?"pulldownOrders":"orders";r.go("modalDocumentView",{accountId:n,documentType:e,documentNo:t})};n.tableHeaders=[{columnName:"DocumentNo",displayName:"Order Num."},{columnName:"ExternalReference",displayName:"Your Reference"},{columnName:"ShipToStreet",displayName:"Delivery Address"},{columnName:"SalesOrderDate",displayName:"Order Date"},{columnName:"DeliveryDate",displayName:"Requested"},{columnName:"OrderStatus",displayName:"Status"},{columnName:"TotalAmountIncludingTaxes",displayName:"Total*",className:"tf-right"}];n.list={};n.list.data={};n.list.items=[];n.list.sortColumn="SalesOrderDate";n.list.asc=!1;n.list.orderBy="desc";n.list.totalItems=0;n.list.data.itemsPerPage=25;n.list.data.currentPage=1;n.searchKeyword="";n.dataLoaded=!1;n.searchOption={};n.searchOption.dateRange={startDate:new Date(moment().subtract(1,"y").format("YYYY-MM-DD")),endDate:new Date(moment().add(1,"year").endOf("year").format("YYYY-MM-DD"))};n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.list.orderBy=n.list.asc?"asc":"desc";n.list.search()};n.list.search=function(){var t={},i;t.Skip=0;t.Top=5;t.FromDate=moment(n.searchOption.dateRange.startDate).format();t.ToDate=moment(n.searchOption.dateRange.endDate).format();t.SortColumn=n.list.sortColumn;t.OrderBy=n.list.orderBy;n.searchKeyword!=""&&(t.SearchKeyword=n.searchKeyword);n.dataLoaded=!1;i=f.get(t);i.$promise.then(function(t){n.list.items=t.Items;n.list.totalItems=t.Count;n.dataLoaded=!0;n.spinner=!1;n.refreshLayout()},function(n){n.data&&o.add({id:"accounts-selection",type:"error",message:n.data.Message})});s.register(i)};n.init=function(){n.list.items=[];n.list.search()}}])}(),function(){"use strict";function n(n){var t="api/finance/invoices/delivered";return n(t,null,{get:{method:"GET",url:t+"/",cancellable:!0,isArray:!1}})}angular.module("app.orders").factory("ordersRecentDeliveries",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(n,t){function r(i){function u(u){var f;f=u.hasOwnProperty("ImageAssetUri")&&u.ImageAssetUri!=null&&u.ImageAssetUri.indexOf("/assets")===0?u.ImageAssetUri:t(u.SbuCode);i.toast={desc:u.Description,qty:u.Quantity,sbuCode:u.SbuCode,img:f,active:1};n.cancel(r);r=n(function(){i.toast.active=0},2e3)}var r;i.$on("order.itemAdded",function(n,t){t.Code!=="T"&&u(t)})}return{link:r,restrict:"A",templateUrl:"order-cart-toast.html",controller:i,replace:!0}}function i(n,t,i){n.toast={desc:null,qty:null,sbuCode:null,img:"/assets/img/blank.gif",active:0};n.goToOrder=function(){i.currentOrderId&&t.go("app.orderEdit",{orderId:i.currentOrderId})}}n.module("app.ordersv2").directive("cartToast",t);t.$inject=["$timeout","sbuLogoPathFilter"];i.$inject=["$scope","$state","ordersManager"]}(angular),function(){"use strict";angular.module("app.ordersv2").constant("ORDER",{type:{unspecified:"unspecified",delivery:"delivery",pickup:"pickup"}})}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function h(n){e.swal({title:"Delete order",text:"Are you sure you want to delete "+(n.Reference||"this order")+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete order"},function(i){if(!i)return!1;var u=s.currentOrderId;return o.order().delete({orderId:n.Id},function(){n.Id===u&&(s.setOrderId(null),t.$broadcast("order.deleted",!1));r.list.search()})})}r.Enums=Enums;r.orderTypes=keyFlip(Enums.orderType);r.orderStatus=keyFlip(Enums.orderStatus);r.filters={searchKeyword:null,startDate:new Date(moment().subtract(1,"Year").format("YYYY-MM-DD")),endDate:new Date(moment().format("YYYY-MM-DD"))};r.deleteDraftOrder=h;r.tableHeaders=[{columnName:"Reference",displayName:"Reference"},{columnName:"AccountId",displayName:"Account No."},{columnName:"Status",displayName:"Status"},{columnName:"OrderType",displayName:"Type"},{columnName:"UpdatedOn",displayName:"Updated"},{columnName:"CreatedOn",displayName:"Created"},{columnName:"",displayName:""}];r.listViewConfig={resourceName:"draftOrders",filters:[{field:"Reference",alias:"Reference",operator:"like",value:r.filters.searchKeyword,condition:"and"},{field:"UpdatedOn",alias:"From",operator:">=",value:moment(r.filters.startDate).format()},{field:"UpdatedOn",alias:"To",operator:"<",value:moment(r.filters.endDate).format()}],order:[{field:"UpdatedOn",orderBy:"desc"}],sortColumn:"UpdatedOn",asc:!1,itemName:"draft"};r.$on("list.search",function(){r.list.config.filters.Reference.value=r.filters.searchKeyword;r.list.config.filters.From.value=moment(r.filters.startDate).format("YYYY-MM-DD");r.list.config.filters.To.value=moment(r.filters.endDate).add(1,"day").format("YYYY-MM-DD")})}angular.module("app.ordersv2").controller("DraftOrdersController",n);n.$inject=["$log","$rootScope","$state","$scope","authService","accountsService","SweetAlert","ordersv2","ordersManager","metrics","metricEvents","utilService"]}(),function(){"user strict";function n(n,t,i){function u(){r.reorderFeedbackGiven=t.store().get("OrderFeedbackGiven")==undefined?!1:t.store().get("OrderFeedbackGiven")}function f(){r.reorderFeedbackGiven=!0;t.store().set("OrderFeedbackGiven",!0)}var r=this;r.reorderFeedbackGiven=undefined;r.surveyResponse=f;i(function(){u()},2e3)}angular.module("app.ordersv2").controller("OrderGetStartedController",n);n.$inject=["$scope","devicePreferences","$timeout","$state"]}(),function(n){"use strict";function i(){return{restrict:"A",templateUrl:"order-button.html",controller:t,controllerAs:"orderBtn"}}function t(t,i,r,u,f,e,o,s,h){function a(){var n=s.getPref("CurrentOrderId");c.lastOrderId=n;n?o.order().get({orderId:n},function(i){if(i==null&&(t.log("ordersBtn > OrderId %s did not return any line items",n),l()),i&&i.details.LineItemCount>0)if(f.getActive().indexOf(i.details.AccountId)>-1){t.log("ordersBtn > Found order %s in account %s > And got %s items",n,i.details.AccountId,i.details.LineItemCount);c.count=i.details.LineItemCount;c.orderId=n;e.setOrderId(n,!0);var r=first(f.get([i.details.AccountId]));e.setOrderAccount(r)}else t.log("ordersBtn > Found order %s in account %s > Account not selected, clear btn",n,i.details.AccountId),l();else t.log("ordersBtn > No items in current order %s",n),c.orderId=n;c.ready=!0}):c.ready=!0}function b(){e.currentOrderId?u.go("app.orderEdit",{orderId:e.currentOrderId}):u.go("app.orderCreate")}function v(n){c.pricePendingItems=n&&!n.PricingAvailability||h.pricePlantPendingItems.length>0}function k(n,t){c.count++;c.orderId=t.OrderId;v(t)}function d(n,t){v(t)}function g(){c.count>1&&c.count--}function y(i,r){t.log("orderBtn > Updated with > ",r);r&&r.LineItems&&r.LineItems.length?w(r.LineItems):r===!1?l():r&&n.isString(r)?r!==c.orderId&&p():r&&r.TotalExGst>1&&r.LineItems.length===0?p():l();c.ready=!0}function p(){o.items().get({OrderId:e.currentOrderId||c.lastOrderId},function(n){n.LineItems&&w(n.LineItems)})}function w(n){c.count=n.length;c.orderId=first(n).OrderId;v()}function l(){c.orderId=null;c.count=0;c.pricePendingItems=!1}var c=this;c.goToOrder=b;c.ready=!1;c.type=0;c.count=0;c.orderId=null;c.pricePendingItems=!1;r.$on("order.changed",y);r.$on("order.validated",y);r.$on("order.deleted",y);r.$on("order.itemAdded",k);r.$on("order.itemAdding",d);r.$on("order.itemRemoved",g);r.$on("order.itemsCleared",function(){c.count=0});r.$on("order.placed",function(){c.orderId=null;c.count=0});f.isReady()?a():r.$on("accounts.dataReady",a);r.$on("accounts.changed",a)}n.module("app.ordersv2").directive("orderBtn",i);t.$inject=["$log","$rootScope","$scope","$state","accountsService","ordersManager","ordersv2","userPreferencesService","ordersData"]}(angular),function(){"use strict";function n(n,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut,ft,et,ot,st,ht){function dt(){ct.userMobile=i.session.user.Profile.Mobile;ct.userHasProductPricingPermission=b.hasPermission("Customer/ProductPricing");ct.userHasSalesOrderPermission=b.hasPermission("Customer/SalesOrder");ft.details.Id!==null?(n.info("OC > Retrieving order:",ft.details.Id),ct.getOrder(ft.details.Id)):(n.info("OC > Initialising new order"),y.currentOrderId&&w.add({id:"orderIdChange",type:"info",message:'You\'re now working on a new order. Your previously saved order can be found in your <a href="#/orders/drafts">order drafts<\/a>.',expire:!0}),y.setOrderId(null),y.setOrderAccount(null),si(),yt(null,!0,!0),ct.loadingItems=!1,o(function(){y.initStatus("*",!0)},250))}function vt(n){ct.detailsOpen=angular.isDefined(n)?n:!ct.detailsOpen}function yt(t,f,e){if(ct.items.length>0&&ft.details.AccountId!=null&&ft.details.AccountId!==t.AccountId&&!f){bi(t);return}if(!ft.account||!(angular.equals(t,ft.account)||angular.equals(t,ft.account.AccountId)))if(ft.accounts=k.getActiveData(),t&&angular.isDefined(t)&&(ft.account=t,n.log("OC > Set account > account passed >",ft.account)),r.orderId||ft.account||(y.currentOrderAccount?(ft.account=y.currentOrderAccount,n.log("OC > Set account > Using current active order >",ft.account)):(ft.account=first(ft.accounts),n.log("OC > Set account > First >",ft.account))),ft.account&&!angular.isObject(ft.account)&&(n.log("OC > Set account > Got an Id %s, grabbing the obj",t),ft.account=first(k.get([t]))),ft.account&&angular.isDefined(ft.account)){if(ut.updateOrderSbuConfiguration(ft.account.SbuCode),u.$broadcast("singleAccount.select",ft.account),i.singleAccountSelectorInit=ft.account,ft.details.AccountId=ft.account.AccountId,ft.details.SbuCode=ft.account.SbuCode,ft.details.OrderDocumentType=ct.ops.config.ordersArePullDownType?Enums.orderDocumentType.pulldownOrder:Enums.orderDocumentType.order,n.log("OC > Set account > Using account >",ft.account),pi(ft.account)===!0)return;wi(e)}else n.log("OC > Set account > No account")}function pi(t){return ct.excludedState=t.IsExcludePricing,n.log("OC > Check pricing exclusion >",t.IsExcludePricing?"Abort":"Proceed"),t.IsExcludePricing}function wi(n){p.getAccountDetails().get({accountId:ft.account.AccountId,companyCode:ft.account.CompanyCode,sbuCode:ft.account.SbuCode},function(t){u.$broadcast("accountDetails.loaded",t,n);hi();li(t)})}function bi(n){v.swal({type:"warning",title:"Switch account?",text:"Are you sure? Switching to a different account will clear all items from your order.",showCancelButton:!0,confirmButtonText:"Switch accounts"},function(t){t?(y.clearItems(),ft.details.ProjectAccountId=null,ft.clear(),yt(n,!0),oi()):i.$broadcast("singleAccount.select",ft.account)})}function ki(t){p.order().get({orderId:t||ft.details.Id},function(i){if((n.log("OC > Fetched order",i.details.Id,i.details),di(i)!==!1)&&gi(i)!==!1){y.setOrderId(t,!1,i.details.Reference);ft.details=angular.merge({},i.details,{DesiredFulfillmentDate:new Date(i.details.DesiredFulfillmentDate)});ft.details.AddressLine1==null||typeof ft.details.AddressLine1!="string"||ft.details.AddressLine1.trim().length<1||(ft.optionalSiteAddress=!0);y.initStatus("order",!0);i.details.DesiredFulfillmentLocationCode===null&&y.initStatus("plant",!0);i.details.DesiredFulfillmentTimeSlot===null&&y.initStatus("times",!0);var r=ft.details.OrderType===Enums.orderType.unspecified;r&&n.log("OC > Prefilling unspecified fetched order");yt(i.details.AccountId,!0,r);tr(undefined,{NoTimeslots:!0,TimeslotExpired:!0},"getOrder");kt();y.setJob(ft.details.JobId,!1,!1)}})}function di(n){var i=n.details.AccountId,t=k.getActive().indexOf(i)>-1;return t||v.swal({title:"Order account not selected",text:"The order you're attempting to edit is for an account outside of your current selection.",confirmButtonText:"Go to draft orders"},function(){f.go("app.orderDraftsList")}),t}function gi(n){var t=n.details.Status===Enums.orderStatus.draft;return t||v.swal({title:"Order already placed",text:"The order you're attempting to edit has already been placed, and cannot be edited.",confirmButtonText:"Go to draft orders"},function(){f.go("app.orderDraftsList")}),t}function nr(){ft.details.DesiredFulfillmentDate&&moment(ft.details.DesiredFulfillmentDate).isBefore(ft.minDate,"day")&&(ft.details.DesiredFulfillmentDate=null,ft.details.DesiredFulfillmentTimeSlot=null,ft.details.DesiredFulfillmentTimeSlotCutOff=null,ft.details.DesiredFulfillmentTimeSlotCutOffTime=null,v.info("New date required","The requested date on this draft is no longer valid. Please provide a new date before placing the order."),ct.om.refreshTimeslots({ShowActualAlert:!1}))}function tr(n,t,i){y.updateOrderType(n,t,i)}function ir(n,t,i){nr();ai();i!=="getOrder"&&ft.items.length&&ft.details.Id&&(ct.loadingItems=!0,ct.saveOrder(!1,!1,!0,function(){kt(!0)}))}function ti(n){var t,i;if(ft.totals={freight:n.TotalFreight,isFreightCalculated:n.IsFreightCalculated,freightToolTip:n.FreightToolTip,levies:n.TotalLevies,surcharges:n.TotalSurcharges,subtotal:n.TotalExGst,includedGST:n.TotalGst,total:n.TotalInclGst},n.CumulativeUomQuantities&&n.CumulativeUomQuantities.length>0){for(t={},i=0;i<n.CumulativeUomQuantities.length;i++)t[n.CumulativeUomQuantities[i].UnitOfMeasure]=n.CumulativeUomQuantities[i];ft.totals.uomQuants={};ft.totals.uomQuants.weight=t.KG?t.KG.Total:null;ft.totals.uomQuants.volume=t.M3?t.M3.Total:null;ft.totals.uomQuants.area=t.M2?t.M2.Total:null;ft.totals.uomQuants.pallets=t.PAL?t.PAL.Total:null;ft.totals.uomQuants.weight||ft.totals.uomQuants.volume||ft.totals.uomQuants.area||ft.totals.uomQuants.pallets||(ft.totals.uomQuants=null)}return ft.totals}function rr(t){if(t.preventDefault(),!ft.items||!ft.items.length){v.info("Whoops!","You need to add some products before you can save a favourite");return}n.log("OC > Saving draft order as template...");v.swal({type:"input",title:"Save as favourite order",text:"Please provide a name for your favourite",confirmButtonText:"Save favourite",closeOnConfirm:!1,showCancelButton:!0,showLoaderOnConfirm:!0,inputPlaceholder:"Favourite name",inputValue:ft.details.Reference||null},function(t){if(t===!1)return!1;if(t==="")return swal.showInputError("Please provide a favourite name"),!1;ii(t).then(function(){tt.track("Save Favourite",{source:ct.favouriteSource});v.swal({type:"success",title:"Favourite saved",text:'Saved as "'+t+'"',showCancelButton:!0,confirmButtonText:"Continue order",cancelButtonText:"Favourites list"},function(t){i.$emit("achievements.taskComplete",{taskName:"06CreateFavourite",status:2});t?(n.log("OC > Template Save > Successful"),hi()):f.go("app.templatesList")})})})}function ii(n){return p.saveOrderAsTemplate().save({orderId:ft.details.Id,reference:n},null).$promise}function wt(t,u,e,o){if(t&&t.preventDefault&&t.preventDefault(),i.validationErrors=null,i.form&&i.form.$invalid&&!e){h.validate(i.form,!0);vt(!0);v.swal({type:"warning",title:"Complete your order",text:"Please provide all required details before saving your order"},ri);return}ft.details.Id==null?(n.log("OC > Saving new draft order...",ft.details),delete ft.details.Id):n.log("OC > Updating draft order %s...",ft.details.Id);ft.details.DesiredFulfillmentDate||(n.log("OC > Defaulting date to minimum"),ft.details.DesiredFulfillmentDate=new Date(ft.minDate));var s=moment.utc([ft.details.DesiredFulfillmentDate.getFullYear(),ft.details.DesiredFulfillmentDate.getMonth(),ft.details.DesiredFulfillmentDate.getDate()]).startOf("day").format();ft.details.DesiredFulfillmentDate=new Date(s);ft.details.Id||(ft.orderPendingSave=!0);p.order().save(ft.details,function(e){n.log("OC > ...saved draft order:",e.details);ft.details.Id=e.details.Id;ft.details.AccountId=e.details.AccountId;ft.details.SbuCode=e.details.SbuCode;y.setOrderId(e.details.Id,!1,ft.details.Reference);y.setOrderAccount(ft.account);r.orderId!==e.details.Id&&yi();ct.detailsOpen&&(t&&vt(),oi());t&&(ct.tabs={details:!1,items:!0},scrollToY(0));ft.orderPendingSave=!1;kr();i.form.$setPristine();o&&o(e);u&&v.swal({type:"success",title:"Draft order saved",text:"Would you like to continue editing?",showCancelButton:!0,cancelButtonText:"Go to draft orders",confirmButtonText:"Keep editing"},function(n){n?scrollToY(0):f.go("app.orderDraftsList")})},function(t){t.data.ModelState&&(i.validationErrors=t.data.ModelState);n.error("OC > Error saving draft order:",t);o?o(!1,t.data):t.data==undefined||t.data.ModelState||t.data.indexOf===undefined||t.data.indexOf("Invalid date specified")===-1||bt(t.data)})}function ri(){var n=angular.element("[name='"+i.form.$name+"']").find(".ng-invalid:visible:first");n.length===1?setTimeout(function(){focusOnId(n[0].id);scrollToIdParent(n[0].id)}):scrollToY(0)}function ui(){if(i.form.$setSubmitted(),i.form.$setDirty(),vr()){if(i.form.$invalid){v.swal({title:"Complete your order",text:"Please check that you have provided all details before placing your order.",type:"warning",showCancelButton:!1,confirmButtonText:"Ok"},function(){ri()});h.validate(i.form,!0);vt(!0);return}if(!ct.ops.config.useEstimatedDeliveryDate){if(!ft.details.DesiredFulfillmentTimeSlot)return v.swal({title:"Timeslot Required",text:"You don't seem to have any timeslot selected. Please choose one before placing your order",type:"error",confirmButtonText:"Ok"},function(){ct.om.getPlantDetails(ft.details.DesiredFulfillmentLocationCode)});if(!ft.selectedTimeslotIsAfterCutoff&&ft.details.DesiredFulfillmentTimeSlotCutOff.year()>1&&moment().isAfter(ft.details.DesiredFulfillmentTimeSlotCutOff,ft.details.DesiredFulfillmentTimeSlotCutOffTime==="00:00:00"?"days":"milliseconds"))return v.swal({title:"Timeslot Expired",text:"Unfortunately it's too late to place an order for the requested timeslot. Please choose a new timeslot",type:"error",confirmButtonText:"Ok"},function(){getPlantDetails(ft.details.DesiredFulfillmentLocationCode)})}br()?wr()?gt(!0):fr(ct.atpEarliestFulfillmentDate,gt):gt()}}function ur(){y.updateFulFillmentDate(ct.atpEarliestFulfillmentDate,ft.details.DesiredFulfillmentDate);ct.placingOrder=!0;wt(null,null,!1,function(n){n?ct.confirmAndPlaceOrder():ct.placingOrder=!1})}function fi(){var n=moment().utcOffset();return moment(ct.atpEarliestFulfillmentDate).utcOffset(n).format("DD/MM/YYYY")}function fr(n,t){var i=pt(ot.type.delivery),f=fi(),r=i?ot.type.delivery:ot.type.pickup,e=i?"deliver your order":"have your order available for pickup",o="Please adjust your "+r+" date",s=a("<p>The order contains items that are not available for your "+r+" date.<\/p><p>The earliest we can "+e+" is <b>"+f+"<\/b>.<\/p>"),h="Adjust "+r+" date",u=i?"field-deliverydate":"field-pickupDate";v.swal({type:"warning",title:o,text:s,html:!0,showCancelButton:!0,confirmButtonText:h,cancelButtonText:"Continue with order"},function(n){if(!n){t!=null&&t();return}vt(!0);y.updateFulFillmentDate(ct.atpEarliestFulfillmentDate,ft.details.DesiredFulfillmentDate);setTimeout(function(){focusOnId(u);scrollToId(u)},200);angular.element(u).focus()})}function gt(n){if(ct.orderConfirmed=!1,ct.orderConfirmationPending=!1,ct.orderHasStockIssue=n||!1,ct.orderTimeslotIsAfterCutoff=ft.selectedTimeslotIsAfterCutoff,ct.requestExpeditedOrder=!1,ct.shippingTypeDisplayText=ct.isType(ot.type.pickup)?"pickup":"delivery",ct.om.iterateOverPlantLists(function(n,t){var i=ct.items[t];i.productCount=0}),ct.om.iterateOverItems(function(n,t){var i=ct.items[t];n.Quantity>0&&i.productCount++}),ct.isType(ot.type.pickup)&&!ct.multiplePlantsInPickupOrder){ct.items[0].PlantName=ct.ods.pickupPlantName;ct.items[0].PlantAddress=null;ct.items[0].PlantMeta="";var t=moment(ct.ods.details.DesiredFulfillmentDate).format("ddd D MMM");ct.items[0].PlantMeta=ct.ops.config.useEstimatedDeliveryDate?"Estimated first pickup "+t:ct.ods.details.DesiredFulfillmentTimeSlot+" on "+t}er()}function er(){ct.$modalConfirmation=$("#modal-order-confirmation");ct.$modalConfirmation.modal();ct.$modalConfirmation.on("click","a.closer",function(){ct.$modalConfirmation.modal("hide")})}function or(){ct.ods.saveContact===!0&&ct.ods.usingSavedContact===!1&&p.saveOrderContact().save({accountId:ft.details.AccountId},{ContactName:ft.details.ContactName,ContactNumber:ft.details.ContactPhone}).$promise.then(function(t){n.info("Save Order Contact >",t)})}function sr(n){for(var r,u=!1,f=!1,t=0;t<n.GeneratedOrders.length;t++)n.GeneratedOrders[t].DocumentStatus==Enums.documentStatus.pending&&(u=!0),r=n.GeneratedOrders[t].OrderNumber,(!r||r.isEmpty())&&(f=!0);ct.om.iterateOverItems(function(t,i){for(var u=ct.items[i],e=u.SapPlantId,f=!1,r=0;r<n.GeneratedOrders.length;r++)n.GeneratedOrders[r].DesiredFulfillmentLocationCode===e&&(f=!0,u.orderNumber=n.GeneratedOrders[r].OrderNumber,u.documentStatus=n.GeneratedOrders[r].DocumentStatus);f||(u.orderNumber=n.OrderNumber)});ct.confirmed={orderNumber:n.OrderNumber,hasPendingOrders:u,hasFailedOrders:f,orderPDFUrl:iu(ft.details.AccountId,n.OrderNumber),cashAccount:ft.account.PaymentTerms==="CASH",canMakePayment:b.getPermissions()["All/Payment"],documentStatus:n.DocumentStatus,ordersArePullDownType:ct.ops.config.ordersArePullDownType,canRequestRelease:ct.ops.config.ordersArePullDownType&&n.OrderNumber,canViewRelease:!1};ct.orderConfirmationPending=!1;ct.orderConfirmed=!0;ct.ops.config.ordersArePullDownType||swal.close();i.$emit("achievements.taskComplete",{taskName:"05PlaceOrder",status:2})}function bt(n){v.swal({title:"Sorry",text:n!==undefined?n:"Connect is unable to place your order at this time. Please try again later.",type:"error"})}function hr(){lt.off(at).on(at,function(){f.go("app.orderCreate",null,{reload:!0,inherit:!1})});lt.modal("hide")}function cr(n){lt.off(at).on(at,function(){ct.rds.createReleaseFromOrderNo(n,ct.om.currentOrderAccount.AccountId)});lt.modal("hide")}function lr(){lt.off(at).on(at,function(){location.hash="#/docs?type=3"});lt.modal("hide")}function ar(n){e.set("documentLauncher","app.documents",{$$search:"#/docs?type=3"});lt.off(at).on(at,function(){location.hash="#/docs/"+ct.ods.details.AccountId+(ct.confirmed.ordersArePullDownType?"/pulldownOrders/":"/orders/")+String("0000000000"+n).slice(-10)});lt.modal("hide")}function vr(){var n=!0,t,i;return ct.items.length<1&&(n=!1),ct.om.iterateOverPlantLists(function(r){var u,f;for(t=!0,i=!1,u=0;u<r.Items.length;u++)if(f=r.Items[u],f.Code!=="T"&&(t=!1,f.Quantity!==0)){i=!0;break}return(t||!i)&&(n=!1),n}),n||(ct.multiplePlantsInPickupOrder?v.info("Whoops!","You'll need to ensure all pickup plants have products before you can place this order. You can remove items if they are not required."):v.info("Whoops!","You'll need to add some products to this order before you can place it.")),n}function kt(t){n.log("OC > Line items > Retrieving...");ct.loadingItems=!0;o(function(){p.items().get({OrderId:ft.details.Id},function(i){var r,u;if(n.log("OC > Line items > ... got %s line items >",i.TotalCount,i.Data),i.TotalCount>0){for(ft.items=i.Data,r=0;r<ft.items.length;r++)for(u=0;u<ft.items[r].Items.length;u++)ft.items[r].Items[u].Description=decodeURI(ft.items[r].Items[u].Description);ct.items=ft.items;ct.om.iterateOverItems(function(n){n.isValidating=!0});t||vt(!1);y.validateOrder(ft.details.Id)}else si(),ft.items=[],ct.items=[];y.initStatus("items",!0);ft.initStatus.plant===!1&&ft.details.OrderDocumentType===Enums.orderDocumentType.pulldownOrder&&ct.om.refreshTimeslots({ShowActualAlert:!1});ct.loadingItems=!1},function(t){n.error("OC > Line items > ... failed to retrieve line item(s) >",t);y.initStatus("items",!0);ct.loadingItems=!1})},100)}function oi(){y.validateOrder(null,!0)}function yr(n){ct.om.isAtpEnabled=n.AtpEnabled;ct.atpEarliestFulfillmentDate=n.AtpEarliestFulfillmentDate==null?null:new Date(n.AtpEarliestFulfillmentDate)}function pr(){ct.atLeastOneItemInOrderIsOutOfStock=!1;ct.atLeastOneItemInOrderIsWithLowStock=!1;var n=0;ct.om.iterateOverItems(function(t){t.atpCheckResult==="N"&&(ct.atLeastOneItemInOrderIsOutOfStock=!0);t.atpCheckResult==="L"&&(ct.atLeastOneItemInOrderIsWithLowStock=!0);n++});ct.ods.itemsCount=n}function wr(){return ct.atLeastOneItemInOrderIsOutOfStock}function br(){var n=y.getOrderFulfillmentDate();return!pt("unspecified")&&ct.om.isAtpEnabled&&ct.atpEarliestFulfillmentDate!=null&&ct.atpEarliestFulfillmentDate>n}function kr(){ct.items.length<=0||(ct.om.iterateOverItems(function(n,t,i){ct.items[t].Items[i].changed=!1}),w.remove("orderPriceUpdate"))}function dr(n){n&&n.preventDefault();ft.details.Id?y.deleteOrder(ft.details.Id,ft.details.Reference):f.go("app.orderDraftsList")}function si(){ft.totals={subtotal:0,freight:0,total:0,includedGST:0}}function gr(n){return ct.placeWithoutTotals=n}function hi(){(ct.quickAdd.mostOrdered=null,ft.details.AccountId)&&(d.get({accountId:ft.details.AccountId,$top:10},function(n){n.Items.forEach(function(n){n.Quantity=n.DeliveryBlockSize==null?1:n.DeliveryBlockSize});ct.quickAdd.mostOrdered=n.Items},function(){ct.quickAdd.mostOrdered=[]}),ct.quickAdd.templates=null,g.query({$filter:"contains(AccountId, '"+ft.details.AccountId+"')",$top:10},function(n){ct.quickAdd.templates=n.Items},function(){ct.quickAdd.templates=[]}))}function nu(n){ft.details.Id?ci(n):wt(null,null,!0,function(t){nt.updatePref("CurrentOrderId",t.details.Id,function(){ci(n)})})}function ci(n){y.loadTemplate(n,function(){kt()})}function li(t){if(t){if(t.IsEligibleForRewards===!1||!t.RewardEligibilityAmount||!t.RewardVoucherAmount){ct.rewards=null;return}ct.rewards={amount:t.RewardEligibilityAmount,reward:t.RewardVoucherAmount}}if(ct.rewards){var i=ft.totals.subtotal-ft.totals.freight;i=i>0?i:function(){var t=0;return ct.om.iterateOverItems(function(n){t+=n.Conversion*(n.UnitPriceExcludingGST/n.PricingQuantity)*n.Quantity}),n.warn("OC > Order rewards manually calculated subtotal >",t),t}();ct.rewards.remaining=ct.rewards.amount-i;ct.rewards.progress=100-ct.rewards.remaining/ct.rewards.amount*100;ct.rewards.progressWidth={width:ct.rewards.progress+"%"};ct.rewards.goalReached=ct.rewards.remaining<=0}}function tu(n){$("#modal-rewards-tnc").modal(n?"show":"hide")}function ai(){var n=ct.items.length&&ct.items.length>1;return ct.om.updateItemLevelPlants(),ct.multiplePlantsInPickupOrder=pt(ot.type.pickup)&&n}function pt(n){return Enums.orderType[n]==ft.details.OrderType}function vi(){setTimeout(function(){focusOnId("item-super-search-input");scrollToId("order-add-items");var n=$(".order-add-items");o(function(){n.addClass("flasher");o(function(){n.removeClass("flasher")},400)},400)},200)}function iu(n,t){return n&&t?window.location.href.replace(window.location.hash,"")+"api/products/order/export?accountId="+n+"&documentNo="+t+"&access_token="+b.token():!1}function yi(){ft.details.Id&&!f.params.sapOrderId&&f.go("app.orderEdit",{orderId:ft.details.Id},{inherit:!0,notify:!1})}function ru(){ct.tabs={details:!1,items:!0};vi()}function uu(){ct.tabs={details:!1,items:!0};scrollToId("order-line-items");scrollToId("order-items")}function fu(){l.open({templateUrl:"order-add-favourites-modal.html",size:"lg",controller:["$scope","$modalInstance","oc",function(n,t,i){n.oc=i}],resolve:{oc:function(){return i.oc}}})}function eu(n){return ft.details.DesiredFulfillmentLocationCode===""&&(ft.details.DesiredFulfillmentLocationCode=null),o(function(){i.tooManyResults=!1}),{accountId:ft.details.AccountId,projectAccountId:ft.details.ProjectAccountId,plantId:ft.details.DesiredFulfillmentLocationCode,keyword:n,$top:10,$skip:0,getPlantsPricing:!1,featureName:"Orders"}}function ou(n){var t,r;if(angular.isString(n))return{Items:!1};if(n&&n.Data&&n.Data.Items)for(i.tooManyResults=n.NarrowYourSearchWarning,t=0;t<n.Data.Items.length;t++)r=n.Data.Items[t],r.hasOwnProperty("ImageAssetUri")&&(n.Data.Items[t].ImageAssetUri=productImgSrc("thumb",n.Data.Items[t])),r.hasOwnProperty("Description")&&(n.Data.Items[t].Description=c("titleCase")(r.Description,!0)),r.hasOwnProperty("Code")&&(n.Data.Items[t].Code=c("productCode")(r.Code));return n.Data}function su(n){if(ni()!==!0){if(ft.account.SbuCode==="4300"){i.$broadcast("brickInput.toggle",n.Id);return}focusOnId("qty-"+n.Id,!0)}}function hu(r){var u,f,e;if(r&&(u=angular.copy(r.originalObject||r),!angular.isString(u))){if(u.custom){if(!u.name||!u.name.trim()||u.name===ct.msgs.autocompletePlaceholder)return;u.Code="T";u.Description=u.name;u.SbuCode=ft.account.SbuCode}else u.Code=padProductCode(u.Code),u.Price=u.Quantity*u.Conversion*u.UnitPriceExcludingGST;f=Date.now()+Math.random()*1e8;u.Id=f;u.AccountId=ft.account.AccountId;u.PricingAvailability||(u.isValidating=!0);u.tempId=f;u.Code!=="T"&&ni()===!0?(e=l.open({templateUrl:"add-item-with-quantity-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{item:u},controller:t,controllerAs:"addItemWithQuantityModal"}),e.result.then(function(t){n.log("Adding item from modal",t);y.addItemWithRules(t);y.addItem(t,ft.details.Id)}),i.$on("$destroy",function(){e.close()})):(y.addItemWithRules(u),y.addItem(u,ft.details.Id))}}function ni(){return window.innerWidth<=500&&window.innerHeight<=800?!0:!1}var ct=this,lt,at,ei;ct.ods=ft;ct.ops=ut;ct.om=y;ct.rds=st;ct.orderTypes=ot.type;ct.docStatuses=Enums.documentStatus;ct.favouriteSource=undefined;ct.showFooter=!0;ct.Enums=Enums;ct.orderType=keyFlip(ct.Enums.orderType);y.init(r.orderId);r.jobId?y.setJob(r.jobId,!0,!1):et.init(null,!1);ft.minDate=y.getMinimumOrderDate();ct.pageTitle=f.current.pageTitle;ct.orderTypeDisplayText="order";ct.items=ft.items;ct.userMobile=null;ct.quickAdd={};ct.confirmed={};ct.detailsOpen=!0;ct.placeWithoutTotals=!1;ct.excludedState=!1;ct.atpEarliestFulfillmentDate=null;ct.userHasProductPricingPermission=!1;ct.userHasSalesOrderPermission=!1;ct.atLeastOneItemInOrderIsOutOfStock=!1;ct.atLeastOneItemInOrderIsWithLowStock=!1;ct.multiplePlantsInPickupOrder=!1;ct.loadingItems=!0;ct.isValidating=!1;ct.placingOrder=!1;ct.setAccount=yt;ct.getOrder=ki;ct.saveOrder=wt;ct.placeOrder=ui;ct.updateTotals=ti;ct.loadTemplate=nu;ct.deleteDraftOrder=dr;ct.saveOrderAsTemplate=rr;ct.addItemsBtn=vi;ct.orderRewardsTnc=tu;ct.modalStartNewOrder=hr;ct.modalRequestRelease=cr;ct.modalGoToOrders=lr;ct.modalNavigateToDoc=ar;ct.isType=pt;ct.getEarliestAtpFulfillmentDate=fi;ct.amendOrderDateAndPlaceOrder=ur;i.placeOrder=ui;i.$on("accounts.changed",dt);i.$on("singleAccount.selected",function(n,t){yt(t,null,!0);ft.details.ProjectAccountId=null});i.$on("order.changed",function(n,t){t&&(ft.details.Id=t,yi())});i.$on("order.orderTypeUpdated",ir);i.$on("itemsearch.showdropDown",function(n,t){console.log("Triggered itemsearch.showdropDown",t);ht.innerWidth<=768&&o(function(){ct.showFooter=!t})});k.isReady()?dt():(n.log("OC > Init > Deferring until accounts ready"),i.$on("accounts.dataReady",dt));ct.toggleDetails=vt;ct.quickFavourite={enabled:!1,name:null,select:function(){this.name=this.enabled?ct.ods.details.Reference:null;this.enabled&&focusOnId("order-confirm-quick-favourite-name",!0)},nameChange:function(){this.enabled=isNotNullOrEmpty(this.name)},save:function(){this.enabled&&(tt.track("Save Favourite",{source:"Quick Favourite"}),ii(this.name||ct.ods.details.Reference))}};ct.$modalConfirmation=null;ct.confirmAndPlaceOrder=function(n){ct.orderConfirmationPending=!0;ct.requestExpeditedOrder=n;ct.placingOrder=!0;wt(null,null,!1,function(t,r){t?(ct.quickFavourite.save(),or(),y.placeOrder(ft.details.Id,n),i.$emit("csat.showTray",{feature:"orders",trigger:"orderPlaced"})):(r==undefined||r.ModelState||r.indexOf===undefined||r.indexOf("Invalid date specified")===-1?bt():bt(r),ct.orderConfirmationPending=!1,ct.placingOrder=!1)})};i.$on("order.placed",function(t,i){i&&(sr(i),n.info("placed order",i));ct.placingOrder=!1});i.$on("order.failed",function(n,t){bt(t);ct.placingOrder=!1});lt=$("#modal-order-confirmation");at="hidden.bs.modal";ei=debounce(function(){kt()},3e3);i.$on("order.itemAdded",ei);u.$on("order.validationComplete",function(){ct.isValidating=!1});u.$on("order.validating",function(){ct.isValidating=!0});i.$on("order.validated",function(t,i){var r=i.Result===1,u=i.TotalExGst===0;(r||u)&&n.log("OC > Validate > has errors or null totals",r||u,r,u);gr(r||u);ti(i);li();yr(i)});i.$on("order.itemsupdated",function(){ai();pr()});ct.isType=pt;ct.focusAddItemsTextBox=ru;ct.viewCart=uu;ct.showAddFavouritesModal=fu;ct.productSearchApiFn=eu;ct.productSearchResponseFn=ou;ct.msgs={autocompletePlaceholder:"Add items by searching product code or description"};ct.focusQuantitySelector=su;ct.addItem=hu;ct.isMobileDevice=ni;i.$watch("oc.newItem",ct.addItem);ct.tabs={details:!0,items:!1};ct.saveAndEnterItems=function(){ct.saveOrder(arguments);ct.tabs.items=!0}}function t(n,t,i){var r=this;r.item=n;r.displayCode=n.Code.replace(/^0+/,"");i(function(){if(n.SbuCode==="4300")$scope.$broadcast("brickInput.toggle",n.Id);else{var t=document.getElementById("qty-"+n.Id);t&&(t.focus(),t.select())}},250);r.addItem=function(){return t.close(r.item)};r.closeModal=function(){return t.close()}}angular.module("app.ordersv2").controller("OrderCreateController",n);n.$inject=["$log","$scope","$stateParams","$rootScope","$state","$previousState","$timeout","$interpolate","$validation","$filter","$modal","$sanitize","SweetAlert","ordersManager","ordersv2","notificationService","authService","accountsService","freqOrderedProducts","orderTemplates","userPreferencesService","metrics","metricEvents","utilService","orderPolicyService","ordersData","jobData","ORDER","releaseData","$window"];t.$inject=["item","$modalInstance","$timeout"]}(),function(){"use strict";function n(n,t,i){function f(){return t.hasPermission("Customer/ProductPricing")}function e(){return t.hasPermission("Customer/OnlineOrdering/OverrideOrderingBlock")}function o(n){return u(n.SbuCode),r.config.addressRequired=s(n),r.config}function u(t){var f,u;if(!t)return r.config;if(n.log("OP > updateOrderSbuConfiguration > Loading Config for sbu",t),f=selectByProp("SbuCode",t,i),!f){n.log("OP > updateOrderSbuConfiguration > Config load failed",t);throw"Failed to load config entry for "+t;}return u=f.result,r.config.isOrderingEnabled=u.OrderIsOrderingEnabled||e(),r.config.isOrderUploadEnabled=u.OrderUploadEnabled,r.config.jobsiteAddressRequired=u.OrderJobsiteAddressRequired,r.config.isProjectCalledBuilder=u.OrderIsProjectCalledBuilder,r.config.showEmptyProjectOption=u.OrderShowEmptyProjectOption,r.config.canSetPickupPlants=u.OrderCanSetPickupPlants,r.config.usePrimaryShipToAddress=u.OrderUsePrimaryShipToAddress,r.config.useDefaultFulfillmentLocation=u.OrderUseDefaultFulfillmentLocation,r.config.useEstimatedDeliveryDate=u.OrderUseEstimatedDeliveryDate,r.config.canHaveBuilderName=u.OrderCanHaveBuilderName,r.config.canSetProject=u.OrderCanSetProject,r.config.ordersArePullDownType=u.OrdersArePullDownType,r.config.deliveryAvailable=!u.OrdersArePickupOnly,r.config.isNz=!!u.IsNz,n.log("OP > updateOrderSbuConfiguration > Config load complete",r.config),r.config}function s(n){return n.OrderType!==Enums.orderType.delivery&&r.config.jobsiteAddressRequired||n.OrderType===Enums.orderType.delivery}var r={config:{addressRequired:!0,jobsiteAddressRequired:!1,isProjectCalledBuilder:!0,showEmptyProjectOption:!0,canSetPickupPlants:!0,usePrimaryShipToAddress:!1,useDefaultFulfillmentLocation:!1,isOrderingEnabled:!0,isOrderUploadEnabled:!0,useEstimatedDeliveryDate:!1,canHaveBuilderName:!0,canSetProject:!0,ordersArePullDownType:!1},userHasProductPricingPermission:f,updateOrderConfiguration:o,updateOrderSbuConfiguration:u};return r}angular.module("app.ordersv2").factory("orderPolicyService",n);n.$inject=["$log","authService","SBU_CONFIG"]}(),function(){"use strict";function t(){function t(){n.items=[];n.pricePlantPendingItems=[];n.itemsCount=0;n.totals=!1;n.details={}}function i(t){n.items=[];n.pricePlantPendingItems=[];n.itemsCount=0;n.totals=!1;n.details={Id:t||null,Reference:null,AccountId:null,ProjectAccountId:null,SbuCode:null,Status:Enums.orderStatus.draft,OrderType:Enums.orderType.unspecified,OrderRecordType:Enums.orderRecordType.order,ClickAndCollectEnabled:!1,LotUnit:"",AddressLine1:"",Suburb:"",State:"NSW",Country:"AU",Postcode:"",DesiredFulfillmentDate:null,DesiredFulfillmentTimeSlot:null,DesiredFulfillmentTimeSlotCutOff:null,DesiredFulfillmentTimeSlotCutOffTime:null,DesiredFulfillmentRegion:"NSW",DesiredFulfillmentLocationCode:null,DesiredFulfillmentType:null,BusinessName:null,ContactName:null,ContactPhone:null,BuilderName:null,Note:null,SmsEnabled:!1,SmsNumber:"",JobId:null,PreviousFulfillmentDate:null};n.shipTo=null;n.shipToAccounts=null;n.deliveryTypes={};n.deliveryTimeSlots=null;n.deliverySmsStatus={orderSmsEnabled:!1,plantSmsEnabled:!1,customerSmsEnabled:!1};n.projectPricing=null;n.TimeslotsPending=!1;n.pickupLocations=[];n.pickupPlantName=null;n.optionalSiteAddress=!1;n.initialised=!1;n.initStatus={order:!1,items:!1,plant:!1,times:!1};n.orderPendingSave=!1;n.accounts=[];n.account=null;n.minDate=null;n.maxDate=null}return n={init:i,items:[],itemsCount:0,totals:!1,details:{Id:null,Reference:null,AccountId:null,ProjectAccountId:null,SbuCode:null,Status:Enums.orderStatus.draft,OrderType:Enums.orderType.unspecified,OrderRecordType:Enums.orderRecordType.order,ClickAndCollectEnabled:!1,LotUnit:"",AddressLine1:"",Suburb:"",State:"NSW",Country:"AU",Postcode:"",DesiredFulfillmentDate:null,DesiredFulfillmentTimeSlot:null,DesiredFulfillmentTimeSlotCutOff:null,DesiredFulfillmentTimeSlotCutOffTime:null,DesiredFulfillmentRegion:"NSW",DesiredFulfillmentLocationCode:null,DesiredFulfillmentType:null,BusinessName:null,ContactName:null,ContactPhone:null,BuilderName:null,Note:null,SmsEnabled:!1,SmsNumber:"",JobId:null},shipTo:null,shipToAccounts:null,deliveryTypes:{},deliveryTimeSlots:null,deliverySmsStatus:{orderSmsEnabled:!1,plantSmsEnabled:!1,customerSmsEnabled:!1},projectPricing:null,TimeslotsPending:!1,pickupLocations:[],pickupPlantName:null,optionalSiteAddress:!1,initialised:!1,initStatus:{order:!1,items:!1,plant:!1,times:!1},orderPendingSave:!1,accounts:[],account:null,minDate:null,maxDate:null,job:null,clear:t,usingSavedContact:!1,saveContact:!1,pricePlantPendingItems:[]}}angular.module("app.ordersv2").factory("ordersData",t);var n=null}(),function(){"use strict";function n(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g){function li(n){w.init(n)}function ai(){var n=!(p.orderId||null)||!w.items.length;return!n}function vi(){return t.log("OPS > getMinimumOrderDate"),moment().add(1,"d").format("YYYY-MM-DD")}function yi(){return{AddressLine1:null,Suburb:null,Country:"AU",State:"NSW",Postcode:null}}function pi(){w.details.DesiredFulfillmentDate||(t.log("ordersManager > Defaulting date to minimum"),w.details.DesiredFulfillmentDate=new Date(w.minDate));w.details.DesiredFulfillmentDate instanceof Date||(w.details.DesiredFulfillmentDate=new Date(w.details.DesiredFulfillmentDate));var n=moment.utc([w.details.DesiredFulfillmentDate.getFullYear(),w.details.DesiredFulfillmentDate.getMonth(),w.details.DesiredFulfillmentDate.getDate()]).startOf("day").format();return new Date(n)}function wi(n,i){lt();var u=!0,r,f=tt(d.type.delivery);f?(t.log("ordersManager > Init as delivery"),r=moment().add(1,"d")):tt(d.type.pickup)?(t.log("ordersManager > Init as pickup"),r=moment()):(t.log("ordersManager > Init as unspecified"),ft("plant",!0),u=!1);r!=null&&(w.minDate=r.format("YYYY-MM-DD"));u&&((w.details.DesiredFulfillmentDate==undefined||w.details.DesiredFulfillmentDate==null)&&(w.details.DesiredFulfillmentDate=r.toDate()),Enums.orderType[d.type.unspecified]==w.previousType&&i!=null&&(i.ShowActualAlert=!1),f?st(null,i):yt(i));w.previousType=w.details.OrderType}function lt(){w.details&&b.updateOrderConfiguration(w.details);b.config.deliveryAvailable===!1&&w.details.OrderType!==Enums.orderType.pickup&&(w.details.OrderType=Enums.orderType.pickup)}function it(n,r,u){return r===!0?(nt.currentOrderId=n,!0):(n&&nt.currentOrderId!==null&&nt.currentOrderId!==n&&c.add({id:"orderIdChange",type:"info",message:(u?"You're now editing <strong>"+u+"<\/strong>":"Your active order has changed")+". All changes to your previous order have been saved.",expire:!0}),t.log("ordersManager > Set orderId: %s",n),nt.currentOrderId=n,i.$broadcast("order.changed",n),h.updatePref("CurrentOrderId",n),!0)}function et(n){n&&n.hasOwnProperty("AccountId")?(t.log("ordersManager > Set account: %s",n.AccountId),nt.currentOrderAccount=n):(t.log("ordersManager > Account cleared"),nt.currentOrderAccount=null)}function bi(n,u){var f=u?'"'+u+'"':"this draft order";e.swal({title:"Delete order",text:"Are you sure you want to delete "+f+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete order",closeOnConfirm:!1,showLoaderOnConfirm:!0},function(u){u&&(n?l.order().delete({orderId:n},function(){w.clear();n===nt.currentOrderId&&(it(null),i.$broadcast("order.deleted",!1));e.swal({type:"success",title:"Order deleted",timer:2e3});t.log("ordersManager > Deleted order %s",n);r.go("app.orderDraftsList")}):(t.log("ordersManager > Cancelled unsaved order"),i.$broadcast("order.deleted",!1),r.go("app.orderDraftsList")))})}function bt(){return w.details&&w.details.AccountId?w.details.AccountId:n.currentOrderAccount?n.currentOrderAccount:s.getActiveData()[0]?s.getActiveData()[0]:null}function kt(n,r,u){var f,e,o;if(!u&&(!angular.isDefined(n.AccountId)||n.AccountId==null||!n.tempId)){if(u=!0,n=angular.copy(n),angular.isDefined(n.AccountId)&&n.AccountId!=null||(n.AccountId=bt()),n.AccountId==null)return t.error("ordersManager > Add item > Failed due to no account"),!1;if(angular.isDefined(n.tempId)&&angular.isDefined(n.Id)||(f=Date.now()+Math.random()*1e8,n.Id=f,n.tempId=f,n.Quantity=n.Quantity==null?n.DeliveryBlockSize||1:n.Quantity,dt(n)),n.UnitPriceExcludingGST==null||n.Quantity==null)return t.log("ordersManager > Add item > No quantity or pricing, skipping addItem",n),!1}return ti(n,r,u)?(nt.isType(d.type.pickup)&&n.Code==="T"&&!(n.PickupPlantId||n.PlantId)&&w.items.length>=1&&(e=w.items[w.items.length-1],n.PickupPlantId=e.PickupPlantId||e.PlantId),o={Code:n.Code,Price:n.Price,Quantity:n.Quantity,QuantityUOM:n.QuantityUOM,UnitPriceExcludingGST:n.UnitPriceExcludingGST,ImageAssetUri:n.ImageAssetUri,Conversion:n.Conversion,MinimumOrderQuantity:n.MinimumOrderQuantity,PricingQuantity:n.PricingQuantity,PricingUOM:n.PricingUOM,OrderId:nt.currentOrderId,PickupPlantId:n.PickupPlantId||n.PlantId,DeliveryBlockSize:n.DeliveryBlockSize,DeliveryUOM:n.DeliveryUOM,PricingAvailability:n.PricingAvailability},n.Code==="T"&&(o.Description=encodeURI(n.Description)),i.$broadcast("order.itemAdding",n),l.items().save({OrderId:nt.currentOrderId},o,function(t){n.Id=t.Id;n.OrderId=nt.currentOrderId;g.applyPlantPricingToItem(n,t);i.$broadcast("order.itemAdded",n)},function(n){t.error("ordersManager > Add item > Failed:",n)})):(t.log("ordersManager > Add item > Check Order Id failed, skipping additem",n),!1)}function dt(n){if(n.PickupPlantId=n.PickupPlantId||n.PlantId,nt.isType(d.type.pickup)&&n.PickupPlantId){if(!n.PricingAvailability){w.pricePlantPendingItems.push(n);i.$broadcast("order.itemAdding",n);return}var t=selectByProp("PlantId",n.PickupPlantId,w.items);t?ot(n,t.idx):at(n)}else w.items.length<1?at(n):ot(n,w.items.length-1)}function ot(n,t,i){var r=w.items[t].Items;i!==undefined?r.splice(i,0,n):r.push(n)}function at(n){w.items.push({SapPlantId:n.PickupSapPlantId,PlantId:n.PickupPlantId,PlantAddress:n.PickupPlantAddress,PlantName:n.PickupPlantName,Items:[n]});ki(n.PickupPlantId)}function ki(n){var r,t,i,u;if(n&&(r=selectByProp("PlantId",n,w.items),r))for(t=w.items.length-1;t>=0;t--)if(i=w.items[t],i.Items){for(u=i.Items.length-1;u>=0;u--)gt(i.Items,u,r.idx,n);i.Items.length===0&&w.items.splice(t,1)}else gt(w.items,t,r.idx,n)}function gt(n,i,r,u){var f=n[i];f.Code!=="T"||f.PickupPlantId||f.PlantId||(n.splice(i,1),ot(f,r,0),f.PickupPlantId=u,l.reorderItems().save({orderId:w.details.Id,id:f.Id},{orderId:w.details.Id,orderItemId:f.Id,sortOrder:0,pickUpPlantId:u},function(n){t.log("ordersManager > Reorder item > Successful >",n)}))}function di(n,r){ti(n,n.OrderId,null,!0)&&l.items().delete({id:n.Id,orderId:n.OrderId},function(){t.log("ordersManager > Item > ...removed",n);i.$broadcast("order.itemRemoved",n,r)},function(n){t.error("ordersManager > Item > ...unable to remove item",n);c.handleProblem("remove items from your order")})}function gi(n){var t={orderId:nt.currentOrderId},r=n!==null&&n!==undefined;r&&(t.plantId=n);l.clearAllItems().save(t,null,function(){i.$broadcast("order.itemsCleared",r)})}function ni(){w.totals=!1}function nr(n){return n==null&&(n=nt.currentOrderId),rt[n]===!0}function vt(n){n==null&&(n=nt.currentOrderId);rt[n]=!1;i.$broadcast("order.validationComplete",n)}function tr(n){n==null&&(n=nt.currentOrderId);rt[n]=!0;i.$broadcast("order.validating",n)}function ir(n,r){if(w.pricePlantPendingItems.length){t.log("ordersManager > Validate > Skipping validate until all price pending items cleared ...");return}t.log("ordersManager > Validate > Validating order...");r&&ni();n==null&&(n=nt.currentOrderId);i.$broadcast("order.validating",n);rt[n]=!0;l.validateOrder().get({orderId:n},function(r){t.log("ordersManager > Validate > ... validation successful >",r);i.$broadcast("order.validated",r);vt(n)},function(r){r.status!==-1&&(t.error("ordersManager > Validate > ... validation failed > ",r),i.$broadcast("order.invalid",r),vt(n),c.handleProblem("get pricing for your order"))})}function rr(n,r){t.log("ordersManager > Place > Placing order...");l.placeOrder().get({orderId:n||nt.currentOrderId,expeditedOrder:typeof r=="undefined"?!1:r},function(n){t.log("ordersManager > Place > ... order placed successful >",n);it(null);k.clearJob();u(function(){i.$broadcast("order.placed",n)})},ur)}function ur(n){t.error("ordersManager > Place > ... order failed to be placed > ",n);i.$broadcast("order.failed",n)}function fr(n,t){n!==t&&(w.details.DesiredFulfillmentDate=new Date(n),w.details.PreviousFulfillmentDate=t,ut({NoTimeslots:!0,TimeslotExpired:!1}))}function er(n,t){n!==t&&(w.details.DesiredFulfillmentDate=new Date(n))}function or(n,t,r){(w.details.OrderType!==n||t!=null)&&(angular.isDefined(n)&&(w.details.OrderType=n),scrollToId("deliverypickupselector"),n===2?u(function(){focusOnId("field-addressline21001",!0)},1e3):u(function(){focusOnId("field-pickuplocation-p",!0)},1e3),i.$broadcast("order.orderTypeUpdated",t!=null?t:{NoTimeslots:!0},r))}function ti(n,i,u,f){var h,c;if(nt.currentOrderId){var l=nt.currentOrderId===i,o=nt.currentOrderAccount&&nt.currentOrderAccount.AccountId===n.AccountId,a=u&&o;if(l||a)return t.log("ordersManager > Using current order > %s",nt.currentOrderId),!0;if(t.log("INCOMPATIBLE > ",nt.currentOrderAccount,i,getObjectByString(nt,"currentOrderAccount.AccountId"),n.AccountId),!i&&f!==!0)return h="You're already working on an order for<br>                                <strong>"+nt.currentOrderAccount.Name1+"<\/strong> "+nt.currentOrderAccount.AccountId+".<br><br>                                Are you sure you'd like to start a new order?",o||(c=first(s.get([n.AccountId])),h="You're currently working on an order for<br>                                <strong>"+nt.currentOrderAccount.Name1+"<\/strong> "+nt.currentOrderAccount.AccountId+".<br><br>                                Would you like to start a new order with<br>                                <strong>"+c.Name1+"<\/strong> "+c.AccountId+"?"),e.swal({type:"warning",title:"Start new order?",text:h,showCancelButton:!0,confirmButtonText:"Start new order",cancelButtonText:o?"Go to existing order":"Cancel",html:!0},function(t){t?ri(n,!1):o&&r.go("app.orderEdit",{orderId:nt.currentOrderId})}),!1}return nt.currentOrderId==null?angular.isDefined(i)&&i!=null?(it(i),et(n.AccountId),t.log("ordersManager > Using passed order > %s",i),!0):(ri(n,u,!0),!1):i!=null&&nt.currentOrderId!==i?(it(i),t.error("ordersManager > Switched order to %s",i),!0):(t.error("ordersManager > Failed to determine order"),!1)}function ii(n,i){t.log("ordersManager > Creating a new draft order...");var r=new Date;w.orderPendingSave=!0;l.order().save({AccountId:n.AccountId,Status:Enums.orderStatus.draft,OrderType:Enums.orderType.unspecified,OrderRecordType:Enums.orderRecordType.order,SbuCode:n.SbuCode,DesiredFulfillmentDate:moment.utc([r.getFullYear(),r.getMonth(),r.getDate()]).startOf("day").add(1,"d").format(),OrderDocumentType:b.config.ordersArePullDownType?Enums.orderDocumentType.pulldownOrder:Enums.orderDocumentType.order},function(n){t.log("ordersManager > ...created new draft order > %s",n.details.Id);it(n.details.Id);et(first(s.get([n.details.AccountId])));i&&i(n)})}function ri(n,t,i){ii(n,function(r){if(i)for(var u in r.details)(r.details.hasOwnProperty(u)&&r.details[u]!==undefined&&r.details[u]!==null&&(w.details[u]===undefined||w.details[u]===null)||u==="Id"||u==="AccountId"||u==="SbuCode")&&(w.details[u]=r.details[u]);else w.details=r.details;w.details.Country===null&&(w.details.Country="AU");l.order().save(w.details,function(){kt(n,r.details.Id,t);w.orderPendingSave=!1})})}function sr(n){ii(n,function(t){h.updatePref("CurrentOrderId",t.details.Id,function(){ui(n,function(n){r.go("app.orderEdit",{orderId:n});w.orderPendingSave=!1})})})}function ui(n,i){nt.currentOrderId||(w.orderPendingSave=!0);l.loadOrderFromTemplate().update({templateId:n.Id},null,function(r){t.log("Added template to order > Successful");e.swal({type:"success",title:"Favourite added to order",text:"All items from <strong>"+f(n.Reference||"your favourite")+"<\/strong> have been added to your order",html:!0});w.orderPendingSave=!1;i&&i(r.orderId)})}function hr(n,i){var u,r;if(t.log("ordersManager > Populating ShipToAccounts ...",n,i),b.config.canSetProject&&n&&n.length){for(t.log("ordersManager > Got %s ShipTo accounts >",n.length,n),u=[],r=0;r<n.length;r++)n[r].AccountId&&(n[r].Name?(n[r].displayName=n[r].AccountId+" - "+n[r].Name,u.push(n[r])):b.config.usePrimaryShipToAddress&&n[r].PrimaryAddress&&(w.shipTo={Country:n[r].Country,State:n[r].State,PlantId:n[r].PlantId}));t.log("ordersManager > Kept %s ShipTo accounts >",u.length,u);w.shipToAccounts=u.length>0?u:null;i?cr():lr()}else w.shipToAccounts=null}function cr(){if(b.config.usePrimaryShipToAddress){w.details.DesiredFulfillmentLocationCode||fi();return}w.shipToAccounts&&w.shipToAccounts.length&&yr()}function lr(){if(b.config.usePrimaryShipToAddress){w.details.DesiredFulfillmentLocationCode||fi();return}w.shipTo=null;w.shipToAccounts&&w.shipToAccounts.length&&w.details.ProjectAccountId&&pr();b.config.useDefaultFulfillmentLocation&&!b.config.usePrimaryShipToAddress&&w.shipTo&&w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentRegion=w.shipTo.State,w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId)}function ar(n){w.projectPricing=w.shipTo.HasProjectPricing?w.shipTo:null;w.details.ProjectAccountId=w.shipTo.AccountId;tt(d.type.delivery)?((b.config.usePrimaryShipToAddress||n)&&ct({AddressLine1:w.shipTo.Street,Suburb:w.shipTo.Suburb,Country:w.shipTo.Country,State:w.shipTo.State,Postcode:w.shipTo.PostCode}),b.config.useDefaultFulfillmentLocation&&w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentRegion=w.shipTo.State,w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId),st()):tt(d.type.pickup)&&(w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentRegion=w.shipTo.State,w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId),yt());t.log("ordersManager > ShipTo account applied",w.projectPricing?"with project pricing":"",w.shipTo)}function vr(n){var t=n?selectByProp("AccountId",n.toString(),w.shipToAccounts):!1;w.shipTo=t?t.result:null}function yr(){var n=selectByProp("AccountId",w.details.AccountId,w.shipToAccounts);(n?(w.shipTo=n.result,t.log("ordersManager > Set ShipTo > Default to SoldTo match",n)):w.shipToAccounts.length===1&&(w.shipTo=first(w.shipToAccounts),t.log("ordersManager > Set ShipTo > Default to first",n)),w.shipTo)&&(w.shipTo.State&&(w.details.DesiredFulfillmentRegion=w.shipTo.State),w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId),w.details.ProjectAccountId=w.shipTo.AccountId,w.projectPricing=w.shipTo.HasProjectPricing?w.shipTo:null,ct({AddressLine1:w.shipTo.Street,Suburb:w.shipTo.Suburb,Country:w.shipTo.Country,State:w.shipTo.State,Postcode:w.shipTo.PostCode}))}function fi(){var n=yi();w.shipTo&&w.shipTo.Country&&w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentRegion=w.shipTo.State,w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId,angular.merge(n,{Country:w.shipTo.Country,State:w.shipTo.State}));ct(n)}function pr(){w.shipTo=null;for(var n=0;n<w.shipToAccounts.length;n++)if(w.shipToAccounts[n].AccountId===w.details.ProjectAccountId){w.shipTo=w.shipToAccounts[n];!w.details.DesiredFulfillmentLocationCode&&w.shipTo.State&&w.shipTo.PlantId&&(w.details.DesiredFulfillmentRegion=w.shipTo.State,w.details.DesiredFulfillmentLocationCode=w.shipTo.PlantId);w.projectPricing=w.shipTo.HasProjectPricing?w.shipTo:null;t.log("ordersManager > Set ShipTo >",w.shipTo);break}}function ei(n){var i={OrderType:w.details.OrderType,AccountId:w.details.AccountId,ProjectAccountId:w.details.ProjectAccountId,SbuCode:w.details.SbuCode,DesiredFulfillmentDate:w.details.DesiredFulfillmentDate},r;return tt(d.type.pickup)&&n?(i.DesiredFulfillmentLocationCode=n,r=first($.grep(w.pickupLocations,function(t){return t.PlantId===n})),w.pickupPlantName=r.PlantName,t.log("ordersManager > Plant lookup > Pickup plant set to %s",w.pickupPlantName),i.ClickAndCollectEnabled=w.details.ClickAndCollectEnabled=r.ClickAndCollectEnabled,t.log("ordersManager > Click and collect query value set to ",i.ClickAndCollectEnabled)):tt(d.type.delivery)&&w.account.canSpecifyDeliveryPlant&&n?i.DesiredFulfillmentLocationCode=n:(i.AddressLine1=w.details.AddressLine1,i.Suburb=w.details.Suburb,i.State=w.details.State,i.Country=w.details.Country,i.Postcode=w.details.Postcode),i}function wr(n){n.PlantSmsStatus!=undefined?(w.deliverySmsStatus.orderSmsEnabled=n.PlantSmsStatus.OrderSmsEnabled,w.deliverySmsStatus.plantSmsEnabled=n.PlantSmsStatus.PlantSmsEnabled,w.deliverySmsStatus.customerSmsEnabled=n.PlantSmsStatus.CustomerSmsEnabled):w.deliverySmsStatus.plantSmsEnabled=!1}function yt(n){var i=w.details.DesiredFulfillmentRegion;w.pickupLocations=null;u(function(){w.account&&i&&(t.log("ordersManager > Plants > Fetching pickup locations for %s in %s...",w.account.SbuCode,i),l.pickupLocation().get({accountId:w.account.AccountId,state:i,sbuCode:w.account.SbuCode},function(i){var r=i.data;t.log("ordersManager > Plants > ...got %s pickup locations",r.length,r);r.length?(w.pickupLocations=null,w.deliveryTimeSlots=null,kr(r,n)):gr()}))})}function br(n){var t=selectByProp("Description",n,w.deliveryTimeSlots);t&&(w.selectedTimeslotIsAfterCutoff=t.result.IsAfterCutoff,w.details.DesiredFulfillmentTimeSlotCutOff=moment(t.result.CutOffDateTime))}function oi(n,i){w.deliveryLocations=null;w.deliveryPlantId=null;t.log("ordersManager > Plants > Fetching delivery locations for %s...",n);l.deliveryLocation().get({plantId:n,sbuCode:w.account.SbuCode},function(r){var f=r.data,e,u,o;if(t.log("ordersManager > Plants > ...got %s delivery locations",f.length,f),f.length){for(w.deliveryLocations=f,w.deliveryPlantId=n,e=!1,u=0;u<w.deliveryLocations.length;u++)if(w.deliveryLocations[u].PlantId===n){e=!0;ht(w.deliveryLocations[u]);break}e||(o=first(w.pickupLocations),ht(o));ut(i)}})}function kr(n,t){var f=w.details.DesiredFulfillmentRegion,e=w.details.DesiredFulfillmentLocationCode,r=!1,i,u;for(w.pickupLocations=n,i=0;i<w.pickupLocations.length;i++)if(w.pickupLocations[i].Region===f&&w.pickupLocations[i].PlantId===e){r=!0;ht(w.pickupLocations[i]);break}r||(u=first(w.pickupLocations),ht(u));ut(t)}function dr(n,i,r){var f=[],u,o;n.Data.length?(u=first(n.Data),t.log("ordersManager > Plant lookup > Got plant %s with %s timeslot(s)",u.DesiredFulfillmentLocationCode,n.Data.length,n.Data),tt(d.type.delivery)&&(w.details.DesiredFulfillmentLocationCode=u.DesiredFulfillmentLocationCode,w.details.DesiredFulfillmentRegion=w.details.State),angular.forEach(n.Data,function(n){f.push(n)})):(t.log("ordersManager > Plant lookup > Failed to get any plant timeslots >",n),w.details.DesiredFulfillmentTimeSlot=null,w.details.DesiredFulfillmentTimeSlotCutOff=null,w.details.DesiredFulfillmentTimeSlotCutOffTime=null,i&&i.NoTimeslots&&(o=ei(r),l.nextDateForPlant().get(o,function(n){var r=n.date!==null&&n.date!==undefined,t;r?(t=n.date.split("/"),w.details.DesiredFulfillmentDate=new Date(t[2],t[1]-1,t[0]),ut()):w.details.DesiredFulfillmentDate=w.details.PreviousFulfillmentDate;(i.ShowActualAlert==null||i.ShowActualAlert!==!1)&&e.info("New date required","There are no time slots available for the selected date. The date has been "+(r?"proposed for you.":"reverted back to the previous one.")+" Please provide a new date before placing the order.")})));w.deliveryTimeSlots=f}function ut(n){w.TimeslotsPending=!0;w.details.DesiredFulfillmentDate!=null?st(w.details.DesiredFulfillmentLocationCode,n):(w.TimeslotsPending=!1,ft("plant",!0))}function st(n,r){var u=!1,f;if(tt(d.type.pickup)&&(u=pt()),u.length&&w.details.OrderDocumentType===Enums.orderDocumentType.pulldownOrder)si(),t.log("ordersManager > Plant details > Pickup plants are defined at the line item level for this order, found: %s",w.pickupPlantName),ft("plant",!0),w.TimeslotsPending=!1;else{if(tt(d.type.pickup)&&!n)return;if(b.config.useEstimatedDeliveryDate){w.TimeslotsPending=!1;return}f=ei(n);l.plantDetails().get(f,function(t){hi(t,r,n);w.account.canSpecifyDeliveryPlant&&!n&&w.deliveryPlantId!==t.plantId&&oi(t.plantId,r)},function(n){i.$broadcast("order.plantdetailslookupfailure",n);w.TimeslotsPending=!1})}}function pt(){var n=[];return wt(function(t){t.PlantId&&n.push(t.PlantName)}),n}function si(n){var t=n||pt();return t.length&&(w.pickupPlantName=t.join(", ")),w.pickupPlantName}function hi(n,t,i){dr(n,t,i);wr(n);w.TimeslotsPending=!1;var r=first(w.deliveryTimeSlots);nu(r,t);w.deliveryType=l.deliveryTypes(w.details.SbuCode);w.details.DesiredFulfillmentType||(w.details.DesiredFulfillmentType=first(w.deliveryType).value);ft("plant",!0)}function gr(){t.log("ordersManager > Plants > No plants available");w.pickupLocations=!1;w.deliveryTimeSlots=!1;w.TimeslotsPending=!1;w.deliverySmsStatus.orderSmsEnabled=!1;w.deliverySmsStatus.plantSmsEnabled=!1;w.deliverySmsStatus.customerSmsEnabled=!1;w.details.DesiredFulfillmentLocationCode=null;e.swal({type:"warning",title:"Pickup unavailable",text:"<p>Sorry, pickup is unavailable in your selected state. We're working to add more pickup options soon.<\/p><p>Please contact your account manager to enquire when pickup orders will be available online for your account.<\/p>",html:!0})}function ht(n){w.details.DesiredFulfillmentRegion=n.Region;w.details.DesiredFulfillmentLocationCode=n.PlantId;w.details.ClickAndCollectEnabled=n.ClickAndCollectEnabled}function nu(n,t){var i,r;n&&(w.details.DesiredFulfillmentTimeSlot?(i=selectByProp("Description",w.details.DesiredFulfillmentTimeSlot,w.deliveryTimeSlots),i?(w.details.DesiredFulfillmentTimeSlotCutOff=moment(i.result.CutOffDateTime),w.details.DesiredFulfillmentTimeSlotCutOffTime=i.result.CutOffTime,w.selectedTimeslotIsAfterCutoff=i.result.IsAfterCutoff):(r=w.details.DesiredFulfillmentTimeSlot,w.details.DesiredFulfillmentTimeSlot=n.Description,w.details.DesiredFulfillmentTimeSlotCutOff=moment(n.CutOffDateTime),w.details.DesiredFulfillmentTimeSlotCutOffTime=n.CutOffTime,w.selectedTimeslotIsAfterCutoff=n.IsAfterCutoff,t&&t.ExpiredTimeslot&&e.info("New time slot required","The requested time slot "+r+" on this draft is no longer valid. Please provide a new time slot before placing the order."))):(w.details.DesiredFulfillmentTimeSlot=n.Description,w.details.DesiredFulfillmentTimeSlotCutOff=moment(n.CutOffDateTime),w.details.DesiredFulfillmentTimeSlotCutOffTime=n.CutOffTime,w.selectedTimeslotIsAfterCutoff=n.IsAfterCutoff))}function tu(n){iu(w.account.Name1,n.ContactName,n.ContactPhone,n.BuilderName)}function iu(n,i,r,u){w.details.BusinessName=n;i&&(w.details.ContactName=i);r&&(w.details.ContactPhone=r);u&&(w.details.BuilderName=u);t.log("ordersManager > Prefill Business/Name/Number >",w.account.Name1,"/",w.details.ContactName,"/",w.details.ContactPhone,"/",w.details.BuilderName)}function ru(){w.optionalSiteAddress=!1}function ct(n){n.State||delete n.State;n.Country||delete n.Country;angular.merge(w.details,n)}function uu(n){w.details.SmsNumber=n;ci()}function ci(){tt(d.type.delivery)&&w.deliverySmsStatus.orderSmsEnabled?w.details.SmsEnabled=angular.isDefined(w.details.SmsNumber)&&w.details.SmsNumber!=null&&w.details.SmsNumber.length>0:fu()}function fu(){w.details.SmsEnabled=!1;w.details.SmsNumber=""}function ft(n,t){if(n==="*")for(var i in w.initStatus)w.initStatus.hasOwnProperty(i)&&(w.initStatus[i]=!0);else n&&angular.isDefined(t)&&(w.initStatus[n]=t);return w.initialised=w.initStatus.order&&w.initStatus.items&&w.initStatus.plant}function tt(n){return Enums.orderType[n]==w.details.OrderType}function eu(n,t,i){w.details.JobId=n;k.setJob(n,t,i)}function ou(n){var t=typeof n=="undefined"?!1:n;k.job==null?(w.job=null,w.details.JobId=null):(w.job=k.job,w.details.JobId=k.job.JobId,t&&!su()&&e.swal({title:"Use Job Address?",text:"Do you want to replace the current delivery address with the job address?",showCancelButton:!0,confirmButtonText:"Replace address",cancelButtonText:"No thanks",closeOnConfirm:!0},function(n){n&&(w.details.LotUnit=w.job.Address1,w.details.AddressLine1=w.job.Address2,w.details.Suburb=w.job.City,w.details.Country=w.job.Country,w.details.State=w.job.State,w.details.Postcode=w.job.PostCode)}))}function su(){return w.details.LotUnit==w.job.Address1&&w.details.AddressLine1==w.job.Address2&&w.details.Suburb==w.job.City&&w.details.Country==w.job.Country&&w.details.State==w.job.State&&w.details.Postcode==w.job.PostCode?!0:!1}function wt(n){var t,i;if(typeof n=="function")for(t=0;t<w.items.length;t++)if(i=w.items[t],n(i,t)===!1)break}function hu(n){typeof n=="function"&&wt(function(t,i){for(var u,r=0;r<t.Items.length;r++)if(u=t.Items[r],n(u,i,r)===!1)break})}function cu(){return b.config.ordersArePullDownType}var nt={init:li,currentOrderId:null,currentOrderAccount:null,setOrderId:it,setOrderAccount:et,deleteOrder:bi,addItem:kt,addItemWithRules:dt,addItemToPlantList:ot,addPlantListWithItem:at,removeItem:di,clearItems:gi,clearTotals:ni,isValidating:nr,validateOrder:ir,clearValidatingFlag:vt,setValidatingFlag:tr,placeOrder:rr,newOrderWithTemplate:sr,loadTemplate:ui,isActiveOrder:ai,updateFulFillmentDate:fr,updateEstimatedFulFillmentDate:er,updateOrderType:or,getMinimumOrderDate:vi,updateShipTo:ar,revertShipTo:vr,populateShipToAccounts:hr,processPlantDetails:hi,getPlantDetails:st,getPickupPlants:yt,updatePickupSlot:br,getDeliveryPlants:oi,getItemLevelPlants:pt,updateItemLevelPlants:si,refreshTimeslots:ut,removeSiteAddress:ru,updateSmsNumber:uu,updateSms:ci,isAtpEnabled:!1,getOrderFulfillmentDate:pi,setDefaultContactDetails:tu,setAddress:ct,initStatus:ft,loadConfiguration:lt,isType:tt,findAccountId:bt,setJob:eu,iterateOverPlantLists:wt,iterateOverItems:hu,allowZeroQtyLineItems:cu},rt;return i.$on("accounts.changed",function(n,i){nt.currentOrderAccount&&nt.currentOrderAccount.AccountId&&i.indexOf(nt.currentOrderAccount.AccountId)>-1&&(t.log("ordersManager > current order account is not in new account selection > Stop managing order for %s",getObjectByString(nt,"currentOrderAccount.AccountId")),it(null),et(null))}),k.onJobDetailsLoaded=ou,i.$on("order.orderTypeUpdated",wi),i.$on("order.changed",lt),rt={},nt}angular.module("app.ordersv2").factory("ordersManager",n);n.$inject=["$log","$rootScope","$state","$timeout","$sanitize","SweetAlert","authService","accountsService","userPreferencesService","notificationService","ordersv2","metrics","metricEvents","utilService","$stateParams","ordersData","orderPolicyService","jobData","ORDER","plantPricing"]}(),function(){"use strict";function n(n,t,i,r,u,f,e){function s(n){f.currentOrderId&&f.currentOrderAccount&&f.currentOrderAccount.AccountId===n.AccountId?f.loadTemplate(n,function(n){i.go("app.orderEdit",{orderId:n})}):o(n)}function o(n,t){if(t)return f.newOrderWithTemplate(n);r.swal({type:"info",title:"Create new order from favourite",text:"This will start a new order with the items in "+n.Reference+". Changes to your current order have been saved. Would you like to continue?",showCancelButton:!0,confirmButtonText:"Create new order"},function(t){t&&(e.track("Create order from favourite",{source:"Favourites Page"}),f.newOrderWithTemplate(n))})}function h(n){r.swal({title:"Delete template",text:"Are you sure you want to delete "+(n.Reference||"this template")+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Delete template"},function(i){return i?u.order().delete({orderId:n.Id},function(){t.list.search()}):!1})}t.Enums=Enums;t.orderTypes=keyFlip(Enums.orderType);t.orderRecordTypes=keyFlip(Enums.orderRecordType);t.filters={searchKeyword:null,startDate:new Date(moment().subtract(1,"Year").format("YYYY-MM-DD")),endDate:new Date(moment().format("YYYY-MM-DD"))};t.deleteOrderTemplate=h;t.loadOrderFromTemplate=s;t.createNewOrderWithTemplate=o;t.tableHeaders=[{columnName:"Reference",displayName:"Reference"},{columnName:"AccountId",displayName:"Account No."},{columnName:"UpdatedOn",displayName:"Updated"},{columnName:"CreatedOn",displayName:"Created"},{columnName:"CreatedBy",displayName:"Created By"},{columnName:"",displayName:""}];t.listViewConfig={resourceName:"orderTemplates",filters:[{field:"Reference",alias:"Reference",operator:"like",value:t.filters.searchKeyword,condition:"and"},{field:"UpdatedOn",alias:"From",operator:">=",value:moment(t.filters.startDate).format()},{field:"UpdatedOn",alias:"To",operator:"<",value:moment(t.filters.endDate).format()}],order:[{field:"UpdatedOn",orderBy:"desc"}],sortColumn:"UpdatedOn",asc:!1,itemName:"favourite"};t.$on("list.search",function(){t.list.config.filters.Reference.value=t.filters.searchKeyword;t.list.config.filters.From.value=moment(t.filters.startDate).format("YYYY-MM-DD");t.list.config.filters.To.value=moment(t.filters.endDate).add(1,"day").format("YYYY-MM-DD")})}angular.module("app.ordersv2").controller("OrderTemplatesController",n);n.$inject=["$log","$scope","$state","SweetAlert","ordersv2","ordersManager","metrics"]}(),function(){"use strict";function n(t,i,r){function u(n,t){n.Code!=="T"&&(n.Conversion=t.Conversion,n.DeliveryBlockSize=t.DeliveryBlockSize,n.DeliveryUOM=t.DeliveryUOM,n.MinimumOrderQuantity=t.MinimumOrderQuantity,n.PricingQuantity=t.PricingQuantity,n.PricingUOM=t.PricingUOM,n.QuantityUOM=t.QuantityUOM,n.UnitPriceExcludingGST=t.UnitPriceExcludingGST,n.PricingAvailability=t.PricingAvailability,n.PickupSapPlantId=t.PickupSapPlantId,n.PickupPlantId=t.PickupPlantId,n.PickupPlantAddress=t.PlantAddress,n.PickupPlantName=t.PlantName,n.Code=padProductCode(n.Code),n.hasOwnProperty("Quantity")&&n.Quantity!==null||(n.Quantity=t.DeliveryBlockSize),n.DeliveryBlockSize&&n.DeliveryBlockSize>1&&(!n.Quantity||n.Quantity%n.DeliveryBlockSize!=0)&&(n.Quantity=t.DeliveryBlockSize),n.Price=n.Price===0&&t.Price!==0?t.Price:n.PricingQuantity===0?0:n.Quantity*n.Conversion*n.UnitPriceExcludingGST/n.PricingQuantity,n.loadingPrice=!1)}function f(n,f,e){if(!n||n.length===0)return f&&f(n),t.log("plantPricing skipped, no items."),!1;var o=[],s,h,c;return(angular.forEach(n,function(n){n.PricingAvailability!==1&&n.PricingAvailability!==2&&(n.loadingPrice=!0,o.push(n.Id),s=n.AccountId,h=n.ProjectAccountId,c=n.PickupSapPlantId)}),o.length===0)?!1:r.post({CustomerProductIds:o,AccountId:s,ProjectAccountId:h,PlantId:c},function(r){angular.forEach(r,function(t){var i=n.filter(function(n){return n.Code===t.Code||n.Code===t.Code.replace(/^0+/,"")})[0];i&&u(i,t)});i(function(){f&&f(n);t.log("plantPricing success.")},1)},function(r){i(function(){e&&e(n);t.log("plantPricing failed.",r)},1)})}return n={fetch:f,applyPlantPricingToItem:u}}angular.module("app.ordersv2").factory("plantPricing",n);n.$inject=["$log","$timeout","productPlantPricing"]}(),function(){"use strict";function i(t){return t(n,null,{query:{isArray:!1}})}function r(t){return t(n,{recordType:"template",$count:!0},{query:{isArray:!1}})}function u(i,r){function u(){return i(n+"/:orderId",null,{save:{method:"PUT",url:n},update:{method:"PUT"}})}function f(){return i(n+"/:orderId/template",null,{save:{method:"POST"}})}function e(){return i(n+"/templates/:templateId",null,{update:{method:"PUT"}})}function o(){return i(n+"/pickuplocation",null,{get:{isArray:!1,params:{accountId:"",state:"",sbuCode:""}}})}function s(){return i(n+"/order/:accountId/:orderNo")}function h(){return i("/api/releases",null,{simulate:{method:"POST",url:n+"/order/modify/simulate",cancellable:!0,bypassFilters:!0},submit:{method:"POST",url:n+"/order/modify",cancellable:!0,bypassFilters:!0}})}function c(){return i(n+"/deliverylocation",null,{get:{isArray:!1,params:{plantId:"",sbuCode:""}}})}function l(n){return r[n]?r[n]:[{name:"Standard Delivery",value:"SD"}]}function a(){return i(n+"/timeslots",null,{get:{isArray:!1,params:{AccountId:null,ProjectAccountId:null,SbuCode:null,OrderType:null,AddressLine1:null,Suburb:null,State:null,Country:null,Postcode:null,DesiredFulfillmentLocationCode:null}}})}function v(){return i(n+"/nextdate",null,{get:{isArray:!1,params:{AccountId:null,ProjectAccountId:null,SbuCode:null,OrderType:null,AddressLine1:null,Suburb:null,State:null,Country:null,Postcode:null,DesiredFulfillmentLocationCode:null}}})}function y(){return i(n+"/:orderId/pricing",null,{get:{params:{orderId:null},cancellable:!0}})}function p(){return i(n+"/:orderId/place?expeditedOrder=:expeditedOrder")}function w(){return i("/api/order/:OrderId/lineitems",null,{get:{isArray:!1},save:{method:"POST",cancellable:!0},"delete":{method:"delete",url:"/api/order/:orderId/lineitems/:id"}})}function b(){return i("/api/order/:orderId/lineitems/:id/reorder")}function k(){return i("/api/order/:orderId/lineitems/clear")}function d(){return i("/api/orders/account/:accountId/details")}function g(){return i("/api/releases",null,{simulate:{method:"POST",url:"/api/releases/simulate"},place:{method:"POST",url:"/api/releases/place?expeditedOrder=:expeditedOrder"},refresh:{method:"POST",url:"/api/releases/refresh"}})}function nt(){return i(t+"/:accountId/default",null,{get:{method:"GET"}})}function tt(){return i(t+"/:accountId/add",null,{save:{method:"POST"}})}function it(){return i(t+"/:accountId/delete/:orderContactId",null,{"delete":{method:"DELETE"}})}function rt(){return i(t+"/:accountId/makedefault/:orderContactId",null,{save:{method:"POST"}})}return{order:u,saveOrderAsTemplate:f,loadOrderFromTemplate:e,pickupLocation:o,orderByAccountIdOrderNumber:s,orderModify:h,deliveryLocation:c,deliveryTypes:l,plantDetails:a,nextDateForPlant:v,validateOrder:y,placeOrder:p,items:w,reorderItems:b,clearAllItems:k,getAccountDetails:d,DELIVERY_TYPES:r,releases:g,getDefaultContact:nt,saveOrderContact:tt,deleteOrderContact:it,makeOrderContactDefault:rt}}angular.module("app.ordersv2").factory("draftOrders",i).factory("orderTemplates",r).factory("ordersv2",u);var n="api/orders",t="api/ordercontact";i.$inject=["$resource"];r.$inject=["$resource"];u.$inject=["$resource","DELIVERY_TYPES","authService"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.orderGetStarted",config:{url:"/orders/getstarted",templateUrl:"order-get-started.html",access:"Customer/OnlineOrdering",help:"orderCreate",helpTour:"tourOrderCreate"}},{state:"app.orderCreate",config:{url:"/orders/create?jobId",pageTitle:"Place new order",templateUrl:"orders/create",access:"Customer/OnlineOrdering",help:"orderCreate",helpTour:"tourOrderCreate"}},{state:"app.orderCreateFromTemplate",config:{url:"/orders/create/favourite?jobId",pageTitle:"Place new order",templateUrl:"order-create-from-template.html",access:"Customer/OnlineOrdering",help:"orderCreate",helpTour:"tourOrderCreate"}},{state:"app.orderEdit",config:{url:"/orders/edit/:orderId",pageTitle:"Edit order",templateUrl:"orders/create",access:"Customer/OnlineOrdering",help:"orderCreate",helpTour:"tourOrderCreate"}},{state:"app.orderRelease",config:{url:"/orders/release",pageTitle:"Request a release",templateUrl:"orders/release",access:"Customer/OnlineOrdering",params:{ReleaseData:{}}}},{state:"app.orderModify",config:{url:"/orders/modify/:accountId/:orderNo",pageTitle:"Order Modify",templateUrl:"order-modify.html",access:"Customer/OnlineOrdering"}},{state:"app.orderDraftsList",config:{url:"/orders/drafts",pageTitle:"Draft orders",templateUrl:"orders",access:"Customer/OnlineOrdering"}},{state:"app.templatesList",config:{url:"/orders/favourites",pageTitle:"Order favourites",templateUrl:"orders/templates",access:"Customer/OnlineOrdering"}},{state:"app.orderTemplate",config:{url:"/orders/favourite/:orderId",pageTitle:"Edit favourite",templateUrl:"orders/create",access:"Customer/OnlineOrdering"}}]}angular.module("app.ordersv2").run(n);n.$inject=["routerHelper"]}(),function(n){function i(){return{require:"^form",restrict:"AE",isolate:!1,scope:{form:"=form",detailsOpen:"=detailsOpen",userMobile:"=userMobile",validationErrors:"=validationErrors",saveOrder:"&",silentSaveOrder:"&"},controller:t,controllerAs:"oh",templateUrl:"orderHeader.html"}}function t(t,i,r,u,f,e,o,s,h,c,l,a,v){function b(n,t){n.charCode===13&&(n.preventDefault(),scrollToId(t),document.getElementById(t).focus())}function k(n,t,f){var s,h;o.account!=null&&(s=o.account.AccountId!==t.AccountId,f?e.setDefaultContactDetails(t):u.log("OC > Skipping prefill"),h=y.ods.details.Country,h!==wt()?(o.details.DesiredFulfillmentLocationCode=undefined,e.populateShipToAccounts(t.ShipToAddresses,!0)):e.populateShipToAccounts(t.ShipToAddresses,f&&!o.details.Id),o.details.Id&&o.items&&o.items.length>0&&s?(u.log("OC > Save to store account change",o.account.AccountId,o.details.Id),i(function(){r.silentSaveOrder()})):u.info("OC > Chose not to save to store account change. No order Id or silent save not required.","AccountId: ",o.account.AccountId,"OrderId: ",o.details.Id,"Silent Save Required: ",s),y.availableStates=bt(y.config.isNz),y.config.deliveryAvailable||(o.details.OrderType=y.orderType=Enums.orderType.pickup));e.updateOrderType();e.loadConfiguration();yt();y.hidePickup=!1;o.account.SbuCode==Enums.sbu.bradfordAustralia&&d()}function d(){var n=o.details.DesiredFulfillmentRegion;l.pickupLocation().get({accountId:o.account.AccountId,state:n,sbuCode:o.account.SbuCode},function(n){var t=n.data;u.log("ordersManager > Plants > ...got %s pickup locations",t.length,t);t.length&&(t[0].PlantId==="4612"||t[0].PlantId==="4613")&&(e.updateOrderType(Enums.orderType.delivery),y.hidePickup=!0)})}function g(n){if(!o.shipTo){o.details.ProjectAccountId&&(o.projectPricing&&s.info("Account pricing","The regular pricing for your account will now apply to this order"),o.details.ProjectAccountId=null);return}var t=y.config.isProjectCalledBuilder?"Selecting this builder will apply builder pricing for this order. Continue?":"Selecting a new address will reset the address for this order. Continue?",i=y.config.isProjectCalledBuilder?"Selecting a builder":"Selecting an address";o.shipTo.HasProjectPricing&&(t=y.config.isProjectCalledBuilder?"Selecting this builder will apply builder pricing for this order. Continue?":"Selecting this address will apply project pricing and reset the address for this order. Continue?");s.swal({type:"info",title:i,text:t,showCancelButton:!0,confirmButtonText:"Select address"},function(t){t?e.updateShipTo(!0):e.revertShipTo(n)})}function nt(n){v.removeAll();r.form.$setSubmitted();r.form.$setDirty();n&&n.preventDefault();e.updateSms();r.saveOrder()}function tt(n){return n==undefined?!1:n.match(/^$|^(?:0|\+61[ ]?)4\d{2}[ ]?\d{3}[ ]?\d{3}$|^(?:0|\+64[ ]?)2\d{7,9}$/)?!0:!1}function it(t){r.detailsOpen=n.isDefined(t)?t:!r.detailsOpen}function rt(n,t){t.data.ModelState&&(r.validationErrors=t.data.ModelState);u.error("OC > Plant lookup > Failed to get plant details >",t);s.swal({type:"error",title:"Unable to locate address",text:"<p>Connect was unable to determine your delivery location. Please confirm your address and try again.<\/p><p>If this issue persists, please contact your account manager for further information.<\/p>",html:!0});e.initStatus("plant",!0)}function ut(n,t){var i;if(t){i=[];$.each(t.address_components,function(n,t){$.each(t.types,function(n,r){i[r]={long:t.long_name,short:t.short_name}})});u.log("OC > Populating address with result",i);var r=t.vicinity!==t.name?t.name:o.details.AddressLine1,s=o.details.AddressLine1.split(" "),f="";s.forEach(function(n){r.toLowerCase().includes(n.toLowerCase())||n.match(/\d+/g)!=null&&(f=f+n+" ")});r=f+r;e.setAddress({AddressLine1:r,Suburb:t.vicinity,Country:i.country.short,State:i.administrative_area_level_1?i.administrative_area_level_1.short:null,Postcode:i.postal_code?i.postal_code.long:null});e.getPlantDetails(null,{NoTimeslots:!0,TimeslotExpired:!0})}}function ft(n){p(n.DesiredFulfillmentDate)&&y.updateFulFillmentDate(n.DesiredFulfillmentDate,y.ods.details.DesiredFulfillmentDate)}function et(n){p(n.DesiredFulfillmentDate)&&y.updateEstimatedFulFillmentDate(n.DesiredFulfillmentDate,y.ods.details.DesiredFulfillmentDate)}function p(n){var t="day",u=y.ods.details.OrderType===Enums.orderType.delivery,f=y.ods.details.DesiredFulfillmentDate;return moment().isAfter(n,t)?(s.info(u?"Delivery date":"Pickup date","Invalid date specified"),i(function(){y.ods.details.DesiredFulfillmentDate=moment().add(1,t);r.$apply();y.ods.details.DesiredFulfillmentDate=f;r.$apply()},100),!1):!0}function ot(n){return o.details.DesiredFulfillmentLocationCode===""&&(o.details.DesiredFulfillmentLocationCode=null),i(function(){r.tooManyResults=!1}),{accountId:o.details.AccountId,keyword:n}}function st(t){return n.isString(t)?{Data:!1}:t}function ht(n){u.info("Delete Order Contact >",n);var t=n.originalObject.Id;l.deleteOrderContact().delete({accountId:o.details.AccountId,orderContactId:t}).$promise.then(function(n){u.info("Delete Order Contact Response >",n)})}function ct(n){u.info("Select Order Contact >",n);i(function(){y.ods.details.ContactName=n.originalObject.ContactName;y.ods.details.ContactPhone=n.originalObject.ContactNumber;y.ods.usingSavedContact=!0},50)}function lt(n){u.info("Selected Order Contact Input Changed >",n);o.details.ContactName=n;y.ods.usingSavedContact=!1}function at(n,t){n==="MakeDefault"&&l.makeOrderContactDefault().save({accountId:o.details.AccountId,orderContactId:t.originalObject.Id},null).$promise.then(function(n){u.info("Make Order Contact Default >",n)})}function vt(){l.getDefaultContact().get({accountId:o.details.AccountId}).$promise.then(function(n){n!==null&&n!==undefined&&(y.ods.details.ContactName=n.ContactName,y.ods.details.ContactPhone=n.ContactNumber,y.ods.usingSavedContact=!0,i(function(){typeof y.orderContactSearchCtrl.setSearchString=="function"&&y.orderContactSearchCtrl.setSearchString(n.ContactName)},100))})}function yt(){if(y.availableJobs=null,c.canDo("r","Customer/Jobs")){var n={sortBy:Enums.jobSortType.name.toString(),perPage:100};h.get(n,function(n){y.availableJobs=n.Results})}}function w(){y.ods.job=null;y.ods.details.JobId=null}function pt(n,t,i){e.setJob(n,t,i)}function wt(){return y.config.isNz?"NZ":"AU"}function bt(){return y.config.isNz?["NZ"]:["ACT","NSW","NT","QLD","SA","TAS","VIC","WA"]}var y=this;y.ods=o;y.availableJobs=null;y.hidePickup=!1;y.clearJob=w;y.setJob=pt;y.showJobSelector=!1;y.config=f.config;y.orderTypeDisplayText="order";y.Enums=Enums;y.orderType=keyFlip(y.Enums.orderType);y.removeSiteAddress=e.removeSiteAddress;y.updateSmsNumber=e.updateSmsNumber;y.updateSms=e.updateSms;y.isType=e.isType;y.initOrderType=e.updateOrderType;y.promptShipTo=g;y.toggleDetails=it;y.saveOrder=nt;y.isMobile=tt;y.getPlantDetails=e.getPlantDetails;y.updateFulFillmentDate=e.updateFulFillmentDate;y.applyFulFillmentDate=ft;y.updateEstimatedFulFillmentDate=e.updateEstimatedFulFillmentDate;y.applyEstimatedFulFillmentDate=et;y.refreshTimeslots=e.refreshTimeslots;y.getPickupPlants=e.getPickupPlants;y.availableStates=[];y.updatePickupSlot=e.updatePickupSlot;y.orderContactSearchApiFn=ot;y.orderContactSearchResponseFn=st;y.deleteOrderContact=ht;y.orderContactSelected=ct;y.orderContactSearchInputChanged=lt;y.orderContactCustomAction=at;y.orderContactSearchCtrl={};y.nextField=b;r.$on("placeChanged",ut);r.$on("accountDetails.loaded",k);r.$on("order.plantdetailslookupfailure",rt);r.$on("order.orderTypeUpdated",vt);t.$on("order.placed",w())}n.module("app.ordersv2").directive("orderHeader",i);t.$inject=["$rootScope","$timeout","$scope","$log","orderPolicyService","ordersManager","ordersData","SweetAlert","jobs","authService","ordersv2","featureToggle","notificationService"]}(angular),function(n){function r(){return{restrict:"AE",isolate:!0,controller:t,controllerAs:"oli",templateUrl:"ordersv2.orderLineItems.html"}}function t(t,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g){function ot(n,t){if(n&&n.preventDefault(),c.isActiveOrder()){var i=t.PlantId!==null&&t.PlantId!==undefined&&c.isType("pickup"),r=null;i&&(r=t.PlantId);l.swal({title:i?"Clear all items for plant "+t.PlantName+"?":"Clear all items from order?",text:"This cannot be undone",type:"warning",showCancelButton:!0,confirmButtonText:"Clear all",showLoaderOnConfirm:!0,closeOnConfirm:!1},function(n){n&&(c.clearItems(r),scrollToY(0))})}}function st(n){rt(n.Code)?n.Description=encodeURI(n.Description):delete n.Description}function ht(){c.validateOrder(null,!0)}function ct(n){var l=a.items&&a.items.length>0&&n.LineItems&&n.LineItems.length>0,o,i,t;if(l){var r=0,u=0,s={};nt.om.iterateOverItems(function(n,t,i){s[n.Id]=a.items[t].Items[i]});e.log("OC > Validating items > ",s,"against",n.LineItems);var v=a.account.SbuCode,f=selectByProp("SbuCode",v,w).result,y=f!==undefined&&f!==null&&f.EnablePriceChangeThreshold===!0,h=!1;for(o=0;o<n.LineItems.length;o++)i=n.LineItems[o],et(i)&&(t=s[i.Id],t?(t.Quantity==i.Quantity?(t.DisplayRemainingQty=i.RemainingQty-t.Quantity,t.UnitPriceExcludingGST!==i.UnitPriceExcludingGST&&(!y||!isNaN(t.UnitPriceExcludingGST)&&!isNaN(i.UnitPriceExcludingGST)&&Math.abs(t.UnitPriceExcludingGST-i.UnitPriceExcludingGST)>f.PriceChangeThreshold)&&(t.UnitPriceExcludingGST=i.UnitPriceExcludingGST,t.changed=!0,r++),t.isValidating=!1,i.PricingAvailability!==nt.priceAvailability.unknown&&t.PricingAvailability===nt.priceAvailability.unknown?(b.applyPlantPricingToItem(t,i),nt.om.addItemWithRules(t)):(t.DeliveryBlockSize=i.DeliveryBlockSize,t.DeliveryUOM=i.DeliveryUOM),lt(i,t)):t.isValidating=!0,h|=t.isValidating):u++);h||c.clearValidatingFlag();r&&(e.log("OC > Validating items > Updated pricing for %s items",r),p.add({id:"orderPriceUpdate",type:"warning",message:"Prices for some items in your order have changed. Please check the highlighted items before placing your order."}));u&&e.log("OC > Validating items > Could not update pricing for %s items",u);r||u||(e.log("OC > Validating items > All matched items OK"),p.remove("orderPriceUpdate"),nt.om.iterateOverItems(function(n){n.changed=!1}))}nt.om.iterateOverItems(function(n){n.Quantity===0&&n.isValidating&&n.DeliveryBlockSize&&n.PricingAvailability&&(n.isValidating=!1)})}function lt(n,t){var u=c.getOrderFulfillmentDate(),i,r;if(t.atpCheckResult=n.AtpCheckResult,t.atpFulfillmentDate=n.AtpFulfillmentDate==null?null:new Date(n.AtpFulfillmentDate),t.atpCheckResult!=="Y"&&t.atpFulfillmentDate!=null&&t.atpFulfillmentDate<=u&&(t.atpCheckResult="Y"),t.atpTooltip=null,t.atpCheckResult!=="Y"){if(t.atpCheckResult==="L"){t.atpTooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your order";return}t.atpTooltip="There is not enough stock available to fulfil this order.";t.atpFulfillmentDate!==null&&(i=moment().utcOffset(),r=moment(n.AtpFulfillmentDate).utcOffset(i).format("DD/MM/YYYY"),t.atpTooltip+=" The ordered quantity will be available on "+r)}}function ut(n){e.log("OC > Reorder item > %s from %s to %s",n.source.itemScope.item.Id,n.source.index,n.dest.index);var t=n.dest.sortableScope.element.context.getAttribute("as-sortable-id");rt(n.source.itemScope.item)&&(n.source.itemScope.item.PickupPlantId=t);v.reorderItems().save({orderId:a.details.Id,id:n.source.itemScope.item.Id},{orderId:a.details.Id,orderItemId:n.source.itemScope.item.Id,sortOrder:n.dest.index,pickUpPlantId:t},function(n){e.log("OC > Reorder item > Successful >",n)})}function ft(n){return n.PricingQuantity===0?0:n.Conversion*n.UnitPriceExcludingGST/n.PricingQuantity}function at(n){return ft(n)*n.Quantity}function vt(n,t){return n.Code!="T"&&(!n.custom||t)&&n.UnitPriceExcludingGST===0&&n.PricingAvailability}function rt(n){return n.Code==="T"}function et(n){return n.Code!=="T"}function yt(n){return n.Code!=="T"&&!n.custom}function pt(n){return n.Code!=="T"&&n.UnitPriceExcludingGST===0}function wt(n,t){n.removing=!0;c.removeItem(n,t)}function bt(t){var r,u,o;if(t&&(r=n.copy(t.originalObject||t),!n.isString(r))){if(r.custom){if(!r.name||!r.name.trim()||r.name===nt.msgs.autocompletePlaceholder)return;r.Code="T";r.Description=r.name;r.SbuCode=a.account.SbuCode}else r.Code=padProductCode(r.Code),r.Price=r.Quantity*r.Conversion*r.UnitPriceExcludingGST;u=Date.now()+Math.random()*1e8;r.Id=u;r.AccountId=a.account.AccountId;r.PricingAvailability||(r.isValidating=!0);r.tempId=u;r.Code!=="T"&&it()===!0?(o=g.open({templateUrl:"add-item-with-quantity-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,resolve:{item:r},controller:i,controllerAs:"addItemWithQuantityModal"}),o.result.then(function(n){e.log("Adding item from modal",n);c.addItemWithRules(n);c.addItem(n,a.details.Id)}),f.$on("$destroy",function(){o.close()})):(c.addItemWithRules(r),c.addItem(r,a.details.Id))}}function kt(n){return a.details.DesiredFulfillmentLocationCode===""&&(a.details.DesiredFulfillmentLocationCode=null),t(function(){f.tooManyResults=!1}),{accountId:a.details.AccountId,projectAccountId:a.details.ProjectAccountId,plantId:a.details.DesiredFulfillmentLocationCode,keyword:n,$top:10,$skip:0,getPlantsPricing:!0,featureName:"Orders"}}function dt(i){var r,u;if(n.isString(i))return{Items:!1};if(i&&i.Data&&i.Data.Items)for(f.tooManyResults=i.NarrowYourSearchWarning,t(function(){var n=$("#narrow-results-tooltip");n&&n.removeAttr("data-balloon-visible")},5e3),r=0;r<i.Data.Items.length;r++)u=i.Data.Items[r],u.hasOwnProperty("ImageAssetUri")&&(i.Data.Items[r].ImageAssetUri=productImgSrc("thumb",i.Data.Items[r])),u.hasOwnProperty("Description")&&(i.Data.Items[r].Description=o("titleCase")(u.Description,!0)),u.hasOwnProperty("Code")&&(i.Data.Items[r].Code=o("productCode")(u.Code)),i.Data.Items[r].Quantity=i.Data.Items[r].DeliveryBlockSize;return i.Data}function it(){return f.mobileDevice=window.innerWidth<=500&&window.innerHeight<=800?!0:!1,e.log("Mobile Device Status",f.mobileDevice),f.mobileDevice}function gt(){e.info("Focused on product search");it()==!0&&scrollToId("item-super-search")}var nt=this,tt;nt.om=c;nt.ops=h;nt.ods=a;nt.clearItemsPrompt=ot;nt.removeItem=wt;nt.showPricing=h.userHasProductPricingPermission();nt.isCallForPrice=vt;nt.productSearchApiFn=kt;nt.productSearchResponseFn=dt;nt.addItem=bt;nt.calcUnitPrice=ft;nt.calcPrice=at;nt.isItemWithNoPrice=pt;nt.isNotText=et;nt.isNotTextOrCustom=yt;nt.priceAvailability=Enums.priceAvailabilityStatus;nt.focusProductSearch=gt;nt.savingQueries=[];nt.showProductSearchDropdown=!0;tt=debounce(ht,2e3);f.sortableOptions={accept:function(n,t){return n.itemScope.item.tempId?!1:rt(n.itemScope.item)?!0:n.itemScope.sortableScope.$id===t.$id},placeholder:'<tr><td colspan="6"><\/td><\/tr>',orderChanged:function(n){ut(n)},itemMoved:function(n){ut(n)}};f.tooManyResults=!1;f.$watch("oli.newItem",nt.addItem);nt.msgs={autocompletePlaceholder:d.innerWidth<=500?"Type here to search":"Search by product code or description"};f.$on("order.itemsCleared",function(n,t){t?c.updateOrderType(Enums.orderType.pickup):a.items=[];l.swal({type:"success",title:"All items cleared"});f.$emit("order.itemsupdated");tt()});nt.updateItem=function(t){var i,r;nt.savingQueries[t.Code]&&(nt.savingQueries[t.Code].$cancelRequest(),nt.savingQueries[t.Code]=undefined);nt.om.clearTotals();i=y.orderId||null;t&&(t.Quantity||nt.om.allowZeroQtyLineItems())&&(c.setValidatingFlag(null),e.log("OC > Update %s qty to %s",t.Description,t.Quantity,t),a.totals=!1,t.Code=padProductCode(t.Code),t.isValidating=!0,t.OrderId&&t.OrderId===i||(t=n.merge({OrderId:i},t)),r=JSON.parse(JSON.stringify(t)),st(r),nt.savingQueries[t.Code]=v.items().save({OrderId:i},r,function(){tt();nt.savingQueries[t.Code]=undefined}))};f.$on("order.validated",function(n,t){ct(t);r.$broadcast("order.itemsupdated")});f.$on("order.itemRemoved",function(t,i){n.forEach(a.items,function(n,t){var r=selectByProp("Id",i.Id,n.Items);r&&(n.Items[r.idx]&&n.Items.splice(r.idx,1),n.Items.length===0&&a.items.splice(t,1))});tt()});f.$on("order.itemAdded",function(n,t){var o,i,u,f;if(e.log("OC > Add item > Success:",t),o=!1,a.details.Id||(a.details.Id=t.OrderId,setEditUrl()),i=selectByProp("tempId",t.tempId,a.pricePlantPendingItems),i)a.pricePlantPendingItems.splice(i.idx,1),o=a.pricePlantPendingItems.length!==0,delete i.result.tempId,c.addItemWithRules(i.result),r.$broadcast("order.itemsupdated");else for(u=0;u<a.items.length;u++)if(f=a.items[u].Items,i=selectByProp("tempId",t.tempId,f),i){f[i.idx]=t;delete f[i.idx].tempId;break}o||tt()});nt.isMobileDevice=it;f.mobileDevice=!0;it()}function i(n,t,i,r){var u=this;u.item=t;u.displayCode=t.Code.replace(/^0+/,"");r(function(){if(t.SbuCode==="4300")n.$broadcast("brickInput.toggle",t.Id);else{var i=document.getElementById("qty-"+t.Id);i&&(i.focus(),i.select())}},250);u.addItem=function(){return i.close(u.item)};u.closeModal=function(){return i.close()}}n.module("component.orderLineItems").directive("orderLineItems",r);t.$inject=["$timeout","$rootScope","$state","$scope","$log","$filter","authService","orderPolicyService","ordersManager","SweetAlert","ordersData","ordersv2","$stateParams","notificationService","SBU_CONFIG","plantPricing","featureToggle","$window","$modal"];i.$inject=["$scope","item","$modalInstance","$timeout"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e,o){function d(){t.log(h,"loadOrder");u.orderByAccountIdOrderNumber().get({accountId:s.accountId,orderNo:s.orderNo},function(n){var i,r;for(t.log(h,"loadOrder - order loaded",n.data),s.order=n.data,i=0;i<s.order.items.length;i++)r=s.order.items[i],r.initialQty=r.orderQty;s.order.deliveryIndicatorType=s.order.deliveryIndicator==="P"?"Pickup":"Delivery";s.orderCanBeModified=k();s.orderCanBeModified?tt():s.isLoading=!1})}function g(){o.get({accountId:s.accountId,$top:10},function(n){s.mostOrdered=n.Items;t.log(h,"Loading Most Ordered Success")},function(){s.mostOrdered=[];t.log(h,"Loading Most Ordered Failed")})}function nt(){s.showOrderDetails=!s.showOrderDetails}function tt(){for(var t,n=0;n<s.order.items.length;n++)t=s.order.items[n],t.isRefreshing=!0;u.orderModify().simulate(s.order,function(n){v(n);s.orderRestore=angular.copy(s.order);s.isLoading=!1},p)}function it(){w(c);s.order=angular.copy(s.orderRestore)}function rt(){a=f.open({templateUrl:"order-modify-product-selector.html",size:"md",controller:"OrderModifyProductSelectorController",controllerAs:"productSelector",resolve:{accountId:function(){return s.accountId},plantId:function(){return s.order.pickupPlantId},mostOrdered:function(){return s.mostOrdered},onAddItem:function(){return et}}});a.opened.then(function(){e(function(){focusOnId("item-super-search-input")})})}function ut(){s.order.pickupCapacity=null;y()}function ft(){var t=f.open({templateUrl:"order-modify-capacity-input.html",size:"md",controller:["$scope","pickupCapacity",function(n,t){n.pickupCapacity=t}],resolve:{pickupCapacity:function(){return s.order.pickupCapacity}}});t.opened.then(function(){e(function(){focusOnId("pickup-capacity-input")})});t.result.then(function(n){s.order.pickupCapacity=n;y()});n.$on("$destroy",function(){t.close()})}function et(n){t.log(h,"Adding item to order",n);var i={description:n.Description,itemCode:n.Code.replace(/(0+)*/,""),isModified:!0,isRefreshing:!0,orderQty:1};s.order.items.push(i);a.dismiss();l()}function ot(n){s.order.items.splice(n,1);l()}function st(n){(t.log(h,"itemChanged",n),n.orderQty<=0)||(n.isRefreshing=!0,l())}function ht(){return angular.equals(s.orderRestore,s.order)}function l(){w(c);s.isSimulating=!0;c=u.orderModify().simulate(s.order,v,p)}function ct(){if(w(c),s.orderContainsAtpWarning){r.swal({title:"Changes cannot be submitted",text:"Your requested changes cannot be submitted as we are unable to confirm stock availability",type:"error"});return}if(s.order.items.length===0){r.swal({title:"Changes cannot be submitted",text:"Orders cannot be cancelled using this service",type:"error"});return}switch(s.order.deliveryIndicator){case"D":at(b);break;case"P":lt(b)}}function b(){s.isSubmitting=!0;c=u.orderModify().submit(s.order,function(n){v(n);r.swal({title:"Your order has been updated",confirmButtonText:"Go to my orders",showCancelButton:!0,cancelButtonText:"Continue editing"},function(n){n?location.hash="#/docs?type=3":s.orderRestore=angular.copy(s.order)})},p)}function lt(t){var i=f.open({templateUrl:"order-modify-capacity-confirmation.html",size:"md",backdrop:"static",keyboard:!0,controller:["$scope","hasCapacityPercent","capacityPercent","order",function(n,t,i,r){n.hasCapacityPercent=t;n.capacityPercent=i;n.pickupCapacity=r.pickupCapacity;n.grossWeights=r.grossWeights;n.areas=r.areas;n.volumes=r.volumes;n.itemsCount=r.items.length}],resolve:{hasCapacityPercent:function(){return s.hasCapacityPercent},capacityPercent:function(){return s.capacityPercent},order:function(){return s.order}}});i.result.then(function(n){n&&t()});n.$on("$destroy",function(){i.close()})}function at(n){r.swal({title:"Confirm your changes",text:"Changes will take immediate effect. Please confirm you would like to make the changes to your order",confirmButtonText:"Submit order",showCancelButton:!0,cancelButtonText:"Return to order"},function(t){t&&n()})}function v(n){var t=n.data,e,f,u,i;for(t.orderIsLocked&&r.swal({title:"Your order is currently locked",text:"No changes can be made to this order currently. Please try again in a while",confirmButtonText:"Return to order details"},function(){location.hash="#/docs/"+s.accountId+"/orders/"+s.orderNo}),s.order.grossWeights=t.grossWeights,s.order.areas=t.areas,s.order.volumes=t.volumes,s.order.taxValue=t.taxValue,s.order.subTotal=t.subTotal,s.order.grossValue=t.grossValue,s.order.freightValue=t.freightValue,s.order.docStatus=t.docStatus,s.order.docStatusDesc=t.docStatusDesc,e=!1,f=0;f<t.items.length;f++)u=t.items[f],i=s.order.items[f],e=u.hasAtpWarning?!0:e,i.hasAtpWarning=u.hasAtpWarning,i.isAtpInactive=u.isAtpInactive,i.salesPrice=u.salesPrice,i.salesUnit=u.salesUnit,i.price=u.price,i.priceUnit=u.priceUnit,i.isRefreshing=!1,i.isModified=i.initialQty!=i.orderQty;s.isSimulating=!1;s.isSubmitting=!1;s.orderCanBeModified=k();s.orderContainsAtpWarning=e;s.orderIsValid=s.orderCanBeModified;y()}function y(){for(var t=0,n=0;n<s.order.grossWeights.length;n++)s.order.grossWeights[n].description.toLowerCase()=="kg"&&(t=s.order.grossWeights[n].value);switch(s.order.deliveryIndicator){case"D":s.hasCapacityPercent=s.order.vehicleCapacity>0;s.capacityPercent=s.hasCapacityPercent?Math.round(t/s.order.vehicleCapacity*100):null;break;case"P":s.hasCapacityPercent=s.order.pickupCapacity>0;s.capacityPercent=s.hasCapacityPercent?Math.round(t/s.order.pickupCapacity*100):null}}function p(n){var t,i;for(s.orderIsValid=!1,s.isLoading=!1,s.isSimulating=!1,s.isSubmitting=!1,t=0;t<s.order.items.length;t++)i=s.order.items[t],i.isRefreshing=!1;r.swal({type:"error",title:n.data.Message,text:n.data.ExceptionMessage})}function k(){return s.order.docStatus>"040"?(t.log(h,"confirmOrderCanBeModified","Status greater than 40"),r.swal({title:"Picking has commenced for this order",text:"No further changes are able to be accepted.",confirmButtonText:"Go to my orders"},function(){location.hash="#/docs?type=3"}),!1):s.order.canModify?!0:(t.log(h,"confirmOrderCanBeModified","canModify is false"),r.swal({title:"This order cannot be modified",text:"No further changes are able to be accepted.",confirmButtonText:"Go to my orders"},function(){location.hash="#/docs?type=3"}),!1)}function w(n){s.isSimulating=!1;s.isSubmitting=!1;n&&n.$cancelRequest&&n.$cancelRequest()}var h="[orderModifyController]",s=this,c=null,a;s.isLoading=!0;s.isSubmitting=!1;s.isSimulating=!1;s.orderCanBeModified=!1;s.hasCapacityPercent=!1;s.showOrderDetails=!1;s.orderIsValid=!1;s.accountId=i.params.accountId;s.orderNo=i.params.orderNo;s.mostOrdered=null;s.orderRestore=null;s.toggleDetailView=nt;s.showProductSelection=rt;s.showPickupCapacityInput=ft;s.clearPickupCapacity=ut;s.undoChanges=it;s.removeItem=ot;s.itemChange=st;s.orderIsPristine=ht;s.simulateOrderChange=l;s.submitOrderChange=ct;d();g()}angular.module("app.ordersv2").controller("OrderModifyController",n);n.$inject=["$scope","$log","$state","SweetAlert","ordersv2","$modal","$timeout","freqOrderedProducts"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function y(t){if(t){var i=angular.copy(t.originalObject||t);angular.isString(i)||i.custom||(i.custom||(i.Quantity=i.DeliveryBlockSize||1,i.Price=i.Quantity*i.Conversion*i.UnitPriceExcludingGST),i.AccountId=s,n.log(v,"raising onAddItem",i),c(i))}}function p(n){return{accountId:s,projectAccountId:null,plantId:s,keyword:n,$top:10,$skip:0,getPlantsPricing:!1,featureName:"Orders"}}function w(n){var r,i;if(angular.isString(n))return{Items:!1};if(n&&n.Data&&n.Data.Items)for(t.tooManyResults=n.NarrowYourSearchWarning,r=0;r<n.Data.Items.length;r++)i=n.Data.Items[r],i.ImageAssetUri=productImgSrc("thumb",n.Data.Items[r]),i.Description=e("titleCase")(i.Description,!0),i.Code=e("productCode")(i.Code);return n.Data}var v="[orderModifyProductSelectorController]",a=this;n.log(v,"Loading");a.isLoading=!0;a.plantId=h;a.newItem=null;a.mostOrdered=l;a.productSearchApiFn=p;a.productSearchResponseFn=w;a.addItem=y;t.$watch("productSelector.newItem",y)}angular.module("app.ordersv2").controller("OrderModifyProductSelectorController",n);n.$inject=["$log","$scope","$state","SweetAlert","ordersv2","freqOrderedProducts","$filter","$modal","accountId","plantId","onAddItem","mostOrdered"]}(),function(n){function i(){return{restrict:"AE",isolate:!0,scope:{totals:"=",userHasProductPricingPermission:"=",placeWithoutTotals:"=",orderType:"="},controller:t,controllerAs:"ot",templateUrl:"ordersv2.orderTotals.html"}}function t(n,t){var i=this;i.ods=t}n.module("component.orderTotals").directive("orderTotals",i);t.$inject=["$scope","ordersData"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut,ft){function at(){if(!i.ReleaseData||!i.ReleaseData.PulldownOrderNo){n.log("%creleaseCreate.controller > Init > $StateParams release data missing, redirecting to Dash ...","color: pink",i.ReleaseData);u.go("app.dash");return}n.log("%creleaseCreate.controller > Init > Wacking this in ...","color: pink",i.ReleaseData);it.init(i.ReleaseData);et.userMobile=t.session.user.Profile.Mobile;et.userHasProductPricingPermission=y.hasPermission("Customer/ProductPricing");et.userHasSalesOrderPermission=y.hasPermission("Customer/SalesOrder");et.loadingItems=!1}function vt(n){var t,i;if(it.totals={freight:n.TotalFreight,isFreightCalculated:n.IsFreightCalculated,levies:n.TotalLevies,surcharges:n.TotalSurcharges,subtotal:n.TotalExGst,includedGST:n.TotalGst,total:n.TotalInclGst},n.CumulativeUomQuantities&&n.CumulativeUomQuantities.length>0){for(t={},i=0;i<n.CumulativeUomQuantities.length;i++)t[n.CumulativeUomQuantities[i].UnitOfMeasure]=n.CumulativeUomQuantities[i];it.totals.uomQuants={};it.totals.uomQuants.weight=t.KG?t.KG.Total:null;it.totals.uomQuants.volume=t.M3?t.M3.Total:null;it.totals.uomQuants.area=t.M2?t.M2.Total:null;it.totals.uomQuants.pallets=t.PAL?t.PAL.Total:null;it.totals.uomQuants.weight||it.totals.uomQuants.volume||it.totals.uomQuants.area||it.totals.uomQuants.pallets||(it.totals.uomQuants=null)}return it.totals}function ht(i,r,u,f){if(i&&i.preventDefault&&i.preventDefault(),t.form&&t.form.$invalid&&!u){l.warning("Whoops!","Please provide all required details before requesting your release");s.validate(t.form,!0);return}it.details.DesiredFulfillmentDate||(n.log("%releaseCreate.controller > Defaulting date to minimum","color: pink"),it.details.DesiredFulfillmentDate=new Date(it.minDate));var e=moment.utc([it.details.DesiredFulfillmentDate.getFullYear(),it.details.DesiredFulfillmentDate.getMonth(),it.details.DesiredFulfillmentDate.getDate()]).startOf("day").format();it.details.DesiredFulfillmentDate=new Date(e);f&&f(!0)}function yt(){if(t.form.submitAttempted=!0,fi()){if(t.form.$invalid){l.swal({title:"Whoops!",text:"Some data is missing or invalid. Please check the details before placing your release.",type:"warning",showCancelButton:!1,confirmButtonText:"Ok"},function(){var n=angular.element("[name='"+t.form.$name+"']").find(".ng-invalid:visible:first");n.length===1&&setTimeout(function(){focusOnId(n[0].id);scrollToIdParent(n[0].id)})});s.validate(t.form,!0);return}if(!et.ops.config.useEstimatedDeliveryDate&&!it.details.DesiredFulfillmentTimeSlot)return l.swal({title:"Timeslot Required",text:"You don't seem to have any timeslot selected. Please choose one before placing your release",type:"error",confirmButtonText:"Ok"},function(){et.om.refresh()});kt()}}function wt(){ht(null,null,!1,function(n){n&&it.placeOrder(!0,ct)})}function bt(){it.updateFulFillmentDate(et.atpEarliestFulfillmentDate,it.details.DesiredFulfillmentDate);ht(null,null,!1,function(n){n&&it.placeOrder(!1,ct)})}function kt(){et.orderConfirmed=!1;et.orderConfirmationPending=!1;et.orderTimeslotIsAfterCutoff=it.selectedTimeslotIsAfterCutoff;et.shippingTypeDisplayText=et.isType(ut.type.pickup)?"pickup":"delivery";et.om.iterateOverItems(function(n,t){var i=it.items[t];i.productCount=0});et.om.iterateOverItems(function(n,t){var i=it.items[t];n.Quantity>0&&i.productCount++});et.ops.config.ordersArePullDownType?pt():dt()}function dt(){var n=it.details.Reference?'"'+it.details.Reference+'"':"this release";l.swal({title:"Confirm Release",text:"Are you sure you want to release "+n+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Place release",cancelButtonText:"Return to release",closeOnConfirm:!1,showLoaderOnConfirm:!0},function(n){n?ht(null,null,!1,function(n){n?(swal.close(),et.orderConfirmationPending=!0,et.$modalConfirmation=$("#modal-order-confirmation"),et.$modalConfirmation.modal(),it.placeOrder(!1,ct)):swal.close()}):scrollToY(0)})}function ct(i,r){i&&(gt(i),n.info("placed release",i));r&&lt(r);t.form.$setSubmitted();t.form.$setPristine();et.orderConfirmed=!0;et.orderConfirmationPending=!1;ft.swal.close();et.$modalConfirmation=$("#modal-order-confirmation");et.$modalConfirmation.modal();et.$modalConfirmation.on("click","a.closer",function(){et.$modalConfirmation.modal("hide")})}function pt(){et.$modalConfirmation=$("#modal-order-confirmation");et.$modalConfirmation.modal();et.$modalConfirmation.on("click","a.closer",function(){et.$modalConfirmation.modal("hide")})}function gt(n){for(var r=!1,u=!1,i=0;i<n.GeneratedOrders.length;i++)n.GeneratedOrders[i].DocumentStatus==Enums.documentStatus.pending&&(r=!0),(!n.GeneratedOrders[i].OrderNumber||n.GeneratedOrders[i].OrderNumber.isEmpty())&&(u=!0);et.om.iterateOverItems(function(t,i){for(var u=it.items[i],e=u.SapPlantId,f=!1,r=0;r<n.GeneratedOrders.length;r++)n.GeneratedOrders[r].DesiredFulfillmentLocationCode===e&&(f=!0,u.orderNumber=n.GeneratedOrders[r].OrderNumber,u.documentStatus=n.GeneratedOrders[r].DocumentStatus);f||(u.orderNumber=n.OrderNumber)});et.confirmed={orderNumber:n.OrderNumber,hasPendingOrders:r,hasFailedOrders:u,orderPDFUrl:ci(it.details.AccountId,n.OrderNumber),cashAccount:it.account.PaymentTerms==="CASH",canMakePayment:y.getPermissions()["All/Payment"],documentStatus:n.DocumentStatus,ordersArePullDownType:et.ops.config.ordersArePullDownType,canRequestRelease:!1,canViewRelease:n.OrderNumber};et.orderConfirmationPending=!1;et.orderConfirmed=!0;et.ops.config.ordersArePullDownType||(swal.close(),pt());t.$emit("achievements.taskComplete",{taskName:"05PlaceOrder",status:2})}function lt(n){l.swal({title:"Sorry",text:n!==undefined?n:"Connect is unable to place your release at this time. Please try again later.",type:"error"})}function ni(){ot.off(st).on(st,function(){u.go("app.orderCreate",null,{reload:!0,inherit:!1})});ot.modal("hide")}function ti(n){ot.off(st).on(st,function(){et.om.createReleaseFromOrderNo(n)});ot.modal("hide")}function ii(n){ot.off(st).on(st,function(){u.go("app.documents").then(function(){u.go("modalDocumentView",{accountId:it.details.AccountId,documentType:"orders",documentNo:n})})});ot.modal("hide")}function ri(){ot.off(st).on(st,function(){location.hash="#/docs?type=3"});ot.modal("hide")}function ui(n){ot.off(st).on(st,function(){location.hash="#/docs/"+et.ods.details.AccountId+"/orders/"+String("0000000000"+n).slice(-10)});ot.modal("hide")}function fi(){var n=!0,t,i;return it.items.length<1&&(n=!1),et.om.iterateOverPlantLists(function(r){var u,f;for(t=!0,i=!1,u=0;u<r.Items.length;u++)if(f=r.Items[u],f.Code!=="T"&&(t=!1,f.Quantity!==0)){i=!0;break}return(t||!i)&&(n=!1),n}),n||(et.multiplePlantsInPickupOrder?l.info("Whoops!","You'll need to ensure all pickup plants have products before you can place this release. You can remove items if they are not required."):l.info("Whoops!","You'll need to add some products to this release before you can place it.")),n}function ei(n){if(!n)return!0;for(var t=0;t<n.length;t++)if(n[t].Quantity>0)return!1;return!0}function oi(n){et.om.isAtpEnabled=!1;et.atpEarliestFulfillmentDate=n.AtpEarliestFulfillmentDate==null?null:new Date(n.AtpEarliestFulfillmentDate)}function si(n){return et.placeWithoutTotals=n}function hi(t){if(t){if(t.IsEligibleForRewards===!1||!t.RewardEligibilityAmount||!t.RewardVoucherAmount){et.rewards=null;return}et.rewards={amount:t.RewardEligibilityAmount,reward:t.RewardVoucherAmount}}if(et.rewards){var i=it.totals.subtotal-it.totals.freight;i=i>0?i:function(){var t=0;return et.om.iterateOverItems(function(n){t+=n.Conversion*(n.UnitPriceExcludingGST/n.PricingQuantity)*n.Quantity}),n.warn("OC > Rewards manually calculated subtotal >",t),t}();et.rewards.remaining=et.rewards.amount-i;et.rewards.progress=100-et.rewards.remaining/et.rewards.amount*100;et.rewards.progressWidth={width:et.rewards.progress+"%"};et.rewards.goalReached=et.rewards.remaining<=0}}function ci(n,t){return n&&t?window.location.href.replace(window.location.hash,"")+"api/products/order/export?accountId="+n+"&documentNo="+t+"&access_token="+y.token():!1}function li(n){n&&n.preventDefault();u.go("app.documents")}var et=this,ot,st;et.ods=it;et.ops=tt;et.om=it;et.orderTypes=ut.type;et.docStatuses=Enums.documentStatus;et.pageTitle=u.current.pageTitle;et.orderTypeDisplayText="release";et.userMobile=null;et.quickAdd={};et.confirmed={};et.detailsOpen=!0;et.placeWithoutTotals=!1;et.excludedState=!1;et.atpEarliestFulfillmentDate=null;et.userHasProductPricingPermission=!1;et.userHasSalesOrderPermission=!1;et.atLeastOneItemInOrderIsOutOfStock=!1;et.atLeastOneItemInOrderIsWithLowStock=!1;et.multiplePlantsInPickupOrder=!1;et.loadingItems=!0;et.isPghRelease=!0;et.orderTypes=ut.type;et.placeOrder=yt;et.updateTotals=vt;et.modalStartNewOrder=ni;et.modalRequestRelease=ti;et.modalViewRelease=ii;et.modalGoToOrders=ri;et.modalNavigateToDoc=ui;et.cancelReleaseRequest=li;et.placeExpeditedOrder=wt;et.amendOrderDateAndPlaceOrder=bt;et.isType=it.isType;t.placeOrder=yt;p.isReady()?at():(n.log("%creleaseCreate.controller > Init > Deferring until accounts ready","color: pink"),t.$on("accounts.dataReady",at));et.$modalConfirmation=null;et.confirmAndPlaceOrder=function(){et.orderConfirmationPending=!0;ht(null,null,!1,function(n,t){n?it.placeOrder(!1,ct):(t==undefined||t.ModelState||t.indexOf===undefined||t.indexOf("Invalid date specified")===-1?lt():lt(t),et.orderConfirmationPending=!1)})};ot=$("#modal-order-confirmation");st="hidden.bs.modal";t.$on("release.validated",function(t,i){var r=i.Result===1,u=i.TotalExGst===0,f=ei(i.LineItems);(r||u)&&n.log("%creleaseCreate.controller > Validate > has errors or null totals","color: pink",r||u,r,u);si((r||u)&&!f);vt(i);hi();oi(i)})}angular.module("app.ordersv2").controller("ReleaseCreateController",n);n.$inject=["$log","$scope","$stateParams","$rootScope","$state","$previousState","$timeout","$interpolate","$validation","$filter","$sanitize","SweetAlert","ordersv2","notificationService","authService","accountsService","freqOrderedProducts","orderTemplates","userPreferencesService","metrics","metricEvents","utilService","orderPolicyService","releaseData","jobData","ORDER","$window"]}(),function(){"use strict";function n(t,i,r,u,f,e,o,s,h,c,l,a){function nt(){n.items=[];n.itemsCount=0;n.totals=!1;n.details={}}function tt(n){var t={FetchReleaseData:!1,SbuCode:n.Details.SbuCode,AccountId:n.Details.AccountId,Reference:n.Details.Reference,OrderType:n.Details.OrderType,ProjectAccountId:n.Details.ProjectAccountId,PulldownOrderNo:n.Details.PulldownOrderNo,DesiredFulfillmentDate:new Date,DesiredFulfillmentLocationCode:n.Details.DesiredFulfillmentLocationCode,DesiredFulfillmentRegion:n.Details.DesiredFulfillmentRegion,DesiredFulfillmentTimeSlot:"ANY",DesiredFulfillmentType:null,BusinessName:n.Details.BusinessName,ContactName:n.Details.ContactName,ContactPhone:n.Details.ContactPhone,LotUnit:null,AddressLine1:n.Details.AddressLine1,State:n.Details.State,Suburb:n.Details.Suburb,Postcode:n.Details.Postcode,Country:n.Details.Country,BuilderName:null,JobId:n.Details.JobId,LineItemCount:null,Note:n.Details.Note,RecordType:0,SmsEnabled:n.Details.SmsEnabled,SmsNumber:n.Details.SmsNumber,Status:n.Details.Status,ItemsData:n.Items};r.go("app.orderRelease",{ReleaseData:t})}function it(n,t){e.swal({imageUrl:"/assets/img/loading-42.gif",imageSize:"42x42",title:"Starting release",timer:2e3,showConfirmButton:!1});r.go("app.orderRelease",{ReleaseData:{PulldownOrderNo:n,AccountId:t,FetchReleaseData:!0}})}function w(t){var i,r;if(t.FetchReleaseData){i={PulldownOrderNo:t.PulldownOrderNo,AccountId:t.AccountId,FetchReleaseData:!0};l.releases().refresh(null,i,function(n){var t=n.ReleaseData.Details;t.ItemsData=n.ReleaseData.Items;t.Timeslots=n.Timeslots;t.TimeslotsAfterCutoff=n.TimeslotsAfterCutoff;t.FirstDate=n.FirstDate;t.Account=n.Account;t.OrderAccountDetails=n.OrderAccountDetails;w(t)});return}n.account=t.Account;n.items=t.ItemsData;n.itemsCount=0;n.totals=!1;n.siteRestrictions={InclineRestriction:{question:"Does site access have a steep incline/decline?",value:null},ClearanceRestriction:{question:"Is clearance to power lines less than 3.1m?",value:null},ForkliftRequirement:{question:"Do you require goods spread around the site?",value:null}};n.details={Reference:t?t.Reference:null,AccountId:t?t.AccountId:null,ProjectAccountId:t?t.ProjectAccountId:null,PulldownOrderNo:t?t.PulldownOrderNo:null,SbuCode:t?t.SbuCode:null,Status:t?t.Status:Enums.orderStatus.draft,OrderType:t?t.OrderType:Enums.orderType.unspecified,OrderRecordType:Enums.orderRecordType.order,ClickAndCollectEnabled:!1,LotUnit:t?t.LotUnit:null,AddressLine1:t?t.AddressLine1:null,Suburb:t?t.Suburb:null,State:t?t.State:null,Country:t?t.Country:"AU",Postcode:t?t.Postcode:null,DesiredFulfillmentDate:null,DesiredFulfillmentTimeSlot:t?t.DesiredFulfillmentTimeSlot:null,DesiredFulfillmentTimeSlotCutOff:t?t.DesiredFulfillmentTimeSlotCutOff:null,DesiredFulfillmentTimeSlotCutOffTime:t?t.DesiredFulfillmentTimeSlotCutOffTime:null,DesiredFulfillmentRegion:t?t.DesiredFulfillmentRegion:"NSW",DesiredFulfillmentLocationCode:t?t.DesiredFulfillmentLocationCode:null,DesiredFulfillmentType:t?t.DesiredFulrfillmentType:null,BusinessName:t?t.BusinessName:null,ContactName:t?t.ContactName:null,ContactPhone:t?t.ContactPhone:null,BuilderName:t?t.BuilderName:null,Note:t?t.Note:null,SmsEnabled:t?t.SmsEnabled:!1,SmsNumber:t?t.SmsNumber:null,JobId:t?t.JobId:null,PreviousFulfillmentDate:null,SiteInclineRestriction:null,SiteClearanceRestriction:null,SiteForkliftRequirement:null,SiteForkliftRequirementNotes:null};n.minDate=null;n.details.DesiredFulfillmentDate=new Date(moment().format("YYYY-MM-DD"));n.shipTo=null;n.shipToAccounts=null;n.deliveryTypes=l.deliveryTypes(n.details.SbuCode);n.projectPricing=null;n.pickupLocations=[{PlantAddress:t.ItemsData[0].PlantAddress,PlantName:t.ItemsData[0].PlantName,PlantId:t.ItemsData[0].SapPlantId,ClickAndCollectEnabled:!1}];n.pickupPlantName=t.ItemsData[0].Plantname;n.initialised=!1;p({AtpEarliestFulfillmentDate:null,AtpEnabled:!1,TotalExGst:0,TotalFreight:0,TotalGst:0,TotalInclGst:0,TotalLevies:0,TotalSurcharges:0,IsFreightCalculated:!0,CumulativeUomQuantities:[{UnitOfMeasure:"KG",Total:0}]});d();t.Timeslots?(r={Timeslots:t.Timeslots,FirstDate:t.FirstDate,OrderAccountDetails:t.OrderAccountDetails,TimeslotsAfterCutoff:t.TimeslotsAfterCutoff},b(r)):v()}function v(i){var r,u;n.isRefreshing=!0;t.log("%creleaseData > Refresh","color: pink");r=[];k(function(n){r.push(n.PickupPlantId)});u={AccountId:n.details.AccountId,OrderType:n.details.OrderType,FetchReleaseData:!1,PulldownOrderNo:n.details.PulldownOrderNo,DesiredDate:n.details.DesiredFulfillmentDate,State:n.details.State,PlantIds:r};l.releases().refresh(null,u,function(n){b(n,i)});return}function b(i,r){t.log("%creleaseData > Refreshed starting","color: pink");n.timeSlots=i.Timeslots;n.timeslotsAfterCutoff=i.TimeslotsAfterCutoff;!n.account&&i.Account&&(n.account=i.Account);var u=moment(i.FirstDate).startOf("day");n.minDate&&n.details.DesiredFulfillmentDate||(n.minDate=u,n.details.DesiredFulfillmentDate=new Date(u));n.details.DesiredFulfillmentTimeSlot=i.Timeslots[0];u.isAfter(moment(n.details.DesiredFulfillmentDate))&&(t.log("%creleaseData > Refreshed changing date from","color: pink",n.details.DesiredFulfillmentDate,"to",u),n.details.DesiredFulfillmentDate=new Date(u),r&&r(n.details.DesiredFulfillmentDate));n.orderAccountDetails=i.OrderAccountDetails;lt(n.orderAccountDetails.ShipToAddresses);a.updateOrderSbuConfiguration(n.account.SbuCode);n.selectedTimeslotIsAfterCutoff=n.timeslotsAfterCutoff.includes(n.details.DesiredFulfillmentTimeSlot);n.isRefreshing=!1;n.initialised=!0;t.log("%creleaseData > Refreshed finished","color: pink",i)}function rt(t){return Enums.orderType[t]==n.details.OrderType}function ut(t){t.State||delete t.State;t.Country||delete t.Country;angular.merge(n.details,t)}function ft(i,r,u){i!==r&&(t.log("%creleaseData > updateFulfillmentDate from ","color: pink",r," to ",i,"color: pink"),n.details.DesiredFulfillmentDate=new Date(i),n.details.PreviousFulfillmentDate=r,v(u))}function et(){var n=[];return y(function(t){t.PlantId&&n.push(t.PlantName)}),n}function y(t){var i,r;if(typeof t=="function")for(i=0;i<n.items.length;i++)if(r=n.items[i],t(r,i)===!1)break}function k(n){typeof n=="function"&&y(function(t,i){for(var u,r=0;r<t.Items.length;r++)if(u=t.Items[r],n(u,i,r)===!1)break})}function ot(){n.details.DesiredFulfillmentDate||(t.log("%releaseData > Defaulting date to minimum","color: pink"),n.details.DesiredFulfillmentDate=new Date(n.minDate));var i=moment.utc([n.details.DesiredFulfillmentDate.getFullYear(),n.details.DesiredFulfillmentDate.getMonth(),n.details.DesiredFulfillmentDate.getDate()]).startOf("day").format();return new Date(i)}function st(){n.totals=!1;n.isValidating=!0}function ht(t){n.details.SmsNumber=t}function p(t){var f,r,u;if(!t){f={Details:n.details,Items:n.items};g(f).then(function(n){l.releases().simulate(null,n,function(n){p(n)})});return}if(n.totals={freight:t.TotalFreight,isFreightCalculated:t.IsFreightCalculated,levies:t.TotalLevies,surcharges:t.TotalSurcharges,subtotal:t.TotalExGst,includedGST:t.TotalGst,total:t.TotalInclGst},t.CumulativeUomQuantities&&t.CumulativeUomQuantities.length>0){for(r={},u=0;u<t.CumulativeUomQuantities.length;u++)r[t.CumulativeUomQuantities[u].UnitOfMeasure]=t.CumulativeUomQuantities[u];n.totals.uomQuants={};n.totals.uomQuants.weight=r.KG?r.KG.Total:null;n.totals.uomQuants.volume=r.M3?r.M3.Total:null;n.totals.uomQuants.area=r.M2?r.M2.Total:null;n.totals.uomQuants.pallets=r.PAL?r.PAL.Total:null;n.totals.uomQuants.weight||n.totals.uomQuants.volume||n.totals.uomQuants.area||n.totals.uomQuants.pallets||(n.totals.uomQuants=null)}i.$broadcast("release.validated",t);n.isValidating=!1;return}function d(){n.details.SiteInclineRestriction=n.siteRestrictions.InclineRestriction.value;n.details.SiteClearanceRestriction=n.siteRestrictions.ClearanceRestriction.value;n.details.SiteForkliftRequirement=n.siteRestrictions.ForkliftRequirement.value;n.details.SiteForliftRequirement||(n.details.SiteForkliftRequirementNotes=null)}function ct(i,r){t.log("%creleaseData > Place > Placing release ...","color: pink");var f={Details:n.details,Items:n.items};f.Details.SmsEnabled&&(f.Details.SmsNumber==null||typeof f.Details.SmsNumber!="string"||f.Details.SmsNumber.trim().length<1)&&(f.Details.SmsEnabled=!1,f.Details.SmsNumber=null);g(f).then(function(n){l.releases().place({expeditedOrder:typeof i=="undefined"?!1:i},n,function(n){t.log("%creleaseData > PlaceOrder > ... release was placed > ","color: pink",n);u(function(){r(n,null)})},function(n){t.error("%creleaseData > PlaceOrder > ... release failed to be placed > ","color: pink",n);u(function(){r(null,n)})})})}function lt(i){var u,f,r;for(t.log("%creleaseData > Populating ShipToAccounts ...","color: pink",i),t.log("%creleaseData > Got %s ShipTo accounts >","color: pink",i.length,i),u=[],f=null,r=0;r<i.length;r++)i[r].AccountId&&i[r].Name&&(i[r].displayName=i[r].AccountId+" - "+i[r].Name,u.push(i[r]),i[r].AccountId===n.details.ProjectAccountId&&(f=i[r]));t.log("%creleaseData > Kept %s ShipTo accounts >","color: pink",u.length,u);n.shipToAccounts=u.length>0?u:null;n.shipTo=f}function at(){n.optionalSiteAddress=!1}function g(n){var t=angular.copy(n);return new Promise(function(n,i){if(t&&t.Items&&t.Items.length===1&&t.Items[0].Items&&t.Items[0].Items.constructor===Array)t.Items[0].Items.forEach(function(n){n.Code!=="T"&&n.Description&&delete n.Description}),n(t);else{var r=new Error("Unable to sanitize release request item(s) - invalid request data");i(r)}})}return n={init:w,items:[],itemsCount:0,totals:!1,details:{Reference:null,AccountId:null,ProjectAccountId:null,PulldownOrderNo:null,SbuCode:null,Status:Enums.orderStatus.draft,OrderType:Enums.orderType.unspecified,OrderRecordType:Enums.orderRecordType.order,ClickAndCollectEnabled:!1,LotUnit:"",AddressLine1:"",Suburb:"",State:"NSW",Country:"AU",Postcode:"",DesiredFulfillmentDate:null,DesiredFulfillmentTimeSlot:null,DesiredFulfillmentTimeSlotCutOff:null,DesiredFulfillmentTimeSlotCutOffTime:null,DesiredFulfillmentRegion:"NSW",DesiredFulfillmentLocationCode:null,DesiredFulfillmentType:null,BusinessName:null,ContactName:null,ContactPhone:null,BuilderName:null,Note:null,SmsEnabled:!1,SmsNumber:"",JobId:null,SiteInclineRestriction:null,SiteClearanceRestriction:null,SiteForkliftRequirement:null,SiteForkliftRequirementNotes:null},siteRestrictions:{InclineRestriction:{question:"Does site access have a steep incline/decline?",value:null},ClearanceRestriction:{question:"Is clearance to power lines less than 3.1m?",value:null},ForkliftRequirement:{question:"Do you require goods spread around the site?",value:null}},shipTo:null,shipToAccounts:null,deliveryTypes:{},projectPricing:null,isRefreshing:!0,isValidating:!1,pickupLocations:[],pickupPlantName:null,initialised:!1,accounts:[],account:null,minDate:null,timeSlots:null,maxDate:null,job:null,isOrderRelease:!0,clear:nt,isType:rt,setAddress:ut,updateFulfillmentDate:ft,getItemLevelPlants:et,iterateOverPlantLists:y,iterateOverItems:k,getOrderFulfillmentDate:ot,placeOrder:ct,createReleaseFromDocView:tt,createReleaseFromOrderNo:it,updateSmsNumber:ht,removeSiteAddress:at,refresh:v,clearTotals:st,updateTotals:p,updateSiteRestrictions:d}}angular.module("app.ordersv2").factory("releaseData",n);n.$inject=["$log","$rootScope","$state","$timeout","$sanitize","SweetAlert","authService","accountsService","userPreferencesService","notificationService","ordersv2","orderPolicyService"]}(),function(n){function i(){return{restrict:"AE",isolate:!0,scope:{},controller:t,controllerAs:"oli",templateUrl:"ordersv2.releaseLineItems.html"}}function t(n,t,i,r,u,f,e,o,s,h,c,l,a,v){function d(){h.updateTotals()}function g(n){var c=h.items&&h.items.length>0&&n.LineItems&&n.LineItems.length>0,o,i,t;if(c){var r=0,f=0,s={};y.om.iterateOverItems(function(n,t,i){s[n.SapLineItemNo]=h.items[t].Items[i]});u.log("%creleaseLineItems > Validating items > ","color: pink",s,"against",n.LineItems);var l=h.account.SbuCode,e=selectByProp("SbuCode",l,v).result,p=e!==undefined&&e!==null&&e.EnablePriceChangeThreshold===!0,w=!1;for(o=0;o<n.LineItems.length;o++)i=n.LineItems[o],k(i)&&(t=s[i.SapLineItemNo],t?(t.Quantity===i.Quantity?(t.DisplayRemainingQty=i.RemainingQty-t.Quantity,t.UnitPriceExcludingGST!==i.UnitPriceExcludingGST&&(!p||!isNaN(t.UnitPriceExcludingGST)&&!isNaN(i.UnitPriceExcludingGST)&&Math.abs(t.UnitPriceExcludingGST-i.UnitPriceExcludingGST)>e.PriceChangeThreshold)&&(t.UnitPriceExcludingGST=i.UnitPriceExcludingGST,t.changed=!0,r++),t.isValidating=!1,t.DeliveryBlockSize=i.DeliveryBlockSize,t.DeliveryUOM=i.DeliveryUOM,nt(i,t)):t.isValidating=!0,w|=t.isValidating):f++);r&&(u.log("%creleaseLineItems > Validating items > Updated pricing for %s items","color: pink",r),a.add({id:"releasePriceUpdate",type:"warning",message:"Prices for some items in your release have changed. Please check the highlighted items before placing your release."}));f&&u.log("%creleaseLineItems > Validating items > Could not update pricing for %s items","color: pink",f);r||f||(u.log("%creleaseLineItems > All matched items OK","color: pink"),a.remove("releasePriceUpdate"),y.om.iterateOverItems(function(n){n.changed=!1}))}}function nt(n,t){var u=h.getOrderFulfillmentDate(),i,r;if(t.atpCheckResult=n.AtpCheckResult,t.atpFulfillmentDate=n.AtpFulfillmentDate==null?null:new Date(n.AtpFulfillmentDate),t.atpCheckResult!=="Y"&&t.atpFulfillmentDate!=null&&t.atpFulfillmentDate<=u&&(t.atpCheckResult="Y"),t.atpTooltip=null,t.atpCheckResult!=="Y"){if(t.atpCheckResult==="L"){t.atpTooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your release.";return}t.atpTooltip="There is not enough stock available to fulfil this release.";t.atpFulfillmentDate!==null&&(i=moment().utcOffset(),r=moment(n.AtpFulfillmentDate).utcOffset(i).format("DD/MM/YYYY"),t.atpTooltip+=" The ordered quantity will be available on "+r)}}function w(n){u.log("%creleaseLineItems > Reorder item > %s from %s to %s","color: pink",n.source.itemScope.item.Id,n.source.index,n.dest.index);var t=n.dest.sortableScope.element.context.getAttribute("as-sortable-id");rt(n.source.itemScope.item)&&(n.source.itemScope.item.PickupPlantId=t);c.reorderItems().save({orderId:h.details.Id,id:n.source.itemScope.item.Id},{orderId:h.details.Id,orderItemId:n.source.itemScope.item.Id,sortOrder:n.dest.index,pickUpPlantId:t},function(n){u.log("%creleaseLineItems > Reorder item > Successful >","color: pink",n)})}function b(n){return n.PricingQuantity===0?0:n.Conversion*n.UnitPriceExcludingGST/n.PricingQuantity}function tt(n){return b(n)*n.Quantity}function it(n,t){return n.Code!=="T"&&(!n.custom||t)&&n.UnitPriceExcludingGST===0}function rt(n){return n.Code==="T"}function k(n){return n.Code!=="T"}function ut(n){return n.Code!=="T"&&!n.custom}function ft(n){return n.Code!=="T"&&n.UnitPriceExcludingGST===0}var y=this,p;y.om=h;y.ops=o;y.ods=h;y.showPricing=o.userHasProductPricingPermission();y.isCallForPrice=it;y.calcUnitPrice=b;y.calcPrice=tt;y.isItemWithNoPrice=ft;y.isNotText=k;y.isNotTextOrCustom=ut;p=debounce(d,2e3);r.sortableOptions={accept:function(){return!1},placeholder:'<tr><td colspan="6"><\/td><\/tr>',orderChanged:function(n){w(n)},itemMoved:function(n){w(n)}};y.updateItem=function(n){u.log("%creleaseLineItems.updateItem","color: pink",n);h.clearTotals();p()};r.$on("release.validated",function(n,t){g(t)})}n.module("component.releaseLineItems").directive("releaseLineItems",i);t.$inject=["$timeout","$rootScope","$state","$scope","$log","$filter","authService","orderPolicyService","SweetAlert","releaseData","ordersv2","$stateParams","notificationService","SBU_CONFIG"]}(angular),function(n){function i(){return{require:"^form",restrict:"AE",isolate:!1,scope:{form:"=form",detailsOpen:"=detailsOpen",userMobile:"=userMobile",validationErrors:"=validationErrors",saveOrder:"&",silentSaveOrder:"&"},controller:t,controllerAs:"oh",templateUrl:"releaseHeader.html"}}function t(n,t,i,r,u,f,e,o,s,h,c,l){function v(n){n&&n.preventDefault();u.saveOrder()}function y(n){return n==undefined?!1:n.match(/^$|^(?:0|\+61[ ]?)4\d{2}[ ]?\d{3}[ ]?\d{3}$|^(?:0|\+64[ ]?)2\d{7,9}$/)?!0:!1}function p(n,t){var i,r;t&&(i=[],$.each(t.address_components,function(n,t){$.each(t.types,function(n,r){i[r]={long:t.long_name,short:t.short_name}})}),f.log("%creleaseHeader > Populating address with result","color: pink",i),r=t.vicinity!==t.name?t.name:a.ods.details.AddressLine1,s.setAddress({AddressLine1:r,Suburb:t.vicinity,Country:i.country.short,State:i.administrative_area_level_1?i.administrative_area_level_1.short:null,Postcode:i.postal_code?i.postal_code.long:null}))}function w(n){a.updateFulFillmentDate(n.DesiredFulfillmentDate,a.ods.details.DesiredFulfillmentDate,b)}function b(n){t(function(){a.ods.details.DesiredFulfillmentDate=new Date(n);u.$apply();var t=a.ods.details.OrderType===Enums.orderType.delivery;h.info(t?"Delivery date":"Pickup date unavailable","The next available date ("+moment(n).format("DD/MM/YYYY")+") has been selected.")},100)}function k(n,t){n!==t&&(a.ods.details.details.DesiredFulfillmentDate=new Date(n))}function d(n){a.updateEstimatedFulFillmentDate(n.DesiredFulfillmentDate,a.ods.details.DesiredFulfillmentDate)}function g(){if(l.canDo("r","Customer/Jobs")){a.availableJobs=null;var n={sortBy:Enums.jobSortType.name.toString(),perPage:100};c.get(n,function(n){a.availableJobs=n.Results})}}function nt(){a.ods.selectedTimeslotIsAfterCutoff=a.ods.timeslotsAfterCutoff.includes(a.ods.details.DesiredFulfillmentTimeSlot)}var a=this;a.ods=s;a.availableJobs=null;g();a.config=o.config;a.orderTypeDisplayText="release";a.Enums=Enums;a.orderType=keyFlip(a.Enums.orderType);a.siteRestrictionTypes=Object.keys(a.ods.siteRestrictions);a.removeSiteAddress=s.removeSiteAddress;a.isType=s.isType;a.saveOrder=v;a.isMobile=y;a.getPlantDetails=s.getPlantDetails;a.updateFulFillmentDate=s.updateFulFillmentDate;a.applyFulFillmentDate=w;a.updateEstimatedFulFillmentDate=k;a.applyEstimatedFulFillmentDate=d;a.updateSmsNumber=s.updateSmsNumber;a.checkTimeslotCutoff=nt;a.updateSiteRestrictions=function(n){s.updateSiteRestrictions(n)};u.$on("placeChanged",p)}n.module("app.ordersv2").directive("releaseHeader",i);t.$inject=["$rootScope","$timeout","$stateParams","$state","$scope","$log","ordersv2","orderPolicyService","releaseData","SweetAlert","jobs","authService"]}(angular),function(){"use strict";function n(n,t,i){n.url="";n.init=function(){t.paymentMethodsDirectDebitUrl().success(function(t){n.url=t.Url;window.location=n.url}).error(function(n){i.add({type:"error",message:n.Message})})};n.init()}angular.module("app.payments").controller("PaymentMethodsDirectDebitController",n);n.$inject=["$scope","paymentsService","notificationService"]}(),function(n){"use strict";function t(n,t,i,r,u,f,e,o,s,h){function l(t){if(!t)return!1;c[t]=1;for(t in c)if(!c[t])return!1;return n.paymentsMethodReady=!0,n.paymentsMethodReady}function v(t){n.currentTokenNumber=n.currentPayment&&n.currentPayment.TokenNumber?n.currentPayment.TokenNumber:t.length===1?first(t).TokenNumber:n.paymentNewAccountDirectDebit}var a,c;n.paymentsMethodReady=!1;n.tokenTypes=[];n.currentTokenNumber="";n.DirectDebitBankAccountRate=0;n.DirectDebitCreditCardRate=0;n.CreditCardAmexRate=0;n.CreditCardMasterCardRate=0;n.CreditCardVisaRate=0;n.DebitCardMasterCardRate=0;n.DebitCardVisaRate=0;n.MultipleDirectDebitBankAccountRate=!1;n.MultipleDirectDebitCreditCardRate=!1;n.MultipleCreditCardAmexRate=!1;n.MultipleCreditCardMasterCardRate=!1;n.MultipleCreditCardVisaRate=!1;n.MultipleDebitCardMasterCardRate=!1;n.MultipleDebitCardVisaRate=!1;n.DebitTokenRates=[];n.CreditCardTokenRates=[];n.ratesError=!1;a=[];n.resultKey=o.search().ResultKey;n.makePayment=function(){t.writeCurrentPayment(null);window.location.href="/#/financials/payments"};n.getTokenFromArray=function(n,t){for(var i=0;i<n.length;i++)if(n[i].TokenNumber===t)return n[i];return undefined};n.getToken=function(t){var i,u,r;if(t)for(i=0;i<n.tokenTypes.length;i++)if(u=n.tokenTypes[i],r=n.getTokenFromArray(u.tokens,t),r)return r;return undefined};n.selectPaymentMethod=function(){n.setTokenDetails({TokenNumber:n.currentTokenNumber,PaymentMethodName:"Unknown",IsDirectDebitToken:!1,IsDirectDebitCreditCardToken:!1,IsCreditCardToken:!1});switch(n.currentTokenNumber){case n.paymentNewAccountDirectDebit:case n.paymentNewCardDirectDebit:case n.paymentNewCard:n.goNext()}};n.addNew=function(n){u.go(n)};n.getIconPath=function(n){switch(n){case"AmexCard":return"/Assets/img/icons/icon-card-amex.png";case"MasterCard":return"/Assets/img/icons/icon-card-mc.png";case"VisaCard":return"/Assets/img/icons/icon-card-visa.png";case"BankAccount":return"/Assets/img/icons/icon-card-account.png";default:return""}};c={tokens:0,rates:0};n.$on("accounts.changed",function(){e.info("Payment Methods > accounts.changed");c={tokens:0,rates:0};n.paymentsReady=!1;n.init()});n.init=function(){var r=t.processingRatesForAccounts(),u=t.storedTokens();f.all([r,u]).then(function(t){var r=t[0].data,i;n.processProcessingRates(r);l("rates");i=t[1].data;n.processStoredTokens(i);v(i.Tokens);l("tokens");n.resultKey!=null&&n.newPaymentMethodMessage()},function(t){i.removeAll();i.add({type:"error",message:t.data.Message});t.data.Message.indexOf("fees")>-1&&(n.ratesError=!0);l("rates");l("tokens")})};n.newPaymentMethodMessage=function(){t.exchangeToken(n.resultKey).then(function(t){var r=a.Tokens.find(function(n){return n.TokenNumber==t.data}),u=n.getFeeMessage(r);i.add({type:"success",message:"Your payment method has been added"+u})})};n.getFeeMessage=function(t){var i=undefined,r=!1;return(t.IsDirectDebitBankAccountToken?(i=n.DirectDebitBankAccountRate,r=n.MultipleDirectDebitBankAccountRate):t.IsDirectDebitToken?(i=n.DirectDebitCreditCardRate,r=n.MultipleDirectDebitCreditCardRate):t.IsCreditCardToken?(i=n.CreditCardTokenRates[t.PaymentMethodName].rate,r=n.CreditCardTokenRates[t.PaymentMethodName].multiple):t.IsDebitCard||t.IsCreditCardRecurringToken?(i=n.DebitTokenRates[t.PaymentMethodName].rate,r=n.DebitTokenRates[t.PaymentMethodName].multiple):t.PaymentMethodName=="AmexCard"&&(i=n.CreditCardAmexRate,r=n.MultipleCreditCardAmexRate),i!=undefined&&i!=0)?"<br/>A fee of "+(r===!0?"up to ":"")+i+"% will apply to all payments made with this card":""};n.processProcessingRates=function(t){n.DirectDebitBankAccountRate=t.Rates.DirectDebitBankAccountRate;n.MultipleDirectDebitBankAccountRate=t.Rates.MultipleDirectDebitBankAccountRate;n.DirectDebitCreditCardRate=t.Rates.DirectDebitCreditCardRate;n.MultipleDirectDebitCreditCardRate=t.Rates.MultipleDirectDebitCreditCardRate;n.CreditCardAmexRate=t.Rates.CreditCardAmexRate;n.MultipleCreditCardAmexRate=t.Rates.MultipleCreditCardAmexRate;n.CreditCardMasterCardRate=t.Rates.CreditCardMasterCardRate;n.MultipleCreditCardMasterCardRate=t.Rates.MultipleCreditCardMasterCardRate;n.CreditCardVisaRate=t.Rates.CreditCardVisaRate;n.MultipleCreditCardVisaRate=t.Rates.MultipleCreditCardVisaRate;n.DebitCardMasterCardRate=t.Rates.DebitCardMasterCardRate;n.MultipleDebitCardMasterCardRate=t.Rates.MultipleDebitCardMasterCardRate;n.DebitCardVisaRate=t.Rates.DebitCardVisaRate;n.MultipleDebitCardVisaRate=t.Rates.MultipleDebitCardVisaRate;n.DebitTokenRates.MasterCard={rate:t.Rates.DebitCardMasterCardRate,multiple:t.Rates.MultipleDebitCardMasterCardRate};n.DebitTokenRates.VisaCard={rate:t.Rates.DebitCardVisaRate,multiple:t.Rates.MultipleDebitCardVisaRate};n.CreditCardTokenRates.MasterCard={rate:t.Rates.CreditCardMasterCardRate,multiple:t.Rates.MultipleCreditCardMasterCardRate};n.CreditCardTokenRates.VisaCard={rate:t.Rates.CreditCardVisaRate,multiple:t.Rates.MultipleCreditCardVisaRate};n.CreditCardTokenRates.AmexCard={rate:t.Rates.CreditCardAmexRate,multiple:t.Rates.MultipleCreditCardAmexRate}};n.processStoredTokens=function(t){var u=[],f=[],e=[],o=[],r,i;for(a=t,r=0;r<t.Tokens.length;r++)i=t.Tokens[r],i.IsDirectDebitBankAccountToken?u.push(i):i.IsDebitCard?o.push(i):i.IsDirectDebitCreditCardToken?f.push(i):i.IsCreditCardRecurringToken&&e.push(i);n.tokenTypes.push({heading:"Bank Account",headingFees:"No fee: Bank account transfers incur no fees",newLabel:"Register new bank account",newValue:"app.paymentsMethodsNewCard",tokens:u});n.tokenTypes.push({heading:"Low Fee Credit Card",headingFees:"Fees: MasterCard "+(n.MultipleDirectDebitCreditCardRate===!0?"up to":"")+n.DirectDebitCreditCardRate+"%, Visa "+(n.MultipleDirectDebitCreditCardRate===!0?"up to":"")+n.DirectDebitCreditCardRate+"%, American Express not accepted",newLabel:"Register new card",newValue:"app.paymentMethodsDirectDebit",tokens:f});n.tokenTypes.push({heading:"Credit Card",headingFees:"Fees: MasterCard "+(n.MultipleCreditCardMasterCardRate===!0?"up to ":"")+n.CreditCardMasterCardRate+"%, Visa "+(n.MultipleCreditCardVisaRate===!0?"up to ":"")+n.CreditCardVisaRate+"%, American Express "+(n.MultipleCreditCardAmexRate===!0?"up to ":"")+n.CreditCardAmexRate+"%",newLabel:"Add new card",newValue:"app.paymentsMethodsNewCard",tokens:e});n.tokenTypes.push({heading:"Debit Card",headingFees:"Fees: MasterCard "+(n.MultipleDebitCardMasterCardRate===!0?"up to ":"")+n.DebitCardMasterCardRate+"%, Visa "+(n.MultipleDebitCardVisaRate===!0?"up to ":"")+n.DebitCardVisaRate+"%.",newLabel:"Register new debit card",newValue:"app.paymentsMethodsNewCard",tokens:o})};n.regularTokenTypes=function(){return n.tokenTypes.filter(function(n){return n.heading!="Low Fee Credit Card"})};n.lowFeeTokenTypes=function(){return n.tokenTypes.filter(function(n){return n.heading=="Low Fee Credit Card"})};n.removeTokenFromScopeArray=function(n,t){for(var i=0;i<n.length;i++)if(n[i].TokenNumber===t)return n.splice(i,1),!0;return!1};n.removeTokenFromScope=function(t){for(var r,i=0;i<n.tokenTypes.length;i++)if(r=n.tokenTypes[i],n.removeTokenFromScopeArray(r.tokens,t))break};n.deleteStoredTokenFromService=function(r){t.deleteStoredToken(r).success(function(){n.removeTokenFromScope(r)}).error(function(n){i.add({type:"error",message:n.Message})})};n.deletePaymentToken=function(t){var i=n.getToken(t);i.IsExpired?n.deleteStoredTokenFromService(t):r.swal({title:"Remove payment method?",text:"<strong>"+i.PaymentMethodName+"<\/strong><br>"+i.AccountName+"<br>"+i.MaskedCardNumber+"<br>"+(i.IsExpired?"Expired ":"Expiry ")+i.MaskedExpiryDate,type:"warning",showCancelButton:!0,confirmButtonText:"Yes, remove",cancelButtonText:"No",html:!0},function(i){i&&n.deleteStoredTokenFromService(t)})};n.getActionType=function(){switch(n.currentTokenNumber){case n.paymentNewAccountDirectDebit:return"Register new bank account";case n.paymentNewCardDirectDebit:return"Register new card";case n.paymentNewCard:return"Add new card";default:return"Select payment method"}};n.$on("accounts.dataReady",function(){e.info("Payment Methods > accounts.ready");n.init()});s.isAuthenticated()&&h.isReady()&&n.init()}n.module("app.payments").controller("PaymentMethodsEditController",t);t.$inject=["$scope","paymentsService","notificationService","SweetAlert","$state","$q","$log","$location","authService","accountsService"]}(angular),function(){"use strict";function n(n,t,i){n.url="";n.init=function(){t.paymentMethodsCreditCardUrl().success(function(t){n.url=t.Url;window.location=n.url}).error(function(n){i.add({type:"error",message:n.Message})})};n.init()}angular.module("app.payments").controller("PaymentMethodsNewCardController",n);n.$inject=["$scope","paymentsService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f){n.jobData=f;n.listReady=!1;n.searchOptions={dateRange:{startDate:new Date(moment().subtract(3,"M").format("YYYY-MM-DD")),endDate:new Date(moment().add(1,"d").format("YYYY-MM-DD"))}};n.quickSearch=function(){n.list.search()};n.tableHeaders=[{columnName:"Reference",displayName:"Reference"},{displayName:"Method"},{columnName:"Amount",displayName:"Amount"},{columnName:"FeeAmount",displayName:"Fees"},{displayName:"Total"},{columnName:"Currency",displayName:"Currency"},{columnName:"UserId",displayName:"User"},{columnName:"AccountId",displayName:"Account ID"},{columnName:"CreatedOn",displayName:"Created On"}];n.listViewConfig={resourceName:"paymentsService",filters:[{field:"CreatedOn",alias:"From",operator:">=",value:moment(n.searchOptions.dateRange.startDate).format()},{field:"CreatedOn",alias:"To",operator:"<",value:moment(n.searchOptions.dateRange.endDate).format()},{field:"Reference",operator:"like",value:n.searchOptions.searchText},{field:"JobId",operator:"=",value:n.searchOptions.JobId}],order:[{field:"CreatedOn",orderBy:"desc"}],itemName:"paymentsHistory"};n.$on("list.search",function(){n.listReady=!1;n.list.config.filters.From.value=moment(n.searchOptions.dateRange.startDate).hour(0).format();n.list.config.filters.To.value=moment(n.searchOptions.dateRange.endDate).hour(24).format();n.list.config.filters.Reference.value=n.searchOptions.searchText;n.list.config.filters.JobId.value=n.jobData.jobId});n.$on("list.onDataBind",function(){n.listReady=!0});n.viewDetails=function(n){t.path("admin/payments/"+n)};n.exportFiles=function(t,r){t.stopPropagation();var f=jstz.determine(),e=window.location.protocol+"//"+window.location.host+"/api/finance/payments/historyexport?fileType="+r+"&$filter="+encodeURIComponent(n.list.config.lastQuery.$filter)+"&$orderby="+encodeURIComponent(n.list.config.lastQuery.$orderby)+"&timeZone="+f.name()+"&access_token="+i.token()+"&accountId="+u.getActive().join(",");window.open(e)};$("#btn-download-csv").on("click",function(t){n.exportFiles(t,r.csv)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,r.excel)});f.onJobIdChanged=function(){n.list.search()}}angular.module("app.payments").controller("CustomerPaymentsHistoryController",n);n.$inject=["$scope","$location","authService","exportService","accountsService","jobData"]}(),function(n){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l){var a=this;i.initialised=!1;i.paymentsMode=!0;i.itemsPerPage=10;i.paymentNewAccountDirectDebit="dd-account-new";i.paymentNewCardDirectDebit="dd-card-new";i.paymentNewCard="cc-new";i.hasCriticalErrors=!1;i.showGSTInclusiveNote=!1;i.paymentDataErrorMsg="Ooops, sorry but an error has occurred. If you don't mind, please try again and if the error continues contact support at help@csr.com.au or via Livechat and quote error code CP0001.";i.readPaymentErrorMsg="Ooops, sorry but an error has occurred. If you don't mind, please try again and if the error continues contact support at help@csr.com.au or via Livechat and quote error code CP0002.";i.writePaymentErrorMsg="Ooops, sorry but an error has occurred. If you don't mind, please try again and if the error continues contact support at help@csr.com.au or via Livechat and quote error code CP0003.";i.gatewayResponseErrorMsg="Ooops, sorry but an error has occurred. If you don't mind, please try again and if the error continues contact support at help@csr.com.au or via Livechat and quote error code CP0004.";i.retrieveOutstandingInvoicesErrorMsg="Ooops, sorry but an error has occurred retrieving your outstanding invoices. If you don't mind, please try again and if the error continues contact support at help@csr.com.au or via Livechat.";i.totalAmountLessThanOne="The total payment amount must be greater than $1.00";i.cannotGoNextErrorMsg="Cannot proceed to the next step of the payment process. If this error persists, please email help@csr.com.au and quote this message.";i.displayNoInvoices="No invoices are displayed for cash sale accounts, as payments must be made against sales orders.";i.displayNoSalesOrders="No sales orders are displayed for credit accounts, as payments must be made against invoices.";i.audPaymentsOnly="Only AUD payments are currently accepted online. For payments in other currencies please contact your CSR account manager.";i.jd=c;i.isInitialised=function(n){return i.initialised=n||i.initialised,i.initialised};i.showFootnote=function(){i.showGSTInclusiveNote=!0};i.hideFootnote=function(){i.showGSTInclusiveNote=!1};i.getIconPath=function(n){switch(n){case"AmexCard":return"/Assets/img/icons/icon-card-amex.png";case"MasterCard":return"/Assets/img/icons/icon-card-mc.png";case"VisaCard":return"/Assets/img/icons/icon-card-visa.png";case"BankAccount":return"/Assets/img/icons/icon-card-account.png";default:return""}};i.getSelectedLineItems=function(){return i.currentPayment&&i.currentPayment.SelectedLineItems?i.currentPayment.SelectedLineItems:[]};i.setSelectedLineItems=function(n){var u,r,t,f;if(n&&i.currentPayment)for(i.currentPayment.AmountInCents=0,i.currentPayment.SelectedLineItems=[],u=0;u<n.length;u++){r=n[u];t={AccountId:r.AccountId,CompanyCode:r.CompanyCode,Currency:r.Currency,TotalDue:r.Amount,PaidNow:r.PayAmount,Notes:""};switch(i.currentPayment.InitialState){case"app.payments.payInvoices":t.AccountName=null;t.SbuCode=null;t.DocumentType=r.TypeLabel;t.DocumentDate=r.DocumentDate;t.FinancialYear=r.FinancialYear;t.CsrReference=r.InvoiceRef;t.CustomerReference=r.CustomerRef;t.Address=null;t.AlreadyPaid=null;t.ItemNumber=r.ItemNumber;i.currentPayment.AmountInCents+=Math.round(100*(parseFloat(t.PaidNow).toFixed(2)||0));i.currentPayment.SelectedLineItems.push(t);break;case"app.payments.payOrders":t.AccountName=null;t.SbuCode=null;t.DocumentType=null;t.DocumentDate=r.DeliveryDate;t.FinancialYear=null;t.CsrReference=r.OrderRef;t.CustomerReference=r.CustomerRef;t.Address=r.ShipToAddress;t.AlreadyPaid=r.AmountPaid;t.ItemNumber=null;f=Math.round(100*(parseFloat(t.PaidNow).toFixed(2)||0));f>0&&(i.currentPayment.AmountInCents+=f,i.currentPayment.SelectedLineItems.push(t));break;case"app.payments.payAccounts":t.AccountName=r.Name;t.SbuCode=r.SbuCode;t.DocumentType=null;t.DocumentDate=null;t.FinancialYear=null;t.CsrReference=null;t.CustomerReference=null;t.Address=null;t.AlreadyPaid=null;t.ItemNumber=null;i.currentPayment.AmountInCents+=Math.round(100*(parseFloat(t.PaidNow).toFixed(2)||0));i.currentPayment.SelectedLineItems.push(t)}}};i.removeLineItem=function(n){if(i.currentPayment&&n)for(var t=0;t<i.currentPayment.SelectedLineItems.length;t++)if(i.currentPayment.InitialState==="app.payments.payAccounts"&&i.currentPayment.SelectedLineItems[t].AccountId===n||(i.currentPayment.InitialState==="app.payments.payInvoices"||i.currentPayment.InitialState==="app.payments.payOrders")&&i.currentPayment.SelectedLineItems[t].CsrReference===n){i.currentPayment.AmountInCents-=Math.round(100*i.currentPayment.SelectedLineItems[t].PaidNow);i.currentPayment.SelectedLineItems.splice(t,1);break}};i.setProcessingFee=function(n){i.currentPayment&&(i.currentPayment.FeeAmountInCents=n?Math.round(100*n):0)};i.setTokenDetails=function(n){i.currentPayment&&(n?(i.currentPayment.TokenNumber=n.TokenNumber,i.currentPayment.TokenName=n.AccountName,i.currentPayment.TokenMask=n.MaskedCardNumber,i.currentPayment.TokenExpiry=n.ExpiryDate,i.currentPayment.TokenCreationDate=n.CreationDate,i.currentPayment.PaymentMethod=n.PaymentMethodName,i.currentPayment.IsDirectDebit=n.IsDirectDebitToken,i.currentPayment.IsCard=n.IsDirectDebitCreditCardToken||n.IsCreditCardToken,i.currentPayment.IsDebitCard=n.IsDebitCard):(i.currentPayment.TokenNumber=null,i.currentPayment.TokenName=null,i.currentPayment.TokenMask=null,i.currentPayment.TokenExpiry=null,i.currentPayment.TokenCreationDate=null,i.currentPayment.PaymentMethod="Unknown",i.currentPayment.IsDirectDebit=!1,i.currentPayment.IsCard=!1,i.currentPayment.IsDebitCard=!1))};i.resetCurrentPayment=function(){return i.currentPayment=null,t.info("Payments > resetCurrentPayment"),e.writeCurrentPayment(null)};i.setCurrentPayment=function(n){var t=i.resetCurrentPayment();return i.currentPayment=n,t};i.changeCurrentPaymentState=function(n){if(!i.currentPayment)return null;i.currentPayment.CurrentState=n;switch(n){case"app.payments.payInvoices":case"app.payments.payOrders":case"app.payments.payAccounts":i.currentPayment.InitialState=n}var r=i.mapCurrentPaymentToRequest();return c.setJob(r.JobId,!1,!1),t.info("Payments > changeCurrentPaymentState > ",n,r),e.writeCurrentPayment(r)};i.goNext=function(){var n,u;if(i.currentPayment){switch(i.currentPayment.CurrentState){case"app.payments.payInvoices":n="app.payments.reviewInvoices";break;case"app.payments.payOrders":n="app.payments.reviewOrders";break;case"app.payments.payAccounts":n="app.payments.reviewAccounts";break;case"app.payments.reviewInvoices":case"app.payments.reviewOrders":case"app.payments.reviewAccounts":n="app.payments.method";break;case"app.payments.method":switch(i.currentPayment.TokenNumber){case i.paymentNewAccountDirectDebit:case i.paymentNewCardDirectDebit:n="app.payments.directDebit";break;case i.paymentNewCard:n="app.payments.newCard";break;default:n="app.payments.confirm"}break;case"app.payments.tokenConfirm":n="app.payments.confirm";break;case"app.payments.confirm":n="app.payments.complete";break;default:n=i.currentPayment.InitialState="app.payments.payInvoices"}t.info("Current Payment > ",i.currentPayment);n&&!i.hasCriticalErrors&&i.currentPayment.AmountInCents>=100?r.go(n):(u=i.currentPayment.AmountInCents<100?i.totalAmountLessThanOne:i.cannotGoNextErrorMsg,o.add({id:"payments.cannotGoNext",type:"error",message:u}))}};i.goBack=function(){var n;if(i.currentPayment)switch(i.currentPayment.CurrentState){case"app.payments.payInvoices":n=i.currentPayment.InitialState="app.payments.payInvoices";break;case"app.payments.payOrders":n=i.currentPayment.InitialState="app.payments.payOrders";break;case"app.payments.payAccounts":n=i.currentPayment.InitialState="app.payments.payAccounts";break;case"app.payments.reviewInvoices":n=e.readPayStatementAccounts().length==0?"app.payments.payInvoices":"app.payments.payStatements";break;case"app.payments.reviewOrders":n="app.payments.payOrders";break;case"app.payments.reviewAccounts":n="app.payments.payAccounts";break;case"app.payments.method":switch(i.currentPayment.InitialState){case"app.payments.payInvoices":n="app.payments.reviewInvoices";break;case"app.payments.payOrders":n="app.payments.reviewOrders";break;case"app.payments.payAccounts":n="app.payments.reviewAccounts";break;default:n=i.currentPayment.InitialState="app.payments.payInvoices"}break;case"app.payments.directDebit":case"app.payments.newCard":case"app.payments.tokenConfirm":n="app.payments.method";break;case"app.payments.confirm":n=i.currentPayment&&i.currentPayment.TokenNumber&&i.currentPayment.TokenNumber===i.paymentNewCard?"app.payments.newCard":"app.payments.method";break;default:n=i.currentPayment.InitialState="app.payments.payInvoices"}n&&(i.hasCriticalErrors=!1,r.go(n))};i.OpenInvoice=function(t,i,r){if(i.stopPropagation(),t!=null&&t!==""){var u=window.location.href.replace(window.location.hash,"")+"api/finance/invoices/export?ids="+t+"&access_token="+f.token()+"&fileType=pdf";n.isDefined(r)&&r.length!==0&&(u+="&accountId="+r);window.open(u)}};i.OpenPaymentInvoice=function(n,t,i){if(t.stopPropagation(),n!=null&&n!==""){var r=window.location.href.replace(window.location.hash,"")+"api/finance/invoices/exportpaymentpdf?documentNo="+n+"&access_token="+f.token()+"&fileType=pdf&accountId="+i;window.open(r)}};i.OpenSalesOrder=function(n,t){if(n&&t){var i=window.location.href.replace(window.location.hash,"")+"api/products/order/export?accountId="+n+"&documentNo="+t+"&access_token="+f.token();window.open(i)}};i.cancelPayment=function(){t.info("Payments > cancelPayment");i.resetCurrentPayment().success(function(){e.readCurrentPayment().success(function(n){i.mapRequestToCurrentPayment(n);r.go(i.currentPayment.CurrentState,{},{reload:!0}).then(function(){o.add({id:"payment-reset",type:"info",message:"Payment cancelled",expire:!0})})}).error(function(){i.hasCriticalErrors=!0;o.add({type:"error",message:i.readPaymentErrorMsg})})}).error(function(){o.add({type:"error",message:i.writePaymentErrorMsg})})};i.confirmCancel=function(n){t.info("Payments > confirmCancel");h.swal({title:"Cancel payment?",text:n||null,type:"warning",showCancelButton:!0,confirmButtonText:"Yes, cancel payment",cancelButtonText:"Continue payment"},function(n){n&&i.cancelPayment()})};i.updateProgress=function(n){i.progressStep=n};i.$on("accounts.changed",function(){t.info("Payments > accounts.changed");i.cancelPayment()});i.$on("$destroy",s.unlockAccounts);i.mapRequestToCurrentPayment=function(n){if(t.info("Mapping request to current payment",n),!n)return!1;i.currentPayment||(i.currentPayment=i.initCurrentPayment());switch(n.PaymentMode){case 1:i.currentPayment.InitialState="app.payments.payInvoices";break;case 2:i.currentPayment.InitialState="app.payments.payOrders";break;case 3:i.currentPayment.InitialState="app.payments.payAccounts";break;default:return!1}switch(n.CurrentStep){case 1:switch(i.currentPayment.InitialState){case"app.payments.payInvoices":i.currentPayment.CurrentState="app.payments.payInvoices";break;case"app.payments.payOrders":i.currentPayment.CurrentState="app.payments.payOrders";break;case"app.payments.payAccounts":i.currentPayment.CurrentState="app.payments.payAccounts";break;default:return!1}break;case 2:switch(i.currentPayment.InitialState){case"app.payments.payInvoices":i.currentPayment.CurrentState="app.payments.reviewInvoices";break;case"app.payments.payOrders":i.currentPayment.CurrentState="app.payments.reviewOrders";break;case"app.payments.payAccounts":i.currentPayment.CurrentState="app.payments.reviewAccounts";break;default:return!1}break;case 3:case 4:case 5:i.currentPayment.CurrentState="app.payments.method";break;default:i.currentPayment.InitialState=i.currentPayment.CurrentState=i.determineDefaultState()}return i.currentPayment.Currency=n.Currency,i.currentPayment.AmountInCents=n.AmountInCents,i.currentPayment.PaymentMethod=n.MethodType,i.currentPayment.IsDirectDebit=n.IsDirectDebit,i.currentPayment.IsCard=n.IsCard,i.currentPayment.TokenNumber=n.TokenNumber,i.currentPayment.TokenName=n.TokenName,i.currentPayment.TokenMask=n.TokenMask,i.currentPayment.TokenExpiry=n.TokenExpiry,i.currentPayment.TokenCreationDate=n.TokenCreationDate,i.currentPayment.SelectedLineItems=n.LineItems,i.currentPayment.JobId=n.JobId,n.EntryUsedToStartPayment&&(i.currentPayment.EntryUsedToStartPayment=n.EntryUsedToStartPayment),!0};i.mapCurrentPaymentToRequest=function(){var n,r,u;if(!i.currentPayment)return null;switch(i.currentPayment.CurrentState){case"app.payments.payInvoices":case"app.payments.payOrders":case"app.payments.payAccounts":n=1;break;case"app.payments.reviewInvoices":case"app.payments.reviewOrders":case"app.payments.reviewAccounts":n=2;break;case"app.payments.method":case"app.payments.directDebit":case"app.payments.newCard":n=3;break;case"app.payments.confirm":case"app.payments.tokenConfirm":n=4;break;case"app.payments.complete":n=5;break;default:n=0}switch(i.currentPayment.InitialState){case"app.payments.payInvoices":r=1;break;case"app.payments.payOrders":r=2;break;case"app.payments.payAccounts":r=3;break;default:r=0}return u={CurrentStep:n,PaymentMode:r,Currency:i.currentPayment.Currency,AmountInCents:i.currentPayment.AmountInCents,FeeAmountInCents:i.currentPayment.FeeAmountInCents,MethodType:i.currentPayment.PaymentMethod,TokenNumber:i.currentPayment.TokenNumber,TokenName:i.currentPayment.TokenName,TokenMask:i.currentPayment.TokenMask,TokenExpiry:i.currentPayment.TokenExpiry,TokenCreationDate:i.currentPayment.TokenCreationDate,IsDirectDebit:i.currentPayment.IsDirectDebit,IsCard:i.currentPayment.IsCard,IsDebitCard:i.currentPayment.IsDebitCard,LineItems:i.currentPayment.SelectedLineItems,EntryUsedToStartPayment:i.currentPayment.EntryUsedToStartPayment,JobId:i.currentPayment.JobId},t.info("Mapped current payment to request >",u),u};i.initCurrentPayment=function(n){var t=i.determineDefaultState();return n||(n=i.determineEntryUsedToStartPayment()),{InitialState:t,CurrentState:t,Currency:"AUD",AmountInCents:0,FeeAmountInCents:0,TokenNumber:null,TokenName:null,TokenMask:null,TokenExpiry:null,TokenCreationDate:null,PaymentMethod:"Unknown",IsDirectDebit:!1,IsCard:!1,IsDebitCard:!1,SelectedLineItems:[],EntryUsedToStartPayment:n,JobId:undefined}};i.determineEntryUsedToStartPayment=function(){return u.search().entry};i.cashAccounts=0;i.cashAccountsOnly=!1;i.determineDefaultState=function(){for(var f,n=0,t=s.getActiveData(),u=0;u<t.length;u++)t[u]!==undefined&&(n+=t[u].PaymentTerms==="CASH"?1:0);return(i.cashAccounts=n,i.cashAccountsOnly=n===t.length,f=l.store().get("lastUsedPaymentType"),f&&r.get(f))?f:n>0&&n===t.length?"app.payments.payOrders":"app.payments.payInvoices"};i.storeLastUsedPaymentType=function(n){if(r.get(n))return l.store().set("lastUsedPaymentType",n)};i.init=function(){s.getActiveData();i.isInitialised(!0);i.currentPayment=i.initCurrentPayment();e.readCurrentPayment(u.search().id).success(function(n){u.search("id",null);var t=r.params.jobId?r.params.jobId:n.JobId;i.jd.init(t,!1,!0);i.currentPayment.JobId=t;n.CurrentStep>1&&i.mapRequestToCurrentPayment(n);u.search().payStatement&&i.currentPayment.CurrentState!=="app.payments.payInvoices"&&(i.currentPayment=i.initCurrentPayment(),i.currentPayment.CurrentState="app.payments.payInvoices");r.current.name!=="app.payments.tokenConfirm"&&r.go(i.currentPayment.CurrentState);s.lockAccounts("payment");i.$on("$stateChangeStart",function(n,t){t.name==="app.payments"&&(i.currentPayment==null?r.go("app.payments.payInvoices",{reload:!0}):r.go(i.currentPayment.CurrentState))})}).error(function(){i.hasCriticalErrors=!0;o.add({type:"error",message:i.readPaymentErrorMsg})})};i.$on("job.id.changed",function(){if(!i.currentPayment){t.info("Payments > job.id.changed > current payment empty");return}if(i.currentPayment.JobId==c.jobId){t.info("Payments > job.id.changed > job id not changed ");return}i.currentPayment.JobId=c.jobId;var n=i.mapCurrentPaymentToRequest();t.info("Payments > job.id.changed > ",c.jobId,n);e.writeCurrentPayment(n)});u.search().out_request_resp_code==null&&(s.isReady()?i.init():i.$on("accounts.dataReady",i.init));a.payByJob=!1;a.togglePayByJob=function(){a.payByJob=this.payByJob?!1:!0;a.payByJob===!1&&c.clearJob()}}n.module("app.payments").controller("PaymentsController",t);t.$inject=["$log","$scope","$state","$location","authService","paymentsService","notificationService","accountsService","SweetAlert","jobData","devicePreferences"]}(angular),function(){function t(){return{restrict:"A",controller:n,controllerAs:"payStatement",bindToController:!0}}function n(n,t,i,r,u,f,e,o){function h(){c()}function l(n){return s.firstLoad==!1||s.monthSelector.selectedMonth==="1"||n.UnpaidInvoices===null?!1:(s.firstLoad=!1,invoiceFromLastMonth=n.UnpaidInvoices.find(function(n){var t=new Date,i=new Date(n.DocumentDate);return i.getMonth()+1<t.getMonth()}),invoiceFromLastMonth!=undefined)?(s.monthSelector.selectedMonth="1",c(),!0):!1}function c(){r.hasPermission("All/Payment")&&(s.accounts=[],s.selectedItems=[],s.loading=!0,u.writePayStatementMonth((new Date).getMonth()-Number(s.monthSelector.selectedMonth)),u.currentPaymentMonth(!0,s.monthSelector.selectedMonth==="1").success(function(n){if(l(n)==!0){s.monthSelector.selectedMonth="1";return}(s.statementsAvailable=n.StatementsAvailable,s.statementMonth=n.StatementMonth,s.monthEstablished=!0,s.loading=!1,n.StatementsAvailable)&&n.UnpaidInvoices.forEach(function(t){var i=s.accounts.find(function(n){return n.AccountId==t.AccountId});i==undefined?(i={AccountId:t.AccountId,CompanyCode:t.CompanyCode,SbuCode:t.SbuCode,CompanyName:t.CompanyName,Month:n.StatementMonth,Amount:t.Amount},s.accounts.push(i)):i.Amount+=t.Amount})}).error(function(){f.add({type:"error",message:s.currentPaymentMonthErrorMsg});s.loading=!1}))}function a(){c()}function v(){s.selectedAccounts=[];s.selectedItems.forEach(function(n){s.selectedAccounts.push(n.AccountId)});u.writePayStatementAccounts(s.selectedAccounts)}function y(){u.beginPayment("PayStatement").success(function(){o.info("Success sending BeginPayment track event");e.go("app.payments",{payStatement:!0},{reload:!0})}).error(function(){o.info("Failed to send BeginPayment track event");e.go("app.payments",{payStatement:!0},{reload:!0})})}var s=this;s.currentPaymentMonthErrorMsg="Ooops, sorry but an error has occurred. Unable to establish your current payment statement month";s.monthEstablished=!1;s.firstLoad=!0;s.accounts=[];s.selectedItems=[];s.selectedAccounts=[];s.monthSelector={};s.monthSelector.selectedMonth="0";s.loading=!0;u.writePayStatementAccounts([]);n.list={};s.init=h;s.payStatements=y;s.selectionChanged=v;s.changeMonth=a;n.$on("accounts.changed",h);i.list().length?h():n.$on("accounts.dataReady",h)}angular.module("app.payments").directive("navigateToPayment",t);n.$inject=["$scope","$window","accountsService","authService","paymentsService","notificationService","$state","$log"]}(),function(){"use strict";function n(n){return n("api/payments/opensalesorders",null,{get:{cancellable:!0}})}function t(n){return n("api/payments/accountbalances",null,{get:{cancellable:!0}})}angular.module("app.payments").factory("paymentsOpenSalesOrders",n).factory("paymentsAccountBalances",t);n.$inject=["$resource"];t.$inject=["$resource"]}(),function(){"use strict";function t(n,t,r){r.configureStates(i());n.$on("$stateChangeStart",function(n,i,r,u){u.name===""&&i.name==="modalPaymentView"&&(n.preventDefault(),t.go("app.customerPaymentsList",undefined,{location:!1}).then(function(){t.go(i,r)}))})}function i(){return[{state:"app.payments",config:{url:"/financials/payments?id&payStatement&entry",pageTitle:"Payments",templateUrl:"financials/payments",access:"All/Payment",reloadOnSearch:!1,params:{jobId:null}}},{state:"app.payments.payInvoices",config:{url:"/pay-invoices",pageTitle:"Payments",templateUrl:"Payments-PayInvoices.html",access:"All/Payment",reloadOnSearch:!1,params:{jobId:null},help:n,helpTour:"tourPayments"}},{state:"app.payments.payOrders",config:{url:"/pay-orders",pageTitle:"Payments",templateUrl:"Payments-PayOrders.html",access:"All/Payment",params:{jobId:null}}},{state:"app.payments.payStatements",config:{url:"/pay-statements",pageTitle:"Payments",templateUrl:"Payments-PayStatements.html",access:"All/Payment",params:{jobId:null},help:n,helpTour:"tourPayments"}},{state:"app.payments.payAccounts",config:{url:"/pay-accounts",pageTitle:"Payments",templateUrl:"Payments-PayAccounts.html",access:"All/Payment",params:{jobId:null},help:n,helpTour:"tourPayments"}},{state:"app.payments.reviewInvoices",config:{url:"/review-invoices",pageTitle:"Payments",templateUrl:"Payments-ReviewInvoices.html",access:"All/Payment"}},{state:"app.payments.reviewOrders",config:{url:"/review-orders",pageTitle:"Payments",templateUrl:"Payments-ReviewOrders.html",access:"All/Payment"}},{state:"app.payments.reviewAccounts",config:{url:"/review-accounts",pageTitle:"Payments",templateUrl:"Payments-ReviewAccounts.html",access:"All/Payment"}},{state:"app.payments.method",config:{url:"/method?enry",pageTitle:"Payments",templateUrl:"Payments-Method.html",access:"All/Payment"}},{state:"app.payments.directDebit",config:{url:"/direct-debit",pageTitle:"Payments",templateUrl:"Payments-DirectDebit.html",access:"All/Payment"}},{state:"app.payments.newCard",config:{url:"/new-card",pageTitle:"Payments",templateUrl:"Payments-NewCard.html",access:"All/Payment"}},{state:"app.payments.tokenConfirm",config:{url:"/token-confirm",pageTitle:"Payments",templateUrl:"financials/payments/tokenconfirm",access:"All/Payment"}},{state:"app.payments.confirm",config:{url:"/confirm",pageTitle:"Payments",templateUrl:"Payments-Confirm.html",access:"All/Payment"}},{state:"app.payments.complete",config:{url:"/complete",pageTitle:"Payments",templateUrl:"Payments-Complete.html",access:"All/Payment"}},{state:"app.customerPaymentsList",config:{url:"/financials/payments/history",pageTitle:"Payment History",templateUrl:"financials/payments/history",access:"All/Payment",reloadOnSearch:!1}},{state:"app.adminPaymentsList",config:{url:"/admin/payments",pageTitle:"Payments Search",templateUrl:"administration/payments",access:"Administration/Payment/History"}},{state:"app.adminPaymentDetails",config:{url:"/admin/payments/:paymentId",pageTitle:"Payment Details",templateUrl:"administration/payments/details",access:"Administration/Payment/History"}},{state:"modalPaymentView",config:{url:"/finance/payments/history/:paymentId",pageTitle:"Payments",scroller:!0,access:"All/Payment",views:{modal:{templateUrl:function(){return"financials/payments/paymentView"}}}}},{state:"app.paymentMethods",config:{url:"/financials/payments/methods",pageTitle:"Manage Payment Methods",templateUrl:"PaymentMethods-Edit.html",access:"All/Payment"}},{state:"app.paymentMethodsDirectDebit",config:{url:"/financials/payments/methods/direct-debit",pageTitle:"Manage Payment Methods",templateUrl:"PaymentMethods-DirectDebit.html",access:"All/Payment"}},{state:"app.paymentsMethodsNewCard",config:{url:"/financials/payments/methods/new-card",pageTitle:"Manage Payment Methods",templateUrl:"PaymentMethods-NewCard.html",access:"All/Payment"}},]}angular.module("app.payments").run(t);var n="payments";t.$inject=["$rootScope","$state","routerHelper"]}(),function(){"use strict";function n(n,t,i){function u(t){return t?n.get("/api/payments/currentpayment",{params:{salesOrderId:t}}):n.get("/api/payments/currentpayment")}function f(t){return n.post("/api/payments/currentpayment",t)}function e(){return n.get("/api/payments/directdebiturl")}function o(){return n.get("/api/payments/paymentmethodsdirectdebiturl")}function s(){return n.get("/api/payments/paymentmethodscreditcardurl")}function h(){return n.get("/api/payments/storedtokens")}function c(t){return n.get("/api/payments/exchangetoken/"+t)}function l(){return n.get("/api/payments/processingrates")}function a(){return n.get("/api/payments/processingratesforaccounts")}function v(t){return n.post("/api/payments/processingfees",t)}function y(t){return n.post("/api/payments/processpayment",t)}function p(t){return n.delete("/api/payments/deletestoredtoken",{params:{tokenNumber:t}})}function w(t,i){return n.get("/api/payments/currentpaymentmonth",{params:{retrieveLineItems:t,previousMonth:i}})}function b(t){return n.post("/api/payments/beginpayment?initialState="+t)}function k(n){i.store().set("PayStatementAccounts",JSON.stringify(n))}function d(){return i.store().get("PayStatementAccounts")!=undefined?JSON.parse(i.store().get("PayStatementAccounts")):[]}function g(n){i.store().set("PayStatementMonth",n)}function nt(){return i.store().get("PayStatementMonth")!=undefined?Number(i.store().get("PayStatementMonth")):(new Date).getMonth()+1}var r=t("api/finance/payments/history",null,{query:{isArray:!1}});return r.readCurrentPayment=u,r.writeCurrentPayment=f,r.directDebitUrl=e,r.storedTokens=h,r.exchangeToken=c,r.processingRates=l,r.processingRatesForAccounts=a,r.processingFees=v,r.processPayment=y,r.deleteStoredToken=p,r.currentPaymentMonth=w,r.writePayStatementAccounts=k,r.readPayStatementAccounts=d,r.writePayStatementMonth=g,r.readPayStatementMonth=nt,r.beginPayment=b,r.paymentMethodsDirectDebitUrl=o,r.paymentMethodsCreditCardUrl=s,r}angular.module("app.payments").factory("paymentsService",n);n.$inject=["$http","$resource","devicePreferences"]}(),function(){"use strict";function n(n){var t={};return t=n("api/admin/payments",null,{query:{isArray:!1}}),t.details=n("api/admin/payments/:paymentId",{paymentId:"@paymentId"}),t.logs=n("api/admin/payments/:paymentId/logs",{paymentId:"@paymentId"},{get:{isArray:!0}}),t.resend=n("api/admin/payments/:paymentId/resendconfirmation",{paymentId:"@paymentId"}),t.resync=n("api/admin/payments/:paymentId/retrysapsync",{paymentId:"@paymentId"}),t}angular.module("app.payments").factory("paymentsAdmin",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,t,i,r,u){t.processingEnded=!1;t.success=!1;t.receiptNumber="n/a";t.amountInCents=0;t.feeAmountInCents=0;t.init=function(){var n=t.changeCurrentPaymentState("app.payments.complete");n&&n.success(function(){t.updateProgress(4);var n=t.mapCurrentPaymentToRequest();n&&n.TokenNumber?(t.amountInCents=n.AmountInCents,t.feeAmountInCents=n.FeeAmountInCents,r.processPayment(n).success(function(n){t.resetCurrentPayment();t.receiptNumber=n.ReceiptNumber;t.processingEnded=!0;t.success=!0;t.$emit("achievements.taskComplete",{taskName:"04MakePayment",status:2});t.$emit("csat.showTray",{feature:"payments",trigger:"makePayment"})}).error(function(n){t.resetCurrentPayment();t.processingEnded=!0;t.success=!1;u.add({type:"error",message:n.Message})})):(t.resetCurrentPayment(),t.processingEnded=!0,t.success=!1,u.add({type:"error",message:t.paymentDataErrorMsg}))}).error(function(){t.hasCriticalErrors=!0;t.processingEnded=!0;u.add({type:"error",message:t.writePaymentErrorMsg})})};t.init()}angular.module("app.payments").controller("PaymentsCompleteController",n);n.$inject=["$log","$scope","authService","paymentsService","notificationService"]}(),function(){"use strict";function t(t,i,r,u){t.feesProcessed=!1;t.potentialSavings=0;t.feeRate="";t.init=function(){t.setProcessingFee(0);var f=t.changeCurrentPaymentState("app.payments.confirm");f&&f.success(function(){t.updateProgress(3);var f=t.mapCurrentPaymentToRequest();if(!f){t.hasCriticalErrors=!0;u.error(n,"Failed to map current payment to request");r.add({type:"error",message:t.paymentDataErrorMsg});return}i.processingFees(f).success(function(n){t.feesProcessed=!0;t.setProcessingFee(n.TotalFeeAmount);t.potentialSavings=n.PotentialSavings;n.RateApplied>0&&(t.feeRate=" ("+n.RateApplied+"%)")}).error(function(i){t.hasCriticalErrors=!0;u.error(n,"Failed retrieve processing fees");r.add({type:"error",message:i.Message})})}).error(function(){t.hasCriticalErrors=!0;u.error(n,"Failed to change current payment state");r.add({type:"error",message:t.writePaymentErrorMsg})})};t.init()}var n="[Payment Confirmation]";angular.module("app.payments").controller("PaymentsConfirmController",t);t.$inject=["$scope","paymentsService","notificationService","$log"]}(),function(){"use strict";function n(n,t,i){n.url="";n.init=function(){n.updateProgress(2);var r=n.changeCurrentPaymentState("app.payments.directDebit");r&&r.success(function(){t.directDebitUrl().success(function(t){n.url=t.Url;window.location=n.url}).error(function(n){i.add({type:"error",message:n.Message})})}).error(function(){n.hasCriticalErrors=!0;i.add({type:"error",message:n.writePaymentErrorMsg})})};n.init()}angular.module("app.payments").controller("PaymentsDirectDebitController",n);n.$inject=["$scope","paymentsService","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u){i.setState(!1);n.listReady=!1;n.searchOptions={dateRange:{startDate:new Date(moment().subtract(3,"M").format("YYYY-MM-DD")),endDate:new Date(moment().add(1,"d").format("YYYY-MM-DD"))}};n.paymentProcessStatuses=Enums.paymentProcessStatus;n.quickSearch=function(){n.list.search()};n.tableHeaders=[{columnName:"Reference",displayName:"Reference"},{columnName:"MethodId",displayName:"Method"},{columnName:"Amount",displayName:"Amount"},{columnName:"FeeAmount",displayName:"Fees"},{columnName:"Currency",displayName:"Currency"},{columnName:"UserId",displayName:"User"},{columnName:"MasterId",displayName:"Master"},{columnName:"AccountId",displayName:"Account ID"},{columnName:"StatusId",displayName:"Status"},{columnName:"CreatedOn",displayName:"Created On"}];n.listViewConfig={resourceName:"paymentsAdmin",filters:[{field:"CreatedOn",alias:"From",operator:">=",value:moment(n.searchOptions.dateRange.startDate).format()},{field:"CreatedOn",alias:"To",operator:"<",value:moment(n.searchOptions.dateRange.endDate).format()},{field:"Reference",operator:"like",nested:"start",condition:"or",value:n.searchOptions.searchText},{field:"MasterId",operator:"like",condition:"or",value:n.searchOptions.searchText},{field:"LoginId",operator:"like",condition:"or",value:n.searchOptions.searchText},{field:"AccountId",operator:"like",nested:"end",value:n.searchOptions.searchText},{field:"StatusId",operator:"=",value:n.searchOptions.selectedStatusFilter}],order:[{field:"CreatedOn",orderBy:"desc"}],itemName:"payments"};n.$on("list.search",function(){n.listReady=!1;n.list.config.filters.From.value=moment(n.searchOptions.dateRange.startDate).hour(0).format();n.list.config.filters.To.value=moment(n.searchOptions.dateRange.endDate).hour(24).format();n.list.config.filters.Reference.value=n.searchOptions.searchText;n.list.config.filters.MasterId.value=n.searchOptions.searchText;n.list.config.filters.LoginId.value=n.searchOptions.searchText;n.list.config.filters.AccountId.value=n.searchOptions.searchText;n.list.config.filters.StatusId.value=n.searchOptions.selectedStatusFilter});n.$on("list.onDataBind",function(){n.listReady=!0});n.viewDetails=function(n){t.path("admin/payments/"+n)};n.exportFiles=function(t,i){t.stopPropagation();var u=jstz.determine(),f=window.location.protocol+"//"+window.location.host+"/api/admin/paymentsexport?fileType="+i+"&$filter="+encodeURIComponent(n.list.config.lastQuery.$filter)+"&$orderby="+encodeURIComponent(n.list.config.lastQuery.$orderby)+"&timeZone="+u.name()+"&access_token="+r.token();window.open(f)};$("#btn-download-csv").on("click",function(t){n.exportFiles(t,u.csv)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,u.excel)})}angular.module("app.payments").controller("PaymentsHistoryController",n);n.$inject=["$scope","$location","accountsService","authService","exportService"]}(),function(){"use strict";function n(n,t,i,r,u){n.payment=null;n.logs=null;i.setState(!1);n.resendConfirmationEmail=function(){r.resend.get({paymentId:t.paymentId},function(){u.add({type:"success",message:"Confirmation email sent successfully."})},function(){u.add({type:"error",message:"Failed to send confirmation email."})})};n.retrySapSync=function(){r.resync.get({paymentId:t.paymentId},function(){u.add({type:"success",message:"Successfully finalised the payment in SAP."});r.details.get({paymentId:t.paymentId},function(t){n.payment=t})},function(){u.add({type:"error",message:"Failed to finalise the payment in SAP."})})};n.init=function(){r.details.get({paymentId:t.paymentId},function(t){n.payment=t});r.logs.get({paymentId:t.paymentId},function(t){n.logs=t})};n.init()}angular.module("app.payments").controller("PaymentsHistoryDetailsController",n);n.$inject=["$scope","$stateParams","accountsService","paymentsAdmin","notificationService"]}(),function(n){"use strict";function t(n,t,i,r,u){function f(t){if(!t)return!1;e[t]=1;for(t in e)if(!e[t])return!1;return n.paymentsMethodReady=!0,n.paymentsMethodReady}function o(t){n.currentTokenNumber=n.currentPayment&&n.currentPayment.TokenNumber?n.currentPayment.TokenNumber:t.length===1?first(t).TokenNumber:n.paymentNewAccountDirectDebit}n.paymentsMethodReady=!1;n.tokenTypes=[];n.currentTokenNumber="";n.DirectDebitBankAccountRate=0;n.DirectDebitCreditCardRate=0;n.CreditCardAmexRate=0;n.CreditCardMasterCardRate=0;n.CreditCardVisaRate=0;n.DebitCardMasterCardRate=0;n.DebitCardVisaRate=0;n.getTokenFromArray=function(n,t){for(var i=0;i<n.length;i++)if(n[i].TokenNumber===t)return n[i];return undefined};n.getToken=function(t){var i,u,r;if(t)for(i=0;i<n.tokenTypes.length;i++)if(u=n.tokenTypes[i],r=n.getTokenFromArray(u.tokens,t),r)return r;return undefined};n.newPaymentMethod=function(t){n.currentTokenNumber=t?n.paymentNewCardDirectDebit:n.paymentNewCard;n.selectPaymentMethod()};n.selectPaymentMethod=function(){n.setTokenDetails({TokenNumber:n.currentTokenNumber,PaymentMethodName:"Unknown",IsDirectDebitToken:!1,IsDirectDebitCreditCardToken:!1,IsCreditCardToken:!1});switch(n.currentTokenNumber){case n.paymentNewAccountDirectDebit:case n.paymentNewCardDirectDebit:case n.paymentNewCard:n.goNext();break;default:var t=n.getToken(n.currentTokenNumber);t&&(n.setTokenDetails(t),n.goNext())}};var e={state:0,rates:0,tokens:0};n.init=function(){n.setTokenDetails(null);var u=n.changeCurrentPaymentState("app.payments.method");u&&u.success(function(u){n.mapRequestToCurrentPayment(u);n.updateProgress(2);f("state");var e=t.processingRates(),s=t.storedTokens();r.all([e,s]).then(function(t){var r=t[0].data,i;n.processProcessingRates(r);f("rates");i=t[1].data;n.processStoredTokens(i);o(i.Tokens);f("tokens")},function(n){i.add({type:"error",message:n.data.Message});f("rates");f("tokens")})}).error(function(){n.hasCriticalErrors=!0;i.add({type:"error",message:n.writePaymentErrorMsg});f("state")})};n.processProcessingRates=function(t){n.DirectDebitBankAccountRate=t.Rates.DirectDebitBankAccountRate;n.DirectDebitCreditCardRate=t.Rates.DirectDebitCreditCardRate;n.CreditCardAmexRate=t.Rates.CreditCardAmexRate;n.CreditCardMasterCardRate=t.Rates.CreditCardMasterCardRate;n.CreditCardVisaRate=t.Rates.CreditCardVisaRate;n.DebitCardMasterCardRate=t.Rates.DebitCardMasterCardRate;n.DebitCardVisaRate=t.Rates.DebitCardVisaRate};n.processStoredTokens=function(t){for(var i,f=[],e=[],o=[],r=[],u=0;u<t.Tokens.length;u++)i=t.Tokens[u],i.IsDirectDebitBankAccountToken?f.push(i):i.IsDebitCard?r.push(i):i.IsDirectDebitCreditCardToken?e.push(i):i.IsCreditCardRecurringToken&&o.push(i);n.tokenTypes.push({heading:"Bank Account",headingFees:"No fee: Bank account transfers incur no fees",newLabel:"Register new bank account",newValue:n.paymentNewAccountDirectDebit,newInstruction:"Note: Please select bank account option on the next page",tokens:f,type:"BankAccount"});n.tokenTypes.push({heading:"Low Fee Credit Card",headingFees:"Fees: MasterCard "+n.DirectDebitCreditCardRate+"%, Visa "+n.DirectDebitCreditCardRate+"%, American Express not accepted",newLabel:"Register new card",newValue:n.paymentNewCardDirectDebit,tokens:e,type:"LowFeeCC"});n.tokenTypes.push({heading:"Credit Card",headingFees:"Fees: MasterCard "+n.CreditCardMasterCardRate+"%, Visa "+n.CreditCardVisaRate+"%, American Express "+n.CreditCardAmexRate+"%",newLabel:"Add new card",newValue:n.paymentNewCard,tokens:o,type:"CC"});r.length>0&&n.tokenTypes.push({heading:"Debit Card",headingFees:"Fees: MasterCard "+n.DebitCardMasterCardRate+"%, Visa "+n.DebitCardVisaRate+"%, American Express not accepted",newLabel:"Register new debit card",newValue:"dummy-new-value",tokens:r,disableNew:!0,type:"DD"})};n.regularTokenTypes=function(){return n.tokenTypes.filter(function(n){return n.type!="LowFeeCC"})};n.lowFeeTokenTypes=function(){return n.tokenTypes.filter(function(n){return n.type=="LowFeeCC"})};n.removeTokenFromScopeArray=function(n,t){for(var i=0;i<n.length;i++)if(n[i].TokenNumber===t)return n.splice(i,1),!0;return!1};n.removeTokenFromScope=function(t){for(var r,i=0;i<n.tokenTypes.length;i++)if(r=n.tokenTypes[i],n.removeTokenFromScopeArray(r.tokens,t))break};n.deleteStoredTokenFromService=function(r){t.deleteStoredToken(r).success(function(){n.removeTokenFromScope(r)}).error(function(n){i.add({type:"error",message:n.Message})})};n.deletePaymentToken=function(t){var i=n.getToken(t);i.IsExpired?n.deleteStoredTokenFromService(t):u.swal({title:"Remove payment method?",text:"<strong>"+i.PaymentMethodName+"<\/strong><br>"+i.AccountName+"<br>"+i.MaskedCardNumber+"<br>"+(i.IsExpired?"Expired ":"Expiry ")+i.MaskedExpiryDate,type:"warning",showCancelButton:!0,confirmButtonText:"Yes, remove",cancelButtonText:"No",html:!0},function(i){i&&n.deleteStoredTokenFromService(t)})};n.getActionType=function(){var t="Select payment method";switch(n.currentTokenNumber){case n.paymentNewAccountDirectDebit:t="Register new bank account";break;case n.paymentNewCardDirectDebit:t="Register new card";break;case n.paymentNewCard:t="Add new card"}return t};n.init()}n.module("app.payments").controller("PaymentsMethodController",t);t.$inject=["$scope","paymentsService","notificationService","$q","SweetAlert"]}(angular),function(){"use strict";function n(n,t,i){n.url="";n.init=function(){n.updateProgress(2);var r=n.changeCurrentPaymentState("app.payments.newCard");r&&r.success(function(){t.get("/api/payments/creditcardurl?oneOffPayment=false").success(function(t){n.url=t.Url;window.location=n.url}).error(function(n){i.add({type:"error",message:n.Message})})}).error(function(){n.hasCriticalErrors=!0;i.add({type:"error",message:n.writePaymentErrorMsg})})};n.init()}angular.module("app.payments").controller("PaymentsNewCardController",n);n.$inject=["$scope","$http","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o){n.tableHeaders=[{columnName:"AccountId",displayName:"Account no."},{columnName:"SbuCode",displayName:"Business"},{columnName:"Name",displayName:"Account name"},{columnName:"Amount",displayName:"Account balance",className:"tf-right"},{columnName:"PayAmount",displayName:"Pay amount",className:"tf-right"}];n.selectedItems=[];n.list={data:{loading:!0,itemsPerPage:25,currentPage:1},items:[],sortColumn:"AccountId",asc:!0,totalItems:0,sort:function(n){this.sortColumn===n?this.asc=!this.asc:(this.sortColumn=n,this.asc=!0);this.search()},search:function(){var i=e.uniqueVals("CompanyCode",f.getActiveData()),o,t;if(i.indexOf("4080")!==-1){u.removeAll();u.add({id:"payments.CompanyCodeMartini",type:"error",message:"Payment via CSR Connect is not available to Martini customers. To pay other CSR accounts, please remove any Martini account(s) from your account selection."});this.data.loading=!1;return}if(i.length!==1){u.removeAll();u.add({id:"payments.CompanyCodeMix",type:"error",message:"Cannot display mixture of PGH Bricks, AFS and other CSR accounts together. Please adjust your account selection."});this.data.loading=!1;return}this.data.loading=!0;o={Skip:(this.data.currentPage||1)-1,Top:this.data.itemsPerPage,SortColumn:this.sortColumn,OrderBy:this.asc?"asc":"desc"};t=this;r.get(o,function(i){var e,u,r,f;for(t.data.loading=!1,t.items=i.Items,t.totalItems=i.Count,e=n.getSelectedLineItems(),u=0;u<e.length;u++)for(r=0;r<t.items.length;r++)if(e[u].AccountId===t.items[r].AccountId){for(f=0;f<n.selectedItems.length;f++)if(n.selectedItems[f].AccountId===t.items[r].AccountId){n.selectedItems.splice(f,1);break}t.items[r].PayAmount=e[u].PaidNow;t.items[r].selected=!0;n.selectedItems.push(t.items[r]);break}})}};n.reviewSelection=function(){if(n.selectedItems.length&&n.form.$valid)return u.remove("payments.reviewSelectionMsg"),n.setSelectedLineItems(n.selectedItems),o.beginPayment("PayLumpSum").success(function(){n.goNext()}).error(function(){n.goNext()}),!0;var t="Please select some accounts to pay before proceeding to the next step";return n.form.$valid||(t="Please check that the payment amounts you have entered are greater than $1.00"),u.add({id:"payments.reviewSelectionMsg",type:"error",message:t,expire:!0}),!1};n.payAmountChanged=function(t){var r=n.selectedItems.findIndex(function(n){return t.AccountId===n.AccountId}),u=r>-1,i;t.selected=!0;i=t.PayAmount>=1;!u&&i?n.selectedItems.push(t):u&&i?n.selectedItems[r]=t:i||(u&&n.selectedItems.splice(r,1),t.PayAmount&&t.PayAmount!=0||(t.selected=!1));n.setSelectedLineItems(n.selectedItems)};n.focusOnAmount=function(n){focusOnId(n.AccountId+"_payment",!0)};n.init=function(){var t,r,e;if(n.currentPayment.InitialState!=="app.payments.payAccounts"&&n.setSelectedLineItems([]),t=f.getActiveData(),angular.isObject(t[0])){for(n.isInitialised(!0),r=0;r<t.length;r++)if(t[r].Currency!=="AUD"){u.add({type:"info",message:n.audPaymentsOnly});break}e=n.changeCurrentPaymentState("app.payments.payAccounts");e&&e.success(function(){n.updateProgress(1);n.list.search()}).error(function(){n.hasCriticalErrors=!0;u.add({type:"error",message:n.writePaymentErrorMsg})});n.storeLastUsedPaymentType(i.current.name)}};f.isReady()?n.init():n.$on("accounts.dataReady",n.init)}angular.module("app.payments").controller("PaymentsPayAccountsController",n);n.$inject=["$scope","$log","$state","paymentsAccountBalances","notificationService","accountsService","utilService","paymentsService"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b){function k(n){a.add({type:"error",message:n})}function g(){r.updateProgress(1);typeof r.isPayStatement!="undefined"&&r.isPayStatement==="true"&&(u.$$search={},u.$$compose(),h.currentPaymentMonth(!0).success(tt).error(it))}function d(){k(r.readPaymentErrorMsg)}function nt(){r.hasCriticalErrors=!0;a.add({type:"error",message:r.writePaymentErrorMsg})}function tt(n){var u=r.determineEntryUsedToStartPayment(),t,i;for(r.selectedItems=n.UnpaidInvoices,t=0;t<r.selectedItems.length;t++)r.selectedItems[t].PayAmount=r.selectedItems[t].Amount-r.selectedItems[t].AmountPending,r.selectedItems[t].selected=!0;i=r.initCurrentPayment(u);r.setCurrentPayment(i).success(function(){h.readCurrentPayment().success(function(){r.changeCurrentPaymentState("app.payments.payInvoices").success(function(){r.setSelectedLineItems(r.selectedItems);r.goNext()}).error(function(){k(r.writePaymentErrorMsg)})}).error(d)}).error(d)}function it(n){var t=error.data.Message.match(/CP006[7|8]/);t&&a.add({id:t[0]==="CP00067"?"payments.CompanyCodeMix":"payments.CompanyCodeMartini",type:"error",message:n.Message,expire:!1})}function rt(i,r){var u=i.documentKey==null?[i.AccountId,Enums.documentType.invoices,i.id,r]:[i.AccountId,Enums.documentType.invoices,i.id,i.documentKey,r];f.post("api/docs/flag/"+u.join("/")).then(function(){i.flag=r},function(i){w.warning("Error updating invoice flag","We were unable to update the flag for this invoice at this time. Please try again, or contact CSR Connect support.");t.log(n,"Error updating invoice flag ","error: ",i)})}function ut(n){t.log(n);b.set("documentLauncher",e.current.name,{$$search:location.hash});e.go("modalDocumentView",{accountId:n.AccountId,documentType:"invoices",documentNo:n.id})}r.isPayStatement=o.payStatement;r.currentSearch=null;r.hasCashAccount=!1;r.flags=[{label:"Not flagged",icon:"fa-flag-o",color:"flag-grey"},{label:"Flagged",icon:"fa-flag",color:"flag-green"},{label:"Flagged",icon:"fa-flag",color:"flag-amber"},{label:"Flagged",icon:"fa-flag",color:"flag-red"}];r.flagTpl="flag.html";r.flagEnums=Enums.flag;r.updateFlag=rt;r.openInvoiceDocument=ut;r.searchOption={flag:!1};r.selectFlag=function(n){r.searchOption.flag=angular.isNumber(n)?n:!1;r.list.search()};r.showAllInvoices=!1;r.toggleShowAllInvoices=function(){r.showAllInvoices=!r.showAllInvoices;r.list.search()};r.tableHeaders=[{columnName:"",displayName:"Pay?",className:"tf-center"},{columnName:"",displayName:""},{columnName:"DocumentDate",displayName:"Date"},{columnName:"AccountId",displayName:"Account no."},{columnName:"InvoiceRef",displayName:"Invoice/credit no."},{columnName:"TypeLabel",displayName:"Type"},{columnName:"CustomerRef",displayName:"Delivery no."},{columnName:"Amount",displayName:"Amount",className:"tf-right"},{columnName:"PayAmount",displayName:"Pay amount",className:"tf-right"}];r.list={data:{loading:!0,itemsPerPage:100,currentPage:1},items:[],sortColumn:"DocumentDate",asc:!0,totalItems:0,sort:function(n){this.sortColumn===n?this.asc=!this.asc:(this.sortColumn=n,this.asc=!0);this.search()},search:function(){var u;if(r.currentSearch!=null&&(r.currentSearch.$cancelRequest(),t.log(n,"Cancelling existing query")),u=y.uniqueVals("CompanyCode",v.getActiveData()),u.indexOf("4080")!==-1){a.removeAll();a.add({id:"payments.CompanyCodeMartini",type:"error",message:"Payment via CSR Connect is not available to Martini customers. To pay other CSR accounts, please remove any Martini account(s) from your account selection."});this.data.loading=!1;return}if(u.length!==1){a.removeAll();a.add({id:"payments.CompanyCodeMix",type:"error",message:"Cannot display mixture of PGH Bricks, AFS and other CSR accounts together. Please adjust your account selection."});this.data.loading=!1;return}this.data.loading=!0;var f={Skip:(this.data.currentPage||1)-1,Top:this.data.itemsPerPage,SortColumn:this.sortColumn,OrderBy:this.asc?"asc":"desc",ShowOverDueOnly:!r.showAllInvoices,JobId:p.jobId},i=this,e=c;r.searchOption.flag!==!1&&(e=l,f.tag=r.searchOption.flag);r.currentSearch=e.get(f,function(n){var e,u,t,f;for(i.items=n.Items,i.totalItems=n.Count,e=r.getSelectedLineItems(),u=0;u<e.length;u++)for(t=0;t<i.items.length;t++)if(e[u].AccountId===i.items[t].AccountId&&e[u].CsrReference===i.items[t].InvoiceRef&&e[u].ItemNumber===i.items[t].ItemNumber){for(f=0;f<r.selectedItems.length;f++)if(r.selectedItems[f].AccountId===i.items[t].AccountId&&r.selectedItems[f].InvoiceRef===i.items[t].InvoiceRef&&r.selectedItems[f].ItemNumber===i.items[t].ItemNumber){r.selectedItems.splice(f,1);break}i.items[t].PayAmount=e[u].PaidNow;i.items[t].selected=!0;break}i.data.loading=!1},function(n){if(i.data.loading=!1,n.data){var t=n.data.Message.match(/CP006[7|8]/);t&&a.add({id:t[0]==="CP00067"?"payments.CompanyCodeMix":"payments.CompanyCodeMartini",type:"warning",message:n.data.Message,expire:!1})}})}};r.reviewSelection=function(){if(r.selectedItems.length&&r.form.$valid)a.remove("payments.invalidPayAmounts"),r.setSelectedLineItems(r.selectedItems),h.beginPayment("PayInvoices").success(function(){r.goNext()}).error(function(){r.goNext()});else return r.selectedItems.length?(a.add({id:"payments.invalidPayAmounts",type:"error",message:"Please check that the payment amounts you have entered do not exceed the outstanding amount."}),!1):(a.add({id:"payments.noPayAmounts",type:"error",message:"Please select some invoices to pay before proceeding to the next step",expire:!0}),!1)};r.payAmountChanged=function(){r.setSelectedLineItems(r.selectedItems)};r.selectionChanged=function(n){n.PayAmount=n.selected?n.Amount-n.AmountPending:0;r.setSelectedLineItems(r.selectedItems)};r.focusOnAmount=function(n){n.selected=!0;r.selectionChanged(n);focusOnId(n.InvoiceRef+"_payment",!0)};r.init=function(){var n,f;r.currentPayment&&r.currentPayment.InitialState!=="app.payments.payInvoices"&&r.setSelectedLineItems([]);var u=!1,t=!1,i=v.getActiveData();if(r.hasCashAccount=!1,angular.isObject(i[0])){for(r.isInitialised(!0),n=0;n<i.length;n++)if(u||i[n].PaymentTerms!=="CASH"||(u=!0,r.hasCashAccount=!0),t||i[n].Currency==="AUD"||(t=!0),u&&t)break;t&&a.add({id:"aud",type:"info",message:r.audPaymentsOnly});f=r.changeCurrentPaymentState("app.payments.payInvoices");f&&f.success(g).error(nt);r.$on("job.id.changed",function(){r.list.search()});r.storeLastUsedPaymentType(e.current.name)}};v.isReady()?r.init():r.$on("accounts.dataReady",r.init);r.showFootnote();r.$on("$destroy",r.hideFootnote)}angular.module("app.payments").controller("PaymentsPayInvoicesController",t);var n="PaymentsPayInvoicesController";t.$inject=["$log","$rootScope","$scope","$location","$http","$state","$stateParams","$timeout","paymentsService","invoicesOutstanding","invoicesOutstandingByTag","notificationService","accountsService","utilService","jobData","SweetAlert","$previousState"]}(),function(n){"use strict";function t(t,i,r,u,f,e,o){i.tableHeaders=[{columnName:"",displayName:"Pay?",className:"tf-center"},{columnName:"DeliveryDate",displayName:"Delivery date (requested)"},{columnName:"AccountId",displayName:"Account no."},{columnName:"OrderRef",displayName:"Order ref."},{columnName:"CustomerRef",displayName:"Your ref."},{columnName:"ShipToAddress",displayName:"Ship to address"},{columnName:"Amount",displayName:"Order total",className:"tf-right"},{columnName:"AmountPaid",displayName:"Already paid",className:"tf-right"},{columnName:"PayAmount",displayName:"Pay amount",className:"tf-right"}];i.list={data:{loading:!0,itemsPerPage:25,currentPage:1},items:[],sortColumn:"DeliveryDate",asc:!0,totalItems:0,sort:function(n){this.sortColumn===n?this.asc=!this.asc:(this.sortColumn=n,this.asc=!0);this.search()},search:function(){var t=o.uniqueVals("CompanyCode",e.getActiveData()),r,n;if(t.indexOf("4080")!==-1){f.removeAll();f.add({id:"payments.CompanyCodeMartini",type:"error",message:"Payment via CSR Connect is not available to Martini customers. To pay other CSR accounts, please remove any Martini account(s) from your account selection."});this.data.loading=!1;return}if(t.length!==1){f.removeAll();f.add({id:"payments.CompanyCodeMix",type:"error",message:"Cannot display mixture of PGH Bricks, AFS and other CSR accounts together. Please adjust your account selection."});this.data.loading=!1;return}this.data.loading=!0;r={Skip:(this.data.currentPage||1)-1,Top:this.data.itemsPerPage,SortColumn:this.sortColumn,OrderBy:this.asc?"asc":"desc"};n=this;u.get(r,function(t){var e,u,r,f;for(n.data.loading=!1,n.items=t.Items,n.totalItems=t.Count,e=i.getSelectedLineItems(),u=0;u<e.length;u++)for(r=0;r<n.items.length;r++)if(e[u].AccountId===n.items[r].AccountId&&e[u].CsrReference===n.items[r].OrderRef){for(f=0;f<i.selectedItems.length;f++)if(i.selectedItems[f].AccountId===n.items[r].AccountId&&i.selectedItems[f].OrderRef===n.items[r].OrderRef){i.selectedItems.splice(f,1);break}n.items[r].PayAmount=e[u].PaidNow;n.items[r].selected=!0;break}})}};i.reviewSelection=function(){if(i.selectedItems.length&&i.form.$valid)f.remove("payments.invalidPayAmounts"),i.setSelectedLineItems(i.selectedItems),i.goNext();else return i.selectedItems.length?(f.add({id:"payments.invalidPayAmounts",type:"error",message:"Please check that the payment amounts you have entered do not exceed the outstanding amount."}),!1):(f.add({id:"payments.noPayAmounts",type:"error",message:"Please select some sales order to pay before proceeding to the next step",expire:!0}),!1)};i.payAmountChanged=function(){i.setSelectedLineItems(i.selectedItems)};i.selectionChanged=function(n){n.PayAmount=n.selected?n.AmountToPay-n.AmountPending:0;i.setSelectedLineItems(i.selectedItems)};i.init=function(){var t,h;i.currentPayment.InitialState!=="app.payments.payOrders"&&i.setSelectedLineItems([]);var u=!1,o=!1,s=e.getActiveData();if(n.isObject(s[0])){for(i.isInitialised(!0),t=0;t<s.length;t++)if(u||s[t].PaymentTerms==="CASH"||(u=!0),o||s[t].Currency==="AUD"||(o=!0),u&&o)break;u&&f.add({id:"credit",type:"info",message:i.displayNoSalesOrders});o&&f.add({id:"aud",type:"info",message:i.audPaymentsOnly});h=i.changeCurrentPaymentState("app.payments.payOrders");h&&h.success(function(){i.updateProgress(1);i.list.search()}).error(function(){i.hasCriticalErrors=!0;f.add({type:"error",message:i.writePaymentErrorMsg})});i.storeLastUsedPaymentType(r.current.name)}};i.focusOnAmount=function(n){n.selected=!0;i.selectionChanged(n);focusOnId(n.OrderRef+"_payment",!0)};e.isReady()?i.init():i.$on("accounts.dataReady",i.init);i.showFootnote();i.$on("$destroy",i.hideFootnote)}n.module("app.payments").controller("PaymentsPayOrdersController",t);t.$inject=["$rootScope","$scope","$state","paymentsOpenSalesOrders","notificationService","accountsService","utilService","jobData"]}(angular),function(){"use strict";function n(n,t,i){n.currentDate=new Date;n.currentDate.setMonth(n.currentDate.getMonth()-1);n.lastMonthDate=new Date;n.lastMonthDate.setMonth(n.lastMonthDate.getMonth()-2);n.init=function(){n.storeLastUsedPaymentType(t.current.name)};i.isReady()?n.init():n.$on("accounts.dataReady",n.init)}angular.module("app.payments").controller("PaymentsPayStatementsController",n);n.$inject=["$scope","$state","accountsService"]}(),function(){"use strict";function n(n,t){n.tableHeaders=[{columnName:"AccountId",displayName:"Account no."},{columnName:"SbuCode",displayName:"Business"},{columnName:"AccountName",displayName:"Account name"},{columnName:"TotalDue",displayName:"Account balance",className:"tf-right"},{columnName:"PaidNow",displayName:"Pay amount",className:"tf-right"},{columnName:"",displayName:""}];n.init=function(){var i=n.changeCurrentPaymentState("app.payments.reviewAccounts");i&&i.success(function(t){n.mapRequestToCurrentPayment(t);n.updateProgress(1)}).error(function(){n.hasCriticalErrors=!0;t.add({type:"error",message:n.writePaymentErrorMsg})})};n.init()}angular.module("app.payments").controller("PaymentsReviewAccountsController",n);n.$inject=["$scope","notificationService"]}(),function(){"use strict";function n(n,t,i,r){n.tableHeaders=[{columnName:"DocumentDate",displayName:"Date"},{columnName:"AccountId",displayName:"Account no."},{columnName:"CsrReference",displayName:"Invoice/credit no."},{columnName:"DocumentType",displayName:"Type"},{columnName:"CustomerReference",displayName:"Delivery no."},{columnName:"TotalDue",displayName:"Amount",className:"tf-right"},{columnName:"PaidNow",displayName:"Pay amount",className:"tf-right"},{columnName:"",displayName:""}];n.init=function(){n.reviewInvoicesLoaded=!1;n.payStatementAccounts=r.readPayStatementAccounts();var f=r.readPayStatementMonth(),e=new Date,u=n.changeCurrentPaymentState("app.payments.reviewInvoices");u&&u.success(function(t){n.payStatementAccounts.length>0&&(t.LineItems=t.LineItems.filter(function(i){var r=new Date(i.DocumentDate);return n.payStatementAccounts.indexOf(i.AccountId)<0||r.getFullYear()==e.getFullYear()&&r.getMonth()+1>f?(t.AmountInCents-=Math.round(100*i.PaidNow),!1):!0}));n.mapRequestToCurrentPayment(t);i.setJob(t.JobId,!1,!1);n.updateProgress(1);n.reviewInvoicesLoaded=!0}).error(function(){n.hasCriticalErrors=!0;t.add({type:"error",message:n.writePaymentErrorMsg});n.reviewInvoicesLoaded=!0})};n.init()}angular.module("app.payments").controller("PaymentsReviewInvoicesController",n);n.$inject=["$scope","notificationService","jobData","paymentsService","$state"]}(),function(){"use strict";function n(n,t){n.tableHeaders=[{columnName:"DocumentDate",displayName:"Delivery date"},{columnName:"AccountId",displayName:"Account no."},{columnName:"CsrReference",displayName:"Order ref."},{columnName:"CustomerReference",displayName:"Your ref."},{columnName:"Address",displayName:"Ship to address"},{columnName:"TotalDue",displayName:"Order total",className:"tf-right"},{columnName:"AlreadyPaid",displayName:"Already paid",className:"tf-right"},{columnName:"PaidNow",displayName:"Pay amount",className:"tf-right"},{columnName:"",displayName:""}];n.init=function(){var i=n.changeCurrentPaymentState("app.payments.reviewOrders");i&&i.success(function(t){n.mapRequestToCurrentPayment(t);n.updateProgress(1)}).error(function(){n.hasCriticalErrors=!0;t.add({type:"error",message:n.writePaymentErrorMsg})})};n.init()}angular.module("app.payments").controller("PaymentsReviewOrdersController",n);n.$inject=["$scope","notificationService"]}(),function(){"use strict";function n(n,t,i){n.paymentTokens=[];n.getPaymentTokens=function(){t.storedTokens().success(function(t){n.paymentTokens=t.Tokens}).error(function(n){i.add({type:"error",message:n.Message})})};n.deletePaymentToken=function(r){t.deleteStoredToken(r).success(function(){for(var t=0;t<n.paymentTokens.length;t++)n.paymentTokens[t].TokenNumber==r&&n.paymentTokens.splice(t,1)}).error(function(n){i.add({type:"error",message:n.Message})})};n.init=function(){n.getPaymentTokens()}}angular.module("app.payments").controller("PaymentsSavedTokensController",n);n.$inject=["$scope","paymentsService","notificationService"]}(),function(){"use strict";function t(t,i,r,u,f,e,o,s){function c(){t.respCode=r.search().ResponseCode;t.sessionId=r.search().ResultKey;t.errorMsg=t.respCode==="0"?undefined:r.search().ResponseText;t.tokenData=undefined;t.DirectDebitBankAccountRate=0;t.DirectDebitCreditCardRate=0;t.CreditCardAmexRate=0;t.CreditCardMasterCardRate=0;t.CreditCardVisaRate=0;t.DebitCardMasterCardRate=0;t.DebitCardVisaRate=0;t.DebitTokenRates=[];t.CreditCardTokenRates=[];f.readCurrentPayment().success(function(n){console.log("Token Confirm > Read Current Payment Data > ",JSON.parse(JSON.stringify(n)));t.mapRequestToCurrentPayment(n);t.setTokenDetails(null);l()}).error(function(){t.hasCriticalErrors=!0;o.error(n,"Failed to read current payment");e.add({type:"error",message:t.readPaymentErrorMsg})})}function l(){var i=t.changeCurrentPaymentState("app.payments.tokenConfirm");console.log("Token Confirm > Current Payment > ",JSON.parse(JSON.stringify(t.currentPayment)));i&&i.success(function(i){console.log(n,"Data returned from changing payment state",i);t.updateProgress(2);console.log("Token Confirm > Current Payment After Changing Payment State > ",JSON.parse(JSON.stringify(t.currentPayment)));t.errorMsg||!t.respCode?(h(t.errorMsg==undefined?gatewayResponseErrorMsg:t.errorMsg),o.error(n,"Received error message from BPoint")):a()}).error(function(){t.hasCriticalErrors=!0;o.error(n,"Failed to update current payment state");e.add({type:"error",message:t.writePaymentErrorMsg})})}function a(){var r="/api/payments/paymentconfirmtoken?responseCode="+t.respCode+"&sessionId="+t.sessionId+"&rememberCard=false";i.get(r).success(function(i){t.tokenData=i;t.setTokenDetails(i.Token);o.info(n,"Proceeding to payment confirmation");v()}).error(function(t){o.error(n,"Failed to confirm token");h(t.message)})}function v(){f.processingRatesForAccounts().success(function(n){t.processProcessingRates(n);t.newPaymentMethodMessage();s(t.goNext,3e3)}).error(function(){o.error(n,"Failed to display card added notification");t.goNext()})}function h(n){t.hasErrors=!0;e.add({type:"error",message:n})}t.hasErrors=!1;t.newPaymentMethodMessage=function(){var n=t.getFeeMessage(t.tokenData.Token);console.log("Adding notification for glory");e.add({type:"success",message:"Your payment method has been added"+n})};t.getFeeMessage=function(n){var i=undefined;return(console.log("TOKEN FOR CALC",n),n.IsDirectDebitBankAccountToken?i=t.DirectDebitBankAccountRate:n.IsDirectDebitToken?i=t.DirectDebitCreditCardRate:n.IsCreditCardToken?i=t.CreditCardTokenRates[n.PaymentMethodName]:n.IsDebitCard||n.IsCreditCardRecurringToken?i=t.DebitTokenRates[n.PaymentMethodName]:n.PaymentMethodName=="AmexCard"&&(i=t.CreditCardAmexRate),i!=undefined&&i!=0)?"<br/>A fee of "+i+"% will apply to all payments made with this card":""};t.processProcessingRates=function(n){t.DirectDebitBankAccountRate=n.Rates.DirectDebitBankAccountRate;t.DirectDebitCreditCardRate=n.Rates.DirectDebitCreditCardRate;t.CreditCardAmexRate=n.Rates.CreditCardAmexRate;t.CreditCardMasterCardRate=n.Rates.CreditCardMasterCardRate;t.CreditCardVisaRate=n.Rates.CreditCardVisaRate;t.DebitCardMasterCardRate=n.Rates.DebitCardMasterCardRate;t.DebitCardVisaRate=n.Rates.DebitCardVisaRate;t.DebitTokenRates.MasterCard=n.Rates.DebitCardMasterCardRate;t.DebitTokenRates.VisaCard=n.Rates.DebitCardVisaRate;t.CreditCardTokenRates.MasterCard=n.Rates.CreditCardMasterCardRate;t.CreditCardTokenRates.VisaCard=n.Rates.CreditCardVisaRate;t.CreditCardTokenRates.AmexCard=n.Rates.CreditCardAmexRate};s(c,2e3)}var n="[Token Confirmation]";angular.module("app.payments").controller("PaymentsTokenConfirmationController",t);t.$inject=["$scope","$http","$location","$window","paymentsService","notificationService","$log","$timeout"]}(),function(){function n(){return{restrict:"A",controller:t,controllerAs:"doc"}}function t(n,t,r,u,f,e,o,s,h){function a(){c.canViewDocs=h.hasPermission("Customer/Documents")&&h.hasPermission("Customer/Invoice");t.setPageTitle(u("titleCase")(c.details.type)+" "+c.details.id);e.get("api/finance/payment/"+c.details.id).then(function(t){n.log(i,"Got payment details:",t.data);angular.extend(c.details,t.data);y(t.data.EmailContent);c.isLoading=!1})}function v(){l.length!==0&&(l[0].contentWindow.focus(),l[0].contentWindow.print())}function y(n){var t=l[0].contentWindow.document;t.open();t.write(n);t.close();o(function(){l[0].style.height=t.body.scrollHeight+10+"px"});l[0].style.height=t.body.scrollHeight+10+"px"}var c=this,l=$("#html-viewer");c.details={accountId:f.params.accountId,id:f.params.paymentId,type:Enums.documentType[f.params.documentType],typeName:f.params.documentType};c.canViewDocs=!1;c.isLoading=!0;c.printDoc=v;c.goToJob=function(n){f.go("app.jobDetail",{jobId:n})};s.isReady()?a():r.$on("accounts.dataReady",a)}angular.module("app.documents").directive("paymentView",n);var i="[docView]";n.$inject=[];t.$inject=["$log","$rootScope","$scope","$filter","$state","$http","$timeout","accountsService","authService"]}(),function(n){"use strict";function i(){return{restrict:"EA",bindToController:{selectedAccount:"<",docNo:"<",address:"<?",docType:"<?",docSbu:"<?",docDeliveryIndicator:"<?",showPrivateLink:"<?"},controller:t,controllerAs:"permalinkButton",templateUrl:"permalink-button.html",replace:!0}}function t(n){var t=this;t.isDisabled=!1;t.share=function(){t.isDisabled=!0;var i={originalUrl:t.address?t.address:location.hash,accountId:t.selectedAccount,documentNo:t.docNo,sbuCode:t.docSbu,docType:t.docType,docDeliveryIndicator:t.docDeliveryIndicator,showPrivateLink:t.showPrivateLink};n.showPermalinkShare(i).finally(function(){t.isDisabled=!1})}}n.module("app.permalinks").directive("permalink",i);t.$inject=["permalinksService"]}(angular),function(n){"use strict";function t(n){var t="api/permalinks";return n(t,{id:"@id"},{post:{method:"POST",url:t+"/",cancellable:!0,isArray:!1},postLiteDelivery:{method:"POST",url:"api/lite/deliveries/:account/:docno/create",cancellable:!0,isArray:!1},get:{method:"POST",url:t+"/:id",isArray:!1,headers:{"Content-Type":"application/json; charset=utf-8"}},sendSmsNotification:{method:"POST",url:t+"/SendSmsNotification/:docType/:docNumber/:phoneForSms",isArray:!1,headers:{"Content-Type":"application/json; charset=utf-8"}}})}n.module("app.permalinks").factory("permalinksResource",t);t.$inject=["$resource"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f,e,o){function h(){return[{state:"app.permalinks",config:{url:"/p/:id",pageTitle:"Accounts list",templateUrl:"permalink.html",needsAuth:!0}}]}function s(n,t,i){for(var r=n.Accounts,o=!1,f=0;f<r.length;f++)if(t.indexOf(r[f])===-1){o=!0;break}o?i.swal({title:"Account change",text:"In order to navigate to the permalink, we will need to change the Accounts you have selected. Would you like to proceed?",type:"info",confirmButtonText:"Ok, take me there",cancelButtonText:"Not right now",showCancelButton:!0},function(t){t?(e.setActive(r),location.hash=n.OriginalUrl):u.go("app.dash")}):location.hash=n.OriginalUrl}n.configureStates(h());t.$on("$stateChangeStart",function(n,t,h){t.name==="app.permalinks"&&f.checkSession(function(){n.preventDefault();r.get({id:h.id},function(n){if(n.error!==undefined)i.swal({title:"Whoa, there!",text:n.error==="NotFound"?"Not found: "+h.id:"You are not authorized to access this permalink",type:"info",confirmButtonText:"Ok, got it!"},function(){u.go("app.dash")});else{var t=e.getActive();t.length<=0?o.get(null,function(t){e.initActive(t.UserPreference.AccountSelection);s(n,t.UserPreference.AccountSelection,i)}):s(n,t,i)}})})})}n.module("app.permalinks").run(t);t.$inject=["routerHelper","$rootScope","SweetAlert","permalinksResource","$state","authService","accountsService","userPreferences"]}(angular),function(n){"use strict";function t(n,t,i){function r(t,r,u,f,e){return i(function(i,o){var s={docType:r,docNumber:t,phoneForSms:u,version:f,accountIds:[e]};n.sendSmsNotification(s).$promise.then(function(){i()},function(){o()})})}function u(t){return n.post(t).$promise.then(function(n){var i=n.Url&&n.Url!==null?location.origin+"/#/p/"+n.Url:null,r=n.LiteDeliveriesLinkId&&n.LiteDeliveriesLinkId!==null?location.origin+"/r/1/"+n.LiteDeliveriesLinkId:null,u={targetUrl:i,liteDeliveriesLinkUrl:r,docNo:t.documentNo,docSbu:t.sbuCode,deliveryIndicator:t.docDeliveryIndicator,smsDetails:n.ReleaseSmsDetails,docType:n.DocType,selectedAccount:t.accountId,showRegenerateLink:t.showRegenerateLink,showPrivateLink:t.showPrivateLink===!1?!1:!0};f(u)})}function f(n){t.open({backdrop:"static",templateUrl:"permalink-prompt.html",controller:"permalinkPromptController",controllerAs:"permalinkPrompt",bindToController:!0,resolve:{permalinkData:function(){return n}}})}return{sendSmsMessage:r,showPermalinkShare:u}}n.module("app.permalinks").factory("permalinksService",t);t.$inject=["permalinksResource","$modal","$q"]}(angular),function(n,t,i){"use strict";function r(r,u,f,e,o,s){function l(t){return n.isDefined(t)&&o.session.user?t.indexOf(o.session.user.Profile.ProfileType)>-1:!1}function a(){return h.clipboard!==undefined&&h.clipboard!==null}function v(){a()&&h.clipboard.destroy()}function y(){t("[data-clipboard-text]").each(function(){var n=this,r=new i(n);r.on("success",function(){h.elementCopied=t(n).attr("data-clipboard-key");h.version=t(n).attr("data-clipboard-version")})})}var h=this,c=EnumDescriptions.documentType[keyFlip(Enums.documentType)[s.docType]];h.targetUrl=s.targetUrl;h.liteDeliveriesLinkUrl=s.liteDeliveriesLinkUrl&&s.deliveryIndicator==="D"?s.liteDeliveriesLinkUrl:undefined;h.showPrivateLink=s.showPrivateLink;h.elementCopied="";h.clipboard=null;h.sendingSms=!1;h.smsSent=undefined;h.showPublicLink=!1;h.showRegenerateLink=s.showRegenerateLink;u(function(){h.showRegenerateLink=!1},4e3);h.publicCopyTrackEventData={type:"permalinks.CopyPublicLink",docNo:s.docNo,accountId:s.selectedAccount,documentType:c,sbuCode:s.docSbu};h.privateCopyTrackEventData={type:"permalinks.CopyPrivateLink",docNo:s.docNo,accountId:s.selectedAccount,documentType:c,sbuCode:s.docSbu};h.versionChanged=function(){h.smsDetails&&h.smsDetails.SmsVersionPreviews&&n.forEach(h.smsDetails.SmsVersionPreviews,function(n){n.Version===h.SmsVersion.Version&&(h.smsDetails.Version=n.Version,h.smsDetails.SmsText=n.SmsText)})};s.docType===4?(l([1,2,3,4,5])||e.isEnabledFor("255"))&&s.deliveryIndicator==="D"&&(h.smsDetails=s.smsDetails):s.docType===3?l([1,2,3,4,5])&&(h.smsDetails=s.smsDetails):h.smsDetails=s.smsDetails&&e.isEnabledFor("2744")?s.smsDetails:undefined;h.PublicPreviewLinks=[];h.SmsShareVersions=[];h.smsDetails&&h.smsDetails.SmsVersionPreviews&&(n.forEach(h.smsDetails.SmsVersionPreviews,function(n){n.Url&&h.PublicPreviewLinks.push({Url:n.Url,Version:n.Version});n.SmsText.length>0&&h.SmsShareVersions.push(n)}),h.SmsShareVersions.length>0&&(h.SmsVersion=h.SmsShareVersions[0],h.smsDetails.Version=h.SmsVersion.Version,h.smsDetails.SmsText=h.SmsVersion.SmsText));h.showPublicLink=h.smsDetails!=undefined;u(function(){y()});h.dismissModal=function(){v();r.dismiss()};h.sendSms=function(){h.sendingSms=!0;h.smsSent=undefined;h.sendSmsForm.$invalid?(h.sendSmsForm.$setSubmitted(),h.sendingSms=!1):f.sendSmsMessage(s.docNo,s.docType,h.smsDetails.ContactNumber,h.smsDetails.Version,s.selectedAccount).then(function(){h.smsSent=!0},function(){h.smsSent=!1}).finally(function(){h.sendingSms=!1})}}n.module("app.permalinks").controller("permalinkPromptController",r);r.$inject=["$modalInstance","$timeout","permalinksService","featureToggle","$rootScope","permalinkData"]}(angular,jQuery,Clipboard),function(){"use strict";function n(n,t,i){function e(i){var u=o(),f;u?(i&&(n.layout.page=1),n.layout.busy=!0,f=t.filter({query:r.searchJson,pageSize:n.layout.size,pageNumber:n.layout.page},function(){})):r.items=[]}function o(){try{var n=JSON.parse(r.searchJson);return n&&n.length>=1?n.every(function(n){return Object.keys(n).every(function(t){return u.includes(t)?n[t]!=="":!0})}):!1}catch(t){return!1}}function s(){n.layout.mode="table";n.layout.size=100;n.layout.busy=!1;n.layout.initialised=!0}var r=this,u,f;r.items=[];u=["LogicalOperator","SearchType","SearchValue","SearchOperatorType"];f=[{LogicalOperator:"And",SearchType:"Profile Type",SearchValue:"",PermissionAction:null,SearchOperatorType:"Equals"}];n.$on("layout init",s);i.$on("progressHub.GetUserProfilesByFilter",function(t,i){r.items=angular.isDefined(i.Items)?i.Items:null;n.layout.updatePages(i.Count);n.layout.busy=!1;n.layout.initialised=!0;n.$apply()});r.filters=f;r.searchJson=null;r.search=e;n.layoutChangeCallback=function(){e(!1)};n.$watch("profiles.filters",function(n){r.searchJson=JSON.stringify(n,null,2)},!0)}angular.module("app.permissions").controller("PermissionManagementController",n);n.$inject=["$scope","permissionsManagement","$rootScope","progressHubService"]}(),function(n){"use strict";function t(n,t,i){return{restrict:"E",scope:{filters:"="},templateUrl:"profileFilters.html",compile:function(r){var u,f=r.contents().remove();return function(r,e){r.profileTypes=t.all.get();r.permissions=i.permissions();r.permissionCrudTypes=[{name:"Create"},{name:"Read"},{name:"Update"},{name:"Delete"}];r.filterTypes=[{name:"Profile Type"},{name:"Linked Accounts"},{name:"SBU"},{name:"Sales Office"},{name:"Permissions"}];r.searchOperatorTypes=[{name:"Equals"},{name:"Not Equals"}];r.logicalTypes=[{name:"And"}];r.addCondition=function(){r.filters.push({LogicalOperator:"And",SearchType:"Profile Type",SearchValue:"",PermissionAction:null,SearchOperatorType:"Equals"})};r.removeCondition=function(n){r.filters.splice(n,1)};u||(u=n(f));e.append(u(r,function(n){return n}))}}}}n.module("app.permissions").directive("filterItem",t);t.$inject=["$compile","userProfileTypes","permissionsManagement"]}(angular),function(){"use strict";function n(n){var t="/api/admin/permissions";return n(t,null,{filter:{url:t+"/filter",method:"GET",params:{query:"@query"},timeout:1e6},permissions:{url:t+"/all",method:"GET",isArray:!0}})}angular.module("app.permissions").factory("permissionsManagement",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.adminPermissionManagement",config:{url:"/admin/permissionmanagement",pageTitle:"Permission Management",templateUrl:"administration/permissionmanagement",access:"All/Profile"}}]}angular.module("app.permissions").run(n);n.$inject=["routerHelper"]}(),function(){"user strict";function n(n,t,i,r){function s(){u.editMode?at():ht()}function h(){u.editMode?vt():ct()}function c(){u.editMode?yt():lt()}function l(n){u.view=n;t.list.search()}function a(n){u.editMode=!0;u.currentPlant=t.list.items.find(function(t){return t.Id===n});e()}function v(n){u.editMode=!0;u.currentPlant=t.list.items.find(function(t){return t.Id===n});e()}function y(n){u.editMode=!0;u.currentPlant=t.list.items.find(function(t){return t.Id===n});e()}function p(n){r.swal({title:"Confirm Delete",text:"Are you sure you want to delete this Pickup Plant?",type:"warning",showCancelButton:!0,confirmButtonText:"Yep!",cancelButtonText:"Cancel"},function(t){t&&d(n)})}function w(n){r.swal({title:"Confirm Delete",text:"Are you sure you want to delete this Plant E-mail?",type:"warning",showCancelButton:!0,confirmButtonText:"Yep!",cancelButtonText:"Cancel"},function(t){t&&k(n)})}function b(n){r.swal({title:"Confirm Delete",text:"Are you sure you want to delete this Failed Order E-mail?",type:"warning",showCancelButton:!0,confirmButtonText:"Yep!",cancelButtonText:"Cancel"},function(t){t&&g(n)})}function k(u){i.deletePlantEmail(u).then(function(){t.list.search();r.swal({title:"All done",text:"Plant E-mail successfully deleted",type:"success",confirmButtonText:"Ok"})},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to delete this Plant E-mail",type:"error",confirmButtonText:"Ok"})})}function d(u){i.deletePickupPlant(u).then(function(){t.list.search();r.swal({title:"All done",text:"Pickup Plant successfully deleted",type:"success",confirmButtonText:"Ok"})},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to delete this Pickup Plant",type:"error",confirmButtonText:"Ok"})})}function g(u){i.deleteFailedOrderEmail(u).then(function(){t.list.search();r.swal({title:"All done",text:"Failed Order E-mail successfully deleted",type:"success",confirmButtonText:"Ok"})},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to delete this Failed Order E-mail",type:"error",confirmButtonText:"Ok"})})}function nt(){u.editMode=!1;u.currentPlant={Emails:""};e()}function tt(){u.editMode=!1;u.currentPlant={};e()}function it(){u.editMode=!1;u.currentPlant={ToEmails:"",CCEmails:""};e()}function e(){u.modalOpen=!0}function f(){u.currentPlant={};u.modalOpen=!1}function rt(){u.currentPlant.Emails.includes(u.newEmail)||(u.currentPlant.Emails+=","+u.newEmail);u.newEmail="";u.currentPlant.Emails=o(u.currentPlant.Emails)}function ut(n){u.currentPlant.Emails=u.currentPlant.Emails.replace(n,"");u.currentPlant.Emails=o(u.currentPlant.Emails)}function ft(){u.currentPlant.ToEmails.includes(u.newEmail)||(u.currentPlant.ToEmails+=","+u.newEmail);u.newEmail="";u.currentPlant.ToEmails=o(u.currentPlant.ToEmails)}function et(n){u.currentPlant.ToEmails=u.currentPlant.ToEmails.replace(n,"");u.currentPlant.ToEmails=o(u.currentPlant.ToEmails)}function ot(){u.currentPlant.CCEmails.includes(u.newCcEmail)||(u.currentPlant.CCEmails+=","+u.newCcEmail);u.newCcEmail="";u.currentPlant.CCEmails=o(u.currentPlant.CCEmails)}function st(n){u.currentPlant.CCEmails=u.currentPlant.CCEmails.replace(n,"");u.currentPlant.CCEmails=o(u.currentPlant.CCEmails)}function o(n){return n.replace(",,",","),n.slice(-1)===","&&(n=n.slice(0,-1)),n.substring(0,1)===","&&(n=n.slice(1)),n}function ht(){i.createPlantEmail(u.currentPlant).then(function(n){t.list.items.push(n.data);r.swal({title:"All done",text:"Plant E-mail successfully created",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to create this Plant E-mail",type:"error",confirmButtonText:"Ok"})})}function ct(){i.createPickupPlant(u.currentPlant).then(function(n){t.list.items.push(n.data);r.swal({title:"All done",text:"Pickup Plant successfully created",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to create this Pickup Plant",type:"error",confirmButtonText:"Ok"})})}function lt(){i.createFailedOrderEmail(u.currentPlant).then(function(n){t.list.items.push(n.data);r.swal({title:"All done",text:"Failed Order E-mail successfully created",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh og",text:"Something went wrong trying to create this Failed Order E-mail",type:"error",confirmButtonText:"Ok"})})}function at(){i.updatePlantEmail(u.currentPlant).then(function(n){var i=t.list.items.indexOf(t.list.items.find(function(t){return t.Id===n.data.Id}));t.list.items[i]=n.data;r.swal({title:"All done",text:"Plant E-mail successfully updated",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to update this Plant E-mail",type:"error",confirmButtonText:"Ok"})})}function vt(){i.updatePickupPlant(u.currentPlant).then(function(n){var i=t.list.items.indexOf(t.list.items.find(function(t){return t.Id===n.data.Id}));t.list.items[i]=n.data;r.swal({title:"All done",text:"Pickup Plants successfully updated",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to update this Pickup Plant",type:"error",confirmButtonText:"Ok"})})}function yt(){i.updateFailedOrderEmail(u.currentPlant).then(function(n){var i=t.list.items.indexOf(t.list.items.find(function(t){return t.Id===n.data.Id}));t.list.items[i]=n.data;r.swal({title:"All done",text:"Failed Order E-mail successfully updated",type:"success",confirmButtonText:"Ok"});f()},function(t){n.error(t);r.swal({title:"Uh oh",text:"Something went wrong trying to update this Failed Order E-mail",type:"error",confirmButtonText:"Ok"})})}var u=this;u.editMode=!1;u.modalOpen=!1;u.currentPlant={};u.closeModal=f;u.changeView=l;u.confirmDeletePlantEmail=w;u.confirmDeletePickupPlant=p;u.confirmDeleteFailedOrderEmail=b;u.editPlantEmail=a;u.editPickupPlant=v;u.editFailedOrderEmail=y;u.openCreatePlantEmail=nt;u.openCreatePickupPlant=tt;u.openCreateFailedOrderEmail=it;u.addPlantEmailItem=rt;u.deletePlantEmailItem=ut;u.addFailedOrderToEmailItem=ft;u.deleteFailedOrderToEmailItem=et;u.addFailedOrderCcEmailItem=ot;u.deleteFailedOrderCcEmailItem=st;u.savePlantEmail=s;u.savePickupPlant=h;u.saveFailedOrderEmail=c;u.view=0;t.tableHeaders=[];t.plantEmailTableHeaders=[{columnName:"PlantId",displayName:"Plant Id",sortable:!1},{columnName:"SbuCode",displayName:"BU",sortable:!1},{columnName:"SalesOffice",displayName:"Sales Office",sortable:!1},{columnName:"SalesGroup",displayName:"Sales Group",sortable:!1},{columnName:"Emails",displayName:"E-Mails",sortable:!1},{columnName:"ForDelivery",displayName:"Delivery",className:"tf-center",sortable:!1},{columnName:"ForPickup",displayName:"Pickup",className:"tf-center",sortable:!1},{columnName:"",displayName:"Actions",className:"tf-center",sortable:!1}];t.pickupPlantTableHeaders=[{columnName:"PlantId",displayName:"PlantId",sortable:!1},{columnName:"PlantName",displayName:"PlantName",sortable:!1},{columnName:"SbuCode",displayName:"SbuCode",sortable:!1},{columnName:"SalesOffice",displayName:"SalesOffice",sortable:!1},{columnName:"Address",displayName:"Address",sortable:!1},{columnName:"ClickAndCollectEnabled",displayName:"Click & Collect",className:"tf-center",sortable:!1},{columnName:"AvailableForDelivery",displayName:"Delivery",className:"tf-center",sortable:!1},{columnName:"",displayName:"",className:"tf-center",sortable:!1}];t.failedOrderEmailTableHeaders=[{columnName:"PlantId",displayName:"PlantId",sortable:!1},{columnName:"SbuCode",displayName:"SbuCode",sortable:!1},{columnName:"SalesOffice",displayName:"SalesOffice",sortable:!1},{columnName:"ToEmails",displayName:"To E-mails",sortable:!1},{columnName:"CCEmails",displayName:"CC E-mails",sortable:!1}];t.list={data:{loading:!0},items:[],totalItems:0,search:function(){t.list.items=[];t.list.data.loading=!0;u.view===0?(t.tableHeaders=t.plantEmailTableHeaders,i.getPlantEmails().then(function(i){n.info(i);t.list.items=i.data;t.list.data.loading=!1},function(t){n.error(t)})):u.view===1?(t.tableHeaders=t.pickupPlantTableHeaders,i.getPickupPlants().then(function(i){n.info(i);t.list.items=i.data;t.list.data.loading=!1})):u.view===2&&(t.tableHeaders=t.failedOrderEmailTableHeaders,i.getFailedOrderEmails().then(function(i){n.info(i);t.list.items=i.data;t.list.data.loading=!1}));return}}}angular.module("app.plants").controller("ManagePlantsController",n);n.$inject=["$log","$scope","plantsService","SweetAlert"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.managePlants",config:{url:"/admin/managePlants",pageTitle:"Manage Plants",templateUrl:"managePlants.html"}}]}angular.module("app.plants").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n){function i(){return n.get("/api/admin/plants/plantEmails")}function r(){return n.get("api/admin/plants/pickupPlants")}function u(){return n.get("api/admin/plants/failedOrderEmails")}function f(t){return n.delete("/api/admin/plants/plantEmail/"+t)}function e(t){return n.delete("/api/admin/plants/pickupPlant/"+t)}function o(t){return n.delete("api/admin/plants/failedOrderEmail/"+t)}function s(t){return n.post("/api/admin/plants/createPlantEmail",t)}function h(t){return n.post("/api/admin/plants/createPickupPlant",t)}function c(t){return n.post("/api/admin/plants/createFailedOrderEmail",t)}function l(t){return n.put("/api/admin/plants/plantEmail/"+t.Id,t)}function a(t){return n.put("/api/admin/plants/pickupPlant/"+t.Id,t)}function v(t){return n.put("/api/admin/plants/failedOrderEmail/"+t.Id,t)}var t={};return t.getPlantEmails=i,t.getPickupPlants=r,t.getFailedOrderEmails=u,t.deletePlantEmail=f,t.deletePickupPlant=e,t.deleteFailedOrderEmail=o,t.createPlantEmail=s,t.createPickupPlant=h,t.createFailedOrderEmail=c,t.updatePlantEmail=l,t.updatePickupPlant=a,t.updateFailedOrderEmail=v,t}angular.module("app.plants").factory("plantsService",n);n.$inject=["$http"]}(),function(n){"use strict";function i(i,r,u,f,e,o,s,h,c,l,a,v,y,p,w,b,k,d,g,nt,tt,it,rt,ut,ft,et,ot){function wt(n){if(i.log(t+"Initialising for account "+n),er(n),ir(),st.account){if(yt!==st.account.AccountId||st.excludedState){or();var u=w.updateOrderSbuConfiguration(st.account.SbuCode);if(st.userHasOrderPermission=c.hasPermission("Customer/OnlineOrdering")&&u.isOrderingEnabled,r.$broadcast("singleAccount.select",st.account),r.singleAccountSelectorInit=st.account,i.log(t+" Initing with account %s: %s",st.account.Name1,st.account.AccountId),st.excludedState)return;li(st.account.AccountId);st.starredCategories=[]}else i.log(t+" Account unchanged - bypassing init %s: %s",st.account.Name1,st.account.AccountId);st.detailMode=!1;st.productDetail={};i.log(t,"Determining state",e.current.name);switch(e.current.name){case"app.productListV2.search":st.searchKeywords=o.keyword;f(function(){kt(!0)});break;case"app.productListV2.cat":ui();vi(st.selectedCat);break;case"app.productListV2.details":fr();break;case"app.productListV2.acc":default:pi()}ci=!0}}function ir(){if(c.hasPermission("Customer/Atp")&&st.account!=undefined){i.info("Initialising Stock Availability");st.stockAvailability.selectedStore="";st.stockAvailability.enableStoreSelector=!1;st.stockAvailability.stockAvailabilityEnabled=!1;st.stockAvailability.stockAvailabilityHasResults=!1;var n=selectByProp("SbuCode",st.account.SbuCode,ot);n&&n.result&&(st.stockAvailability.enableStoreSelector=n.result.OrderCanSetPickupPlants);st.stockAvailability.pendingStoresRequest!=null&&st.stockAvailability.pendingStoresRequest.cancel.resolve();st.stockAvailability.pendingStoresRequest=ft.stores(st.account.AccountId);st.stockAvailability.pendingStoresRequest.request.then(function(n){if(n.data==null){st.stockAvailability.stores={};st.stockAvailability.stockAvailabilityEnabled=Object.keys(st.stockAvailability.stores).length>0;return}st.stockAvailability.storeData=n.data;st.stockAvailability.stores=_.groupBy(n.data,"State");st.stockAvailability.stockAvailabilityEnabled=Object.keys(st.stockAvailability.stores).length>0&&st.stockAvailability.enableStoreSelector===!0;var t=JSON.parse(et.getPref(st.stockAvailability.stockAvailabilityStorePreferenceName));t==null&&(t={});st.stockAvailability.defaultStores=t;t[st.account.AccountId]!=null&&(st.stockAvailability.selectedStore=t[st.account.AccountId],st.stockAvailability.getStockButtonEnabled=st.stockAvailability.selectedStore!=null);st.stockAvailability.enableStoreSelector===!1&&rr();ii()},function(n){i.error(n)})}}function rr(){st.stockAvailability.pendingDefaultStoreRequest!=null&&st.stockAvailability.pendingDefaultStoreRequest.cancel.resolve();st.stockAvailability.pendingDefaultStoreRequest=ft.defaultStore(st.account.AccountId);st.stockAvailability.pendingDefaultStoreRequest.request.then(function(n){n.data==null&&(st.stockAvailability.stores={},st.stockAvailability.stockAvailabilityEnabled=Object.keys(st.stockAvailability.stores).length>0);var t=_.find(st.stockAvailability.storeData,function(t){return t.Id===n.data});if(t==undefined){st.stockAvailability.selectedStore=null;st.stockAvailability.stockAvailabilityEnabled=!1;return}st.stockAvailability.selectedStore=n.data;st.stockAvailability.getStockButtonEnabled=st.stockAvailability.selectedStore!=null;st.stockAvailability.stockAvailabilityEnabled=!0;ii()},function(n){i.error(n)})}function ii(){if(st.stockAvailability.selectedStore!==""){var n=_.find(st.stockAvailability.storeData,function(n){return n.Id==st.stockAvailability.selectedStore});st.stockAvailability.callForStockPhoneNumber=n.CallForStockPhoneNumber}}function ur(n){var r=st.stockAvailability.selectedStore,t;(t=n!==null?_.map(n,function(n){return{code:n.Code,quantity:n.Quantity,uom:n.QuantityUOM}}):_.map(st.detailMode===!0?[st.productDetail]:st.products,function(n){return{code:n.Code,quantity:n.Quantity,uom:n.QuantityUOM}}),_.find(t,function(n){return n.quantity===""})===undefined)&&(st.stockAvailability.stockAvailabilityHasResults=!0,st.stockAvailability.pendingRequest!=null&&st.stockAvailability.pendingRequest.cancel.resolve(),st.stockAvailability.pendingRequest=ft.products(st.account.AccountId,st.account.SbuCode,t,r),st.stockAvailability.pendingRequest.request.then(function(n){var t=n.data,i;st.detailMode===!0?(i=_.find(t,function(n){return n.Code===st.productDetail.Code}),st.productDetail.AtpStatus=i.AtpStatus):st.products.forEach(function(n){var i=_.find(t,function(t){return t.Code===n.Code});i!=undefined&&(n.AtpStatus=i.AtpStatus)});st.stockAvailability.pendingRequest=null},function(n){i.error(n);st.stockAvailability.pendingRequest=null}))}function fr(){rt.get({accId:o.accId,sbuCode:o.sbuCode,productCode:o.productCode},function(n){i.log(t+" Loaded product details",n);st.productDetail=n[0];st.productDetail.Quantity=n[0].DeliveryBlockSize;st.productDetail.ProductOverview=JSON.parse(n[0].ProductDetails);st.detailMode=!0;st.stockAvailability.stockAvailabilityHasResults===!0&&st.checkStockAvailability([st.productDetail])},function(n){i.error("Failed to load products details",n)})}function er(r){if(r&&n.isDefined(r)&&r.name!=="accounts.changed"&&h.isValidAccount(r)){i.log(t,"Taking account from selection",r);bt(r);return}if(e.current.name==="app.productListV2")y.currentOrderAccount!=null&&h.isValidAccount(y.currentOrderAccount)?(i.log(t,"Taking account from current order",y.currentOrderAccount),bt(y.currentOrderAccount,!0)):(i.log(t,"Falling back to first account",h.getActiveData()[0]),bt(h.getActiveData()[0],!0));else{var u=first(h.get([o.accId]));u?(st.account=u,st.excludedState=st.account.IsExcludePricing,st.excludedState&&(yt=null),i.log(t,"Account route set",st.account)):e.go("app.productListV2").then(function(){k.add({id:"productsAccountNotActive",type:k.types.warning,message:"Pricelist account not selected. Please select the account from the account selector and try again.",expire:!0})})}}function bt(n,t){st.account&&n.AccountId==st.account.AccountId||e.go("app.productListV2.acc",{accId:n.AccountId},{location:t?"replace":!0,reload:t?!0:!1})}function or(){st.hierarchy=[];st.products=[];st.selectedCat=null;st.searchCat=null;st.searchGroup=null;st.searchingGroup=!0;st.isSearching=!1;st.userHasOrderPermission=!1;st.userHasProductPricingPermission=c.hasPermission("Customer/ProductPricing")?!0:!1}function li(r){if(n.isDefined(r)&&st.account){if(yt===r){i.log(t+" Account unchanged - bypassing load Hierarchy %s: %s",st.account.Name1,st.account.AccountId);ai();return}(i.log(t+" Account changed - load Hierarchy %s: %s",st.account.Name1,st.account.AccountId),st.excludedState)||(yt=r,lt(hi),lt(ht),hi=a.get({accountId:r},function(n){st.hierarchy=n;ai();fi();ri();ui();wi()}))}}function ai(){return st.hierarchyLookup=function(){var t=[];return n.forEach(st.hierarchy,function(i){t.push(i.HierarchyDetails);n.forEach(i.LevelTwo,function(r){r.HierarchyDetails.level1=i.HierarchyDetails;t.push(r.HierarchyDetails);n.forEach(r.LevelThree,function(n){n.level1=i.HierarchyDetails;n.level2=r.HierarchyDetails;t.push(n)})})}),t}()}function ri(){n.forEach(st.hierarchy,function(t){n.forEach(t.LevelTwo,function(i){i.isStarred=at(i.HierarchyDetails.Id);i.categoryUrl=iu(t,i);n.forEach(i.LevelThree,function(n){n.isStarred=at(n.Id);n.categoryUrl=ei(n.Id)})})})}function vi(n,r,u){ki();gi();n?(st.isSearching=!1,st.selectedCat=n.HierarchyDetails||n,ti(),i.log(t+" Selected category: %s (%s)",st.selectedCat.Description,st.selectedCat.Id),yi(st.selectedCat),di(r),r&&u&&e.go("app.productListV2.cat",{accId:st.account.AccountId,parentCatDesc:ct(u.Description),searchCatDesc:ct(r.Description),catDesc:ct(st.selectedCat.Description),catId:n.Id},{notify:!1}).then(ui)):pi()}function ct(n){return n.replace(/ /g,"_")}function yi(n){st.isSearching=!1;st.products=!1;st.tooManyResults=!1;lt(ht);(st.sorting.sortBy==="relevance"||st.sorting.sortBy==="category")&&(st.sorting.sortBy="description");ht=l.get({accountId:st.account.AccountId,subGroupId:n.Id},function(n){dt(n);ti();i.log(t+" Loaded %s products for %s",st.products.length,st.selectedCat.Description)},function(n){ni(n)});scrollToY(0)}function sr(){st.products.forEach(function(n){if(n.ProductDetails!=null&&n.ProductDetails!==""){try{n.productOverview=JSON.parse(n.ProductDetails)}catch(r){i.log(t+" Failed to parse json product details %s with %s",n.ProductDetails,r)}n.productOverviewAvailable=n.productOverview!=undefined&&n.productOverview.length>0}else n.productOverviewAvailable=!1})}function pi(){st.account&&st.account.AccountId&&(gi(),st.selectedCat=null,st.products=!1,st.isSearching=!1,st.tooManyResults=!1,st.sorting.sortBy="category",lt(ht),ht=p.get({accountId:st.account.AccountId,$top:100},function(n){dt(n.Items);i.log(t+" Loaded %s frequently ordered products",n.Count)},function(n){ni(n)}),scrollToY(0))}function hr(){var n={accId:st.account.AccountId,keyword:st.searchKeywords};e.go("app.productListV2.search",n)}function kt(n,r,u){if(isNotNullOrEmpty(st.searchKeywords)){st.isSearching=!0;st.selectedCat=null;st.searchCat=null;st.detailMode=!1;st.productDetail={};vr();st.searchTitle="Search results for '"+st.searchKeywords+"'";st.searchHighlight=r||!1?"":st.searchKeywords;st.sorting.sortBy="relevance";st.products=!1;st.tooManyResults=!1;n&&(st.searchingGroup=!0,st.searchGroup=st.searchCat);i.log(t+' Search for "%s" in %s',st.searchKeywords,st.searchingGroup&&st.searchGroup?st.searchGroup.Description:"all categories");lt(ht);var f={accountId:st.account.AccountId,keyword:st.searchKeywords,groupId:st.searchingGroup&&st.searchGroup?st.searchGroup.Id:null,getPlantsPricing:!1,featureName:"Products"};ht=v.get(f,function(n){dt(n.Data.Items,n.Data.Count,n.NarrowYourSearchWarning);st.categoryHits=n.CategoryHits;wi();u!=null&&typeof u=="function"&&u()},function(n){ni(n)})}}function cr(n){var r,u;st.isSearching=!0;st.productsReloading=!0;st.tooManyResults=!1;st.products=!1;i.log(t+'Partial search for "%s" in %s',st.searchKeywords,st.searchingGroup&&st.searchGroup?st.searchGroup.Description:"all categories");lt(ht);r=st.searchingGroup&&st.searchGroup?st.searchGroup.Id:null;st.filterMainCategory!=null&&(r=st.filterMainCategory.HierarchyDetails.Id);st.filterCategory!=null&&(r=st.filterCategory.HierarchyDetails.Id);st.filterSubCategory!=null&&(r=st.filterSubCategory.Id);u={accountId:st.account.AccountId,keyword:st.searchKeywords,groupId:r,getPlantsPricing:!1,noTrack:!0,featureName:"Products"};ht=v.get(u,function(t){dt(t.Data.Items);st.productsReloading=!1;n&&n()},function(n){ni(n)})}function dt(n,t,i){st.products=n;st.productResultCount=t|st.productResultCount;st.tooManyResults=i|st.tooManyResults;st.lastSearchTooManyResults=i|st.lastSearchTooManyResults;sr();oi();pr();lr();st.stockAvailability.stockAvailabilityHasResults===!0&&st.checkStockAvailability(null)}function lr(){st.loadingPrices=!0;ht=b.fetch(st.products,function(){st.loadingPrices=!1;st.sorting.sortBy==="price"&&oi()},function(){st.loadingPrices=!1});ht===!1&&(st.loadingPrices=!1)}function wi(){n.forEach(st.hierarchy,function(t){t.productCategoryCount=0;t.productSubCategoryCount=0;var i=selectByProp("Key",t.HierarchyDetails.Id,st.categoryHits);t.productCount=i?i.result.Value:0;n.forEach(t.LevelTwo,function(r){r.productCategoryCount=0;i=selectByProp("Key",r.HierarchyDetails.Id,st.categoryHits);r.productCount=i?i.result.Value:0;r.productCount>0&&(t.primaryChild=t.productCategoryCount===0?r:null,t.productCategoryCount+=1);n.forEach(r.LevelThree,function(n){i=selectByProp("Key",n.Id,st.categoryHits);n.productCount=i?i.result.Value:0;n.productCount>0&&(r.productCategoryCount+=1,t.productSubCategoryCount+=1)})});t.canExpand=t.productCategoryCount>1||t.productSubCategoryCount>1})}function gt(){st.numberOfCategoryFilters=0;st.filterMainCategory!=null&&st.numberOfCategoryFilters++;st.filterCategory!=null&&st.numberOfCategoryFilters++;st.filterSubCategory!=null&&st.numberOfCategoryFilters++;st.lastSearchTooManyResults?cr(bi):(ar(),bi())}function bi(){var n=st.filterMainCategory?st.filterMainCategory.HierarchyDetails.Description:"Show All",t=st.filterCategory?st.filterCategory.HierarchyDetails.Description:"Show All",i=st.filterSubCategory?st.filterSubCategory.Description:"Show All";g.track({feature:EnumDescriptions.featureEnum.products,verb:EnumDescriptions.verbEnum.changeFilter,noun:"Products",pluralisation:EnumDescriptions.pluralisationEnum.single},{accountId:st.account.AccountId,level1:n,level2:t,level3:i,sortBy:st.sorting.sortBy,sortOrder:st.sorting.sortOrder==="1"?"desc":"asc",productCount:tr(),keywords:st.searchKeywords})}function ar(){for(var n=0;n<st.products.length;n++){var t=st.products[n],i=st.filterMainCategory==null||t.MainGroupId===st.filterMainCategory.HierarchyDetails.Id,r=st.filterCategory==null||t.GroupId===st.filterCategory.HierarchyDetails.Id,u=st.filterSubCategory==null||t.SubGroupId===st.filterSubCategory.Id;t.isVisible=i&&r&&u}}function vr(){st.filterMainCategory=null;st.filterCategory=null;st.filterSubCategory=null}function ki(){(st.searchKeywords=null,r.$broadcast("angucomplete-alt:clearInput"),st.searchTitle=null,st.products=[],st.selectedCat=null,st.searchCat=null,st.searchGroup=null,st.tooManyResults=!1,st.isSearching=!1,e.current.name=="app.productListV2.search")&&(li(st.account.AccountId),e.go("app.productListV2.acc",{accId:st.account.AccountId}))}function yr(n){n?(st.searchingGroup=!1,st.searchGroup=null):st.searchingGroup=!0}function di(n){n?(st.searchCat=n,i.log(t+" Search group set to %s",n.Description)):(st.searchCat=null,i.log(t,"Search group reset to null"))}function pr(){i.log(t,"Resetting Product Quantities");for(var n=0;n<st.products.length;n++)st.products[n].Quantity=st.products[n].DeliveryBlockSize||1,st.products[n].AccountId=st.account.AccountId;i.log(t,"Resetting Product Quantities Complete")}function wr(r){(r.AccountId=st.account.AccountId,r.Quantity=r.Quantity>1?r.Quantity:1,r.UnitPriceExcludingGST!=null&&r.AccountId!=null&&r.Quantity!=null)&&(i.log(t,"Add to order >",r),y.addItem(n.copy(r),null,!0),r.Quantity=r.DeliveryBlockSize)}function gi(){$("#cat-menu").collapse("hide");$("#products-category-btn").addClass("collapsed")}function ui(){if(o.catId){if(st.hierarchyLookup){var t=selectByProp("Id",o.catId,st.hierarchyLookup);t&&t.result&&(st.selectedCat=n.copy(t.result),st.selectedCat.level2||(st.selectedCat.level2=n.copy(t.result),st.selectedCat.Description=st.fullRangeDescription))}else st.selectedCat=o.catId?{Id:o.catId,Description:o.catDesc?o.catDesc.replace(/_/g," "):null}:null;ti()}}function br(n,t){u.open({templateUrl:"modalImage.html",resolve:{imageSrcToUse:function(){return n},imageDescriptionToUse:function(){return t}},controller:["$scope","imageSrcToUse","imageDescriptionToUse",function(n,t,i){n.imageSrc=t;n.imageDescription=i}]})}function lt(n){n&&n.$cancelRequest&&n.$cancelRequest()}function ni(n){st.products=n.status!==-1?[]:!1}function fi(){pt="products."+st.account.AccountId+".starredCategories";var i=d.store().get(pt)||[],t=[];return n.forEach(i,function(i){var u=selectByProp("Id",i,st.hierarchyLookup),r;u&&(r=n.copy(u.result),r.categoryUrl=ei(i),t.push(r))}),st.starredCategories=t,ti(),t}function kr(n){if(i.log(t,"toggleCategoryStar"),fi(),st.selectedCat.starred=!st.selectedCat.starred,st.selectedCat.starred)st.starredCategories.push(st.selectedCat);else{var r=selectByProp("Id",st.selectedCat.Id,st.starredCategories);r&&st.starredCategories.splice(r.idx,1)}g.track({feature:EnumDescriptions.featureEnum.products,verb:EnumDescriptions.verbEnum.toggle,noun:"Favourite",pluralisation:EnumDescriptions.pluralisationEnum.single},{accountId:st.account.AccountId,categoryId:st.selectedCat.Id,level1:st.selectedCat.level1.Description,level2:st.selectedCat.level2.Description,level3:st.selectedCat.Description,status:st.selectedCat.starred?"On":"Off",source:n});d.store().set(pt,st.starredCategories.map(function(n){return n.Id}));ri()}function dr(n,t){var i,r,u;fi();i=selectByProp("Id",n,st.hierarchyLookup).result;r=at(n);r?(u=selectByProp("Id",n,st.starredCategories),u&&st.starredCategories.splice(u.idx,1)):st.starredCategories.push(i);g.track({feature:EnumDescriptions.featureEnum.products,verb:EnumDescriptions.verbEnum.toggle,noun:"Favourite",pluralisation:EnumDescriptions.pluralisationEnum.single},{accountId:st.account.AccountId,categoryId:n,level1:i.level1.Description,level2:i.level2?i.level2.Description:"catDescription.Description",level3:i.level2?i.Description:st.fullRangeDescription,status:r?"Off":"On",source:t});d.store().set(pt,st.starredCategories.map(function(n){return n.Id}));ri()}function ti(n){if(!st.starredCategories||st.starredCategories==[]||!st.selectedCat)return!1;var t=selectByProp("Id",n||st.selectedCat.Id,st.starredCategories);return n||(st.selectedCat.starred=!!t),st.selectedCat.starred}function at(n){if(!st.starredCategories||st.starredCategories==[])return!1;var t=selectByProp("Id",n,st.starredCategories);return t!==null}function gr(n){var t=nr(n);t&&e.go("app.productListV2.cat",{accId:st.account.AccountId,parentCatDesc:t.parentCatDesc,searchCatDesc:t.searchCatDesc,catDesc:t.catDesc,catId:n})}function nu(n){st.searchKeywords=n;var t={accountId:st.account.AccountId,$top:10,$skip:0};return n&&(t.keyword=n),t}function tu(t){var e,u,i,f,r;if(n.isString(t))return{Items:!1};if(e={Items:[]},t&&t.Items)for(u=0;u<t.Items.length;u++){if(i=t.Items[u],i.SearchTermType===2&&(i.ImageAssetUri=productImgSrc("thumb",i)),f=i.SearchTerm,i.SearchTermType===3)if(i.OriginalSearchTerm=t.Keyword,i.CategoryId=f,r=selectByProp("Id",f,st.hierarchyLookup),r!=null&&r.result!=null&&r.result.Description!=null)i.SearchTerm=s("titleCase")(t.Keyword,!0)+" in <strong>"+r.result.Description+"<\/strong>";else continue;else i.SearchTerm=s("titleCase")(f,!0);i.canDelete=i.SearchTermType===1;e.Items.push(i)}return e}function ei(n){var t=nr(n);if(t)return e.href("app.productListV2.cat",{accId:st.account.AccountId,parentCatDesc:t.parentCatDesc,searchCatDesc:t.searchCatDesc,catDesc:t.catDesc,catId:n})}function iu(n,t){return e.href("app.productListV2.cat",{accId:st.account.AccountId,parentCatDesc:n.HierarchyDetails.Description,searchCatDesc:t.HierarchyDetails.Description,catDesc:st.fullRangeDescription,catId:t.HierarchyDetails.Id})}function nr(n){var t=selectByProp("Id",n,st.hierarchyLookup);if(t)return t.result.level2?{parentCatDesc:ct(t.result.level1.Description),searchCatDesc:ct(t.result.level2.Description),catDesc:ct(t.result.Description)}:{parentCatDesc:ct(t.result.level1.Description),searchCatDesc:ct(t.result.Description),catDesc:ct(st.fullRangeDescription)}}function oi(n){var r,u,f;i.log(t+" Sorting by %s",st.sorting.sortBy);switch(st.sorting.sortBy){case"price":vt(function(n){return n.Conversion*n.UnitPriceExcludingGST/n.PricingQuantity});break;case"category":vt(function(n){return si(n)+n.Description});break;case"relevance":r=1e5;vt(function(n){return r-(n.Score||0)});u=100;f=st.products.reduce(function(n,t){var i=si(t);return n[i]||(n[i]=u++),n},{});vt(function(n){var t=si(n);return f[t].toString()+(r-(n.Score||0)).toString()});break;case"description":default:vt(function(n){return n.Description.trim().toLocaleLowerCase()})}n&&ru()}function ru(){var i="",r="",u="",n=null,f=!1,t;st.selectedCat&&(n=st.selectedCat.Id,t=selectByProp("Id",n,st.hierarchyLookup).result,f=at(n),i=t.level1.Description,r=t.level2.Description,u=t.Description);g.track({feature:EnumDescriptions.featureEnum.products,verb:EnumDescriptions.verbEnum.changeSortOrder,noun:"Products",pluralisation:EnumDescriptions.pluralisationEnum.single},{accountId:st.account.AccountId,categoryId:n,level1:i,level2:r,level3:u,status:f?"Off":"On",sortBy:st.sorting.sortBy,sortOrder:st.sorting.sortOrder==="1"?"desc":"asc",productCount:tr(),keywords:st.searchKeywords})}function tr(){for(var i,t=0,n=0;n<st.products.length;n++)i=st.products[n],i.isVisible!==!1&&t++;return t}function si(n){var t=6;return n.MainGroupOrder.toString().padStart(t,"0")+"-"+n.GroupOrder.toString().padStart(t,"0")+"-"+n.SubGroupOrder.toString().padStart(t,"0")}function vt(n){st.products.sort(function(t,i){switch(st.sorting.sortOrder){case"1":return n(t)>n(i)?-1:1;case"0":default:return n(t)<n(i)?-1:1}})}var st=this,ht=null,hi=null,yt=null,pt,ci=!1;st.stockAvailabilityEnabled=!0;st.fullRangeDescription="Full Range";st.account=null;st.hierarchy=[];st.products=[];st.categoryHits=[];st.filterMainCategory=null;st.filterCategory=null;st.filterSubCategory=null;st.selectedCat=null;st.searchCat=null;st.searchGroup=null;st.searchingGroup=!0;st.isSearching=!1;st.searchKeywords=o.keyword;st.searchTitle=null;st.searchHighlight=null;st.displayMode="list";st.excludedState=!1;st.loadingPrices=!1;st.starredCategories=[];st.imageUploadAccessToken="?access_token="+c.token();st.userHasProductPricingPermission=!1;st.userHasOrderPermission=!1;st.productDetail={};st.stockAvailability={};st.stockAvailability.getStockButtonEnabled=!1;st.stockAvailability.stockAvailabilityEnabled=!1;st.stockAvailability.stockAvailabilityStorePreferenceName="StockAvailabilityStoreSelection";st.stockAvailability.stockAvailabilityAtpStatus=Enums.stockAvailabilityAtpStatus;st.stockAvailability.stockAvailabilityHasResults=!1;st.stockAvailability.enableStoreSelector=!1;st.stockAvailability.defaultStores={};st.stockAvailability.storeData=[];st.stockAvailability.pendingRequest=null;st.stockAvailability.pendingStoresRequest=null;st.stockAvailability.pendingDefaultStoreRequest=null;st.priceAvailability=Enums.priceAvailabilityStatus;st.sorting={sortOrder:"0",sortBy:"description"};r.layoutDefaultMode="list";r.$on("accounts.changed",wt);r.$on("singleAccount.selected",function(n,t){st.account&&t.AccountId!==st.account.AccountId&&bt(t)});r.$on("$stateChangeSuccess",function(t,i,r,u,f){var o="app.productListV2",s;(ci||st.excludedState)&&((s=u.name===o&&i.name===o+".acc",s)||i.name===u.name&&n.equals(r,f)||(i.name===o||e.$current.parent.name===o)&&wt())});st.selectCategory=vi;st.loadProducts=yi;st.search=kt;st.goToSearch=hr;st.clearSearch=ki;st.showAllResults=yr;st.setSearchCategory=di;st.productImgSrc=productImgSrc;st.addToOrder=wr;st.openModalImage=br;st.toggleCategoryStar=kr;st.toggleCategoryStarForId=dr;st.selectCategoryById=gr;st.getCategoryUrl=ei;st.checkCategoryStarById=at;st.sortProducts=oi;r.$watch("pricelist.products",function(){st.stockAvailability.enableStoreSelector===!1&&st.stockAvailability.stockAvailabilityEnabled===!0&&st.products.length>0&&(i.info("Setting locked default store to ",st.products[0].PickupSapPlantId),st.stockAvailability.selectedStore=st.products[0].PickupSapPlantId)});st.viewProductDetails=function(n,t,i){e.go("app.productListV2.details",{accId:n,sbuCode:t,productCode:i});var r=st.filterMainCategory?st.filterMainCategory.HierarchyDetails.Description:"Show All",u=st.filterCategory?st.filterCategory.HierarchyDetails.Description:"Show All",f=st.filterSubCategory?st.filterSubCategory.Description:"Show All";g.track("Product details: Page viewed",{accountId:n,sbuCode:t,productCode:i.replace(/^0+/,""),productDetailsUrl:e.href("app.productListV2.details",{accId:n,sbuCode:t,productCode:i},{absolute:!0}),level1:r,level2:u,level3:f,keywords:st.searchKeywords})};st.productDetailsLink=function(n,t){var i=st.filterMainCategory?st.filterMainCategory.HierarchyDetails.Description:"Show All",r=st.filterCategory?st.filterCategory.HierarchyDetails.Description:"Show All",u=st.filterSubCategory?st.filterSubCategory.Description:"Show All";g.track("Product details: Link clicked",{accountId:st.account.AccountId,sbuCode:st.account.SbuCode,productCode:st.productDetail.Code.replace(/^0+/,""),productDetailsUrlName:n,productDetailsUrl:t,level1:i,level2:r,level3:u,keywords:st.searchKeywords});ut.open(t,"_blank")};st.filterOnMainCategory=function(n,r){i.info(t,"Main Category filter applied ",n);st.filterMainCategory=n;st.filterCategory=n!=null?n.primaryChild:null;st.filterSubCategory=null;r&&(gt(),scrollToY(0))};st.filterOnCategory=function(n,r){i.info(t,"Category Filter applied ",n);st.filterCategory=n;st.filterSubCategory=null;r&&(gt(),scrollToY(0))};st.filterOnSubCategory=function(n,r){i.info(t,"Sub Category Filter applied ",n);st.filterSubCategory=n;r&&(gt(),scrollToY(0))};st.productImageUpload=function(n){n.IsUploading=!0};st.productImageUploadSuccess=function(n,t){n.ImageAssetUri=t.data;n.IsUploading=!1};st.productImageUploadError=function(n,t){nt.swal({type:"info",title:"Error updating product image",text:t.data.Message});n.IsUploading=!1};st.suggestionSelected=function(n){var f,u,o;if(i.info(t,"suggestionSelected"),n){if(f=n.originalObject.SearchTermType===2,n.originalObject.SearchTermType===3){o=st.hierarchy.find(function(t){return t.HierarchyDetails.Id===n.originalObject.CategoryId});r.$broadcast("angucomplete-alt:changeInput","pricelistSearchKeywords2",n.originalObject.OriginalSearchTerm);u={accId:st.account.AccountId,keyword:n.originalObject.OriginalSearchTerm};e.go("app.productListV2.search",u,{notify:!1}).then(function(){kt(!0,f,function(){st.filterOnMainCategory(o,!0);st.filterOnCategory(null,!0)})});return}st.searchKeywords=n.originalObject.SearchTerm;u={accId:st.account.AccountId,keyword:st.searchKeywords};e.go("app.productListV2.search",u,{notify:!1});kt(!0,f)}else st.searchKeywords=""};st.suggestionDeleted=function(n){i.info(t,"suggestionDeleted");it.delete({AccountId:st.account.AccountId,SearchTerm:n.originalObject.SearchTerm})};st.searchChanged=function(n){st.searchKeywords=n};st.showFilterCategoryModal=function(){var i=n.copy(st.filterMainCategory),f=n.copy(st.filterCategory),e=n.copy(st.filterSubCategory),t=u.open({templateUrl:"filter-category-modal.html",size:"md",backdrop:"static",windowClass:"print-dialogue",keyboard:!0,animation:!1,scope:r});st.filterProductsByCategory=function(){gt();t.close();scrollToY(0)};st.resetFilterProductsByCategory=function(){st.filterMainCategory=i;st.filterCategory=f;st.filterSubCategory=e;t.close()};r.$on("$destroy",function(){t.close()})};st.productSearchApiFn=nu;st.productSearchResponseFn=tu;h.isReady()?wt():r.$on("accounts.dataReady",function(){wt()});st.selectedStore=function(){st.clearStockAvailability();st.stockAvailability.getStockButtonEnabled=st.stockAvailability.selectedStore!=null;ii();st.stockAvailability.defaultStores[st.account.AccountId]=st.stockAvailability.selectedStore;et.updatePref(st.stockAvailability.stockAvailabilityStorePreferenceName,JSON.stringify(st.stockAvailability.defaultStores))};st.updatedQty=function(n){n.AtpStatus!==undefined&&(n.AtpStatus="?",st.checkStockAvailability([n]))};st.checkStockAvailability=function(n){f(ur(n),500)};st.clearStockAvailability=function(){st.products.forEach(function(n){n.AtpStatus=null})}}n.module("app.productsv2").controller("ProductsV2Controller",i);var t="[products]";i.$inject=["$log","$scope","$modal","$timeout","$state","$stateParams","$filter","accountsService","authService","products","productHierarchy","productSearch","ordersManager","freqOrderedProducts","orderPolicyService","plantPricing","notificationService","devicePreferences","metrics","SweetAlert","featureToggle","productSearchSuggestions","productDetails","$window","productStockAvailability","userPreferencesService","SBU_CONFIG"]}(angular),function(){"use strict";function n(n){return n("api/customerproducts",null,{get:{isArray:!0,cancellable:!0}})}function t(n){return n("api/customerproducts/details/:accId/:sbuCode/:productCode",null,{get:{isArray:!0,cancellable:!0}})}function i(n,t){function r(i){var r=t.defer();return{request:n.post("/api/customerproducts/stockAvailabilityStores",{accountId:i},{timeout:r.promise}),cancel:r}}function u(i){var r=t.defer();return{request:n.post("/api/customerproducts/stockAvailabilityDefaultStore",{accountId:i},{timeout:r.promise}),cancel:r}}function f(i,r,u,f){var e=t.defer();return{request:n.post("/api/customerproducts/stockAvailability",{accountId:i,sbuCode:r,products:u,plantId:f},{timeout:e.promise}),cancel:e}}var i={};return i.stores=r,i.defaultStore=u,i.products=f,i}function r(n){return n("api/customerproducts/hierarchy",null,{get:{isArray:!0,cancellable:!0}})}function u(n){return n("api/customerproducts/search",{},{get:{cancellable:!0}})}function f(n){return n("api/customerproducts/plantPricing",null,{post:{method:"POST",isArray:!0,cancellable:!0}})}function e(n){return n("api/accounts/reports/:accountId/productorders",{},{get:{cancellable:!0}})}function o(n){return n("api/customerproducts/pse",{AccountId:"@AccountId",SearchTerm:"@SearchTerm"},{"delete":{method:"POST",url:"api/customerproducts/pse/clear",cancellable:!0,isArray:!1}})}angular.module("app.productsv2").factory("products",n).factory("productDetails",t).factory("productStockAvailability",i).factory("productHierarchy",r).factory("productSearch",u).factory("productPlantPricing",f).factory("freqOrderedProducts",e).factory("productSearchSuggestions",o);n.$inject=["$resource"];t.$inject=["$resource"];i.$inject=["$http","$q"];r.$inject=["$resource"];u.$inject=["$resource"];f.$inject=["$resource"];e.$inject=["$resource"];o.$inject=["$resource"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){var n="app.productListV2",t="Customer/ProductList",i="products",r="tourProducts";return[{state:n,config:{url:"/products",pageTitle:"Product list",templateUrl:"products.html",access:t}},{state:n+".acc",config:{url:"/{accId}",pageTitle:"Product list",access:t,help:i,helpTour:r}},{state:n+".search",config:{url:"/{accId}/search/{keyword}",pageTitle:"Product search",access:t,help:i,helpTour:r}},{state:n+".cat",config:{url:"/{accId}/{parentCatDesc}/{searchCatDesc}/{catDesc}/{catId}",pageTitle:"Browsing products",access:t,help:i,helpTour:r}},{state:n+".details",config:{url:"/{accId}/{sbuCode}/{productCode}/details",pageTitle:"Product Details",access:t,help:i,helpTour:r}}]}n.module("app.productsv2").run(t);t.$inject=["routerHelper"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e){n.list={};n.list.data={};n.list.items=[];n.list.sortColumn="QuoteDate";n.list.asc=!1;n.list.orderBy="desc";n.list.totalItems=0;n.list.data.pageSizeList=[10,25,50];n.list.data.itemsPerPage=25;n.list.data.currentPage=1;n.searchKeyword="";n.dataLoaded=!1;n.spinner=!1;$("#btn-download-pdf").on("click",function(t){n.exportFiles(t,f.Pdf,n.list.sortColumn,n.list.orderBy)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,f.excel,n.list.sortColumn,n.list.orderBy)});$("#btn-download-csv").on("click",function(t){n.exportFiles(t,f.csv,n.list.sortColumn,n.list.orderBy)});n.searchOption={};n.searchOption.dateRange={startDate:new Date(moment().subtract(1,"M").format("YYYY-MM-DD")),endDate:new Date(moment().format("YYYY-MM-DD"))};n.downloadPDF=function(n,t){if(n&&t){var i=window.location.protocol+"//"+window.location.host+"/api/products/quotes/export/pdf?accountId="+n+"&documentNo="+t+"&access_token="+u.token();window.open(i)}};n.list.setPageSize=function(t){n.list.data.itemsPerPage=t;n.list.search()};n.list.sort=function(t,i){n.list.asc=!i;n.list.sortColumn!==t&&(n.list.asc=!0);n.list.sortColumn=t;n.list.orderBy=n.list.asc?"asc":"desc";n.list.search(!0)};n.list.search=function(t){r.removeAll();var u={};t&&(n.list.data.currentPage=1);u.Skip=((n.list.data.currentPage||1)-1)*n.list.data.itemsPerPage;u.Top=n.list.data.itemsPerPage;u.FromDate=moment(n.searchOption.dateRange.startDate).format();u.ToDate=moment(n.searchOption.dateRange.endDate).format();u.SortColumn=n.list.sortColumn;u.OrderBy=n.list.orderBy;n.searchKeyword!=""&&(u.SearchKeyword=n.searchKeyword);n.dataLoaded=!1;n.spinner=!0;i.get(u,function(t){n.list.items=t.Items;n.list.totalItems=t.Count;n.dataLoaded=!0;n.spinner=!1},function(t){r.add({id:"accounts-selection",type:"error",message:t.data.Message});n.list.items=[];n.list.totalItems=0;n.dataLoaded=!0;n.spinner=!1})};n.exportFiles=function(t,i,r,f){t.preventDefault();var o=n.selectedItems.length?n.selectedItems:n.list.items,s=$.map(o,function(n){return n.DocumentNo}),h=window.location.protocol+"//"+window.location.host+"/api/products/quotes/export?ids="+window.encodeURIComponent(s)+"&access_token="+u.token()+"&accountId="+e.getActive().join(",")+"&fileType="+i.toLowerCase()+"&sortColumn="+r+"&orderBy="+f;window.open(h)};n.tableHeaders=[{columnName:"",displayName:"",checkbox:!0},{columnName:"DocumentNo",displayName:"Quote No."},{columnName:"AccountId",displayName:"Account No."},{columnName:"ExternalReference",displayName:"Your Reference"},{columnName:"ShipToStreet",displayName:"Delivery Address"},{columnName:"QuoteDate",displayName:"Quote Date"},{columnName:"ValidToDate",displayName:"Valid To"},{columnName:"Amount",displayName:"Total*",className:"tf-right"}]}angular.module("app.quotes").controller("QuotesController",n);n.$inject=["$scope","$stateParams","quotes","notificationService","authService","exportService","accountsService","metrics","metricEvents","utilService"]}(),function(){"use strict";function n(n){return n("api/products/quotes/sap")}angular.module("app.quotes").factory("quotes",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[]}angular.module("app.quotes").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n,t,i,r,u,f,e){function s(){o.loading=!1}var o=this;o.loading=1;o.newUser={CustomerOfCSR:!0,FirstName:null,LastName:null,EmailAddress:null,Username:null,Password:null,CompanyName:null,ABN:null,Position:null,Phone:null,Mobile:null,Country:null,State:null,Timezone:null};o.accountList=null;o.currentStep=1;o.totalSteps=3;o.showModal=!1;u(s);o.submitUserRegisterForm=function(){t.form.$setSubmitted();o.newUser.CSR_AccountId=o.accountList.join(" ");u(function(){r.validate(t.form,!0).then(function(){t.form.$valid?(o.loading=2,f.registerUser(o.newUser,function(t){n.info("got a new registration",o.newUser);n.info("got the following response",t);o.loading=!1},function(n){o.loading=!1;n.ModelState&&(t.validationErrors=n.ModelState)}),o.currentStep>0&&o.currentStep<o.totalSteps&&(o.currentStep+=1)):o.loading=!1},function(){o.loading=!1})})};o.goNextVisible=function(){return o.currentStep===1};o.goBackVisible=function(){return o.currentStep>1&&o.currentStep<o.totalSteps};o.submitVisible=function(){return o.currentStep===2};o.goNext=function(){t.form.$setSubmitted();r.validate(t.form).then(function(){r.checkValid(t.form)&&(o.currentStep>0&&o.currentStep<o.totalSteps?(o.currentStep+=1,t.form.$setPristine()):o.currentStep=o.currentStep<1?1:o.totalSteps)})};o.goBack=function(){o.currentStep>1&&o.currentStep<=o.totalSteps?o.currentStep-=1:o.currentStep=o.currentStep<=1?1:o.totalSteps};o.customerNumberModal=function(){o.showModal=o.showModal?!1:!0;$("#modal-account-number").modal(o.showModal?"show":"hide")};o.requestPasswordReset=function(n){e.requestPasswordReset(n)}}angular.module("app.registration").controller("RegistrationController",n);n.$inject=["$log","$scope","$state","$validation","$timeout","authService","resetPassword"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){function n(n){return{url:n,onEnter:["$timeout","$state",function(n,t){n(function(){t.go("app.signUp.form")})}]}}return[{state:"app.signUp",config:{abstract:!0,url:"/sign-up",pageTitle:"Sign up for CSR Connect",templateUrl:"registration-sign-up.html",bodyClass:["landing","signup"]}},{state:"app.signUp.form",config:{url:"",pageTitle:"Sign up for CSR Connect",bodyClass:["landing","signup"],sticky:!0,views:{signUp:{templateUrl:"home/signup"}}}},{state:"app.signUp.newCsrAccount",config:{url:"/apply-for-csr-account",pageTitle:"How to get a CSR account",templateUrl:"home/signupcreditaccount",bodyClass:["landing","signup"]}},{state:"app.registerTerms",config:{url:"/registerterms",pageTitle:"Registration Terms & Conditions",templateUrl:"home/RegistrationTerms",bodyClass:"landing"}},{state:"app.signUp.reminderRequested",config:{url:"/remind-me-later",pageTitle:"Remind me later",templateUrl:"home/signUpReminderRequested",bodyClass:["landing","signup"]}},{state:"app.redirectRegister",config:n("/register")},{state:"app.redirectRegisterInfo",config:n("/registerinfo")}]}n.module("app.registration").run(t);t.$inject=["routerHelper"]}(angular),function(){"use strict";function n(n,t,i,r,u){n.session.firstTimeUser=!0;t.acceptTerms=function(){r.acceptTerms.save(function(){if(n.session.acceptTerms=!0,n.session.changePassword){i.go("app.change-password-forced");return}n.session.firstTimeUser=!1;u.checkSession(function(){i.go("app.dash").then(function(){n.$broadcast("auth.firstTimeUserCleared")})})})}}angular.module("app.registration").controller("RegistrationTermsController",n);n.$inject=["$rootScope","$scope","$state","userData","authService"]}(),function(){"use strict";function n(n,t,i,r,u,f,e){function o(t,r){n.debug("ReportsController > runReport ",t);var u=jstz.determine(),f=window.location.protocol+"//"+window.location.host+"/"+t+"?fileType="+r.toLowerCase()+"&access_token="+i.token()+"&accountId="+e.getActive().join(",")+"&timeZone="+u.name();window.open(f)}function s(t){n.debug("ReportsController > runReport ",t);var r=jstz.determine(),f=u.protocol()+"://"+u.host()+":"+u.port()+"/"+t+"?access_token="+i.token()+"&timeZone="+r.name();window.open(f)}t.runBusinessSignupReport=function(){n.debug("ReportsController > running runBusinessSignupReport");s("api/accounts/reports/signupreport")};t.runLogonReport=function(){n.debug("ReportsController > running LogonReport");o("api/admin/profile/export/logonReport",f.excel)};t.runUserProfileReport=function(){n.debug("ReportsController > run UserProfileReport");o("api/admin/profile/export/userProfileReport",f.excel)};t.userAccountProfileReport=function(){n.debug("ReportsController > run profiles / accounts");o("api/admin/profile/export/userAccountProfileReport",f.excel)};t.contactsReport=function(){n.debug("ReportsController > run contacts");o("api/admin/profile/export/contactsReport",f.excel)}}angular.module("app.reports").controller("ReportsController",n);n.$inject=["$log","$scope","authService","signupReport","$location","exportService","accountsService"]}(),function(){"use strict";function n(n){return n("api/accounts/reports/signupreport")}angular.module("app.reports").factory("signupReport",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){return[{state:"app.purchaseHistory",config:{url:"/reports/purchase-history/:report/{filters:any}",pageTitle:"Purchases history",templateUrl:"reporting/charts/purchasesHistory",access:"Customer/Reporting"}},{state:"app.reports",config:{url:"/admin/reports",pageTitle:"Reports",templateUrl:"administration/reports",access:"All/Profile"}},{state:"app.metricsevents",config:{url:"/admin/metricsevents",pageTitle:"Reports",templateUrl:"administration/metricsevents",access:"All/Profile"}},{state:"app.invoiceDelivery",config:{url:"/reports/invoice-delivery",templateUrl:"invoice-delivery-report.html",pageTitle:"Invoice delivery report",controller:"invoiceDeliveryReportController",controllerAs:"invoiceReport",access:"Customer/Reporting"}},{state:"app.invoiceDeliveryByYear",config:{url:"/reports/invoice-delivery/:year",templateUrl:"invoice-delivery-by-year.html",pageTitle:"Invoice delivery report",controller:"invoiceDeliveryByYearController",controllerAs:"invoiceReport",access:"Customer/Reporting"}},{state:"app.invoiceDeliveryByMonth",config:{url:"/reports/invoice-delivery/:year/:month",templateUrl:"invoice-delivery-by-month.html",pageTitle:"Invoice delivery report",controller:"invoiceDeliveryByMonthController",controllerAs:"invoiceReport",access:"Customer/Reporting"}},{state:"app.invoiceDeliveryByDay",config:{url:"/reports/invoice-delivery/:year/:month/:day?page",templateUrl:"invoice-delivery-by-day.html",pageTitle:"Invoice delivery report",controller:"invoiceDeliveryByDayController",controllerAs:"invoiceReport",access:"Customer/Reporting"}}]}n.module("app.reports").run(t);t.$inject=["routerHelper"]}(angular),function(){"use strict";function n(n,t,i,r){r.query(null,function(n){console.log(n);t.metricsReportResults=n})}angular.module("app.reports").controller("MetricsEventsController",n);n.$inject=["$log","$scope","authService","metricsReport"]}(),function(){"use strict";function n(n){return n("api/admin/metricsevents/list")}angular.module("app.reports").factory("metricsReport",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l){function it(){l.isReady()&&(ot(),u.initialised=!0)}function ot(n){var t=d(n);a.level.render(t)}function at(){a.level.idx>0&&(v(a.level.idx-1),p())}function vt(){a.searchOption.mode=a.searchOption.mode=="val"?"qty":"val"}function d(n){var t={accountId:w(),fromDate:moment(a.searchOption.dateRange.startDate).format("YYYY-MM-DD"),toDate:moment(a.searchOption.dateRange.endDate).endOf("M").format("YYYY-MM-DD"),uomFilter:a.searchOption.selectedUom,mode:a.searchOption.mode,category:a.searchOption.category,month:a.searchOption.month};return angular.merge({},t,n)}function w(){return l.getActive().join(",")}function g(n){angular.extend(a.searchOption,n)}function v(n){var t=a.levelOrder[n];a.level=a.levels[t]}function p(i){n.debug("About to update and go",a);t.go(t.current.name,{report:a.levelOrder[a.level.idx],filters:o.createStateFilters(angular.merge({},{fromDate:moment(a.searchOption.dateRange.startDate).format("YYYY-MM-DD"),toDate:moment(a.searchOption.dateRange.endDate).endOf("M").format("YYYY-MM-DD"),uomFilter:a.searchOption.selectedUom,mode:a.searchOption.mode,month:a.searchOption.month},i))},{location:!0,inherit:!0,notify:!1});ot(i)}function yt(n){v(n);p()}function pt(t){var i,r;a.searchOption.month&&(a.searchOption.month=null,p());i=t||{};i.accountId=w();r=d(i);e.byMonth().get(r,function(t){n.debug("ReportsPurchaseHistoryController > purchaseHistory get data",t);v(0);k(t,["","Selected period","Previous period"],["Month","Value","PrevValue"],[null,"currency","currency"]);angular.forEach(t,function(n,i){t[i].chartMonth=moment(t[i].Month,"MMM YYYY").format("YYYY-MM-DD")});nt({data:t,categoryField:"chartMonth",categoryAxis:{parseDates:!0,startOnAxis:!0,tickPosition:"start",autoWrap:!0},graphs:[{type:"line",valueField:"PrevValue",balloonText:"<strong>[[PrevMonth]]<\/strong>: $[[PrevValue]]",bullAlpha:.2},{type:"line",valueField:"Value",balloonText:"<strong>[[Month]]<\/strong>: $[[Value]]<br>View category breakdown for [[Month]]",bullet:"round"}],events:{clickGraphItem:function(t){var i=t.item.dataContext.Month;n.log("Reports > Drill down to purchases by category for",i);st(1,i)}}})},function(n){tt(n.data);return})}function st(n,t){v(n);p({month:t})}function wt(n,t,i){v(n);p({category:t,month:i})}function bt(n,t){var i=n.Sales,r=t.Sales;return i>r?-1:i<r?1:0}function kt(n,t){var i=n.Quantity,r=t.Quantity;return i>r?-1:i<r?1:0}function rt(n){var t=b(n);return t.slice(0,20)}function b(n){return a.searchOption.mode==="val"?n.sort(bt):n.sort(kt)}function dt(t){var i=t||{},r;i.accountId=w();i.month&&(i.fromDate=ut(i.month),i.toDate=ft(i.month),g({month:i.month}));r=d(i);e.byCategory().get(r,function(t){n.debug("ReportsPurchaseHistoryController > byCategory get data",t);v(1);g({uoms:t.UnitsOfMeasure});angular.forEach(t.PurchaseData,function(n){n.CategoryDesc==""&&(n.CategoryDesc="Other")});var i={data:rt(t.PurchaseData),rotate:!0,categoryField:"CategoryDesc",events:{clickGraphItem:function(t){n.debug("ReportsPurchaseHistoryController > clicked on a drill down",t.item.dataContext);var i=t.item.dataContext.CategoryId;n.log("Reports > Drill down to purchases by product for categoryid ",i);wt(2,i,a.searchOption.month)}}};r.mode==="val"&&(k(b(t.PurchaseData),["Product group","Sales","Previous sales"],["CategoryDesc","Sales","PrevSales"],[null,"currency","currency"]),i.graphs=[{valueField:"PrevSales",balloonText:"<strong>Previous period<\/strong><br>$[[PrevSales]]",dashLength:5,lineThickness:1,lineAlpha:.5,fillAlphas:.1},{valueField:"Sales",balloonText:"<strong>Selected period<\/strong><br>$[[Sales]]",lineThickness:1,fillAlphas:.7}]);r.mode==="qty"&&(k(b(t.PurchaseData),["Product group","Quantity","Previous quantity"],["CategoryDesc","Quantity","PrevQuantity"],[null,"qty","qty"]),i.graphs=[{valueField:"PrevQuantity",balloonText:"<strong>Previous period<\/strong><br>[[PrevQuantity]] [[PrevUOM]]",dashLength:5,lineThickness:1,lineAlpha:.5,fillAlphas:.1},{valueField:"Quantity",balloonText:"<strong>Selected period<\/strong><br>[[Quantity]] [[UOM]]",lineThickness:1,fillAlphas:.7}],i.valueAxes=[{unit:a.searchOption.selectedUom?" "+a.searchOption.selectedUom:" ",unitPosition:"right"}]);nt(i)},function(n){tt(n.data)})}function ht(n,t){return n.length>t?n.substr(0,t)+" ... ":n}function gt(t){var i=t||{},r;i.accountId=w();i.month&&(i.fromDate=ut(i.month),i.toDate=ft(i.month),g({month:i.month,category:i.category}));r=d(i);e.byProduct().get(r,function(t){v(2);g({uoms:t.UnitsOfMeasure});r.mode==="val"&&(k(b(t.PurchaseData),["Product","Sales","Previous sales"],["ProductDesc","Sales","PrevSales"],[null,"currency","currency"]),nt({data:rt(t.PurchaseData),rotate:!0,categoryField:"ProductDesc",categoryAxis:{parseDates:!1,labelFunction:function(n){return ht(n,40)}},graphs:[{valueField:"PrevSales",balloonText:"<strong>Previous period<\/strong><br> $[[PrevSales]]",dashLength:5,lineThickness:1,lineAlpha:.5,fillAlphas:.1,showHandOnHover:!1},{valueField:"Sales",balloonText:"<strong>Selected period<\/strong><br>$[[Sales]]",lineThickness:1,fillAlphas:.7,showHandOnHover:!1}]}));r.mode==="qty"&&(n.debug("quantity selected",r),k(b(t.PurchaseData),["Product","Quantity","Previous quantity"],["ProductDesc","Quantity","PrevQuantity"],[null,"qty","qty"]),nt({data:rt(t.PurchaseData),rotate:!0,categoryField:"ProductDesc",categoryAxis:{parseDates:!1,labelFunction:function(n){return ht(n,40)}},graphs:[{valueField:"PrevQuantity",balloonText:"<strong>Previous period<\/strong><br>[[PrevQuantity]] [[Uom]]",dashLength:5,lineThickness:1,lineAlpha:.5,fillAlphas:.1,showHandOnHover:!1},{valueField:"Quantity",balloonText:"<strong>Selected period<\/strong><br>[[Quantity]] [[Uom]]",lineThickness:1,fillAlphas:.7,showHandOnHover:!1}],valueAxes:[{unit:a.searchOption.selectedUom?" "+a.searchOption.selectedUom:" ",unitPosition:"right"}]}))},function(n){tt(n.data)})}function nt(t){var i=angular.merge({},lt,t);return a.amChartOptions=i,u.$broadcast("amCharts.renderChart",i),n.log("Reports > Render chart with",i),a.amChartOptions}function k(n,t,i,r){a.tableData={};a.tableData.headers=[];a.tableData.rows=[];a.tableData.totals=[];angular.forEach(t,function(n,t){a.tableData.headers.push({name:n,"class":r&&r[t]==="currency"?"text-right":""})});angular.forEach(n,function(n){var t=[];angular.forEach(i,function(i,u){var o=r&&r[u]?r[u]:"",e=o==="currency",s=e?f(o)(n[i]):n[i],h=o==="qty"&&a.searchOption.selectedUom?" "+a.searchOption.selectedUom:"";t.push({data:s+h,"class":e?"text-right":""});a.tableData.totals[u]===void 0?a.tableData.totals.push({runningTotal:e?n[i]:"",isCurrency:e,"class":e?"text-right":""}):a.tableData.totals[u].isCurrency&&(a.tableData.totals[u].runningTotal+=n[i])});a.tableData.rows.push(t)});angular.forEach(a.tableData.totals,function(n){n.isCurrency&&(n.data=f("currency")(n.runningTotal))})}function ni(n){function b(){var n=o.getStateFilters(i.filters),t="FromDate=",r="&ToDate=",u,f;return n.month?(t+=encodeURIComponent(ut(n.month).toDateString()),r+=encodeURIComponent(ft(n.month).toDateString())):(u=new Date(n.fromDate||a.searchOption.dateRange.startDate),f=new Date(n.toDate||a.searchOption.dateRange.endDate),t+=encodeURIComponent(u.toDateString()),r+=encodeURIComponent(f.toDateString())),t+r}if(ti()){var t=o.getStateFilters(i.filters),r=a.level.idx,u=window.location.protocol+"//"+window.location.host,f=b(),e=t.uomFilter?"&uomFilter="+t.uomFilter:"",s=t.category?"&category="+t.category:"",h="/api/reporting/account/"+["month","category","product"][r]+"/export?",l="&access_token="+c.token(),v="&AccountId="+w(),y="&fileType="+n.toLowerCase(),p=u+h+f+l+s+e+v+y;window.open(p)}}function ti(){var n=a.searchOption.dateRange.startDate,t=a.searchOption.dateRange.endDate,i=new Date(n.getFullYear()+1,n.getMonth(),n.getDate());return t>i?(tt("The export needs to be limited to no more than 1 year."),!1):!0}function tt(n){s.add({type:"error",message:n,expire:!0})}function ut(n){return new Date(moment(n,"MMM YYYY").date(1).format("YYYY-MM-DD"))}function ft(n){return new Date(moment(n,"MMM YYYY").endOf("M").format("YYYY-MM-DD"))}u.initialised=!1;var a=this,ct=i.report,y=o.getStateFilters(i.filters),lt={type:"serial",theme:"connect",dataDateFormat:"YYYY-MM-DD",valueAxes:[{unit:"$",unitPosition:"left"}],chartCursor:{bulletsEnabled:!0,categoryBalloonDateFormat:"MMM",categoryBalloonEnabled:!0,cursorColor:"#373E45"},graphs:[{type:"column",title:"Previous period",lineAlpha:.2,lineThickness:2,dashLength:5,fillAlphas:.05},{type:"column",title:"Selected period",lineThickness:2,bulletColor:"#008000",showHandOnHover:!0}],"export":{}},et={startDate:moment().subtract(11,"M").date(1).format("YYYY-MM-DD"),endDate:moment().endOf("M").format("YYYY-MM-DD")};a.searchOption={dateRange:{allowedFirstDate:new Date(moment("2011-12-12").format("YYYY-MM-DD")),startDate:new Date(y.fromDate||et.startDate),endDate:new Date(y.toDate||et.endDate)},month:y.month||null,mode:y.mode||"val",uoms:["M2","KG","M","EA","SHT","BAG"],selectedUom:y.uomFilter||"",category:y.category||null};a.levels={month:{idx:0,dateType:"month",name:"Purchases by month",render:pt},category:{idx:1,name:"Purchases by category",render:dt},product:{idx:2,name:"Purchases by product",render:gt}};a.level=a.levels[ct||a.levels.month];a.levelOrder=["month","category","product"];a.tableData=null;a.amChartOptions=null;a.updateFiltersAndRender=p;a.reportDrillDown=st;a.backOut=at;a.toggleMode=vt;a.exportFiles=ni;a.switchReport=yt;it();u.$on("accounts.retrieved",function(){u.initialised||it()});u.$on("accounts.changed",function(){u.initialised&&l.isReady()&&it()})}angular.module("app.reports").controller("ReportsPurchaseHistoryController",n);n.$inject=["$log","$state","$stateParams","$location","$scope","$filter","purchaseHistory","utilService","notificationService","exportService","authService","accountsService"]}(),function(){"use strict";function n(n){function t(){return n("api/reporting/account/month",null,{get:{isArray:!0}})}function i(){return n("api/reporting/account/category",null,{get:{isArray:!1}})}function r(){return n("api/reporting/account/product",null,{get:{isArray:!1}})}function u(){return{then:function(n){n([{productId:"10049",productDesc:"GYPROCK RE 13MM 1200X2700",sales:1685.31,prevSales:227.35,quantity:123,prevQuantity:18,uom:"SHT"},{productId:"126465",productDesc:"OWA ALTO SQ 15MM 1200X600",sales:810.95,prevSales:0,quantity:152,prevQuantity:0,uom:"EA"},{productId:"10050",productDesc:"GYPROCK RE 13MM 1200X3000",sales:594.07,prevSales:156.09,quantity:39,prevQuantity:11,uom:"SHT"},{productId:"10078",productDesc:"SOUNDCHEK RE 13MM 1200X3000",sales:571.54,prevSales:0,quantity:14,prevQuantity:0,uom:"SHT"},{productId:"10093",productDesc:"BASE COAT 45 20KG",sales:351.82,prevSales:678.36,quantity:11,prevQuantity:23,uom:"BAG"},{productId:"10122",productDesc:"JOINTMASTER TOPPING COAT 20KG",sales:320.69,prevSales:318.48,quantity:12,prevQuantity:13,uom:"BKT"},{productId:"79978",productDesc:"ACCESS PANEL B/LOCK MTL 600MM S/BEAD WBT",sales:271.9,prevSales:0,quantity:5,prevQuantity:0,uom:"EA"},{productId:"10051",productDesc:"GYPROCK RE 13MM 1200X3600",sales:197.08,prevSales:1282.29,quantity:11,prevQuantity:75,uom:"SHT"},{productId:"10448",productDesc:"MAIN RUNNER METRIC 3600 DUO1",sales:153.92,prevSales:57.5,quantity:26,prevQuantity:10,uom:"EA"},{productId:"10100",productDesc:"CORNICE CEMENT 45 20KG",sales:144.2,prevSales:53.94,quantity:5,prevQuantity:2,uom:"BAG"},{productId:"10449",productDesc:"CROSS RUNNER METRIC 1200 DUO2",sales:143.52,prevSales:121.04,quantity:78,prevQuantity:68,uom:"EA"},{productId:"10009",productDesc:"AQUACHEK RE 13MM 1200X3000",sales:109.94,prevSales:0,quantity:3,prevQuantity:0,uom:"SHT"},{id:"000000000000010056",productId:"10056",productDesc:"GYPROCK RE 13MM 1350X3000 NWQ",sales:103.03,prevSales:0,quantity:6,prevQuantity:0,uom:"SHT"},{id:"000000000000010458",productId:"10458",productDesc:"STUD 64MM 0.50BMT  3000 P112",sales:102,prevSales:191.6,quantity:20,prevQuantity:40,uom:"EA"},{id:"000000000000011706",productId:"11706",productDesc:"AQUACHEK RE 13MM 1200X2700 N",sales:98.95,prevSales:93.02,quantity:3,prevQuantity:3,uom:"SHT"}])}}}return{byMonth:t,byCategory:i,byProduct:r,byProductTest:u}}angular.module("app.reports").factory("purchaseHistory",n);n.$inject=["$resource"]}(),function(n){"use strict";function t(n,t,i,r,u){var f=this,e=n.year,o=n.month,s=n.day,h=t("monthName")(o,!0),c={year:e,month:o,day:s,offset:n.page&&n.page>0?n.page-1:0,pageSize:50};f.isLoading=!0;f.hasError=null;i.setPageTitle("Invoices not sent on "+s+"/"+o+"/"+e);f.breadcrumbDetails={history:[{name:"Reports",sref:"app.reports"},{name:"Invoice deliveries",sref:"app.invoiceDelivery"},{name:e,sref:"app.invoiceDeliveryByYear({year: "+e+"})"},{name:h,sref:"app.invoiceDeliveryByMonth({year: "+e+", month: "+o+"})"}],currentPage:s};f.pageTitle="Invoices not sent on "+s+" "+h+", "+e;r.details.get(c).$promise.then(function(n){n.total>n.pageSize?(f.hasPagination=!0,f.paginationInfo={currentPage:n.pageNumber+1,itemsPerPage:c.pageSize,totalItems:n.total},f.getPage=function(){var n=f.paginationInfo.currentPage;u.go("app.invoiceDeliveryByDay",{page:n},{notify:!0})}):f.hasPagination=!1;f.items=n.invoices;f.hasError=!1},function(n){n.status===422?(f.items=null,f.hasError=!1):f.hasError=!0}).then(function(){f.isLoading=!1})}n.module("app.reports").controller("invoiceDeliveryByDayController",t);t.$inject=["$stateParams","$filter","$rootScope","invoiceDeliveries","$state"]}(angular),function(n){"use strict";function t(n,t,i,r){var u=this,f=n.year,o=n.month,e=t("monthName")(o,!0),s={year:f,month:o};u.isLoading=!0;u.hasErrors=null;i.setPageTitle("Invoice deliveries in "+e+", "+f);u.breadcrumbDetails={history:[{name:"Reports",sref:"app.reports"},{name:"Invoice deliveries",sref:"app.invoiceDelivery"},{name:f,sref:"app.invoiceDeliveryByYear({year: "+f+"})"}],currentPage:e};u.pageTitle="Invoice deliveries for "+e+" "+f;r.summaryForMonth.get(s).$promise.then(function(n){u.items=n.summaries;u.hasError=!1},function(n){n.status===422?(u.items=[],u.hasError=!1):u.hasError=!0}).then(function(){u.isLoading=!1})}n.module("app.reports").controller("invoiceDeliveryByMonthController",t);t.$inject=["$stateParams","$filter","$rootScope","invoiceDeliveries"]}(angular),function(n){"use strict";function t(n,t,i){var r=this,u=n.year,f={year:u};r.isLoading=!0;r.hasError=null;t.setPageTitle("Invoice deliveries in "+u);r.breadcrumbDetails={history:[{name:"Reports",sref:"app.reports"},{name:"Invoice deliveries",sref:"app.invoiceDelivery"}],currentPage:u};r.pageTitle="Invoice deliveries for "+u;i.summaryForYear.get(f).$promise.then(function(n){r.items=n.summaries;r.hasError=!1},function(n){n.status===422?(r.items=[],r.hasError=!1):r.hasError=!0}).then(function(){r.isLoading=!1})}n.module("app.reports").controller("invoiceDeliveryByYearController",t);t.$inject=["$stateParams","$rootScope","invoiceDeliveries","$filter"]}(angular),function(n){"use strict";function t(n){var t=this;t.isLoading=!0;t.hasError=null;t.breadcrumbDetails={history:[{name:"Reports",sref:"app.reports"}],currentPage:"Invoice deliveries"};t.pageTitle="All invoice deliveries";n.summary.get().$promise.then(function(n){t.items=n.summaries;t.hasError=!1},function(){t.hasError=!0}).then(function(){t.isLoading=!1})}n.module("app.reports").controller("invoiceDeliveryReportController",t);t.$inject=["invoiceDeliveries","$stateParams"]}(angular),function(n){"use strict";function t(n){var t=n("/api/audit/summaries"),i=n("/api/audit/summaries/:year"),r=n("/api/audit/summaries/:year/:month"),u=n("/api/audit/details/:year/:month/:day");return{summary:t,summaryForYear:i,summaryForMonth:r,details:u}}n.module("app.reports").factory("invoiceDeliveries",t);t.$inject=["$resource"]}(angular),function(){"use strict";function n(n,t,i,r){function e(){f()}function f(){i.get("/api/admin/menu/resources").then(function(n){u.resourceItems=n.data})}var u=this;u.showEdit=!1;u.resourceItems=[];e();u.addNewMenuItem=function(n){var t=r.open({backdrop:"static",keyboard:!1,templateUrl:"modify-resource-modal.html",size:"lg",controller:["$scope","$modalInstance",function(t){t.newItem=!0;t.heading=n;t.item={};t.item.ItemOrder=10;t.heading!=undefined?(t.item.Type=1,t.item.ParentId=n.Id):t.item.Type=0}],resolve:{heading:function(){return n}}});t.result.then(function(n){i.post("/api/admin/menu/resources",n).then(function(){f()},function(){})},function(){})};u.editMenuItem=function(t,u,e){t.preventDefault();var o=r.open({backdrop:"static",keyboard:!1,templateUrl:"modify-resource-modal.html",size:"lg",controller:["$scope","$modalInstance",function(n){n.newItem=!1;n.heading=e;n.item=u;n.heading!=undefined&&(n.item.ParentId=e.Id)}],resolve:{heading:function(){return e},item:function(){return u}}});o.result.then(function(t){n.info("RESULT FROM MODAL -> ",t);i.put("/api/admin/menu/resources/"+t.Id,t).then(function(){f()},function(){})},function(){})};u.deleteMenuItem=function(t,r){t.preventDefault();i.delete("/api/admin/menu/resources/"+r).then(function(t){n.info("Delete Item Response -> ",t);f()})}}angular.module("app.resources").controller("ResourcesController",n);n.$inject=["$log","$scope","$http","$modal"]}(),function(n){"use strict";function t(n){n.configureStates(i())}function i(){return[{state:"app.resources",config:{url:"/resources",pageTitle:"Resources",controller:"ResourcesController",controllerAs:"ctrlResources",templateUrl:"resources.html"}}]}n.module("app.resources").run(t);t.$inject=["routerHelper"]}(angular),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.salesPack",config:{url:"/sales/info",pageTitle:"Sales pack - the new CSR Connect",templateUrl:"authuser/salespack",needsAuth:!0}},{state:"app.salesFaq",config:{url:"/sales/faq",pageTitle:"Sales FAQs - the new CSR Connect",templateUrl:"authuser/salesfaq",needsAuth:!0}},{state:"app.salesWebinars",config:{url:"/sales/webinars",pageTitle:"Training webinar",templateUrl:"authuser/saleswebinars",needsAuth:!0}}]}angular.module("app.sales").run(n);n.$inject=["routerHelper"]}(),function(){function n(){function t(t){$.inArray(t,n)===-1&&n.push(t)}function i(){while(n.length>0)n[0].$resolved||n[0].$cancelRequest(),n.splice(0,1)}var n=[];return{register:t,cancelAllRequests:i}}angular.module("app.services").factory("resourceCancellingService",n);n.$inject=["$log"]}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a){function v(){!n.dataLoaded&&t.isReady()&&(n.email.selectAll="all",n.email.accounts=[],p())}function p(){var i={date:moment(n.search.searchDate).format("YYYY-MM-DD"),accountIds:t.getActive().join(",")};n.summarySpinner=!0;n.summaryDataLoaded=!1;r.getMonthlyStatementSummary(i,function(t){n.email.accounts=[];n.summary=[];angular.forEach(t.Accounts,function(t){t.selected=!0;n.email.accounts.push(t);var i=n.summary.find(function(n){return n.AccountId==t.AccountId});i==undefined&&(n.summary.push({AccountId:t.AccountId,CompanyName:t.CompanyName,SbuCode:t.SbuCode}),w(t.AccountId))});n.email.date=i.date;n.email.periodName=t.PeriodName;n.summaryDataLoaded=!0;n.summarySpinner=!1},function(t){n.summaryDataLoaded=!0;n.summarySpinner=!1;u.add({id:"accounts-selection",type:"warning",message:t.data.Message})})}function w(t){var i={date:moment(n.search.searchDate).format("YYYY-MM-DD"),accountId:t};r.accountBalance(i,function(i){var r=n.summary.find(function(n){return n.AccountId==t});r!=undefined&&(r.Balance=i.Items[0].PreviousBalance)})}n.initialised=!1;n.summaryDataLoaded=!1;n.summarySpinner=!0;n.numAccs=null;n.mixedAccounts=!1;n.search={};n.init=v;n.list={};n.email={date:null,periodName:"",selectAll:"all",accounts:[]};n.summary=[];var y=h.get();s.getSearchDate().searchDate==undefined||y==undefined||y.state.name!=="app.statementsDetail"?(n.search.searchDate=new Date(moment().subtract(1,"M").format("YYYY-MM-DD")),n.search.searchDateTimeZone=jstz.determine().name(),s.setSearchDate(n.search)):n.search=s.getSearchDate();n.makePayment=function(){l.writeCurrentPayment(null);a.store().set("lastUsedPaymentType","app.payments.payStatements");window.location.href="/#/financials/payments/pay-statements"};n.isCurrentMonth=function(t){var i=new Date(moment().format("YYYY-MM-DD"));return t!==null&&t=="GreaterThanOrEqualTo"?!(n.search.searchDate.getMonth()>=i.getMonth()&&n.search.searchDate.getYear()<=i.getYear()):!(n.search.searchDate.getYear()==i.getYear()&&n.search.searchDate.getMonth()>=i.getMonth()||n.search.searchDate.getYear()>i.getYear())};n.downloadSpecificPdf=function(t,r){var u=t.join(","),f=window.location.protocol+"//"+window.location.host+"/api/finance/statements/pdf/sap?accountIds="+u+"&date="+r+"&timezone="+encodeURIComponent(n.search.searchDateTimeZone)+"&access_token="+i.token();n.$emit("achievements.taskComplete",{taskName:"03DownloadStatement",status:2});window.open(f,"_blank")};n.downloadPdf=function(i){var r=$.map(t.getActiveData(),function(n){return n.AccountId}),u=i?moment().subtract(1,"M").format("YYYY-MM-DD"):moment(n.search.searchDate).format("YYYY-MM-DD");return n.downloadSpecificPdf(r,u)};n.downloadIndividualPdfs=function(t){n.$emit("csat.showTray",{feature:"statements",trigger:"viewStatementv2"});var r=window.location.protocol+"//"+window.location.host+"/api/finance/statements/pdf/sap?accountIds="+t+"&date="+moment(n.search.searchDate).format("YYYY-MM-DD")+"&timezone="+encodeURIComponent(n.search.searchDateTimeZone)+"&access_token="+i.token();window.open(r,"_blank")};n.list.search=function(){var i,r;if(u.removeAll(),n.mixedAccounts=!1,i=t.getActiveData(),angular.isObject(i[0])){if(n.initialised=!0,n.numAccs=i.length,r=f.uniqueVals("CompanyCode",i),r.length!==1){u.add({id:"MIXCOMPANY",type:"warning",message:"Cannot display mixture of PGH Bricks, AFS and other CSR accounts together. Please select accounts from only one of one type."});n.mixedAccounts=!0;n.spinner=!1;n.summarySpinner=!1;return}n.summarySpinner=!0;e.track({feature:EnumDescriptions.featureEnum.financials,verb:EnumDescriptions.verbEnum.view,noun:EnumDescriptions.nounEnum.statement,pluralisation:EnumDescriptions.pluralisationEnum.single},{eventDate:moment().format("dddd, MMMM Do, YYYY h:mm:ss A"),from_date:n.getMonth()});p()}};n.getMonth=function(t){return t?moment().subtract(1,"M").format("YYYY-MM"):moment(n.search.searchDate).format("YYYY-MM")};n.$watch("search.searchDate",function(){n.list.search(!0);s.setSearchDate(n.search)});n.OpenInvoice=function(n,r){if(r.stopPropagation(),n!=null&&n!=""){var u=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/export?ids="+n+"&access_token="+i.token()+"&accountId="+t.getActive().join(",")+"&fileType=pdf";window.open(u)}};n.exportSpecificFiles=function(t,r,u,f,e,o,s){var h={},c;h.FromDate=h.ToDate=r;h.SortColumn=u;h.OrderBy=f;h.accountId=e.join(",");o!==""&&(h.SearchKeyword=o);n.$emit("csat.showTray",{feature:"statements",trigger:"viewStatementv2"});c=window.location.protocol+"//"+window.location.host+"/api/finance/statements/export?FromDate="+encodeURIComponent(h.FromDate)+"&ToDate="+encodeURIComponent(h.FromDate)+"&Timezone="+encodeURIComponent(s)+"&SortColumn="+h.SortColumn+"&OrderBy="+h.OrderBy+"&access_token="+i.token()+"&accountId="+h.accountId+"&fileType="+t.toLowerCase();window.open(c,"_blank")};n.exportFiles=function(i){return n.exportSpecificFiles(i,moment(n.search.searchDate).format(),n.list.sortColumn,n.list.orderBy,t.getActive(),n.searchKeyword,n.search.searchDateTimeZone)};n.emailSelectAll=function(){var t=n.email.selectAll==="all"?!0:!1;angular.forEach(n.email.accounts,function(n){n.selected=t})};n.emailSelectedAccounts=function(){var i=[],r,t;for(r in n.email.accounts)t=n.email.accounts[r],t.selected&&i.push(t.AccountId);return i};n.emailDownloadPdf=function(){return n.downloadSpecificPdf(n.emailSelectedAccounts(),n.email.date)};n.emailExport=function(t){return n.exportSpecificFiles(t,n.email.date,"","asc",n.emailSelectedAccounts(),"",jstz.determine().name())};n.$on("accounts.changed",function(){n.summaryDataLoaded=!1;v()});n.$on("accounts.dataReady",v)}angular.module("app.statements").controller("StatementsController",n);n.$inject=["$scope","accountsService","authService","statements","notificationService","utilService","metrics","$timeout","statementsService","$previousState","$state","paymentsService","devicePreferences"]}(),function(){"use strict";function n(n){return n("api/finance/statements/sap",undefined,{getMonthlyStatementSummary:{method:"GET",url:"api/finance/statements/getMonthlyStatementSummary?date=:date&accountIds=:accountIds",isArray:!1},accountBalance:{method:"GET",url:"api/finance/accountbalance/sap?date=:date&accountId=:accountId",cancellable:!0,isArray:!1}})}angular.module("app.statements").factory("statements",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.statements",config:{url:"/financials/statements",pageTitle:"Statements",templateUrl:"financials/statements",access:"Customer/Statement",help:"statements",helpTour:"tourStatements"}},{state:"app.statementsEmail",config:{url:"/financials/statementsEmail",pageTitle:"Statements email",templateUrl:"financials/statements/email",access:"Customer/Statement"}},{state:"app.statementsDetail",config:{url:"/financials/statements-detail/:accountId/:year/:month",pageTitle:"Statements Detail",templateUrl:"financials/statements/detail",access:"Customer/Statement"}},{state:"app.statementsDownload",config:{url:"/financials/statements/download/:url",pageTitle:"Preparing statement download...",templateUrl:"financials/statements/preparingdownload",access:"Customer/Statement",params:{url:{value:null,optional:!1}}}}]}angular.module("app.statements").run(n);n.$inject=["routerHelper"]}(),function(){function n(){function t(t){n=t}function i(){return n}var n={};return{setSearchDate:t,getSearchDate:i}}angular.module("app.statements").factory("statementsService",n)}(),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c){function l(){!n.dataLoaded&&t.isReady()&&(n.spinner=!0);n.account=t.get([o.accountId])[0];console.log("Account -> ",n.account)}n.initialised=!1;n.fromSap=!0;n.searchKeyword="";n.dataLoaded=!1;n.spinner=!0;var a=new Date;n.search={};n.search.searchDate=new Date(o.year,o.month-1,a.getDate());n.search.searchDateTimeZone=jstz.determine().name();h.setSearchDate(n.search);n.numAccs=null;n.account={};n.accountId=o.accountId;n.init=l;n.email={date:null,periodName:"",selectAll:"all",accounts:[]};n.list={};n.list.data={};n.list.items=[];n.list.totalItems=0;n.list.data.pageSizeList=[10,25,50];n.list.data.itemsPerPage=25;n.list.data.currentPage=1;n.list.orderBy="desc";n.goBack=function(){s.go("app.statements")};n.goToPayments=function(){s.go("app.payments.payStatements",{payStatement:!0})};n.isCurrentMonth=function(t){var i=new Date(moment().format("YYYY-MM-DD"));return t!==null&&t=="GreaterThanOrEqualTo"?!(n.search.searchDate.getMonth()>=i.getMonth()&&n.search.searchDate.getYear()<=i.getYear()):!(n.search.searchDate.getYear()==i.getYear()&&n.search.searchDate.getMonth()>=i.getMonth()||n.search.searchDate.getYear()>i.getYear())};n.downloadSpecificPdf=function(t,r){var u=o.accountId,f=window.location.protocol+"//"+window.location.host+"/api/finance/statements/pdf/sap?accountIds="+u+"&date="+r+"&timezone="+encodeURIComponent(n.search.searchDateTimeZone)+"&access_token="+i.token();n.$emit("csat.showTray",{feature:"statements",trigger:"viewStatementv2"});n.$emit("achievements.taskComplete",{taskName:"03DownloadStatement",status:2});window.location.href=f};n.downloadPdf=function(t){var i=o.accountId,r=t?moment().subtract(1,"M").format("YYYY-MM-DD"):moment(n.search.searchDate).format("YYYY-MM-DD");return n.downloadSpecificPdf(i,r)};n.list.search=function(t){u.removeAll();n.initialised=!0;n.numAccs=1;var i={};t&&(n.list.data.currentPage=1);i.Skip=((n.list.data.currentPage||1)-1)*n.list.data.itemsPerPage;i.Top=n.list.data.itemsPerPage;i.FromDate=i.ToDate=moment(n.search.searchDate).format();i.Timezone=n.search.searchDateTimeZone;i.SortColumn=n.list.sortColumn;i.OrderBy=n.list.orderBy;i.accountId=o.accountId;n.spinner=!0;e.track({feature:EnumDescriptions.featureEnum.financials,verb:EnumDescriptions.verbEnum.view,noun:EnumDescriptions.nounEnum.statement,pluralisation:EnumDescriptions.pluralisationEnum.single},{eventDate:moment().format("dddd, MMMM Do, YYYY h:mm:ss A"),from_date:n.getMonth()});r.get(i,function(t){n.list.items=t.Items;n.list.totalItems=t.Count;n.dataLoaded=!0;n.spinner=!1},function(t){n.list.items=[];n.list.totalItems=0;n.dataLoaded=!0;n.spinner=!1;u.add({id:"accounts-selection",type:"warning",message:t.data.Message})})};n.list.setPageSize=function(t){n.list.data.itemsPerPage=t;n.list.search()};n.getMonth=function(t){return t?moment().subtract(1,"M").format("YYYY-MM"):moment(n.search.searchDate).format("YYYY-MM")};n.OpenInvoice=function(t,r){if(r.stopPropagation(),t!=null&&t!=""){var u=window.location.protocol+"//"+window.location.host+"/api/finance/invoices/export?ids="+t+"&access_token="+i.token()+"&accountId="+o.accountId+"&fileType=pdf";n.$emit("csat.showTray",{feature:"statements",trigger:"viewStatementv2"});window.open(u)}};n.exportSpecificFiles=function(t,r,u,f,e,o,s){var h={},c;h.FromDate=h.ToDate=r;h.SortColumn=u;h.OrderBy=f;h.accountId=e.join(",");o!==""&&(h.SearchKeyword=o);n.$emit("csat.showTray",{feature:"statements",trigger:"viewStatementv2"});c=window.location.protocol+"//"+window.location.host+"/api/finance/statements/export?FromDate="+encodeURIComponent(h.FromDate)+"&ToDate="+encodeURIComponent(h.FromDate)+"&Timezone="+encodeURIComponent(s)+"&SortColumn="+h.SortColumn+"&OrderBy="+h.OrderBy+"&access_token="+i.token()+"&accountId="+h.accountId+"&fileType="+t.toLowerCase();window.location.href=c};n.exportFiles=function(i){return n.exportSpecificFiles(i,moment(n.search.searchDate).format(),n.list.sortColumn,n.list.orderBy,t.getActive(),n.searchKeyword,n.search.searchDateTimeZone)};n.$on("accounts.changed",function(){u.removeAll();var n=t.getActive(),i=n.indexOf(o.accountId);i<0&&c(function(){u.add({id:"ACCOUNTSCHANGED",type:"info",message:'<a href="#/financials/statements">Your selected accounts have been changed, click here to view your updated Statement Summary.<\/a>'})},1e3)});n.$on("accounts.dataReady",l);t.isReady()==!0&&(n.account=t.get([o.accountId])[0],console.log("Account -> ",n.account))}angular.module("app.statements").controller("StatementsDetailController",n);n.$inject=["$scope","accountsService","authService","statements","notificationService","utilService","metrics","$stateParams","$state","statementsService","$timeout"]}();angular.module("templates").run(["$templateCache",function(n){n.put("account-view.html",'<div account-view="accountView.accountId" class="container">\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="accountView.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div ui-view><\/div>\r\n<\/div>\r\n');n.put("create-account-contact.html",'<div class="row">\r\n    <div class="col-xs-12">\r\n        <h1>New contact<\/h1>\r\n\r\n        <form name="createAccountContact.form" ng-hide="createAccountContact.isUpdating" novalidate>\r\n\r\n            <div class="alert alert-danger" role="alert" ng-if="createAccountContact.errorUpdatingDetails === true">\r\n                <i class="fa fa-exclamation-circle"><\/i> We were unable to create a new contact, please try again or contact Connect support.\r\n            <\/div>\r\n\r\n            <am-account-selector available-accounts="createAccountContact.accounts" selected-accounts="createAccountContact.contactDetails.Accounts"><\/am-account-selector>\r\n\r\n            <am-contact-details contact-details="createAccountContact.contactDetails.Contact"><\/am-contact-details>\r\n\r\n            <div>\r\n                <button type="button" class="btn btn-primary" ng-click="createAccountContact.createContact()">Add new contact<\/button>\r\n                <a class="btn btn-link" ui-sref="^.contacts">Cancel<\/a>\r\n            <\/div>\r\n\r\n        <\/form>\r\n\r\n        <page-loading-message ng-if="createAccountContact.isUpdating === true" message="Adding new contact"><\/page-loading-message>\r\n        <page-error-message ng-if="createAccountContact.isUpdating === false && newContactForm.hasError === true"><\/page-error-message>\r\n\r\n    <\/div>\r\n<\/div>\r\n');n.put("duplicate-contact-modal.html",'<div class="am-modal" role="dialog">\r\n    <h1>Are you looking for this contact?<\/h1>\r\n    <div class="contact-card">\r\n        <contact-avatar contact-details="showDuplicateContactError.contactDetails"><\/contact-avatar>\r\n        <div class="contact-details">\r\n            <h2>{{ showDuplicateContactError.contactDetails.FirstName + \' \' + showDuplicateContactError.contactDetails.LastName }}<\/h2>\r\n            <p ng-if="showDuplicateContactError.contactDetails.EmailAddresses[0]">{{ showDuplicateContactError.contactDetails.JobTitle }}<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <p>You are trying to add a new contact that matches an existing one. Either view the existing contact or edit the first and/or last name of your new contact to add them.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <a ui-sref="^.contactDetails({contactId: showDuplicateContactError.contactDetails.Id})" class="btn btn-block btn-default">View existing contact<\/a>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="showDuplicateContactError.closeModal()" class="btn btn-block btn-primary">Continue editing<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("account-contact-details.html",'<div class="row">\r\n    <div class="col-xs-12">\r\n        <account-title details="contactDetails.accountDetails"><\/account-title>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="row">\r\n    <div class="col-xs-12">\r\n        <contact-details-panel org-id="contactDetails.orgId" contact-id="contactDetails.contactId"><\/contact-details-panel>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="row" feature-toggle="459">\r\n    <div class="col-xs-12">\r\n        <contact-comm-prefs org-id="contactDetails.orgId" account-id="contactDetails.accountId" contact-id="contactDetails.contactId"><\/contact-comm-prefs>\r\n    <\/div>\r\n<\/div>');n.put("edit-account-contact-details.html",'<div class="row">\r\n\r\n    <div class="col-xs-12">\r\n        <h1>Edit contact details<\/h1>\r\n\r\n        <form name="editAccountContactDetails.form" ng-if="editAccountContactDetails.contactDetails" ng-hide="editAccountContactDetails.updatingDetails === true">\r\n\r\n            <div class="alert alert-danger" role="alert" ng-if="editAccountContactDetails.errorUpdatingDetails === true">\r\n                <i class="fa fa-exclamation-circle"><\/i> We were unable to save your changes, please try again or contact Connect support.\r\n            <\/div>\r\n\r\n            <div class="alert alert-warning" role="alert" ng-if="editAccountContactDetails.showOutOfDateMessage === true">\r\n                <i class="fa fa-warning"><\/i> This contact may be out of date, please confirm these details are correct.\r\n            <\/div>\r\n\r\n            <am-contact-details contact-details="editAccountContactDetails.contactDetails"><\/am-contact-details>\r\n\r\n            <div>\r\n                <button type="submit" class="btn btn-primary" ng-click="editAccountContactDetails.saveChanges()">{{ editAccountContactDetails.saveButtonText }}<\/button>\r\n                <a class="btn btn-link" ui-sref="^.contactDetails({contactId: editAccountContactDetails.contactId})">Cancel<\/a>\r\n            <\/div>\r\n\r\n        <\/form>\r\n\r\n        <page-loading-message ng-if="editAccountContactDetails.isLoading === true" message="{{ editAccountContactDetails.loadingMessage }}"><\/page-loading-message>\r\n        <page-error-message ng-if="editAccountContactDetails.isLoading === false && editAccountContactDetails.hasError === true"><\/page-error-message>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("edit-account-contact-duplicate-error-message.html",'<div class="am-modal" role="dialog">\r\n    <h1>Did you mean this contact?<\/h1>\r\n    <div class="contact-card">\r\n        <contact-avatar contact-details="editAccountContactDuplicateError.contactDetails"><\/contact-avatar>\r\n        <div class="contact-details">\r\n            <h2>{{ editAccountContactDuplicateError.contactDetails.FirstName + \' \' + editAccountContactDuplicateError.contactDetails.LastName }}<\/h2>\r\n            <p ng-if="editAccountContactDuplicateError.contactDetails.EmailAddresses[0]">{{ editAccountContactDuplicateError.contactDetails.EmailAddresses[0] }}<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <p>The changes you are making include the first and last name of an existing contact. First and last name combinations need to be unique, to save these changes please edit the first and/or last name.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <a ui-sref="^.contactDetails({contactId: editAccountContactDuplicateError.contactDetails.Id})" class="btn btn-block btn-default">View existing contact<\/a>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="editAccountContactDuplicateError.closeModal()" class="btn btn-block btn-primary">Continue editing<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("account-contacts.html",'<div class="row">\r\n\r\n    <div class="col-xs-12">\r\n        <account-title details="accountContacts.accountDetails"><\/account-title>\r\n    <\/div>\r\n\r\n    <div class="col-xs-12 col-md-4 pull-right">\r\n        <ng-include src="\'account-side-menu.html\'"><\/ng-include>\r\n    <\/div>\r\n\r\n    <div class="col-xs-12 col-md-8">\r\n        <contacts-list organisation="accountContacts.orgId" account="accountContacts.accountId"><\/contacts-list>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("edit-account-details.html",'<account-details-form account-id="editAccountDetails.accountId"><\/account-details-form>\r\n');n.put("account-details.html",'<div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <account-title details="orgAccountDetails.accountDetails"><\/account-title>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 col-md-4 pull-right">\r\n            <ng-include src="\'account-side-menu.html\'"><\/ng-include>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-8">\r\n\r\n            <business-details details="orgAccountDetails.businessDetails"><\/business-details>\r\n            <csr-account-details details="orgAccountDetails.csrAccountDetails"><\/csr-account-details>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("account-change-history-details.html",'<div class="modal-header">\r\n    <button class="close pull-right" ng-click="history.close()"><i class="fa fa-times"><\/i><\/button>\r\n    <h2 class="modal-title">Details of change<\/h2>\r\n<\/div>\r\n<div class="modal-body">\r\n    <change-history-details details="history.details" ng-if="history.isLoading === false && history.details"><\/change-history-details>\r\n    <modal-loading-message ng-if="history.isLoading === true" message="Loading details"><\/modal-loading-message>\r\n    <modal-empty-message ng-if="history.isLoading === false && (history.hasError === true || !history.details)"><\/modal-empty-message>\r\n\r\n<\/div>\r\n');n.put("account-change-history.html",'<div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <account-title details="orgAccountHistory.accountDetails"><\/account-title>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 col-md-4 pull-right">\r\n            <ng-include src="\'account-side-menu.html\'"><\/ng-include>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-8">\r\n            <change-history-table account-id="orgAccountHistory.accountId"><\/change-history-table>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- UI-View for loading the details view -->\r\n    <div ui-view><\/div>\r\n\r\n<\/div>\r\n');n.put("edit-account-notification.html",'<div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <h1>Edit notification<\/h1>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row" ng-if="editNotification.isLoading === false && editNotification.hasError === false">\r\n        <div class="col-xs-12">\r\n\r\n            <div class="alert alert-danger" role="alert" ng-if="editNotification.errorUpdatingDetails === true">\r\n                <i class="fa fa-exclamation-circle"><\/i> We were unable to save these changes, please try again or contact Connect support.\r\n            <\/div>\r\n\r\n            <form name="editNotification.form" novalidate>\r\n                <div class="connect-panel">\r\n                    <div class="connect-panel-header">\r\n                        <h2 class="title">\r\n                            Details\r\n                        <\/h2>\r\n                    <\/div>\r\n                    <div class="connect-panel-content padded">\r\n\r\n                        <div ng-if="editNotification.updatingDetails === true">\r\n                            <div class="loading loading-page fx-fade">\r\n                                <i><\/i> Saving changes&hellip;\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n\r\n                            <edit-notification-form details="editNotification.details" ng-hide="editNotification.updatingDetails === true"><\/edit-notification-form>\r\n\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n                <div ng-if="editNotification.updatingDetails !== true">\r\n                    <button type="submit" class="btn btn-primary" ng-click="editNotification.saveChanges()">Save changes<\/button>\r\n                    <a class="btn btn-link" ui-sref="app.org.account.notifications">Cancel<\/a>\r\n                <\/div>\r\n            <\/form>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="editNotification.isLoading === true" message="Loading notification details"><\/page-loading-message>\r\n    <page-empty-message ng-if="editNotification.hasError === true && editNotification.isLoading === false"><\/page-empty-message>\r\n\r\n<\/div>\r\n');n.put("account-notifications.html",'<div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <account-title details="accountNotifications.accountDetails"><\/account-title>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 col-md-4 pull-right">\r\n            <ng-include src="\'account-side-menu.html\'"><\/ng-include>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-8">\r\n            <notifications-table account-id="accountNotifications.accountId"><\/notifications-table>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("account-side-menu.html",'<side-menu menu-title="Account">\r\n    <side-menu-item ui-sref-active="active">\r\n        <a id="account-details-menu" ui-sref="app.org.account.details"><i class="fa fa-briefcase fa-fw"><\/i>Details<\/a>\r\n    <\/side-menu-item>\r\n    <side-menu-item ui-sref-active="active" auth-key="Customer/Account/Contact" auth="r">\r\n        <a id="account-contacts-menu" ui-sref="app.org.account.contacts"><i class="fa fa-address-card-o fa-fw"><\/i>Contacts<\/a>\r\n    <\/side-menu-item>\r\n    <side-menu-item ui-sref-active="active" auth-key="Customer/Account/Correspondence">\r\n        <a id="account-notifications-menu" ui-sref="app.org.account.notifications"><i class="fa fa-bell fa-fw"><\/i>Notifications<\/a>\r\n    <\/side-menu-item>\r\n    <side-menu-item ui-sref-active="active" auth-key="Customer/Account/ChangeHistory" auth="r">\r\n        <a id="account-history-menu" ui-sref="app.org.account.history"><i class="fa fa-fw fa-clock-o"><\/i>History<\/a>\r\n    <\/side-menu-item>\r\n<\/side-menu>\r\n');n.put("accounts.html",'<div class="container" ng-if="orgAccounts.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="orgAccounts.breadcrumbDetails" ng-if="session.orgCount !== 1"><\/breadcrumb>\r\n            <\/p>\r\n            <div class="row">\r\n                <div class="col-xs-12 col-sm-8">\r\n                    <h1 ng-if="orgAccounts.organisations.length > 0">{{ orgAccounts.orgId | orgName }}<\/h1>\r\n                <\/div>\r\n                <div class="col-xs-12 col-sm-4" auth-key="Customer/Account/Contact" auth="r">\r\n                    <am-org-view-select options="orgAccounts.viewOptions"><\/am-org-view-select>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <div class="connect-panel">\r\n                <div class="connect-panel-header" ng-if="orgAccounts.accountsList">\r\n                    <h2 class="title">\r\n                        Accounts\r\n                    <\/h2>\r\n                <\/div>\r\n\r\n                <div class="table-responsive" ng-if="orgAccounts.accountsList">\r\n\r\n                    <accounts-table accounts-list="orgAccounts.accountsList"><\/accounts-table>\r\n\r\n                <\/div>\r\n\r\n                <page-loading-message ng-if="orgAccounts.isLoading === true" message="Loading accounts"><\/page-loading-message>\r\n                <page-error-message ng-if="orgAccounts.hasError === true && orgAccounts.isLoading === false"><\/page-error-message>\r\n\r\n            <\/div>\r\n\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div class="container" ng-if="orgAccounts.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <div ng-include="\'account-management-customer-view-message.html\'"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("create-org-contact.html",'<div class="container" ng-if="createOrgContact.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="createOrgContact.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>New contact<\/h1>\r\n\r\n            <form name="createOrgContact.form" ng-hide="createOrgContact.isUpdating" ng-if="createOrgContact.isLoading===false && createOrgContact.accounts.length > 0">\r\n\r\n                <div class="alert alert-danger" role="alert" ng-if="createOrgContact.errorUpdatingDetails === true">\r\n                    <i class="fa fa-exclamation-circle"><\/i> We were unable to create a new contact, please try again or contact Connect support.\r\n                <\/div>\r\n\r\n                <am-account-selector available-accounts="createOrgContact.accounts" selected-accounts="createOrgContact.contactDetails.Accounts"><\/am-account-selector>\r\n\r\n                <am-contact-details contact-details="createOrgContact.contactDetails.Contact"><\/am-contact-details>\r\n\r\n                <div>\r\n                    <button type="button" class="btn btn-primary" ng-click="createOrgContact.createContact()">Add new contact<\/button>\r\n                    <a class="btn btn-link" ui-sref="^.list">Cancel<\/a>\r\n                <\/div>\r\n\r\n            <\/form>\r\n\r\n            <page-loading-message ng-if="createOrgContact.isUpdating === true || createOrgContact.isLoading === true" message="{{ createOrgContact.loadingMessage }}"><\/page-loading-message>\r\n            <page-error-message ng-if="createOrgContact.isUpdating === false && createOrgContact.hasError === true"><\/page-error-message>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n<\/div>\r\n\r\n<div class="container" ng-if="createOrgContact.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <ng-include src="\'account-management-customer-view-message.html\'"><\/ng-include>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("duplicate-org-contact-modal.html",'<div class="am-modal" role="dialog">\r\n    <h1>Are you looking for this contact?<\/h1>\r\n    <div class="contact-card">\r\n        <contact-avatar contact-details="showDuplicateOrgContactError.contactDetails"><\/contact-avatar>\r\n        <div class="contact-details">\r\n            <h2>{{ showDuplicateOrgContactError.contactDetails.FirstName + \' \' + showDuplicateOrgContactError.contactDetails.LastName }}<\/h2>\r\n            <p ng-if="showDuplicateOrgContactError.contactDetails.EmailAddresses[0]">{{ showDuplicateOrgContactError.contactDetails.EmailAddresses[0] }}<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <p>You are trying to add a new contact that matches an existing one. Either view the existing contact or edit the first and/or last name of your new contact to add them.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <a ui-sref="^.contactDetails({contactId: showDuplicateOrgContactError.contactDetails.Id})" class="btn btn-block btn-default">View existing contact<\/a>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="showDuplicateOrgContactError.closeModal()" class="btn btn-block btn-primary">Continue editing<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("org-contact-details.html",'<div class="container" ng-if="orgContactDetails.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="orgContactDetails.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>Contact details<\/h1>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <contact-details-panel org-id="orgContactDetails.orgId" contact-id="orgContactDetails.contactId"><\/contact-details-panel>\r\n\r\n            <contact-comm-prefs org-id="orgContactDetails.orgId" contact-id="orgContactDetails.contactId" feature-toggle="459"><\/contact-comm-prefs>\r\n\r\n            <div class="connect-panel">\r\n                <div class="connect-panel-header" ng-if="orgContactDetails.tableLoaded === true">\r\n                    <h2 class="title">\r\n                        Accounts\r\n                    <\/h2>\r\n                <\/div>\r\n                <div class="connect-panel-content">\r\n\r\n                    <contact-accounts-table org-id="orgContactDetails.orgId" contact-id="orgContactDetails.contactId" on-load="orgContactDetails.tableLoaded = true" on-contact-delete-success="orgContactDetails.loadContactsList()"><\/contact-accounts-table>\r\n\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div class="container" ng-if="orgContactDetails.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <ng-include src="\'account-management-customer-view-message.html\'"><\/ng-include>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("edit-org-contact-details.html",'<div class="container" ng-if="editOrgContactDetails.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="editOrgContactDetails.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>Edit contact details<\/h1>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12">\r\n\r\n            <form name="editOrgContactDetails.form" ng-if="editOrgContactDetails.contactDetails" ng-hide="editOrgContactDetails.updatingDetails === true">\r\n\r\n                <div class="alert alert-danger" role="alert" ng-if="editOrgContactDetails.errorUpdatingDetails === true">\r\n                    <i class="fa fa-exclamation-circle"><\/i> We were unable to save your changes, please try again or contact Connect support.\r\n                <\/div>\r\n\r\n                <div class="alert alert-warning" role="alert" ng-if="editOrgContactDetails.showOutOfDateMessage === true">\r\n                    <i class="fa fa-warning"><\/i> This contact may be out of date, please confirm these details are correct.\r\n                <\/div>\r\n\r\n                <am-contact-details contact-details="editOrgContactDetails.contactDetails"><\/am-contact-details>\r\n\r\n                <div>\r\n                    <button type="button" class="btn btn-primary" ng-click="editOrgContactDetails.saveChanges()">{{ editOrgContactDetails.saveButtonText }}<\/button>\r\n                    <a class="btn btn-link" ui-sref="^.contactDetails({contactId: editOrgContactDetails.contactId})">Cancel<\/a>\r\n                <\/div>\r\n\r\n            <\/form>\r\n\r\n            <page-loading-message ng-if="editOrgContactDetails.isLoading === true" message="{{ editOrgContactDetails.loadingMessage }}"><\/page-loading-message>\r\n            <page-error-message ng-if="editOrgContactDetails.isLoading === false && editOrgContactDetails.hasError === true"><\/page-error-message>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div class="container" ng-if="editOrgContactDetails.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <ng-include src="\'account-management-customer-view-message.html\'"><\/ng-include>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("edit-org-contact-duplicate-error-message.html",'<div class="am-modal" role="dialog">\r\n    <h1>Did you mean this contact?<\/h1>\r\n    <div class="contact-card">\r\n        <contact-avatar contact-details="editOrgContactDuplicateError.contactDetails"><\/contact-avatar>\r\n        <div class="contact-details">\r\n            <h2>{{ editOrgContactDuplicateError.contactDetails.FirstName + \' \' + editOrgContactDuplicateError.contactDetails.LastName }}<\/h2>\r\n            <p ng-if="editOrgContactDuplicateError.contactDetails.EmailAddresses[0]">{{ editOrgContactDuplicateError.contactDetails.EmailAddresses[0] }}<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <p>The changes you are making include the first and last name of an existing contact. First and last name combinations need to be unique, to save these changes please edit the first and/or last name.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <a ui-sref="^.contactDetails({contactId: editOrgContactDuplicateError.contactDetails.Id})" class="btn btn-block btn-default">View existing contact<\/a>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="editOrgContactDuplicateError.closeModal()" class="btn btn-block btn-primary">Continue editing<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("org-contact-account-preferences.html",'<div class="container" ng-if="orgContactAccountPreferences.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="orgContactAccountPreferences.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <account-title details="orgContactAccountPreferences.accountDetails"><\/account-title>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <contact-details-panel org-id="orgContactAccountPreferences.orgId" contact-id="orgContactAccountPreferences.contactId" view-only="true"><\/contact-details-panel>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="container" ng-if="orgContactAccountPreferences.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <ng-include src="\'account-management-customer-view-message.html\'"><\/ng-include>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("view-org-contacts.html",'<div class="container" ng-if="orgContacts.isInternalUser === false">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="orgContacts.breadcrumbDetails" ng-if="session.orgCount !== 1"><\/breadcrumb>\r\n            <\/p>\r\n            <div class="row">\r\n                <div class="col-xs-12 col-sm-8">\r\n                    <h1 ng-if="orgContacts.organisations.length > 0">All contacts for: {{ orgContacts.orgId | orgName }}<\/h1>\r\n                <\/div>\r\n                <div class="col-xs-12 col-sm-4">\r\n                    <am-org-view-select options="orgContacts.viewOptions"><\/am-org-view-select>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <contacts-list organisation="orgContacts.orgId" show-invalid-contacts="true" show-out-of-date-contacts="true"><\/contacts-list>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div class="container" ng-if="orgContacts.isInternalUser === true">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <ng-include src="\'account-management-customer-view-message.html\'"><\/ng-include>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("organisations.html",'<div class="container">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <h1 ng-if="userOrganisations.isInternalUser === true || userOrganisations.isInternalUser === false">{{ userOrganisations.isInternalUser === false ? \'Organisations\' : \'Accounts\' }}<\/h1>\r\n            <p ng-if="userOrganisations.isInternalUser === false">Manage accounts and contacts for the following organisations.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row" ng-if="userOrganisations.isInternalUser === true && userOrganisations.accountsList">\r\n        <div class="col-xs-12">\r\n            <div class="connect-panel search-bar">\r\n                <div class="connect-panel-header">\r\n                    <h2 class="title">Search<\/h2>\r\n                <\/div>\r\n                <div class="connect-panel-content">\r\n                    <form name="userOrganisations.searchForm" ng-submit="userOrganisations.search()" role="search">\r\n                        <input type="search" id="searchTerm" name="searchTerm" class="form-control" placeholder="Search by account name or account number..." ng-model="userOrganisations.searchTerm" ng-change="userOrganisations.search()" ng-model-options="{debounce: 1000}">\r\n                    <\/form>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <organisations-list ng-if="userOrganisations.isInternalUser === false"><\/organisations-list>\r\n\r\n            <div class="connect-panel accounts-list" ng-if="userOrganisations.isInternalUser === true">\r\n                <div class="connect-panel-header" ng-if="userOrganisations.accountsList">\r\n                    <h2 class="title">\r\n                        Accounts\r\n                    <\/h2>\r\n                <\/div>\r\n\r\n                <div class="table-responsive" ng-if="userOrganisations.accountsList">\r\n\r\n                    <accounts-table accounts-list="userOrganisations.accountsList"><\/accounts-table>\r\n\r\n                <\/div>\r\n\r\n                <div ng-if="userOrganisations.hasPagination">\r\n                    <pagination total-items="userOrganisations.paginationInfo.totalItems" ng-model="userOrganisations.paginationInfo.currentPage" max-size="5" items-per-page="userOrganisations.paginationInfo.itemsPerPage" boundary-links="true" rotate="false" direction-links="false" ng-change="userOrganisations.changePage()"><\/pagination>\r\n                    <span class="pagination-total">{{ userOrganisations.paginationInfo.totalItems }} accounts<\/span>\r\n                <\/div>\r\n\r\n                <page-loading-message ng-if="userOrganisations.isLoading === true" message="Loading accounts"><\/page-loading-message>\r\n                <page-error-message ng-if="userOrganisations.hasError === true && userOrganisations.isLoading === false"><\/page-error-message>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("account-management-customer-view-message.html",'<div class="content-empty">\r\n    <span class="content-empty-icon fs-icon" data-feature="account"><\/span>\r\n    <h3 class="content-empty-title">This is a customer view<\/h3>\r\n\r\n    <p class="content-empty-instruction">Manage customer accounts through Admin &gt; Manage accounts.<\/p>\r\n\r\n    <a class="btn btn-primary" ui-sref="app.orgs">Manage accounts<\/a>\r\n<\/div>\r\n');n.put("account.singleSelector.html",'<div class="single-account-selector dropdown" ng-if="sac.selected">\r\n    <a class="btn btn-default dropdown-toggle" id="single-account-selector" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">\r\n        <span class="account-bu-logo"><sbu-image sbu-code="sac.selected.SbuCode"><\/sbu-image><\/span>\r\n        <strong>{{sac.selected.Name1 || \'Select an account\'}}<\/strong>\r\n        <small>{{sac.selected.AccountId}}<\/small>  <span class="label label-warning" ng-if="sac.selected.IsExcludePricing">Pricing unavailable<\/span>\r\n        <span class="caret"><\/span>\r\n    <\/a>\r\n    <ul class="dropdown-menu" aria-labelledby="single-account-selector">\r\n        <li ng-repeat="acc in sac.accounts">\r\n            <a href="javascript:;" ng-click="sac.selectAcc(acc)">\r\n                <span class="account-bu-logo"><sbu-image sbu-code="acc.SbuCode"><\/sbu-image><\/span>\r\n                <strong>{{acc.Name1}}<\/strong>\r\n                <small>{{acc.AccountId}}<\/small> <span class="label label-warning" ng-if="acc.IsExcludePricing">Pricing unavailable<\/span>\r\n            <\/a>\r\n        <\/li>\r\n    <\/ul>\r\n<\/div>');n.put("account.textInput.html",'<ng-form name="accountsTextInputForm">\r\n    <div class="accounts-text-input-component">\r\n        <p class="form-control-error" \r\n           ng-if="accountsTextInput.getErrors()">\r\n            <i class="fa fa-exclamation-triangle"><\/i> {{accountsTextInput.getErrors()}}\r\n        <\/p>\r\n        <input ng-list class="form-control input-lg" \r\n                ng-keyup="accountsTextInput.validate()" \r\n                type="text" \r\n                ng-model="accountsTextInput.accounts" \r\n                name="accountsTextInputControl" \r\n                id="{{accountsTextInput.inputId}}" \r\n                placeholder="e.g. 1234, 123456" \r\n                required>\r\n    <\/div>\r\n<\/ng-form>');n.put("account-details-form.html",'<div>\r\n\r\n    <div class="row" ng-hide="amAccountDetails.updatingDetails === true">\r\n        <div class="col-xs-12">\r\n            <account-title details="amAccountDetails.titleDetails"><\/account-title>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <div class="alert alert-danger" role="alert" ng-if="amAccountDetails.errorUpdatingDetails === true">\r\n                <i class="fa fa-exclamation-circle"><\/i> We were unable to save these changes, please try again or contact Connect support.\r\n            <\/div>\r\n\r\n            <form name="amAccountDetails.form" ng-hide="amAccountDetails.updatingDetails === true" ng-if="amAccountDetails.formDetails">\r\n\r\n                    <div class="connect-panel">\r\n                        <div class="connect-panel-header">\r\n                            <h2 class="title">Account<\/h2>\r\n                        <\/div>\r\n                        <div class="connect-panel-content padded">\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6">\r\n                                    <div class="form-group">\r\n                                        <label for="displayName">Nickname<\/label>\r\n                                        <input type="text" class="form-control" ng-model="amAccountDetails.formDetails.DisplayName" id="displayName" name="displayName">\r\n                                        <p class="help-block">Add an account nickname to help identify your accounts<\/p>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="connect-panel">\r\n                        <div class="connect-panel-header">\r\n                            <h2 class="title">Addresses<\/h2>\r\n                        <\/div>\r\n                        <div class="connect-panel-content padded">\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6">\r\n\r\n                                    <div class="form-group">\r\n                                        <label for="addressStreet">Address<\/label>\r\n                                        <input id="addressStreet" name="addressStreet" type="text" class="form-control" placeholder="Street address" ng-model="amAccountDetails.formDetails.Street" />\r\n                                    <\/div>\r\n\r\n                                    <div class="form-group">\r\n                                        <label for="addressCity" class="sr-only">City<\/label>\r\n                                        <input id="addressCity" name="addressCity" type="text" class="form-control" placeholder="City" ng-model="amAccountDetails.formDetails.City" />\r\n                                    <\/div>\r\n\r\n                                    <div class="row">\r\n\r\n                                        <div class="col-xs-12 col-sm-6" data-ng-if="amAccountDetails.formDetails.Country === \'AU\'">\r\n                                            <div class="form-group">\r\n                                                <label for="addressState" class="sr-only">State<\/label>\r\n                                                <select name="addressState" id="addressState" class="form-control" ng-model="amAccountDetails.formDetails.State">\r\n                                                    <option selected="selected" value="NSW">NSW<\/option>\r\n                                                    <option value="ACT">ACT<\/option>\r\n                                                    <option value="NT">NT<\/option>\r\n                                                    <option value="QLD">QLD<\/option>\r\n                                                    <option value="SA">SA<\/option>\r\n                                                    <option value="TAS">TAS<\/option>\r\n                                                    <option value="VIC">VIC<\/option>\r\n                                                    <option value="WA">WA<\/option>\r\n                                                <\/select>\r\n                                            <\/div>\r\n                                        <\/div>\r\n\r\n                                        <div class="col-xs-12" ng-class="{\'col-sm-6\': amAccountDetails.formDetails.Country === \'AU\', \'col-sm-12\': amAccountDetails.formDetails.Country !== \'AU\'}">\r\n                                            <div class="form-group">\r\n                                                <label for="addressPostcode" class="sr-only">Postcode<\/label>\r\n                                                <input id="addressPostcode" name="addressPostcode" type="text" class="form-control" placeholder="Postcode" ng-model="amAccountDetails.formDetails.Postcode" />\r\n                                            <\/div>\r\n                                        <\/div>\r\n\r\n                                    <\/div>\r\n\r\n                                    <div class="form-group">\r\n                                        <label for="addressCountry" class="sr-only">Country<\/label>\r\n                                        <select name="addressCountry" id="addressCountry" class="form-control" ng-model="amAccountDetails.formDetails.Country"\r\n                                                data-ng-change="amAccountDetails.countryChange()">\r\n                                            <option selected="selected" value="AU">Australia<\/option>\r\n                                            <option value="NZ">New Zealand<\/option>\r\n                                        <\/select>\r\n                                    <\/div>\r\n\r\n                                <\/div>\r\n\r\n                                <div class="col-xs-12 col-sm-6">\r\n                                    <div class="form-group">\r\n                                        <label for="poboxNo">PO Box address<\/label>\r\n                                        <input id="poboxNo" name="poboxNo" type="text" class="form-control" placeholder="Number" ng-model="amAccountDetails.formDetails.POBoxNo" />\r\n                                    <\/div>\r\n\r\n                                    <div class="form-group">\r\n                                    <label for="poboxCity" class="sr-only">PO Box city<\/label>\r\n                                    <input id="poboxCity" name="poboxCity" type="text" class="form-control" placeholder="City" ng-model="amAccountDetails.formDetails.POBoxCity"/>\r\n                                <\/div>\r\n\r\n                                    <div class="row">\r\n\r\n                                    <div class="col-xs-12 col-sm-6" data-ng-if="amAccountDetails.formDetails.POBoxCountry === \'AU\'">\r\n                                        <div class="form-group">\r\n                                            <label for="poboxState" class="sr-only">State<\/label>\r\n                                            <select name="poboxState" id="poboxState" class="form-control" ng-model="amAccountDetails.formDetails.POBoxState">\r\n                                                <option selected="selected" value="NSW">NSW<\/option>\r\n                                                <option value="ACT">ACT<\/option>\r\n                                                <option value="NT">NT<\/option>\r\n                                                <option value="QLD">QLD<\/option>\r\n                                                <option value="SA">SA<\/option>\r\n                                                <option value="TAS">TAS<\/option>\r\n                                                <option value="VIC">VIC<\/option>\r\n                                                <option value="WA">WA<\/option>\r\n                                            <\/select>\r\n                                        <\/div>\r\n                                    <\/div>\r\n\r\n                                    <div class="col-xs-12" ng-class="{\'col-sm-6\': amAccountDetails.formDetails.POBoxCountry === \'AU\', \'col-sm-12\': amAccountDetails.formDetails.POBoxCountry !== \'AU\'}">\r\n                                        <div class="form-group">\r\n                                            <label for="poboxPostcode" class="sr-only">Postcode<\/label>\r\n                                            <input id="poboxPostcode" name="poboxPostcode" type="text" class="form-control" placeholder="Postcode" ng-model="amAccountDetails.formDetails.POBoxPostcode"/>\r\n                                        <\/div>\r\n                                    <\/div>\r\n\r\n                                <\/div>\r\n\r\n                                <div class="form-group">\r\n                                    <label for="poboxCountry" class="sr-only">Country<\/label>\r\n                                    <select name="poboxCountry" id="poboxCountry" class="form-control" ng-model="amAccountDetails.formDetails.POBoxCountry"\r\n                                            data-ng-change="amAccountDetails.poBoxCountryChange()">\r\n                                        <option selected="selected" value="AU">Australia<\/option>\r\n                                        <option value="NZ">New Zealand<\/option>\r\n                                    <\/select>\r\n                                <\/div>\r\n\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="connect-panel">\r\n                        <div class="connect-panel-header">\r\n                            <h2 class="title">Business details<\/h2>\r\n                        <\/div>\r\n                        <div class="connect-panel-content padded">\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6">\r\n                                    <div class="form-group">\r\n                                        <label for="businessEmail">Email*<\/label>\r\n                                        <form-element-feedback form-element="amAccountDetails.form.businessEmail" ng-if="amAccountDetails.form.businessEmail"><\/form-element-feedback>\r\n                                        <input type="text" class="form-control" id="businessEmail" name="businessEmail" placeholder="Email address" ng-model="amAccountDetails.formDetails.Email" required valid-email>\r\n                                    <\/div>\r\n                                    <div class="row">\r\n                                        <div class="col-xs-12 col-sm-6">\r\n                                            <div class="form-group">\r\n                                                <label for="businessPhone">Phone<\/label>\r\n                                                <input type="tel" class="form-control" id="businessPhone" name="businessPhone" placeholder="Phone number" ng-model="amAccountDetails.formDetails.Phone">\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                        <div class="col-xs-12 col-sm-6">\r\n                                            <div class="form-group">\r\n                                                <label for="businessFax">Fax<\/label>\r\n                                                <input type="tel" class="form-control" id="businessFax" name="businessFax" placeholder="Fax number" ng-model="amAccountDetails.formDetails.Fax">\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="row">\r\n                        <div class="col-xs-12">\r\n                            <button type="button" class="btn btn-primary" ng-click="amAccountDetails.saveChanges()">Save changes<\/button>\r\n                            <a ui-sref="app.org.account.details" class="btn btn-link">Cancel<\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n            <\/form>\r\n\r\n            <div ng-if="amAccountDetails.updatingDetails === true">\r\n                <div class="loading loading-page fx-fade">\r\n                    <i><\/i> Saving changes&hellip;\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <page-loading-message ng-if="amAccountDetails.isLoading === true" message="Loading business details"><\/page-loading-message>\r\n            <page-empty-message ng-if="amAccountDetails.hasError === true && amAccountDetails.isLoading === false"><\/page-empty-message>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("accounts-table.html",'<table class="table accounts-table">\r\n    <thead>\r\n        <tr>\r\n            <th>Name<\/th>\r\n            <th>Business<\/th>\r\n            <th>Account No<\/th>\r\n            <th class="account-status">Status<\/th>\r\n        <\/tr>\r\n    <\/thead>\r\n    <tbody>\r\n        <tr ng-if="amAccountsTable.accountsList.length === 0">\r\n            <td colspan="4" class="empty">No accounts available&hellip;<\/td>\r\n        <\/tr>\r\n        <tr ng-repeat="account in amAccountsTable.accountsList">\r\n            <td>\r\n                <a ng-if="account.OrgId" ui-sref="app.org.account.details({orgId: account.OrgId, accountId: account.AccountNumber || account.AccountId})">{{ account.AccountName || account.Name1 || "Unavaliable" }}<\/a>\r\n                <a ng-if="!account.OrgId" ui-sref="app.org.account.details({accountId: account.AccountNumber || account.AccountId})">{{ account.AccountName || account.Name1 || "Unavaliable" }}<\/a>\r\n            <\/td>\r\n            <td><sbu-image sbu-code="account.Sbu || account.SbuCode"><\/sbu-image><\/td>\r\n            <td>{{ account.AccountNumber || account.AccountId || "Unavailable" }}<\/td>\r\n            <td class="account-status">\r\n                <account-status-icon status="account.Status === 0 || account.Status === 1 ? account.Status : account.IsActive"><\/account-status-icon>\r\n            <\/td>\r\n        <\/tr>\r\n    <\/tbody>\r\n<\/table>\r\n');n.put("account-status-icon.html",'<span class="fa fa-fw account-status-icon" ng-class="statusStyle" aria-label="{{ statusMessage }}"><\/span>\r\n');n.put("account-title.html",'<div class="account-title">\r\n    <h1 ng-if="accountTitle.details.DisplayName || accountTitle.details.Name1">{{ accountTitle.details.DisplayName || accountTitle.details.Name1}}<\/h1>\r\n    <p class="subheading" ng-if="!accountTitle.details.DisplayName && accountTitle.details.Name2">{{ accountTitle.details.Name2 }}<\/p>\r\n    <p class="subheading" ng-if="accountTitle.details.DisplayName">{{ accountTitle.details.Name1 }}<span ng-if="accountTitle.details.Name2">, {{ accountTitle.details.Name2 }}<\/span><\/p>\r\n    <p class="subheading" ng-if="accountTitle.details.AccountId"><small>Account No: {{ accountTitle.details.AccountId }}<\/small><\/p>\r\n<\/div>\r\n');n.put("business-details.html",'<div class="connect-panel business-details-component">\r\n    <div class="connect-panel-header" ng-if="amBusinessDetails.details">\r\n        <h2 class="title">Business details<\/h2>\r\n        <div class="connect-panel-actions">\r\n            <a id="edit-account-details" ui-sref="app.org.account.editDetails" auth-key="Customer/Account" auth="u"><i class="fa fa-pencil"><\/i>Edit<\/a>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="connect-panel-content padded">\r\n        <div class="row" ng-if="amBusinessDetails.details">\r\n            <div class="col-xs-12 col-sm-6">\r\n                <dl class="panel-detail detail-icon detail-icon-address">\r\n                    <dt>Address<\/dt>\r\n                    <dd content-unavailable-when="amBusinessDetails.hasAddress === false">\r\n                        <span ng-if="amBusinessDetails.details.address.houseNo || amBusinessDetails.details.address.street">{{ amBusinessDetails.details.address.houseNo }} {{ amBusinessDetails.details.address.street }}<br/><\/span>\r\n                        <span ng-if="amBusinessDetails.details.address.city">{{ amBusinessDetails.details.address.city }}<br/><\/span>\r\n                        <span ng-if="amBusinessDetails.details.address.state || amBusinessDetails.details.address.postcode">{{ amBusinessDetails.details.address.state }} {{ amBusinessDetails.details.address.postcode }}<br/><\/span>\r\n                        {{ amBusinessDetails.details.address.country }}\r\n                    <\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-6">\r\n                <dl class="panel-detail detail-icon detail-icon-address">\r\n                    <dt>PO Box address<\/dt>\r\n                    <dd content-unavailable-when="amBusinessDetails.hasPoBoxAddress == false">\r\n                        <span ng-if="amBusinessDetails.details.poBox.no">{{ amBusinessDetails.details.poBox.no }}<br/><\/span>\r\n                        <span ng-if="amBusinessDetails.details.poBox.city">{{ amBusinessDetails.details.poBox.city }}<br/><\/span>\r\n                        <span ng-if="amBusinessDetails.details.poBox.state || amBusinessDetails.details.poBox.postcode">{{ amBusinessDetails.details.poBox.state }} {{ amBusinessDetails.details.poBox.postcode }}<br/><\/span>\r\n                        {{ amBusinessDetails.details.poBox.country }}\r\n                    <\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row" ng-if="amBusinessDetails.details">\r\n            <div class="col-xs-12">\r\n                <dl class="panel-detail detail-icon detail-icon-email">\r\n                    <dt>Email<\/dt>\r\n                    <dd content-unavailable-when="!amBusinessDetails.details.emailAddress">\r\n                        <a ng-href="mailto:{{ amBusinessDetails.details.emailAddress }}">{{ amBusinessDetails.details.emailAddress }}<\/a>\r\n                    <\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row" ng-if="amBusinessDetails.details">\r\n            <div class="col-xs-12 col-sm-6">\r\n                <dl class="panel-detail detail-icon detail-icon-phone">\r\n                    <dt>Phone<\/dt>\r\n                    <dd content-unavailable-when="!amBusinessDetails.details.phone">{{ amBusinessDetails.details.phone }}<\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-6">\r\n                <dl class="panel-detail detail-icon detail-icon-fax">\r\n                    <dt>Fax<\/dt>\r\n                    <dd content-unavailable-when="!amBusinessDetails.details.fax">{{ amBusinessDetails.details.fax }}<\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="amBusinessDetails.isLoading === true" message="Loading business details"><\/page-loading-message>\r\n    <page-empty-message ng-if="amBusinessDetails.hasError === true && amBusinessDetails.isLoading === false"><\/page-empty-message>\r\n\r\n<\/div>\r\n');n.put("change-history-details.html",'<div>\r\n    <div class="row">\r\n        <div class="col-xs-12 col-md-4">\r\n            <dl>\r\n                <dt>Type:<\/dt>\r\n                <dd content-unavailable-when="!details.Description">{{ details.Description }}<\/dd>\r\n            <\/dl>\r\n        <\/div>\r\n        <div class="col-xs-6 col-md-4">\r\n            <dl>\r\n                <dt>Submitted by:<\/dt>\r\n                <dd content-unavailable-when="!details.UserDescription">{{ details.UserDescription }}<\/dd>\r\n            <\/dl>\r\n        <\/div>\r\n        <div class="col-xs-6 col-md-4">\r\n            <dl>\r\n                <dt>Submitted on:<\/dt>\r\n                <dd content-unavailable-when="!details.UserDescription">{{ details.Date | date: \'d MMM yyyy h:mma\'}}<\/dd>\r\n            <\/dl>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <p><strong>Details<\/strong><\/p>\r\n            <p content-unavailable-when="!details.CustomerChangeItems"><\/p>\r\n            <ul ng-if="details.CustomerChangeItems">\r\n                <li ng-repeat="item in details.CustomerChangeItems">\r\n                    {{ item.Field }} from <strong>{{ item.OldValue }}<\/strong> to <strong>{{ item.NewValue }}<\/strong>\r\n                <\/li>\r\n            <\/ul>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("change-history-table.html",'<div class="connect-panel change-history-table-component">\r\n    <div class="connect-panel-header" ng-if="amChangeHistory.list">\r\n        <h2 class="title">\r\n            Change history\r\n        <\/h2>\r\n    <\/div>\r\n\r\n    <div class="table-responsive" ng-if="amChangeHistory.list">\r\n        <table class="table">\r\n            <thead>\r\n                <tr>\r\n                    <th>Description<\/th>\r\n                    <th>Submitted on<\/th>\r\n                    <th>Submitted by<\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr ng-if="amChangeHistory.list.length === 0">\r\n                    <td colspan="3" class="empty">There is no change history for this account&hellip;<\/td>\r\n                <\/tr>\r\n                <tr ng-repeat="detail in amChangeHistory.list">\r\n                    <td content-unavailable-when="!detail.Description">\r\n                        <a ui-sref=".details({changeId: detail.Id})">{{ detail.Description }}<\/a>\r\n                    <\/td>\r\n                    <td content-unavailable-when="!detail.Date">\r\n                        {{ detail.Date | date: \'d MMM yyyy h:mma \'}}\r\n                    <\/td>\r\n                    <td content-unavailable-when="!detail.UserDescription">\r\n                        {{ detail.UserDescription }}\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="amChangeHistory.isLoading === true" message="Loading history"><\/page-loading-message>\r\n    <page-empty-message ng-if="amChangeHistory.hasError === true && amChangeHistory.isLoading === false"><\/page-empty-message>\r\n\r\n<\/div>\r\n');n.put("contact-avatar.html",'<span class="contact-avatar">\r\n\r\n    <span ng-if="!contactAvatarDirective.contactDetails.ProfileImageUrl"\r\n          class="avatar-icon"\r\n          ng-class="contactAvatarDirective.contactTypeClass"><\/span>\r\n\r\n    <img ng-if="contactAvatarDirective.contactDetails.ProfileImageUrl"\r\n         class="avatar-image"\r\n         ng-src="{{ contactAvatarDirective.contactDetails.ProfileImageUrl }}">\r\n\r\n    <span class="connect-link-icon"\r\n          ng-if="contactAvatarDirective.contactDetails.ConnectUsername && contactAvatarDirective.contactDetails.HasPendingUserInvite === false && contactAvatarDirective.contactDetails.IsValid === true && contactAvatarDirective.contactDetails.IsOutOfDate === false || contactAvatarDirective.contactDetails.ConnectUsername && contactAvatarDirective.contactDetails.HasPendingUserInvite === false && contactAvatarDirective.showAlertStatus === false"\r\n          tooltip="Connect username: {{ contactAvatarDirective.contactDetails.ConnectUsername }}"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n    <span ng-if="contactAvatarDirective.contactDetails.HasPendingUserInvite === true && contactAvatarDirective.contactDetails.IsValid === true && contactAvatarDirective.contactDetails.IsOutOfDate === false || contactAvatarDirective.contactDetails.hasBeenInvited === true || contactAvatarDirective.contactDetails.HasPendingUserInvite === true && contactAvatarDirective.showAlertStatus === false"\r\n          class="connect-invite-icon fa fa-paper-plane-o"\r\n          tooltip="Invited{{ contactAvatarDirective.contactDetails.UserCreatedOn | date : \' on MMM d, y\' }}"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n    <span ng-if="contactAvatarDirective.showAlertStatus === true && contactAvatarDirective.contactDetails.IsValid === true && contactAvatarDirective.contactDetails.IsOutOfDate === true && contactAvatarDirective.contactDetails.IsUnknownByUser === false"\r\n          class="connect-invalid-contact-icon fa fa-fw fa- fa-exclamation-triangle"\r\n          tooltip="Out of date details"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n    <span ng-if="contactAvatarDirective.showAlertStatus === true && contactAvatarDirective.contactDetails.IsValid === true && contactAvatarDirective.contactDetails.IsOutOfDate === true && contactAvatarDirective.contactDetails.IsUnknownByUser === true"\r\n          class="connect-unknown-contact-icon fa fa-fw fa- fa-question-circle"\r\n          tooltip="Unknown person - Out of date details"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n    <span ng-if="contactAvatarDirective.showAlertStatus === true && contactAvatarDirective.contactDetails.IsValid === false && contactAvatarDirective.contactDetails.IsUnknownByUser === false"\r\n          class="connect-invalid-contact-icon fa fa-fw fa- fa-exclamation-triangle"\r\n          tooltip="Missing details"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n    <span ng-if="contactAvatarDirective.showAlertStatus === true && contactAvatarDirective.contactDetails.IsValid === false && contactAvatarDirective.contactDetails.IsUnknownByUser === true"\r\n          class="connect-unknown-contact-icon fa fa-fw fa- fa-question-circle"\r\n          tooltip="Unknown person - Missing details"\r\n          tooltip-trigger="mouseenter"\r\n          tooltip-placement="right"\r\n          tooltip-popup-delay="300"><\/span>\r\n\r\n<\/span>\r\n');n.put("contact-comm-prefs.html",'<div class="connect-panel contact-communication-preferences">\r\n\r\n    <div class="connect-panel-header" ng-if="commPrefsCtrl.isLoading === false && commPrefsCtrl.hasError === false">\r\n        <h2 class="title">Communication preferences<\/h2>\r\n        <div class="connect-panel-actions">\r\n            <button type="button" class="btn btn-primary" ng-if="commPrefsCtrl.singleAccountView === true"\r\n                    ng-disabled="commPrefsCtrl.modelIsPristine() || commPrefsCtrl.updatingPreferences === true"\r\n                    ng-click="commPrefsCtrl.updateSingleViewPreferences()">\r\n                Update <span class="hidden-xs">preferences<\/span>\r\n            <\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="connect-panel-content" ng-if="commPrefsCtrl.isLoading === false">\r\n        <div class="row" ng-if="commPrefsCtrl.areas.length > 0">\r\n\r\n            <div class="col-xs-12 m-b-2" ng-repeat="area in commPrefsCtrl.areas" ng-if="commPrefsCtrl.singleAccountView === true">\r\n                <div class="contacts-bordered-panel p-1">\r\n                    <div class="row">\r\n                        <div class="col-xs-8">\r\n\r\n                            <h2 class="m-b-1">\r\n                                <span class="p-r-1">\r\n                                    <i ng-if="area.Code === \'Z6\'" class="fa fa-shopping-cart"><\/i>\r\n                                    <i ng-if="area.Code === \'Z7\'" class="fa fa-truck fa-flip-horizontal"><\/i>\r\n                                    <i ng-if="area.Code !== \'Z6\' && area.Code !== \'Z7\'" class="fa fa-check"><\/i>\r\n                                <\/span>\r\n                                {{area.Description}}\r\n                            <\/h2>\r\n                        <\/div>\r\n                        <div class="col-xs-4 text-right">\r\n\r\n                            <button type="button" class="btn btn-success"\r\n                                    ng-if="!area.Enabled"\r\n                                    ng-click="area.Enabled = !area.Enabled">\r\n                                Enable\r\n                            <\/button>\r\n                            <button type="button" class="btn btn-blank"\r\n                                    ng-if="area.Enabled"\r\n                                    ng-click="area.Enabled = !area.Enabled">\r\n                                Disable\r\n                            <\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row sbu-notification-container" ng-if="area.Enabled" ng-repeat="notification in area.Notifications">\r\n                        <hr class="contacts-panel-splitter" />\r\n                        <div class="col-md-8 col-sm-6 col-xs-12">\r\n                            <dl class="list-group m-b-0 hidden-xs">\r\n                                <dt>Type<\/dt>\r\n                                <dd class="m-t-5">\r\n                                    {{notification.Description}}\r\n                                <\/dd>\r\n                            <\/dl>\r\n                            <h5 class="p-0 m-0 visible-xs">{{notification.Description}}<\/h5>\r\n                            <div class="sbus m-b-1 m-t-5">\r\n                                <span class="badge m-r-1" ng-repeat="sbu in sbuNotification.sbus">{{commPrefsCtrl.getSbuName(sbu)}}<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class="col-md-2 col-sm-4 col-xs-8">\r\n                            <dl class="list-group">\r\n                                <dt>When to receive<\/dt>\r\n                                <dd>\r\n                                    <div class="row">\r\n                                        <div class="col-xs-10 p-r-1">\r\n                                            <select class="form-control inline-block" ng-init="notification._scope = {Id: area.Enabled ? notification.NotificationScope : -1}"\r\n                                                    ng-model="notification._scope"\r\n                                                    ng-change="commPrefsCtrl.onNotificationScopeChanged(notification, notification._scope.Id)"\r\n                                                    ng-options="item.Text for item in commPrefsCtrl.notificationScopes track by item.Id"\r\n                                                    ng-disabled="area.Enabled === false">\r\n                                            <\/select>\r\n                                        <\/div>\r\n                                        <div class="col-xs-2 p-l-0">\r\n                                            <div ng-if="commPrefsCtrl.isNotificationInvalid(notification)"\r\n                                                 data-tooltip="A channel must be specified for this notification">\r\n                                                <i class="fa fa-warning m-t-5"><\/i>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/dd>\r\n                            <\/dl>\r\n                        <\/div>\r\n                        <div class="col-md-1 col-sm-1 col-xs-2">\r\n                            <dl class="list-group">\r\n                                <dt>Email<\/dt>\r\n                                <dd>\r\n                                    <input class="checkbox-2x m-1 opaque-disabled" type="checkbox" ng-model="notification.HasEmailEnabled" ng-disabled="commPrefsCtrl.hasEmailChannelDisabled(area, notification)" />\r\n                                <\/dd>\r\n                            <\/dl>\r\n                        <\/div>\r\n                        <div class="col-md-1 col-sm-1 col-xs-2">\r\n                            <dl class="list-group">\r\n                                <dt>SMS<\/dt>\r\n                                <dd>\r\n                                    <input class="checkbox-2x m-1 opaque-disabled" type="checkbox" ng-model="notification.HasSmsEnabled" ng-disabled="commPrefsCtrl.hasSmsChannelDisabled(area, notification)" />\r\n                                <\/dd>\r\n                            <\/dl>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class="col-xs-12 m-b-2" ng-repeat="group in commPrefsCtrl.groupedAreas" ng-if="commPrefsCtrl.singleAccountView === false">\r\n                <div class="contacts-bordered-panel p-1">\r\n                    <div class="row">\r\n                        <div class="col-xs-8">\r\n\r\n                            <h2 class="m-b-1">\r\n                                <span class="p-r-1">\r\n                                    <i ng-if="group.header.code === \'Z6\'" class="fa fa-shopping-cart"><\/i>\r\n                                    <i ng-if="group.header.code === \'Z7\'" class="fa fa-truck fa-flip-horizontal"><\/i>\r\n                                    <i ng-if="group.header.code !== \'Z6\' && group.header.code !== \'Z7\'" class="fa fa-check"><\/i>\r\n                                <\/span>\r\n                                {{group.header.description}}\r\n                            <\/h2>\r\n                        <\/div>\r\n                        <div class="col-xs-4 text-right">\r\n\r\n                            <button type="button" class="btn btn-success"\r\n                                    ng-if="group.header.enabled!==true"\r\n                                    ng-disabled="commPrefsCtrl.updatingArea"\r\n                                    ng-click="commPrefsCtrl.enableArea(group)">\r\n                                Enable All\r\n                            <\/button>\r\n                            <button type="button" class="btn btn-primary"\r\n                                    ng-if="group.header.enabled===true"\r\n                                    ng-disabled="commPrefsCtrl.updatingArea"\r\n                                    ng-click="commPrefsCtrl.disableArea(group)">\r\n                                Disable All\r\n                            <\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row text-right" ng-if="group.header.enabled===null">\r\n                        <div class="col-xs-12">\r\n                            <div class="alert alert-info pull-right p-1 m-b-0 m-t-10">\r\n                                <i class="fa fa-info-circle"><\/i> New accounts to be enabled\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row sbu-notification-container" ng-if="group.header.enabled !== false" ng-repeat="sbuNotification in group.sbuNotifications">\r\n                        <hr class="contacts-panel-splitter" />\r\n                        <div class="col-md-6 col-sm-12 col-xs-12">\r\n                            <dl class="list-group m-b-0 hidden-xs">\r\n                                <dt>Type<\/dt>\r\n                                <dd>\r\n                                    {{sbuNotification.header.description}}<br />\r\n                                <\/dd>\r\n                            <\/dl>\r\n                            <h4 class="p-b-0 m-l-0 m-b-0 visible-xs">{{sbuNotification.header.description}}<\/h4>\r\n                            <div class="sbus m-b-1 m-t-5">\r\n                                <span class="badge m-r-1" ng-repeat="sbu in sbuNotification.sbus">{{commPrefsCtrl.getSbuName(sbu)}}<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class="col-md-2 col-sm-4 col-xs-4">\r\n                            <dl class="list-group">\r\n                                <dt>When to receive<\/dt>\r\n                                <dd>\r\n                                    {{commPrefsCtrl.getScopeDescription(sbuNotification.header.scopes)}}<br />\r\n                                <\/dd>\r\n                            <\/dl>\r\n                        <\/div>\r\n                        <div class="col-md-2 col-sm-4 col-xs-4">\r\n                            <dl class="list-group">\r\n                                <dt>Channels<\/dt>\r\n                                <dd>\r\n                                    {{commPrefsCtrl.getChannelsDescription(sbuNotification.header.hasEmailEnabled, sbuNotification.header.hasSmsEnabled)}}\r\n                                <\/dd>\r\n                            <\/dl>\r\n                        <\/div>\r\n\r\n                        <div class="col-md-2 col-sm-4 col-xs-4 text-right">\r\n                            <button type="button" class="btn btn-default"\r\n                                    ng-disabled="group.header.enabled === false || commPrefsCtrl.updatingArea === true"\r\n                                    ng-click="commPrefsCtrl.updatePreferencesDialog(true, group, sbuNotification)">\r\n                                Configure\r\n                            <\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="row" ng-if="commPrefsCtrl.areas.length === 0">\r\n            <div class="content-empty">\r\n                <p>No notifications are available<\/p>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="commPrefsCtrl.isLoading === true" message="{{ commPrefsCtrl.loadingMessage }}"><\/page-loading-message>\r\n    <page-error-message ng-if="commPrefsCtrl.isLoading === false && commPrefsCtrl.hasError === true"><\/page-error-message>\r\n\r\n    <!-- Modal: Update preferences -->\r\n    <div class="modal fade" id="modal-update-preferences">\r\n        <div class="modal-dialog">\r\n            <div class="modal-content" ng-if="commPrefsCtrl.updatingPreferencesInDialog === false">\r\n                <div class="modal-header">\r\n                    <button type="button" class="close" ng-click="commPrefsCtrl.updatePreferencesDialog(false)" aria-label="Close"><span aria-hidden="true">&times;<\/span><\/button>\r\n                    <h4 class="modal-title">Configure communication preferences<\/h4>\r\n                <\/div>\r\n\r\n                <div class="modal-body">\r\n                    <div class="row">\r\n                        <div class="col-xs-12">\r\n\r\n                            <h3>\r\n                                <span class="p-r-1">\r\n                                    <i ng-if="commPrefsCtrl.selectedGroup.header.code === \'Z6\'" class="fa fa-shopping-cart"><\/i>\r\n                                    <i ng-if="commPrefsCtrl.selectedGroup.header.code === \'Z7\'" class="fa fa-truck fa-flip-horizontal"><\/i>\r\n                                    <i ng-if="commPrefsCtrl.selectedGroup.header.code !== \'Z6\' && commPrefsCtrl.selectedGroup.header.code !== \'Z7\'" class="fa fa-check"><\/i>\r\n                                <\/span>\r\n                                {{commPrefsCtrl.selectedSbuNotification.header.description}}\r\n                            <\/h3>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="bg-warning table-bordered border-radius-5 row m-0 p-1 m-b-1">\r\n                        <div class="col-xs-12">\r\n                            <div class="row">\r\n                                <div class="col-xs-3">\r\n                                    <strong class="contacts-allaccounts-title">All accounts:<\/strong>\r\n                                <\/div>\r\n                                <div class="col-xs-6">\r\n                                    <div class="row">\r\n                                        <div class="col-xs-12">\r\n                                            <select class="m-b-1" ng-model="commPrefsCtrl.allScope"\r\n                                                    ng-change="commPrefsCtrl.onAllScopeChanged()"\r\n                                                    ng-options="item.Text for item in commPrefsCtrl.notificationScopes track by item.Id">\r\n                                            <\/select>\r\n\r\n                                        <\/div>\r\n                                        <div class="col-xs-12" ng-if="commPrefsCtrl.allScope.Id !== commPrefsCtrl.Enums.notificationScope.never">\r\n                                            Email\r\n                                            <input class="m-r-1" type="checkbox" ng-model="commPrefsCtrl.allEmail" />\r\n                                            SMS\r\n                                            <input type="checkbox" ng-model="commPrefsCtrl.allSms" />\r\n                                            <div class="inline-block" ng-if="commPrefsCtrl.allScope.Id !== commPrefsCtrl.Enums.notificationScope.never && !commPrefsCtrl.allEmail && !commPrefsCtrl.allSms"\r\n                                                 data-tooltip="A channel must be specified">\r\n                                                <i class="fa fa-warning"><\/i>\r\n                                                <span class="text-danger"><\/span>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-3 text-right">\r\n                                    <a class="btn btn-set" href="javascript:;" ng-disabled="commPrefsCtrl.allScope.Id !== commPrefsCtrl.Enums.notificationScope.never && !commPrefsCtrl.allEmail && !commPrefsCtrl.allSms" ng-click="commPrefsCtrl.setAllAccounts()">Set all<\/a>\r\n                                <\/div>\r\n\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="fix-height-scrolling-450">\r\n                        <div class="contact-accounts-sbu-group" ng-repeat="(sbuCode, areas) in commPrefsCtrl.selectedGroup.areas | groupBy: \'SbuCode\'">\r\n                            <div class="sbu-icon-container">\r\n                                <img data-ng-src="{{sbuCode | sbuLogoPath}}" alt="{{sbuCode}}" width="80" height="30" />\r\n                            <\/div>\r\n                            <div class="row m-0">\r\n                                <div class="col-sm-12 col-md-12 p-r-0" ng-repeat="area in areas | orderBy: [\'AccountId\']">\r\n                                    <div class="row contact-accounts-sbu-account">\r\n                                        <div class="col-sm-6 col-xs-12 p-b-1">\r\n                                            <div class="row">\r\n                                                <div class="col-sm-12 col-xs-8">\r\n                                                    <strong>{{area.AccountName}}<\/strong>\r\n                                                <\/div>\r\n                                                <div class="col-xs-4 visible-xs text-right">\r\n                                                    <span class="text-muted">({{area.AccountId}})<\/span>\r\n                                                <\/div>\r\n                                                <div class="col-xs-12 hidden-xs">\r\n                                                    <span class="text-muted">({{area.AccountId}})<\/span>\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                        <div class="col-sm-6 col-xs-12 form-horizontal">\r\n                                            <div class="row">\r\n                                                <div class="col-xs-3">\r\n                                                    <strong>Receive<\/strong>\r\n                                                <\/div>\r\n                                                <div class="col-xs-8 no-wrap">\r\n                                                    <select ng-init="commPrefsCtrl.selectedAreaNotification(area)._scope = {Id: area.Enabled ? commPrefsCtrl.selectedAreaNotification(area).NotificationScope : -1}"\r\n                                                            ng-model="commPrefsCtrl.selectedAreaNotification(area)._scope"\r\n                                                            ng-change="commPrefsCtrl.onNotificationScopeChanged(commPrefsCtrl.selectedAreaNotification(area), commPrefsCtrl.selectedAreaNotification(area)._scope.Id)"\r\n                                                            ng-options="item.Text for item in commPrefsCtrl.notificationScopes track by item.Id">\r\n                                                        <option value="" ng-if="commPrefsCtrl.selectedAreaNotification(area)._scope.Id===-1">Not configured<\/option>\r\n                                                    <\/select>\r\n                                                    <div class="inline-block" ng-if="commPrefsCtrl.selectedAreaNotification(area)._scope.Id===-1"\r\n                                                         data-tooltip="Receiving not yet configured">\r\n                                                        <i class="fa fa-warning"><\/i>\r\n                                                    <\/div>\r\n                                                    <div class="inline-block" ng-if="commPrefsCtrl.isNotificationInvalid(commPrefsCtrl.selectedAreaNotification(area))"\r\n                                                         data-tooltip="A channel must be specified for this notification">\r\n                                                        <i class="fa fa-warning"><\/i>\r\n                                                        <span class="text-danger"><\/span>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                            <div class="row p-t-1" ng-if="commPrefsCtrl.selectedAreaNotification(area)._scope.Id>0">\r\n                                                <div class="col-xs-3">\r\n                                                    <strong>Method<\/strong>\r\n                                                <\/div>\r\n                                                <div class="col-xs-3 no-wrap" ng-if="!commPrefsCtrl.hasEmailChannelDisabled(area, commPrefsCtrl.selectedAreaNotification(area))">\r\n                                                    <span>Email: <\/span>\r\n                                                    <input type="checkbox" ng-model="commPrefsCtrl.selectedAreaNotification(area).HasEmailEnabled" />\r\n                                                <\/div>\r\n                                                <div class="col-xs-3 no-wrap" ng-if="!commPrefsCtrl.hasSmsChannelDisabled(area, commPrefsCtrl.selectedAreaNotification(area))">\r\n                                                    <span>SMS: <\/span>\r\n                                                    <input type="checkbox" ng-model="commPrefsCtrl.selectedAreaNotification(area).HasSmsEnabled" />\r\n                                                <\/div>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="alert alert-danger" role="alert" ng-if="commPrefsCtrl.hasMultiViewValidationErrors">\r\n                        <i class="fa fa-warning"><\/i> Please make sure a channel is specified for all accounts listed above\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class="modal-footer">\r\n                    <button type="button" class="btn btn-default" ng-click="commPrefsCtrl.updatePreferencesDialog(false)">Cancel<\/button>\r\n                    <button type="button" class="btn btn-primary" ng-click="commPrefsCtrl.updateMultiViewPreferences()">Update<\/button>\r\n                <\/div>\r\n            <\/div><!-- /.modal-content -->\r\n\r\n            <div ng-if="commPrefsCtrl.updatingPreferencesInDialog === true" class="modal-content">\r\n                <div class="modal-body text-center">\r\n                    <div class="loading loading-page"><i><\/i> Communication preferences are being updated &hellip;<\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div><!-- /.modal-dialog -->\r\n<\/div><!-- /.modal -->\r\n<\/div>\r\n');n.put("contact-details-panel.html",'<div>\r\n    <div ng-if="!detailsPanel.viewOnly && (detailsPanel.contact.FirstName && detailsPanel.invited === true || detailsPanel.contact.IsValid && detailsPanel.contact.HasPendingUserInvite === true)">\r\n        <div class="alert alert-info alert-contact-invite"><i class="fa fa-paper-plane-o"><\/i> {{ detailsPanel.contact.FirstName }} was invited to use Connect on <b>{{ detailsPanel.contact.UserCreatedOn | date : "MMM d, y \'at\' h:mma" }}<\/b>.<\/div>\r\n    <\/div>\r\n\r\n    <div class="connect-panel contact-details-panel">\r\n\r\n        <div class="connect-panel-header" ng-if="detailsPanel.contact">\r\n            <div class="row">\r\n                <div class="col-xs-9 col-sm-4">\r\n                    <div class="contact-details-avatar float-left">\r\n                        <contact-avatar contact-details="detailsPanel.contact"><\/contact-avatar>\r\n                    <\/div>\r\n                    <h2 class="title float-left">\r\n                        {{ detailsPanel.contact.FirstName + \' \' + detailsPanel.contact.LastName }}\r\n                    <\/h2>\r\n                <\/div>\r\n                <div class="col-xs-3 visible-xs" ng-if="!detailsPanel.viewOnly">\r\n                    <div class="connect-panel-actions">\r\n                        <a ui-sref="^.editContactDetails({contactId: detailsPanel.contact.Id})" auth-key="Customer/Account/Contact" auth="u" ng-if="detailsPanel.contact.IsValid === true && detailsPanel.contact.IsOutOfDate === false"><i class="fa fa-pencil"><\/i>Edit<\/a>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="col-xs-12 float-left visible-xs" ng-if="!detailsPanel.viewOnly">\r\n                    <div class="connect-panel-actions">\r\n                        <button auth-key="Customer/Account/Contact" auth="u" ng-click="detailsPanel.removeContactFromConnect()" class="btn btn-primary">\r\n                            <i class="fa fa-trash-o"><\/i> No longer working here\r\n                        <\/button>\r\n                        <button ng-if="detailsPanel.invited === false && detailsPanel.contact.IsValid === true && detailsPanel.contact.CanInviteUser === true" auth-key="Customer/Account/Contact" auth="u" ng-click="detailsPanel.inviteContactToConnect()">\r\n                            <i class="fa fa-paper-plane-o"><\/i>Invite to Connect\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="col-sm-8 hidden-xs" ng-if="!detailsPanel.viewOnly">\r\n                    <div class="connect-panel-actions">\r\n                        <button auth-key="Customer/Account/Contact" auth="u" ng-click="detailsPanel.removeContactFromConnect()" class="btn btn-primary">\r\n                            <i class="fa fa-trash-o"><\/i> No longer working here\r\n                        <\/button>\r\n                        <button ng-if="detailsPanel.invited === false && detailsPanel.contact.IsValid === true && detailsPanel.contact.CanInviteUser === true" auth-key="Customer/Account/Contact" auth="u" ng-click="detailsPanel.inviteContactToConnect()">\r\n                            <i class="fa fa-paper-plane-o"><\/i>Invite to Connect\r\n                        <\/button>\r\n                        <a ui-sref="^.editContactDetails({contactId: detailsPanel.contact.Id})" auth-key="Customer/Account/Contact" auth="u" ng-if="detailsPanel.contact.IsValid === true && detailsPanel.contact.IsOutOfDate === false"><i class="fa fa-pencil"><\/i>Edit<\/a>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div ng-if="detailsPanel.contact.IsValid === false" auth-key="Customer/Account/Contact" auth="u" class="connect-panel-content padded">\r\n            <div class="alert alert-warning"><i class="fa fa-warning"><\/i> This contact is missing important information, please complete their details <a ui-sref="^.editContactDetails({contactId: detailsPanel.contact.Id, validate: \'true\'})">here<\/a>.<\/div>\r\n        <\/div>\r\n\r\n        <div ng-if="detailsPanel.contact.IsValid === true && detailsPanel.contact.IsOutOfDate === true" auth-key="Customer/Account/Contact" auth="u" class="connect-panel-content padded">\r\n            <div class="alert alert-warning"><i class="fa fa-warning"><\/i> This contact may be out of date, please check their details <a ui-sref="^.editContactDetails({contactId: detailsPanel.contact.Id, concurrent: \'true\'})">here<\/a>.<\/div>\r\n        <\/div>\r\n\r\n        <div class="connect-panel-content" ng-if="detailsPanel.contact">\r\n            <div class="row p-1">\r\n                <div class="col-md-2 col-sm-6 col-xs-12">\r\n                    <dl class="contact-detail job-title">\r\n                        <dt>Job title<\/dt>\r\n                        <dd ng-if="detailsPanel.contact.JobTitle">{{ detailsPanel.contact.JobTitle }}<\/dd>\r\n                        <dd ng-if="!detailsPanel.contact.JobTitle">-<\/dd>\r\n                    <\/dl>\r\n                <\/div>\r\n                <div class="col-md-4 col-sm-6 col-xs-12">\r\n                    <dl class="contact-detail email">\r\n                        <dt>Email address<\/dt>\r\n                        <dd>\r\n                            <ul>\r\n                                <li ng-if="detailsPanel.contact.EmailAddresses.length > 0" ng-repeat="email in detailsPanel.contact.EmailAddresses track by $index">{{ email }}<\/li>\r\n                                <li ng-if="detailsPanel.contact.EmailAddresses.length === 0">-<\/li>\r\n                            <\/ul>\r\n                        <\/dd>\r\n                    <\/dl>\r\n                <\/div>\r\n                <div class="col-md-3 col-sm-6 col-xs-12">\r\n                    <dl class="contact-detail phone">\r\n                        <dt>Phone number<\/dt>\r\n                        <dd>\r\n                            <ul>\r\n                                <li ng-if="detailsPanel.contact.PhoneNumbers.length  > 0" ng-repeat="number in detailsPanel.contact.PhoneNumbers track by $index">{{ number }}<\/li>\r\n                                <li ng-if="detailsPanel.contact.PhoneNumbers.length === 0" >-<\/li>\r\n                            <\/ul>\r\n                        <\/dd>\r\n                    <\/dl>\r\n                <\/div>\r\n                <div class="col-md-3 col-sm-6 col-xs-12">\r\n                    <dl class="contact-detail mobile">\r\n                        <dt>Mobile number<\/dt>\r\n                        <dd>\r\n                            <ul>\r\n                                <li ng-if="detailsPanel.contact.MobileNumbers.length  > 0" ng-repeat="number in detailsPanel.contact.MobileNumbers track by $index">{{ number }}<\/li>\r\n                                <li ng-if="detailsPanel.contact.MobileNumbers.length === 0">-<\/li>\r\n                            <\/ul>\r\n                        <\/dd>\r\n                    <\/dl>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <page-loading-message ng-if="detailsPanel.isLoading === true" message="Loading contact details"><\/page-loading-message>\r\n        <page-empty-message ng-if="detailsPanel.hasError === true && detailsPanel.isLoading === false"><\/page-empty-message>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("contacts-counter.html",'<span auth-key="Customer/Account/Contact" auth="u"\r\n    ng-if="contactsCounter.combinedUniqueContacts > 0"\r\n    class="badge badge-circle badge-info animate-delayed-entry"\r\n    aria-label="{{ contactsCounter.counterMessage }}"\r\n    tooltip="{{ contactsCounter.counterMessage }}">{{ contactsCounter.combinedUniqueContacts < 10 ? contactsCounter.combinedUniqueContacts : \'9+\' }}<\/span>\r\n');n.put("contacts-list-item.html",'<li class="org-contacts-list-item">\r\n    <div class="org-contacts-list-item-details">\r\n        <contact-avatar contact-details="contactItem.details" show-alert-status="contactItem.showAlertStatus"><\/contact-avatar>\r\n        <span class="contact-details-text">\r\n            <a ui-sref="^.contactDetails({contactId: contact.Id})">{{ contactItem.details.FirstName + \' \' + contactItem.details.LastName }}<\/a>\r\n\r\n            <span ng-if="contactItem.details.JobTitle" class="contact-job-title"><br>{{ contactItem.details.JobTitle }}<\/span>\r\n        <\/span>\r\n    <\/div>\r\n\r\n    <div class="org-contacts-list-item-options" ng-if="contactItem.showOptions === false && contactItem.details.IsUnknownByUser === false && (contactItem.validateContact !== false || contactItem.checkContactCurrency === true) && (contactItem.details.IsValid === false || contactItem.details.IsOutOfDate === true)">\r\n        <span ng-if="(contactItem.details.IsValid === false && contactItem.validateContact === true) || (contactItem.details.IsOutOfDate === true && contactItem.details.IsValid === true && contactItem.checkContactCurrency === true)">\r\n            <a class="contacts-missing-details-link" href="javascript:;" ng-click="contactItem.singleContactDetailsUnknown(contactItem.orgId, contact.Id)">I don\'t know this person<\/a> <span class="hidden-sm hidden-xs">| &nbsp;&nbsp;<\/span>\r\n        <\/span>\r\n        <a ng-if="contactItem.details.IsValid === false && contactItem.validateContact === true" class="contacts-missing-details-link" ui-sref="^.editContactDetails({contactId: contact.Id, validate: true})">Update missing details<\/a>\r\n        <a ng-if="contactItem.details.IsOutOfDate === true && contactItem.details.IsValid === true && contactItem.checkContactCurrency === true" class="contacts-missing-details-link" ui-sref="^.editContactDetails({contactId: contact.Id, concurrent: true})">Check details<\/a>\r\n    <\/div>\r\n    <div class="org-contacts-list-item-options" ng-if="contactItem.showOptions" auth-key="Customer/Account/Contact" auth="u">\r\n        <button ng-if="contactItem.isAssociated === true" class="btn btn-primary" ng-click="contactItem.removeContact()" ng-disabled="contactItem.updatingContact">{{ contactItem.removeContactButtonText }}<\/button>\r\n        <button ng-if="contactItem.isAssociated === false" class="btn btn-default" ng-click="contactItem.addContact()" ng-disabled="contactItem.updatingContact">{{ contactItem.addContactButtonText }}<\/button>\r\n    <\/div>\r\n<\/li>\r\n');n.put("contacts-list.html",'<div>\r\n\r\n    <div\r\n        class="alert alert-warning contacts-list-alert clearfix"\r\n        role="alert"\r\n        ng-if="!amContacts.account && amContacts.contactsWithAlertsCount > 0 && (amContacts.showOutOfDateContacts === true || amContacts.showInvalidContacts === true)">\r\n\r\n        <i class="fa fa-warning"><\/i>\r\n        You have <b><ng-pluralize count="amContacts.contactsWithAlertsCount" when="{\'one\': \'a contact\', \'other\': \'{} contacts\'}"><\/ng-pluralize><\/b> {{ amContacts.alertTypeMessage }}.\r\n        <span class="pull-right" ng-if="amContacts.contactsWithAlertsCount !== amContacts.list.length">\r\n            <label for="showContactsWithAlerts">Show only contacts {{ amContacts.alertTypeMessage }}<\/label> <input id="showContactsWithAlerts" type="checkbox" ng-model="amContacts.filterContactView" ng-true-value="\'true\'" ng-change="amContacts.updateFilteredContactsView(amContacts.filterContactsCookieName)">\r\n        <\/span>\r\n    <\/div>\r\n\r\n    <div class="connect-panel contacts-list-component">\r\n\r\n        <div class="connect-panel-header" ng-if="amContacts.list">\r\n            <h2 class="title">Contacts<\/h2>\r\n\r\n            <div class="connect-panel-actions">\r\n                <a id="add-contact-button" ui-sref="^.newContact" auth-key="Customer/Account/Contact" auth="c"><i class="fa fa-plus"><\/i>New contact<\/a>\r\n            <\/div>\r\n            <p class="connect-panel-header-subtext"><i class="fa fa-lg fa-info-circle right-text-pad text-muted"><\/i> Click on a contact to view their details and account associations<\/p>\r\n        <\/div>\r\n\r\n        <div ng-if="amContacts.list.length > 0 && amContacts.account" class="contacts-tabs">\r\n            <tabset>\r\n                <tab>\r\n                    <tab-heading>Linked {{ \'(\' + contactsLinkedToAccount.length + \')\' }}<\/tab-heading>\r\n                    <div class="alert alert-info" ng-show="contactsLinkedToAccount.length > 0">\r\n                        <p>\r\n                            <i class="fa fa-info-circle"><\/i> These people are relevant for account: <b>{{ amContacts.account }}<\/b>\r\n                        <\/p>\r\n                    <\/div>\r\n                    <ul ng-show="contactsLinkedToAccount.length > 0" class="animated-contact-list">\r\n                        <contacts-list-item ng-repeat="contact in amContacts.list | contactsLinkedToAccount:amContacts.account | orderBy: \'FirstName\' as contactsLinkedToAccount" details="contact" account-id="amContacts.account" org-id="amContacts.organisation" on-delete-contact-success="amContacts.reloadContacts()" show-alert-status="true"><\/contacts-list-item>\r\n                    <\/ul>\r\n                    <page-empty-message ng-if="contactsLinkedToAccount.length === 0" feature="contact" title="No contacts linked to this account." message="Link an available contact or create a new one to view them here."><\/page-empty-message>\r\n                <\/tab>\r\n                <tab>\r\n                    <tab-heading>Available {{ \'(\' + contactsAvailable.length + \')\' }}<\/tab-heading>\r\n                    <div class="alert alert-info" ng-show="contactsAvailable.length > 0">\r\n                        <p>\r\n                            <i class="fa fa-info-circle"><\/i> These people exist within your organisation and can be linked to account: <b>{{ amContacts.account }}<\/b>\r\n                        <\/p>\r\n                    <\/div>\r\n                    <ul ng-show="contactsAvailable.length > 0" class="animated-contact-list">\r\n                        <contacts-list-item ng-repeat="contact in amContacts.list | contactsNotLinkedToAccount:amContacts.account | orderBy: \'FirstName\' as contactsAvailable" details="contact" account-id="amContacts.account" org-id="amContacts.organisation" on-delete-contact-success="amContacts.reloadContacts()" show-alert-status="amContacts.showAlertStatusIcons === true"><\/contacts-list-item>\r\n                    <\/ul>\r\n                    <page-empty-message ng-if="contactsAvailable.length === 0" feature="empty" title="We couldn\'t find anyone." message="Existing contacts that can be linked to this account will appear here."><\/page-empty-message>\r\n                <\/tab>\r\n            <\/tabset>\r\n        <\/div>\r\n\r\n        <div ng-if="amContacts.list.length > 0 && !amContacts.account">\r\n            <ul>\r\n                <contacts-list-item\r\n                    ng-if="amContacts.showInvalidContacts || amContacts.showOutOfDateContacts"\r\n                    ng-repeat="contact in amContacts.list | filter: {CanBeFiltered: amContacts.filterContactView === \'true\' ? true : undefined}"\r\n                    details="contact"\r\n                    org-id="amContacts.organisation"\r\n                    on-delete-contact-success="amContacts.reloadContacts()"\r\n                    validate-contact="amContacts.invalidContactsCount > 0"\r\n                    check-contact-currency="amContacts.outOfDateContactsCount > 0"\r\n                    show-alert-status="amContacts.showAlertStatusIcons === true">\r\n                <\/contacts-list-item>\r\n                <contacts-list-item\r\n                    ng-if="!amContacts.showInvalidContacts && !amContacts.showOutOfDateContacts"\r\n                    ng-repeat="contact in amContacts.list"\r\n                    details="contact"\r\n                    account-id="amContacts.account"\r\n                    org-id="amContacts.organisation"\r\n                    on-delete-contact-success="amContacts.reloadContacts()">\r\n                <\/contacts-list-item>\r\n            <\/ul>\r\n        <\/div>\r\n\r\n        <page-loading-message ng-if="amContacts.isLoading === true" message="Loading contacts"><\/page-loading-message>\r\n        <page-error-message ng-if="amContacts.hasError === true && amContacts.isLoading === false"><\/page-error-message>\r\n        <page-empty-message ng-if="amContacts.hasError === false && amContacts.isLoading === false && amContacts.list.length === 0" feature="contact" title="No contacts available." message="Add new contacts to view them here."><\/page-empty-message>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("contact-validation-prompt.html",'<contact-validation details="contactValidationPrompt.details" class="validate-contact-prompt"><\/contact-validation>\r\n');n.put("contact-validation.html",'<div>\r\n    <div class="feature-icon"  ng-if="contactValidation.view.remindMeLater === false">\r\n        <span class="fs-icon" data-feature="auth" data-status="warning"><\/span>\r\n    <\/div>\r\n    <!-- Contacts view -->\r\n    <div ng-if="contactValidation.view.remindMeLater === false && contactValidation.view.loading !== true">\r\n        <h1 ng-if="contactValidation.view.multiContactsWithMissingDetails === true">You have {{ contactValidation.details.Invalid.Count }} Contact<span ng-if="contactValidation.details.Invalid.Count>1">s<\/span> with missing details<\/h1>\r\n        <h1 ng-if="contactValidation.view.multiContactsWithMissingDetails !== true">Are these Contact details correct?<\/h1>\r\n        <p class="lead">To maintain the security of your accounts and make sure we\'re in touch with the right people, we\'ll periodically ask you to check their details.<\/p>\r\n\r\n        <div class="validate-contact-details-list">\r\n            <ul>\r\n                <li ng-repeat="contact in contactValidation.details.Contacts">\r\n                    <contact-avatar contact-details="contact"><\/contact-avatar>\r\n                    <span class="contact-details">\r\n                        <span class="contact-name">\r\n                            {{ contact.FirstName }} {{ contact.LastName }}\r\n                        <\/span>\r\n                        <span class="contact-job-title">\r\n                            <br>{{ contact.JobTitle }}\r\n                        <\/span>\r\n                    <\/span>\r\n                <\/li>\r\n            <\/ul>\r\n        <\/div>\r\n\r\n        <p class="more-contacts" ng-if="contactValidation.details.IncludeInUiCount > 3">+{{ contactValidation.details.IncludeInUiCount - 3 }} more&hellip;<\/p>\r\n\r\n        <div class="row validate-contact-actions">\r\n            <div class="col-xs-12 col-md-6">\r\n                <button class="btn btn-block btn-default" ng-click="contactValidation.remindMeLater()">Remind me later<\/button>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-6">\r\n                <button ng-if="contactValidation.view.multiContactsWithMissingDetails === true" class="btn btn-block btn-primary" ng-click="contactValidation.fixMultipleContactsMissingDetails()">Add missing details<\/button>\r\n                <button ng-if="contactValidation.view.multiContactConfirmDetails === true" type="button" class="btn btn-primary btn-block" ng-click="contactValidation.validateMultipleContactsDetails()">Check them now<\/button>\r\n                <button ng-if="contactValidation.view.multiContactMixedConfirmAndMissingDetails === true" type="button" class="btn btn-primary btn-block" ng-click="contactValidation.fixMultipleContactsMixedDetails()">Check them now<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Remind me later -->\r\n    <div ng-if="contactValidation.view.loading === false && contactValidation.view.remindMeLaterSuccess === false && contactValidation.view.remindMeLater">\r\n\r\n        <span class="fs-icon" data-feature="reminder"><\/span>\r\n\r\n        <h1>When would you like to be prompted again?<\/h1>\r\n        <p class="lead">Leave it with us and we\'ll give you a nudge&hellip;<\/p>\r\n\r\n        <div class="alert alert-warning" ng-show="contactValidation.view.error === true">\r\n            <i class="fa fa-warning"><\/i> Something has gone wrong, please try again or contact Connect support.\r\n        <\/div>\r\n\r\n        <div class="validate-contact-remind-later">\r\n            <form name="contactValidation.remindMeLaterForm">\r\n                <ul>\r\n                    <li>\r\n                        <label for="remindMeNextTime">\r\n                            <input type="radio" id="remindMeNextTime" ng-model="contactValidation.reminderOption" value="nextTime">\r\n                            The next time you log in\r\n                        <\/label>\r\n                    <\/li>\r\n                    <li>\r\n                        <label for="remondMeInAMonth">\r\n                            <input type="radio" id="remondMeInAMonth" ng-model="contactValidation.reminderOption" value="oneMonth">\r\n                            In a month\r\n                        <\/label>\r\n                    <\/li>\r\n                    <li>\r\n                        <label for="remindMeInSixMonths">\r\n                            <input type="radio" id="remindMeInSixMonths" ng-model="contactValidation.reminderOption" value="sixMonths">\r\n                            In 6 months\r\n                        <\/label>\r\n                    <\/li>\r\n                <\/ul>\r\n                <div class="row validate-contact">\r\n                    <div class="col-xs-12 col-md-6">\r\n                        <button type="button" class="btn btn-block btn-default" ng-click="contactValidation.view.remindMeLater=false;">Back<\/button>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-md-6">\r\n                        <button type="button" class="btn btn-block btn-primary" ng-click="contactValidation.setReminder(contactValidation.reminderOption)">Set reminder<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Remind me later success view -->\r\n    <div ng-if="contactValidation.view.remindMeLaterSuccess === true">\r\n        <span class="fs-icon" data-feature="reminder" data-status="success"><\/span>\r\n        <h1>Thank you<\/h1>\r\n        <p class="lead">Your reminder has been set.<\/p>\r\n    <\/div>\r\n\r\n    <!-- Contact unknown success -->\r\n    <div ng-if="contactValidation.view.contactUnknownSuccess === true">\r\n        <span class="fs-icon" data-feature="single-contact" data-status="success"><\/span>\r\n        <h1>Thank you<\/h1>\r\n        <p class="lead">You won\'t be prompted for this contact again.<\/p>\r\n    <\/div>\r\n\r\n    <!-- Contact details valid success -->\r\n    <div ng-if="contactValidation.view.contactDetailsAreCorrectSuccess === true">\r\n        <span class="fs-icon" data-feature="single-contact" data-status="success"><\/span>\r\n        <h1>Thank you<\/h1>\r\n        <p class="lead">We have received your response.<\/p>\r\n    <\/div>\r\n\r\n    <div ng-if="contactValidation.view.loading === true">\r\n        <page-loading-message message="{{ contactValidation.loadingMessage }}"><\/page-loading-message>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("content-unavailable-when.html",'<div>\r\n    <ng-transclude ng-if="!contentUnavailableWhen"><\/ng-transclude>\r\n    <p class="unavailable" ng-if="contentUnavailableWhen">{{contentUnavailableMessage || "Unavailable"}}<\/p>\r\n<\/div>\r\n');n.put("csr-account-details.html",'<div id="account-details-section" class="connect-panel csr-account-details-component">\r\n    <div class="connect-panel-header" ng-if="amCsrAccountDetails.details">\r\n        <h2 class="title">CSR account details<\/h2>\r\n    <\/div>\r\n    <div class="connect-panel-content padded" ng-if="amCsrAccountDetails.details">\r\n        <div class="row">\r\n            <div class="col-xs-12 col-sm-4">\r\n                <dl class="panel-detail">\r\n                    <dt>Business unit<\/dt>\r\n                    <dd content-unavailable-when="!amCsrAccountDetails.details.sbu">\r\n                        <sbu-image sbu-code="amCsrAccountDetails.details.sbu"><\/sbu-image>\r\n                    <\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-4">\r\n                <dl class="panel-detail">\r\n                    <dt>Account No<\/dt>\r\n                    <dd content-unavailable-when="!amCsrAccountDetails.details.accountNo">{{ amCsrAccountDetails.details.accountNo }}<\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-4">\r\n                <dl class="panel-detail">\r\n                    <dt>Account manager<\/dt>\r\n                    <dd content-unavailable-when="!amCsrAccountDetails.details.accountManager.name && !amCsrAccountDetails.details.accountManager.phone">\r\n                        {{ amCsrAccountDetails.details.accountManager.name }}<br/>\r\n                        {{ amCsrAccountDetails.details.accountManager.phone }}\r\n                    <\/dd>\r\n                <\/dl>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="amCsrAccountDetails.isLoading === true" message="Loading CSR account details"><\/page-loading-message>\r\n    <page-empty-message ng-if="amCsrAccountDetails.hasError === true && amCsrAccountDetails.isLoading === false"><\/page-empty-message>\r\n\r\n<\/div>\r\n');n.put("contact-accounts-table.html",'<div>\r\n    <div class="contact-accounts-sbu-group" ng-repeat="(key, values) in contactAccountsTable.accounts | groupBy: \'Sbu\'">\r\n        <div class="sbu-icon-container">\r\n            <sbu-image sbu-code="key"><\/sbu-image>\r\n        <\/div>\r\n        <div class="row m-0">\r\n            <div class="col-sm-12 col-md-12 p-r-0" ng-repeat="account in values | orderBy: [\'AssociationOrder\',\'AccountId\']">\r\n                <div class="row contact-accounts-sbu-account">\r\n                    <div class="col-xs-7 col-sm-8">\r\n                        <strong feature-toggle="!2017">{{ account.AccountName }}<\/strong><br />\r\n                        <span class="text-muted">{{ account.AccountId }}<\/span>\r\n                    <\/div>\r\n                    <div class="col-xs-5 col-sm-4" auth-key="Customer/Account/Contact" auth="u">\r\n                        <div class="row text-right">\r\n                            <button type="button" class="btn btn-default contact-button" ng-if="account.IsAssociated === false" ng-click="contactAccountsTable.addContact(account)" ng-disabled="account.updatingStatus === true">{{ account.updatingStatus ? \'Linking contact...\' : \'Link contact\' }}<\/button>\r\n                            <button type="button" class="btn btn-primary contact-button" ng-if="account.IsAssociated === true" ng-click="contactAccountsTable.removeContact(account)" ng-disabled="account.updatingStatus === true">{{ account.updatingStatus ? \'Removing contact...\' : \'Remove contact\' }}<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="contactAccountsTable.isLoading === true" message="Loading accounts"><\/page-loading-message>\r\n    <page-empty-message ng-if="(!contactAccountsTable.accounts || contactAccountsTable.accounts.length === 0) && contactAccountsTable.isLoading === false"><\/page-empty-message>\r\n<\/div>\r\n');n.put("am-account-list.html",'<ul class="am-form-account-list">\r\n    <li class="am-form-account" ng-repeat="account in amAccountList.accountsToSelectFrom">\r\n        <label for="account{{ $index }}">\r\n            <am-account-list-details class="am-form-account-details" account-id="account.AccountId"><\/am-account-list-details>\r\n            <span class="am-form-account-input">\r\n                <input type="checkbox" name="account{{ $index }}" id="account{{ $index }}" ng-model="account.selected" ng-hide="amAccountList.accountsToSelectFrom.length === 1" ng-disabled="amAccountList.accountsToSelectFrom.length === 1">\r\n            <\/span>\r\n        <\/label>\r\n    <\/li>\r\n<\/ul>\r\n');n.put("am-account-list-details.html",'<div>\r\n    <div class="loading-message" ng-if="amAccountListDetails.isLoading === true">Loading account details&hellip; <\/div>\r\n    <div ng-if="amAccountListDetails.isLoading === false" class="account-details">\r\n        <sbu-image sbu-code="amAccountListDetails.accountDetails.SbuCode"><\/sbu-image>\r\n        <h3>{{ amAccountListDetails.accountDetails.Name1}}<span ng-if="amAccountListDetails.accountDetails.Name2">, {{ amAccountListDetails.accountDetails.Name2 }}<\/span><\/h3>\r\n        <h4>{{ amAccountListDetails.accountDetails.AccountId }} <span class="bu-name">({{ amAccountListDetails.accountDetails.SbuCode | sbuName }})<\/span><\/h4>\r\n    <\/div>\r\n<\/div>\r\n');n.put("am-account-selector.html",'<ng-form name="accountSelector">\r\n    <div class="connect-panel am-account-selector">\r\n        <div class="connect-panel-header">\r\n            <h2 class="title">\r\n                Accounts\r\n            <\/h2>\r\n        <\/div>\r\n\r\n        <div class="connect-panel-content">\r\n            <div class="row">\r\n                <div class="col-xs-12">\r\n                    <form-element-feedback ng-if="accountSelector.selectedAccounts" custom-messages="{required: \'Please select an account\'}" form-element="accountSelector.selectedAccounts"><\/form-element-feedback>\r\n                    <am-account-list ng-if="amAccountSelector.availableAccounts" name="selectedAccounts" id="selectedAccounts" available-accounts="amAccountSelector.availableAccounts" ng-model="amAccountSelector.selectedAccounts" required><\/am-account-list>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/ng-form>\r\n');n.put("am-contact-details.html",'<ng-form name="contactDetails">\r\n\r\n    <div class="connect-panel">\r\n\r\n        <div class="connect-panel-header">\r\n            <h2 class="title">Contact details<\/h2>\r\n            <div class="connect-panel-actions">\r\n                <div ng-if="amContactDetails.isExistingContact === true">\r\n                    <button type="button" auth-key="Customer/Account/Contact" auth="u" ng-click="amContactDetails.removeContactFromConnect()" class="btn btn-primary">\r\n                        <i class="fa fa-trash-o"><\/i> No longer working here\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="connect-panel-content padded">\r\n\r\n            <div class="row">\r\n\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <div class="form-group">\r\n                        <label for="firstName">First name*<\/label>\r\n                        <form-element-feedback form-element="contactDetails.firstName" ng-if="contactDetails.firstName"><\/form-element-feedback>\r\n                        <input type="text" class="form-control" id="firstName" name="firstName" ng-model="amContactDetails.contactDetails.FirstName" required real-name>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <div class="form-group">\r\n                        <label for="lastName">Last name*<\/label>\r\n                        <form-element-feedback form-element="contactDetails.lastName" ng-if="contactDetails.lastName"><\/form-element-feedback>\r\n                        <input type="text" class="form-control" id="lastName" name="lastName" ng-model="amContactDetails.contactDetails.LastName" required real-name>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <am-job-title-selector selected-job-title="amContactDetails.contactDetails.JobTitle"><\/am-job-title-selector>\r\n\r\n            <div class="row">\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <div class="form-group">\r\n                        <label for="emailAddress">Email*<\/label>\r\n                        <form-element-feedback form-element="contactDetails.emailAddress" ng-if="contactDetails.emailAddress"><\/form-element-feedback>\r\n                        <input type="email" class="form-control" id="emailAddress" name="emailAddress" ng-model="amContactDetails.contactDetails.EmailAddresses[0]" required valid-email>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class="row">\r\n\r\n                <div class="col-xs-12">\r\n                    <h3>Contact numbers*<\/h3>\r\n                    <p>Please provide one or more of the following:<\/p>\r\n                <\/div>\r\n\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <div class="form-group">\r\n                        <label for="mobileNumber">Mobile<\/label>\r\n                        <form-element-feedback form-element="contactDetails.mobileNumber" ng-if="contactDetails.mobileNumber"><\/form-element-feedback>\r\n                        <input type="phone" class="form-control" id="mobileNumber" name="mobileNumber" ng-model="amContactDetails.contactDetails.MobileNumbers[0]" valid-mobile-number ng-required="!contactDetails.telephoneNumber.$modelValue">\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <div class="form-group">\r\n                        <label for="telephoneNumber">Telephone<\/label>\r\n                        <form-element-feedback form-element="contactDetails.telephoneNumber" ng-if="contactDetails.telephoneNumber"><\/form-element-feedback>\r\n                        <input type="phone" class="form-control" id="telephoneNumber" name="telephoneNumber" ng-model="amContactDetails.contactDetails.PhoneNumbers[0]" valid-phone-number ng-required="!contactDetails.mobileNumber.$modelValue">\r\n                    <\/div>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/ng-form>\r\n');n.put("am-job-title-selector.html",'<ng-form name="jobTitle">\r\n    <div class="am-job-title-selector row">\r\n        <div class="col-xs-12 col-sm-6">\r\n            <div class="form-group">\r\n                <label for="amJobTitle">Job title*<\/label>\r\n                <form-element-feedback form-element="jobTitle.amJobTitle" ng-if="jobTitle.amJobTitle"><\/form-element-feedback>\r\n                <select required class="form-control" name="amJobTitle" id="amJobTitle" ng-model="amJobTitleSelector.selectedJobOption" ng-change="amJobTitleSelector.selectJobOption()">\r\n                    <option value="">Please select<\/option>\r\n                    <option ng-repeat="option in amJobTitleSelector.jobTitles" ng-value="option">{{ option }}<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6" ng-if="amJobTitleSelector.selectedJobOption === \'Other\'">\r\n            <div class="form-group">\r\n                <label for="amOther">(Other)*<\/label>\r\n                <form-element-feedback form-element="jobTitle.amOther" ng-if="jobTitle.amOther"><\/form-element-feedback>\r\n                <input class="form-control" type="text" id="amOther" name="amOther" ng-model="amJobTitleSelector.selectedJobTitle" required>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/ng-form>\r\n');n.put("form-toggle.html",'<span class="form-toggle">\r\n    <label for="formToggleTrue-{{::$id}}" role="button" ng-click="formToggle.ngModel = formToggle.trueValue" ng-class="{\'selected\': formToggle.ngModel === formToggle.trueValue}" tabindex="0" style="margin-bottom: 0;">\r\n        <span>Yes<\/span>\r\n        <input type="radio" ng-value="formToggle.trueValue" id="formToggleTrue-{{::$id}}" name="formToggleTrue-{{::$id}}" ng-model="formToggle.ngModel" ng-checked="formToggle.ngModel === formToggle.trueValue" tabindex="-1">\r\n    <\/label>\r\n    <label for="formToggleFalse-{{::$id}}" role="button"  ng-click="formToggle.ngModel = formToggle.falseValue" ng-class="{\'selected\': formToggle.ngModel === formToggle.falseValue}" tabindex="0" style="margin-bottom: 0;">\r\n        <span>No<\/span>\r\n        <input type="radio" ng-value="formToggle.falseValue" id="formToggleFalse-{{::$id}}" name="formToggleFalse-{{::$id}}" ng-model="formToggle.ngModel" ng-checked="formToggle.ngModel === formToggle.falseValue" tabindex="-1">\r\n    <\/label>\r\n<\/span>\r\n');n.put("am-org-view-select.html",'<div class="am-org-view-select-component form-inline">\r\n    <label for="amOrgViewSelectControl">View by<\/label>\r\n    <select class="form-control" ng-model="amOrgViewSelect.selectedState" ng-options="option as option.title for option in amOrgViewSelect.options track by option.state" ng-change="amOrgViewSelect.changeState()" name="amOrgViewSelectControl" id="amOrgViewSelectControl">\r\n        <option value="" ng-if="!amOrgViewSelect.selectedState">Please select&hellip;<\/option>\r\n    <\/select>\r\n<\/div>\r\n');n.put("edit-notification-form.html",'<ng-form name="notificationDetails">\r\n\r\n    <div class="form-section">\r\n\r\n        <div class="row">\r\n\r\n            <div class="col-xs-12 col-sm-6">\r\n                <div class="form-group">\r\n                    <label for="editContact">Contact<\/label>\r\n                    <form-element-feedback form-element="notificationDetails.editContact" ng-if="notificationDetails.editContact"><\/form-element-feedback>\r\n                    <input type="email" name="editContact" id="editContact" class="form-control" ng-model="details.Email" valid-email required placeholder="Email address">\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class="col-xs-12 col-sm-6">\r\n                <div class="form-group">\r\n                    <label for="editOutput">Output<\/label>\r\n                    <input type="text" name="editOutput" id="editOutput" class="form-control" ng-model="details.OutputDescription" readonly tabindex="-1" placeholder="None">\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/ng-form>\r\n');n.put("organisation-launchpad-link.html",'<a ng-class="{\'accounts-and-contacts\' : orgLaunchpadLink.organisations.length > 1}">\r\n    <i ng-if="orgLaunchpadLink.organisations.length !== 1" class="launchpad-icon fa fa-briefcase"><\/i>\r\n    <i ng-if="orgLaunchpadLink.organisations.length >= 1" class="launchpad-icon fa fa-address-card-o"><\/i>\r\n    {{ orgLaunchpadLink.linkTitle }}\r\n\r\n    <span ng-if="(orgLaunchpadLink.totalInvalidContacts === 0 && orgLaunchpadLink.totalOutOfDateContacts === 0)" class="label label-new">New<\/span>\r\n    <contacts-counter out-of-date-contacts="orgLaunchpadLink.totalOutOfDateContacts" invalid-contacts="orgLaunchpadLink.totalInvalidContacts" combined-unique-contacts="orgLaunchpadLink.combinedUniqueContacts"><\/contacts-counter>\r\n<\/a>\r\n');n.put("org-account-notifications.html",'<div class="connect-panel notification-table-component">\r\n    <div class="connect-panel-header" ng-if="amNotifications.list">\r\n        <h2 class="title">\r\n            Notifications\r\n        <\/h2>\r\n    <\/div>\r\n\r\n    <div class="table-responsive" ng-if="amNotifications.list">\r\n        <table class="table">\r\n            <thead>\r\n                <tr>\r\n                    <th>Contact<\/th>\r\n                    <th>Output<\/th>\r\n                    <th><\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr ng-if="amNotifications.list.length === 0">\r\n                    <td colspan="3" class="empty">There are no notifications for this account.<\/td>\r\n                <\/tr>\r\n                <tr ng-repeat="item in amNotifications.list">\r\n                    <td content-unavailable-when="!item.Email"><contact-avatar class="notification-contact-avatar" contact-type="email"><\/contact-avatar>{{ item.Email }}<\/td>\r\n                    <td content-unavailable-when="!item.OutputDescription">{{ item.OutputDescription }}<\/td>\r\n                    <td style="width: 1%; text-align: right;"><a id="edit-notification-details" ui-sref="app.org.account.editNotification({index: $index})">Edit<\/a><\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n\r\n        <page-loading-message ng-if="amNotifications.isLoading === true" message="Loading notifications"><\/page-loading-message>\r\n        <page-empty-message ng-if="amNotifications.hasError === true && amNotifications.isLoading === false"><\/page-empty-message>\r\n\r\n<\/div>\r\n');n.put("organisations-list.html",'<div>\r\n    <ul class="organisation-list" ng-if="organisationsList.organisations.length >= 0">\r\n        <li ng-if="organisationsList.organisations.length === 0" class="empty">No organisations available&hellip;<\/li>\r\n        <li ng-repeat="organisation in organisationsList.organisations">\r\n            <div class="organisation-list-item-details">\r\n                <span class="organisation-list-item-avatar">\r\n                    <contact-avatar contact-type="organisation"><\/contact-avatar>\r\n                <\/span>\r\n                <span class="organisation-list-item-text">\r\n                    <span class="organisation-list-item-name">\r\n                        {{ organisation.Name }}\r\n                    <\/span>\r\n                    <span class="organisation-list-item-id">\r\n                        {{ organisation.Id }}\r\n                    <\/span>\r\n                <\/span>\r\n            <\/div>\r\n            <div class="organisation-list-item-links">\r\n                <span class="link">\r\n                    <a ui-sref="app.org.accounts({orgId: organisation.Id})" class="btn btn-default"><i class="fa fa-briefcase"><\/i>Accounts<\/a>\r\n                <\/span>\r\n                <span class="link"  auth-key="Customer/Account/Contact" auth="r">\r\n                    <a ui-sref="app.org.contacts.list({orgId: organisation.Id})" class="btn btn-default"><i class="fa fa-address-card-o"><\/i>Contacts<\/a>\r\n                    <contacts-counter out-of-date-contacts="organisation.OutOfDateContacts" invalid-contacts="organisation.InvalidContacts" combined-unique-contacts="organisation.IncludeInUiCount"><\/contacts-counter>\r\n                <\/span>\r\n            <\/div>\r\n        <\/li>\r\n    <\/ul>\r\n    <div class="connect-panel" ng-if="!organisationsList.organisations">\r\n        <page-loading-message message="Loading organisations"><\/page-loading-message>\r\n    <\/div>\r\n<\/div>\r\n');n.put("contact-last-account-message.html",'<div class="am-modal" role="dialog">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="contact"><\/span>\r\n    <\/div>\r\n    <h1>Delete this contact?<\/h1>\r\n    <p>Removing the contact from this account will delete them and their details from Connect. You will need to re-create this contact if you need them in the future.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="$dismiss()" class="btn btn-block btn-default">No, keep this contact<\/button>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="$close()" class="btn btn-block btn-primary">Yes, delete this contact<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("contact-last-account-no-permission.html",'<div class="am-modal" role="dialog">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="contact" data-status="warning"><\/span>\r\n    <\/div>\r\n    <h1>Unable to remove contact<\/h1>\r\n    <p>You do not have the required permission to remove this contact from your organisation. Please contact your Connect administrator or Connect Support for assistance.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 action">\r\n            <button ng-click="$close()" class="btn btn-block btn-default">Close<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("handled-error-message.html",'<div class="am-modal">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="technical" data-status="warning"><\/span>\r\n    <\/div>\r\n    <h1>Something went wrong!<\/h1>\r\n    <p>But don\'t worry - help is on the way. Our support team have been notified of this issue and will be in touch shortly to assist.<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 action">\r\n            <button ng-click="$close()" class="btn btn-block btn-default">Close<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("invite-contact-to-connect.html",'<div class="am-modal">\r\n    <div ng-if="inviteContact.loading === false">\r\n        <div class="feature-icon">\r\n            <span class="fs-icon" data-feature="single-contact" data-status="email-send"><\/span>\r\n        <\/div>\r\n        <h1>Invite {{ inviteContact.contactDetails.FirstName + \' \' + inviteContact.contactDetails.LastName  }} to use Connect?<\/h1>\r\n        <div ng-if="inviteContact.hasError" class="alert alert-warning"><i class="fa fa-exclamation-triangle"><\/i> We were unable to invite this contact, please try again or contact Connect support.<\/div>\r\n        <p>An email will be sent to <b>{{ inviteContact.contactDetails.EmailAddresses[0] }}<\/b> inviting them to use Connect.<\/p>\r\n        <p>A new teammate will be created for {{ inviteContact.contactDetails.FirstName }} with the same account access as you.<\/p>\r\n        <div class="row modal-actions">\r\n            <div class="col-xs-12 col-sm-6 action">\r\n                <button ng-click="$dismiss()" class="btn btn-block btn-default">No, cancel<\/button>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-6 action">\r\n                <button ng-click="inviteContact.sendInvitation()" class="btn btn-block btn-primary">Yes, invite<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <page-loading-message ng-if="inviteContact.loading === true" message="Sending invite"><\/page-loading-message>\r\n<\/div>\r\n');n.put("remove-contact-from-connect.html",'<div class="am-modal">\r\n    <div ng-if="removeContact.loading === false">\r\n        <div class="feature-icon">\r\n            <span class="fs-icon" data-feature="single-contact" data-status="trash"><\/span>\r\n        <\/div>\r\n        <h1>Remove {{ removeContact.contactDetails.FirstName + \' \' + removeContact.contactDetails.LastName  }} from Connect?<\/h1>\r\n        <div ng-if="removeContact.hasError" class="alert alert-warning"><i class="fa fa-exclamation-triangle"><\/i> We were unable to request the removal of this contact, please try again or contact Connect support.<\/div>\r\n        <p>{{ removeContact.contactDetails.FirstName }} will be permanently removed<\/p>\r\n        <div class="row modal-actions">\r\n            <div class="col-xs-12 col-sm-6 action">\r\n                <button ng-click="$dismiss()" class="btn btn-block btn-default">No, cancel<\/button>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-6 action">\r\n                <button ng-click="removeContact.removeContact()" class="btn btn-block btn-primary">Yes, remove<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <page-loading-message ng-if="removeContact.loading === true" message="Removing Contact"><\/page-loading-message>\r\n<\/div>\r\n');n.put("side-menu.html",'<div class="connect-panel side-menu">\r\n    <div class="connect-panel-header">\r\n        <h2 ng-if="menuTitle" class="title">{{ menuTitle }}<\/h2>\r\n    <\/div>\r\n    <div class="connect-panel-content">\r\n        <ul ng-transclude><\/ul>\r\n    <\/div>\r\n<\/div>\r\n');n.put("side-menu-item.html",'<li class="side-menu-item" ng-transclude><\/li>\r\n');n.put("accountNotificationToggle.html",'<div>\r\n    <sbu-image class="notification-bu-logo" sbu-code="toggle.account.sbuCode"><\/sbu-image>\r\n    <h3 class="notification-account-name">{{ toggle.account.accountName }}<\/h3>\r\n    <h4 class="notification-account-id">{{ toggle.account.accountId }} <span class="notification-bu-text">({{ toggle.account.sbuCode | sbuName }})<\/span><\/h4>\r\n    <span class="notification-account-toggle" ng-if="!toggle.isReadOnly">\r\n        <label for="notificationToggle{{ $id }}" class="sr-only">Receive notifications<\/label>\r\n        <input type=checkbox ng-model="toggle.account.enabled" id="notificationToggle{{ $id }}">\r\n    <\/span>\r\n    <div ng-if="toggle.isReadOnly" class="alert alert-warning" role="alert">\r\n        You are currently receiving an email notification for this account. To update your preferences contact our accounts team at <a href="mailto:accounts@csr.com.au">accounts@csr.com.au<\/a>.\r\n    <\/div>\r\n<\/div>\r\n');n.put("breadcrumb.html",'<nav aria-label="breadcrumb" class="breadcrumb-component"  ng-class="{\'has-current\': breadcrumb.details.currentPage}">\r\n    <ol>\r\n        <li ng-repeat="item in breadcrumb.details.history" class="history-item">\r\n            <a ui-sref="{{ item.sref }}">{{ item.name }}<\/a>\r\n        <\/li>\r\n        <li class="current-item" aria-current="page" ng-if="breadcrumb.details.currentPage">{{ breadcrumb.details.currentPage }}<\/li>\r\n    <\/ol>\r\n<\/nav>\r\n');n.put("brick-input-component.html",'<div class="brick-selector-component" dropdown is-open="brickInput.isPanelOpen" auto-close="outsideClick">\r\n    <div class="input-group input-group-sm brick-control">\r\n        <span class="input-group-btn">\r\n            <button type="button" ng-disabled="brickInput.disabled || brickInput.isPanelOpen || brickInput.selectedValue === 0" class="btn btn-default" ng-click="brickInput.selectedValueIs( $event, brickInput.previousValue )">\r\n                <i class="fa fa-minus"><\/i>\r\n            <\/button>\r\n        <\/span>\r\n        <input dropdown-toggle class="form-control brick-selector-input brick-number-input" ng-keypress="brickInput.togglePanelVisibility()" type="tel" ng-model="brickInput.selectedValue" readonly="true" id="{{ brickInput.inputId }}" ng-disabled="brickInput.disabled" ng-keypress="keyPress($event)">\r\n        <span class="input-group-btn">\r\n            <button type="button" ng-disabled="brickInput.disabled || brickInput.isPanelOpen || brickInput.selectedValue === brickInput.availableAmount" class="btn btn-default" ng-click="brickInput.selectedValueIs( $event, brickInput.nextValue )">\r\n                <i class="fa fa-plus"><\/i>\r\n            <\/button>\r\n        <\/span>\r\n    <\/div>\r\n    <div class="dropdown-menu brick-panel ng-form form-horizontal" ng-class="{ \'brick-panel-open\' : brickInput.isPanelOpen }">\r\n        <div class="form-group">\r\n            <label class="col-xs-12" for="{{ \'brick-input-\' + $id }}">Qty required<\/label>\r\n            <div class="col-xs-12">\r\n                <input type="tel" id="{{ \'brick-input-\' + $id }}" select-on-click placeholder="Enter Qty" class="form-control brick-selector-qty-required" min="{{brickInput.minValue || 0}}" max="{{brickInput.availableAmount}}" step="{{brickInput.batchSize}}" ng-model="brickInput.requestedValue" ng-change="brickInput.isValueAvailable( brickInput.requestedValue, brickInput.selectedValue )" ng-keyup=" brickInput.isRequestedValueAvailable && brickInput.keyPressed( $event, 13 ) ? brickInput.selectedValueIs( $event, brickInput.requestedValue, brickInput.closeDropdown ) : false">\r\n            <\/div>\r\n        <\/div>\r\n        <div>\r\n            <p>Closest full pack quantities:<\/p>\r\n        <\/div>\r\n        <div class="btn-group btn-group-justified">\r\n            <div class="btn-group">\r\n                <button class="btn brick-selector-previous-closest-qty" ng-click="brickInput.selectedValueIs( $event, brickInput.previousRequestValue )" type="button" ng-disabled="brickInput.selectedValue === brickInput.previousValue && brickInput.requestedValue === brickInput.previousValue" ng-class="brickInput.requestedValue === 0 && brickInput.requestedValue != brickInput.selectedValue ? \'btn-primary\' : \'btn-default\'">{{ brickInput.previousRequestValue }}<\/button>\r\n            <\/div>\r\n            <div class="btn-group">\r\n                <button class="btn brick-selector-next-closest-qty" ng-click="brickInput.selectedValueIs( $event, brickInput.isRequestedValueAvailable && brickInput.requestedValue != 0 && brickInput.requestedValue != brickInput.selectedValue ? brickInput.requestedValue : brickInput.nextRequestValue )" type="button" ng-disabled="brickInput.selectedValue === brickInput.nextValue && brickInput.requestedValue === brickInput.nextValue" ng-class="brickInput.isRequestedValueAvailable && brickInput.requestedValue != 0 && brickInput.requestedValue != brickInput.selectedValue ? \'btn-primary\' : \'btn-default\'">{{ brickInput.isRequestedValueAvailable && brickInput.requestedValue != 0 && brickInput.requestedValue != brickInput.selectedValue ? brickInput.requestedValue : brickInput.nextRequestValue }}<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("calendar.html",'<div class="daterange"><\/div>\r\n');n.put("clock.html","<span class=\"clock\">{{clockCtrl.time.raw | date: 'h:mm a'}}<\/span>\r\n");n.put("csatGoodButton.html",'<div>\r\n    <button class="csat-tray-button" type="button" ng-click="buttonClick()">\r\n        <div class="csat-tray-emoji">\r\n            <span aria-label="good" role="img">\r\n                <svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">\r\n                    <linearGradient gradientUnits="userSpaceOnUse" id="svg-happy-1RCLVi9" x1="32.001" x2="32.001" y1="62" y2="2.001">\r\n                        <stop offset="0" stop-color="#ffa027"><\/stop>\r\n                        <stop offset=".272" stop-color="#ffc151"><\/stop>\r\n                        <stop offset=".763" stop-color="#ffc93f"><\/stop>\r\n                        <stop offset="1" stop-color="#ffe261"><\/stop>\r\n                    <\/linearGradient>\r\n                    <circle cx="32" cy="32" fill="url(#svg-happy-1RCLVi9)" r="30"><\/circle>\r\n                    <circle cx="22" cy="26.5" fill="#302C3B" r="4.5"><\/circle>\r\n                    <circle cx="42" cy="26.5" fill="#302C3B" r="4.5"><\/circle>\r\n                    <path d="M44.991 40.391c-7.913 5.492-18.075 5.488-25.984 0-1.12-.775-1.258.063-.912.722 5.855 11.194 21.957 11.192 27.813 0 .343-.66.207-1.498-.917-.722z" fill="#302C3B"><\/path>\r\n                <\/svg>\r\n            <\/span>\r\n        <\/div>\r\n        <span class="title">Good<\/span>\r\n    <\/button>\r\n<\/div>');n.put("csatNotGoodButton.html",'<div>\r\n    <button class="csat-tray-button" type="button" ng-click="buttonClick()">\r\n        <div class="csat-tray-emoji">\r\n            <span aria-label="not-good" role="img">\r\n                <svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">\r\n                    <linearGradient gradientTransform="matrix(1 0 0 -1 -56 -80)" gradientUnits="userSpaceOnUse" id="svg-very-sad-1RCLVi9" x1="88" x2="88" y1="-142" y2="-82">\r\n                        <stop offset="0" stop-color="#ffa027"><\/stop>\r\n                        <stop offset=".272" stop-color="#ffc151"><\/stop>\r\n                        <stop offset=".763" stop-color="#ffc93f"><\/stop>\r\n                        <stop offset="1" stop-color="#ffe261"><\/stop>\r\n                    <\/linearGradient>\r\n                    <circle cx="32" cy="32" fill="url(#svg-very-sad-1RCLVi9)" r="30"><\/circle>\r\n                    <path d="M22.77 49.527c5.623-4.658 12.843-4.656 18.462 0 .797.658.896-.053.648-.61-4.16-9.5-15.602-9.498-19.762 0-.245.56-.147 1.271.652.61zM17.614 31.572a4.5 4.5 0 1 0 9 0 4.5 4.5 0 0 0-9 0z" fill="#302C3B"><\/path>\r\n                    <path d="M25.961 33.906c-3.95-4.817-9.183-7.976-14.263-10.772-.339-.287-.143-.853.363-.761 3.098.564 10.994 2.419 13.494 4.585 2.31 2.002 1.34 5.523.406 6.948zM41.887 27.072a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z" fill="#302C3B"><\/path>\r\n                    <path d="M38.445 26.958c2.5-2.166 10.396-4.021 13.494-4.585.506-.092.701.474.363.761-5.08 2.797-10.313 5.955-14.264 10.772-.933-1.425-1.903-4.946.407-6.948z" fill="#302C3B"><\/path>\r\n                <\/svg>\r\n            <\/span>\r\n        <\/div>\r\n        <span class="title">Not Good<\/span>\r\n    <\/button>\r\n<\/div>');n.put("csatSpectacularButton.html",'<div>\r\n    <button class="csat-tray-button" type="button" ng-click="buttonClick()">\r\n        <div class="csat-tray-emoji">\r\n            <span aria-label="spectacular" role="img">\r\n                <svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">\r\n                    <linearGradient gradientTransform="matrix(60 0 0 -60 -331.094 3539.094)" gradientUnits="userSpaceOnUse" id="svg-very-happy-1RCLVi9" x1="6.052" x2="6.052" y1="57.952" y2="58.952">\r\n                        <stop offset="0" stop-color="#ffa027"><\/stop>\r\n                        <stop offset=".272" stop-color="#ffc151"><\/stop>\r\n                        <stop offset=".763" stop-color="#ffc93f"><\/stop>\r\n                        <stop offset="1" stop-color="#ffe261"><\/stop>\r\n                    <\/linearGradient>\r\n                    <circle cx="32" cy="32" fill="url(#svg-very-happy-1RCLVi9)" r="30"><\/circle>\r\n                    <linearGradient gradientTransform="matrix(25.2839 0 0 -26.3342 -263.4 1354.091)" gradientUnits="userSpaceOnUse" id="svg-very-happy-3qWaf6Y" x1="12.138" x2="12.403" y1="50.327" y2="51.219">\r\n                        <stop offset="0" stop-color="#b023aa"><\/stop>\r\n                        <stop offset="1" stop-color="#ff3bf6"><\/stop>\r\n                    <\/linearGradient>\r\n                    <path d="M50.791 6.016l1.511 7.805 7.255 3.134a1 1 0 0 1 .097 1.788l-6.92 3.934-.748 7.957a1 1 0 0 1-1.678.638l-5.774-5.387-7.691 1.777a1.001 1.001 0 0 1-1.134-1.392l3.327-7.265-4.022-6.864a1 1 0 0 1 .977-1.499l7.848.908 5.215-6.002a1 1 0 0 1 1.737.468z" fill="url(#svg-very-happy-3qWaf6Y)"><\/path>\r\n                    <linearGradient gradientTransform="matrix(-25.2839 0 0 -26.3342 -218.21 1354.091)" gradientUnits="userSpaceOnUse" id="svg-very-happy-3smKeov" x1="-9.457" x2="-9.192" y1="50.328" y2="51.22">\r\n                        <stop offset="0" stop-color="#b023aa"><\/stop>\r\n                        <stop offset="1" stop-color="#ff3bf6"><\/stop>\r\n                    <\/linearGradient>\r\n                    <path d="M13.607 6.016l-1.512 7.805-7.254 3.134a1 1 0 0 0-.097 1.788l6.92 3.934.748 7.957a.998.998 0 0 0 1.678.638l5.773-5.387 7.691 1.777a1 1 0 0 0 1.135-1.392l-3.328-7.265 4.023-6.864a1 1 0 0 0-.978-1.499l-7.848.908-5.215-6.002a1 1 0 0 0-1.736.468z" fill="url(#svg-very-happy-3smKeov)"><\/path>\r\n                    <path d="M51 37.789c0-.893-.529-2.01-2.037-2.297C45.092 34.756 39.373 34 31.999 34h-.002c-7.367 0-13.09.756-16.961 1.492-1.507.287-2.036 1.404-2.036 2.297C13 45.867 19.271 54 31.997 54h.002C44.729 54 51 45.867 51 37.789z" fill="#302C3B"><\/path>\r\n                    <linearGradient gradientTransform="matrix(16.001 0 0 -3.4249 -264.986 -91.898)" gradientUnits="userSpaceOnUse" id="svg-very-happy-3RRrZIi" x1="18.56" x2="18.56" y1="-41.942" y2="-40.942">\r\n                        <stop offset="0" stop-color="#d63324"><\/stop>\r\n                        <stop offset=".08" stop-color="#dc3f31"><\/stop>\r\n                        <stop offset=".247" stop-color="#e75346"><\/stop>\r\n                        <stop offset=".435" stop-color="#ee6155"><\/stop>\r\n                        <stop offset=".657" stop-color="#f3695d"><\/stop>\r\n                        <stop offset="1" stop-color="#f46c60"><\/stop>\r\n                    <\/linearGradient>\r\n                    <path d="M23.999 50.082c2.313 1.051 4.979 1.668 8 1.668 3.022 0 5.687-.617 8.001-1.668 0 0-4-3.082-8.001-1.082-3.999-2-8 1.082-8 1.082z" fill="url(#svg-very-happy-3RRrZIi)"><\/path>\r\n                    <linearGradient gradientTransform="matrix(31.999 0 0 -5.0013 -288.748 -1.317)" gradientUnits="userSpaceOnUse" id="svg-very-happy-2c3jl78" x1="9.524" x2="10.524" y1="-8.162" y2="-8.162">\r\n                        <stop offset="0" stop-color="#cfd7e6"><\/stop>\r\n                        <stop offset=".037" stop-color="#dae0ec"><\/stop>\r\n                        <stop offset=".126" stop-color="#eef1f6"><\/stop>\r\n                        <stop offset=".215" stop-color="#fbfcfd"><\/stop>\r\n                        <stop offset=".3" stop-color="#fff"><\/stop>\r\n                        <stop offset=".7" stop-color="#fff"><\/stop>\r\n                        <stop offset=".785" stop-color="#fbfcfd"><\/stop>\r\n                        <stop offset=".874" stop-color="#eef1f6"><\/stop>\r\n                        <stop offset=".963" stop-color="#dae0ec"><\/stop>\r\n                        <stop offset="1" stop-color="#cfd7e6"><\/stop>\r\n                    <\/linearGradient>\r\n                    <path d="M46.504 38.037C43.994 37.66 38.688 37 31.999 37s-11.994.66-14.505 1.037c-1.479.221-1.567.76-1.467 1.52.063.451.158 1 .304 1.588.161.652.291.824 1.446.836 2.222.027 26.223.027 28.443 0 1.155-.012 1.28-.184 1.446-.836.146-.588.242-1.137.299-1.588.109-.76.015-1.299-1.461-1.52z" fill="url(#svg-very-happy-2c3jl78)"><\/path>\r\n                <\/svg>\r\n            <\/span>\r\n        <\/div>\r\n        <span class="title">Spectacular<\/span>\r\n    <\/button>\r\n<\/div>');n.put("csatTray.html",'<div ng-if="trayEnabled()">\r\n    <button id="csatButton" class="csatButton" ng-click="openTray()" ng-style="{ \'display\' : trayOpen ? \'none\' : \'block\'}">\r\n        <span>Feedback<\/span>\r\n        <div class="csat-csr-logo">\r\n            <img alt="Feedback" src="/Assets/img/logo_nav_csr-connect_16.png" />\r\n        <\/div>\r\n    <\/button>\r\n\r\n    <div id="csat-tray" class="csat-tray csat-tray-slide-in-enter">\r\n        <button class="close-button" ng-click="closeTray();">\r\n            <i class="color-base">\r\n                <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">\r\n                    <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" fill-rule="nonzero"><\/path>\r\n                <\/svg>\r\n            <\/i>\r\n        <\/button>\r\n\r\n        <h3 class="csat-question" ng-if="step === 1">{{question.Question}}<\/h3>\r\n        <div class="csat-response-buttons" ng-if="step === 1">\r\n            <csat-not-good-button response-click="responseClick(response)"><\/csat-not-good-button>\r\n            <csat-good-button response-click="responseClick(response)"><\/csat-good-button>\r\n            <csat-spectacular-button response-click="responseClick(response)"><\/csat-spectacular-button>\r\n        <\/div>\r\n\r\n        <h3 class="csat-question" ng-if="step === 2">{{question.FollowUpQuestion}}<\/h3>\r\n        <form ng-if="step === 2">\r\n            <textarea class="csat-form-textarea" placeholder="Type your answer here.." rows="5" ng-model="comment"><\/textarea>\r\n            <div class="text-right">\r\n                <button class="csat-submit-button" ng-disabled="comment === \'\'" type="submit" ng-click="submitComment(comment)">SUBMIT<\/button>\r\n            <\/div>\r\n        <\/form>\r\n    <\/div>\r\n<\/div>');n.put("dataQualityRemindLater.html",'<div id="data-quality-remind-later">\r\n    <button type="button" class="btn btn-link" ng-click="remindLaterClicked($event)">Remind me later<\/button>\r\n<\/div>');n.put("dateIcon.html",'<div class="date-icon" ng-class="\'date-icon-\' + dateIcon.dateIconVariant" ng-show="dateIcon.date">\r\n    <span class="date-icon-month" ng-bind="dateIcon.date | date:\'MMMM\'"><\/span>\r\n    <span class="date-icon-date" ng-bind="dateIcon.date | date:\'d\'"><\/span>\r\n<\/div>');n.put("documentSearch.html",'<div ng-show="isOpen" auth-key="Customer/Documents" list-layout="docSearchCtrl">\r\n    <div class="modal-large-overlay"><\/div>\r\n    <div class="modal-large-content">\r\n        <div class="container">\r\n            <div class="row">\r\n                <div class="doc-view col-xs-12">\r\n                    <div class="row">\r\n                        <!-- TITLE BAR, DETAILS BAR + LOADING / EMPTY STATES -->\r\n                        <!-- EMPTY STATE -->\r\n                        <!-- No Data Available is fairly terminal... nothing more we can do here -->\r\n                        <div ng-show="docSearchCtrl.noDataAvailable && !docSearchCtrl.unauthorized" class="col-xs-12 ng-hide">\r\n                            <div class="well well-empty text-center">\r\n                                <p class="lead lead-flush">Document unavailable<\/p>\r\n                                <p>Please contact CSR Connect support<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div ng-show="docSearchCtrl.unauthorized" class="col-xs-12 ng-hide">\r\n                            <div class="well well-empty text-center">\r\n                                <p class="lead lead-flush">Access Denied<\/p>\r\n                                <p>Sorry, you don\'t have permission to view this document.<br /> Please contact us at <a href="mailto:help@csr.com.au&amp;subject =CSR%20Connect%20Permission%20to%20view%document%20denied">help@csr.com.au<\/a> or call us on <strong style="white-space: nowrap">1800 909 439<\/strong>(AU) or <strong style="white-space: nowrap">0800 277 266<\/strong>(NZ).<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- LOADING STATE -->\r\n                        <div ng-hide="docSearchCtrl.noDataAvailable !== null" class="col-xs-12">\r\n                            <div class="loading loading-page">\r\n                                <i><\/i>\r\n                                Loading document&hellip;\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        ﻿<div class="container">\r\n                            <div class="row">\r\n                                <div class="col-xs-12">\r\n                                    <a class="doc-titlebar-close" href="javascript:;" ng-click="docSearchCtrl.close()"><i class="fa fa-lg fa-close"><\/i><span class="sr-only">Close Document Search<\/span><\/a>\r\n                                    <h2>Documents: {{filters.type > 0 ? docSearchCtrl.types[filters.type] : \'All\'}}<\/h2>\r\n\r\n\r\n                                    <!-- TOOLBAR -->\r\n                                    <form novalidate ng-submit="docSearchCtrl.search()">\r\n\r\n                                        <div class="cnct-filters cnct-filters-new">\r\n\r\n                                            <div class="layout-cells block-margin-sm">\r\n\r\n                                                <div class="layout-row">\r\n\r\n                                                    <div class="layout-cell">\r\n                                                        <label class="sr-only">Type<\/label>\r\n                                                        <select class="form-control" filters="filters" filters-field="type" filter-items="filterDocTypes" filter-callback="docSearchCtrl.docTypeFilterChange" id="docs-type-selector">\r\n                                                            <option value="0">All documents<\/option>\r\n                                                            <option value="{{item.Id}}" data-ng-repeat="item in filterItems">\r\n                                                                {{item.Text}}\r\n                                                            <\/option>\r\n                                                        <\/select>\r\n                                                    <\/div>\r\n\r\n                                                    <div class="layout-cell" ng-if="filters.type === \'1\'">\r\n                                                        <label class="sr-only">Sub Type<\/label>\r\n                                                        <select class="form-control" filters="filters" filters-field="subType" filter-items="filterDocSubTypes" id="docs-subtype-selector">\r\n                                                            <option value="{{item.Id}}" data-ng-repeat="item in filterItems">\r\n                                                                {{item.Text}}\r\n                                                            <\/option>\r\n                                                        <\/select>\r\n                                                    <\/div>\r\n\r\n                                                    <div class="layout-cell">\r\n                                                        <label class="sr-only">Status<\/label>\r\n                                                        <select class="form-control" filters="filters" filters-field="status" filter-items="filterStatuses" id="docs-status-selector">\r\n                                                            <option value="{{item.Id}}" data-ng-repeat="item in filterItems">\r\n                                                                {{item.Text}}\r\n                                                            <\/option>\r\n                                                        <\/select>\r\n                                                    <\/div>\r\n\r\n                                                    <div class="layout-cell">\r\n                                                        <label class="sr-only">Flag<\/label>\r\n                                                        <select class="form-control" filters="filters" filters-field="flag" filter-items="filterDocFlags" id="docs-flag-selector">\r\n                                                            <option value="{{item.Id}}" data-ng-repeat="item in filterItems">\r\n                                                                {{item.Text}}\r\n                                                            <\/option>\r\n                                                        <\/select>\r\n                                                    <\/div>\r\n\r\n                                                <\/div>\r\n\r\n                                                <div class="layout-row">\r\n\r\n                                                    <div class="layout-cell layout-cell-primary">\r\n                                                        <label class="sr-only">Search keywords<\/label>\r\n                                                        <input type="search" class="form-control" placeholder="Search {{docSearchCtrl.types[filters.type] | lowercase}}" filters="filters" filters-field="keyword" ng-model-options="{debounce: 800}" id="docs-keyword-input">\r\n                                                    <\/div>\r\n\r\n                                                    <div class="layout-cell">\r\n\r\n                                                    <\/div>\r\n\r\n                                                <\/div>\r\n\r\n                                            <\/div>\r\n\r\n                                            <a id="docs-filter-summary" class="cnct-filters-summary collapsed" data-toggle="collapse" href="#cnct-filters-more">\r\n                                                <i class="fa fa-lg fa-filter cnct-filters-icon"><\/i>\r\n                                                <!-- Document type and date range -->\r\n                                                {{filters.type > 0 ? docSearchCtrl.types[filters.type] : \'All documents\' | titleCase}} dated {{filters.fromDate | date}} - {{filters.toDate | date}}\r\n                                                <!-- Search keyword -->\r\n                                                {{filters.keyword ? \'matching \\\'\' + filters.keyword + \'\\\'\': \'\'}}\r\n                                                {{\'sorted by \' + sortByPresentationName(docs.sortType[filters.sortBy])}}\r\n                                                {{docs.sortOrder[filters.sort]}}\r\n                                                <!-- Toggle text -->\r\n                                                <small class="collapse-on">refine<\/small><small class="collapse-off">hide filters<\/small>\r\n                                            <\/a>\r\n\r\n                                            <div id="cnct-filters-more" class="cnct-filters-more collapse">\r\n                                                <div class="form-inline">\r\n\r\n                                                    <!-- DATE RANGE -->\r\n                                                    <div class="btn-group">\r\n                                                        <div class="cnct-daterange">\r\n                                                            <calendar start="fromDate" end="toDate" filters="filters"><\/calendar>\r\n                                                        <\/div>\r\n                                                    <\/div>\r\n\r\n                                                    <!-- SORT -->\r\n                                                    <div class="form-group">\r\n                                                        <!-- SORT BY -->\r\n                                                        <label class="sr-only">Sort by<\/label>\r\n                                                        <div class="input-group">\r\n\r\n                                                            <select class=" filter-sort-type form-control" filters="filters" filters-field="sortBy" filter-items="filterSortByItems">\r\n                                                                <option value="{{item.Id}}" data-ng-repeat="item in filterItems">\r\n                                                                    {{item.Text}}\r\n                                                                <\/option>\r\n                                                            <\/select>\r\n\r\n                                                            <div class="input-group-addon filter-sort-addon">\r\n                                                                <!-- SORT DIRECTION -->\r\n                                                                <fieldset class="filter-sort-toggle">\r\n                                                                    <legend class="sr-only">Sort direction<\/legend>\r\n\r\n                                                                    <input id="filter-sort-toggle-asc" type="radio" name="filterSortToggle" value="0" filters="filters" filters-field="sort" ng-checked="filters.sort === \'0\'">\r\n                                                                    <label for="filter-sort-toggle-desc"><i class="fa fa-lg fa-sort-amount-asc"><\/i><span class="sr-only">Sort descending<\/span><\/label>\r\n\r\n                                                                    <input id="filter-sort-toggle-desc" type="radio" name="filterSortToggle" value="1" filters="filters" filters-field="sort" ng-checked="filters.sort === \'1\'">\r\n                                                                    <label for="filter-sort-toggle-asc"><i class="fa fa-lg fa-sort-amount-desc"><\/i><span class="sr-only">Sort ascending<\/span><\/label>\r\n                                                                <\/fieldset>\r\n                                                            <\/div>\r\n                                                        <\/div>\r\n                                                    <\/div>\r\n\r\n                                                    <!-- SEARCH \'N\' CLEAR -->\r\n                                                    <div class="form-group">\r\n                                                        <input type="submit" class="btn btn-primary" value="Search" />\r\n                                                        <a href="javascript:;" ng-click="clearFilters()" class="btn btn-link">clear filters<\/a>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/div>\r\n\r\n                                        <\/div>\r\n\r\n                                    <\/form>\r\n\r\n\r\n                                    <!-- Selection bar -->\r\n                                    <!--<div selection-bar data-key="docSearchCtrl" class="component-selection-bar"><\/div>-->\r\n                                    <!-- LIST -->\r\n                                    <div id="docs-list" class="list list-layout list-layout-table" tabindex="-1">\r\n\r\n                                        <!-- TABLE MODE HEADERS -->\r\n                                        <div class="list-layout-table-headers" ng-show="docSearchCtrl.items.length > 0"\r\n                                             selection-check selection-check-auth-key="All/Download" selection-check-auth="r" data-key="docSearchCtrl" data-elements="docSearchCtrl.items" data-checkbox-style-class="component-selection-checkbox" data-checkbox-parent-style-class="component-selection-checkbox-container list-layout-table-th list-layout-table-th-c">\r\n\r\n                                            <span class="list-layout-table-th list-layout-table-th-c" sort-headers>\r\n                                                <a href="javascript:;" sort-header="3"><span class="sr-only">Document <\/span>Type<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 3, \'fa-sort-asc\': filters.sortBy == 3 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 3 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="1">Reference<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 1, \'fa-sort-asc\': filters.sortBy == 1 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 1 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="6">Status<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 6, \'fa-sort-asc\': filters.sortBy == 6 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 6 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="0" ng-if="!docSearchCtrl.isType(filters.type, \'orders\')">Date<\/a>\r\n                                                <a href="javascript:;" sort-header="0" ng-if="docSearchCtrl.isType(filters.type, \'orders\')">Requested for<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 0, \'fa-sort-asc\': filters.sortBy == 0 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 0 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="4">Account<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 4, \'fa-sort-asc\': filters.sortBy == 4 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 4 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="5">Address<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 5, \'fa-sort-asc\': filters.sortBy == 5 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 5 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="docSearchCtrl.isType(filters.type, \'quotes\')" class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="9">Valid to<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 9, \'fa-sort-asc\': filters.sortBy == 9 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 9 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="docSearchCtrl.isType(filters.type, \'orders\')" class="list-layout-table-th" sort-headers>\r\n                                                <a href="javascript:;" sort-header="7">Document date<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 7, \'fa-sort-asc\': filters.sortBy == 7 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 7 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="docSearchCtrl.isType(filters.type, \'orders\')" auth-key="Customer/ProductPricing" class="list-layout-table-th list-layout-currency" sort-headers>\r\n                                                <a href="javascript:;" sort-header="8">Total*<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 8, \'fa-sort-asc\': filters.sortBy == 8 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 8 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="docSearchCtrl.isType(filters.type, \'invoices\')" class="list-layout-table-th list-layout-currency" sort-headers>\r\n                                                <a href="javascript:;" sort-header="11">Total*<\/a>\r\n                                                <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 11, \'fa-sort-asc\': filters.sortBy == 11 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 11 && filters.sort == 1}"><\/i>\r\n                                            <\/span>\r\n                                        <\/div>\r\n\r\n                                        <!-- GRID / TABLE ITEMS -->\r\n                                        <div class="list-item component-selection" ng-repeat="itm in docSearchCtrl.items track by itm.id + (itm.documentKey || \'\')" ng-if="!layout.busy">\r\n\r\n                                            <div class="wrap" selection-check selection-check-auth-key="All/Download" selection-check-auth="r" data-element="itm" data-key="docSearchCtrl" data-checkbox-style-class="component-selection-checkbox" data-checkbox-parent-style-class="component-selection-checkbox-container">\r\n                                                <div class="list-item-icon">\r\n                                                    <img ng-src="{{itm.iconSrc}}" alt="{{itm.typeNameAlt}}">\r\n                                                <\/div>\r\n                                                <h4 class="list-item-h">\r\n                                                    <strong>{{itm.ref}}<\/strong>\r\n                                                    <em ng-show="!(itm.ref | trim)">No reference<\/em>\r\n                                                    <small>#{{itm.id}}<\/small>\r\n                                                <\/h4>\r\n                                                <span doc-status="itm.DocumentStatus" doc-status-message="itm.StatusMessage" class="list-item-meta-h list-item-pull-left"><\/span>\r\n                                                <span class="list-item-meta-h list-item-pull-right list-layout-date">{{itm.Date | date}}<\/span>\r\n                                                <span data-th="Account ID" class="list-item-detail">{{itm.accountId}}<\/span>\r\n                                                <span data-th="Address" class="list-item-sub-h list-item-detail">{{itm.address}}<\/span>\r\n                                                <span ng-if="docSearchCtrl.isType(filters.type, \'quotes\')" data-th="Valid to" class="list-item-detail list-layout-date">{{itm.DocumentSummary.ValidToDate | date}}<\/span>\r\n                                                <span ng-if="docSearchCtrl.isType(filters.type, \'orders\')" data-th="Requested for" class="list-item-detail list-layout-date">{{itm.DocumentSummary.SalesOrderDate | date}}<\/span>\r\n                                                <span ng-if="docSearchCtrl.isType(filters.type, \'orders\')" auth-key="Customer/ProductPricing" data-th="Total*" class="list-item-sub-h list-item-detail list-layout-currency">{{itm.DocumentSummary.TotalAmountIncludingTaxes | currency}}<\/span>\r\n                                                <span ng-if="docSearchCtrl.isType(filters.type, \'invoices\')" data-th="Total*" class="list-item-sub-h list-item-detail list-layout-currency">{{itm.DocumentSummary.total | currency}}<\/span>\r\n                                            <\/div>\r\n                                        <\/div>\r\n\r\n                                        <!-- BUSY STATE -->\r\n                                        <div ng-show="layout.busy" class="loading loading-page">\r\n                                            <i><\/i> Loading documents\r\n                                        <\/div>\r\n\r\n                                        <!-- EMPTY STATE -->\r\n                                        <div class="content-empty" ng-show="!layout.busy && !docSearchCtrl.items.length" style="position: relative">\r\n                                            <span class="content-empty-icon fs-icon" data-feature="document"><\/span>\r\n                                            <h3 class="content-empty-title">No documents found<\/h3>\r\n\r\n                                            <div ng-if="docSearchCtrl.hasActiveFilters()">\r\n                                                <p class="content-empty-instruction">Filtering options are limiting your results.<\/p>\r\n                                                <button class="content-empty-btn btn btn-default" ng-click="clearFilters()">Clear all filters<\/button>\r\n                                            <\/div>\r\n\r\n                                            <div ng-if="!docSearchCtrl.hasExpandedDateFilter() && !docSearchCtrl.hasActiveFilters()">\r\n                                                <p class="content-empty-instruction">Try expanding the date filter for more results.<\/p>\r\n                                                <button class="content-empty-btn btn btn-default" ng-click="docSearchCtrl.expandDateFilter()">Show last 6 months<\/button>\r\n                                            <\/div>\r\n\r\n                                            <div ng-if="docSearchCtrl.hasExpandedDateFilter() && !docSearchCtrl.hasActiveFilters()">\r\n                                                <p class="content-empty-instruction">You can adjust the date range to look further back for historic results.<\/p>\r\n                                            <\/div>\r\n\r\n                                            <a ng-if="docSearchCtrl.isType(filters.type, \'orders\')" class="content-empty-btn btn btn-default" ui-sref="app.orderCreate">Place new order<\/a>\r\n                                        <\/div>\r\n\r\n                                    <\/div>\r\n\r\n                                    <!-- PAGINATION -->\r\n                                    <div class="row list-layout-pager block-margin-sm" ng-show="layout.initialised && docSearchCtrl.items.length">\r\n                                        <div class="col-xs-5 col-sm-4">\r\n                                            <a class="clr btn btn-default btn-block btn-white" href="javascript:;" ng-click="layout.prevPage()" ng-disabled="layout.busy || layout.page <= 1">Prev page<\/a>\r\n                                        <\/div>\r\n                                        <div class="col-xs-2 col-sm-4 list-layout-pager-count">\r\n                                            Page<br>{{layout.page}} / {{layout.pages}}\r\n                                        <\/div>\r\n                                        <div class="col-xs-5 col-sm-4">\r\n                                            <a class="clr btn btn-default btn-block btn-white" href="javascript:;" ng-click="layout.nextPage()" ng-disabled="layout.busy || layout.page === layout.pages">Next page<\/a>\r\n                                        <\/div>\r\n                                    <\/div>\r\n\r\n                                    <p class="footnotes" ng-show="!layout.busy && docSearchCtrl.items.length"><small>* Amounts include any applicable GST.<\/small><\/p>\r\n\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-xs-6 col-xs-push-3 col-md-4 col-md-push-4">\r\n                            <a class="clr btn btn-primary btn-block" href="javascript:;" ng-click="docSearchCtrl.selectDocuments()" ng-disabled="selectionService.getByKey(\'docSearchCtrl\').data.length === 0">Add documents<\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("dots-loader.html",'<div class="dots-loader">\r\n    <div ng-transclude><\/div>\r\n    <span class="dot"><\/span>\r\n    <span class="dot"><\/span>\r\n    <span class="dot"><\/span>\r\n<\/div>\r\n');n.put("feedbackBtns.html",'<div class="feedback-btns-question" ng-hide="fbBtns.submittedMsg">\r\n    <p class="feedback-prompt" ng-bind="fbBtns.promptText"><\/p>\r\n\r\n    <ul class="feedback-btns">\r\n\r\n        <!-- Postive -->\r\n        <li class="feedback-btn feedback-btn-positive">\r\n            <button ng-click="fbBtns.sendFeedback(fbBtns.feedbackTypes.positive)" data-tooltip="Spectactular">\r\n                <svg id="_1" data-name="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 63.09 63.09"><defs><style>.cls-1{fill:#e2e5e9;}.cls-2{fill:#fff;}<\/style><\/defs><circle  class="cls-1" cx="31.55" cy="31.55" r="31.55"/><circle cx="20.11" cy="21.55" r="4.31" style="fill:#fff"/><circle cx="42.98" cy="21.55" r="4.31" style="fill:#fff"/><path d="M14.5,40.5" transform="translate(-0.45 -0.45)" style="fill:#fff"/><path d="M47.72,38H16.88c-1.94,0-3,1.3-2.44,3.15,1.36,4.37,9.08,12.77,17.86,12.77s16.5-8.4,17.87-12.77C50.75,39.3,49.66,38,47.72,38Z" transform="translate(-0.45 -0.45)" style="fill:#fff"/><\/svg>\r\n            <\/button>\r\n        <\/li>\r\n\r\n        <!-- Neutral -->\r\n        <li class="feedback-btn feedback-btn-neutral">\r\n            <button ng-click="fbBtns.sendFeedback(fbBtns.feedbackTypes.neutral)" data-tooltip="Good">\r\n                <svg id="_2" data-name="2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 63.09 63.09"><defs><style>.cls-1{fill:#e2e5e9;}.cls-2{fill:#fff;}<\/style><\/defs><circle  class="cls-1" cx="31.55" cy="31.55" r="31.55"/><circle cx="20.11" cy="21.55" r="4.31" style="fill:#fff"/><circle cx="42.98" cy="21.55" r="4.31" style="fill:#fff"/><path d="M50.74,43.39a30.09,30.09,0,0,1-37.48,0,2.25,2.25,0,0,1-.6-3.2h0a2.34,2.34,0,0,1,3.11.09,26.06,26.06,0,0,0,32.46,0,2.34,2.34,0,0,1,3.11-.09h0A2.25,2.25,0,0,1,50.74,43.39Z" transform="translate(-0.45 -0.45)" style="fill:#fff"/><\/svg>\r\n            <\/button>\r\n        <\/li>\r\n\r\n        <!-- Negative -->\r\n        <li class="feedback-btn feedback-btn-negative">\r\n            <button ng-click="fbBtns.sendFeedback(fbBtns.feedbackTypes.negative)" data-tooltip="Not good">\r\n                <svg id="_3" data-name="3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 63.09 63.09"><defs><style>.cls-1{fill:#e2e5e9;}.cls-2{fill:#fff;}<\/style><\/defs><circle class="cls-1" cx="31.55" cy="31.55" r="31.55"/><circle class="cls-2" cx="20.11" cy="21.55" r="4.31"/><circle class="cls-2" cx="42.98" cy="21.55" r="4.31"/><path class="cls-2" d="M48.23,50a26.06,26.06,0,0,0-32.46,0,2.35,2.35,0,0,1-3.12.09h0a2.26,2.26,0,0,1,.6-3.2,30.1,30.1,0,0,1,37.49,0,2.26,2.26,0,0,1,.6,3.2h0A2.35,2.35,0,0,1,48.23,50Z" transform="translate(-0.45 -0.45)"/><\/svg>\r\n            <\/button>\r\n        <\/li>\r\n\r\n    <\/ul>\r\n<\/div>\r\n\r\n<div class="feedback-btns-response" ng-if="fbBtns.submittedMsg" ng-bind-html="fbBtns.submittedMsg"><\/div>');n.put("flagOptions.html",'<div class="modal-content" role="dialog">\r\n    <ng-form>\r\n        <div class="modal-header">\r\n            <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n            <h4 class="modal-title">Flag colours<\/h4>\r\n        <\/div>\r\n        <div class="modal-body">\r\n            <ul class="component-flag-list">\r\n                <li ng-repeat="flag in flagOptions.availableFlags" class="flag">\r\n                    <label for="{{ $id }}-flag-{{ $index }}">\r\n                        <i class="fa flag-icon" ng-class="\'flag-\' + flag"><\/i>\r\n                        {{ flag | capitalize }}\r\n                        <input type="radio" id="{{ $id }}-flag-{{ $index }}" value="{{ $index }}" ng-model="flagOptions.selectedFlag" name="flags-{{ flagOptions.$id }}">\r\n                    <\/label>\r\n                <\/li>\r\n            <\/ul>\r\n        <\/div>\r\n        <div class="modal-footer">\r\n            <button type="submit" class="btn btn-block btn-primary" style="margin-bottom: 0 !important;" ng-click="flagOptions.update()">Update<\/button>\r\n        <\/div>\r\n    <\/ng-form>\r\n<\/div>\r\n');n.put("flags.html",'<button ng-click="flags.showOptions($event)" class="component-flag-button">\r\n    <i class="fa" ng-class="flags.currentFlagColor ? \'flag-\' + flags.flagsList[flags.currentFlagColor] : \'flag-none\'"><\/i>\r\n<\/button>\r\n');n.put("form-qty-spinner.html",'<div class="qty-spinner">\r\n    <div class="input-group input-group-sm">\r\n        <span class="input-group-btn">\r\n            <button type="button" class="btn btn-default" ng-click="decrement()" ng-disabled="disabled"><i class="fa fa-minus"><\/i><\/button>\r\n        <\/span>\r\n        <span class="input-group-addon" ng-show="prefix" ng-bind="prefix"><\/span>\r\n        <input type="text" inputmode="numeric" pattern="[0-9]+([\\.,][0-9]+)?" id="{{id}}" ng-keypress="keyPress($event)" name="{{id}}" ng-model="val" value="{{val}}" class="form-control" ng-blur="checkValue(false)" ng-change="checkValue(true)" autocapitalize="off" autocorrect="off" autocomplete="off" ng-disabled="disabled" not-dirty select-on-click>\r\n        <span class="input-group-addon" ng-show="postfix" ng-bind="postfix"><\/span>\r\n        <span class="input-group-btn">\r\n            <button type="button" class="btn btn-default" ng-click="increment()" ng-disabled="disabled || val === max"><i class="fa fa-plus"><\/i><\/button>\r\n        <\/span>\r\n    <\/div>\r\n<\/div>\r\n');n.put("form-input-feedback.html",'<div ng-messages="formElement.$error" ng-show="formItemTouched && formItemDirty || parentFormSubmitted" role="alert" class="form-control-status">\r\n    <p ng-repeat="message in feedbackMessages" ng-message="{{ message.error }}" class="form-control-error">\r\n        <i class="fa fa-exclamation-triangle"><\/i> {{ message.message }}\r\n    <\/p>\r\n<\/div>\r\n');n.put("helpCentre.html",'<div class="help-centre" ng-class="{\'help-centre-first-time\': hc.current.firstTime}">\r\n\r\n    <!-- Default content -->\r\n    <div ng-if="!hc.current.content" class="help-centre-content">\r\n        <h2>Help centre<\/h2>\r\n        <p class="lead">If you need a hand, we\'ve got a few options to help you:<\/p>\r\n    <\/div>\r\n\r\n    <!-- Context content -->\r\n    <div id="help-centre-content"><\/div>\r\n\r\n    <!-- Default links -->\r\n    <div class="help-center-standard-links">\r\n        <h3 ng-if="hc.current.content">Need more help?<\/h3>\r\n\r\n        <div class="list-group">\r\n            <a id="faq-help" class="list-group-item"\r\n                href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes#knowledgeBase"\r\n                rel="external" target="_blank"><i class="fa fa-lg fa-fw fa-question-circle"><\/i> FAQ<\/a>\r\n            <a class="list-group-item livechat_button" href="javascript:;" ng-click="hc.showLiveChat()"><i\r\n                    class="fa fa-lg fa-fw fa-comment"><\/i> Live chat<\/a>\r\n            <a id="email-help" class="list-group-item" href="mailto:help@csr.com.au"><i class="fa fa-fw fa-lg fa-envelope"><\/i>\r\n                help@csr.com.au<\/a>\r\n            <div class="list-group-item">\r\n                <i class="fa fa-fw fa-lg fa-phone"><\/i>\r\n                <a id="au-phone" href="tel:1800909439">1800 909 439 <small>AU<\/small><\/a>\r\n                <a id="nz-phone" href="tel:0800277266">0800 277 266 <small>NZ<\/small><\/a>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n    <!-- Buttons: Default or no tour configured -->\r\n    <div class="row" ng-if="!hc.current.firstTime || !hc.current.tour">\r\n        <div class="col-xs-12 col-sm-4 col-sm-offset-4">\r\n            <button class="btn btn-block btn-save">Got it<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Buttons: First time with tour configured -->\r\n    <div class="row" ng-show="hc.current.firstTime && hc.current.tour">\r\n        <div class="col-xs-12 col-sm-6">\r\n            <button tour-link="{{hc.current.tour}}" class="btn btn-block btn-save">Take a tour<\/button>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6">\r\n            <button class="btn btn-block btn-link" ng-click="hc.dismissFirstTime($event)">Dismiss<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("checkBoxListQuestion.html",'<div class="form-group">\r\n    <label class="col-sm-12">\r\n        {{q.qd.Question}}&nbsp;*\r\n        <input type="hidden" name="hasActivitySelectedValidator" ng-model="q.hasActivitySelected" validator="required" />\r\n    <\/label>\r\n    <div ng-repeat="part in q.qd.Parts" class="checkbox col-sm-5 col-sm-offset-1">\r\n        <label class="dq-checkbox-label {{q.isOptionDisabled(part) ? \'disabled\' : \'\'}} {{part.Response===\'Y\' ? option.Class + \' selected\' : option.Class}}" ng-disabled="q.isOptionDisabled(part)">\r\n            <input type="checkbox" ng-model="part.Response" data-ng-true-value="\'Y\'" data-ng-false-value="\'N\'" ng-change="q.optionChecked(part)" ng-disabled="q.isOptionDisabled(part)" />\r\n            {{part.Display}}\r\n        <\/label>\r\n    <\/div>\r\n<\/div>\r\n');n.put("companySizeQuestion.html",'<div class="form-group" ng-repeat="part in q.qd.Parts">\r\n    <label class="col-sm-12">\r\n        {{q.qd.Question}}&nbsp;*\r\n        <input type="hidden" name="validator_{{part.InsightQuestionPartId}}" ng-model="part.Response" validator="required" />\r\n    <\/label>\r\n    <div class="col-sm-10 col-sm-offset-1 company-size-icons">\r\n        <div ng-repeat="option in q.options" class="radio">\r\n            <label class="{{part.Response==option.Display ? option.Class + \' selected\' : option.Class}}" for="option-{{$index}}">\r\n                <input type="radio" id="option-{{$index}}" name="radio_{{part.InsightQuestionPartId}}" ng-model="part.Response" ng-value="option.Display" />\r\n                <span class="icon-label">\r\n                    <span class="icon-text">{{option.Display}}<\/span>\r\n                <\/span>\r\n            <\/label>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("insightQuestions.html",'    <form name="form" form-validator ng-cloak class="form-horizontal insights-questions">\r\n\r\n        <div class="progress-bar-container" ng-if="!insights.loading && showProgress" progress-indicator\r\n             innertext="\'[0]\'"\r\n             outertext=""\r\n             percent="insights.dqStatus.percentComplete"><\/div>\r\n\r\n        <div class="row" ng-if="insights.loading">\r\n            <div class="col-xs-12">\r\n                <div class="loading loading-page">\r\n                    <i><\/i>\r\n                    Loading Company Details&hellip;\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="row" ng-if="!insights.loading">\r\n            <div class="col-xs-12">\r\n                <div class="dq-group-intro" ng-if="insights.activeGroup.Description">\r\n                    <h1>{{insights.activeGroup.Description}}<\/h1>\r\n                <\/div>\r\n                <div ng-repeat="q in insights.activeGroup.Questions">\r\n                    <div ng-if="q.Type==\'CompanySize\'" company-size-question question="q"><\/div>\r\n                    <div ng-if="q.Type==\'CheckboxList\'" checkbox-list-question question="q" form="form"><\/div>\r\n                    <div ng-if="q.Type==\'RadioList\'" radio-list-question question="q"><\/div>\r\n                    <div ng-if="q.Type==\'SubmitList\'" submit-list-question question="q" question-submit="insights.next(insights.activeGroup)"><\/div>\r\n                    <div ng-if="q.Type==\'SelectList\'" select-list-question question="q"><\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="dq-nav-bar" ng-if="!insights.loading && !insights.hasSubmitQuestion">\r\n            <div class="row">\r\n                <div class="col-xs-12 col-sm-4 pull-right">\r\n                    <button type="button" class="btn btn-primary btn-lg btn-block" ng-if="mode==\'create\'" ng-click="insights.next(insights.activeGroup)">{{ insights.hasMoreGroups() ? "Next" : "Complete" }}<\/button>\r\n                <\/div>\r\n                <div class="col-xs-12 col-sm-4 pull-left">\r\n                    <button type="button" class="btn btn-primary btn-lg btn-block" ng-if="mode==\'edit\'" ng-click="insights.next(insights.activeGroup)">Save<\/button>\r\n                    <a data-ng-href="{{navLink}}" class="btn btn-link btn-lg btn-block" ng-if="navLink">{{navLinkDisplay}}<\/a>\r\n                    <span ng-if="showReminder" dq-remind><\/span>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/form>');n.put("radioListQuestion.html",'<div class="form-group" ng-repeat="part in q.qd.Parts">\r\n    <label class="col-sm-12">\r\n        {{part.Display}}&nbsp;*\r\n        <input type="hidden" name="validator_{{part.InsightQuestionPartId}}" ng-model="part.Response" validator="required" />\r\n    <\/label>\r\n    <div class="radio col-sm-10 col-sm-offset-1" ng-repeat="option in part.Options">\r\n        <label class="dq-radio-label {{part.Response==option.Display ? option.Class + \' selected\' : option.Class}}">\r\n            <input type="radio" name="radio_{{part.InsightQuestionPartId}}" ng-model="part.Response" ng-value="option.Display" />\r\n            {{option.Display}}\r\n        <\/label>\r\n    <\/div>\r\n<\/div>\r\n');n.put("selectListQuestion.html",'<div class="form-group" ng-repeat="part in q.qd.Parts">\r\n    <label class="col-sm-12">\r\n        {{part.Display}}&nbsp;*\r\n        <input type="hidden" name="validator_{{part.InsightQuestionPartId}}" ng-model="part.Response" validator="required" />\r\n    <\/label>\r\n    <div class="col-sm-5 col-sm-offset-1">\r\n        <select class="form-control input-lg" ng-model="part.Response" ng-options="option.Display as option.Display for option in part.Options">\r\n            <option value="" ng-if="part.Response===\'\'">Please Select<\/option>\r\n        <\/select>\r\n    <\/div>\r\n<\/div>');n.put("submitListQuestion.html",'<div ng-repeat="part in q.qd.Parts">\r\n    <p class="feedback-notice">\r\n        {{part.Display}}\r\n    <\/p>\r\n    <div class="row feedback-options">\r\n        <div class="col-xs-12 col-sm-8 col-sm-offset-2">\r\n            <div class="row">\r\n                <div class="col-xs-12 col-sm-6" ng-repeat="option in part.Options">\r\n                    <button type="button" class="btn btn-lg btn-block dq-question-submit {{q.getButtonStyle(part,option)}}" ng-click="q.submit(part,option)" has-initial-focus="{{q.isDefaultButton(part,option)}}">{{option.Display}}<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        \r\n    <\/div>\r\n<\/div>');n.put("layout-nav-group.html",'<li class="dropdown" ng-class="{active: active}">\r\n    <a class="dropdown-toggle" data-toggle="dropdown" href="">\r\n        <span ng-if="showNewTag !== undefined && (showNewTag == \'true\' || showNewTag == true)" class="label label-feature label-feature-new label-feature-menu" style="">New<\/span>\r\n        <i ng-if="hasIcon" class="{{ icon }}"><em ng-if="hasIconCaption"> {{ iconCaption }} <\/em><\/i>\r\n        <span class="menu-item-parent" localize="{{ title }}">{{ title }}<\/span>\r\n        <span class="caret"><\/span>\r\n    <\/a>\r\n    <ul class="dropdown-menu" ng-transclude><\/ul>\r\n<\/li>\r\n');n.put("layout-nav-item.html",'<li ng-class="{active: isActive(view)}">\r\n    <a href="{{ getItemUrl(view) }}" target="{{ getItemTarget() }}" title="{{ title }}">\r\n        <i ng-if="hasIcon" class="{{ icon }}"><em ng-if="hasIconCaption"> {{ iconCaption }} <\/em><\/i>\r\n        <span ng-class="{\'menu-item-parent\': !isChild}" localize="{{ title }}"> {{ title }} <\/span>\r\n        <span ng-transclude><\/span>\r\n    <\/a>\r\n<\/li>\r\n');n.put("layout-navigation.html",'<ul class="nav navbar-nav" ng-transclude><\/ul>\r\n');n.put("pagination-nav.html",'<div class="pagination-control" ng-if="!list.busy">\r\n    <div pagination\r\n         max-size="5"\r\n         boundary-links="true"\r\n         rotate="false"\r\n         total-items="list.totalItems"\r\n         items-per-page="list.data.itemsPerPage"\r\n         num-pages="numPages"\r\n         ng-model="list.data.currentPage"\r\n         ng-change="list.changePage()"\r\n         first-text="&laquo;"\r\n         last-text="&raquo;"\r\n         ng-show="numPages > 1"><\/div>\r\n    <div pager\r\n         total-items="list.totalItems"\r\n         items-per-page="list.data.itemsPerPage"\r\n         num-pages="numPages"\r\n         ng-model="list.data.currentPage"\r\n         ng-change="list.changePage()"\r\n         ng-show="numPages > 1"><\/div>\r\n    <span class="pagination-total">\r\n        {{list.totalItems || "0"}} {{ list.config.itemName || "item" }}{{list.totalItems == 1 ? "" : "s"}}\r\n    <\/span>\r\n<\/div>\r\n');n.put("lite-marketing-authenticated.html",'<div id="liteDocsMarketing" class="lite-marketing-growth">\r\n\r\n    <div class="marketing-content">\r\n                \r\n        <div class="brand-logo lite-marketing-hidden-closed">\r\n                <img src="/Assets/img/csr-connect.svg" alt="CSR Connect">\r\n        <\/div>\r\n\r\n        <h1 class="marketing-title">You\'re looking at invoices for <span class="lite-marketing-hidden-full">{{liteMarketing.content.dateIssued | date: \'d MMMM\'}}<\/span><br> \r\n            <span class="lite-marketing-banner" date-icon="liteMarketing.content.dateIssued" date-icon-variant="drop-in"><\/span><\/h1>\r\n\r\n        <p class="marketing-lead">You can <strong>see more<\/strong> by logging in to Connect.<\/p>\r\n\r\n        <button type="button" class="button more-button" ng-click="liteMarketing.openMarketing()">Want to <strong>see more<\/strong> invoices?<\/button>\r\n\r\n        <div class="user-activation-details" ng-if="liteMarketing.requiresActivation && !liteMarketing.isAuthenticated">\r\n            <p ng-if="!liteMarketing.userHasActivatedSuccessfully">\r\n                <button class="button" type="button" ng-click="liteMarketing.activateUser()" ng-hide="liteMarketing.activateUserButtonDisabled">Login to <strong>download<\/strong> and <span class="text-nowrap"><strong>print<\/strong> all invoices<\/span><\/button>\r\n                <button class="button" type="button" ng-show="liteMarketing.activateUserButtonDisabled" disabled>Requesting account&hellip;<\/button>\r\n            <\/p>\r\n            <p class="user-activation-email">{{ liteMarketing.emailAddress }}<\/p>\r\n            <p ng-show="liteMarketing.userHasActivatedSuccessfully" class="user-activated-success"><i class="fa fa-check"><\/i> Email sent<\/p>\r\n            <p ng-hide="liteMarketing.userHasActivatedSuccessfully">\r\n                <button type="button" ng-click="liteMarketing.notYou()" class="btn btn-link">Not you?<\/button>\r\n            <\/p>\r\n        <\/div>\r\n\r\n        <div class="user-registration-details" ng-if="!liteMarketing.requiresActivation || liteMarketing.isAuthenticated">\r\n            <p>\r\n                <a ui-sref="app.signUp.form" class="button" ng-if="!liteMarketing.isAuthenticated">Sign up to Connect for FREE!<\/a>\r\n                <a ui-sref="app.dash" class="button" ng-if="liteMarketing.isAuthenticated">Go to Connect<\/a>\r\n            <\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="close-button">\r\n        <button type="button" ng-click="liteMarketing.closeMarketing()"><i class="fa fa-times"><\/i><\/button>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("lite-marketing-default.html",'<div id="liteDocsMarketing">\r\n\r\n    <div class="marketing-content">\r\n        <div class="brand-logo">\r\n            <img src="/Assets/img/csr-connect.svg" alt="CSR Connect">\r\n        <\/div>\r\n\r\n        <h1 class="marketing-title">Quick and easy access to all your CSR accounts!<\/h1>\r\n        <p class="marketing-lead">CSR Connect gives you 24/7 access to all of your documents, lots of time-saving features and more!<\/p>\r\n\r\n        <button type="button" class="button more-button" ng-click="liteMarketing.openMarketing()">Find out how<\/button>\r\n\r\n        <div class="user-activation-details" ng-if="liteMarketing.requiresActivation && !liteMarketing.isAuthenticated">\r\n            <p class="user-activation-email">{{ liteMarketing.emailAddress }}<\/p>\r\n            <p ng-if="!liteMarketing.userHasActivatedSuccessfully">\r\n                <button experiment-track class="button" type="button" ng-click="liteMarketing.activateUser()" ng-hide="liteMarketing.activateUserButtonDisabled">Login to <strong>download<\/strong> and <span class="text-nowrap"><strong>print<\/strong> all invoices<\/span><\/button>\r\n                <button class="button" type="button" ng-show="liteMarketing.activateUserButtonDisabled" disabled>Requesting account&hellip;<\/button>\r\n            <\/p>\r\n            <p ng-show="liteMarketing.userHasActivatedSuccessfully" class="user-activated-success"><i class="fa fa-check"><\/i> Email sent<\/p>\r\n            <p ng-hide="liteMarketing.userHasActivatedSuccessfully">\r\n                <button type="button" ng-click="liteMarketing.notYou()" class="btn btn-link">Not you?<\/button>\r\n            <\/p>\r\n        <\/div>\r\n\r\n        <div class="user-registration-details" ng-if="!liteMarketing.requiresActivation || liteMarketing.isAuthenticated">\r\n            <p>\r\n                <a ui-sref="app.signUp.form" class="button" ng-if="!liteMarketing.isAuthenticated">Sign up to Connect for FREE!<\/a>\r\n                <a ui-sref="app.dash" class="button" ng-if="liteMarketing.isAuthenticated">Go to Connect<\/a>\r\n            <\/p>\r\n        <\/div>\r\n\r\n        <ul class="feature-list">\r\n            <li class="feature-item feature-search">\r\n                <i class="feature-icon fa fa-file-text-o"><\/i>\r\n                <h2 class="feature-title">Paperwork<\/h2>\r\n                <p class="feature-description">Search, view and download all orders and invoices<\/p>\r\n            <\/li>\r\n            <li class="feature-item feature-download">\r\n                <i class="feature-icon fa fa-calendar-check-o"><\/i>\r\n                <h2 class="feature-title">Statements<\/h2>\r\n                <p class="feature-description">View and download your monthly statements<\/p>\r\n            <\/li>\r\n            <li class="feature-item feature-share">\r\n                <i class="feature-icon fa fa-dollar"><\/i>\r\n                <h2 class="feature-title">Pricing<\/h2>\r\n                <p class="feature-description">Search products and view your unique pricing<\/p>\r\n            <\/li>\r\n        <\/ul>\r\n    <\/div>\r\n\r\n    <div class="close-button">\r\n        <button type="button" ng-click="liteMarketing.closeMarketing()"><i class="fa fa-times"><\/i><\/button>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("lite-marketing.html",'<div>\r\n\r\n    <!-- Unauthenticated content -->\r\n    <div ng-if="!liteMarketing.isAuthenticated && !hasCustomMarketing && !loadingMarketing">\r\n        <div ng-include="\'lite-marketing-authenticated.html\'"><\/div>\r\n    <\/div>\r\n\r\n    <!-- Default -->\r\n    <div ng-if="liteMarketing.isAuthenticated && !hasCustomMarketing && !loadingMarketing">\r\n        <div ng-include="\'lite-marketing-default.html\'"><\/div>\r\n    <\/div>\r\n    \r\n    <!-- BU Specific Marketing -->\r\n    <!--<div ng-if="hasCustomMarketing && !loadingMarketing">\r\n        <div class="marketing-container hidden-xs" ng-hide="loadingMarketing || !hasCustomMarketing">\r\n            <a ng-click="customMarketingRedirect()" ng-if="customMarketing != undefined && customMarketing.url != undefined" style="cursor: pointer;">\r\n                <img ng-src="{{customMarketing.image}}" />\r\n            <\/a>\r\n            <img ng-src="{{customMarketing.image}}" ng-if="customMarketing != undefined && customMarketing.image != undefined && customMarketing.url == undefined" />\r\n        <\/div>\r\n    <\/div>-->\r\n\r\n<\/div>\r\n');n.put("lite-user-activation-error.html",'<div id="liteUserActivationModal">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="technical" data-status="warning"><\/span>\r\n    <\/div>\r\n    <h1>Something went wrong!<\/h1>\r\n    <p class="lead">Unfortunately we were unable to give you access to Connect. Please try again.<\/p>\r\n    <p>If the problem persists please contact support, either through the details on this screen or the live chat.<\/p>\r\n    <div class="back-button"><button class="btn btn-block btn-lg" ng-click="$close()">Back to your invoices<\/button><\/div>\r\n<\/div>\r\n');n.put("lite-user-activation-success.html",'<div id="liteUserActivationModal">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="email" data-status="success"><\/span>\r\n    <\/div>\r\n    <h1>You\'ve got mail!<\/h1>\r\n    <p class="lead">We\'ve sent you a welcome email with a link to login.<\/p>\r\n    <p>If you do not receive this email please check your spam folder.<\/p>\r\n    <div class="back-button"><button class="btn btn-block btn-lg" ng-click="$close()">Back to your invoices<\/button><\/div>\r\n<\/div>\r\n');n.put("lookupAddress.html",'<ng-form name="deliveryAddress">\r\n    <div id="delivery-address">\r\n        <label for="field-addressline1{{lookupAddress.instanceId}}">{{prompt}}<\/label>\r\n\r\n        <p class="form-control-error" ng-if="lookupAddress.getAddressErrors()">\r\n            <i class="fa fa-exclamation-triangle"><\/i> \r\n            {{lookupAddress.getAddressErrors()}}\r\n        <\/p>\r\n\r\n        <div class="form-group">\r\n            <label for="field-lot{{lookupAddress.instanceId}}" class="sr-only">Lot/Unit (optional)<\/label>\r\n            <input name="LotUnit" ng-model="address.LotUnit" class="form-control" type="text" placeholder="Lot/Unit (optional)" id="field-lot{{lookupAddress.instanceId}}" ng-change="lookupAddress.addressChange()" ng-keypress="lookupAddress.nextField($event, \'field-addressline2\' + lookupAddress.instanceId)" />\r\n        <\/div>\r\n        <!-- address line 1 -->\r\n        <div class="form-group" ng-if="country == \'NZ\'">\r\n            <label for="field-addressline1{{lookupAddress.instanceId}}" class="sr-only">Street Address<\/label>\r\n            <input class="form-control" id="field-addressline1{{lookupAddress.instanceId}}" name="Street address" type="text" placeholder="Street address" ng-model="address.AddressLine1" ng-change="lookupAddress.validateAddressAutoComplete();" details="lookupAddress.placeSearch.result" options="lookupAddress.placeSearch.options" ng-model-options="{updateOn:\'blur\'}" autocomplete="off" ng-autocomplete-touch-fix ng-required="addressRequired" ng-keypress="lookupAddress.nextField($event, \'field-addressline2\' + lookupAddress.instanceId)">\r\n        <\/div>\r\n        <div class="form-group" ng-if="country != \'NZ\'">\r\n            <label for="field-addressline2{{lookupAddress.instanceId}}" class="sr-only">Street Address<\/label>\r\n            <input class="form-control" id="field-addressline2{{lookupAddress.instanceId}}" name="Street address" type="text" placeholder="Street address" ng-model="address.AddressLine1" ng-change="lookupAddress.validateAddressAutoComplete();" details="lookupAddress.placeSearch.result" options="lookupAddress.placeSearch.options" ng-model-options="{updateOn:\'blur\'}" autocomplete="off" ng-autocomplete-touch-fix ng-required="addressRequired" ng-autocomplete ng-keypress="lookupAddress.nextField($event, \'field-suburb\' + lookupAddress.instanceId)">\r\n        <\/div>\r\n        <div class="row row-form">\r\n            <!-- suburb -->\r\n            <div class="form-group col-sm-6" ng-if="addressRequired">\r\n                <label for="field-suburb{{lookupAddress.instanceId}}" class="sr-only">Suburb or town<\/label>\r\n                <input class="form-control" id="field-suburb{{lookupAddress.instanceId}}" name="Suburb or town" type="text" placeholder="Suburb or town" ng-model="address.Suburb" ng-change="lookupAddress.validateAddressAutoComplete()" details="lookupAddress.placeSearch.result" options="lookupAddress.citiesSearch.options" ng-model-options="{updateOn:\'blur\'}" required autocomplete="off" ng-autocomplete-touch-fix ng-required="addressRequired" ng-autocomplete ng-keypress="lookupAddress.nextField($event, \'field-state\' + lookupAddress.instanceId)">\r\n            <\/div>\r\n            <div class="form-group col-sm-6" ng-if="!addressRequired">\r\n                <label for="field-suburb2{{lookupAddress.instanceId}}" class="sr-only">Suburb or town<\/label>\r\n                <input class="form-control" id="field-suburb2{{lookupAddress.instanceId}}" name="Suburb or town" type="text" placeholder="Suburb or town" ng-model="address.Suburb" ng-change="lookupAddress.validateAddressAutoComplete()" details="lookupAddress.placeSearch.result" options="lookupAddress.citiesSearch.options" ng-model-options="{updateOn:\'blur\'}" autocomplete="off" ng-autocomplete-touch-fix ng-required="addressRequired" ng-autocomplete ng-keypress="lookupAddress.nextField($event, \'field-state\' + lookupAddress.instanceId)">\r\n            <\/div>\r\n            <!-- country -->\r\n            <div class="form-group col-sm-6">\r\n                <label for="field-country" class="sr-only">Country<\/label>                \r\n                <div id="field-country" class="form-control form-control-static">\r\n                    {{country}}\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row row-form">\r\n            <!-- State -->\r\n            <div class="form-group col-sm-6">\r\n                <label for="field-state{{lookupAddress.instanceId}}" class="sr-only">State<\/label>\r\n                <select class="form-control" ng-disabled="availableStates.length <= 1" ng-options="x for x in availableStates" id="field-state{{lookupAddress.instanceId}}" name="State{{lookupAddress.instanceId}}" ng-model="address.State" ng-change="lookupAddress.addressChange()" ng-keypress="lookupAddress.nextField($event, \'field-postcode1\' + lookupAddress.instanceId)">\r\n                <\/select>\r\n            <\/div>\r\n            <!-- Postcode -->\r\n            <div class="form-group col-sm-6" ng-if="addressRequired">\r\n                <label for="field-postcode1{{lookupAddress.instanceId}}" class="sr-only">Postcode*<\/label>\r\n                <input class="form-control" type="text" placeholder="Post code" id="field-postcode1{{lookupAddress.instanceId}}" name="Postcode" ng-model="address.Postcode" ng-change="lookupAddress.addressChange()" ng-model-options="{updateOn:\'blur\'}" ng-maxlength="10" required ng-keypress="lookupAddress.nextField($event, \'field-deliveryType\' + lookupAddress.instanceId)">\r\n            <\/div>\r\n            <div class="form-group col-sm-6" ng-if="!addressRequired">\r\n                <label for="field-postcode2{{lookupAddress.instanceId}}" class="sr-only">Postcode*<\/label>\r\n                <input class="form-control" type="text" placeholder="Post code" id="field-postcode2{{lookupAddress.instanceId}}" name="Postcode" ng-model="address.Postcode" ng-change="lookupAddress.addressChange()" ng-model-options="{updateOn:\'blur\'}" ng-maxlength="10">\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/ng-form>\r\n\r\n');n.put("modal-empty-message.html",'<div class="content-empty">\r\n    <span class="content-empty-icon fs-icon" data-feature="empty"><\/span>\r\n    <h3 class="content-empty-title">We looked, but couldn\'t find anything.<\/h3>\r\n    <p>Please try again or contact Connect support.<\/p>\r\n<\/div>\r\n');n.put("modal-loading-message.html",'<div class="loading loading-page fx-fade">\r\n    <i><\/i> {{ message }}&hellip;\r\n<\/div>\r\n');n.put("page-empty-message.html",'<div class="row">\r\n    <div class="content-empty">\r\n\r\n        <span ng-show="showIcon" class="content-empty-icon fs-icon" data-feature="{{ feature }}"><\/span>\r\n        <h3 class="content-empty-title">{{ title }}<\/h3>\r\n        <p ng-show="showMessage">{{ message }}<\/p>\r\n        <ng-transclude><\/ng-transclude>\r\n    <\/div>\r\n<\/div>\r\n');n.put("page-error-message.html",' <div class="row">\r\n    <div class="content-empty">\r\n\r\n        <span class="content-empty-icon fs-icon" data-feature="{{ feature }}"><\/span>\r\n        <h3 class="content-empty-title">{{ title }}<\/h3>\r\n        <p>{{ message }}<\/p>\r\n\r\n    <\/div>\r\n<\/div>');n.put("page-loading-message.html",'<div class="row">\r\n    <div class="col-xs-12">\r\n        <div class="loading loading-page fx-fade" tabindex="-1">\r\n            <i><\/i> {{ message }}&hellip;\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("expandingPanel.html",'<div class="expanding-panel" ng-class="{isCollapsed: isCollapsed === true && canCollapse === true, canCollapse: canCollapse === true}" ng-style="collapsedStyle">\r\n    <ng-transclude><\/ng-transclude>\r\n    <button ng-if="canCollapse === true" ng-click="toggleExpansion()" class="panel-button" ng-class="{\'expanding-button\': isCollapsed === true}">Show {{message}}<\/button>\r\n<\/div>');n.put("progressIndicator.html",'<div id="progress-indicator">\r\n    <div class="progress progress-indicator" ng-class="{ \'progress-indicator-skinny\': progressIndicator.innertext ==\'\'}">\r\n        <div class="progress-bar progress-bar-success"\r\n             style="min-width: 0px;"\r\n             ng-style="{\'width\': progressIndicator.percent + \'%\'}"\r\n             role="progressbar"\r\n             aria-valuemin="0"\r\n             aria-valuenow="{{progressIndicator.percent}}"\r\n             aria-valuemax="100"\r\n             ng-class="{\'no-progress\': !progressIndicator.percent}">\r\n            <div class="progress-indicator-display" ng-bind-html="progressIndicator.innertext"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div ng-bind-html="progressIndicator.outertext"><\/div>\r\n<\/div>');n.put("request-password-reset-error.html",'<div class="feature-icon">\r\n    <span class="fs-icon" data-feature="technical" data-status="warning"><\/span>\r\n <\/div>\r\n<h1>Something went wrong!<\/h1>\r\n<p class="lead">We were unable to send you a password reset link.<\/p>\r\n<p>Please try again, or <a ui-sref="app.contact">contact Connect support<\/a>.<\/p>\r\n<p class="modal-button"><button type="button" class="btn btn-primary btn-lg btn-block" ng-click="passwordReset.$dismiss(\'Error requesting link\')">Ok<\/button><\/p>\r\n');n.put("request-password-reset-prompt.html",'<div ng-hide="passwordReset.requestInProgress">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="user"><\/span>\r\n    <\/div>\r\n    <h1>Request a password reset?<\/h1>\r\n    <p class="lead">A link will be sent to {{ passwordReset.details.Email }}<\/p>\r\n    <div vc-recaptcha\r\n         class="recaptcha-element"\r\n         on-create="passwordReset.captchaLoading = false"\r\n         on-success="passwordReset.requestPasswordReset(response)"\r\n         on-error="passwordReset.reCaptchaErrorHandler()">\r\n     <\/div>\r\n\r\n    <div class="row modal-button">\r\n        <div class="col-xs-6">\r\n            <button type="button" class="btn btn-primary btn-lg btn-block" ng-disabled="passwordReset.captchaLoading" ng-click="passwordReset.validateReCaptcha()">Ok<\/button>\r\n        <\/div>\r\n        <div class="col-xs-6">\r\n            <button type="button" class="btn btn-link btn-lg btn-block" ng-click="$close()">Cancel<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div ng-show="passwordReset.requestInProgress">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="user"><\/span>\r\n    <\/div>\r\n    <h1>Requesting a password reset<\/h1>\r\n    <p class="lead">This may take a moment&hellip;<\/p>\r\n<\/div>\r\n');n.put("request-password-reset-success.html",'<div class="feature-icon">\r\n    <span class="fs-icon" data-feature="email" data-status="success"><\/span>\r\n<\/div>\r\n<h1>You\'ve got mail<\/h1>\r\n<p class="lead">A password reset link has been sent to {{ passwordReset.details.Email }}.<\/p>\r\n<p>If you do not receive this email, please <a ui-sref="app.contact">contact Connect support<\/a>.<\/p>\r\n<p class="modal-button"><button type="button" class="btn btn-primary btn-lg btn-block" ng-click="passwordReset.$close(\'Link sent\')">Ok<\/button><\/p>\r\n');n.put("request-password-reset.html",'<div id="requestPasswordResetModal">\r\n    <div ng-include="passwordReset.message"><\/div>\r\n<\/div>\r\n');n.put("sbu-image.html",'<img ng-src="{{ imgUrl }}" alt="{{ imgAlt }}" class="sbu-image">\r\n');n.put("selection-checkbox.html",'<div ng-class="divStyleClass">\r\n    <span data-auth-key="{{ dataAuthKey }}" data-auth="{{ dataAuth }}" ng-class="checkboxParentStyleClass" ng-click="spanClick($event);" ng-hide="layout.busy">\r\n        <input type="checkbox" ng-change="checkitem()" ng-click="preventClickPropagation($event)" ng-Model="element.checked" ng-class="checkboxStyleClass" />\r\n    <\/span>\r\n    <ng-transclude-replace><\/ng-transclude-replace>\r\n<\/div>\r\n');n.put("selection.bar.html",'<div ng-show="count > 0" class="layout-cells layout-cells-middle ng-hide">\r\n    \r\n    <div class="layout-cell layout-cell-fit">\r\n        <span class="badge">{{count}}<\/span>\r\n        <span class="sr-only"> <\/span>\r\n    <\/div>\r\n\r\n    <div class="layout-cell">\r\n        <span class="component-selection-bar-title">{{pluralize(\'Document\', count)}} selected.<\/span>\r\n    \r\n        <div class="component-selection-bar-options">\r\n            <a href ng-click="selectall()">\r\n                <span class="hidden-sm hidden-md hidden-lg">Select all<\/span>\r\n                <span class="hidden-xs">Select all {{totalCount}} documents.<\/span>\r\n            <\/a>\r\n\r\n            <span>|<\/span>\r\n\r\n            <a href ng-click="clear()">\r\n                <span class="hidden-sm hidden-md hidden-lg">Clear<\/span>\r\n                <span class="hidden-xs">Clear selection<\/span>\r\n            <\/a>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class="layout-cell">\r\n        <div class="dropdown pull-right">\r\n            <button id="btn-download-selector" class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown">\r\n                <i class="fa fa-fw fa-download"><\/i>\r\n                <span class="hidden-xs ng-binding">Download as&hellip;<\/span>\r\n                <span class="sr-only">Export<\/span>\r\n                <b class="caret"><\/b>\r\n            <\/button>\r\n            <ul class="dropdown-menu" role="menu" aria-labelledby="table-exports-menu">\r\n                <li><a id="btn-download-pdf" role="menuitem" href="javascript:;" class="ng-binding" ng-click="download(\'Enums.documentDownloadType.pdfFullDocument\')"><i class="fa fa-fw fa-file-pdf-o"><\/i> PDF<\/a><\/li>\r\n                <li><a id="btn-download-excel" role="menuitem" href="javascript:;" class="ng-binding" ng-click="download(\'Enums.documentDownloadType.xlsxSummary\')"><i class="fa fa-fw fa-file-excel-o"><\/i> Excel<\/a><\/li>\r\n                <li><a id="btn-download-csv" role="menuitem" href="javascript:;" class="ng-binding" ng-if="!docs.isType(filters.type, \'all\')" ng-click="download(\'Enums.documentDownloadType.csvSummary\')"><i class="fa fa-fw fa-file-text-o"><\/i> CSV<\/a><\/li>\r\n            <\/ul>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>');n.put("print-dialogue.html",'<div id="printDialogueModal">\r\n    <div class="feature-icon">\r\n        <span class="fs-icon" data-feature="print"><\/span>\r\n    <\/div>\r\n    <h1>Preparing your document<\/h1>\r\n    <p class="lead">This may take a moment&hellip;<\/p>\r\n<\/div>\r\n');n.put("support-dykPanel.html",'<div class="support-dyk-panel">\r\n    <div class="support-dyk-panel-content">\r\n        <strong class="support-dyk-panel-heading">Did you know?<\/strong>\r\n        <ng-transclude />\r\n    <\/div>\r\n<\/div> ');n.put("support-tip.html",'<a href="#{{tip.tipId}}" id="payments-help-btn" class="btn btn-support support-tip-toggle"><i\r\n        class="fa fa-lg fa-question-circle"><\/i> Help<span class="hidden-xs"> with payments<\/span><\/a>\r\n<div id="{{ tip.tipId }}" class="support-tip-content">\r\n    <i class="fa fa-3x fa-question-circle support-tip-icon"><\/i>\r\n    <div ng-bind-html="tip.tipContent"><\/div>\r\n    <a href="javascript:;" class="support-tip-close support-tip-toggle">\r\n        <i class="fa fa-lg fa-close support-tip-toggle"><\/i>\r\n    <\/a>\r\n<\/div>');n.put("table-headers.html",'<th ng-repeat="head in tableHeaders" ng-class="head.className ? head.className : \'\'"  data-auth-key="{{head.authKey ? head.authKey : \'\'}}" data-auth="{{head.auth ? head.auth : \'\'}}">\r\n    <input ng-if="head.checkbox" type="checkbox" name="selectAll" ng-model="selectAll" ng-true-value="\'all\'" ng-false-value="\'none\'" ng-change="tableSelectAll()" />\r\n    <a href="javascript:;" ng-show="head.columnName" ng-click="list.sort(head.columnName, list.asc)">{{ head.displayName || head.columnName}}<\/a><span ng-hide="head.columnName">{{ head.displayName }}<\/span>\r\n    &nbsp;<i class="fa" ng-show="head.columnName && (head.sortable == undefined || head.sortable == true) " ng-class="{\'fa-sort\': list.sortColumn != head.columnName, \'fa-sort-up\': list.asc && list.sortColumn == head.columnName, \'fa-sort-down\': !list.asc && list.sortColumn == head.columnName}"><\/i>\r\n<\/th>\r\n');n.put("tour-layout.html",'<div class="loading"><i><\/i><\/div>\r\n');n.put("companyDetails.html",'<div class="row row-form">\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="companyName" class="control-label">Trading name*<\/label>\r\n        <input id="companyName" name="CompanyName" type="text" class="form-control input-lg" data-ng-model="dc.model.CompanyName" data-validator="required" />\r\n    <\/div>\r\n\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="abn" class="control-label">ABN/NZBN<\/label>\r\n        <input id="abn" name="ABN" type="text" class="form-control input-lg" maxlength="16" data-ng-model="dc.model.ABN" />\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="row row-form">\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="position" class="control-label">Your position*<\/label>\r\n        <select id="position" name="Position" class="form-control input-lg" data-ng-model="dc.selectedPosition" data-ng-change="dc.selectedPositionChange()" data-validator="required">\r\n            <option value="">Please select<\/option>\r\n            <option data-ng-repeat="position in dc.positions">{{position}}<\/option>\r\n        <\/select>\r\n    <\/div>\r\n\r\n    <div class="form-group col-xs-12 col-sm-6" data-ng-if="dc.selectedPosition === \'Other\'">\r\n        <label for="otherPosition" class="control-label">(Other)<\/label>\r\n        <input id="otherPosition" name="Position" type="text" class="form-control input-lg" data-ng-model="dc.model.Position" data-validator="required" />\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="row row-form">\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="country" class="control-label">Country*<\/label>\r\n        <select id="country" name="Country" data-ng-model="dc.model.Country" data-ng-change="dc.countryChange()" class="form-control input-lg" validator="required">\r\n            <option selected value="">Please select<\/option>\r\n            <option value="AU">Australia<\/option>\r\n            <option value="NZ">New Zealand<\/option>\r\n        <\/select>\r\n    <\/div>\r\n\r\n    <div class="form-group col-xs-12 col-sm-6" data-ng-if="dc.model.Country === \'AU\'">\r\n        <label for="state" class="control-label">State*<\/label>\r\n        <select id="state" name="State" class="form-control input-lg" data-ng-model="dc.model.State" data-ng-change="dc.stateChange()" validator="required">\r\n            <option selected value="">Please select<\/option>\r\n            <option value="ACT">ACT<\/option>\r\n            <option value="NSW">NSW<\/option>\r\n            <option value="NT">NT<\/option>\r\n            <option value="QLD">QLD<\/option>\r\n            <option value="SA">SA<\/option>\r\n            <option value="TAS">TAS<\/option>\r\n            <option value="VIC">VIC<\/option>\r\n            <option value="WA">WA<\/option>\r\n        <\/select>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="row row-form">\r\n    <div class="form-group col-xs-12 flush">\r\n        <label class="control-label">Contact numbers*<\/label>\r\n    <\/div>\r\n\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="mobile" class="control-label" data-tooltip-placement="top" data-tooltip="The mobile phone number may be used for security and verification purposes">Mobile <i class=" fa fa-info-circle text-info"><\/i><\/label>\r\n        <input name="MobileCombinedNumbers" type="hidden" data-ng-model="dc.combinedNumbers" data-validator="contactNumberRequired" />\r\n        <input id="mobile" name="Mobile" type="text" class="form-control input-lg" data-ng-model="dc.model.Mobile" data-ng-blur="dc.validateTelephones()" data-validator="mobile" />\r\n    <\/div>\r\n\r\n    <div class="form-group col-xs-12 col-sm-6">\r\n        <label for="phone" class="control-label">Phone<\/label>\r\n        <input name="PhoneCombinedNumbers" type="hidden" data-ng-model="dc.combinedNumbers" data-validator="contactNumberRequired" />\r\n        <input id="phone" name="Phone" type="text" class="form-control input-lg" data-ng-model="dc.model.Phone" data-ng-blur="dc.validateTelephones()" data-validator="phone" />\r\n    <\/div>\r\n<\/div>\r\n');n.put("dqUserAvatar.html",'<div class="row">\r\n    <div class="col-xs-12 text-center">\r\n        <div class="profile-welcome-user-info">\r\n            <img src="/Assets/img/blank.gif" data-ng-src="{{session.user.avatarUrl}}" ng-show="hasProfileImage(session.user.avatarUrl)" width="150" height="150" alt="">\r\n            <div ng-hide="hasProfileImage(session.user.avatarUrl)" ng-letter-avatar initials="session.user.fullName" width="150" height="150" fontsize="7"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n<div class="row">\r\n    <div class="col-xs-12 col-sm-4 col-sm-offset-4 text-center">\r\n        <div class="btn btn-link btn-upload"\r\n                upload-button\r\n                data-url="{{avatarUploadUrl}}"\r\n                data-on-upload="avatarUpload(response)"\r\n                data-on-success="avatarSuccess(response)"\r\n                data-on-error="avatarError(response)">\r\n            Upload image <span class="loading ng-hide" data-ng-show="avatarUploading"><i><\/i><\/span>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("userAvatar.html",'<div class="avatar btn-upload"\r\n        upload-button\r\n        data-url="{{avatarUploadUrl}}"\r\n        data-on-upload="avatarUpload(response)"\r\n        data-on-success="avatarSuccess(response)"\r\n        data-on-error="avatarError(response)">\r\n    <img src="/Assets/img/blank.gif" data-ng-src="{{session.user.avatarUrl}}" alt="User image thumbnail" />\r\n    <span class="avatar-caption">\r\n        <span class="fa-stack">\r\n            <i class="fa fa-circle fa-stack-2x"><\/i>\r\n            <i class="fa fa-gear fa-stack-1x fa-inverse"><\/i>\r\n        <\/span>\r\n    <\/span>\r\n<\/div>\r\n');n.put("userDetails.html",'    <div class="row row-form">\r\n        <div class="form-group col-xs-12 col-sm-5">\r\n            <label for="firstName" class="control-label">First name*<\/label>\r\n            <input id="firstName" name="FirstName" type="text" class="form-control input-lg" data-ng-model="dc.model.FirstName" data-validator="required, name" />\r\n        <\/div>\r\n        <div class="form-group col-xs-12 col-sm-7">\r\n            <label for="lastName" class="control-label">Last name*<\/label>\r\n            <input id="lastName" name="LastName" type="text" class="form-control input-lg" data-ng-model="dc.model.LastName" data-validator="required, name" />\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="form-group">\r\n        <label for="emailAddress" class="control-label">Email*<\/label>\r\n        <div ng-messages="(form.$submitted || form.EmailAddress.$dirty) && form.EmailAddress.$error" role="alert" class="form-control-status">\r\n            <p ng-message="required" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please enter an email address.<\/p>\r\n            <p ng-message="email" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please provide a valid email address<\/p>\r\n            <p ng-message="uniqueComboEmailUsername" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> This email address has already been used, Please try another one.<\/p>\r\n        <\/div>\r\n        <input id="emailAddress" name="EmailAddress" type="email"\r\n               placeholder="you@example.com"\r\n               class="form-control input-lg" data-ng-model="dc.model.EmailAddress"\r\n               ng-model-options="{ updateOn: \'default blur\', debounce: {\'default\': 300, \'blur\': 0} }"\r\n               ng-disabled="dc.model.IsConnectLiteUser"\r\n               required valid-email unique-combo-email-username />\r\n    <\/div>\r\n\r\n    <div class="form-group" data-ng-if="dc.usernameVisible && dc.usernameEnabled">\r\n        <label for="username" class="control-label">Username*<\/label>\r\n        <div ng-messages="(form.$submitted || form.Username.$dirty) && form.Username.$error" role="alert" class="form-control-status">\r\n            <p ng-message="required" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please enter a username.<\/p>\r\n            <p ng-message="username" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please provide an email address or a username of at least 6 characters, using letters and numbers only.<\/p>\r\n            <p ng-message="uniqueComboEmailUsername" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> This username is not available, Please try another one.<\/p>\r\n        <\/div>\r\n        <input id="username" name="Username" type="text"\r\n                class="form-control input-lg" data-ng-model="dc.model.Username"\r\n                ng-model-options="{ updateOn: \'default blur\', debounce: {\'default\': 300, \'blur\': 0} }"\r\n                required valid-username unique-combo-email-username />\r\n    <\/div>\r\n\r\n    <div class="form-group" data-ng-if="dc.usernameVisible && !dc.usernameEnabled">\r\n        <span class="control-label">Username<\/span>\r\n        <p id=\'username\' class="form-control-static">{{dc.model.Username}}<\/p>\r\n    <\/div>\r\n\r\n    <!-- CPR-5576: Do not allow users to set their own password for now -->\r\n    <!-- <div class="form-group" data-ng-if="dc.passwordVisible">\r\n        <label for="password" class="control-label">Password *<\/label>\r\n        <input id="password" name="Password" type="password" class="form-control input-lg" data-ng-model="dc.model.Password" data-validator="required, password" />\r\n    <\/div> -->\r\n');n.put("app-content.html",'<div ui-view class="view-animate"><\/div>\r\n');n.put("app-header.html",'<div class="account-selector-overlay"><\/div>\r\n\r\n<header id="header">\r\n    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="navbar-collapse" id="menu-toggle" ng-disabled="session.firstTimeUser">\r\n        <span class="sr-only">Toggle navigation<\/span>\r\n        <span class="icon-bar"><\/span>\r\n        <span class="icon-bar"><\/span>\r\n        <span class="icon-bar"><\/span>\r\n    <\/button>\r\n\r\n    <a class="navbar-brand" href="/" ng-click="goToDash(true, $event)">\r\n        <span id="logo">\r\n            <img src="/assets/img/csr-connect.svg" alt="CSR Connect logo">\r\n            <span ng-if="versionFlag" class="version-flag">{{versionFlag}}<\/span>\r\n        <\/span>\r\n    <\/a>\r\n\r\n    <div class="pull-right">\r\n\r\n        <!-- Account Selector -->\r\n\r\n        <div class="account-selector ng-cloak ng-hide" account-selector ng-class="{\'supplier-account-selector\': loginMode == \'supplier\'}" ng-show="isAuthenticated" data-tooltip-placement="bottom" data-tooltip="{{(as.accountSelectorActive ? \'\' : \'You\\\'re unable to filter this page by account.\')}}">\r\n\r\n            <!-- Button -->\r\n            <a class="account-selector-btn" ng-class="{active: as.accountSelectorActive, dirty: as.isDirty}" href="javascript:;">\r\n                <span class="account-selector-btn-icon"><i class="fa" ng-class="as.selectedAccountsText ? \'fa-briefcase\' : \'fa-refresh fa-spin\'"><\/i><\/span>\r\n                <small class="account-selector-btn-label">Selected account{{as.selectedAccountIds.length > 1 ? \'s\' : \'\'}}<\/small>\r\n                <span class="account-selector-btn-text">\r\n                    <span class="account-selector-btn-text-accName" ng-class="{\'account-selector-btn-text-accName-single\' : (!as.isDirty && as.selectedAccountIds.length === 1)}">{{(!as.isDirty && as.selectedAccountIds.length === 1 ? as.selectedAccounts[as.selectedAccountIds[0]].Name1 : as.selectedAccountsText) || \'Loading accounts&hellip;\'}}<\/span>\r\n                    <small class="account-selector-btn-text-accNo" ng-if="as.selectedAccountIds.length === 1 && as.selectedAccounts[as.selectedAccountIds[0]].Name1">{{as.selectedAccounts[as.selectedAccountIds[0]].AccountId}}<\/small>\r\n                <\/span>\r\n                <span class="caret"><\/span>\r\n                <span class="account-selector-btn-confirm"><i class="fa fa-check"><\/i><\/span>\r\n                <span class="account-selector-btn-locked"><i class="fa fa-ban"><\/i><\/span>\r\n            <\/a>\r\n\r\n            <!-- Panel -->\r\n            <div class="account-selector-panel">\r\n\r\n                <form class="account-selector-filters" class="container">\r\n                    <div class="row">\r\n                        <!-- Search -->\r\n                        <div class="col-xs-8 col-sm-7">\r\n                            <div class="form-group">\r\n                                <label class="sr-only" for="accounts-selector-filter">Search accounts<\/label>\r\n                                <input id="accounts-selector-filter" class="form-control" type="search" ng-model="as.accountSearch" placeholder="Search accounts" ng-change="as.searchAccounts()" ng-model-options="{ debounce: 1000 }">\r\n                                <a class="account-search-clear" href="javascript:;" ng-click="as.searchReset()"><i class="fa fa-times-circle"><\/i><\/a>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <!-- Faves -->\r\n                        <div class="col-xs-4 col-sm-5">\r\n                            <div class="form-group btn-group account-selector-faves pull-right">\r\n                                <button type="button" class="btn btn-default" ng-click="as.toggleFaves()"><i class="fa fa-fw fa-star"><\/i><span class="hidden-xs"> Favourites<\/span><\/button>\r\n                                <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r\n                                    <span class="caret"><\/span>\r\n                                    <span class="sr-only">Toggle account favourites dropdown<\/span>\r\n                                <\/button>\r\n                                <ul class="dropdown-menu">\r\n                                    <!-- No faves -->\r\n                                    <li ng-show="!as.faves.length" class="disabled"><a href="javascript:;">No saved favourites<\/a><\/li>\r\n\r\n                                    <!-- Quick faves (top 5)-->\r\n                                    <li ng-show="as.faves.length" ng-repeat="fave in as.faves | limitTo: 5">\r\n                                        <a href="javascript:;" ng-click="as.loadFaveAccounts(fave)"><i class="fa fa-fw fa-folder fave-color-{{fave.Colour}}"><\/i> {{fave.Name}}<\/a>\r\n                                    <\/li>\r\n\r\n                                    <!-- Save -->\r\n                                    <li role="separator" class="divider"><\/li>\r\n                                    <li><a href="javascript:;" ng-click="as.showFaveSaveForm();"><i class="fa fa-fw fa-plus"><\/i> Save selection as favourite<\/a><\/li>\r\n\r\n                                    <!-- View all -->\r\n                                    <li ng-show-start="as.faves.length" role="separator" class="divider"><\/li>\r\n                                    <li ng-show-end><a href="javascript:;" ng-click="as.switchMode(\'faves\')">All favourites<\/a><\/li>\r\n                                <\/ul>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/form>\r\n\r\n                <div class="account-options">\r\n\r\n                    <!-- Selected -->\r\n                    <div ng-show="as.mode === \'list\' && as.selectedAccountIds.length">\r\n                        <div>\r\n                            <small>Selected accounts &nbsp;|&nbsp; <a ng-click="as.clearSelected()" href="javascript:;" ng-show="as.selectedAccountIds.length">clear<\/a><\/small>\r\n                        <\/div>\r\n                        <ul class="option-list">\r\n                            <li class="checkbox" ng-class="{checked: as.selectedAccountIds.indexOf(selectedAccount.AccountId) > -1}" ng-repeat="selectedAccount in as.selectedAccounts" ng-click="as.setAccount(selectedAccount, $event)">\r\n                                <label>\r\n                                    <input value="{{selectedAccount.AccountId}}" type="checkbox" ng-true-value="{{selectedAccount.AccountId}}" ng-checked="as.selectedAccountIds.indexOf(selectedAccount.AccountId) > -1" />\r\n                                    <span class="account-bu-logo"><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" ng-src="{{selectedAccount.SbuCode | sbuLogoPath}}" alt="{{selectedAccount.SbuName}}" width="80" height="30" /><\/span>\r\n                                    <strong ng-bind="selectedAccount.Name1"><\/strong><br>\r\n                                    <span class="account-number" ng-bind="selectedAccount.AccountId"><\/span> <span class="label label-default" ng-bind="selectedAccount.Currency"><\/span> <span class="label label-warning" ng-show="selectedAccount.PaymentTerms !== \'CREDIT\'" ng-bind="selectedAccount.PaymentTerms"><\/span>\r\n                                <\/label>\r\n                            <\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n\r\n                    <!-- List || Search -->\r\n                    <div ng-show="as.mode === \'list\'">\r\n\r\n                        <div ng-show="as.accounts.length != as.selectedAccountIds.length">\r\n                            <small>{{as.accountSearch.length && !as.searchingAccounts ? \'Search results for "\'+as.accountSearch+\'"\' : (as.accounts.length >= 100 ? \'Top 100 accounts\' : \'Accounts\')}} <span ng-hide="as.accountSearch.length">&nbsp;|&nbsp; <a ng-click="as.setDefaultAccounts()" href="javascript:;">select {{as.accounts.length > 20 ? \'first 20\' : \'all\'}}<\/a><\/span><\/small>\r\n                        <\/div>\r\n                        <form name="selectedAccountsForm" class="form-selected-accounts">\r\n                            <ul class="option-list">\r\n                                <li class="checkbox" ng-class="{checked: as.selectedAccountIds.indexOf(accountX.AccountId) > -1}" ng-hide="as.selectedAccountIds.indexOf(accountX.AccountId) > -1" ng-repeat="accountX in as.accounts" ng-click="as.setAccount(accountX, $event)">\r\n                                    <label>\r\n                                        <input value="{{accountX.AccountId}}" type="checkbox" ng-true-value="{{accountX.AccountId}}" ng-checked="as.selectedAccountIds.indexOf(accountX.AccountId) > -1" />\r\n                                        <span class="account-bu-logo"><img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" ng-src="{{accountX.SbuCode | sbuLogoPath}}" alt="{{accountX.SbuName}}" width="80" height="30" /><\/span>\r\n                                        <strong ng-bind="accountX.Name1"><\/strong><br>\r\n                                        <span class="account-number" ng-bind="accountX.AccountId"><\/span> <span class="label label-default" ng-bind="accountX.Currency"><\/span> <span class="label label-warning" ng-show="accountX.PaymentTerms !== \'CREDIT\'" ng-bind="accountX.PaymentTerms"><\/span>\r\n                                    <\/label>\r\n                                <\/li>\r\n                            <\/ul>\r\n                            <div class="loading" ng-show="as.searchingAccounts">\r\n                                <i><\/i>\r\n                            <\/div>\r\n                        <\/form>\r\n\r\n                    <\/div>\r\n\r\n                    <!-- Faves -->\r\n                    <div class="account-selector-faves" ng-show="as.mode === \'faves\'">\r\n                        <div ng-hide="as.savingFave">\r\n                            <h3>Account favourites<\/h3>\r\n                            <ul class="option-list account-faves-list">\r\n                                <li ng-repeat="fave in as.faves" class="account-fave">\r\n                                    <a class="account-fave-name" href="javascript:;" ng-click="as.loadFaveAccounts(fave)">\r\n                                        <i class="account-fave-icon fa fa-2x fa-fw fa-folder fave-color-{{fave.Colour}}"><\/i> <strong>{{fave.Name}}<\/strong><br>\r\n                                        <small>{{fave.Accounts.length}} accounts<\/small>\r\n                                    <\/a>\r\n\r\n                                    <button class="btn btn-sm btn-default account-fave-delete" ng-click="as.deleteFave($index, fave)"><i class="fa fa-remove"><\/i> Delete<\/button>\r\n                                <\/li>\r\n                                <li class="account-fave">\r\n                                    <a class="account-fave-name" ng-click="as.showFaveSaveForm()" href="javascript:;">\r\n                                        <i class="account-fave-icon fa fa-2x fa-fw fa-plus"><\/i> <strong>Save new favourite<\/strong><br>\r\n                                        <small>Uses currently selected accounts<\/small>\r\n                                    <\/a>\r\n                                <\/li>\r\n                            <\/ul>\r\n                            <div class="btn-container">\r\n                                <a class="btn btn-sm btn-default" href="javascript:;" ng-click="as.switchMode(\'list\')">Back to account list<\/a>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- New fave -->\r\n                        <div class="account-selector-new-fave" ng-show="as.savingFave">\r\n                            <h3>Save selection as favourite<\/h3>\r\n                            <div class="form-inlinezzz">\r\n\r\n                                <div class="form-group">\r\n                                    <label for="account-fave-name" class="control-label">Name<\/label>\r\n                                    <input id="account-fave-name" name="account-fave-name" class="form-control" ng-model="as.newFave.name" type="text" placeholder="Favourite name">\r\n                                <\/div>\r\n\r\n                                <div class="form-group">\r\n                                    <label class="control-label">Colour<\/label>\r\n                                    <div class="dropdown dropdown-reset">\r\n                                        <button class="btn btn-default btn-block dropdown-toggle" type="button" id="account-fave-colour-select-label" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r\n                                            <i class="fa fa-fw fa-folder fave-color-{{as.newFave.colour}}"><\/i> <span class="xxxsr-only">{{as.faveColours[as.newFave.colour]}}<\/span>\r\n                                            <span class="caret"><\/span>\r\n                                        <\/button>\r\n                                        <ul class="dropdown-menu" aria-labelledby="account-fave-colour-select-label">\r\n                                            <li ng-repeat="colour in as.faveColours"><a href="javascript:;" ng-click="as.changeFaveColour($index)"><i class="fa fa-fw fa-folder fave-color-{{$index}}"><\/i> {{colour}}<\/a>\r\n                                        <\/ul>\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <div class="form-group">\r\n                                    <button class="btn btn-success" ng-click="as.saveFave()" metrics-track="Save Favourite" metrics-track-data="{source: \'Save Favourite Button\'}">Save favourite<\/button>\r\n                                    <button class="btn btn-link" ng-click="as.closeFaveSaveForm()">Cancel<\/button>\r\n                                <\/div>\r\n\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- END Account Selector -->\r\n        <!-- User Nav -->\r\n\r\n        <div class="navbar-user-login ng-hide" ng-hide="isAuthenticated">\r\n            <a id="nav-login-btn" ng-href="#/login" class="btn btn-success"><i class="fa fa-lock"><\/i> Login<\/a>\r\n        <\/div>\r\n\r\n        <div class="navbar-user-info dropdown ng-hide" ng-show="session.user.fullName">\r\n            <!-- User tile -->\r\n            <a href="#/user/profile" id="user-info" class="dropdown-toggle" data-toggle="dropdown" title="{{(isImpersonating ? \'Impersonating\' : \'Logged in\') + \': \' + session.user.fullName}}">\r\n                <div class="user-info-img">\r\n                    <img src="/Assets/img/blank.gif" data-ng-src="{{  session.user.avatarUrl }}" ng-show="session.user.Profile.AvatarUrl.indexOf(\'.jpg\') > 0 || session.user.Profile.AvatarUrl.indexOf(\'.png\') > 0" width="50" height="50" alt="">\r\n                    <ng-letter-avatar initials="session.user.fullName | rtrim" width="46" height="46"><\/ng-letter-avatar>\r\n                    <div class="percentage-complete" data-ng-show="dqStatus.percentComplete < 100">{{dqStatus.percentComplete}}%<\/div>\r\n                <\/div>\r\n                <strong class="user-info-name" data-ng-bind="session.user.fullName"><\/strong>\r\n                <div ng-if="candyMode" class="navbar-user-info-badge" data-tooltip="You\'re using the Jobs Preview" tooltip-placement="left-bottom"><img src="/assets/img/onboarding/connect-candy-circle.svg" width="16" height="16" alt="Connect preview Mode user badge"><\/div>\r\n                <span data-ng-show="isImpersonating || dqStatus.percentComplete == 100" class="user-info-type"><i data-ng-show="isImpersonating" class="fa fa-lg fa-lnk fa-eye" title="You\'re in impersonation mode"><\/i>{{isImpersonating ? \'Impersonating \' + (dqStatus.percentComplete == 100 ? \'\' : \'(profile \' + dqStatus.percentComplete + \'%)\') : \'Logged In\'}}<\/span>\r\n                <span data-ng-show="!isImpersonating && dqStatus.percentComplete < 100" class="user-info-type user-info-type-progress" progress-indicator innertext="" outertext="\'Profile [0] complete\'" percent="dqStatus.percentComplete" />\r\n            <\/a>\r\n\r\n            <!-- User Nav -->\r\n            <ul class="dropdown-menu" role="menu" aria-labelledby="user-info">\r\n                <li class="navbar-user-info-dash-link"><a role="menuitem" href="javascript:;" data-ng-click="goToDash()"><i class="fa fa-fw fa-dashboard"><\/i> Go to Connect<\/a><\/li>\r\n                <li data-ng-show="dqStatus.percentComplete!=100"><a id="data-quality" role="menuitem" href="#/user/welcome?m=1"><i class="fa fa-fw fa-check-square-o"><\/i> Complete profile<\/a><\/li>\r\n                <li><a id="edit-user-details" role="menuitem" href="#/user/details"><i class="fa fa-fw fa-vcard"><\/i> Edit user details<\/a><\/li>\r\n                <li auth-key="All/Payment" data-auth="u"><a id="edit-payment-methods" role="menuitem" href="#/financials/payments/methods"><i class="fa fa-fw fa-credit-card"><\/i> Edit payment methods<\/a><\/li>\r\n                <li feature-toggle="319" ng-show="hasProfileType([7,8])"><a role="menuitem" href="#/admin/integrations"><i class="fa fa-fw fa-link"><\/i> Integrations<\/a><\/li>\r\n                <li><a id="change-password" role="menuitem" href="#/user/changepassword"><i class="fa fa-fw fa-lock"><\/i> Change password<\/a><\/li>\r\n                <li role="presentation" class="divider"><\/li>\r\n                <li><a id="connect-blog" role="menuitem" href="https://blog.csrconnect.com.au/" target="_blank"><i class="fa fa-fw fa-wordpress"><\/i> Connect blog<\/a><\/li>\r\n                <li role="presentation" class="divider"><\/li>\r\n                <li data-ng-show="isImpersonating"><a id="unimpersonate" role="menuitem" href="javascript:;" data-ng-click="unImpersonate()"><i class="fa fa-fw fa-eye-slash"><\/i> Stop impersonating<\/a><\/li>\r\n                <li><a id="logout" role="menuitem" href="javascript:;" data-ng-click="logout()"><i class="fa fa-fw fa-sign-out"><\/i> Logout<\/a><\/li>\r\n            <\/ul>\r\n        <\/div>\r\n\r\n        <!-- END User Nav -->\r\n        <!-- Header Utilities -->\r\n\r\n        <div class="header-utility" ng-if="isAuthenticated && hasProfileType([7])" auth-key="All/Profile" auth="c">\r\n            <button user-quick-add class="header-utility-btn header-utility-quickUser header-utility-status header-utility-status-warning" aria-label="Give a teammate access to your CSR accounts" title="Give a teammate access to your CSR accounts" metrics-track="Add teammate button" metrics-track-data="{location: \'header\'}"><\/button>\r\n        <\/div>\r\n\r\n        <div class="header-utility" ng-if="isAuthenticated">\r\n            <button id="start-chat-btn" class="header-utility-btn header-utility-chat header-utility-chat-caption" href="javascript:;" ng-click="showLiveChat()" aria-label="Live Chat"><\/button>\r\n        <\/div>\r\n\r\n        <div class="header-utility" ng-if="isAuthenticated">\r\n            <button id="help-centre-btn" class="header-utility-btn header-utility-support" data-toggle="dropdown" aria-label="Help and support" aria-controls="help-centre-panel" aria-expanded="false"><\/button>\r\n\r\n            <div help-centre id="help-centre-panel" class="header-utility-panel dropdown-menu"><\/div>\r\n        <\/div>\r\n\r\n        <div id="header-cms-btn" class="header-utility" ng-if="cms.activePage && isAuthenticated" auth-key="Cms/Edit">\r\n            <button class="header-utility-btn header-utility-cms header-utility-status" ng-class="{\'header-utility-status-success\': !cms.isCmsActive(), \'header-utility-status-warning\': cms.isCmsActive(), \'header-utility-status-error\': cms.isDraftActive()}" data-toggle="dropdown" aria-label="CMS" aria-controls="cms-tools-panel" aria-expanded="false"><\/button>\r\n\r\n            <div id="cms-tools-panel" class="header-utility-panel dropdown-menu">\r\n\r\n                <!-- CMS Tools -->\r\n                <p><strong><i class="fa fa-lg fa-pencil-square"><\/i> CMS Tools<\/strong> | {{cms.getMainButtonText()}}<\/p>\r\n\r\n                <div ng-if="!cms.isCmsActive()">\r\n                    <div class="btn-group" ng-class="{\'block-margin-sm\': cms.isDraftActive()}">\r\n                        <button type="button" class="btn btn-default" ng-click="cms.activateCms()"><i class="fa fa-fw fa-pencil"><\/i> Start editing<\/button>\r\n                        <button ng-if="cms.isDraftActive()" ng-click="cms.publishDraft()" auth-key="Cms/Publish" class="btn btn-default"><i class="fa fa-fw fa-save"><\/i> Publish<\/button>\r\n                        <button ng-if="cms.isDraftActive()" ng-click="cms.discardCmsDraft()" class="btn btn-default"><i class="fa fa-fw fa-remove text-danger"><\/i> Discard<\/button>\r\n                    <\/div>\r\n\r\n                    <div ng-if="cms.isDraftActive()" class="input-group"><span class="input-group-addon"><i class="fa fa-link"><\/i><\/span><input type="text" class="form-control" ng-value="cms.getDraftLink()" select-on-click ng-readonly="true" /><\/div>\r\n                <\/div>\r\n\r\n                <div ng-if="cms.isCmsActive()" class="btn-group">\r\n                    <button ng-click="cms.saveRegion()" type="button" class="btn btn-save"><i class="fa fa-save"><\/i> Save draft<\/button>\r\n                    <button ng-if="!cms.isEditingRegion()" ng-click="cms.deactivateCms()" class="btn btn-default"><i class="fa fa-fw fa-stop"><\/i> Stop Editing<\/button>\r\n                    <button ng-if="cms.isDraftActive()" ng-click="cms.discardCmsDraft()" class="btn btn-default"><i class="fa fa-fw fa-remove text-danger"><\/i> Discard Draft<\/button>\r\n                    <button ng-if="cms.isEditingRegion() && !cms.isDraftActive()" ng-click="cms.revertToLive()" class="btn btn-default"><i class="fa fa-fw fa-remove text-danger"><\/i> Revert To Live<\/button>\r\n                <\/div>\r\n\r\n                <!-- END CMS Tools -->\r\n\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- END Header Utilities -->\r\n\r\n    <\/div>\r\n<\/header>\r\n<header id="fullscreenview-header" class="row">\r\n    <div class="col-xs-12">\r\n        <img class="center-block" src="/assets/img/logos/logo-csr-connect-fs.png" alt="Connect logo" />\r\n    <\/div>\r\n<\/header>\r\n\r\n<nav id="nav" class="navbar navbar-default navbar-fixed-top" role="navigation" ng-hide="session.firstTimeUser" ng-if="isAuthenticated || helpers.isLanding()">\r\n    <div class="container-fluid">\r\n\r\n        <!-- Landing page nav -->\r\n        <div navigation ng-if="helpers.isLanding()">\r\n            <div id="nav-features" nav-item view="/home/features" title="Features"><\/div>\r\n            <div id="nav-more-info" nav-item view="/home/more-info" title="More information"><\/div>\r\n            <div id="nav-partners" nav-item view="/home/partners" title="Partners" feature-toggle="730"><\/div>\r\n            <div id="nav-contact" nav-item view="/home/contact-us" title="Contact Us"><\/div>\r\n            <div id="nav-blog" nav-item href="http://blog.csrconnect.com.au" target="_blank" title="Blog"><\/div>\r\n        <\/div>\r\n\r\n        <div navigation ng-if="isAuthenticated && !helpers.isLanding()">\r\n\r\n            <!-- Home -->\r\n            <div id="nav-home" nav-item view="/dash" title="&#xf015;" class="fa nav-icon" ng-if="(hasRole([\'customer\']) && !session.changePassword)"><\/div>\r\n\r\n            <!-- Work -->\r\n            <div id="nav-work" nav-group title="Work" auth-key-parent>\r\n                <div id="nav-jobs" nav-item view="/jobs" title="Jobs" auth-key="Customer/Jobs"><\/div>\r\n                <div id="nav-leads" nav-item view="/leads" title="Leads" auth-key="Customer/Leads"><\/div>\r\n                <div id="nav-integrations" feature-toggle="319" ng-show="hasProfileType([7,8])" data-nav-item data-view="/admin/integrations" title="Integrations"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Products -->\r\n            <div id="nav-products-v2" nav-item view="/products" title="Products" auth-key="Customer/ProductList"><\/div>\r\n\r\n            <!-- Documents -->\r\n            <div id="nav-docs" nav-group title="Documents" auth-key-parent>\r\n                <!-- Documents -->\r\n                <li class="dropdown-header" auth-key="Customer/Documents">Documents<\/li>\r\n                <div id="nav-all-docs" nav-item view="/docs" title="All documents" auth-key="Customer/Documents"><\/div>\r\n                <div id="nav-invoice-docs" nav-item view="/docs?type=1" title="Invoices" auth-key="Customer/Invoice"><\/div>\r\n                <div id="nav-quote-docs" nav-item view="/docs?type=2" title="Quotes" auth-key="Customer/Quote"><\/div>\r\n                <div id="nav-order-docs" nav-item view="/docs?type=3" title="Orders" auth-key="Customer/SalesOrder"><\/div>\r\n                <div id="nav-delivery-docs" nav-item view="/docs?type=4" title="Deliveries" auth-key="Customer/Deliveries"><\/div>\r\n\r\n                <!-- Downloads -->\r\n                <li role="separator" class="divider" auth-key="All/Download"><\/li>\r\n                <li class="dropdown-header" auth-key="All/Download">Downloads<\/li>\r\n                <div id="nav-downloads" nav-item view="/downloads" title="Downloads" auth-key="All/Download"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Orders -->\r\n            <div id="nav-orders" nav-group title="Orders" auth-key-parent>\r\n\r\n                <!-- Orders -->\r\n                <li class="dropdown-header" auth-key="Customer/SalesOrder;Customer/OnlineOrdering">Orders<\/li>\r\n                <div id="nav-recent-orders" nav-item view="/docs?type=3" title="Recent orders" auth-key="Customer/SalesOrder"><\/div>\r\n                <div id="nav-draft-orders" nav-item view="/orders/drafts" title="Draft orders" auth-key="Customer/OnlineOrdering"><\/div>\r\n                <div id="nav-favourite-orders" nav-item view="/orders/favourites" title="Order favourites" auth-key="Customer/OnlineOrdering"><\/div>\r\n                <div id="nav-place-order" nav-item view="/orders/getstarted" title="Place new order" auth-key="Customer/OnlineOrdering"><\/div>\r\n\r\n                <!-- Deliveries -->\r\n                <li role="separator" class="divider" auth-key="Customer/Deliveries"><\/li>\r\n                <li class="dropdown-header" auth-key="Customer/Deliveries">Deliveries<\/li>\r\n                <div id="nav-deliveries-orders"  nav-item view="/deliveries" title="Deliveries" auth-key="Customer/Deliveries"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Financials -->\r\n            <div id="nav-financials" nav-group title="Financials" auth-key-parent>\r\n                <div id="nav-account-balance" nav-item view="/financials/accountbalance" title="Account balance" auth-key="Customer/Account/Balance"><\/div>\r\n                <div id="nav-statements" nav-item view="/financials/statements" title="Statements" auth-key="Customer/Statement"><\/div>\r\n                <div id="nav-payments" nav-item view="/financials/payments?entry=menu" title="Payments" auth-key="All/Payment" data-auth="u"><\/div>\r\n                <li role="separator" class="divider" auth-key="All/Payment" data-auth="r"><\/li>\r\n                <div id="nav-payment-methods" nav-item view="/financials/payments/methods" title="Manage payment methods" auth-key="All/Payment" data-auth="u"><\/div>\r\n                <div id="nav-payment-history" nav-item view="/financials/payments/history" title="Payment history" auth-key="All/Payment" data-auth="r"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Reports -->\r\n            <div id="nav-reports" nav-group title="Reports" auth-key-parent>\r\n                <li class="dropdown-header" ng-if="hasProfileType([1,2,3,4,5])" auth-key="Customer/Reporting">Customer reports<\/li>\r\n                <div nav-item view="/reports/purchase-history/month/" title="Purchase history" auth-key="Customer/Reporting"><\/div>\r\n\r\n                <li role="separator" class="divider" ng-if="hasProfileType([1,2,3,4,5])" auth-key="Customer/Reporting;Administration/Payment/History;All/Profile"><\/li>\r\n                <li class="dropdown-header" ng-if="hasProfileType([1,2,3,4,5])" auth-key="Customer/Reporting">Internal reports<\/li>\r\n                <div nav-item view="/admin/reports" title="All reports" ng-if="hasProfileType([1,2,3,4,5])" auth-key="All/Profile"><\/div>\r\n                <div nav-item view="/admin/metricsevents" title="Metrics reports" ng-if="hasProfileType([1])" auth-key="All/Profile"><\/div>\r\n                <div nav-item view="/admin/payments" title="Payment history" auth-key="Administration/Payment/History"><\/div>\r\n                <div nav-item view="/reports/invoice-delivery" ng-if="hasProfileType([1,2,3])" auth-key="Customer/Reporting" title="Invoice delivery"><\/div>\r\n            <\/div>\r\n\r\n            <!-- Resources -->\r\n            <div data-nav-group title="Resources">\r\n                <li ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])" class="dropdown-header">Sales &amp; marketing<\/li>\r\n                <div ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])" nav-item view="/sales/info" title="Sales information"><\/div>\r\n                <div ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])" nav-item view="/sales/faq" title="Sales FAQs"><\/div>\r\n                <div ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])" nav-item view="/sales/webinars" title="Training webinar"><\/div>\r\n                <li ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])">\r\n                    <a href="https://partners.csr.com.au/external/CONNECTCOMM/Pages/Home.aspx" target="_blank">\r\n                        <span class="menu-item-parent">Resource library<\/span>\r\n                    <\/a>\r\n                <\/li>\r\n                <li ng-if="hasRole([\'customer\']) && hasProfileType([1,2,3,4,5])" role="separator" class="divider"><\/li>\r\n                <li class="dropdown-header">Additional Resources<\/li>\r\n                <li>\r\n                    <a href="http://blog.csrconnect.com.au/" target="_blank">\r\n                        <span class="menu-item-parent">Connect blog<\/span>\r\n                    <\/a>\r\n                <\/li>\r\n                <div nav-item view="/resources" title="Useful Links"><\/div>\r\n            <\/div>\r\n\r\n                <!-- Admin -->\r\n                <div id="nav-admin" data-nav-group title="Admin" ng-if="hasPermissionParentRef(\'Admin\')">\r\n                    <!-- Internal users -->\r\n                    <div id="nav-organisations" data-nav-item data-view="/admin/organisations" title="Manage accounts" auth-key="Customer/Account" ng-show="session.orgCount === 0"><\/div>\r\n                    <!-- Single organisation -->\r\n                    <div id="nav-contacts" data-nav-item data-view="{{ \'/admin/organisations/\' + session.orgId + \'/contacts\' }}" title="Manage contacts" auth-key="Customer/Account" ng-show="session.orgCount === 1"><\/div>\r\n                    <div id="nav-accounts" data-nav-item data-view="{{ \'/admin/organisations/\' + session.orgId }}" title="Manage accounts" auth-key="Customer/Account" ng-show="session.orgCount === 1"><\/div>\r\n                    <!-- Multiple organisations -->\r\n                    <div id="nav-accounts-contacts" data-nav-item data-view="/admin/organisations" title="Accounts &amp; contacts" auth-key="Customer/Account" ng-show="session.orgCount > 1"><\/div>\r\n                    <div id="nav-manage-users" data-nav-item data-view="/admin/profile/list" title="Manage users" auth-key="All/Profile" ng-if="!hasProfileType([7])"><\/div>\r\n                    <div id="nav-teammates" data-nav-item data-view="/admin/profile/list" title="Teammates" auth-key="All/Profile" ng-if="hasProfileType([7])"><\/div>\r\n                    <div id="nav-user-permissions" ng-if="isCurrentUserAdmin()" data-nav-item data-view="/admin/permissionmanagement" title="Manage users permissions" auth-key="All/Profile"><\/div>\r\n                    <div data-nav-item data-view="/admin/cms" title="Content management" auth-key="Cms/Publish"><\/div>\r\n                    <div id="nav-manage-plants" data-nav-item data-view="/admin/managePlants" ng-if="hasPermission(\'Admin/ManagePlants\')" title="Manage plants"><\/div>\r\n                    <li ng-if="hasPermission(\'Customer/API/Orders\')">\r\n                        <a href="#" ng-click="goToApiUi()">\r\n                            <span class="menu-item-parent">Orders API<\/span>\r\n                        <\/a>\r\n                    <\/li>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <div class="navbar-cart ng-cloak" auth-key="Customer/OnlineOrdering" ng-show="hasRole([\'customer\']) && !helpers.isLanding()" order-btn><\/div>\r\n\r\n\r\n\r\n    <\/div>\r\n<\/nav>\r\n');n.put("new-version-modal.html",'<div class="am-modal" role="dialog">\r\n    <h1>Connect has been updated<\/h1>\r\n    <p>A new version of CSR Connect has been released. Please refresh and try again.<\/p>\r\n    <p>If you experience issues or require assistance, please contact our support team via LiveChat or by calling 1800 909 439 (AU) / 0800 277 266 (NZ)<\/p>\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <a ng-click="newVersionMdaolController.showLiveChat()" class="btn btn-block btn-default">Chat to Support<\/a>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="newVersionModalController.refreshPage()" class="btn btn-block btn-primary">Refresh<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("deliveries-counter.html",'<span class="badge badge-circle animate-delayed-entry" aria-label="Count of deliveries today" tooltip="{{ dc.recentDeliveriesString }}" ng-bind="dc.recentDeliveriesTruncated" ng-show="!!dc.count"><\/span>\r\n');n.put("deliveryOrderDetail.html",'<div class="modal-header">\r\n    <button type="button" class="close" aria-label="Close" data-dismiss="modal" ng-click="close($event)"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <div class="row">\r\n        <div class="col-xs-10">\r\n            <div ng-show="deliveryOrder.DeliveryNumber" class="media flush ng-hide">\r\n                <div class="media-left pull-left">\r\n                    <img class="delivery-item-icon" ng-src="/assets/img/deliveries/{{deliveryOrder.DeliveryIndicator == \'P\' ? \'pickup\' : \'delivery\'}}{{deliveryOrder.IsTracked ? \'-tracked\' : \'\'}}.png" alt="{{deliveryOrder.StatusF}}">\r\n                <\/div>\r\n                <div class="media-body">\r\n                    <h2 class="flush">{{deliveryOrder.DeliveryNumber}} <small>{{deliveryOrder.Reference}}<\/small><\/h2>\r\n                    <span class="delivery-status delivery-status-{{deliveryOrder.Status + (deliveryOrder.DeliveryIndicator === \'P\' ? \'P\' : \'\')}}">{{deliveryOrder.StatusF}}<\/span>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="col-xs-2" ng-if="deliveryOrder.DeliveryIndicator === \'D\'"><permalink class="pull-right" selected-account="deliveryOrder.SoldToAccountNumber" doc-no="deliveryOrder.DeliveryNumber" doc-sbu="deliveryOrder.SalesOrg" doc-type="\'4\'" doc-delivery-indicator="deliveryOrder.DeliveryIndicator" show-private-link="true" /><\/div>\r\n    <\/div>\r\n<\/div>\r\n<div class="modal-body">\r\n    <div ng-hide="deliveryOrder.DeliveryNumber" class="loading loading-page">\r\n        <i><\/i>\r\n        Getting {{deliveryOrder.DeliveryIndicator == \'P\' ? \'pickup\' : \'delivery\'}}\r\n    <\/div>\r\n\r\n    <div class="row" ng-if="deliveryOrder.DeliveryNumber" metrics-track="Deliveries/View/{{deliveryOrder.DeliveryIndicator == \'P\' ? \'Pickup\' : \'Delivery\'}}/Single" metrics-track-immediately="true" metrics-track-data="{delivery_number: deliveryOrder.DeliveryNumber, accountId: deliveryOrder.SoldToAccountNumber}">\r\n        <div class="col-xs-12">\r\n\r\n            <!-- SINGLE DELIVERY TRACKER -->\r\n            <div delivery-tracker="{{deliveryOrder.Id}}" delivery-tracker-feature="{{dt.feature}}" delivery-tracker-data-source="deliveryOrder" auth-key="Customer/Deliveries" permission-init>\r\n\r\n                <div class="delivery-tracker delivery-tracker-sml block-margin">\r\n\r\n                    <div id="map-deliveries-{{deliveryOrder.Id}}" class="delivery-tracker-map block-margin">\r\n                        <div class="loading loading-page"><i><\/i>Locating delivery<\/div>\r\n                    <\/div>\r\n\r\n                    <div class="delivery-tracker-embedded-map-controls">\r\n                        <button type="button" ng-click="dt.fitAll(true)" class="btn btn-sm btn-light" aria-label="Fit all"><i class="fa fa-lg fa-arrows-alt"><\/i><\/button>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <!-- GPS Location Status -->\r\n            <div class="row" ng-if="deliveryOrder.IsTracked">\r\n                <div class="col-xs-12 col-sm-6">\r\n                    <p>\r\n                        <strong class="delivery-status delivery-status-tracked">GPS tracking {{deliveryOrder.hasGpsUpdateTime ? "enabled" : "currently unavailable"}}<\/strong>\r\n                        <small class="delivery-status-subtext">\r\n                            <span ng-if="deliveryOrder.hasGpsUpdateTime">Last update {{deliveryOrder.CurrentOnRouteCreatedOn | humanizeDate | lowercase}}<\/span>\r\n                        <\/small>\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <!-- ETA status -->\r\n                <div ng-if="deliveryOrder.arrivalTime" class="col-xs-12 col-sm-6">\r\n                    <p>\r\n                        <strong><i class="fa fa-fw fa-hourglass-half"><\/i>&nbsp; ETA {{deliveryOrder.arrivalTime}}<\/strong>\r\n                        <small class="delivery-status-subtext">Last determined {{deliveryOrder.GpsTimestamp | humanizeDate | lowercase}}<\/small>\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <!-- ETA disclaimer -->\r\n                <div ng-if="deliveryOrder.arrivalTime" class="col-xs-12">\r\n                    <p class="text-muted text-center small">ETA is not guaranteed and is determined based on the last known location of your delivery<\/p>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <hr ng-if="deliveryOrder.IsTracked" class="clr">\r\n\r\n            <!-- Dates and Locations -->\r\n            <div class="row">\r\n                <!-- Delivery -->\r\n                <div ng-if="!deliveryOrder.hasPickupTime" class="col-xs-12 col-sm-6">\r\n                    <p>\r\n                        <strong>Delivery date:<\/strong><br />\r\n                        {{deliveryOrder.DeliveryDate | date }}\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <!-- Pickup -->\r\n                <div ng-if="deliveryOrder.hasPickupTime" class="col-xs-12 col-sm-6">\r\n                    <p>\r\n                        <strong>Pickup date:<\/strong><br />\r\n                        {{deliveryOrder.DeliveryDate | date}}, {{deliveryOrder.Timeslot}}\r\n                    <\/p>\r\n                <\/div>\r\n                <div ng-if="deliveryOrder.PickupAddress" class="col-xs-12 col-sm-6">\r\n                    <p>\r\n                        <strong>Pickup from:<\/strong><br />\r\n                        {{deliveryOrder.PickupPlantName ? deliveryOrder.PickupPlantName + \', \' + deliveryOrder.PickupAddress : deliveryOrder.PickupAddress}}\r\n                    <\/p>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <!-- Address & reference -->\r\n            <div class="row">\r\n                <div class="col-xs-6">\r\n                    <strong>{{deliveryOrder.DeliveryIndicator == \'P\' ? \'Site\' : \'Delivery\'}} address:<\/strong>\r\n                    <p ng-if="deliveryOrder.Address != \'\'">\r\n                        {{deliveryOrder.AddressLine1}}<br />\r\n                        {{deliveryOrder.City | titleCase}}, {{deliveryOrder.State}}, {{deliveryOrder.Postcode}}\r\n                    <\/p>\r\n                    <p ng-if="deliveryOrder.Address == \'\'">No address provided<\/p>\r\n                    <p ng-if="deliveryOrder.UnableToGeocodeAddress && deliveryOrder.DeliveryIndicator == \'D\'" class="sub-block-margin">\r\n                        <small>\r\n                            <span class="fa-stack delivery-address-status">\r\n                                <i class="fa fa-map-marker fa-stack-2x"><\/i>\r\n                                <i class="fa fa-ban fa-stack-2x text-danger"><\/i>\r\n                            <\/span>&nbsp;\r\n                            <span class="text-muted">Unable to map this address<\/span>\r\n                        <\/small>\r\n                    <\/p>\r\n                <\/div>\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Your reference:<\/strong><br>\r\n                        {{deliveryOrder.Reference || \'N/A\'}}\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Contact details -->\r\n            <div class="row">\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Contact name:<\/strong><br>\r\n                        {{deliveryOrder.ContactName || \'N/A\'}}\r\n                    <\/p>\r\n                <\/div>\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Contact phone:<\/strong><br>\r\n                        {{deliveryOrder.ContactPhone || \'N/A\'}}\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Shipping notes -->\r\n            <div class="block-margin">\r\n                <strong>Shipping notes:<\/strong><br>\r\n                <pre ng-bind-html="deliveryOrder.Note || \'No notes\'" class=""><\/pre>\r\n            <\/div>\r\n\r\n            <!-- Document numbers -->\r\n            <div class="row">\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Order number:<\/strong><br>\r\n                        {{deliveryOrder.OrderNumber || \'N/A\'}}\r\n                    <\/p>\r\n                <\/div>\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Invoice number:<\/strong><br>\r\n                        {{deliveryOrder.InvoiceNumber || \'N/A\'}}\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Account -->\r\n            <div class="row" ng-if="deliveryOrder.SoldToAccountNumber === deliveryOrder.ShipToAccountNumber || deliveryOrder.ShipToAccountNumber === null">\r\n                <div class="col-xs-12">\r\n                    <p>\r\n                        <strong>Account:<\/strong><br>\r\n                        {{deliveryOrder.SoldToAccountName}}<br>\r\n                        {{deliveryOrder.SoldToAccountNumber}}\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="row" ng-if="deliveryOrder.SoldToAccountNumber !== deliveryOrder.ShipToAccountNumber && deliveryOrder.ShipToAccountNumber !== null">\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Sold To:<\/strong><br>\r\n                        {{deliveryOrder.SoldToAccountName}}<br>\r\n                        {{deliveryOrder.SoldToAccountNumber}}\r\n                    <\/p>\r\n                <\/div>\r\n                <div class="col-xs-6">\r\n                    <p>\r\n                        <strong>Ship To:<\/strong><br>\r\n                        {{deliveryOrder.ShipToAccountName}}<br>\r\n                        {{deliveryOrder.ShipToAccountNumber}}\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <hr>\r\n\r\n            <!-- Items -->\r\n            <h4>Items<\/h4>\r\n            <table ng-if="deliveryOrder.Items.length>0" class="table table-striped table-sm">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Item<\/th>\r\n                        <th class="tf-right">Quantity<\/th>\r\n                    <\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    <tr ng-repeat="item in deliveryOrder.Items | limitTo: displayQty">\r\n                        <td class="tf-block">\r\n                            <strong ng-if="item.SalesText.length>0">{{item.SalesText}}<\/strong>\r\n                            <strong ng-if="item.SalesText==null || item.SalesText.length==0">{{item.Description}}<\/strong><br />\r\n                            <small>{{item.MaterialNumber}}<\/small>\r\n                        <\/td>\r\n                        <td class="tf-right">\r\n                            <strong>{{item.Qty}} {{item.Uom}}<\/strong><br />\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n                <tfoot ng-if="displayQty<deliveryItemQty || displayQty!=defaultDisplayQty">\r\n                    <tr>\r\n                        <td colspan="2" class="text-right">\r\n                            <a href="javascript:;" ng-click="toggleMore($event)">\r\n                                <span ng-if="displayQty<deliveryItemQty">Show {{deliveryItemQty - defaultDisplayQty}} <\/span>\r\n                                <span ng-if="displayQty!=defaultDisplayQty">Hide <\/span>\r\n                                more\r\n                            <\/a>\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/tfoot>\r\n            <\/table>\r\n\r\n            <div ng-if="deliveryOrder.Items | isEmpty" class="well well-sm well-empty">Item details unavailable<\/div>\r\n            <div ng-if="deliveryOrder.IsDelivered">\r\n                <hr>\r\n\r\n                <h4 ng-if="deliveryOrder.DeliveryIndicator!==\'P\'">Proof of delivery<\/h4>\r\n                <h4 ng-if="deliveryOrder.DeliveryIndicator===\'P\'">Receipt of Goods<\/h4>\r\n                <ul ng-if="showPodImages || showPodPdf" class="list-thumbs no-list flush">\r\n                    <li ng-repeat="img in deliveryOrder.Images">\r\n                        <a\r\n                                ng-href="{{\'/api/deliveries/image/\' + img.ImageId + deliveryOrder.imageUrlPostFix}}"\r\n                                target="connectPOD"\r\n                                metrics-track="{{dt.feature}}/Download/POD/Single"\r\n                                metrics-track-data="{ type: deliveryOrder.DeliveryIndicator, accountId: deliveryOrder.SoldToAccountNumber, delivery_number: deliveryOrder.DeliveryNumber }">\r\n                            <img ng-src="{{\'/api/deliveries/image/\' + img.ImageId + deliveryOrder.imageUrlPostFix}}" alt="{{img.Text}}">\r\n                            <span class="list-thumbs-label">{{img.Text}}<\/span>\r\n                        <\/a>\r\n                    <\/li>\r\n                    <li ng-if="showPodPdf">\r\n                        <a\r\n                                ng-href="{{\'/api/deliveries/pod/\' + deliveryOrder.Id + deliveryOrder.downloadUrlPostFix}}"\r\n                                target="connectPOD"\r\n                                ng-click="deliveryOrder.viewPodAction()"\r\n                                metrics-track="{{dt.feature}}/Download/POD/Single"\r\n                                metrics-track-data="{ type: deliveryOrder.DeliveryIndicator, accountId: deliveryOrder.SoldToAccountNumber, delivery_number: deliveryOrder.DeliveryNumber }">\r\n                            <i class="fa fa-fw fa-file-pdf-o"><\/i>\r\n                            <span class="list-thumbs-label">\r\n                                <span ng-if="deliveryOrder.DeliveryIndicator!==\'P\'">Proof of Delivery<\/span>\r\n                                <span ng-if="deliveryOrder.DeliveryIndicator===\'P\'">Receipt of Goods<\/span> PDF\r\n                            <\/span>\r\n                        <\/a>\r\n                    <\/li>\r\n                <\/ul>\r\n                <div ng-if="!deliveryOrder.HasPodPdf && (deliveryOrder.Images | isEmpty) || (!deliveryOrder.HasSignedPOD && deliveryOrder.DeliveryIndicator!==\'P\')" class="well well-sm well-empty">\r\n                    <span ng-if="deliveryOrder.DeliveryIndicator===\'P\'">Receipt of Goods document is not yet available. Please contact your Customer Service Representative or CSR Connect support on <a href="tel://1800909439">1800 909 439<\/a> <\/span>\r\n                    <div class="text-center" ng-if="deliveryOrder.DeliveryIndicator!==\'P\'">\r\n                        <p>Proof Of Delivery document is not yet available. Please click the "Request POD" button to receive a copy of your Proof of Delivery. Alternatively, contact your Customer Service Representative or CSR Connect support on <a href="tel://1800909439">1800 909 439<\/a><\/p>\r\n                        <a ng-show="!deliveryOrder.PodRequested" class="btn btn-default" ng-click="requestPOD()">Request POD<\/a>\r\n                        <span ng-show="deliveryOrder.PodRequested" class="well well-sm">POD Requested<\/span>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n<div class="modal-footer">\r\n    <button class="btn btn-default" ng-disabled="isBusy" ng-click="close($event)">OK<\/button>\r\n<\/div>\r\n');n.put("doc-actions.html",'<div class="doc-actions">\r\n\r\n\r\n    <div class="btn-group pull-left">\r\n\r\n        <!-- Print -->\r\n        <button ng-if="docActions.doc.pdfUrl" type="button" document-to-print-on-click="{{ docActions.doc.pdfUrl }}" print-tracking-origin="Documents" class="btn btn-default doc-actions-print hidden-sm" aria-label="Print" tooltip="Print" tooltip-placement="top" tooltip-popup-delay="300" metrics-track="{{docActions.trackName(docActions.verbs.print)}}" metrics-track-data="docActions.trackData"><i class="fa fa-print"><\/i><\/button>\r\n\r\n        <!-- Download -->\r\n        <button ng-if="docActions.doc.pdfUrl" type="button" document-download-on-click="{{ docActions.doc.pdfUrl }}" class="btn btn-default hidden-sm" aria-label="Download" tooltip="Download" tooltip-placement="top" tooltip-popup-delay="300" metrics-track="{{docActions.trackName(docActions.verbs.download)}}" metrics-track-data="docActions.trackData"><i class="fa fa-download"><\/i><\/button>\r\n\r\n        <!-- No PDF Indicator -->\r\n        <span ng-if="!docActions.doc.pdfUrl && docActions.doc.type != docActions.docTypes.deliveries" class="btn btn-link hidden-xs doc-action-unavaiable" tooltip="This document does not have a PDF available for instant print or download" tooltip-placement="top" tooltip-popup-delay="300">No pdf<\/span>\r\n\r\n        <!-- No POD Indicator -->\r\n        <a ui-sref="modalDocumentView(docActions.doc.urlParams)" class="btn btn-link hidden-xs doc-action-unavaiable" ng-if="!docActions.doc.pdfUrl && docActions.doc.type == docActions.docTypes.deliveries" tooltip="Proof of delivery status, print and download are coming soon" tooltip-placement="top" tooltip-popup-delay="300">{{docActions.doc.DocumentStatus == 3 ? \'Check for POD\' : \'No POD\' }}<\/a>\r\n        <!-- Flag -->\r\n        <span class="btn btn-link" aria-label="Flag" tooltip="Flag" tooltip-placement="top" tooltip-popup-delay="300"><flag data-current-flag-color="docActions.doc.flag" data-available-flags="docs.flags" data-update-flag-function="docs.updateFlag(docActions.doc, flagId)"><\/flag><\/span>\r\n\r\n    <\/div>\r\n\r\n    <!-- Overflow menu -->\r\n    <div class="pull-right" dropdown keyboard-nav>\r\n\r\n        <!-- Vertical ellipsis -->\r\n        <button id="doc-actions-{{docActions.doc.id}}" type="button" class="btn btn-link" dropdown-toggle>\r\n            <i class="fa fa-ellipsis-v"><\/i>\r\n            <span class="sr-only">More actions<span> for document {{docActions.doc.ref}}, {{docActions.doc.id}}<\/span><\/span>\r\n        <\/button>\r\n\r\n        <ul class="dropdown-menu" role="menu" aria-labelledby="doc-actions-{{docActions.doc.id}}">\r\n            <!-- View -->\r\n            <li role="menuitem" class="visible-xs-block">\r\n                <a ui-sref="modalDocumentView(docActions.doc.urlParams)" class="btn btn-link btn-icon"><i class="fa fa-fw fa-search-plus"><\/i> View details<\/a>\r\n            <\/li>\r\n            <!-- View -->\r\n            <li role="menuitem" ng-if="docActions.doc.canModify">\r\n                <a ng-href="#/orders/modify/{{docActions.doc.accountId}}/{{docActions.doc.id}}" class="btn btn-link btn-icon"><i class="fa fa-fw fa-pencil-square-o"><\/i> Modify<\/a>\r\n            <\/li>\r\n            <!-- Print -->\r\n            <li ng-if="docActions.doc.pdfUrl" role="menuitem" class="doc-actions-print visible-xs-block visible-sm-block">\r\n                <button type="button" class="btn btn-link btn-icon" document-to-print-on-click="{{ docActions.doc.pdfUrl }}" print-tracking-origin="Documents" metrics-track="{{docActions.trackName(docActions.verbs.print)}}" metrics-track-data="docActions.trackData"><i class="fa fa-fw fa-print"><\/i> Print<\/button>\r\n            <\/li>\r\n            <!-- Download -->\r\n            <li ng-if="docActions.doc.pdfUrl" role="menuitem" class="visible-xs-block visible-sm-block">\r\n                <button type="button" class="btn btn-link btn-icon" document-download-on-click="{{ docActions.doc.pdfUrl }}" metrics-track="{{docActions.trackName(docActions.verbs.download)}}" metrics-track-data="docActions.trackData"><i class="fa fa-fw fa-download"><\/i> Download<\/button>\r\n            <\/li>\r\n            <!-- Share -->\r\n            <li role="menuitem">\r\n                <permalink address="docs.getDocumentUrl(itm.accountId, itm.typeNameAlt, itm.id)" selected-account="itm.accountId" doc-no="itm.id" doc-type="itm.type" doc-sbu="itm.sbuCode" doc-delivery-indicator="itm.DocumentSummary.DeliveryIndicator" />\r\n            <\/li>\r\n        <\/ul>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("doc-status.html","<span class='label-status' ng-class='status.cssClass'>\r\n    {{status.statusDescription}} <span class='label-document-status-message' ng-show='status.docStatus == 4'>{{status.docStatusMessage}}<\/span>\r\n<\/span>\r\n");n.put("editNote.html",'<div class="modal-content" role="dialog">\r\n    <ng-form name="editNoteForm">\r\n\r\n        <div class="modal-header">\r\n            <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n            <h4 class="modal-title">{{editNote.isAdd ? \'Add\' : \'Edit\'}} note<\/h4>\r\n        <\/div>\r\n\r\n        <div class="modal-body">\r\n            <textarea class="form-control no-resize" placeholder="Enter note" ng-model="editNote.note" required maxlength="500" rows="8"><\/textarea>\r\n            <small><br/>Please follow your note up with a phone call if it is critical or time-sensitive.<\/small>\r\n        <\/div>\r\n\r\n        <div class="pull-right" style="padding: 15px" ng-show="editNote.isAccountManager || editNote.isCustomerOrDelegate">\r\n            <input type="checkbox" value="" id="notify" ng-model="editNote.notify">\r\n            <label for="notify">\r\n                {{editNote.isAccountManager ? \'Notify my customer(s) via email\' : \'Notify my account manager via email\'}}\r\n            <\/label>\r\n        <\/div>\r\n\r\n        <div class="clearfix"/>\r\n\r\n        <div class="modal-footer">\r\n            <button id="submit-note" type="submit" class="btn btn-primary btn-150" ng-click="editNote.update()">{{editNote.isAdd ? \'Add\' : \'Save\'}}<\/button>\r\n        <\/div>\r\n\r\n    <\/ng-form>\r\n\r\n<\/div>\r\n');n.put("home.html",'    <link href="/assets/scripts/app/home/home/css/style_sheet.css" rel="stylesheet" type="text/css">\r\n    <link href="/assets/scripts/app/home/home/css/responsive.css" rel="stylesheet" type="text/css">\r\n    <link href="https://fonts.googleapis.com/css?family=Lato:400,700,900&display=swap" rel="stylesheet">\r\n    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" rel="stylesheet">\r\n    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,700,900&display=swap" rel="stylesheet">\r\n    <link href="https://fonts.googleapis.com/css?family=Lora:400,400i&display=swap" rel="stylesheet">\r\n\r\n    <div class="container-fluid pad" data-ng-controller="HomeController">\r\n        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 main-banner pad p-l-0 p-r-0">\r\n\r\n            <div class="col-xl-4 col-lg-5 col-md-12 col-sm-12 col-xs-12 banner-content">\r\n                <div class="banner-content-background">\r\n                    <h1>\r\n                        24/7 online access to <br class="hidden-sm hidden-xs">\r\n                        the CSR brands you <br class="hidden-sm hidden-xs">\r\n                        know and trust.\r\n                    <\/h1>\r\n\r\n                    <button id="login-banner" class="login" ng-click="goToLogin()">Login<\/button>&nbsp;&nbsp;&nbsp;<button id="signup-banner" class="signup" ng-click="goToSignup()">Sign Up<\/button>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 hidden-md hidden-lg black-bg" style="padding-bottom:10px">\r\n            <center>\r\n                <a href="https://apps.apple.com/au/app/csr-connect/id1066126031" target="_blank"><img src="/assets/scripts/app/home/home/images/appstore.png" class="img-responsive app-store-mini" style="display: inline-block"><\/a>\r\n                <a href="https://play.google.com/store/apps/details?id=au.com.csrconnect&hl=en" target="_blank"><img src="/assets/scripts/app/home/home/images/playstore.png" class="img-responsive app-store-mini" style="display: inline-block"><\/a>\r\n            <\/center>\r\n        <\/div>\r\n\r\n        <div class="col-lg-12 col-md-12 col-sm-12 hidden-xs">\r\n            <img src="/assets/scripts/app/home/home/images/banner-logos.png" class="img-responsive" style="width:100%;">\r\n        <\/div>\r\n\r\n        <div class="hidden-lg hidden-md hidden-sm col-xs-12">\r\n            <img src="/assets/scripts/app/home/home/images/mob-banner-logos.png" class="img-responsive" style="width:100%;">\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n    <div class="container-fluid grey-bg" data-ui-view="features" data-ui-page-template="homefeatures">\r\n        <div class="container">\r\n\r\n            <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 workmate">\r\n\r\n                <h1 id="features">MEET YOUR NEW WORKMATE<\/h1>\r\n                <p>Streamline your order processes and save time<br class="hidden-xs hidden-sm">\r\n                    chasing paperwork and status updates.<\/p>\r\n\r\n                <div class="col-lg-12 col-md-12 col-sm-12 hidden-xs">\r\n                    <img src="/assets/scripts/app/home/home/images/workmate-img.png" class="img-responsive">\r\n                <\/div>\r\n                <div class="hidden-lg hidden-md hidden-sm col-xs-12 mob-pad">\r\n                    <img src="/assets/scripts/app/home/home/images/mob-workmate-img.png" class="img-responsive">\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n    <div class="container mob">\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 header">\r\n\r\n            <h1>\r\n                Quickly access your<br class="hidden-xs hidden-sm">\r\n                account-based pricing\r\n            <\/h1>\r\n            <p class="hidden-xs">\r\n                Mark R.<br>\r\n                The Repair Team\r\n            <\/p>\r\n            <h4 class="hidden-xs">“I have used CSR Connect since it was first introduced. It is a great tool to arrange any kind of order. Small or large, pick up or delivery. I also use Connect to price check materials for our quoting purposes.” <\/h4>\r\n\r\n            <img src="/assets/scripts/app/home/home/images/path1-2.png" class="img-responsive path1 hidden-xs hidden-sm">\r\n            <img src="/assets/scripts/app/home/home/images/path1.png" class="img-responsive path1 hidden-md hidden-lg">\r\n\r\n        <\/div>\r\n\r\n        <div class="col-lg-5 col-lg-offset-1 col-md-offset-1 col-md-5 col-sm-12 col-xs-12 header-img">\r\n\r\n            <img src="/assets/scripts/app/home/home/images/quick-access.png" class="img-responsive">\r\n\r\n        <\/div>\r\n\r\n\r\n    <\/div>\r\n\r\n    <div class="container">\r\n\r\n        <div class="col-lg-6 col-md-6 hidden-sm hidden-xs header-img-2">\r\n            <img src="/assets/scripts/app/home/home/images/csr-crop.jpg" class="img-responsive csr-screenshot">\r\n            <img src="/assets/scripts/app/home/home/images/path5-2.png" class="img-responsive path2 csr-screenshot-path">\r\n        <\/div>\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 header-2">\r\n\r\n            <h1>Conveniently order <br class="hidden-xs hidden-sm">\r\n                CSR products online<\/h1>\r\n            <p class="hidden-xs">Matt B.<br>\r\n                Insulation Essentials<\/p>\r\n            <h4 class="hidden-xs">“It offers a speedy ordering service with no chances of mistakes as you are the one inputting information. Simple pricing lookups instead of waiting for a rep to call you back saves so much time.” <\/h4>\r\n\r\n        <\/div>\r\n\r\n        <div class="hidden-lg hidden-md col-sm-12 col-xs-12 header-img-2">\r\n            <img src="/assets/scripts/app/home/home/images/csr.jpg" class="img-responsive">\r\n            <img src="/assets/scripts/app/home/home/images/path1.png" class="img-responsive path2">\r\n        <\/div>\r\n\r\n\r\n    <\/div>\r\n\r\n\r\n\r\n    <div class="container">\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 header header-3">\r\n\r\n            <h1>Stay updated via<br class="hidden-xs hidden-sm">\r\n                real-time tracking<br class="hidden-xs hidden-sm">\r\n                with Proof of Delivery<\/h1>\r\n            <p class="hidden-xs">Tony S.<br>\r\n                C & S Lightweight<\/p>\r\n            <h4 class="hidden-xs">“CSR Connect makes it easy to see once a delivery has gone to site with the proof of delivery pics. Checking invoices with one click also makes life easy.” <\/h4>\r\n\r\n            <img src="/assets/scripts/app/home/home/images/path3.png" class="img-responsive path1 hidden-sm hidden-xs">\r\n\r\n        <\/div>\r\n\r\n        <div class="col-lg-5 col-lg-offset-1 col-md-offset-1 col-md-5 col-sm-12 col-xs-12 header-img-3">\r\n\r\n            <img src="/assets/scripts/app/home/home/images/app.png" class="img-responsive">\r\n\r\n        <\/div>\r\n\r\n\r\n    <\/div>\r\n\r\n    <div class="container">\r\n        <div class="col-lg-6 col-md-6 hidden-sm hidden-xs header-img-4">\r\n\r\n            <img src="/assets/scripts/app/home/home/images/paperwork-crop.png" class="img-responsive" style="box-shadow: 5px 5px 40px #d8d8d8;">\r\n            <img src="/assets/scripts/app/home/home/images/path6.png" class="img-responsive path4desk">\r\n        <\/div>\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 header-2 mob-head-3">\r\n\r\n            <h1 class="m-t-0">Save heaps of time <br class="hidden-sm hidden-xs">managing paperwork<\/h1>\r\n            <p class="hidden-xs">Quintin D.\r\n                <br>\r\n                Quinos Plasterworx<\/p>\r\n            <h4 class="hidden-xs">“CSR Connect is a huge part of my business, allowing me to access data and invoices quickly and easily. It really is a lifeline for us in such a busy work/life world.” <\/h4>\r\n\r\n\r\n\r\n        <\/div>\r\n        <div class="hidden-lg hidden-md col-sm-12 col-xs-12 col-xs-12 header-img-4">\r\n\r\n            <img src="/assets/scripts/app/home/home/images/paperwork-crop.png" class="img-responsive tab" style="box-shadow: 5px 5px 40px #d8d8d8;">\r\n            <img src="/assets/scripts/app/home/home/images/path1.png" class="img-responsive path3">\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="container">\r\n\r\n        <div class="hidden-lg hidden-md col-sm-12 col-xs-12 col-xs-12 header-img-4">\r\n\r\n            <img src="/assets/scripts/app/home/home/images/path1.png" class="img-responsive path2 path4">\r\n\r\n        <\/div>\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 header head-4 mob-head-4">\r\n\r\n            <h1>Simplify financials with<br class="hidden-xs hidden-sm">\r\n                streamlined payments and reporting<\/h1>\r\n            <p class="hidden-xs">Nella T.<br>\r\n                Clairville Homes<\/p>\r\n            <h4 class="hidden-xs">“This CSR Connect portal is very useful for me. It allows me to check outstanding balances, download invoices I may have missed and gives me an overall picture of where my accounts are. It\'s also a great place to go for all sorts of other information. My favourite feature is being able to store my credit card details and get the discount on credit card fees.” <\/h4>\r\n\r\n\r\n\r\n        <\/div>\r\n\r\n        <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12  header-img-5">\r\n            <img src="/assets/scripts/app/home/home/images/payments-crop.png" class="img-responsive">\r\n        <\/div>\r\n\r\n\r\n    <\/div>\r\n    <br class="hidden-xs"><br class="hidden-xs"><br><br>\r\n\r\n\r\n    <div class="container-fluid footer-bg m-b-30" data-ng-controller="HomeController">\r\n        <div class="container">\r\n\r\n            <div class="col-lg-8 col-md-8 col-lg-offset-2 col-md-offset-2 col-sm-12 col-xs-12 footer" style="text-align: center;">\r\n\r\n                <h1>CSR Connect has been built for<br class="hidden-sm hidden-xs">\r\n                    the modern tradie. <\/h1>\r\n                <p id="more-info">Registration is FREE and it only takes 60 seconds to get started. If you are new to CSR products, or if you have feedback and questions about CSR Connect, we invite you to contact us for more information.<\/p>\r\n                <button class="signup" ng-click="goToSignup()">Sign Up<\/button>\r\n            <\/div>\r\n\r\n\r\n            <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 col-lg-offset-3 col-md-offset-3 store">\r\n\r\n                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12">\r\n                    <img src="/assets/scripts/app/home/home/images/footer-mobile.png" class="img-responsive">\r\n\r\n                <\/div>\r\n\r\n                <div class="col-lg-6 col-md-6 col-sm-12 col-xs-12 store-icons">\r\n                    <a href="https://apps.apple.com/au/app/csr-connect/id1066126031" target="_blank"><img src="/assets/scripts/app/home/home/images/appstore.png" class="img-responsive app-store"><br><\/a>\r\n                    <a href="https://play.google.com/store/apps/details?id=au.com.csrconnect&hl=en" target="_blank"><img src="/assets/scripts/app/home/home/images/playstore.png" class="img-responsive app-store"><\/a>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 helpline">\r\n\r\n                <ul>\r\n\r\n                    <li class="contact-us-icon"><img src="/assets/scripts/app/home/home/images/help.svg" class="img-responsive" width="53"><\/li>\r\n                    <li class="contact-us-phone"><a class="white-font m-t-10" href="mailto:help@csr.com.au">help@csr.com.au<\/a><\/li>\r\n                <\/ul>\r\n\r\n            <\/div>\r\n\r\n            <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 helpline">\r\n\r\n                <ul>\r\n\r\n                    <li><img src="/assets/scripts/app/home/home/images/phone.svg" class="img-responsive" width="36"><\/li>\r\n                    <li class="contact-us-phone"><a class="white-font m-t-10" href="tel:1800 909 439">1800 909 439<\/a><\/li>\r\n                <\/ul>\r\n\r\n            <\/div>\r\n\r\n            <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12 helpline">\r\n\r\n                <ul>\r\n\r\n                    <li><img src="/assets/scripts/app/home/home/images/phone.svg" class="img-responsive" width="36"><\/li>\r\n                    <li class="contact-us-phone"><a class="white-font m-t-10" href="tel:0800 277 266">0800 277 266 (NZ)<\/a><\/li>\r\n                <\/ul>\r\n\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>');n.put("partners.html",'    <!-- Optional JavaScript -->\r\n<!-- jQuery first, then Popper.js, then Bootstrap JS -->\r\n<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"><\/script>\r\n<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"><\/script>\r\n<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"><\/script>\r\n<link href="/assets/scripts/app/home/partners/css/custom.css" rel="stylesheet" type="text/css">\r\n<!--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous" />-->\r\n\r\n<div>\r\n    <section id="app-logo">\r\n        <div class="container xlp-container">\r\n            <div class="row justify-content-between">\r\n                <div class="col-xl-3 col-lg-9 col-md-4 col-sm-5 d-flex align-items-center p-t-25">\r\n                    <img src="/assets/img/logos/logo-csr-connect-fs.png" class="img-fluid" alt="app-logo" />\r\n                <\/div>\r\n                <div class="col-xl-3 col-lg-3 col-md-4 col-sm-5 col-5">\r\n                    <img src="/assets/scripts/app/home/partners/images/logo_Xero App Partner Connected Badge.svg" class="img-fluid float-right" alt="xero-app-partner-logo" />\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <section id="key-benefit">\r\n        <div class="container">\r\n            <div class="jumbotron xlp-jumbotron">\r\n                <div class="xlp-jumbotron-text">\r\n                    <h1 class="display-5">\r\n                        CSR Connect + Xero: Automatically sync your CSR invoices\r\n                    <\/h1>\r\n                    <p class="lead">\r\n                        Save time processing your CSR invoices by linking your CSR Connect account with Xero\r\n                    <\/p>\r\n                    <div class="row justify-content-start">\r\n                        <div class="col-lg-3 col-6 col-md-5 col-sm-6 col-xs-6">\r\n                            <a class="btn btn-primary xlp-btn-app-cta" href="#" role="button">Go to CSR Connect<\/a>\r\n                        <\/div>\r\n                        <div class="col-lg-3 col-6 col-md-5 col-sm-6 col-xs-6">\r\n                            <a class="btn btn-secondary xlp-btn-xero-cta" href="https://xero.com/signup/?xtid=x30csrconnect" role="button">Try Xero for Free<\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <section id="app-img">\r\n        <div class="container xlp-container">\r\n            <div class="row">\r\n                <div class="col-lg-6 col-md-6">\r\n                    <div class="text-center">\r\n                        <img src="/assets/scripts/app/home/partners/images/screenshot-connect.png" class="img-fluid xlp-v-align" alt="xero-app-partner-logo" />\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="col-lg-6 col-md-6">\r\n                    <div class="text-center d-sm-none d-none d-md-block d-lg-block">\r\n                        <img src="/assets/scripts/app/home/partners/images/screenshot-xero.png" class="img-fluid xlp-v-align" alt="xero-app-partner-logo" />\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n    \r\n<section id="what-app-does" class="text-white xlp-bg-primary-color">\r\n    <div class="container xlp-container">\r\n        <div class="row">\r\n            <div class="col-sm-12">\r\n                <h2 class="text-center xlp-h2">About Xero<\/h2>\r\n                <p>Xero is world-leading online accounting software built for small business.<\/p>\r\n                <ul>\r\n                    <li>Get a real-time view of your cashflow. Log in anytime, anywhere on your Mac, PC, tablet of phone to get a real-time view of your cash flow. It’s small business accounting software that’s simple, smart and occasionally magical.<\/li>\r\n                    <li>Run your business on the go. Use our mobile app to reconcile, send invoices, or create expense claims - from anywhere.<\/li>\r\n                    <li>Get paid faster with online invoicing. Send online invoices to your customers - and get updated when they’re opened.<\/li>\r\n                    <li>Reconcile in seconds. Xero imports and categorises your latest bank transactions. Just click ok to reconcile.<\/li>\r\n                <\/ul>\r\n                <p>\r\n                    Find out more or try <a href="https://www.xero.com/" hreflang="en" media="all" class="text-white">Xero Accounting Software<\/a> for free.\r\n                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<section id="what-app-does" class="text-white xlp-bg-secondary-color">\r\n    <div class="container xlp-container">\r\n        <div class="row">\r\n            <div class="col-sm-12">\r\n                <h2 class="text-center xlp-h2">What is CSR Connect<\/h2>\r\n                <p class="text-center">CSR Connect is the online B2B portal for CSR customers to view their custom product pricing and manage their orders.<\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row">\r\n            <div class="col-sm-4">\r\n                <h5 class="xlp-h5">Buy CSR Products<\/h5>\r\n                <p class="xlp-p">\r\n                    Check your account-based product pricing and place orders online.\r\n                <\/p>\r\n            <\/div>\r\n            <div class="col-sm-4">\r\n                <h5 class="xlp-h5">Track deliveries<\/h5>\r\n                <p class="xlp-p">\r\n                    Keep updated with real-time tracking and proof of delivery.\r\n                <\/p>\r\n            <\/div>\r\n            <div class="col-sm-4">\r\n                <h5 class="xlp-h5">Manage admin<\/h5>\r\n                <p class="xlp-p">\r\n                    Access job documents, make payments and get advanced financial reporting.\r\n                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<section id="what-xero-does" class="text-white xlp-bg-primary-color">\r\n        <div class="container xlp-container">\r\n            <div class="row">\r\n                <div class="col-lg-6">\r\n                    <div class="row">\r\n                        <div class="col-md-12">\r\n                            <h3 class="xlp-h3">What Xero Does<\/h3>\r\n                            <p class="xlp-p">\r\n                                Xero is online accounting software that lets you run your business easily and efficiently.\r\n                            <\/p>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-md-12">\r\n                            <div class="row">\r\n                                <div class="col-sm-6">\r\n                                    <h5 class="xlp-h5">See your up-to-date cash position<\/h5>\r\n                                    <p class="xlp-p">\r\n                                        Know how you’re doing financially with secure daily updates from your bank accounts and a clear visual dashboard.\r\n                                    <\/p>\r\n                                <\/div>\r\n                                <div class="col-sm-6">\r\n                                    <h5 class="xlp-h5">\r\n                                        Get paid faster and improve cash flow\r\n                                    <\/h5>\r\n                                    <p class="xlp-p">\r\n                                        Easily create and send invoices with online payments and automated invoice reminders for faster payment.\r\n                                    <\/p>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-md-12">\r\n                            <div class="row">\r\n                                <div class="col-sm-6">\r\n                                    <h5 class="xlp-h5">Run your business from anywhere<\/h5>\r\n                                    <p class="xlp-p">\r\n                                        Access your business finances anytime, from any internet-connected device, and use the Xero app for iOS and Android.\r\n                                    <\/p>\r\n                                <\/div>\r\n                                <div class="col-sm-6">\r\n                                    <h5 class="xlp-h5">Connect and collaborate anytime<\/h5>\r\n                                    <p class="xlp-p">\r\n                                        Invite your team and your advisors to work with you in real time from home, office, or on the go using the mobile app.\r\n                                    <\/p>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-md-12">\r\n                            <a class="btn btn-secondary xlp-btn-xero-cta"\r\n                               href="https://www.xero.com/signup/?xtid=x30csrconnect">Try Xero for Free<\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="col-lg-6 d-flex align-items-center">\r\n                    <img src="/assets/scripts/app/home/partners/images/screenshot-xero-2.png" class="img-fluid xlp-v-align" alt="Xero Product Image" />\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/section>\r\n\r\n<section id="connect-app-to-xero">\r\n    <div class="container xlp-container">\r\n        <div class="row">\r\n            <div class="col text-center">\r\n                <h2>Connect CSR Connect to Xero in 3 Steps<\/h2>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row">\r\n            <div class="col-12">\r\n                <div id="accordianId" role="tablist" aria-multiselectable="true" class="xlp-collapse-accordian">\r\n                    <div class="card xlp-card ">\r\n                        <a class="text-dark" data-toggle="collapse" data-parent="#accordianId" href="#section1ContentId" aria-expanded="true" aria-controls="section1ContentId">\r\n                            <div class="card-header" role="tab" id="section1HeaderId">\r\n                                <h5 class="mb-0">\r\n                                    1 - Signup to CSR Connect\r\n                                <\/h5>\r\n                            <\/div>\r\n                        <\/a>\r\n                        <div id="section1ContentId" class="collapse show" role="tabpanel" aria-labelledby="section1HeaderId">\r\n                            <div class="card-body">\r\n                                <div class="row">\r\n                                    <div class="col-lg-8 col-md-6 col-sm-6 col-12">\r\n                                        <h6>Step 1 - Login to CSR Connect<\/h6>\r\n                                        <p>\r\n                                            Login to CSR Connect at\r\n                                            <a href="https://csrconnect.com.au/#/login" target="_blank" class="text-dark">https://csrconnect.com.au/#/login<\/a>\r\n                                        <\/p>\r\n\r\n                                        <p>\r\n                                            Log in to your CSR Connect account and navigate to the new  "Integrations" options under your profile menu and click to link with Xero.\r\n                                        <\/p>\r\n                                    <\/div>\r\n\r\n                                    <div class="col-lg-4 col-md-6 col-sm-6 col-12">\r\n                                        <img src="/assets/scripts/app/home/partners/images/set-up-diagram-1.png" class="img-fluid rounded mx-auto d-block xlp-v-align" alt="step" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="card xlp-card ">\r\n                        <a class="text-dark" data-toggle="collapse" data-parent="#accordianId" href="#section2ContentId" aria-expanded="true" aria-controls="section2ContentId">\r\n                            <div class="card-header" role="tab" id="section2HeaderId">\r\n                                <h5 class="mb-0">2 - Connect to Xero<\/h5>\r\n                            <\/div>\r\n                        <\/a>\r\n                        <div id="section2ContentId" class="collapse in" role="tabpanel" aria-labelledby="section2HeaderId">\r\n                            <div class="card-body">\r\n                                <div class="row">\r\n                                    <div class="col-lg-8 col-md-6 col-sm-6 col-12">\r\n                                        <h6>Step 2 - Connect to Xero<\/h6>\r\n                                        <p>\r\n                                            Log in to your Xero account\r\n                                        <\/p>\r\n\r\n                                        <p>\r\n                                            You will be asked to allow access for CSR Connect to link to your Xero organisation.\r\n                                        <\/p>\r\n                                    <\/div>\r\n\r\n                                    <div class="col-lg-4 col-md-6 col-sm-6 col-12">\r\n                                        <img src="/assets/scripts/app/home/partners/images/set-up-diagram-2.png" class="img-fluid rounded mx-auto d-block xlp-v-align" alt="step" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="card xlp-card ">\r\n                        <a class="text-dark" data-toggle="collapse" data-parent="#accordianId" href="#section3ContentId" aria-expanded="true" aria-controls="section2ContentId">\r\n                            <div class="card-header" role="tab" id="section3HeaderId">\r\n                                <h5 class="mb-0">3 - Sign in and authorise CSR Connect<\/h5>\r\n                            <\/div>\r\n                        <\/a>\r\n                        <div id="section3ContentId" class="collapse in" role="tabpanel" aria-labelledby="section3HeaderId">\r\n                            <div class="card-body">\r\n                                <div class="row">\r\n                                    <div class="col-lg-8 col-md-6 col-sm-6 col-12">\r\n                                        <h6>Sign in with Xero<\/h6>\r\n                                        <p>\r\n                                            Sign in with Xero, and authorise CSR Connect to access your Xero data.\r\n                                        <\/p>\r\n\r\n                                        <p>\r\n\r\n                                            Next, you\'ll need to decide which account codes to link each type of CSR Invoice to. <br />\r\n                                            We\'ll suggest one by default, but if you\'re unsure we\'d suggest Cost of Goods Sold or Purchases. <br />\r\n                                            Finally, you\'ll need to link your CSR customer accounts to the supplier contact you have set up in Xero.\r\n                                        <\/p>\r\n                                    <\/div>\r\n\r\n                                    <div class="col-lg-4 col-md-6 col-sm-6 col-12">\r\n                                        <img src="/assets/scripts/app/home/partners/images/set-up-diagram-3.png" class="img-fluid rounded mx-auto d-block xlp-v-align" alt="step" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n\r\n<section id="connect-app-to-xero">\r\n    <div class="container xlp-container">\r\n        <!--<div class="row">\r\n            <div class="col-sm-12">\r\n                <h2 class="text-center xlp-h2">What is CSR Connect<\/h2>\r\n                <p class="text-center">CSR Connect is the online B2B portal for CSR customers to view their custom product pricing and manage their orders.<\/p>\r\n            <\/div>\r\n        <\/div>-->\r\n        <div class="row justify-content-center">\r\n            <div class="col-lg-6 col-6 col-md-6 col-sm-6 col-xs-6 justify-content-center">\r\n                <a class="btn btn-primary xlp-btn-app-cta" href="#" role="button">Go to CSR Connect<\/a>\r\n            <\/div>\r\n            <div class="col-lg-6 col-6 col-md-6 col-sm-6 col-xs-6 justify-content-center">\r\n                <a class="btn btn-secondary xlp-btn-xero-cta" href="https://xero.com/signup/?xtid=x30csrconnect" role="button">Try Xero for Free<\/a>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n<\/div>');n.put("integrations.html",'<div class="container" ng-controller="integrationsController as ctrl" ng-cloak>\r\n    \r\n    <h3 class="panel-title">Integrations<\/h3>\r\n    \r\n    <div id="xero-integrations" class="panel panel-fill" feature-toggle="319">\r\n        <div class="row m-0 p-t-1 p-b-1">\r\n            <div class="col-xs-2">\r\n                <img src="/Assets/img/integrations/xero/xerologo.png" alt="Xero" class="m-1" style="width: 80px;">\r\n            <\/div>\r\n            <div class="col-xs-10">\r\n                <div class="row">\r\n                    <div class="col-xs-8">\r\n                        <h4 class="p-t-1">Xero Accounting Integration<\/h4>\r\n                    <\/div>\r\n                    <div class="col-xs-4">\r\n                        <button ng-click="ctrl.startXeroIntegration()" class="btn btn-default pull-right m-2"\r\n                                data-ng-show="ctrl.dataLoaded && ctrl.connections.length <= 0">\r\n                            Add Integration\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="row" data-ng-show="!ctrl.dataLoaded">\r\n                    <div class="col-xs-12">\r\n                        <span class="loading inline-block m-b-n-5"><i><\/i><\/span><strong class="p-l-1">Retrieving Xero contacts - this may take a few minutes<\/strong>\r\n                    <\/div>\r\n                <\/div>\r\n                <div data-ng-repeat="con in ctrl.connections" data-ng-show="ctrl.dataLoaded && !ctrl.showInitialSetup">\r\n                    <div class="row">\r\n                        <div class="col-xs-4">\r\n                            <p>\r\n                                <small>{{con.ProviderName}}<\/small><br>\r\n                            <p class="list-docs-item-desc">Status: {{con.Status}}<\/p>\r\n                            <\/p>\r\n                        <\/div>\r\n                        <div class="col-xs-4">\r\n                            <ul class="list-docs-item-meta">\r\n                                <li data-ng-repeat="org in con.Organisations">\r\n                                    <p>{{org.Name}}<\/p>\r\n                                    <p>{{org.OrganisationEntityType}}<\/p>\r\n                                <\/li>\r\n                            <\/ul>\r\n                        <\/div>\r\n                        <div class="col-xs-4">\r\n                            <button class="btn btn-primary pull-right" ng-click="ctrl.confirmDeleteConnection(con.Id)">Delete<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-xs-12">\r\n                            <h4>Recent activity<\/h4>\r\n                            <div class="well m-l-0" style="max-height: 400px; overflow-y: scroll; ">\r\n                                <div data-ng-repeat="account in con.AccountDetails">\r\n                                    <div class="row p-b-1">\r\n                                        <div class="col-xs-12">\r\n                                            <sbu-image sbu-code="ctrl.getMatchingAccountDetails(con, account.AccountId).SbuCode" class="inline-block"><\/sbu-image>\r\n                                            <strong class="p-l-1">{{ctrl.getMatchingAccountDetails(con, account.AccountId).Name1}}<\/strong>\r\n                                            <span class="text-muted">({{account.AccountId}})<\/span>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    <div class="m-t-10 m-b-20">\r\n                                        <div data-ng-repeat="log in account.Logs">\r\n                                            <i class="fa fa-fw {{log.IsSuccess ? \'fa-check-circle text-success\' : \'fa-times-circle text-danger\'}}"><\/i>\r\n                                            <span>\r\n                                                {{log.CreatedOn | humanizeDate}} -\r\n\r\n                                                <span ng-if="log.DocumentNumber!=null">\r\n                                                    {{log.Action===1 || log.Action==3 ? \'invoice\' : \'credit note\'}} {{log.DocumentNumber}}\r\n                                                <\/span>\r\n                                                <span ng-if="log.Action==0">create integration<\/span>\r\n                                                <span ng-if="log.Action==1 || log.Action==2">push to xero<\/span>\r\n                                                <span ng-if="log.Action==3 || log.Action==4">pdf attachment in xero<\/span>\r\n                                                {{log.IsSuccess ? \'succeeded\' : \'failed\'}}\r\n                                                <a ng-if="!log.IsSuccess && log.Response.length>0" href="javascript:;" ng-click="log.ShowErrorDetails=(log.ShowErrorDetails==null ? true : !log.ShowErrorDetails)">{{log.ShowErrorDetails ? \'Hide\' : \'Show\'}} Details<\/a>\r\n                                            <\/span>\r\n                                            <p ng-if="log.ShowErrorDetails" class="text-muted small m-l-20">{{log.Response}}<\/p>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row m-0 p-t-1 p-b-1">\r\n            <div class="col-xs-12" data-ng-show="ctrl.dataLoaded && ctrl.connections.length && ctrl.showInitialSetup">\r\n                <h2>Setup Xero Integration<\/h2>\r\n                <p>We have successfully connected to <strong>{{ctrl.xeroConnection.Organisations[0].Name}}<\/strong>. In order to receive documents from CSR Connect, you need to complete the below configuration.<\/p>\r\n                <hr />\r\n                <h3>Chart of Accounts<\/h3>\r\n                <p>Please select the General Ledger accounts that these CSR Connect document types should be classified as.<\/p>\r\n                <table class="table">\r\n                    <thead>\r\n                        <tr>\r\n                            <th scope="col">CSR Connect Document<\/th>\r\n                            <th>Xero General Ledger Account Code<\/th>\r\n                        <\/tr>\r\n                    <\/thead>\r\n                    <tbody>\r\n                        <tr data-ng-repeat="doc in ctrl.connectDocumentTypes">\r\n                            <td>{{doc.description}}<\/td>\r\n                            <td>\r\n                                <select ng-model="ctrl.selectedDocumentTypes[doc.docType]">\r\n                                    <option ng-repeat="x in ctrl.xeroAccountCodes" value="{{x.value}}">\r\n                                        {{x.value}} - {{x.description}}\r\n                                    <\/option>\r\n                                <\/select>\r\n                            <\/td>\r\n                        <\/tr>\r\n                    <\/tbody>\r\n                <\/table>\r\n                <hr />\r\n                <h3>Account Contacts<\/h3>\r\n                <p>Please select the Contacts you want to associate with the CSR Connect accounts you have access to. If a Contact is missing, add it in Xero and refresh this page.<\/p>\r\n\r\n                <table class="table">\r\n                    <thead>\r\n                        <tr>\r\n                            <th scope="col">\r\n                                CSR Connect Account\r\n                            <\/th>\r\n                            <th>Xero Contact<\/th>\r\n                        <\/tr>\r\n                    <\/thead>\r\n                    <tbody>\r\n                        <tr data-ng-repeat="acc in ctrl.xeroConnection.CsrAccounts">\r\n                            <td class="lh-30">\r\n                                <div class="float-left m-r-20"><sbu-image sbu-code="acc.SbuCode"><\/sbu-image><\/div>\r\n                                <div>\r\n                                    <span class="float-left lh-15">{{acc.Name1}}<br /><small class="m-t-10 lh-10">{{acc.AccountId}}<\/small><\/span>\r\n\r\n                                <\/div>\r\n                            <\/td>\r\n                            <td>\r\n\r\n                                <div angucomplete-alt\r\n                                     pause="300"\r\n                                     placeholder="Search Contacts"\r\n                                     selected-object="ctrl.selectedAccountContacts[acc.AccountId]"\r\n                                     remote-url="api/admin/integrations/xero/contacts/{{ctrl.xeroConnection.TenantId}}?query="\r\n                                     remote-url-data-field="data"\r\n                                     search-fields="Name"\r\n                                     title-field="Name"\r\n                                     minlength="1"\r\n                                     match-class="search-highlight"\r\n                                     input-class="form-control autocomplete-noimage"\r\n                                     text-no-results="No contacts found">\r\n                                <\/div>\r\n                            <\/td>\r\n                        <\/tr>\r\n                    <\/tbody>\r\n                <\/table>\r\n            <\/div>\r\n\r\n            <div data-ng-show="ctrl.dataLoaded && ctrl.showInitialSetup">\r\n                <button ng-click="ctrl.saveConnectionDetails()" class="btn btn-default" style="margin: 20px">\r\n                    Save\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("invoices-counter.html",'<span class="badge badge-circle animate-delayed-entry" aria-label="Count of invoices since yesterday" tooltip="{{ ic.recentInvoicesString }}" ng-bind="ic.recentInvoicesTruncated" ng-show="!!ic.count"><\/span>\r\n');n.put("jobHeader.html",'<div data-auth-key="Customer/Jobs" data-auth="u">\r\n\r\n    <div ng-if="!jh.detailsOnly">\r\n        <h3>{{jh.heading}} <span ng-if="jh.showNew" class="label label-new" role="presentation">new<\/span><\/h3>\r\n    <\/div>\r\n    \r\n    <!-- Job selector II -->\r\n    <div class="block-margin">\r\n\r\n        <div class="job-selector" ng-if="jh.jd.job && jh.detailsOnly" >\r\n            <span class="job-selector-item" style="border-left: 10px solid #{{jh.jd.job.Colour}}">\r\n                <strong>{{jh.jd.job.Name}}<\/strong><br>\r\n                <i class="fa fa-fw fa-map-marker"><\/i> {{jh.jd.job.ShortAddress}}<br>\r\n                <i class="fa fa-fw fa-calendar"><\/i> {{jh.jd.job.StartDate | date:\'d MMM yyyy\'}} - {{jh.jd.job.EndDate | date:\'d MMM yyyy\'}}\r\n            <\/span>\r\n        <\/div>\r\n        \r\n        <div ng-if="!jh.detailsOnly" class="job-selector btn-group">\r\n\r\n            <!-- Job selection dropdown -->\r\n            <div class="job-selector-dropdown btn-group">\r\n                <button class="btn btn-default btn-white dropdown-toggle" data-toggle="dropdown" type="button">\r\n                    <span class="caret" ><\/span>\r\n                    <span ng-if="!jh.jd.job && !jh.jd.loadingJobDetails">Select a job<\/span>\r\n                    <span ng-if="!jh.jd.job && jh.jd.loadingJobDetails" class="loading loading-inline"><i><\/i> Loading job details<\/span>\r\n                    <span ng-if="jh.jd.job" class="job-selector-item" style="border-left: 10px solid #{{jh.jd.job.Colour}}">\r\n                        <strong>{{jh.jd.job.Name}}<\/strong>, {{jh.jd.job.ShortAddress}}\r\n                    <\/span>\r\n                <\/button>\r\n\r\n                <ul class="dropdown-menu">\r\n                    <li>\r\n                        <a ng-click="jh.createJob();" auth-key="Customer/Jobs" auth="c" href="javascript:;" >\r\n                            <i class="fa fa-plus"><\/i> Create new Job\r\n                        <\/a>\r\n                    <\/li>\r\n                    <li ng-if-start="jh.jd.availableJobs.length > 0" role="separator" class="divider"><\/li>\r\n                    <li ng-if-end ng-repeat="job in jh.jd.availableJobs">\r\n                        <a id="{{job.JobId}}" ng-click="jh.setJob(job.JobId, jh.shouldQueryUpdateDetails, false)" href="javascript:;" >\r\n                            <span class="job-selector-item" style="border-left: 10px solid #{{job.Colour}}">\r\n                                <strong>{{job.Name}}<\/strong><br>\r\n                                <i class="fa fa-fw fa-map-marker"><\/i> {{job.ShortAddress}}<br>\r\n                                <i class="fa fa-fw fa-calendar"><\/i> {{job.StartDate | date:\'d MMM yyyy\'}} - {{job.EndDate | date:\'d MMM yyyy\'}}\r\n                            <\/span>\r\n                        <\/a>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n\r\n            <!-- Clear btn -->\r\n            <button type="button" class="btn btn-default" ng-click="jh.clearJob()" ng-disabled="!jh.jd.job"><i class="fa fa-fw fa-times"><\/i><span class="sr-only">Clear<\/span><\/button>\r\n\r\n        <\/div>\r\n        \r\n        <p class="help-block" ng-if="!jh.detailsOnly && (jh.subHeading || jh.showDocumentsLink)">{{jh.subHeading ? jh.subHeading + \' \' : \'\'}}<a ng-if="jh.showDocumentsLink" ng-href="#/docs?type={{jh.docType}}">{{jh.documentsLinkLabel}}<\/a><\/p>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n');n.put("jobsDropdown.html",'<div class="form-group">\r\n    <div class="dropdown job">\r\n        <a class="btn btn-default dropdown-toggle" data-toggle="dropdown">\r\n            <div ng-if="!jd.jobData.job">\r\n                <span ng-if="jd.jobData.loadingAvailableJobs && !jd.jobData.jobId">Loading jobs ...<\/span>\r\n                <span ng-if="jd.jobData.loadingJobDetails && jd.jobData.jobId">Loading jobs details ...<\/span>\r\n                <span ng-if="jd.jobData.availableJobs.length > 0 && !jd.jobData.jobId">Select a job ...<\/span>\r\n            <\/div>\r\n            <div ng-if="jd.jobData.job">\r\n                <span ng-if="jd.jobData.job" class="strong">{{jd.jobData.job.Name}}<\/span>\r\n                <small ng-if="jd.jobData.job">{{jd.jobData.job.ShortAddress}}<\/small>\r\n            <\/div>\r\n            <span ng-if="jd.jobData.availableJobs && jd.jobData.availableJobs.length > 0" class="caret"><\/span>\r\n        <\/a>\r\n        <ul class="dropdown-menu">\r\n            <li ng-repeat="job in jd.jobData.availableJobs">\r\n                <a href="javascript:;" ng-click="jd.jobData.setJob(job.JobId)">\r\n                    <span class="strong">{{job.Name}}<\/span>\r\n                    <small>{{job.ShortAddress}}<\/small>\r\n                <\/a>\r\n            <\/li>\r\n            <li ng-if="!jd.jobData.loadingAvailableJobs && (!jd.jobData.availableJobs || jd.jobData.availableJobs.length == 0)">\r\n                No jobs available\r\n            <\/li>\r\n            <li ng-if="jd.jobData.jobId">\r\n                <a href="javascript:;" ng-click="jd.jobData.clearJob();"><i class="fa fa-remove"><\/i> Clear the job<\/a>\r\n            <\/li>\r\n        <\/ul>\r\n    <\/div>\r\n<\/div>');n.put("suggestedJobs.html",'<div list-layout="suggestedJobs">\r\n    <!-- SUGGESTED JOBS-->\r\n    <div ng-show="!hasErrors || isXSSError">\r\n        \r\n        <div ng-show="suggestedJobs.minimalView && suggestedJobs.suggestedJobs.length">\r\n            <h2 class="panel-title block-margin-sm">Suggested Jobs<\/h2>\r\n            <p class="block-margin">Create a job based on a recent order address<\/p>\r\n        <\/div>\r\n\r\n        <!-- TOOLBAR -->\r\n        <form ng-if="!suggestedJobs.minimalView" class="form-inline" novalidate>\r\n\r\n            <div class="cnct-filters cnct-filters-new">\r\n\r\n                <div class="layout-cells block-margin">\r\n                    <div class="layout-cell layout-cell-primary">\r\n                        <div class="input-group col-lg-6 col-md-7 col-sm-8 col-xs-12">\r\n                            <label class="sr-only">Search keywords<\/label>\r\n                            <input type="search" class="form-control" placeholder="Search suggested jobs" ng-change="suggestedJobs.search()" ng-model="suggestedJobs.keyword" ng-model-options="{debounce: 500}">\r\n\r\n                            <span class="input-group-btn">\r\n                                <button class="btn btn-default btn-white" ng-click="suggestedJobs.search()" type="button"><i class="fa fa-search"><\/i><\/button>\r\n                            <\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="layout-cell">\r\n                        <!-- LIST || GRID SELECTOR -->\r\n                        <div class="btn-group">\r\n                            <button class="btn btn-default" type="button" ng-click="layout.setMode(\'grid\')" ng-class="{active: layout.mode == \'grid\'}">\r\n                                <i class="fa fa-fw fa-lg fa-th"><\/i>\r\n                            <\/button>\r\n                            <button class="btn btn-default" type="button" ng-click="layout.setMode(\'table\')" ng-class="{active: layout.mode == \'table\'}">\r\n                                <i class="fa fa-fw fa-lg fa-list"><\/i>\r\n                            <\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="layout-cell">\r\n\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/form>\r\n\r\n        <!-- LIST -->\r\n        <div class="list list-layout list-layout-{{suggestedJobs.minimalView ? \'grid\' : layout.mode}} jobs" tabindex="-1">\r\n            <!-- TABLE MODE HEADERS -->\r\n            <div class="list-layout-table-headers" ng-show="!layout.busy && suggestedJobs.suggestedJobs.length > 0">\r\n                <span class="list-layout-table-th"><\/span>\r\n                <span class="list-layout-table-th" sort-headers>\r\n                    <a href="javascript:;" sort-header="2">Suggested Job<\/a>\r\n                    <i class="fa" ng-class="{\'fa-sort\': filters.sortBy != 2, \'fa-sort-asc\': filters.sortBy == 2 && filters.sort == 0, \'fa-sort-desc\': filters.sortBy == 2 && filters.sort == 1}"><\/i>\r\n                <\/span>\r\n                <span class="list-layout-table-th tf-right">\r\n                    Actions\r\n                <\/span>\r\n            <\/div>\r\n\r\n            <!-- GRID / TABLE ITEMS -->\r\n            <a class="list-item jobs" ng-repeat="itm in suggestedJobs.suggestedJobs track by itm.FullAddress | orderBy : \'Date\'" on-finish-render="ngRepeatFinished" href="javascript:;" ng-click="suggestedJobs.createJobFromSuggestion(itm)">\r\n                <div class="wrap job-thumbnail suggested-job-thumbnail">\r\n                    <div class="list-item-thumb">\r\n                        <img ng-src="{{itm.FullAddress | mapImgUrl:\'300x240\':\'999999\':14:true}}" alt="{{itm.FullAddress}}">\r\n                    <\/div>\r\n                    <div class="job-info" style="background-color: rgba(114, 114, 114, 0.8)">\r\n                        <span class="job-info-title">{{itm.FullAddress}}<\/span>\r\n                        <span>Suggested job<\/span>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="wrap job-details">\r\n                    <span data-th="" class="list-item-detail job-list-patch" style="background-color: rgba(114, 114, 114, 0.8)"><\/span>\r\n                    <span data-th="Address" class="list-item-detail">{{itm.FullAddress}}<\/span>\r\n                    <span class="list-item-detail tf-right"><span class="btn btn-default">Create job<\/span><\/span>\r\n                <\/div>\r\n            <\/a>\r\n\r\n            <!-- MORE BTN -->\r\n            <a ng-if="suggestedJobs.minimalView && suggestedJobs.suggestedJobs.length && !layout.busy" class="list-item jobs list-item-btn" ui-sref="app.jobSuggestions">\r\n                <div class="wrap job-thumbnail suggested-job-thumbnail">\r\n                    <div>\r\n                        <i class="fa fa-5x fa-ellipsis-h"><\/i> More job suggestions\r\n                    <\/div>\r\n                <\/div>\r\n            <\/a>\r\n\r\n            <!-- BUSY STATE -->\r\n            <div ng-show="layout.busy" class="loading loading-page fx-fade">\r\n                <i><\/i> {{suggestedJobs.busyMessage}}\r\n            <\/div>\r\n\r\n            <!-- EMPTY STATE -->\r\n            <div class="content-empty" ng-show="!layout.busy && !suggestedJobs.suggestedJobs.length && !hasErrors">\r\n                <span ng-if="!suggestedJobs.minimalView" class="content-empty-icon fs-icon" data-feature="empty"><\/span>\r\n                <h3 class="content-empty-title">No suggested jobs found<\/h3>\r\n                <p class="content-empty-instruction">No suggested jobs have been found for you<\/p>\r\n                <a ng-if="docs.isType(filters.type, \'orders\')" class="content-empty-btn btn btn-default" ui-sref="app.orderCreate">Create a job<\/a>\r\n            <\/div>\r\n\r\n        <\/div>\r\n        <!-- PAGINATION -->\r\n        <div ng-if="!suggestedJobs.minimalView" class="row list-layout-pager" ng-show="layout.initialised && suggestedJobs.suggestedJobs.length">\r\n            <div class="col-xs-5 col-sm-4">\r\n                <a class="clr btn btn-default btn-block btn-white" href="javascript:;" ng-click="layout.prevPage()" ng-disabled="layout.busy || layout.page <= 1">Prev page<\/a>\r\n            <\/div>\r\n            <div class="col-xs-2 col-sm-4 list-layout-pager-count">\r\n                Page<br>{{layout.page}} / {{layout.pages}}\r\n            <\/div>\r\n            <div class="col-xs-5 col-sm-4">\r\n                <a class="clr btn btn-default btn-block btn-white" href="javascript:;" ng-click="layout.nextPage()" ng-disabled="layout.busy || layout.page === layout.pages">Next page<\/a>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="clr"><\/div>\r\n    <\/div>\r\n\r\n    <div ng-show="hasErrors && !isXSSError && !layout.busy">\r\n        <div class="row">\r\n            <div class="col-xs-6 col-xs-push-3">\r\n                Ooops, sorry but an error has occurred. Please try again and if the error continues contact support at <a href="mailto:help@csr.com.au&amp;subject =CSR%20Connect%20Permission%20to%20view%document%20denied">help@csr.com.au<\/a> or call us on <strong class="text-nowrap">1800 909 439<\/strong>(AU) or <strong class="text-nowrap">0800 277 266<\/strong>(NZ).\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row">\r\n            <div class="col-xs-2 col-xs-push-5">\r\n                <a class="btn btn-block btn-default" ng-click="suggestedJobs.retry()">Retry<\/a>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("suggestedJobsView.html",'<div class="container" auth-key="Customer/Jobs" ng-cloak>\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12">\r\n            \r\n            <breadcrumb class="block-margin-sm" details="{ history: [{ name: \'Jobs\', sref: \'app.jobsList\' }], currentPage: \'Suggested jobs\' }"><\/breadcrumb>\r\n\r\n            <div class="row block-margin-sm">\r\n                <div class="col-xs-6">\r\n                    <h1 class="flush">Suggested Jobs<\/h1>\r\n                <\/div>\r\n                <div class="col-xs-6 tf-right">\r\n                    <a ui-sref="app.jobCreate" data-auth="c" class="btn btn-success">Create job<\/a>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="row">\r\n                <div class="col-xs-12">            \r\n                    <p class="lead">Select an address below to create a job automatically<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class="row">\r\n                <div class="col-xs-12">  \r\n                    <suggested-jobs><\/suggested-jobs>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\r\n');n.put("leadStatus.html",'<div class="modal-header">\r\n    <div class="row">\r\n        <div class="col-xs-8">\r\n            <h3 class="modal-title">{{lead.Caller}}, {{lead.City}}<\/h3>\r\n            <p><span class="date-contextual">Updated {{(lead.UpdatedOn || lead.CreatedOn) | humanizeDate}}<\/span><\/p>\r\n        <\/div>\r\n        <div class="col-xs-4">\r\n            <span class="label label-lg pull-right {{getStatusLabel(lead.Status)}}">{{getStatusText(lead.Status)}}<\/span>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n<form class="fx-fade" name="form" novalidate data-form-validator ng-cloak>\r\n    <div class="modal-body">\r\n        <div class="row">\r\n            <div class="col-xs-6">\r\n                <!-- lead status -->\r\n                <div class="form-group">\r\n                    <label for="field-quotedDate">New lead status*<\/label>\r\n                    <div class="dropdown">\r\n                        <button ng-disabled="isBusy" class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" id="filters-status">\r\n                            <span ng-hide="statusUpdate.status">Select<\/span>\r\n                            <span ng-show="statusUpdate.status" class="label {{getStatusLabel(statusUpdate.status)}}">{{getStatusText(statusUpdate.status)}}<\/span>\r\n                            <span class="caret"><\/span>\r\n                        <\/button>\r\n                        <ul class="dropdown-menu" role="menu" aria-labelledby="filters-status">\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'Available\'"><span class="label {{getStatusLabel(\'Available\')}}">Available<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'OnHold\'"><span class="label {{getStatusLabel(\'OnHold\')}}">On hold<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'Quoted\'"><span class="label {{getStatusLabel(\'Quoted\')}}">Quoted<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'QuotedPriceOnly\'"><span class="label {{getStatusLabel(\'QuotedPriceOnly\')}}">Quoted - Price Only<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'Won\'"><span class="label {{getStatusLabel(\'Won\')}}">Won<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'Lost\'"><span class="label {{getStatusLabel(\'Lost\')}}">Lost<\/span><\/a><\/li>\r\n                            <li><a role="menuitem" href="javascript:;" ng-click="statusUpdate.status = \'Declined\'"><span class="label {{getStatusLabel(\'Declined\')}}">Declined<\/span><\/a><\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- declined reason -->\r\n                <div class="form-group" ng-if="statusUpdate.status == \'Declined\'">\r\n                    <label for="field-declinedReasons">Reason for declined status*<\/label>\r\n                    <select id="field-declinedReasons" name="declinedReasons" ng-model="statusUpdate.declinedReason" class="form-control" ng-disabled="isBusy" data-validator="required">\r\n                        <option selected value="">Please select<\/option>\r\n                        <option value="Lead too small">Lead too small<\/option>\r\n                        <option value="Out of area">Out of area<\/option>\r\n                        <option value="Invalid lead">Invalid lead<\/option>\r\n                        <option value="Insufficient access to install">Insufficient access to install<\/option>\r\n                        <option value="No time/Too busy">No time/Too busy<\/option>\r\n                        <option value="Other">Other<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n\r\n                <!-- declined reason other -->\r\n                <div class="form-group" ng-if="statusUpdate.status == \'Declined\' && statusUpdate.declinedReason==\'Other\'">\r\n                    <label for="field-declinedReasonOther">(Other)*<\/label>\r\n                    <input id="field-declinedReasonOther" name="declinedReasonOther" ng-model="statusUpdate.declinedReasonOther" type="text" max-length="255" class="form-control" ng-disabled="isBusy" data-validator="required" />\r\n                <\/div>\r\n\r\n                <!-- lost reason -->\r\n                <div class="form-group" ng-if="statusUpdate.status == \'Lost\'">\r\n                    <label for="field-lostReasons">Reason for lost status*<\/label>\r\n                    <select id="field-lostReasons" name="lostReason" ng-model="statusUpdate.lostReason" class="form-control" ng-disabled="isBusy" data-validator="required">\r\n                        <option selected value="">Please select<\/option>\r\n                        <option value="Too expensive">Too expensive<\/option>\r\n                        <option value="Chose other supplier">Chose other supplier<\/option>\r\n                        <option value="No time to respond">No time to respond<\/option>\r\n                        <option value="Other">Other<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n\r\n                <!-- loast reason other -->\r\n                <div class="form-group" ng-if="statusUpdate.status == \'Lost\' && statusUpdate.lostReason==\'Other\'">\r\n                    <label for="field-lostReasonOther">(Other)<\/label>\r\n                    <input id="field-lostReasonOther" name="lostReasonOther" ng-model="statusUpdate.lostReasonOther" type="text" max-length="255" class="form-control" ng-disabled="isBusy" data-validator="required" />\r\n                <\/div>\r\n\r\n                <!-- lost to supplier -->\r\n                <div class="form-group" ng-if="statusUpdate.status == \'Lost\' && statusUpdate.lostReason==\'Chose other supplier\'">\r\n                    <label for="field-lostToSupplier">Lost to supplier*<\/label>\r\n                    <input id="field-lostToSupplier" name="lostToSupplier" ng-model="statusUpdate.lostToSupplier" type="text" max-length="255" class="form-control" ng-disabled="isBusy" data-validator="required" />\r\n                <\/div>\r\n\r\n                <!-- quoted date -->\r\n                <div class="form-group form-datepicker form-datepicker-fluid" ng-show="quotedDateStatuses.indexOf(statusUpdate.status)>-1">\r\n                    <label for="field-quotedDate">Quoted Date*<\/label>\r\n                    <p role="alert" ng-if="!isQuotedDateValid" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> The quoted date cannot be in the future<\/p>\r\n\r\n                    <calendar class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="dateQuoted" filters="statusUpdate"\r\n                              apply-filters="onQuotedDateChange()"\r\n                              latest-date="maxDate" single="true"><\/calendar>\r\n                <\/div>\r\n\r\n                <!-- estimated lead value -->\r\n                <div class="form-group">\r\n                    <label for="field-leadValue">Estimated Lead Value<\/label><br />\r\n                    Providing a rough value here can help to prioritise and compare your opportunities<br />\r\n                    <div class="input-group">\r\n                        <span class="input-group-addon" id="basic-addon1">$<\/span>\r\n                        <input id="field-leadValue" name="leadValue" ng-model="statusUpdate.leadValue" type="number" class="form-control" ng-disabled="isBusy" value="1" min="0" max="9999999" />\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- is followup -->\r\n                <div class="form-group">\r\n                    <label class="label label-followup" for="field-followUp">\r\n                        <input id="field-followUp" type="checkbox" data-ng-model="statusUpdate.followUp" value="false" />\r\n                        <i class="fa fa-reply" aria-hidden="true"><\/i>\r\n                        Follow Up\r\n                    <\/label>\r\n                <\/div>\r\n\r\n                <!-- followup date -->\r\n                <div class="form-group form-datepicker form-datepicker-fluid" ng-show="statusUpdate.followUp" style="display:inline-block">\r\n                    <label for="field-followUpDate">Follow Up Date*<\/label>\r\n                    <p role="alert" ng-if="!isFollowUpDateValid" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Follow up date must be today or greater<\/p>\r\n\r\n                    <calendar class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="followUpDate" filters="statusUpdate"\r\n                              apply-filters="onFollowUpDateChange()"\r\n                               earliest-date="minDate" single="true"><\/calendar>\r\n                <\/div>\r\n\r\n                <div class="form-group">\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-6">\r\n                <div class="panel">\r\n                    <h2 class="panel-title">Customer contact<\/h2>\r\n\r\n                    <ul class="fa-ul list-contact-details">\r\n                        <li ng-if="(lead.BusinessName||\'\').length>0"><i class="fa fa-li fa-building"><\/i> {{lead.BusinessName}}<\/li>\r\n                        <li ng-if="(lead.MainPhone||\'\').length>0"><i class="fa fa-li fa-phone-square"><\/i> <a ng-href="tel:{{lead.MainPhone}}">{{lead.MainPhone}}<\/a><\/li>\r\n                        <li ng-if="(lead.OtherPhone||\'\').length>0"><i class="fa fa-li fa-phone-square"><\/i> <a ng-href="tel:{{lead.OtherPhone}}">{{lead.OtherPhone}}<\/a><\/li>\r\n                        <li ng-if="(lead.Email||\'\').length>0"><i class="fa fa-li fa-envelope-square"><\/i> <a ng-href="mailto:{{lead.Email}}">{{lead.Email}}<\/a><\/li>\r\n                    <\/ul>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="modal-footer">\r\n        <button class="btn btn-primary" ng-disabled="isBusy" ng-click="update()" data-validation-submit="form">Update status<\/button>\r\n        <button class="btn btn-default" ng-disabled="isBusy" ng-click="cancel($event)">Cancel<\/button>\r\n    <\/div>\r\n<\/form>\r\n');n.put("lite-docs-expired-message.html",'<div class="lite-empty-content">\r\n    <span class="fs-icon" data-feature="brokenLink" data-status="warning"><\/span>\r\n    <h1>This link has expired<\/h1>\r\n    <p class="lead">To help with account security all invoice links eventually expire.<\/p>\r\n    <p>To view these invoices again, request a new link or <a ui-sref="app.login">log into Connect<\/a>.<\/p>\r\n    <p>\r\n        <button ng-click="liteDocs.requestNewLink()" type="button">Send me a new link<\/button>\r\n    <\/p>\r\n<\/div>\r\n');n.put("lite-docs-new-link-exists-message.html",'<div class="lite-empty-content">\r\n    <span class="fs-icon" data-feature="brokenLink" data-status="warning"><\/span>\r\n    <h1>This link has expired<\/h1>\r\n    <p class="lead">A new link has been requested and sent to the email address associated to this account.<\/p>\r\n    <p><span class="date-sent"><span class="date-sent-label">New link sent on:<\/span><span class="date-sent-date">{{ liteDocs.renewedOnDate }}<\/span><\/span><\/p>\r\n    <p>If you can\'t find this, please contact Connect support.<\/p>\r\n<\/div>\r\n');n.put("lite-docs-new-link-failed-message.html",'<div class="lite-empty-content">\r\n    <span class="fs-icon" data-feature="technical" data-status="warning"><\/span>\r\n    <h1>Something went wrong!<\/h1>\r\n    <p class="lead">We were unable to send you a new link, please try again or contact\r\n        Connect support.<\/p>\r\n    <p>\r\n        <button ng-click="liteDocs.requestNewLink()" type="button">Send me a new link<\/button>\r\n    <\/p>\r\n<\/div>\r\n');n.put("lite-docs-new-link-success-message.html",'<div class="lite-empty-content">\r\n    <span class="fs-icon" data-feature="email" data-status="success"><\/span>\r\n    <h1>You\'ve got mail<\/h1>\r\n    <p class="lead">The new link has been sent to the email address for this account.<\/p>\r\n    <p>If you do not receive this email, contact Connect support.<\/p>\r\n<\/div>\r\n');n.put("lite-footer-csat.html",'<div id="liteCsatFooter" />\r\n');n.put("lite-footer-deliveries.html",'<div id="liteDeliveriesFooter" />\r\n');n.put("lite-footer-orders.html",'<div id="liteOrdersFooter" />\r\n');n.put("lite-footer.html",'<div id="liteDocsFooter">\r\n    <div class="docs-help">\r\n        <h1>Need help?<\/h1>\r\n        <ul>\r\n            <li><i class="fa fa-envelope"><\/i><a href="mailto:help@csr.com.au">help@csr.com.au<\/a><\/li>\r\n            <li><i class="fa fa-phone"><\/i>1800 909 439 (AU)<\/li>\r\n            <li><i class="fa fa-phone"><\/i>0800 277 266 (NZ)<\/li>\r\n        <\/ul>\r\n        <div id="csrBranding">\r\n            <img src="/Assets/img/logo_csr_80.png" alt="CSR" class="logo">\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("lite-header.html",'<div id="liteHeader">\r\n    <div class="csr-connect-logo">\r\n        <a ui-sref="app.home">\r\n            <img src="/Assets/img/csr-connect.svg" alt="CSR Connect">\r\n        <\/a>\r\n    <\/div>\r\n    <div class="user-links">\r\n        <a ui-sref="app.login" ng-if="!isAuthenticated" class="btn btn-success">\r\n            <i class="fa fa-lock"><\/i> Login\r\n        <\/a>\r\n        <a ui-sref="app.dash" ng-if="isAuthenticated" class="btn btn-success">\r\n            <i class="fa fa-home"><\/i> Go to Connect\r\n        <\/a>\r\n    <\/div>\r\n<\/div>\r\n');n.put("liteDocumentModal.html",'<div id="liteDocViewer">\r\n    <div class="header">\r\n        <div class="invoice-info">\r\n            <h1>Invoice<\/h1>\r\n            <h2>{{ doc.documentId }}<\/h2>\r\n        <\/div>\r\n\r\n        <div class="modal-actions">\r\n            <ul>\r\n                <li ng-if="doc.docAvailable === true">\r\n                    <button type="button" ng-click="doc.downloadDocument()"><i class="fa fa-download"><\/i><span class="text-label">Download PDF<\/span><\/button>\r\n                <\/li>\r\n                <li ng-if="doc.docAvailable === true && doc.isPrintFriendly">\r\n                    <button type="button" ng-click="doc.printDocument()"><i class="fa fa-print"><\/i><span class="text-label">Print<\/span><\/button>\r\n                <\/li>\r\n                <li class="modal-close">\r\n                    <button aria-label="Close" ng-click="doc.close()" type="button"><i class="fa fa-times" aria-hidden="true"><\/i><\/button>\r\n                <\/li>\r\n            <\/ul>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="viewer">\r\n        <div ng-if="pdfViewer.loading._loadState==\'document\'">\r\n            <div class="loading loading-page">\r\n                <i><\/i> Loading document&hellip;\r\n            <\/div>\r\n        <\/div>\r\n        <div class="unavailable-document" ng-if="doc.docAvailable === false">\r\n            <h1>This document is unavailable<\/h1>\r\n            <p class="lead">Please try again or contact Connect support.<\/p>\r\n        <\/div>\r\n        <div pdf-viewer="doc.options" id="pdf-viewer" class="pdf-viewer" ng-class="{\'doc-loading\': pdfViewer.loading._loadState==\'document\' || doc.docAvailable === false}">\r\n            <div class="pdf-viewer-toolbar">\r\n                <div class="btn-group btn-group-sm" ng-if="doc.docAvailable === true">\r\n                    <button class="btn btn-default" ng-click="pdfViewer.zoomOut()"><i class="fa fa-fw fa-search-minus"><\/i><\/button>\r\n                    <button class="btn btn-default" ng-click="doc.resetPdfSize()">{{pdfViewer.zoom * 100 | number:0}}%<\/button>\r\n                    <button class="btn btn-default" ng-click="pdfViewer.zoomIn()"><i class="fa fa-fw fa-search-plus"><\/i><\/button>\r\n                <\/div>\r\n\r\n                <div class="btn-group btn-group-sm text-center" ng-if="doc.docAvailable === true">\r\n                    <button class="btn btn-default" ng-click="pdfViewer.previousPage()" ng-disabled="pdfViewer.page === 1"><i class="fa fa-fw fa-arrow-left"><\/i><\/button>\r\n                    <button class="btn btn-default" ng-click="pdfViewer.goToPage(1)"><span class="hidden-xs">Page <\/span>{{pdfViewer.page + \' / \' + pdfViewer.total}}<\/button>\r\n                    <button class="btn btn-default" ng-click="pdfViewer.nextPage()" ng-disabled="pdfViewer.page === pdfViewer.total"><i class="fa fa-fw fa-arrow-right"><\/i><\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("order-add-favourites-modal.html",'<div class="modal-header">\r\n    <button type="button" class="close" aria-label="Close" ng-click="$close()"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <h3 class="modal-title">Order favourites<\/h3>\r\n<\/div>\r\n<div class="modal-body">\r\n\r\n    <div id="order-favourites">\r\n\r\n        <page-loading-message\r\n            message="Loading your favourites"\r\n            ng-show="oc.quickAdd.templates === null">\r\n        <\/page-loading-message>\r\n\r\n        <page-empty-message\r\n            feature="favourites"\r\n            title="You haven\'t saved any order favourites yet"\r\n            message="You can save an order favourite while placing an order for easy reordering later."\r\n            ng-show="oc.quickAdd.templates.length === 0">\r\n        <\/page-empty-message>\r\n\r\n        <div class="list-group" nh-show="oc.quickAdd.templates">\r\n            <a class="list-group-item" ng-click="oc.saveOrderAsTemplate($event)" href="javascript:;" role="button"><i class="fa fa-fw fa-heart-o"><\/i> Save current order as favourite<\/a>\r\n            <a ng-repeat="item in oc.quickAdd.templates" class="list-group-item" href="javascript:;" ng-click="oc.loadTemplate(item)">\r\n                <i class="fa fa-fw fa-heart"><\/i> {{item.Reference || \'Untitled favourite\' }}\r\n                <span class="btn btn-sm btn-outline quickadd-btn" role="button">Add<\/span>\r\n            <\/a>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n<div class="modal-footer">\r\n    <button class="btn btn-solid" type="button" ng-click="$close()">Back to order<\/button>\r\n<\/div>');n.put("order-add-items-modal.html",'<div class="modal-header">\r\n    <button type="button" class="close" aria-label="Close" ng-click="$close()"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <h3 class="modal-title">Add items<\/h3>\r\n<\/div>\r\n<div class="modal-body">\r\n\r\n    <div class="block-margin">\r\n        <h4><i class="fa fa-fw fa-search"><\/i> Search<\/h4>\r\n        <div angucomplete-alt\r\n             id="item-super-search"\r\n             placeholder="{{oc.msgs.autocompletePlaceholder}}"\r\n             pause="750"\r\n             selected-object="oc.newItem"\r\n             clear-selected="true"\r\n             focus-first="true"\r\n             remote-url="api/customerproducts/search"\r\n             remote-url-request-formatter="oc.productSearchApiFn"\r\n             remote-url-response-formatter="oc.productSearchResponseFn"\r\n             remote-url-data-field="Items"\r\n             search-fields="Code,Description,Group,MainGroup,SubGroup"\r\n             title-field="Description"\r\n             description-field="Code"\r\n             image-field="ImageAssetUri"\r\n             minlength="2"\r\n             match-class="search-highlight"\r\n             input-class="form-control"\r\n             template-url="item-super-search.html"\r\n             text-no-results="No products found">\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="quickadd-products">\r\n        <h4><i class="fa fa-fw fa-star"><\/i> Choose from most ordered products<\/h4>\r\n        <div class="loading" ng-show="oc.quickAdd.mostOrdered === null">\r\n            <i><\/i>\r\n        <\/div>\r\n        <div class="list-group">\r\n            <a ng-repeat="item in oc.quickAdd.mostOrdered | limitTo:20" class="list-group-item quickadd-item" href="javascript:;" ng-click="oc.om.addItem(item)">\r\n                <span class="quickadd-title">\r\n                    <strong>{{item.Description | titleCase: true}}<\/strong>\r\n                    <small>{{item.Code | productCode}}<\/small>\r\n                <\/span>\r\n                <span class="btn btn-sm btn-success quickadd-btn">Add<\/span>\r\n            <\/a>\r\n        <\/div>\r\n        <p ng-show="oc.quickAdd.mostOrdered.length === 0" class="text-muted">No products to display<\/p>\r\n    <\/div>\r\n\r\n<\/div>\r\n<div class="modal-footer">\r\n    <button class="btn btn-outline" type="button" ng-click="$close()">Back to order<\/button>\r\n<\/div> ');n.put("order-button.html",'<div class="btn-group" ng-show="orderBtn.ready">\r\n    <button id="order-cart-btn" class="btn btn-default" ng-click="orderBtn.goToOrder()">\r\n        <i class="fa fa-fw fa-{{orderBtn.type === 2 ? \'truck\' : \'shopping-cart\'}}"><\/i>\r\n        {{ orderBtn.orderId ? \'Your\' : \'Empty\' }} order\r\n            <span id="order-cart-count" ng-show="orderBtn.count > 0 && !orderBtn.pricePendingItems" class="badge">{{ orderBtn.count}}<\/span>\r\n            <span ng-show="orderBtn.pricePendingItems" class="badge"><i class="fa fa-spinner" aria-hidden="true"><\/i><\/span>\r\n    <\/button>\r\n    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r\n        <span class="caret"><\/span>\r\n        <span class="sr-only">Toggle other save options<\/span>\r\n    <\/button>\r\n    <ul class="dropdown-menu" aria-labelledby="order-cart-btn">\r\n        <li><a ui-sref="app.orderCreate">Place new order<\/a><\/li>\r\n        <li role="separator" class="divider"><\/li>\r\n        <li><a ui-sref="app.orderDraftsList">Draft orders<\/a><\/li>\r\n        <li><a ui-sref="app.templatesList">Order favourites<\/a><\/li>\r\n    <\/ul>\r\n<\/div>\r\n');n.put("order-cart-toast.html",'<div id="cart-toast" class="cart-toast ng-hide fx-fade" ng-show="toast.active" ng-click="goToOrder()">\r\n    <div class="row">\r\n        <div class="col-xs-4">\r\n            <span class="badge">{{toast.qty}}<\/span>\r\n            <span class="product-list-img"><img ng-src="{{toast.img}}" alt="{{ toast.desc | titleCase}}" /><\/span>\r\n        <\/div>\r\n        <div class="col-xs-8 caption">\r\n            <strong>{{ toast.desc | titleCase}}<\/strong>\r\n            <small>Added to order<\/small>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\'\r\n');n.put("order-create-from-template.html",'<div class="container order-create" ng-controller="OrderTemplatesController" auth-key="Customer/OnlineOrdering" list-view ng-cloak>\r\n\r\n    <h1>Place new order<\/h1>\r\n\r\n    <div class="panel">\r\n\r\n        <h2>Select a favourite to start your order<\/h2>\r\n\r\n        <page-loading-message message="Loading your favourites"\r\n                              ng-show="list.busy">\r\n        <\/page-loading-message>\r\n\r\n        <page-empty-message feature="favourites"\r\n                            title="You haven\'t saved any order favourites yet"\r\n                            message="You can save an order favourite while placing an order for easy reordering later."\r\n                            ng-show="!list.items && !list.busy">\r\n            <a ui-sref="app.orderCreate" class="btn btn-solid">Start a fresh order<\/a>\r\n        <\/page-empty-message>\r\n\r\n        <div class="table-wrap table-wrap-no-scroll">\r\n            <table class="table table-striped table-hover table-row-click table-select-all table-smash fx-fade" ng-show="list.items.length">\r\n                <thead>\r\n                    <tr table-headers><\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    <tr ng-repeat="itm in list.items">\r\n\r\n                        <td class="table-smash-title"><i role="presentation" class="fa fa-fw fa-heart"><\/i> <a ng-click="createNewOrderWithTemplate(itm, true)" role="button"><strong>{{ itm.Reference || \'Untitled favourite\' }}<\/strong><\/a><\/td>\r\n                        <td th="Account No.">{{ itm.AccountId }}<\/td>\r\n                        <td th="Updated">{{ itm.UpdatedOn | humanizeDate}}<\/td>\r\n                        <td th="Created">{{ itm.CreatedOn | humanizeDate}}<\/td>\r\n                        <td th="Created By" class="tf-truncate"><span>{{ itm.CreatedByUser }}<\/span><\/td>\r\n                        <td class="table-smash-actions tf-input">\r\n\r\n                            <div class="btn-group pull-right">\r\n                                <!-- Select -->\r\n                                <button ng-click="createNewOrderWithTemplate(itm, true)" type="button" class="btn btn-outline" metrics-track="Create order from favourite" metrics-track-data="{source: \'Get Started Screen\'}">Select<\/button>\r\n\r\n                                <!-- Delete -->\r\n                                <button ng-click="deleteOrderTemplate(itm)" type="button" class="btn btn-outline" aria-label="Delete favourite" tooltip="Delete favourite" tooltip-placement="top" tooltip-popup-delay="300" metrics-track="Order favourite: Delete" metrics-track-data="{templateId: itm.Id}"><i class="fa fa-trash-o"><\/i><\/button>\r\n                            <\/div>\r\n\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n\r\n        <div ng-hide="!list.items" pagination-nav><\/div>\r\n\r\n        <div class="text-left block-headroom">\r\n            <a ui-sref="app.orderGetStarted" class="btn btn-outline">Cancel<\/a>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div> ');n.put("order-get-started.html",'<div class="container" ng-controller="OrderGetStartedController as gs" data-tour="tourOrderCreate" auth-key="Customer/OnlineOrdering" ng-cloak>\r\n\r\n    <!-- Get started content -->\r\n    <div class="panel order-get-started-panel">\r\n\r\n        <h2 class="hidden-xs hidden-sm">Get started&hellip;<\/h2>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12 col-sm-6">\r\n                <div class="connect-panel">\r\n                    <h3>Start from scratch<\/h3>\r\n                    <i class="fa fa-5x fa-shopping-cart"><\/i><br/>\r\n                    <p>Search for products and select from your most ordered items.<\/p>\r\n                    <button type="button" class="btn btn-solid btn-block" ui-sref="app.orderCreate" metrics-track="Order inited from scratch">Start ordering<\/button>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-sm-6">\r\n                <div class="connect-panel">\r\n                    <h3>Load a favourite order<\/h3>\r\n                    <span class="label label-feature label-feature-updated">Improved<\/span>\r\n                    <i class="fa fa-5x fa-heart"><\/i><br/>\r\n                    <p>Select quantities from your pre-saved favourite orders.<\/p>\r\n                    <button type="button" class="btn btn-outline btn-block" ui-sref="app.orderCreateFromTemplate" metrics-track="Order inited with favourites">Show favourites<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Did you know -->\r\n    <div support-dyk-panel>\r\n        <p>You can save an order as a <i class="fa fa-heart"><\/i> <strong>Favourite<\/strong> to easily order any quantity of its contents later on. <a href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes&Tab=Knowledge&CommandId=ShowArticle&ItemId=97F6663814994A7D84D3587CFB58591A" target="_blank">Learn how<span role="presentation" aria-hidden="true"> &gt;<\/span><\/a><\/p>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div help-centre-content="orderCreate">\r\n\r\n    <div class="help-centre-content help-centre-content-first-time">\r\n        <h2>Welcome to online ordering<\/h2>\r\n        <p class="lead">Enjoy convenient, 24/7 online access to a range of CSR products.<\/p>\r\n    <\/div>\r\n\r\n    <div class="help-centre-content">\r\n        <h2>Get help with online ordering<\/h2>\r\n    <\/div>\r\n\r\n    <div class="list-group">\r\n        <a tour-link="tourOrderCreate" class="list-group-item" href="javascript:;"><i class="fa fa-lg fa-fw fa-map-signs"><\/i> Take a tour <small class="text-muted">(30 seconds)<\/small><\/a>\r\n        <a class="list-group-item" href="javascript:;"><div class="wistia_embed wistia_async_tsulnjwso9 popover=true popoverContent=html popoverPreventScroll=true videoFoam=true"><i class="fa fa-lg fa-fw fa-play"><\/i> Watch a short video <small class="text-muted">(1 minute 20 seconds)<\/small><\/div><\/a>\r\n    <\/div>\r\n\r\n    <script src="//fast.wistia.com/embed/medias/tsulnjwso9.jsonp" async><\/script>\r\n\r\n<\/div>');n.put("contact-super-search.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\r\n    <div class="input-group" style="width: 100%">\r\n        <input ng-model="searchStr"\r\n               id="item-super-search-input"\r\n               ng-disabled="disableInput"\r\n               type="text"\r\n               placeholder="{{placeholder}}"\r\n               ng-focus="onFocusHandler()"\r\n               class="{{inputClass}}"\r\n               ng-focus="resetHideResults()"\r\n               ng-blur="hideResults($event)"\r\n               autocapitalize="off"\r\n               autocorrect="off"\r\n               autocomplete="off"\r\n               maxlength="40"\r\n               ng-change="inputChangeHandler(searchStr)" />\r\n    <\/div>\r\n    <div class="angucomplete-dropdown" ng-show="showDropdown" id="{{id}}_dropdown">\r\n        <div class="angucomplete-searching" ng-show="searching"><span class="loading loading-inline"><i><\/i><\/span> Searching contacts<\/div>\r\n        <div class="angucomplete-searching" ng-show="!searching && (!results || results.length == 0)" ng-bind="textNoResults"><\/div>\r\n        <div class="angucomplete-row" ng-repeat="result in results" ng-click="selectResult(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\r\n            <!--<a href="javascript:;" ng-click="selectResult(result, true, $event)" angucomplete-ignore class="btn btn-sm btn-success pull-right angucomplete-ignore">Select<\/a>-->\r\n            <a class="pull-right" href="javascript:;" ng-click="deleteResult(result, true, $event)"><i class="fa fa-lg fa-close text-muted"><\/i><span class="sr-only">Delete {{result.title}} from your order contacts<\/span><\/a>\r\n            <a ng-if="result.originalObject.IsDefault === false" class="pull-right text-muted m-t-20 m-r-n-15" href="javascript:;" ng-click="performCustomAction(result, \'MakeDefault\', $event, true)"><small>Make Default<\/small><\/a>\r\n            <div class="angucomplete-title angucomplete-no-image" ng-bind-html="result.title"><\/div>\r\n            <div class="angucomplete-description angucomplete-no-image"><small ng-bind-html="result.description"><\/small><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("orderHeader.html",'<!-- NEW ORDERING UI - HEADER -->\r\n<div id="order-details-form">\r\n\r\n    <!-- Common details -->\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3 block-headroom">\r\n            <h2>Account &amp; reference<\/h2>\r\n            <p class="subheading hide">Start by {{accountDetails.PoRequired ? \'providing your PO number for the order\' : \'giving your order a name or reference\'}}, then configure it for delivery or pickup.<\/p>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-4 col-md-offset-3">\r\n            <div class="form-group">\r\n                <label for="field-Reference">{{accountDetails.PoRequired ? \'PO number\' : \'Reference\'}}*<\/label>\r\n                <input class="form-control" type="text" id="field-Reference" name="Reference" placeholder="Enter {{accountDetails.PoRequired ? \'the PO number\' : \'a name\'}} for this order (35 character limit)" ng-model="oh.ods.details.Reference" escape-unicode validator="required" maxlength="35" taborder="1" ng-keypress="oh.nextField($event, \'field-shipTo\')">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3" id="delivery-options">\r\n            <div class="form-group">\r\n                <label for="field-shipTo">\r\n                    {{ oh.config.isProjectCalledBuilder ? \'Builder\' : \'Account or project address\' }} <i class="fa fa-fw fa-info-circle" tooltip="Applies the {{ oh.config.isProjectCalledBuilder ? \'builder\' : \'account address\' }} {{ oh.config.isProjectCalledBuilder ? \'\' : \'and\' }} associated pricing to this order"><\/i>\r\n                    <span class="sr-only">Applies the {{ oh.config.isProjectCalledBuilder ? \'builder\' : \'account address\' }} {{ oh.config.isProjectCalledBuilder ? \'\' : \'and\' }} associated pricing to this order<\/span>\r\n                <\/label>\r\n                <select class="form-control" id="field-shipTo" name="shipTo" ng-if="oh.ods.shipToAccounts" ng-model="oh.ods.shipTo" ng-change="oh.promptShipTo({{oh.ods.shipTo.AccountId}})" ng-options="shipTo as shipTo.displayName for shipTo in oh.ods.shipToAccounts" ng-disabled="!oh.config.canSetProject" taborder="2">\r\n                    <option value="" ng-show="oh.config.showEmptyProjectOption">{{ oh.config.isProjectCalledBuilder || !oh.config.canSetProject ? \'Not applicable\' : \'No account or project address\' }}<\/option>\r\n                <\/select>\r\n                <div ng-if="!oh.ods.shipToAccounts" class="form-control form-control-static">\r\n                    Not applicable\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Job -->\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3 m-b-10">\r\n            <a ng-click="oh.showJobSelector = true;" ng-hide="oh.showJobSelector">Assign to job<\/a>\r\n            <div ng-show="oh.showJobSelector" job-header query-update-details heading="Assign to job" subheading="Add this order to a job to make it easier to find it later (Optional) "><\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <hr />\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n            <h2>Order details<\/h2>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3" ng-show="oh.config.deliveryAvailable" id="deliverypickupselector">\r\n            <div class="form-group">\r\n                <label for="field-orderType" class="sr-only">Order type*<\/label>\r\n                <input name="OrderType" id="field-orderType" type="hidden" ng-model="oh.ods.details.OrderType" validator="required">\r\n                <div class="btn-group btn-group-justified" role="group" aria-label="Select order type">\r\n                    <a href="javascript:;" class="btn btn-default" ng-click="oh.initOrderType(oh.Enums.orderType.delivery)" ng-class="{active: oh.isType(\'delivery\')}"><i class="fa fa-lg fa-fw fa-truck  fa-flip-horizontal"><\/i> Delivery<\/a>\r\n                    <a ng-if="!oh.hidePickup" href="javascript:;" class="btn btn-default" ng-click="oh.initOrderType(oh.Enums.orderType.pickup)" ng-class="{active: oh.isType(\'pickup\')}"><i class="fa fa-lg fa-fw fa-shopping-cart"><\/i> Pickup<\/a>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row" ng-show="!oh.ods.details.OrderType">\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n            <page-empty-message feature="delivery"\r\n                                title="Select an order type"\r\n                                showicon="false"\r\n                                message="Choose delivery or pickup to continue entering your order details">\r\n            <\/page-empty-message>\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n\r\n    <!-- Delivery options -->\r\n    <div ng-if="oh.isType(\'delivery\')">\r\n\r\n        <div class="row">\r\n\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n                <div lookup-address\r\n                     address-change="oh.getPlantDetails()"\r\n                     form="form"\r\n                     address="oh.ods.details"\r\n                     country="oh.ods.details.Country"\r\n                     available-states="oh.availableStates"\r\n                     address-required="oh.config.addressRequired"\r\n                     prompt="Delivery address *">\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n\r\n                <div class="form-group" ng-if="oh.ods.account.canSpecifyDeliveryPlant">\r\n                    <label for="field-pickuplocation-p">Delivering From<\/label>\r\n                    <select class="form-control" id="field-deliverylocation" name="DesiredFulfillmentLocationCode" ng-change="oh.refreshTimeslots()" ng-model="oh.ods.details.DesiredFulfillmentLocationCode" ng-options="loc.PlantId as loc.PlantName for loc in oh.ods.deliveryLocations" ng-disabled="oh.ods.details.State == \'\' || !oh.ods.deliveryLocations.length || oh.ods.deliveryLocations.length<2" validator="required">\r\n                    <\/select>\r\n                    <div ng-show="oh.ods.deliveryLocations === null" class="loading loading-inline">\r\n                        <i><\/i>Loading locations\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n                <div class="loading" ng-show="oh.ods.deliveryTimeSlots === null && !oh.config.useEstimatedDeliveryDate">\r\n                    <i><\/i>\r\n                    Getting delivery options&hellip;\r\n                <\/div>\r\n\r\n                <div ng-if="oh.config.useEstimatedDeliveryDate" class="row">\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-3 col-md-offset-3 form-datepicker form-datepicker-fluid">\r\n                        <label for="field-estimatedDeliveryDate">Estimated first delivery date* <i class="fa fa-fw fa-info-circle" tooltip="Must be at least 1 day in advance"><span class="sr-only">Must be at least 1 day in advance<\/span><\/i><\/label>\r\n                        <calendar class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyEstimatedFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div ng-hide="oh.ods.deliveryTimeSlots === null" ng-if="!oh.config.useEstimatedDeliveryDate" class="row fx-fade-in">\r\n\r\n                    <div class="form-group col-xs-12 col-md-6 col-md-offset-3" ng-if="oh.ods.deliveryTimeSlots != null">\r\n                        <label for="field-deliverytype">Delivery type<\/label>\r\n                        <select class="form-control" id="field-deliverytype" name="DesiredFulfillmentType" ng-options="type.value as type.name for type in oh.ods.deliveryType" ng-model="oh.ods.details.DesiredFulfillmentType"\r\n                                ng-show="oh.ods.deliveryType.length && oh.ods.deliveryType.length > 1"><\/select>\r\n                        <div ng-show="oh.ods.deliveryType.length === 1" class="form-control form-control-static">\r\n                            {{oh.ods.deliveryType[0].name}}\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="form-group col-xs-12 col-md-3 col-md-offset-3" form-datepicker form-datepicker-fluid ng-if="oh.ods.deliveryTimeSlots != null">\r\n                        <label for="field-deliveryDate">Delivery date* <i class="fa fa-fw fa-info-circle" tooltip="Must be at least 1 day in advance"><span class="sr-only">Must be at least 1 day in advance<\/span><\/i><\/label>\r\n                        <calendar class="form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n                    <\/div>\r\n                    <div class="form-group col-xs-12 col-md-3" ng-if="oh.ods.deliveryTimeSlots != null">\r\n                        <label for="field-deliverytime">Requested delivery time <i class="fa fa-fw fa-info-circle" tooltip="Delivery times are subject to confirmation by customer service after order placement"><span class="sr-only">Delivery times are subject to confirmation by customer service after order placement<\/span><\/i><\/label>\r\n                        <select class="form-control" id="field-deliverytime" name="DesiredFulfillmentTimeSlot" ng-model="oh.ods.details.DesiredFulfillmentTimeSlot" ng-options="time.Description as time.Description for time in oh.ods.deliveryTimeSlots" ng-show="oh.ods.deliveryTimeSlots.length && oh.ods.deliveryTimeSlots.length > 1"><\/select>\r\n                        <div ng-show="oh.ods.deliveryTimeSlots.length === 1" class="form-control form-control-static">\r\n                            {{oh.ods.deliveryTimeSlots[0].Description}}\r\n                        <\/div>\r\n                        <div ng-show="oh.ods.deliveryTimeSlots === null || oh.ods.deliveryTimeSlots.length === 0" class="form-control form-control-static">\r\n                            Please select delivery date\r\n                        <\/div>\r\n                        <span id="delivery-time-confirmation" class="help-block"><\/span>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class="row">\r\n            <div class="form-group col-xs-12 col-md-6 col-md-offset-3">\r\n                <ng-form>\r\n                    <label for="order-notes-delivery-label">Shipping notes<\/label>\r\n                    <span id="order-notes-delivery-help" class="help-block control-label-help-block">Add special instructions for the delivery. Eg: site and time details.<\/span>\r\n                    <textarea id="order-notes-pickup" name="Note" class="form-control" rows="5" ng-model="oh.ods.details.Note" aria-labelledby="order-notes-delivery-label order-notes-delivery-help"><\/textarea>\r\n                <\/ng-form>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <hr>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n                <h2>Contact details<\/h2>\r\n            <\/div>\r\n\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n                <div class="form-group">\r\n                    <label for="field-BusinessName">Business name*<\/label>\r\n                    <input type="text" class="form-control" ng-model="oh.ods.details.BusinessName" id="field-BusinessName" name="BusinessName" validator="required" ng-keypress="oh.nextField($event, \'contact-super-search\')" />\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-4 col-md-offset-3">\r\n                <div class="form-group">\r\n                    <label for="field-ContactName">Contact name*<\/label>\r\n                    <!-- Super search -->\r\n                    <div angucomplete-alt\r\n                         id="contact-super-search"\r\n                         placeholder=""\r\n                         controller="oh.orderContactSearchCtrl"\r\n                         pause="750"\r\n                         selected-object="oh.orderContactSelected"\r\n                         deleted-object="oh.deleteOrderContact"\r\n                         custom-action="oh.orderContactCustomAction"\r\n                         focus-first="true"\r\n                         input-changed="oh.orderContactSearchInputChanged"\r\n                         remote-url="api/ordercontact/search"\r\n                         remote-url-request-formatter="oh.orderContactSearchApiFn"\r\n                         remote-url-response-formatter="oh.orderContactSearchResponseFn"\r\n                         remote-url-data-field="Data"\r\n                         search-fields="ContactName,ContactNumber"\r\n                         title-field="ContactName"\r\n                         description-field="ContactNumber"\r\n                         minlength="2"\r\n                         match-class="search-highlight"\r\n                         input-class="form-control contact-search-input"\r\n                         template-url="contact-super-search.html"\r\n                         text-no-results="No contacts found">\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-3 col-md-offset-3">\r\n                <div class="form-group">\r\n                    <label for="field-ContactPhone">Contact number*<\/label>\r\n                    <input type="text" class="form-control" ng-model="oh.ods.details.ContactPhone" id="field-ContactPhone" name="ContactPhone" validator="required" ng-keypress="oh.nextField($event, \'field-BuilderName\')" />\r\n                    <input type="checkbox" ng-model="oh.ods.saveContact" /> Save Contact <i class="fa fa-fw fa-info-circle" tooltip="Checking this option will save this contact for use with future orders"><span class="sr-only">Checking this option will save this contact for use with future orders<\/span><\/i>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-3" ng-if="oh.ods.deliveryTimeSlots !=null && oh.ods.deliverySmsStatus.orderSmsEnabled">\r\n                <div class="form-group">\r\n                    <label>Send delivery notifications to<\/label>\r\n                    <span ng-if="oh.ods.details.SmsEnabled">\r\n                        <input type="hidden" ng-model="oh.ods.details.SmsNumber" id="field-smsnumber" name="SmsNumber" validator="mobile">\r\n                    <\/span>\r\n                    <div ng-class="{\'input-group\': (userMobile || \'\') != \'\' || ((oh.ods.details.ContactPhone || \'\') != \'\' && oh.isMobile(oh.ods.details.ContactPhone))}">\r\n                        <input type="text" class="form-control" ng-model="oh.ods.details.SmsNumber" ng-change="oh.updateSms()" placeholder="Mobile number">\r\n                        <div class="input-group-btn" ng-if="(userMobile || \'\') != \'\' || (oh.ods.details.ContactPhone || \'\') != \'\'">\r\n                            <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r\n                                <span class="caret"><\/span>\r\n                            <\/button>\r\n                            <ul class="dropdown-menu dropdown-menu-right">\r\n                                <li ng-if="(userMobile || \'\') != \'\'">\r\n                                    <a href="javascript:;" ng-click="oh.updateSmsNumber(userMobile)"><i class="fa fa-fw fa-mobile"><\/i> Mobile number: {{userMobile}}<\/a>\r\n                                <\/li>\r\n                                <li ng-if="(oh.ods.details.ContactPhone || \'\') != \'\' && oh.isMobile(oh.ods.details.ContactPhone)">\r\n                                    <a href="javascript:;" ng-click="oh.updateSmsNumber(oh.ods.details.ContactPhone)"><i class="fa fa-fw fa-mobile"><\/i> Contact number: {{oh.ods.details.ContactPhone}}<\/a>\r\n                                <\/li>\r\n                                <li role="separator" class="divider" ng-if="(oh.ods.details.SmsNumber || \'\') != \'\'"><\/li>\r\n                                <li ng-if="(oh.ods.details.SmsNumber || \'\') != \'\'">\r\n                                    <a href="javascript:;" ng-click="oh.updateSmsNumber(\'\')"><i class="fa fa-fw fa-eraser"><\/i> Clear<\/a>\r\n                                <\/li>\r\n                            <\/ul>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-12 col-md-4 col-md-offset-3" ng-show="!oh.config.isProjectCalledBuilder && oh.config.canHaveBuilderName">\r\n                <div class="form-group">\r\n                    <label for="field-BuilderName">Builder name<\/label>\r\n                    <input type="text" class="form-control" ng-model="oh.ods.details.BuilderName" id="field-BuilderName" name="BuilderName" />\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Pickup options -->\r\n    <div ng-if="oh.isType(\'pickup\')">\r\n\r\n        <div ng-if="oh.config.useEstimatedDeliveryDate" class="row row-form">\r\n            <div class="form-group col-xs-12 col-md-3 col-md-offset-3 form-datepicker form-datepicker-fluid">\r\n                <label for="field-estimatedPickupDate">Estimated first pickup date*<\/label>\r\n                <calendar class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyEstimatedFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n                <span class="help-block">Orders may be placed for today or later<\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div ng-if="!oh.config.useEstimatedDeliveryDate" class="row row-form">\r\n            <div class="form-group col-xs-12 col-md-2 col-md-offset-3">\r\n                <label for="field-pickupstate-p">Pickup state<\/label>\r\n                <select class="form-control" id="field-pickupstate-p" name="DesiredFulfillmentRegion" ng-model="oh.ods.details.DesiredFulfillmentRegion" ng-options="x for x in oh.availableStates" ng-change="oh.getPickupPlants()" ng-disabled="!oh.config.canSetPickupPlants || oh.availableStates.length <= 1" validator="required">\r\n                <\/select>\r\n            <\/div>\r\n            <div class="form-group col-xs-12 col-md-4">\r\n                <label for="field-pickuplocation-p">Pickup location<\/label>\r\n                <select class="form-control" id="field-pickuplocation-p" name="DesiredFulfillmentLocationCode" ng-change="oh.refreshTimeslots()" ng-model="oh.ods.details.DesiredFulfillmentLocationCode" ng-options="loc.PlantId as loc.PlantName for loc in oh.ods.pickupLocations" ng-disabled="oh.ods.details.State == \'\' || !oh.ods.pickupLocations.length || oh.ods.pickupLocations.length <= 1 || !oh.config.canSetPickupPlants" validator="required">\r\n                    <option ng-if="oh.ods.pickupLocations === false" value="">Pickup unavailable in {{oh.ods.details.DesiredFulfillmentRegion}}<\/option>\r\n                <\/select>\r\n            <\/div>\r\n\r\n            <div class="form-group col-xs-12 col-md-3 col-md-offset-3 form-datepicker-fluid">\r\n                <label for="field-pickupDate">Pickup date*<\/label>\r\n                <calendar class="form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n            <\/div>\r\n\r\n            <div class="form-group col-xs-12 col-md-3">\r\n                <label for="field-pickuptime-p" class="form-control-block">Requested pickup time*<\/label>\r\n                <select id="field-pickuptime-p" name="DesiredFulfillmentTimeSlot" class="form-control" ng-show="oh.ods.deliveryTimeSlots.length && oh.ods.deliveryTimeSlots.length > 1" ng-model="oh.ods.details.DesiredFulfillmentTimeSlot" ng-options="time.Description as time.Description for time in oh.ods.deliveryTimeSlots" ng-change="oh.updatePickupSlot(oh.ods.details.DesiredFulfillmentTimeSlot)"><\/select>\r\n                <div ng-show="oh.ods.deliveryTimeSlots.length === 1" class="form-control form-control-static">\r\n                    {{oh.ods.deliveryTimeSlots[0].Description}}\r\n                <\/div>\r\n                <div ng-show="oh.ods.deliveryTimeSlots === null || oh.ods.deliveryTimeSlots.length === 0" class="form-control form-control-static">\r\n                    Please select pickup date\r\n                <\/div>\r\n                <span class="warning" ng-if="oh.ods.selectedTimeslotIsAfterCutoff"><i class="fa fa-warning"><\/i> Requested pickup time requires confirmation by CSR customer service.<\/span>\r\n            <\/div>\r\n\r\n            <div class="form-group col-xs-12 col-md-6 col-md-offset-3">\r\n                <ng-form>\r\n                    <label id="order-notes-pickup-label" for="order-notes-pickup">Pickup notes<\/label>\r\n                    <span id="order-notes-pickup-help" class="help-block control-label-help-block">Add special instructions for the pickup, time or wrapping for example.<\/span>\r\n                    <textarea id="order-notes-pickup" name="Note" class="form-control" rows="5" ng-model="oh.ods.details.Note" aria-labelledby="order-notes-pickup-label order-notes-pickup-help"><\/textarea>\r\n                <\/ng-form>\r\n            <\/div>\r\n\r\n            <div class="loading loading-fill fx-fade" ng-show="oh.ods.TimeslotsPending || oh.ods.pickupLocations === null">\r\n                <i><\/i> Loading pickup options&hellip;\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <hr>\r\n\r\n        <!-- BEGIN business name and contact details -->\r\n        <div class="row">\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3">\r\n                <h2>Contact details<\/h2>\r\n            <\/div>\r\n\r\n            <div class="col-xs-12">\r\n                <div class="row">\r\n                    <div class="col-xs-12  col-md-6 col-md-offset-3">\r\n                        <div class="form-group">\r\n                            <label for="field-BusinessName-p">Business name*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BusinessName" id="field-BusinessName-p" name="BusinessName" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="row">\r\n                    <div class="col-xs-12 col-md-4 col-md-offset-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactName-p">Contact name*<\/label>\r\n                            <!-- Super search -->\r\n                            <div angucomplete-alt\r\n                                 id="contact-super-search"\r\n                                 placeholder=""\r\n                                 controller="oh.orderContactSearchCtrl"\r\n                                 pause="750"\r\n                                 selected-object="oh.orderContactSelected"\r\n                                 deleted-object="oh.deleteOrderContact"\r\n                                 custom-action="oh.orderContactCustomAction"\r\n                                 focus-first="true"\r\n                                 input-changed="oh.orderContactSearchInputChanged"\r\n                                 remote-url="api/ordercontact/search"\r\n                                 remote-url-request-formatter="oh.orderContactSearchApiFn"\r\n                                 remote-url-response-formatter="oh.orderContactSearchResponseFn"\r\n                                 remote-url-data-field="Data"\r\n                                 search-fields="ContactName,ContactNumber"\r\n                                 title-field="ContactName"\r\n                                 description-field="ContactNumber"\r\n                                 minlength="2"\r\n                                 match-class="search-highlight"\r\n                                 input-class="form-control contact-search-input"\r\n                                 template-url="contact-super-search.html"\r\n                                 text-no-results="No contacts found">\r\n                            <\/div>\r\n                            <input type="checkbox" ng-model="oh.ods.saveContact" /> Save Contact <i class="fa fa-fw fa-info-circle" tooltip="Checking this option will save this contact for use with future orders"><span class="sr-only">Checking this option will save this contact for use with future orders<\/span><\/i>\r\n                            <!--<input type="text" class="form-control" ng-model="oh.ods.details.ContactName" id="field-ContactName-p" name="ContactName" validator="required" />-->\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-md-3 col-md-offset-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactPhone-p">Contact number*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.ContactPhone" id="field-ContactPhone-p" name="ContactPhone" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-md-4 col-md-offset-3" ng-show="!oh.config.isProjectCalledBuilder && oh.config.canHaveBuilderName">\r\n                        <div class="form-group">\r\n                            <label for="field-BuilderName-p">Builder name<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BuilderName" id="field-BuilderName-p" name="BuilderName" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                \r\n            <\/div>\r\n        <\/div>\r\n        <!-- END business name and contact details -->\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12 col-md-6 col-md-offset-3" ng-hide="oh.ods.optionalSiteAddress || oh.config.jobsiteAddressRequired">\r\n                <p>\r\n                    <a href="javascript:;" ng-click="oh.ods.optionalSiteAddress = true">Add a site address for your reference<\/a>\r\n                <\/p>\r\n            <\/div>\r\n\r\n            <div ng-show="oh.ods.optionalSiteAddress || oh.config.jobsiteAddressRequired" class="col-xs-12 col-md-6 col-md-offset-3 clr">\r\n\r\n                <div lookup-address\r\n                     address="oh.ods.details"\r\n                     form="form"\r\n                     address-required="oh.config.jobsiteAddressRequired"\r\n                     country="oh.ods.details.Country"\r\n                     available-states="oh.availableStates"\r\n                     prompt="{{oh.config.jobsiteAddressRequired ? \'Job site address *\' : \'Optional job site address\'}}">\r\n                <\/div>\r\n\r\n                <p ng-hide="oh.config.jobsiteAddressRequired"><a href="javascript:;" ng-click="oh.removeSiteAddress()">Remove optional address from pickup order<\/a><\/p>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <!-- Save/skip button -->\r\n    <div class="row block-headroom" ng-show="oh.ods.details.OrderType">\r\n\r\n        <div class="col-xs-12 col-md-6 col-md-offset-3 text-center">\r\n            <button type="button" class="btn btn-block btn-save" ng-click="oh.saveOrder($event)"><i class="fa fa-lg fa-fw fa-save"><\/i> Save {{ oh.orderTypeDisplayText }} details<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div id="order-details-summary" class="order-summary hide" ng-click="oh.toggleDetails()">\r\n    <div class="row">\r\n\r\n        <!-- Summary sentence -->\r\n        <div class="col-xs-12 col-sm-8">\r\n            <h2 class="order-summary-line">\r\n                <i class="fa fa-lg fa-fw fa-truck fa-flip-horizontal" ng-if="oh.isType(\'delivery\')"><\/i>\r\n                <i class="fa fa-lg fa-fw fa-warning" ng-if="oh.isType(\'unspecified\')"><\/i>\r\n                <i class="fa fa-lg fa-fw fa-shopping-cart" ng-if="!oh.isType(\'delivery\') && !oh.isType(\'unspecified\')"><\/i>\r\n                <strong>{{oh.ods.details.Reference || "New order"}}<\/strong>\r\n            <\/h2>\r\n            <div class="order-summary-line-details">\r\n                <strong ng-if="!oh.isType(\'unspecified\')">{{oh.orderType[oh.ods.details.OrderType] | titleCase}}<\/strong>\r\n                <span ng-if="oh.isType(\'unspecified\')"><small>Until you provide your order details, you\'ll see default pricing for your selected account.<\/small><\/span>\r\n                <span ng-if="oh.ods.details.DesiredFulfillmentTimeSlot && !oh.isType(\'unspecified\')"> for <strong>{{oh.ods.details.DesiredFulfillmentTimeSlot}}<\/strong><\/span>\r\n                <span ng-if="oh.ods.details.DesiredFulfillmentDate && !oh.isType(\'unspecified\')"> on <strong>{{oh.ods.details.DesiredFulfillmentDate | date: \'EEE d MMM\'}}<\/strong><\/span>\r\n                <span ng-if="oh.isType(\'delivery\')">\r\n                    <span ng-if="oh.ods.details.LotUnit || oh.ods.details.AddressLine1 || oh.ods.details.Suburb || oh.ods.details.State || oh.ods.details.Postcode">\r\n                        to\r\n                        <span ng-if="oh.ods.details.LotUnit"><strong>{{oh.ods.details.LotUnit}}<\/strong> <\/span>\r\n                        <span ng-if="oh.ods.details.AddressLine1"><strong>{{oh.ods.details.AddressLine1}}<\/strong>, <\/span>\r\n                        <span ng-if="oh.ods.details.Suburb"><strong>{{oh.ods.details.Suburb}}<\/strong>, <\/span>\r\n                        <span ng-if="oh.ods.details.State"><strong>{{oh.ods.details.State}}<\/strong> <\/span>\r\n                        <span ng-if="oh.ods.details.Postcode"><strong>{{oh.ods.details.Postcode}}<\/strong> <\/span>\r\n                    <\/span>\r\n                <\/span>\r\n                <span ng-if="!oh.isType(\'delivery\') && !oh.isType(\'unspecified\') && oh.ods.pickupPlantName">\r\n                    at <strong>{{oh.ods.pickupPlantName}}<\/strong>\r\n                <\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Details edit btn -->\r\n        <div class="col-xs-12 col-sm-4 text-right">\r\n            <a href="#" class="btn btn-default order-summary-btn"><i class="fa fa-fw fa-lg fa-pencil"><\/i> {{oh.isType(\'unspecified\') ? \'Add\' : \'Change\'}} {{ oh.orderTypeDisplayText }} details<\/a>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>');n.put("add-item-with-quantity-modal.html",'<div class="am-modal" role="dialog">\r\n    <h1>Select quantity for item<\/h1>\r\n    <div class="contact-card">\r\n        <div class="contact-details">\r\n            <h2>{{ addItemWithQuantityModal.item.Description}}<\/h2>\r\n            <p>{{ addItemWithQuantityModal.displayCode }}<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <p>Enter the quantity to add:<\/p>\r\n    \r\n    <div class="modal-qty-container">\r\n        <input ng-if="(addItemWithQuantityModal.item.DeliveryBlockSize == null || addItemWithQuantityModal.item.DeliveryBlockSize == 1)"\r\n               enter-press="selectResult(result, true, $event)"\r\n               type="text"\r\n               ng-model="addItemWithQuantityModal.item.Quantity"\r\n               no-drag\r\n               qty-spinner="qty-{{addItemWithQuantityModal.item.Id}}"\r\n               min="1"\r\n               value="{{addItemWithQuantityModal.item.Quantity}}"\r\n               ng-attr-max="{{ undefined }}"\r\n               data-ng-model-options="{ debounce: 50 }">\r\n\r\n        <brick-input ng-if="addItemWithQuantityModal.item.DeliveryBlockSize > 1"\r\n                     no-drag\r\n                     data-input-id="qty-{{addItemWithQuantityModal.item.Id}}"\r\n                     data-batch-size="addItemWithQuantityModal.item.DeliveryBlockSize"\r\n                     data-selected-value="addItemWithQuantityModal.item.Quantity"\r\n                     data-callback-debounce="50"\r\n                     data-min-value="1"><\/brick-input>\r\n    <\/div>\r\n\r\n    <div class="row modal-actions">\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="addItemWithQuantityModal.addItem()" class="btn btn-block btn-success">Add Item<\/button>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6 action">\r\n            <button ng-click="addItemWithQuantityModal.closeModal()" class="btn btn-block btn-secondary">Cancel<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("item-super-search-no-text-lines.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\r\n    <div class="input-group" style="width: 100%">\r\n        <input ng-model="searchStr"\r\n               id="item-super-search-input"\r\n               ng-disabled="disableInput"\r\n               type="text"\r\n               placeholder="{{placeholder}}"\r\n               ng-focus="onFocusHandler()"\r\n               class="{{inputClass}}"\r\n               ng-focus="resetHideResults()"\r\n               ng-blur="hideResults($event)"\r\n               autocapitalize="off"\r\n               autocorrect="off"\r\n               autocomplete="off"\r\n               maxlength="40"\r\n               ng-change="inputChangeHandler(searchStr)" />\r\n    <\/div>\r\n    <div class="angucomplete-dropdown" ng-show="showDropdown" id="{{id}}_dropdown">\r\n        <div class="angucomplete-searching" ng-show="searching"><span class="loading loading-inline"><i><\/i><\/span> Searching products<\/div>\r\n        <div class="angucomplete-searching" ng-show="!searching && !$parent.tooManyResults && (!results || results.length == 0)" ng-bind="textNoResults"><\/div>\r\n        <div class="alert alert-sm alert-warning" ng-show="!searching && $parent.tooManyResults">Find what you\'re looking for faster by adding more keywords to narrow your search<\/div>\r\n        <div class="angucomplete-row" ng-repeat="result in results" ng-click="selectResult(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\r\n            <div ng-if="imageField" class="angucomplete-image-holder">\r\n                <img ng-if="result.image && result.image != \'\'" ng-src="{{result.image}}" class="angucomplete-image" />\r\n                <div ng-if="!result.image && result.image != \'\'" class="angucomplete-image-default"><\/div>\r\n            <\/div>\r\n            <a href="javascript:;" ng-click="selectResult(result, true, $event)" angucomplete-ignore class="btn btn-sm btn-success pull-right angucomplete-ignore">Add<\/a>\r\n            <div class="angucomplete-title" ng-bind-html="result.title"><\/div>\r\n            <div ng-if="result.description && result.description != \'\'" class="angucomplete-description"><small ng-bind-html="result.description"><\/small><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("item-super-search.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\r\n    <div class="input-group" style="width: 100%">\r\n        <input ng-model="searchStr"\r\n               id="item-super-search-input"\r\n               ng-disabled="disableInput"\r\n               type="text"\r\n               placeholder="{{placeholder}}"\r\n               ng-focus="onFocusHandler()"\r\n               class="{{inputClass}}"\r\n               autocapitalize="off"\r\n               autocorrect="off"\r\n               autocomplete="off"\r\n               maxlength="40"\r\n               ng-change="inputChangeHandler(searchStr)" />\r\n        <span id="narrow-results-tooltip" ng-if="!searching && $parent.tooManyResults" data-balloon-visible class="narrow-results-tooltip" data-balloon-length="xlarge" data-balloon-pos="up-left" aria-label="Add more keywords to narrow your search further">\r\n            <i class="fa fa-lg fa-warning"><\/i>\r\n        <\/span>\r\n        <span class="input-group-btn">\r\n            <button class="btn btn-default" type="button" ng-click="selectResult({title: searchStr, originalObject: { name: searchStr, custom: true }})">Add as text line<\/button>\r\n        <\/span>\r\n    <\/div>\r\n    <div class="angucomplete-dropdown" ng-show="showDropdown" id="{{id}}_dropdown">\r\n        <div class="angucomplete-searching" ng-show="searching"><span class="loading loading-inline"><i><\/i><\/span> Searching products<\/div>\r\n        <div class="angucomplete-searching" ng-show="!searching && !$parent.tooManyResults && (!results || results.length == 0)" ng-bind="textNoResults"><\/div>\r\n        <div class="alert alert-sm alert-warning hidden-xs" ng-show="!searching && $parent.tooManyResults">Find what you\'re looking for faster by adding more keywords to narrow your search<\/div>\r\n\r\n        <div class="angucomplete-row angucomplete-product-search-row" ng-repeat="result in results" ng-click="focusQuantitySelector(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\r\n            <div ng-if="imageField" class="angucomplete-image-holder">\r\n                <img ng-if="result.image && result.image != \'\'" ng-src="{{result.image}}" class="angucomplete-image" />\r\n                <div ng-if="!result.image && result.image != \'\'" class="angucomplete-image-default"><\/div>\r\n            <\/div>\r\n            <a href="javascript:;" ng-click="selectResult(result, true, $event)" angucomplete-ignore class="btn btn-sm btn-success pull-right angucomplete-ignore">Add<\/a>\r\n\r\n            <input ng-if="(result.originalObject.DeliveryBlockSize == null || result.originalObject.DeliveryBlockSize == 1) && mobileDevice == false"\r\n                   class="pull-right m-r-5 angucomplete-ignore angucomplete-order-qty"\r\n                   enter-press="selectResult(result, true, $event)"\r\n                   type="text"\r\n                   ng-model="result.originalObject.Quantity"\r\n                   no-drag\r\n                   qty-spinner="qty-{{result.originalObject.Id}}"\r\n                   min="1"\r\n                   value="{{result.originalObject.Quantity}}"\r\n                   ng-attr-max="{{ undefined }}"\r\n                   data-ng-model-options="{ debounce: 50 }">\r\n\r\n            <brick-input ng-if="result.originalObject.DeliveryBlockSize > 1 && mobileDevice == false"\r\n                         class="pull-right m-r-5 angucomplete-ignore angucomplete-order-qty"\r\n                         no-drag\r\n                         data-input-id="qty-{{result.originalObject.Id}}"\r\n                         data-batch-size="result.originalObject.DeliveryBlockSize"\r\n                         data-selected-value="result.originalObject.Quantity"\r\n                         data-callback-debounce="50"\r\n                         data-min-value="1"><\/brick-input>\r\n\r\n            <div class="angucomplete-title angucomplete-ignore" ng-bind-html="result.title"><\/div>\r\n            <div ng-if="result.description && result.description != \'\'" class="angucomplete-description angucomplete-ignore"><small ng-bind-html="result.description"><\/small><\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\r\n');n.put("ordersv2.orderLineItems.html",'<!-- Line item plant -->\r\n<div ng-repeat="plant in oli.ods.items" ng-show="plant.Items.length">\r\n\r\n    <!-- Plant name header: Show if multiple plants returned for a pickup -->\r\n    <h3 ng-if="oli.om.isType(\'pickup\') && plant.PlantId" class="order-line-item-plant-row"><i class="fa fa-shopping-cart fa-lg order-line-item-plant-row-icon"><\/i><span>Pickup from <strong>{{plant.PlantName}}<\/strong>, {{plant.PlantAddress}}<\/span><\/h3>\r\n\r\n    <!-- Line items in plant -->\r\n    <table class="table table-sortable table-line-items" id="line-items-plant-{{plant.PlantId}}" ng-model="plant.Items" as-sortable="sortableOptions" as-sortable-id="{{plant.PlantId}}">\r\n        <thead>\r\n            <tr>\r\n                <th>Description<\/th>\r\n                <th class="text-right">Price<\/th>\r\n                <th class="text-right">Qty<\/th>\r\n                <th class="text-right">Subtotal<\/th>\r\n                <th class="text-right"><a class="btn btn-link btn-sm table-line-items-remove-all" href="javascript:;" ng-click="oli.clearItemsPrompt($event, plant)" title="Remove all items"><i class="fa fa-fw fa-remove"><\/i> <span class="sr-only">Remove all items<\/span><\/a><\/th>\r\n            <\/tr>\r\n        <\/thead>\r\n        <tbody id="table-line-items-sortable">\r\n            <tr ng-repeat="item in plant.Items" class="order-line-item animate-repeat drag-draggable" ng-class="{ \'order-line-item-packing\': item.Code == \'T\', changed: item.changed, adding: item.tempId, removing: item.removing }" as-sortable-item>\r\n                <!-- Description -->\r\n                <td ng-if="oli.isNotText(item)" class="line-item-title tf-block" no-drag ><i class="fa fa-lg fa-sort drag-handle" as-sortable-item-handle><\/i><div class="item-left-text"><strong>{{item.Description | titleCase: true}}<\/strong><br /><small>{{item.Code | productCode}}<\/small><\/div><\/td>\r\n\r\n                <!-- Unit price -->\r\n                <td ng-if="!oli.showPricing && oli.isNotTextOrCustom(item)" class="text-right line-item-unit-price">&nbsp;<\/td>\r\n                <td ng-if="oli.showPricing && oli.isNotTextOrCustom(item) && item.UnitPriceExcludingGST > 0" class="text-right line-item-unit-price">\r\n                    {{oli.calcUnitPrice(item) | currency}} per {{item.QuantityUOM}}<br />\r\n                    <small ng-show="item.PricingQuantity > 1 || (item.Conversion != 1 && item.UnitPriceExcludingGST)">{{item.UnitPriceExcludingGST | currency}} per {{item.PricingQuantity > 1 ? item.PricingQuantity + \' \' : \'\' }}{{item.PricingUOM}}<\/small>\r\n                <\/td>\r\n\r\n                <!-- Call for unit price -->\r\n                <td ng-if="oli.showPricing && oli.isCallForPrice(item,false)" class="text-right line-item-unit-price"><span class="label label-default">Call for price<\/span><\/td>\r\n\r\n                <!-- Pricing availability pending -->\r\n                <td ng-if="oli.showPricing && oli.isNotTextOrCustom(item) && item.UnitPriceExcludingGST == 0 && item.PricingAvailability === oli.priceAvailability.unknown" class="text-right line-item-unit-price" as-sortable-item-handle>&nbsp;<\/td>\r\n\r\n                <!-- Quantity -->\r\n                <td ng-if="item.Code != \'T\'" class="line-item-qty text-right">\r\n                    <label for="qty-{{item.Id}}" class="table-label sr-only">Quantity<\/label>\r\n\r\n                    <!-- Regular quantities -->\r\n                    <input ng-if="item.DeliveryBlockSize == null || item.DeliveryBlockSize == 1"\r\n                           type="text"\r\n                           ng-model="item.Quantity"\r\n                           ng-change="oli.updateItem(item)"\r\n                           ng-disabled="item.tempId || item.removing"\r\n                           no-drag\r\n                           qty-spinner="qty-{{item.Id}}"\r\n                           not-dirty\r\n                           min="1"\r\n                           value="{{item.Quantity}}"\r\n                           ng-attr-max="{{ item.RemainingQty || undefined }}"\r\n                           data-ng-model-options="{ debounce: 750 }">\r\n\r\n                    <!-- Batched quantities -->\r\n                    <brick-input ng-if="item.DeliveryBlockSize > 1"\r\n                                 no-drag\r\n                                 ng-disabled="item.tempId || item.removing"\r\n                                 data-available-amount="item.RemainingQty"\r\n                                 data-input-id="qty-{{item.Id}}"\r\n                                 data-batch-size="item.DeliveryBlockSize"\r\n                                 data-selected-value="item.Quantity"\r\n                                 data-callback-function="oli.updateItem(item)"\r\n                                 data-callback-debounce="750"\r\n                                 data-min-value="0"><\/brick-input>\r\n\r\n                    <!-- ATP status -->\r\n                    <span ng-if="oli.om.isAtpEnabled" class="line-item-atp">\r\n                        <span class="fa-stack small" data-tooltip-placement="top" ng-if="item.atpCheckResult!==\'I\'" data-tooltip="{{item.isValidating ? \'\' : item.atpTooltip}}">\r\n                            <span class="loading order-rewards-loading" ng-if="item.isValidating || item.isValidating==undefined"><i><\/i><\/span>\r\n                            <i class="fa fa-lg fa-check text-success fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'Y\'" data-tooltip-placement="top" data-tooltip="Stock is available"><\/i>\r\n                            <i class="fa fa-lg fa-check text-success fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'L\'" data-tooltip-placement="top" data-tooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your order"><\/i>\r\n                            <i class="fa fa-fw fa-warning fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'N\'"><\/i>\r\n\r\n                            <i class="fa fa-fw fa-warning fa-stack-1x" ng-if="!item.isValidating && item.atpCheckResult===\'L\'" style="margin-left: 8px; margin-top: 8px;"><\/i>\r\n                        <\/span>\r\n                    <\/span>\r\n                <\/td>\r\n\r\n                <!-- Text line -->\r\n                <td ng-if="item.Code == \'T\'" colspan="4" class="line-item-title tf-block" no-drag><i class="fa fa-lg fa-sort drag-handle" as-sortable-item-handle><\/i> <strong>{{item.Description}}<\/strong><\/td>\r\n\r\n                <!-- Subtotal -->\r\n                <td class="text-right line-item-subtotal" ng-if="!oli.showPricing">\r\n                    <strong class="table-label">Subtotal<\/strong>\r\n                <\/td>\r\n                <td class="text-right line-item-subtotal" ng-if="oli.showPricing && (item.UnitPriceExcludingGST > 0 || (item.Code != \'T\' && item.PricingAvailability === oli.priceAvailability.unknown))">\r\n                    <strong class="table-label">Subtotal<\/strong>\r\n                    {{ oli.calcPrice(item) | currency }}\r\n                <\/td>\r\n\r\n                <!-- Call for price -->\r\n                <td class="text-right line-item-subtotal" ng-if="oli.showPricing && oli.isCallForPrice(item,true)"><span class="label label-default">Call for price<\/span><\/td>\r\n\r\n                <!-- Remove btn -->\r\n                <td class="text-right line-item-remove"><a href="javascript:;" ng-if="item.OrderId" ng-click="oli.removeItem(item, $index)" ng-disabled="item.tempId" title="Remove item" class="btn btn-default btn-sm" no-drag><i class="fa fa-fw fa-remove"><\/i><span class="sr-only">Remove item<\/span><\/a><\/td>\r\n            <\/tr>\r\n        <\/tbody>\r\n    <\/table>\r\n\r\n<\/div>\r\n\r\n<page-empty-message feature="order"\r\n                    showicon="false"\r\n                    title="Add some items to your order"\r\n                    showmessage = false\r\n                    ng-show="!oli.ods.items.length || (oli.ods.items.length == 1 && !oli.ods.items[0].Items.length)">\r\n<\/page-empty-message>\r\n\r\n\r\n<div class="row">\r\n    <div class="col-xs-12">\r\n        <div class="order-add-items order-add-items-newordering" id="order-add-items">\r\n            <div class="row">\r\n                <h4 class="order-add-items-header">Search or add items using the options below<\/h4>\r\n                <!-- Super search -->\r\n                <div class="col-xs-12 col-md-7 form-group">\r\n                    <div angucomplete-alt\r\n                         id="item-super-search"\r\n                         placeholder="{{oli.msgs.autocompletePlaceholder}}"\r\n                         pause="750"\r\n                         focus-in="oli.focusProductSearch"\r\n                         selected-object="oli.newItem"\r\n                         clear-selected="true"\r\n                         focus-first="true"\r\n                         remote-url="api/customerproducts/search"\r\n                         remote-url-request-formatter="oli.productSearchApiFn"\r\n                         remote-url-response-formatter="oli.productSearchResponseFn"\r\n                         remote-url-data-field="Items"\r\n                         search-fields="Code,Description,Group,MainGroup,SubGroup"\r\n                         title-field="Description"\r\n                         description-field="Code"\r\n                         image-field="ImageAssetUri"\r\n                         minlength="2"\r\n                         match-class="search-highlight"\r\n                         input-class="form-control"\r\n                         template-url="item-super-search.html"\r\n                         text-no-results="No products found">\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="col-xs-12 col-md-5 form-group">\r\n                    <div class="btn-group btn-block">\r\n                        <a data-toggle="collapse" href="#order-quickadd" class="btn btn-default btn-half"><span class="collapse-on"><i class="fa fa-fw fa-plus-square-o"><\/i> Show<\/span><span class="collapse-off"><i class="fa fa-fw fa-minus-square-o"><\/i> Hide<\/span> quick picks<\/a>\r\n                        <a ng-href="#/products" class="btn btn-default btn-half"><i class="fa fa-fw fa-list"><\/i> Browse products<\/a>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("order-modify-capacity-confirmation.html",'<form ng-submit="$close(true)">\r\n    <div class="modal-body p-2">\r\n        <h2 class="modal-title text-center m-b-20">\r\n            <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n\r\n            Confirmation required\r\n        <\/h2>\r\n        <h4 class="text-center m-2 m-t-0">To finalise changes to this order, please confirm that your transport has capacity for all products requested on this order.<\/h4>\r\n        <div class="row p-2">\r\n            <div class="col-sm-3 col-xs-5">\r\n                <div class="truck-capacity m-l-2" ng-class="{\'order-modify-disabled\':!hasCapacityPercent}">\r\n                    <div class="truck-capacity-percentage" ng-if="!hasCapacityPercent">?<\/div>\r\n                    <div class="truck-capacity-percentage" ng-if="hasCapacityPercent">{{capacityPercent}}%<\/div>\r\n                    <div class="truck-capacity-background">\r\n                        <div class="truck-capacity-background-bar" ng-class="{\'green\':capacityPercent<=75, \'orange\':capacityPercent>75 && capacityPercent<90, \'red\':capacityPercent>90}" style="height: {{capacityPercent > 100 ? 100 : capacityPercent}}%"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-sm-9 col-xs-7">\r\n                <div class="row">\r\n                    <div class="col-sm-6 col-xs-12">\r\n                        <strong>Capacity:<\/strong> {{pickupCapacity ? pickupCapacity + \'kg\' : \'Unknown\'}}\r\n                    <\/div>\r\n                    <div class="col-sm-6 col-xs-12">\r\n                        <strong>Total items:<\/strong> {{itemsCount}}\r\n                    <\/div>\r\n                    <div class="col-sm-6 col-xs-12" ng-if="grossWeights">\r\n                        <strong>Item weight:<\/strong> <span ng-repeat="grossWeight in grossWeights">{{grossWeight.value}} {{grossWeight.description | lowercase}} <\/span>\r\n                    <\/div>\r\n                    <div class="col-sm-6 col-xs-12" ng-if="areas">\r\n                        <strong>Item area:<\/strong> <span div ng-repeat="area in areas">{{area.value}} {{area.description | lowercase}} <\/span><\r\n                    <\/div>\r\n                    <div class="col-sm-6 col-xs-12" ng-if="volumes">\r\n                        <strong>Item volume:<\/strong> <span div ng-repeat="volume in volumes">{{volume.value}} {{volume.description | lowercase}} <\/span>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="modal-footer m-t-10">\r\n        <div class="row">\r\n            <div class="col-sm-6 col-xs-12">\r\n                <button class="btn btn-default btn-block" ng-click="$dismiss()">Return to order<\/button>\r\n            <\/div>\r\n            <div class="col-sm-6 col-xs-12">\r\n                <input type="submit" class="btn btn-primary btn-block" value="Confirm and Submit" />\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/form>');n.put("order-modify-capacity-input.html",'<form ng-submit="$close(pickupCapacity)">\r\n    <div class="modal-header">\r\n        <h3 class="modal-title">\r\n            <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n            <img ng-src="/assets/img/deliveries/pickup.png" style="width: 40px; margin-top: -15px;display: inline-block">\r\n            Pickup Capacity\r\n        <\/h3>\r\n    <\/div>\r\n    <div class="modal-body">\r\n        <div class="row">\r\n            <div class="col-xs-3">\r\n                <label for="pickup-capacity-input" class="control-label">Capacity (in kg)<\/label>\r\n            <\/div>\r\n            <div class="col-xs-9">\r\n                <input type="number" ng-model="pickupCapacity" class="form-control" id="pickup-capacity-input" />\r\n\r\n                <p class="text-info p-t-1"><i class="fa fa-info-circle"><\/i> Enter your available pickup capacity and we will keep an eye on your limits<\/p>\r\n\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="modal-footer m-t-10">\r\n        <div class="row">\r\n            <div class="col-sm-6 col-xs-12">\r\n                <button class="btn btn-default btn-block" ng-click="$dismiss()">Close<\/button>\r\n            <\/div>\r\n            <div class="col-sm-6 col-xs-12">\r\n                <input type="submit" class="btn btn-primary btn-block" value="Submit" />\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/form>');n.put("order-modify-product-selector.html",'\r\n<div class="modal-header">\r\n    <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <h3 class="modal-title">Add Products<\/h3>\r\n<\/div>\r\n<div class="modal-body p-t-0">\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <h4><i class="fa fa-fw fa-search"><\/i> Search all products<\/h4>\r\n            <div angucomplete-alt\r\n                 id="item-super-search"\r\n                 placeholder="{{oli.msgs.autocompletePlaceholder}}"\r\n                 pause="750"\r\n                 selected-object="productSelector.newItem"\r\n                 clear-selected="true"\r\n                 focus-first="true"\r\n                 remote-url="api/customerproducts/search"\r\n                 remote-url-request-formatter="productSelector.productSearchApiFn"\r\n                 remote-url-response-formatter="productSelector.productSearchResponseFn"\r\n                 remote-url-data-field="Items"\r\n                 search-fields="Code,Description,Group,MainGroup,SubGroup"\r\n                 title-field="Description"\r\n                 description-field="Code"\r\n                 image-field="ImageAssetUri"\r\n                 minlength="2"\r\n                 match-class="search-highlight"\r\n                 input-class="form-control"\r\n                 template-url="item-super-search-no-text-lines.html"\r\n                 text-no-results="No products found">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12">\r\n            <hr class="p-0 m-0 m-b-1 m-t-20 " />\r\n        <\/div>\r\n        <div class="col-xs-12" ng-show="productSelector.mostOrdered === null">\r\n            <div class="loading p-2">\r\n                <i><\/i> Loading most ordered products\r\n            <\/div>\r\n        <\/div>\r\n        <div class="col-xs-12 quickadd-products" ng-show="productSelector.mostOrdered !== null">\r\n            <h4><i class="fa fa-fw fa-star"><\/i> Choose from most ordered products<\/h4>\r\n\r\n            <div class="list-group">\r\n                <a ng-repeat="item in productSelector.mostOrdered | limitTo:20" class="list-group-item quickadd-item" href="javascript:;" ng-click="productSelector.addItem(item)">\r\n                    <span class="quickadd-title">\r\n                        <strong>{{item.Description | titleCase: true}}<\/strong>\r\n                        <small>{{item.Code | productCode}}<\/small>\r\n                    <\/span>\r\n                    <span class="btn btn-sm btn-success quickadd-btn">Add<\/span>\r\n                <\/a>\r\n            <\/div>\r\n            <p ng-show="productSelector.mostOrdered.length === 0" class="text-muted">No products to display<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <\/div>\r\n<div class="modal-footer">\r\n    <button class="btn btn-primary btn-block" ng-click="$dismiss()">Close<\/button>\r\n<\/div>');n.put("order-modify.html",'<div class="container" ng-controller="OrderModifyController as orderModify" auth-key="Customer/OnlineOrdering" ng-cloak>\r\n\r\n<div ng-if="orderModify.isLoading===true" class="loading loading-page">\r\n    <i><\/i> Loading order {{orderModify.orderNo}}\r\n<\/div>\r\n\r\n<h1 ng-if="orderModify.isLoading===false">Modify Order <span class="text-muted small" ng-if="!orderModify.orderCanBeModified">(Read Only)<\/span><\/h1>\r\n\r\n<!-- Order Header -->\r\n<div class="panel" ng-if="orderModify.isLoading===false">\r\n    <!--Order Header Order Details-->\r\n    <div class="row">\r\n        <div class="col-sm-8 col-xs-12">\r\n            <div class="order-modify-delivery-icon pull-left">\r\n                <img ng-src="/assets/img/deliveries/{{orderModify.order.deliveryIndicatorType}}.png" alt="{{orderModify.order.deliveryIndicatorType}}">\r\n            <\/div>\r\n            <div class="order-modify-header-left-details">\r\n                <h3 class="order-modify-header-reference">{{orderModify.order.reference}}<\/h3>\r\n                <p class="order-modify-header-subtext">\r\n                    <b>{{orderModify.order.deliveryIndicatorType}}<\/b> for \r\n                    <b>{{orderModify.order.deliveryTimeslot}}<\/b> on \r\n                    <b>{{orderModify.order.deliveryDate | date : \'EEEE d MMM\'}}<\/b> \r\n                    <span ng-if="orderModify.order.deliveryIndicator===\'D\'">to <b>{{orderModify.order.shipToAddress}}<\/b><\/span>\r\n                    <span ng-if="orderModify.order.deliveryIndicator===\'P\'">from <b>{{orderModify.order.pickupPlantName}}<\/b><\/span>\r\n                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="col-sm-2 hidden-xs text-right">\r\n            <h3 class="order-modify-header-title">CSR order #<\/h3>\r\n            <p class="order-modify-header-subtext">{{orderModify.order.salesDocNo}}<\/p>\r\n        <\/div>\r\n        <div class="col-sm-2 hidden-xs text-right">\r\n            <h3 class="order-modify-header-title">Order placed<\/h3>\r\n            <p class="order-modify-header-subtext">{{orderModify.order.createDate | date : \'EEEE d MMM\'}}<\/p>\r\n        <\/div>\r\n        <div class="col-xs-12 visible-xs">\r\n            <div class="order-modify-header-left-details">\r\n                <p><a href="javascript:;" ng-click="orderModify.toggleDetailView()">{{orderModify.showOrderDetails ? \'Hide\' : \'View\'}} order details<\/a><\/p>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div class="row hidden-xs">\r\n        <div class="col-sm-6">\r\n            <div class="order-modify-header-left-details">\r\n                <p><a href="javascript:;" ng-click="orderModify.toggleDetailView()">{{orderModify.showOrderDetails ? \'Hide\' : \'View\'}} order details<\/a><\/p>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <div ng-if="orderModify.showOrderDetails" class="p-b-1">\r\n        <div class="row order-modify-header-left-details">\r\n            <div class="col-sm-4 col-xs-6">\r\n                <strong>Contact Name<\/strong><br />{{orderModify.order.contactName || \'---\'}}\r\n            <\/div>\r\n            <div class="col-sm-4 col-xs-6">\r\n                <strong>Contact Number<\/strong><br />{{orderModify.order.contactNumber || \'---\'}}\r\n            <\/div>\r\n            <div class="col-sm-4 col-xs-6">\r\n                <strong>Builder Name<\/strong><br />{{orderModify.order.builderName || \'---\'}}\r\n            <\/div>\r\n        <\/div>\r\n        <div ng-hide="orderModify.order.shipToAddress==orderModify.order.soldToAddress && orderModify.order.deliveryIndicator===\'P\'" class="row order-modify-header-left-details">\r\n            <div class="col-sm-4 col-xs-12">\r\n                <strong>{{orderModify.order.deliveryIndicator===\'P\' ? \'Job Site\' : \'Delivery\'}} Address<\/strong><br />{{orderModify.order.shipToAddress}}\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n    <!--End Order Header Order Details-->\r\n    <div class="row arrow-steps clearfix hidden-xs">\r\n        <div class="col-xs-3 step" ng-class="{\'done\':orderModify.order.docStatus>\'010\',\'current\':orderModify.order.docStatus===\'010\'}"> <span>Pending<\/span> <\/div>\r\n        <div class="col-xs-3 step" ng-class="{\'done\':orderModify.order.docStatus>\'020\',\'current\':orderModify.order.docStatus===\'020\'}"> <span>Confirmed<\/span> <\/div>\r\n        <div class="col-xs-3 step" ng-class="{\'done\':orderModify.order.docStatus>\'040\',\'current\':orderModify.order.docStatus===\'040\'}"> <span>Processing<\/span> <\/div>\r\n        <div class="col-xs-3 step" ng-class="{\'current\':orderModify.order.docStatus>\'040\'}"> <span>Processed<\/span> <\/div>\r\n    <\/div>\r\n    <div class="row visible-xs">\r\n        <div class="col-xs-12"> <span class="label label-order-status">{{orderModify.order.docStatusDesc}}<\/span> <\/div>\r\n    <\/div>\r\n<\/div>\r\n<!-- End Order Header -->\r\n\r\n<div class="panel border-none background-none p-b-0 p-t-0 m-0" ng-if="orderModify.isLoading===false && orderModify.order.items.length>0">\r\n    <div class="row order-modify-products-header">\r\n        <div class="col-md-6 col-sm-5 col-xs-12">\r\n\r\n            <strong>Products<\/strong>\r\n\r\n        <\/div>\r\n        <div class="col-sm-2 text-right hidden-xs">\r\n\r\n            <strong>Price<\/strong>\r\n\r\n        <\/div>\r\n        <div class="col-md-2 col-sm-3 text-right hidden-xs">\r\n\r\n            <strong>Quantity<\/strong>\r\n\r\n        <\/div>\r\n        <div class="col-sm-1 text-right hidden-xs">\r\n\r\n            <strong>Subtotal<\/strong>\r\n\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<!-- Start products panel -->\r\n<div class="panel" ng-if="orderModify.isLoading===false">\r\n    <div ng-if="orderModify.order.items.length==0">\r\n        <div class="content-empty">\r\n\r\n            <span class="content-empty-icon fs-icon" data-feature="order"><\/span>\r\n            <h3 class="content-empty-title ng-binding">Add some items to your order<\/h3>\r\n            <p class="ng-binding">Add items using the options below<\/p>\r\n\r\n        <\/div>\r\n        <hr class="m-b-1" />\r\n    <\/div>\r\n    <div ng-repeat="item in orderModify.order.items" ng-class="{\'order-modify-product-modified\':item.isModified}">\r\n        <div class="row">\r\n            <div class="col-md-6 col-sm-5 col-xs-8 p-b-1">\r\n\r\n                <strong>{{item.description}}<\/strong> <span class="order-modify-product-modified-label hidden-xs" ng-if="item.isModified"> <span class="badge badge-warning"><\/span> {{item.itemNo!=undefined ? \'Modified\' : \'Added\'}}<\/span><br>\r\n                <small ng-if="item.itemCode!=\'T\'">{{item.itemCode}} <span class="order-modify-product-modified-label visible-xs-inline-block" ng-if="item.isModified"> <span class="badge badge-warning"><\/span> {{item.itemNo!=undefined ? \'Modified\' : \'Added\'}}<\/span><\/small>\r\n\r\n            <\/div>\r\n            <div class="col-sm-2 col-xs-4 text-right p-b-1">\r\n\r\n                <span ng-if="item.salesUnit && item.itemCode!=\'T\'">\r\n                    {{item.salesPrice | currency}} per {{item.salesUnit}}<br>\r\n                    <small ng-if="item.salesUnit !== item.priceUnit">{{item.price | currency}} per {{item.priceUnit}}<\/small>\r\n                <\/span>\r\n\r\n            <\/div>\r\n            <div class="col-md-2 col-sm-3 col-xs-6 text-right col-xs-text-left">\r\n                <div class="row" ng-if="item.itemCode!=\'T\'">\r\n                    <div class="col-xs-12 text-nowrap">\r\n                        <span class="visible-sm-inline-block visible-md-inline-block visible-lg-inline-block p-r-1">\r\n                            <span class="loading inline-block m-b-5" ng-if="item.isRefreshing"><i><\/i><\/span>\r\n                            <span class="small order-modify-product-atp-warning" ng-if="item.hasAtpWarning && !item.isRefreshing" data-tooltip-placement="left" data-tooltip="Your order cannot be placed with the requested quantities, reduce your order quantity or undo all changes">\r\n                                <i class="fa fa-fw fa-2x fa-warning"><\/i>\r\n                            <\/span>\r\n                            <span class="small order-modify-product-atp-warning" ng-if="item.isAtpInactive" data-tooltip-placement="right" data-tooltip="Stock availability cannot be confirmed for changes to this item">\r\n                                <i class="fa fa-fw fa-2x fa-warning"><\/i>\r\n                            <\/span>\r\n                        <\/span>\r\n\r\n                        <input type="text"\r\n                               ng-model="item.orderQty"\r\n                               ng-change="orderModify.itemChange(item)"\r\n                               ng-disabled="orderModify.isSubmitting || !orderModify.orderCanBeModified || item.isAtpInactive"\r\n                               no-drag\r\n                               qty-spinner="qty-{{$index}}"\r\n                               not-dirty\r\n                               min="1"\r\n                               value="{{item.orderQty}}"\r\n                               data-ng-model-options="{ debounce: 500 }">\r\n\r\n                        <span class="visible-xs-inline-block p-l-1">\r\n                            <span class="loading inline-block m-b-5" ng-if="item.isRefreshing"><i><\/i><\/span>\r\n                            <span class="small order-modify-product-atp-warning" ng-if="item.hasAtpWarning && !item.isRefreshing" data-tooltip-placement="right" data-tooltip="Your order cannot be placed with the requested quantities, reduce your order quantity or undo all changes">\r\n                                <i class="fa fa-fw fa-2x fa-warning"><\/i>\r\n                            <\/span>\r\n                            <span class="small order-modify-product-atp-warning" ng-if="item.isAtpInactive" data-tooltip-placement="right" data-tooltip="Stock availability cannot be confirmed for changes to this item">\r\n                                <i class="fa fa-fw fa-2x fa-warning"><\/i>\r\n                            <\/span>\r\n                        <\/span>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-sm-1 col-xs-4 text-right">\r\n                <span ng-if="item.itemCode!=\'T\'">\r\n                    {{item.salesPrice * item.orderQty | currency}}\r\n                <\/span>\r\n            <\/div>\r\n            <div class="col-sm-1 col-xs-2 text-right">\r\n                <a href="javascript:;" ng-click="orderModify.removeItem($index)" ng-if="orderModify.orderCanBeModified && item.itemCode!=\'T\'" title="Remove item" class="btn btn-default btn-sm"><i class="fa fa-fw fa-remove"><\/i><span class="sr-only">Remove item<\/span><\/a>\r\n            <\/div>\r\n        <\/div>\r\n        <hr class="m-b-1" ng-if="orderModify.orderCanBeModified" />\r\n    <\/div>\r\n    <div class="row">\r\n        <div class="col-xs-12" ng-if="orderModify.orderCanBeModified">\r\n            <button type="button" class="btn btn-solid" ng-disabled="orderModify.isSubmitting" ng-click="orderModify.showProductSelection()"><i class="fa fa-fw fa-plus"><\/i> Add products<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n<!-- End products panel -->\r\n<!--Start shipping notes-->\r\n<div class="row" ng-if="orderModify.isLoading===false">\r\n    <div class="col-sm-6 col-xs-12">\r\n        <label for="order-modify-shipping-notes">Shipping notes<\/label>\r\n        <textarea id="order-modify-shipping-notes" name="Note" readonly="readonly" class="form-control" rows="5">{{orderModify.order.shippingNote}}<\/textarea>\r\n    <\/div>\r\n<\/div>\r\n<div class="order-modify-footer-padding"><\/div>\r\n<!--End shipping notes-->\r\n\r\n\r\n<div id="create-order-footer" class="container-fluid p-0" ng-if="orderModify.isLoading===false">\r\n    <!-- Mobile Footer -->\r\n    <div id="create-order-footer-visible-xs" class="visible-xs m-t-5">\r\n        \r\n        <div class="row" ng-class="{\'text-muted\':orderModify.isSimulating}">\r\n            <div class="col-xs-3">\r\n                <div class="row">\r\n                    <div class="col-xs-12 m-l-5">\r\n                        <div class="truck-capacity" ng-class="{\'order-modify-disabled\':!orderModify.hasCapacityPercent}">\r\n                            <div class="truck-capacity-percentage" ng-if="!orderModify.hasCapacityPercent">?<\/div>\r\n                            <div class="truck-capacity-percentage" ng-if="orderModify.hasCapacityPercent">{{orderModify.capacityPercent}}%<\/div>\r\n                            <div class="truck-capacity-background">\r\n                                <div class="truck-capacity-background-bar" ng-class="{\'green\':orderModify.capacityPercent<=75, \'orange\':orderModify.capacityPercent>75 && orderModify.capacityPercent<90, \'red\':orderModify.capacityPercent>=90}" style="height: {{orderModify.capacityPercent > 100 ? 100 : orderModify.capacityPercent}}%"><\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-xs-9">\r\n                <table class="small full-width">\r\n                    <tr>\r\n                        <td class="vertical-align-top">\r\n                            <table class="p-1 p-l-0 m-r-1">\r\n                                <tr>\r\n                                    <th class="text-left p-r-1">Capacity<\/th>\r\n                                    <td class="text-right">\r\n\r\n                                        <div ng-if="orderModify.order.deliveryIndicator===\'P\'" class="form-inline">\r\n                                            <a ng-if="orderModify.order.pickupCapacity" href="javascript:;" ng-click="orderModify.showPickupCapacityInput()">{{orderModify.order.pickupCapacity}} kg<\/a>\r\n                                            <a ng-if="orderModify.order.pickupCapacity==undefined" href="javascript:;" ng-click="orderModify.showPickupCapacityInput()">Enter Capacity<\/a>\r\n                                            <a ng-if="orderModify.order.pickupCapacity" href="javascript:;" ng-click="orderModify.clearPickupCapacity()"><i class="fa fa-close"><\/i><\/a>\r\n                                        <\/div>\r\n                                        <div ng-if="orderModify.order.deliveryIndicator===\'D\'">\r\n                                            <span ng-if="orderModify.order.hasDeliveryScheduleLines">{{orderModify.order.vehicleCapacity}}kg<\/span>\r\n                                            <span ng-if="!orderModify.order.hasDeliveryScheduleLines">Vehicle allocation TBC<\/span>\r\n                                        <\/div>\r\n                                    <\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <th class="text-left p-r-1">Total items<\/th>\r\n                                    <td class="text-right">{{orderModify.order.items.length}}<\/td>\r\n                                <\/tr>\r\n                                <tr ng-if="orderModify.order.grossWeights">\r\n                                    <th class="text-left p-r-1">Item weight<\/th>\r\n                                    <td class="text-right"><span div ng-repeat="grossWeight in orderModify.order.grossWeights">{{grossWeight.value}} {{grossWeight.description | lowercase}} <\/span><\/td>\r\n                                <\/tr>\r\n                                <tr ng-if="orderModify.order.areas">\r\n                                    <th class="text-left p-r-1">Item area<\/th>\r\n                                    <td class="text-right"><span div ng-repeat="area in orderModify.order.areas">{{area.value}} {{area.description | lowercase}} <\/span><\/td>\r\n                                <\/tr>\r\n                                <tr ng-if="orderModify.order.volumes">\r\n                                    <th class="text-left p-r-1">Item volume<\/th>\r\n                                    <td class="text-right"><span div ng-repeat="volume in orderModify.order.volumes">{{volume.value}} {{volume.description | lowercase}} <\/span><\/td>\r\n                                <\/tr>\r\n                            <\/table>\r\n                        <\/td>\r\n                        <td class="text-right vertical-align-top">\r\n                            <table class="p-1 m-r-1 pull-right">\r\n                                <tr>\r\n                                    <th class="text-right p-r-1">Freight<\/th>\r\n                                    <td class="text-right">{{orderModify.order.freightValue | currency }}<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <th class="text-right p-r-1">GST<\/th>\r\n                                    <td class="text-right">{{orderModify.order.taxValue | currency }}<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <th class="text-right p-r-1">Subtotal<\/th>\r\n                                    <td class="text-right">{{orderModify.order.subTotal | currency }}<\/td>\r\n                                <\/tr>\r\n                                <tr>\r\n                                    <th class="text-right p-r-1">Total<\/th>\r\n                                    <td class="text-right">{{orderModify.order.grossValue | currency }}<\/td>\r\n                                <\/tr>\r\n                            <\/table>\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/table>\r\n            <\/div>\r\n        <\/div>\r\n        <hr class="m-b-0" />\r\n        <div class="row p-1">\r\n\r\n            <div class="col-xs-5" ng-if="orderModify.orderCanBeModified">\r\n                <button type="button" class="btn btn-outline btn-block" ng-disabled="orderModify.orderIsPristine() || orderModify.isSubmitting" ng-click="orderModify.undoChanges()"><i class="fa fa-fw fa-undo"><\/i> Undo all changes<\/button>\r\n            <\/div>\r\n            <div class="col-xs-2 p-r-0">\r\n                <span class="loading m-t-5 pull-right" ng-if="orderModify.isSimulating || orderModify.isSubmitting"><i><\/i><\/span>\r\n            <\/div>\r\n            <div class="col-xs-5" ng-if="orderModify.orderCanBeModified">\r\n                <button type="button" class="btn btn-primary btn-block" ng-click="orderModify.submitOrderChange()" ng-disabled="orderModify.orderIsPristine() || orderModify.isSimulating || orderModify.isSubmitting || !orderModify.orderIsValid">{{oc.isValidating ? \'Validating ...\' : (oc.placingOrder ? \'Updating order ...\' : \'Update order\')}}<\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n    \r\n    <!-- Desktop Footer -->\r\n    <div id="create-order-footer-hidden-xs" class="hidden-xs">\r\n\r\n        <div class="row" ng-class="{\'text-muted\':orderModify.isSimulating}">\r\n            <div class="col-sm-1 col-md-2"><\/div>\r\n            <div class="col-sm-1">\r\n                <div class="truck-capacity" ng-class="{\'order-modify-disabled\':!orderModify.hasCapacityPercent}">\r\n                    <div class="truck-capacity-percentage" ng-if="!orderModify.hasCapacityPercent">?<\/div>\r\n                    <div class="truck-capacity-percentage" ng-if="orderModify.hasCapacityPercent">{{orderModify.capacityPercent}}%<\/div>\r\n                    <div class="truck-capacity-background">\r\n                        <div class="truck-capacity-background-bar" ng-class="{\'green\':orderModify.capacityPercent<=75, \'orange\':orderModify.capacityPercent>75 && orderModify.capacityPercent<90, \'red\':orderModify.capacityPercent>=90}" style="height: {{orderModify.capacityPercent > 100 ? 100 : orderModify.capacityPercent}}%"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="col-sm-9 col-md-6">\r\n                <table class="full-width text-center">\r\n                    <tr>\r\n                        <th class="text-center">Capacity<\/th>\r\n                        <th class="text-center">Total items<\/th>\r\n                        <th class="text-center" ng-if="orderModify.order.grossWeights">Item weight<\/th>\r\n                        <th class="text-center" ng-if="orderModify.order.areas">Item area<\/th>\r\n                        <th class="text-center" ng-if="orderModify.order.volumes">Item volume<\/th>\r\n                    <\/tr>\r\n                    <tr>\r\n                        <td ng-if="!orderModify.pickupCapacityInputVisible">\r\n                            <div ng-if="orderModify.order.deliveryIndicator===\'P\'" class="form-inline">\r\n                                <a ng-if="orderModify.order.pickupCapacity" href="javascript:;" ng-click="orderModify.showPickupCapacityInput()">{{orderModify.order.pickupCapacity}} kg<\/a>\r\n                                <a ng-if="orderModify.order.pickupCapacity==undefined" href="javascript:;" ng-click="orderModify.showPickupCapacityInput()">Enter Capacity<\/a>\r\n                                <a ng-if="orderModify.order.pickupCapacity" href="javascript:;" ng-click="orderModify.clearPickupCapacity()"><i class="fa fa-close"><\/i><\/a>\r\n                            <\/div>\r\n                            <div ng-if="orderModify.order.deliveryIndicator===\'D\'">\r\n                                <span ng-if="orderModify.order.hasDeliveryScheduleLines">{{orderModify.order.vehicleCapacity}}kg<\/span>\r\n                                <span ng-if="!orderModify.order.hasDeliveryScheduleLines">Vehicle allocation TBC<\/span>\r\n\r\n                            <\/div>\r\n                        <\/td>\r\n                        <td>{{orderModify.order.items.length}}<\/td>\r\n                        <td ng-if="orderModify.order.grossWeights"><span div ng-repeat="grossWeight in orderModify.order.grossWeights">{{grossWeight.value}} {{grossWeight.description | lowercase}} <\/span><\/td>\r\n                        <td ng-if="orderModify.order.areas"><span div ng-repeat="area in orderModify.order.areas">{{area.value}} {{area.description | lowercase}} <\/span><\/td>\r\n                        <td ng-if="orderModify.order.volumes"><span div ng-repeat="volume in orderModify.order.volumes">{{volume.value}} {{volume.description | lowercase}} <\/span><\/td>\r\n                    <\/tr>\r\n                <\/table>\r\n            <\/div>\r\n        <\/div>\r\n        <hr class="m-b-0" />\r\n        <div class="row p-1">\r\n            <div class="col-sm-12">\r\n                <button type="button" ng-if="orderModify.orderCanBeModified" class="btn btn-outline pull-left" ng-disabled="orderModify.orderIsPristine() || orderModify.isSubmitting" ng-click="orderModify.undoChanges()"><i class="fa fa-fw fa-undo"><\/i> Undo all changes<\/button>\r\n\r\n\r\n                <div class="p-l-1 pull-right">\r\n                    <button type="button" ng-if="orderModify.orderCanBeModified" ng-click="orderModify.submitOrderChange()" ng-disabled="orderModify.orderIsPristine() || orderModify.isSimulating || orderModify.isSubmitting || !orderModify.orderIsValid" class="btn btn-primary text-nowrap">\r\n\r\n                        {{oc.isValidating ? \'Validating ...\' : (oc.placingOrder ? \'Updating order ...\' : \'Update order\')}}\r\n\r\n                    <\/button>\r\n                <\/div>\r\n                <div class="p-l-1 pull-right" ng-class="{\'text-muted\':orderModify.isSimulating}">\r\n\r\n                    <div class="row">\r\n                        <div class="col-sm-12 text-nowrap">\r\n                            <span class="pull-right">GST {{orderModify.order.taxValue | currency }}<\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-sm-12 text-nowrap">\r\n                            <span class="pull-right"><strong>Total {{orderModify.order.grossValue | currency }}<\/strong><\/span>\r\n\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n                <div class="p-l-1 pull-right" ng-class="{\'text-muted\':orderModify.isSimulating}">\r\n\r\n                    <div class="row">\r\n                        <div class="col-sm-12 text-nowrap">\r\n                            <span class="pull-right">Freight {{orderModify.order.freightValue | currency }}<\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-sm-12 text-nowrap">\r\n                            <span class="pull-right">Subtotal {{orderModify.order.subTotal | currency }}<\/span>\r\n\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n                <div class="p-l-1 pull-right" ng-if="orderModify.isSimulating || orderModify.isSubmitting">\r\n                    <span class="loading order-modify-submit-loading" ng-if="orderModify.isSimulating || orderModify.isSubmitting"><i><\/i><\/span>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\r\n<\/div>');n.put("ordersv2.orderTotals.html",'<div class="order-totals">\r\n    <div class="row">\r\n\r\n        <!-- Loading -->\r\n        <div class="loading loading-fill" ng-show="!totals">\r\n            <i><\/i>\r\n            Calculating totals&hellip;\r\n        <\/div>\r\n\r\n        <!-- Cumulative quantities stats -->\r\n        <div id="quantities" class="col-xs-12 col-md-7" ng-show="totals.uomQuants">\r\n            <h3 class="stats-bar-title">Approximate quantities in order<\/h3>\r\n            <ul class="stats-bar">\r\n                <li class="stats-bar-item" ng-if="totals.uomQuants.weight">\r\n                    <h4 class="stats-bar-label">Weight<\/h4>\r\n                    <strong class="number">{{totals.uomQuants.weight | number:1}}<\/strong>\r\n                    <small class="unit">kg<\/small>\r\n                <\/li>\r\n                <li class="stats-bar-item" ng-if="totals.uomQuants.volume">\r\n                    <h4 class="stats-bar-label">Volume<\/h4>\r\n                    <strong class="number">{{totals.uomQuants.volume | number:1}}<\/strong>\r\n                    <small class="unit">m<sup>3<\/sup><\/small>\r\n                <\/li>\r\n                <li class="stats-bar-item" ng-if="totals.uomQuants.area">\r\n                    <h4 class="stats-bar-label">Area<\/h4>\r\n                    <strong class="number">{{totals.uomQuants.area | number:1}}<\/strong>\r\n                    <small class="unit">m<sup>2<\/sup><\/small>\r\n                <\/li>\r\n                <li class="stats-bar-item" ng-if="totals.uomQuants.pallets">\r\n                    <h4 class="stats-bar-label">Pallets<\/h4>\r\n                    <strong class="number">{{totals.uomQuants.pallets | number:1}}<\/strong>\r\n                    <small class="unit">&nbsp;<\/small>\r\n                <\/li>\r\n            <\/ul>\r\n\r\n            <div class="row">\r\n                <div class="form-group col-xs-12 col-md-12">\r\n                    <ng-form>\r\n                        <label for="order-notes-pickup">Shipping notes<\/label>\r\n                        <span id="order-notes-delivery-help" class="help-block control-label-help-block">Add special instructions for the delivery. Eg: site and time details.<\/span>\r\n                        <textarea id="order-notes-pickup" name="Note" class="form-control" rows="5" ng-model="ot.ods.details.Note" aria-labelledby="order-notes-delivery-label order-notes-delivery-help"><\/textarea>\r\n                    <\/ng-form>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Order totals -->\r\n        <div class="col-xs-12 col-md-5 pull-right">\r\n\r\n            <table class="table table-totals" ng-show="userHasProductPricingPermission && !placeWithoutTotals && totals">\r\n                <tbody>\r\n                <tr ng-if="totals.levies > 0">\r\n                    <th>Levies<\/th>\r\n                    <td>{{totals.levies | currency}}<\/td>\r\n                <\/tr>\r\n                <tr ng-if="totals.surcharges > 0">\r\n                    <th>Surcharges<\/th>\r\n                    <td>{{totals.surcharges | currency}}<\/td>\r\n                <\/tr>\r\n                <tr>\r\n                    <th>Freight<\/th>\r\n                    <td ng-if="orderType && totals.isFreightCalculated" data-tooltip-placement="top" data-tooltip="{{totals.freightToolTip}}">{{totals.freight | currency}} <i ng-if="totals.freightToolTip" class="fa fa-info-circle text-info"><\/i><\/td>\r\n                    <td ng-if="orderType && !totals.isFreightCalculated" class="text-right" data-tooltip-placement="top" data-tooltip="Freight Price to be confirmed by customer service after Order Placement">TBA <i class="fa fa-info-circle text-info"><\/i><\/td>\r\n                    <td ng-if="!orderType" colspan="2"><i class="fa fa-info-circle"><\/i> <a href="javascript:;" onclick="scrollToY(0)" class="text-muted">Complete order details for freight costs<\/a><\/td>\r\n                <\/tr>\r\n                <tr>\r\n                    <th>Subtotal<\/th>\r\n                    <td>{{totals.subtotal | currency}}<\/td>\r\n                <\/tr>\r\n                <tr>\r\n                    <th><small>10% GST<\/small><\/th>\r\n                    <td><small>{{totals.includedGST | currency}}<\/small><\/td>\r\n                <\/tr>\r\n                <tr>\r\n                    <th>Total<\/th>\r\n                    <td>{{totals.total | currency}}<\/td>\r\n                <\/tr>\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>');n.put("ordersv2.releaseLineItems.html",'<!-- Line item plant -->\r\n<div ng-repeat="plant in oli.ods.items" ng-show="plant.Items.length">\r\n\r\n    <!-- Plant name header: Show if multiple plants returned for a pickup -->\r\n    <h3 ng-if="oli.om.isType(\'pickup\') && plant.PlantId" class="order-line-item-plant-row"><i class="fa fa-shopping-cart fa-lg order-line-item-plant-row-icon"><\/i><span>Pickup from <strong>{{plant.PlantName}}<\/strong>, {{plant.PlantAddress}}<\/span><\/h3>\r\n    \r\n    <!-- Line items in plant -->\r\n    <table class="table table-sortable table-line-items" id="line-items-plant-{{plant.PlantId}}" ng-model="plant.Items" as-sortable="sortableOptions" as-sortable-id="{{plant.PlantId}}" is-disabled="{{true}}" ng-class="\'table-sortable-disabled\'">\r\n        <thead>\r\n        <tr>\r\n            <th>Description<\/th>\r\n            <th class="text-right">Price<\/th>\r\n            <th class="text-right">Qty<\/th>\r\n            <th class="text-right">Remaining Qty<\/th>\r\n            <th class="text-right">Subtotal<\/th>\r\n        <\/tr>\r\n        <\/thead>\r\n        <tbody id="table-line-items-sortable">\r\n        <tr ng-repeat="item in plant.Items" class="order-line-item animate-repeat drag-draggable" ng-class="{\'order-line-item-release\': true, \'order-line-item-packing\': item.Code == \'T\', changed: item.changed, adding: item.tempId, removing: item.removing }" as-sortable-item>\r\n            <!-- Description --> \r\n            <td ng-if="oli.isNotText(item)" class="line-item-title tf-block" as-sortable-item-handle><i class="fa fa-lg fa-sort drag-handle"><\/i> <strong no-drag>{{item.Description | titleCase: true}}<\/strong><br /><small no-drag>{{item.Code | productCode}}<\/small><\/td>\r\n            \r\n            <!-- Unit price -->\r\n            <td ng-if="!oli.showPricing && oli.isNotTextOrCustom(item)" class="text-right line-item-unit-price" as-sortable-item-handle>&nbsp;<\/td>\r\n            <td ng-if="oli.showPricing && oli.isNotTextOrCustom(item) && item.UnitPriceExcludingGST > 0" class="text-right line-item-unit-price" as-sortable-item-handle>\r\n                {{oli.calcUnitPrice(item) | currency}} per {{item.QuantityUOM}}<br />\r\n                <small ng-show="item.PricingQuantity > 1 || (item.Conversion != 1 && item.UnitPriceExcludingGST)">{{item.UnitPriceExcludingGST | currency}} per {{item.PricingQuantity > 1 ? item.PricingQuantity + \' \' : \'\' }}{{item.PricingUOM}}<\/small>\r\n            <\/td>\r\n            \r\n            <!-- Call for unit price -->\r\n            <td ng-if="oli.showPricing && oli.isCallForPrice(item,false)" class="text-right line-item-unit-price" as-sortable-item-handle><span class="label label-default">Call for price<\/span><\/td>\r\n            \r\n            <!-- Quantity -->\r\n            <td ng-if="item.Code != \'T\'" class="line-item-qty text-right" as-sortable-item-handle>\r\n                <label for="qty-{{item.Id}}" class="table-label sr-only">Quantity<\/label>\r\n\r\n                <!-- Regular quantities -->\r\n                <input ng-if="item.DeliveryBlockSize == null || item.DeliveryBlockSize == 1"\r\n                       type="text"\r\n                       ng-model="item.Quantity"\r\n                       ng-change="oli.updateItem(item)"\r\n                       ng-disabled="item.tempId || item.removing || item.isValidating"\r\n                       no-drag\r\n                       qty-spinner="qty-{{item.Id}}"\r\n                       not-dirty\r\n                       min="1"\r\n                       value="{{item.Quantity}}"\r\n                       ng-attr-max="{{ item.RemainingQty || undefined }}"\r\n                       data-ng-model-options="{ debounce: 750 }">\r\n\r\n                <!-- Batched quantities -->\r\n                <brick-input ng-if="item.DeliveryBlockSize > 1"\r\n                             no-drag\r\n                             ng-disabled="item.tempId || item.removing || item.isValidating"\r\n                             data-available-amount="item.RemainingQty"\r\n                             data-input-id="qty-{{item.Id}}"\r\n                             data-batch-size="item.DeliveryBlockSize"\r\n                             data-selected-value="item.Quantity"\r\n                             data-callback-function="oli.updateItem(item)"\r\n                             data-callback-debounce="750"\r\n                             data-min-value="0"><\/brick-input>\r\n                \r\n                <!-- ATP status -->\r\n                <span ng-if="oli.om.isAtpEnabled" class="line-item-atp">\r\n                    <span class="fa-stack small" data-tooltip-placement="top" ng-if="item.atpCheckResult!==\'I\'" data-tooltip="{{item.isValidating ? \'\' : item.atpTooltip}}">\r\n                        <span class="loading order-rewards-loading" ng-if="item.isValidating || item.isValidating==undefined"><i><\/i><\/span>\r\n                        <i class="fa fa-lg fa-check text-success fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'Y\'" data-tooltip-placement="top" data-tooltip="Stock is available"><\/i>\r\n                        <i class="fa fa-lg fa-check text-success fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'L\'" data-tooltip-placement="top" data-tooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your order"><\/i>\r\n                        <i class="fa fa-fw fa-warning fa-stack-2x" ng-if="!item.isValidating && item.atpCheckResult===\'N\'"><\/i>\r\n                        <i class="fa fa-fw fa-warning fa-stack-1x" ng-if="!item.isValidating && item.atpCheckResult===\'L\'" style="margin-left: 8px; margin-top: 8px;"><\/i>\r\n                    <\/span>\r\n                <\/span>\r\n            <\/td>\r\n            \r\n            <!-- Remaining quantity -->\r\n            <td ng-if="item.Code != \'T\'" class="line-item-qty text-right">  \r\n                <strong class="table-label">Remaining Qty:<\/strong>\r\n                {{ item.DisplayRemainingQty !== undefined ? item.DisplayRemainingQty : item.RemainingQty }}\r\n            <\/td>\r\n            \r\n            <!-- Text line -->\r\n            <td ng-if="item.Code == \'T\'" colspan="5" class="line-item-title tf-block" as-sortable-item-handle><i class="fa fa-lg fa-sort drag-handle"><\/i> <strong no-drag>{{item.Description}}<\/strong><\/td>\r\n            \r\n            <!-- Subtotal -->\r\n            <td class="text-right line-item-subtotal" ng-if="!oli.showPricing" as-sortable-item-handle>\r\n                <strong class="table-label">Subtotal<\/strong>\r\n            <\/td>\r\n            <td class="text-right line-item-subtotal" ng-if="oli.showPricing && item.UnitPriceExcludingGST > 0" as-sortable-item-handle>\r\n                <strong class="table-label">Subtotal<\/strong>\r\n                {{ oli.calcPrice(item) | currency }}\r\n            <\/td>\r\n            \r\n            <!-- Call for price -->\r\n            <td class="text-right line-item-subtotal" ng-if="oli.showPricing && oli.isCallForPrice(item,true)" as-sortable-item-handle><span class="label label-default">Call for price<\/span><\/td>\r\n            \r\n        <\/tr>\r\n        <\/tbody>\r\n    <\/table>\r\n\r\n<\/div>');n.put("releaseHeader.html",'<!-- Order details form -->\r\n<div id="order-details-form" class="panel">\r\n    \r\n<!-- Common details -->\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12">\r\n            <h2>Release details<\/h2>\r\n            <p class="subheading">Review the {{ oh.isType(\'delivery\') ? \'delivery\' : \'pickup\' }} details, update your quantities, and click \'Request Release\'.<\/p>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-6">\r\n            <div class="form-group">\r\n                <label for="field-Reference">{{accountDetails.PoRequired ? \'PO number\' : \'Reference\'}}*<\/label>\r\n                <input class="form-control" type="text" id="field-Reference" name="Reference" placeholder="Enter {{accountDetails.PoRequired ? \'the PO number\' : \'a name\'}} for this release (35 character limit)" ng-model="oh.ods.details.Reference" validator="required" maxlength="35">\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-md-6">\r\n            <div class="form-group">\r\n                <label>Delivery or pickup?<\/label>\r\n                <div class="btn-group btn-group-justified" role="group" aria-label="Release type">\r\n                    <a href="javascript:;" class="btn btn-default" ng-disabled="oh.isType(\'pickup\')" ng-class="{active: oh.isType(\'delivery\')}"><i class="fa fa-lg fa-fw fa-truck"><\/i> Delivery<\/a>\r\n                    <a href="javascript:;" class="btn btn-default" ng-disabled="oh.isType(\'delivery\')" ng-class="{active: oh.isType(\'pickup\')}"><i class="fa fa-lg fa-fw fa-shopping-cart"><\/i> Pickup<\/a>\r\n                <\/div>\r\n                <span class="help-block">\r\n                    <i class="fa fa-lg fa-info-circle"><\/i>\r\n                    Please contact PGH customer service on 13 15 79 to change this release type.\r\n                <\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Delivery options -->\r\n    <div ng-if="oh.isType(\'delivery\')">\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12 col-md-6" id="delivery-options">\r\n                <div class="form-group">\r\n                    <label for="field-shipTo">{{ oh.config.isProjectCalledBuilder ? \'Builder\' : \'Account or project address\' }}<\/label>\r\n                    <select class="form-control" id="field-shipTo" name="shipTo" ng-if="oh.ods.shipToAccounts" ng-model="oh.ods.shipTo" ng-options="shipTo as shipTo.displayName for shipTo in oh.ods.shipToAccounts" ng-disabled="true">\r\n                        <option value="" ng-show="oh.config.showEmptyProjectOption">{{ oh.config.isProjectCalledBuilder || !oh.config.canSetProject ? \'Not applicable\' : \'No account or project address\' }}<\/option>\r\n                    <\/select>\r\n                    <div ng-if="!oh.ods.shipToAccounts" class="form-control form-control-static">\r\n                        Not applicable\r\n                    <\/div>\r\n                    <span class="help-block">\r\n                        <i class="fa fa-lg fa-info-circle"><\/i>\r\n                        Applies the <strong>{{ oh.config.isProjectCalledBuilder ? \'builder\' : \'account address\' }}<\/strong> {{ oh.config.isProjectCalledBuilder ? \'\' : \'and\' }} associated <strong>pricing<\/strong> to this order\r\n                    <\/span>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <hr>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12 col-md-6">\r\n\r\n                <div lookup-address address-change="oh.getPlantDetails()"\r\n                     form="form"\r\n                     address="oh.ods.details"\r\n                     country="oh.ods.details.Country"\r\n                     address-required="oh.config.addressRequired"\r\n                     prompt="Delivery address *"><\/div>\r\n                \r\n            <\/div>\r\n        <\/div>\r\n\r\n        <hr>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n                <div class="loading" ng-show="oh.ods.timeSlots === null">\r\n                    <i><\/i>\r\n                    Getting delivery options&hellip;\r\n                <\/div>\r\n                \r\n                <div ng-hide="oh.ods.timeSlots === null" class="row row-form fx-fade-in">\r\n                    \r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-3 form-datepicker form-datepicker-fluid" ng-if="oh.ods.timeSlots != null">\r\n                        <label for="field-deliveryDate">Delivery date*<\/label>\r\n                        <!-- ng-if="oh.ods.minDate != null" is needed because baremetrics doesn\'t allow to reset earliest date, and there is a timing issue here. Adding ng-if ensures we got the response from the backend with the earliest date. -->\r\n                        <calendar ng-if="oh.ods.minDate != null" class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n                        <span class="help-block">Must be at least 1 day in advance<\/span>\r\n                    <\/div>\r\n\r\n                    <div class="form-group col-xs-12 col-sm-6" ng-class="{\'col-md-6\': !oh.ods.details.SmsEnabled, \'col-md-3\': oh.ods.details.SmsEnabled}" ng-if="oh.ods.timeSlots != null">\r\n                        <div class="form-group">\r\n                            <label for="field-deliverytime">Requested delivery time<\/label>\r\n                            <select class="form-control" id="field-deliverytime" name="DesiredFulfillmentTimeSlot" ng-model="oh.ods.details.DesiredFulfillmentTimeSlot" ng-options="t for t in oh.ods.timeSlots" ng-disabled="!oh.ods.timeSlots || oh.ods.timeSlots.length <= 1"><\/select>\r\n                            <div ng-show="oh.ods.timeSlots === null || oh.ods.timeSlots.length === 0" class="form-control form-control-static">\r\n                                Please select delivery date\r\n                            <\/div>\r\n                        <\/div>\r\n                        <span id="delivery-time-confirmation" class="form-group help-block">Delivery times are subject to confirmation by customer service after order placement<\/span>\r\n                    <\/div>\r\n                    \r\n                    <div class="col-xs-12">\r\n                        <hr />\r\n                    <\/div>\r\n\r\n                    <div class="col-xs-12 form-group">\r\n                        <label>Delivery Restrictions*<\/label>\r\n                        <div class="form-group" ng-repeat="restriction in oh.ods.siteRestrictions">\r\n                            <div class="row">\r\n                                <div class="col-xs-7 col-md-4">\r\n                                    <span>{{restriction.question}}<\/span>\r\n                                <\/div>\r\n                                <div class="col-xs-5 col-md-2 form-group">\r\n                                    <label class="radio-inline">\r\n                                        <input type="radio" name="{{oh.siteRestrictionTypes[$index]}}" ng-model="restriction.value" ng-click="oh.updateSiteRestrictions()" required ng-value="true"/>Yes\r\n                                    <\/label>\r\n                                    <label class="radio-inline">\r\n                                        <input type="radio" name="{{oh.siteRestrictionTypes[$index]}}" ng-model="restriction.value" ng-click="oh.updateSiteRestrictions()" required ng-value="false"/>No\r\n                                    <\/label>\r\n                                <\/div>\r\n                                <div ng-messages="form[oh.siteRestrictionTypes[$index]].$error" \r\n                                     ng-show="form.submitAttempted" \r\n                                     class="col-xs-12 col-md-4">\r\n                                    <p ng-message="required" class="form-control-error">\r\n                                        <span><i class="fa fa-exclamation-triangle"><\/i> An answer to this question is required<\/span>\r\n                                    <\/p>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <input type="text" class="form-control" ng-show="oh.ods.siteRestrictions.ForkliftRequirement.value" ng-model="oh.ods.details.SiteForkliftRequirementNotes" placeholder="Please specify"/>\r\n                    <\/div>\r\n\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-3" ng-if="oh.ods.timeSlots !=null && oh.ods.details.SmsEnabled">\r\n                        <label>Send delivery notifications to<\/label>\r\n                        <span ng-if="oh.ods.details.SmsEnabled">\r\n                            <input type="hidden" ng-model="oh.ods.details.SmsNumber" id="field-smsnumber" name="SmsNumber" validator="mobile">\r\n                        <\/span>\r\n                        <div ng-class="{\'input-group\': (userMobile || \'\') != \'\' || ((oh.ods.details.ContactPhone || \'\') != \'\' && oh.isMobile(oh.ods.details.ContactPhone))}">\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.SmsNumber" ng-change="oh.updateSms()" placeholder="Mobile number">\r\n                            <div class="input-group-btn" ng-if="(userMobile || \'\') != \'\' || (oh.ods.details.ContactPhone || \'\') != \'\'">\r\n                                <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r\n                                    <span class="caret"><\/span>\r\n                                <\/button>\r\n                                <ul class="dropdown-menu dropdown-menu-right">\r\n                                    <li class="dropdown-item" ng-if="(userMobile || \'\') != \'\'">\r\n                                        <a href="javascript:;" ng-click="oh.updateSmsNumber(userMobile)"><i class="fa fa-fw fa-mobile"><\/i> Mobile number: {{userMobile}}<\/a>\r\n                                    <\/li>\r\n                                    <li class="dropdown-item" ng-if="(oh.ods.details.ContactPhone || \'\') != \'\' && oh.isMobile(oh.ods.details.ContactPhone)">\r\n                                        <a href="javascript:;" ng-click="oh.updateSmsNumber(oh.ods.details.ContactPhone)"><i class="fa fa-fw fa-mobile"><\/i> Contact number: {{oh.ods.details.ContactPhone}}<\/a>\r\n                                    <\/li>\r\n                                    <li role="separator" class="divider" ng-if="(oh.ods.details.SmsNumber || \'\') != \'\'"><\/li>\r\n                                    <li class="dropdown-item" ng-if="(oh.ods.details.SmsNumber || \'\') != \'\'">\r\n                                        <a href="javascript:;" ng-click="oh.updateSmsNumber(\'\')"><i class="fa fa-fw fa-eraser"><\/i> Clear<\/a>\r\n                                    <\/li>\r\n                                <\/ul>\r\n                            <\/div>\r\n                        <\/div>                        \r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <hr>\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n                <div class="row">\r\n                    <div class="col-xs-12 col-md-6">\r\n                        <div class="form-group">\r\n                            <label for="field-BusinessName">Business name*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BusinessName" id="field-BusinessName" name="BusinessName" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="row">\r\n                    <div class="col-xs-12 col-sm-6 col-md-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactName">Contact name*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.ContactName" id="field-ContactName" name="ContactName" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-sm-6 col-md-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactPhone">Contact number*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.ContactPhone" id="field-ContactPhone" name="ContactPhone" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-sm-6 col-md-3" ng-show="!oh.config.isProjectCalledBuilder && oh.config.canHaveBuilderName">\r\n                        <div class="form-group">\r\n                            <label for="field-BuilderName">Builder name<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BuilderName" id="field-BuilderName" name="BuilderName" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- Pickup options -->\r\n    <div ng-if="oh.isType(\'pickup\')">\r\n\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n\r\n                <div class="row">\r\n                    <div class="form-group col-xs-12 col-md-6">\r\n                        <label for="field-shipTo-p">{{ oh.config.isProjectCalledBuilder ? \'Builder\' : \'Account or project address\' }}<\/label>\r\n                        <select class="form-control" id="field-shipTo-p" name="shipTo" ng-if="oh.ods.shipToAccounts" ng-model="oh.ods.shipTo" ng-change="oh.promptShipTo({{oh.ods.shipTo.AccountId}})" ng-options="shipTo as shipTo.displayName for shipTo in oh.ods.shipToAccounts" ng-disabled="true">\r\n                            <option value="" ng-show="oh.config.showEmptyProjectOption">{{ oh.config.isProjectCalledBuilder || !oh.config.canSetProject ? \'Not applicable\' : \'No account or project address\' }}<\/option>\r\n                        <\/select>\r\n                        <div ng-if="!oh.ods.shipToAccounts" class="form-control form-control-static">\r\n                            Not applicable\r\n                        <\/div>\r\n                        <span class="help-block">\r\n                            <i class="fa fa-lg fa-info-circle"><\/i>\r\n                            Applies the <strong>{{ oh.config.isProjectCalledBuilder ? \'builder\' : \'account address\' }}<\/strong> {{ oh.config.isProjectCalledBuilder ? \'\' : \'and\' }} associated <strong>pricing<\/strong> to this order\r\n                        <\/span>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <hr>\r\n                               \r\n                <div class="row row-form">\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-2">\r\n                        <label for="field-pickupstate-p">Pickup state<\/label>\r\n                        <select class="form-control" id="field-pickupstate-p" name="DesiredFulfillmentRegion" ng-model="oh.ods.details.DesiredFulfillmentRegion" ng-change="oh.getPickupPlants()" ng-disabled="true" validator="required">\r\n                            <option>ACT<\/option>\r\n                            <option>NSW<\/option>\r\n                            <option>NT<\/option>\r\n                            <option>QLD<\/option>\r\n                            <option>SA<\/option>\r\n                            <option>TAS<\/option>\r\n                            <option>VIC<\/option>\r\n                            <option>WA<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-4">\r\n                        <label for="field-pickuplocation-p">Pickup location<\/label>\r\n                        <select class="form-control" id="field-pickuplocation-p" name="DesiredFulfillmentLocationCode" ng-change="oh.refreshTimeslots()" ng-model="oh.ods.details.DesiredFulfillmentLocationCode" ng-options="loc.PlantId as loc.PlantName for loc in oh.ods.pickupLocations" ng-disabled="true" ng-show="oh.ods.pickupLocations !== null" validator="required">\r\n                            <option ng-if="oh.ods.pickupLocations === false" value="">Pickup unavailable in {{oh.ods.details.DesiredFulfillmentRegion}}<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-3 form-datepicker form-datepicker-fluid">\r\n                        <label for="field-pickupDate">Pickup date*<\/label>\r\n                        <calendar ng-if="oh.ods.minDate != null" class="form-group form-datepicker form-datepicker-range form-datepicker-fullwidth" target="DesiredFulfillmentDate" filters="oh.ods.details" apply-to-location="false" apply-filters="oh.applyFulFillmentDate()" single="true" earliest-date="oh.ods.minDate" latest-date="oh.ods.maxDate" single-empty-start-override="new Date(moment().add(1, \'days\'))"><\/calendar>\r\n                    <\/div>\r\n\r\n                    <div class="form-group col-xs-12 col-sm-6 col-md-3">\r\n                        <label for="field-pickuptime-p" class="form-control-block">Requested pickup time*<\/label>\r\n                        <select id="field-pickuptime-p" name="DesiredFulfillmentTimeSlot" class="form-control" ng-disabled="!oh.ods.timeSlots || oh.ods.timeSlots.length <= 1" ng-change="oh.checkTimeslotCutoff()" ng-show="!oh.ods.isRefreshing" ng-model="oh.ods.details.DesiredFulfillmentTimeSlot" ng-options="t for t in oh.ods.timeSlots"><\/select>\r\n                        <div ng-show="oh.ods.timeSlots === null || oh.ods.timeSlots.length === 0" class="form-control form-control-static">\r\n                            Please select pickup date\r\n                        <\/div>\r\n                        <span class="warning" ng-if="oh.ods.selectedTimeslotIsAfterCutoff && !oh.ods.isRefreshing"><i class="fa fa-warning"><\/i> Requested pickup time requires confirmation by CSR customer service.<\/span>\r\n                    <\/div>\r\n                    \r\n                    <div class="loading loading-fill fx-fade" ng-show="oh.ods.isRefreshing">\r\n                        <i><\/i> Getting pickup options&hellip;\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <hr>\r\n        \r\n        <!-- BEGIN business name and contact details -->\r\n        <div class="row">\r\n            <div class="col-xs-12">\r\n                <div class="row">\r\n                    <div class="col-xs-12 col-md-6">\r\n                        <div class="form-group">\r\n                            <label for="field-BusinessName-p">Business name*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BusinessName" id="field-BusinessName-p" name="BusinessName" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class="row">\r\n                    <div class="col-xs-12 col-sm-6 col-md-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactName-p">Contact name*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.ContactName" id="field-ContactName-p" name="ContactName" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-sm-6 col-md-3">\r\n                        <div class="form-group">\r\n                            <label for="field-ContactPhone-p">Contact number*<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.ContactPhone" id="field-ContactPhone-p" name="ContactPhone" validator="required" />\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="col-xs-12 col-sm-6 col-md-3" ng-show="!oh.config.isProjectCalledBuilder && oh.config.canHaveBuilderName">\r\n                        <div class="form-group">\r\n                            <label for="field-BuilderName-p">Builder name<\/label>\r\n                            <input type="text" class="form-control" ng-model="oh.ods.details.BuilderName" id="field-BuilderName-p" name="BuilderName" />\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <!-- END business name and contact details -->        \r\n\r\n        <div class="row">\r\n\r\n            <div class="col-xs-12 col-sm-6 clr">\r\n\r\n                <div lookup-address\r\n                     address="oh.ods.details"\r\n                     form="form"\r\n                     address-required="oh.config.jobsiteAddressRequired"\r\n                     country="oh.ods.details.Country"\r\n                     prompt="Job site address*"><\/><\/div>\r\n                \r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("PaymentMethods-DirectDebit.html",'<div class="container payments-container" data-auth-key="All/Payment" data-auth="u">\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <div class="row">\r\n                <div class="col-xs-12 col-md-5">\r\n                    <h1 class="page-title">Payment Methods<\/h1>\r\n                <\/div>\r\n            <\/div>\r\n            <div data-ng-controller="PaymentMethodsDirectDebitController">\r\n\r\n                <div class="loading loading-page">\r\n                    <i><\/i>\r\n                    Transferring you to our secure payment gateway\r\n                <\/div>\r\n\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("PaymentMethods-Edit.html",'<div class="container payments-container" data-auth-key="All/Payment" data-auth="u">\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <div class="row">\r\n                <div class="col-xs-12 col-md-5">\r\n                    <h1 class="page-title">Payment Methods<\/h1>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div ng-controller="PaymentMethodsEditController" class="payments-method">\r\n                <div class="connect-panel clear">\r\n                    <div class="block-margin">\r\n                        <h2 class="block-margin-sm">Modify Payment Methods<\/h2>\r\n                        <p class="pull-left">Save on fees with a bank account, or use a credit card to earn points for your business.<\/p>\r\n                    <\/div>\r\n\r\n\r\n                    <!--    STANDARD PAYMENT METHODS    -->\r\n                    <div class="connect-panel clear">\r\n                        <div class="connect-panel-header">\r\n                            <h2 class="title">Payment Methods<\/h2>\r\n                            <div class="connect-panel-actions" ng-show="paymentsMethodReady">\r\n                                <a ng-click="makePayment()" class="btn btn-default" type="button" auth-key="All/Payment" data-auth="u">\r\n                                    <i class="fa fa-fw fa-calendar-check-o"><\/i>\r\n                                    Make Payment\r\n                                <\/a>\r\n                                <a ui-sref="app.paymentsMethodsNewCard"><i class="fa fa-plus"><\/i>New payment method<\/a>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <page-loading-message ng-hide="paymentsMethodReady" message="Loading your payment method options"><\/page-loading-message>\r\n\r\n                        <div class="content-empty" ng-show="paymentsMethodReady && ratesError">\r\n                            <h3 class="content-empty-title">Error retrieving payment method fees<\/h3>\r\n                            <p class="content-empty-instruction"><\/p>\r\n                        <\/div>\r\n\r\n                        <div class="ng-hide fx-fade" ng-show="paymentsMethodReady">\r\n                            <div class="list-group">\r\n                                <div ng-repeat="tokenType in regularTokenTypes()" class="list-group-item">\r\n                                    <h3 class="list-section-header">{{tokenType.heading}} <span class="list-section-header-sub">{{tokenType.headingFees}}<\/span><\/h3>\r\n                                    <ul class="payment-token-list">\r\n                                        <li ng-repeat="token in tokenType.tokens" ng-class="{\'expired\':token.IsExpired, \'expires-soon\':token.ExpiresSoon}">\r\n                                            <label ng-disabled="token.IsExpired">\r\n                                                <div class="payment-token">\r\n                                                    <img class="payment-icon-sm" ng-src="{{getIconPath(token.PaymentMethodName)}}" alt="{{token.PaymentMethodName}}" />\r\n                                                    <div class="token-info">\r\n                                                        <div>\r\n                                                            <span class="account-name">{{token.AccountName}}<\/span>\r\n                                                            <span class="account-number">{{token.TokenMainMaskedAccountNumber}}<\/span>\r\n                                                        <\/div>\r\n                                                        <div class="secondary-line">\r\n                                                            {{token.TokenSubMaskedAccountNumber}}\r\n                                                            <span ng-show="\'{{token.ExpiryDate}}\'!=\'\'">\r\n                                                                {{token.IsExpired ? \'Expired\' : \'Expires\'}} {{token.MaskedExpiryDate}}\r\n                                                                <span ng-show="{{token.ExpiresSoon}}">\r\n                                                                    (Expires soon)\r\n                                                                <\/span>\r\n                                                            <\/span>\r\n\r\n                                                            <span ng-if="token.TokenSubMaskedAccountNumber || token.ExpiryDate" class="separator">|<\/span>\r\n                                                            <a href="#" ng-click="deletePaymentToken(token.TokenNumber)">remove<\/a>\r\n                                                        <\/div>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/label>\r\n                                        <\/li>\r\n                                    <\/ul>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class="payments-spacer"><\/div>\r\n                    <!--    LOW FEE PAYMENT METHODS    -->\r\n                    <div class="connect-panel clear">\r\n                        <div class="connect-panel-header">\r\n                            <h2 class="title">Low Fee Payment Methods (Min. of 6 transactions over 1 year)<\/h2>\r\n                            <div class="connect-panel-actions" ng-show="paymentsMethodReady">\r\n                                <a ng-click="makePayment()" class="btn btn-default" type="button" auth-key="All/Payment" data-auth="u">\r\n                                    <i class="fa fa-fw fa-calendar-check-o"><\/i>\r\n                                    Make Payment\r\n                                <\/a>\r\n                                <a ui-sref="app.paymentMethodsDirectDebit"><i class="fa fa-plus"><\/i>New low fee card<\/a>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <page-loading-message ng-hide="paymentsMethodReady" message="Loading your payment method options"><\/page-loading-message>\r\n\r\n                        <div class="content-empty" ng-show="paymentsMethodReady && ratesError">\r\n                            <h3 class="content-empty-title">Error retrieving payment method fees<\/h3>\r\n                            <p class="content-empty-instruction"><\/p>\r\n                        <\/div>\r\n\r\n                        <div class="ng-hide fx-fade" ng-show="paymentsMethodReady && !ratesError">\r\n\r\n                            <div class="list-group">\r\n                                <div ng-repeat="tokenType in lowFeeTokenTypes()" class="list-group-item">\r\n                                    <h3 class="list-section-header">{{tokenType.heading}} <span class="list-section-header-sub" ng-bind-html="tokenType.headingFees"><\/span><\/h3>\r\n                                    <ul class="payment-token-list">\r\n                                        <li ng-repeat="token in tokenType.tokens" ng-class="{\'expired\':token.IsExpired, \'expires-soon\':token.ExpiresSoon}">\r\n                                            <div class="radio">\r\n                                                <label ng-disabled="token.IsExpired">\r\n                                                    <div class="payment-token">\r\n                                                        <img class="payment-icon-sm" ng-src="{{getIconPath(token.PaymentMethodName)}}" alt="{{token.PaymentMethodName}}" />\r\n                                                        <div class="token-info">\r\n                                                            <div>\r\n                                                                <span class="account-name">{{token.AccountName}}<\/span>\r\n                                                                <span class="account-number">{{token.TokenMainMaskedAccountNumber}}<\/span>\r\n                                                            <\/div>\r\n                                                            <div class="secondary-line">\r\n                                                                {{token.TokenSubMaskedAccountNumber}}\r\n                                                                <span ng-show="\'{{token.ExpiryDate}}\'!=\'\'">\r\n                                                                    {{token.IsExpired ? \'Expired\' : \'Expires\'}} {{token.MaskedExpiryDate}}\r\n                                                                    <span ng-show="{{token.ExpiresSoon}}">\r\n                                                                        (Expires soon)\r\n                                                                    <\/span>\r\n                                                                <\/span>\r\n\r\n                                                                <span ng-if="token.TokenSubMaskedAccountNumber || token.ExpiryDate" class="separator">|<\/span>\r\n                                                                <a href="#" ng-click="deletePaymentToken(token.TokenNumber)">remove<\/a>\r\n                                                            <\/div>\r\n                                                        <\/div>\r\n                                                    <\/div>\r\n                                                <\/label>\r\n                                            <\/div>\r\n                                        <\/li>\r\n                                    <\/ul>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                <\/div>\r\n            <\/div>\r\n    <\/div>\r\n<\/div>');n.put("PaymentMethods-NewCard.html",'<div class="container payments-container" data-auth-key="All/Payment" data-auth="u">\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <div class="row">\r\n                <div class="col-xs-12 col-md-5">\r\n                    <h1 class="page-title">Payment Methods<\/h1>\r\n                <\/div>\r\n            <\/div>\r\n            <div data-ng-controller="PaymentMethodsNewCardController">\r\n\r\n                <div class="loading loading-page">\r\n                    <i><\/i>\r\n                    Transferring you to our secure payment gateway\r\n                <\/div>\r\n\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("Payments-Complete.html",'<div ng-controller="PaymentsCompleteController">\r\n\r\n    <page-loading-message ng-hide="processingEnded" message="Processing payment"><\/page-loading-message>\r\n\r\n    <div ng-show="processingEnded">\r\n\r\n        <div ng-if="success">\r\n            <h2>Payment complete<\/h2>\r\n            <div class="alert alert-success">Your payment of {{(amountInCents + feeAmountInCents) / 100 | currency}} was successful.<\/div>\r\n            <p>Thank you for your payment which has been successfully processed. A receipt has been sent by email.<\/p>\r\n            <p>Your receipt number is <strong>{{receiptNumber}}<\/strong><\/p>\r\n        <\/div>\r\n\r\n        <div ng-if="!success">\r\n            <h2>Payment unsuccessful<\/h2>\r\n            <div class="alert alert-danger">Your payment of {{(amountInCents + feeAmountInCents) / 100 | currency}} was unsuccessful.<\/div>\r\n            <p>Please check your payment method and try again.<\/p>\r\n        <\/div>\r\n\r\n        <div class="tf-right" ng-show="processingEnded">\r\n            <a class="btn btn-primary" ui-sref="app.payments" ui-sref-opts="{reload:true, notify: true}">Make another payment<\/a>\r\n            <a ui-sref="app.dash" class="btn btn-link">Return to dashboard<\/a>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\r\n');n.put("Payments-Confirm.html",'<div ng-controller="PaymentsConfirmController">\r\n\r\n    <div class="block-margin">\r\n        <h2 class="block-margin-sm">Confirm payment<\/h2>\r\n        <p>Please confirm your payment details and click \'Pay now\' to complete the payment.<\/p>\r\n        <p ng-show="!currentPayment.IsCard">Please note that <strong>EFT transfers<\/strong> from a bank account will generally be <strong>processed on the next business day<\/strong>.<\/p>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-show="!feesProcessed" message="Calculating fee"><\/page-loading-message>\r\n\r\n    <div class="row fx-fade" ng-show="feesProcessed || hasCriticalErrors">\r\n        <div class="col-xs-12 col-sm-6 col-sm-offset-3">\r\n\r\n            <h3 class="panel-title">Your payment details<\/h3>\r\n\r\n            <div class="well">\r\n                <dl class="dl-horizontal flush">\r\n                    <dt ng-show="currentPayment.IsCard">Card type<\/dt>\r\n                    <dd ng-show="currentPayment.IsCard"><img class="payment-icon-sm" ng-src="{{getIconPath(currentPayment.PaymentMethod)}}" alt="{{currentPayment.SelectedPaymentMethodName}}" /><\/dd>\r\n\r\n                    <dt ng-show="currentPayment.IsCard">Card number<\/dt>\r\n                    <dt ng-show="!currentPayment.IsCard">Account number<\/dt>\r\n                    <dd>{{currentPayment.TokenMask}}<\/dd>\r\n\r\n                    <dt ng-show="currentPayment.IsCard">Card expiry<\/dt>\r\n                    <dd ng-show="currentPayment.IsCard">{{currentPayment.TokenExpiry}}<\/dd>\r\n\r\n                    <dt>Payment amount<\/dt>\r\n                    <dd>{{currentPayment.AmountInCents / 100 | currency}}<\/dd>\r\n\r\n                    <dt ng-show="currentPayment.IsCard">Credit card fee<\/dt>\r\n                    <dd ng-show="currentPayment.IsCard">{{currentPayment.FeeAmountInCents / 100 | currency}}{{feeRate}}<\/dd>\r\n\r\n                    <dt class="dl-divider">Total amount to be paid<\/dt>\r\n                    <dd class="dl-divider"><strong class="dl-total">{{(currentPayment.AmountInCents + currentPayment.FeeAmountInCents) / 100 | currency}}<\/strong><\/dd>\r\n                <\/dl>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class="col-xs-12 col-sm-4 col-sm-offset-4" ng-show="potentialSavings > 0">\r\n            <div class="alert alert-warning">\r\n                <p><i class="fa fa-info-circle"><\/i> <strong>Save Money<\/strong><\/p>\r\n                <p>\r\n                    You could have saved {{potentialSavings | currency}} in fees by registering your card for Low Fee card payments. Return to <a ui-sref="app.payments.method">payment method<\/a> and choose \'Low Fee Credit Card Payment\'.\r\n                <\/p>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="col-xs-12">\r\n            <div class="tf-right">\r\n                <button ng-click="confirmCancel();" class="btn btn-link pull-left">Cancel payment<\/button>\r\n                <button type="button" class="btn btn-link" ng-click="goBack()">Back to payment method<\/button>\r\n                <button type="button" class="btn btn-primary" ng-click="goNext()" ng-show="feesProcessed && !hasCriticalErrors">Pay now<\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>');n.put("Payments-DirectDebit.html",'<div data-ng-controller="PaymentsDirectDebitController">\r\n\r\n    <div class="loading loading-page">\r\n        <i><\/i>\r\n        Transferring you to our secure payment gateway\r\n    <\/div>\r\n    \r\n<\/div>\r\n');n.put("Payments-Method.html",'<div ng-controller="PaymentsMethodController" class="payments-method">\r\n\r\n    <div class="block-margin">\r\n        <h2 class="block-margin-sm">Select a payment method<\/h2>\r\n        <p>Save on fees with a bank account, or use a credit card to earn points for your business.<\/p>\r\n    <\/div>\r\n    \r\n    <div class="connect-panel-header no-bottom-border">\r\n        <h2 class="title">Payment Methods<\/h2>\r\n        <div class="connect-panel-actions" ng-show="paymentsMethodReady">\r\n            <a ng-click="newPaymentMethod()" href="javascript:;"><i class="fa fa-plus"><\/i>New payment method<\/a>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-hide="paymentsMethodReady" message="Loading your payment method options"><\/page-loading-message>\r\n\r\n    <div class="ng-hide fx-fade" ng-show="paymentsMethodReady">\r\n\r\n        <div class="list-group">\r\n            <div ng-repeat="tokenType in regularTokenTypes()" class="list-group-item">\r\n                <h3 class="list-section-header">{{tokenType.heading}} <span class="list-section-header-sub">{{tokenType.headingFees}}<\/span><\/h3>\r\n                <ul class="payment-token-list">\r\n                    <li ng-repeat="token in tokenType.tokens" ng-class="{\'expired\':token.IsExpired, \'expires-soon\':token.ExpiresSoon}">\r\n                        <div class="radio">\r\n                            <label ng-disabled="token.IsExpired">\r\n                                <input type="radio" name="paymentMethod" ng-model="$parent.$parent.currentTokenNumber" value="{{token.TokenNumber}}" ng-disabled="token.IsExpired">\r\n                                <div class="payment-token">\r\n                                    <img class="payment-icon-sm" ng-src="{{$parent.getIconPath(token.PaymentMethodName)}}" alt="{{token.PaymentMethodName}}" />\r\n                                    <div class="token-info">\r\n                                        <div>\r\n                                            <span class="account-name">{{token.AccountName}}<\/span>\r\n                                            <span class="account-number">{{token.TokenMainMaskedAccountNumber}}<\/span>\r\n                                        <\/div>\r\n                                        <div class="secondary-line">\r\n                                            {{token.TokenSubMaskedAccountNumber}}\r\n                                            <span ng-show="\'{{token.ExpiryDate}}\'!=\'\'">\r\n                                                {{token.IsExpired ? \'Expired\' : \'Expires\'}} {{token.MaskedExpiryDate}}\r\n                                                <span ng-show="{{token.ExpiresSoon}}">\r\n                                                    (Expires soon)\r\n                                                <\/span>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="token.TokenSubMaskedAccountNumber || token.ExpiryDate" class="separator">|<\/span>\r\n                                            <a href="#" ng-click="deletePaymentToken(token.TokenNumber)">remove<\/a>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/label>\r\n                        <\/div>\r\n                    <\/li>\r\n                    <li ng-show="false">\r\n                        <div class="radio" ng-show="tokenType != null && !tokenType.hasOwnProperty(\'disableNew\')">\r\n                            <label>\r\n                                <input type="radio" name="paymentMethod" ng-model="$parent.currentTokenNumber" value="{{tokenType.newValue}}">\r\n                                <span class="account-name">{{tokenType.newLabel}}<\/span>\r\n                                <br />\r\n                                {{tokenType.newInstruction}}\r\n                            <\/label>\r\n                        <\/div>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n        <\/div>\r\n        <div class="payments-spacer"><\/div>\r\n        <div class="connect-panel-header no-bottom-border">\r\n            <h2 class="title">Low Fee Payment Methods (Min. of 6 transactions over 1 year)<\/h2>\r\n            <div class="connect-panel-actions" ng-show="paymentsMethodReady">\r\n                <a ng-click="newPaymentMethod(true)" href="javascript:;"><i class="fa fa-plus"><\/i>New low fee card<\/a>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class="list-group">\r\n            <div ng-repeat="tokenType in lowFeeTokenTypes()" class="list-group-item">\r\n                <h3 class="list-section-header">{{tokenType.heading}} <span class="list-section-header-sub" ng-bind-html="tokenType.headingFees"><\/span><\/h3>\r\n                <ul class="payment-token-list">\r\n                    <li ng-repeat="token in tokenType.tokens" ng-class="{\'expired\':token.IsExpired, \'expires-soon\':token.ExpiresSoon}">\r\n                        <div class="radio">\r\n                            <label ng-disabled="token.IsExpired">\r\n                                <input type="radio" name="paymentMethod" ng-model="$parent.$parent.currentTokenNumber" value="{{token.TokenNumber}}" ng-disabled="token.IsExpired">\r\n                                <div class="payment-token">\r\n                                    <img class="payment-icon-sm" ng-src="{{$parent.getIconPath(token.PaymentMethodName)}}" alt="{{token.PaymentMethodName}}" />\r\n                                    <div class="token-info">\r\n                                        <div>\r\n                                            <span class="account-name">{{token.AccountName}}<\/span>\r\n                                            <span class="account-number">{{token.TokenMainMaskedAccountNumber}}<\/span>\r\n                                        <\/div>\r\n                                        <div class="secondary-line">\r\n                                            {{token.TokenSubMaskedAccountNumber}}\r\n                                            <span ng-show="\'{{token.ExpiryDate}}\'!=\'\'">\r\n                                                {{token.IsExpired ? \'Expired\' : \'Expires\'}} {{token.MaskedExpiryDate}}\r\n                                                <span ng-show="{{token.ExpiresSoon}}">\r\n                                                    (Expires soon)\r\n                                                <\/span>\r\n                                            <\/span>\r\n\r\n                                            <span ng-if="token.TokenSubMaskedAccountNumber || token.ExpiryDate" class="separator">|<\/span>\r\n                                            <a href="#" ng-click="deletePaymentToken(token.TokenNumber)">remove<\/a>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/label>\r\n                        <\/div>\r\n                    <\/li>\r\n                    <li ng-show="false">\r\n                        <div class="radio" ng-show="tokenType != null && !tokenType.hasOwnProperty(\'disableNew\')">\r\n                            <label>\r\n                                <input type="radio" name="paymentMethod" ng-model="$parent.currentTokenNumber" value="{{tokenType.newValue}}">\r\n                                <span class="account-name">{{tokenType.newLabel}}<\/span>\r\n                                <br />\r\n                                {{tokenType.newInstruction}}\r\n                            <\/label>\r\n                        <\/div>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n        <\/div>\r\n\r\n\r\n        <div class="tf-right">\r\n            <button ng-click="confirmCancel();" class="btn btn-link pull-left">Cancel payment<\/button>\r\n            <button ng-click="goBack()" type="button" class="btn btn-link">Back to review<\/button>\r\n            <button ng-click="selectPaymentMethod()" type="button" class="btn btn-primary" ng-disabled="hasCriticalErrors">{{getActionType()}}<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("Payments-NewCard.html",'<div data-ng-controller="PaymentsNewCardController">\r\n\r\n    <div class="loading loading-page">\r\n        <i><\/i>\r\n        Transferring you to our secure payment gateway\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("Payments-PayAccounts.html",'<div id=\'pay-accounts-view\' ng-controller="PaymentsPayAccountsController" list-view-lite>\r\n\r\n    <!-- TABS -->\r\n    <ul class="nav nav-tabs">\r\n        <li ng-if="!cashAccountsOnly" >\r\n            <a ui-sref="app.payments.payInvoices"><i class="fa fa-lg fa-file-text-o"><\/i> Pay invoices<\/a>\r\n        <\/li>\r\n        <li ng-if="cashAccounts">\r\n            <a ui-sref="app.payments.payOrders"><i class="fa fa-lg fa-shopping-cart"><\/i> Pay sales orders<\/a>\r\n        <\/li>\r\n        <li>\r\n            <a ui-sref="app.payments.payStatements"><i class="fa fa-lg fa-calendar-check-o"><\/i> Pay statements<\/a>\r\n        <\/li>\r\n        <li class="active">\r\n            <a ui-sref="app.payments.payAccounts"><i class="fa fa-lg fa-credit-card"><\/i> Pay a lump sum<\/a>\r\n        <\/li>\r\n    <\/ul>\r\n\r\n    <div class="clr">\r\n\r\n        <div support-tip="paymentsTip">\r\n            <h3 class="support-tip-title">Help with payments<\/h3>\r\n            <p>Quick guides to help you pay online:<\/p>\r\n            <ul class="support-tip-links">\r\n                <li><a href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes&Tab=Knowledge&CommandId=ShowArticle&ItemId=45B4D77D5A46434E8C0176E528ED3E68" target="_blank">Pay specific invoices<\/a><\/li>\r\n                <li><a href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes&Tab=Knowledge&CommandId=ShowArticle&ItemId=252211E00348460987306818889EA401" target="_blank">Pay a lump sum against an account<\/a><\/li>\r\n            <\/ul>\r\n        <\/div>\r\n\r\n        <div class="block-margin block-headroom">\r\n            <h2 class="block-margin-sm">Pay a lump sum against an account<\/h2>\r\n            <p>You\'ll have a chance to review your selection on the next screen.<\/p>\r\n        <\/div>\r\n\r\n        <div ng-show="totalPayment < 1" class="alert alert-warning"><p>Minimum payment amount is $1.00<\/p><\/div>\r\n\r\n    <\/div>\r\n\r\n    <form id="formAccounts" name="form" novalidate form-validator>\r\n\r\n        <!-- STATE: LOADING -->\r\n        <page-loading-message message="Loading accounts" ng-show="list.data.loading"><\/page-loading-message>\r\n\r\n        <!-- STATE: EMPTY -->\r\n        <page-empty-message\r\n            ng-if="!list.data.loading && (!list.items || !list.items.length)"\r\n            feature="payment"\r\n            title="No balances are available to pay"\r\n            message="You may be able to">\r\n            <button class="content-empty-btn btn btn-default" ui-sref="app.payments.payInvoices">Pay invoices<\/button>\r\n        <\/page-empty-message>\r\n\r\n        <!-- STATE: LOADED -->\r\n        <div class="table-responsive" ng-hide="list.data.loading">\r\n            <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" ng-show="list.items.length">\r\n                <thead>\r\n                    <tr table-headers><\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    <tr ng-repeat="itm in list.items">\r\n                        <td><a ng-href="#/accounts/{{ itm.AccountId }}" target="_blank">{{ itm.AccountId }}<\/a><\/td>\r\n                        <td><sbu-image sbu-code="itm.SbuCode"><\/sbu-image><\/td>\r\n                        <td>{{ itm.Name }}<\/td>\r\n                        <td class="tf-right">\r\n                            {{ itm.Amount-itm.AmountPending | currency }}\r\n                            <span ng-if="itm.AmountPending!=0">\r\n                                <br />\r\n                                <i tooltip-placement="top" tooltip="{{ \'Pending payments: \' + (itm.AmountPending | currency) }}" class="text-muted">{{ itm.Amount | currency }}<\/i>\r\n                            <\/span>\r\n                        <\/td>\r\n                        <td class="tf-right tf-input">\r\n                            <span class="payment-item-amount">\r\n                                <label for="{{ itm.AccountId }}_payment"><span class="sr-only">Pay amount for account {{itm.AccountId}}<\/span>$<\/label>\r\n                                <input id="{{ itm.AccountId }}_payment" class="form-control input-sm" type="text"\r\n                                        placeholder="0.00"\r\n                                        dyn-name="itm.AccountId"\r\n                                        ng-model="itm.PayAmount"\r\n                                        ng-change="payAmountChanged(itm)"\r\n                                        ng-focus="focusOnAmount(itm, true)"\r\n                                        validator="payAccountBalanceAmount"\r\n                                        autocomplete="off"\r\n                                        initial-validity="true" />\r\n                            <\/span>\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n                <tfoot>\r\n                    <tr>\r\n                        <td colspan="2"><span ng-show="selectedItems.length > 0">{{selectedItems.length}} account{{selectedItems.length > 1 ? \'s\' : \'\'}} for payment<\/span><\/td>\r\n                        <td colspan="2" class="tf-right"><span ng-show="selectedItems.length > 0"><strong>Total amount to pay:<\/strong><\/span><\/td>\r\n                        <td class="tf-right"><span ng-show="selectedItems.length > 0"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/span><\/td>\r\n                    <\/tr>\r\n                <\/tfoot>\r\n            <\/table>\r\n        <\/div>\r\n\r\n    <\/form>\r\n\r\n    <div class="tf-right">\r\n        <button typeof="submit" class="btn btn-primary" ng-click="reviewSelection()">Review lump sum payment<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n<\/div>\r\n');n.put("Payments-PayInvoices.html",'<div ng-controller="PaymentsPayInvoicesController" list-view-lite>\r\n\r\n    <!-- TABS -->\r\n    <ul class="nav nav-tabs">\r\n        <li ng-if="!cashAccountsOnly" class="active">\r\n            <a ui-sref="app.payments.payInvoices"><i class="fa fa-lg fa-file-text-o"><\/i> Pay invoices<\/a>\r\n        <\/li>\r\n        <li ng-if="cashAccounts"  id="paymentsSalesordersTab">\r\n            <a ui-sref="app.payments.payOrders"><i class="fa fa-lg fa-shopping-cart"><\/i> Pay sales orders<\/a>\r\n        <\/li>\r\n        <li id="paymentsStatementsTab">\r\n            <a ui-sref="app.payments.payStatements"><i class="fa fa-lg fa-calendar-check-o"><\/i> Pay statements<\/a>\r\n        <\/li>\r\n        <li ng-if="currentPayment.JobId === null"  id="paymentsLumpsumTab">\r\n            <a ui-sref="app.payments.payAccounts"><i class="fa fa-lg fa-credit-card"><\/i> Pay a lump sum<\/a>\r\n        <\/li>\r\n    <\/ul>\r\n\r\n    <!-- INVOICES VIEW -->\r\n    <div id=\'pay-invoices-view\' class="clr" ng-hide="isPayStatement">\r\n\r\n        <!-- SUPPORT TIP -->\r\n        <div support-tip="paymentsTip">\r\n            <h3 class="support-tip-title">Help with payments<\/h3>\r\n            <p>Quick guides to help you pay online:<\/p>\r\n            <ul class="support-tip-links">\r\n                <li><a href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes&Tab=Knowledge&CommandId=ShowArticle&ItemId=45B4D77D5A46434E8C0176E528ED3E68" target="_blank">Pay specific invoices<\/a><\/li>\r\n                <li><a href="https://csr.saasitau.com/Modules/SelfService/?Scope=SelfService&Role=anonymous&AnonymousRequest=yes&Tab=Knowledge&CommandId=ShowArticle&ItemId=252211E00348460987306818889EA401" target="_blank">Pay a lump sum against an account<\/a><\/li>\r\n            <\/ul>\r\n        <\/div>\r\n\r\n        <div class="block-margin block-headroom">\r\n            <h2 class="block-margin-sm">Select invoices for payment<\/h2>\r\n            <p>You\'ll have a chance to review your selection on the next screen.<\/p>\r\n        <\/div>\r\n\r\n        <div class="form-inline fx-fade" ng-hide="(list.data.loading && !list.items.length) || !list.items.length">\r\n\r\n            <!-- FLAG FILTER -->\r\n            <div ng-if="currentPayment.JobId === null" class="form-group">\r\n                <div class="dropdown component-flag-list">\r\n                    <button class="btn btn-light dropdown-toggle {{searchOption.flag !== false ? flags[searchOption.flag].color + \'-color\' : \'\'}}" type="button" data-toggle="dropdown" id="filters-flags">\r\n                        <i class="fa fa-fw fa-flag {{searchOption.flag !== false ? flags[searchOption.flag].icon : \'fa-flag\'}}"><\/i> {{searchOption.flag !== false ? flags[searchOption.flag].label : \'All flags\'}} <span class="caret"><\/span>\r\n                    <\/button>\r\n                    <ul class="dropdown-menu" role="menu" aria-labelledby="filters-flags">\r\n                        <li><a role="menuitem" ng-click="selectFlag()" href="javascript:;"><i class="fa fa-fw fa-flag"><\/i> Any flag<\/a><\/li>\r\n                        <li><a role="menuitem" ng-click="selectFlag(1)" href="javascript:;" class="flag-green-color"><i class="fa fa-fw flag-green"><\/i> Green flag<\/a><\/li>\r\n                        <li><a role="menuitem" ng-click="selectFlag(2)" href="javascript:;" class="flag-amber-color"><i class="fa fa-fw flag-amber"><\/i> Amber flag<\/a><\/li>\r\n                        <li><a role="menuitem" ng-click="selectFlag(3)" href="javascript:;" class="flag-red-color"><i class="fa fa-fw flag-red"><\/i> Red flag<\/a><\/li>\r\n                    <\/ul>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- DUE INVOICES ONLY TOGGLE -->\r\n            <div class="form-group checkbox">\r\n                <label class="checkbox-styled"><input type="checkbox" checked ng-disabled="list.data.loading" ng-model="showAllInvoices" ng-true-value="false" ng-false-value="true" ng-change="list.search()" /><span class="label-text">Show due invoices only<\/span><\/label>\r\n            <\/div>\r\n\r\n            <!-- UPPER BUTTONS -->\r\n            <div class="hidden-xs pull-right">\r\n                <!--<div class="btn-group">\r\n                    <button type="button" class="btn btn-default btn-push" onclick="alert(\'Not yet implemented\');">Pay all due invoices<\/button>\r\n                <\/div>-->\r\n                <div class="btn-group">\r\n                    <button id="payments-review-btn" type="submit" class="btn btn-primary" ng-click="reviewSelection()" ng-disabled="hasCriticalErrors">Review selection<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <!-- JOB SELECTOR -->\r\n        <div job-header class="clr" show-documents-link documents-link-label="Link invoices" doc-type="invoices" heading="Pay by job" subheading="Pay invoices associated with a job." ng-if="payments.payByJob"><\/div>\r\n\r\n        <!-- ALERTS -->\r\n        <p class="alert alert-warning clr flush fx-fade" ng-if="totalPayment < 1" >Minimum payment amount is $1.00<\/p>\r\n\r\n        <!-- INVOICES LIST -->\r\n        <form id="formInvoices" name="form" novalidate form-validator>\r\n\r\n            <!-- STATE: LOADING -->\r\n            <page-loading-message message="Loading due invoices" ng-show="list.data.loading && !showAllInvoices"><\/page-loading-message>\r\n            <page-loading-message message="Loading all invoices" ng-show="list.data.loading && showAllInvoices"><\/page-loading-message>\r\n\r\n            <!-- STATE: EMPTY -->\r\n            <div ng-if="!list.data.loading && (!list.items || !list.items.length)">\r\n\r\n                <!-- EMPTY: SHOW ALL -->\r\n                <page-empty-message\r\n                    ng-if="!hasCashAccount && showAllInvoices"\r\n                    feature="document"\r\n                    title="No invoices are available for payment"\r\n                    message="You can pay directly against an account.">\r\n                    <button class="content-empty-btn btn btn-default" ui-sref="app.payments.payAccounts">Pay against an account<\/button>\r\n                <\/page-empty-message>\r\n\r\n                <!-- EMPTY: SHOW DUE -->\r\n                <page-empty-message\r\n                    ng-if="!hasCashAccount && !showAllInvoices"\r\n                    feature="document"\r\n                    title="No invoices are due"\r\n                    message="Current invoices may be available for payment.">\r\n                    <button class="content-empty-btn btn btn-default" ng-click="toggleShowAllInvoices()">Show all<\/button>\r\n                <\/page-empty-message>\r\n\r\n                <!-- EMPTY: CASH -->\r\n                <page-empty-message\r\n                    ng-if="hasCashAccount"\r\n                    feature="document"\r\n                    title="No invoices are available for payment"\r\n                    message="Invoices are available for payment on credit accounts only. For cash sale accounts, payments must be made against sales orders.">\r\n                    <button class="content-empty-btn btn btn-default" ui-sref="app.payments.payOrders">Pay sales orders<\/button>\r\n                <\/page-empty-message>\r\n\r\n            <\/div>\r\n\r\n            <!-- STATE: LOADED -->\r\n            <div class="table-responsive flush" ng-hide="list.data.loading">\r\n                <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" invoice-flags ng-show="list.items.length">\r\n                    <thead>\r\n                        <tr>\r\n                            <td colspan="6">\r\n                                <!-- SELECT ALL / NONE -->\r\n                                <div class="pull-left">\r\n                                    <input type="checkbox" name="selectAll" ng-model="selectAll" ng-true-value="\'all\'" ng-false-value="\'none\'" class="hidden">\r\n                                    {{selectedItems.length}} item{{selectedItems.length == 1 ? \'\' : \'s\'}} selected<span role="presentation">&nbsp;|&nbsp;<\/span>\r\n                                    Select <a href="javascript:;" ng-click="selectAll = \'all\'; tableSelectAll()">current page<\/a> / <a href="javascript:;" ng-click="selectAll = \'none\'; tableSelectAll()">none<\/a>\r\n                                <\/div>\r\n                            <\/td>\r\n                            <td class="tf-right" colspan="2"><span ng-show="selectedItems.length > 0"><strong>Total amount to pay:<\/strong><\/span><\/td>\r\n                            <td class="tf-right"><span ng-show="selectedItems.length > 0"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/span><\/td>\r\n                        <\/tr>\r\n                        <tr table-headers><\/tr>\r\n                    <\/thead>\r\n                    <tbody>\r\n                        <tr ng-repeat="itm in list.items"\r\n                            selection-model\r\n                            selection-model-type="checkbox"\r\n                            selection-model-mode="multiple-additive"\r\n                            selection-model-selected-items="selectedItems"\r\n                            selection-model-on-change="selectionChanged(itm)">\r\n                            <td class="tf-center"><input type="checkbox"/><\/td>\r\n                            <td>\r\n                                <flag current-flag-color="itm.flag" available-flags="flagEnums" update-flag-function="updateFlag(itm, flagId)"><\/flag>\r\n                            <\/td>\r\n\r\n                            <td>{{ itm.DocumentDate | date : \'d MMM yyyy\' }}<\/td>\r\n\r\n                            <td>{{ itm.AccountId }}<\/td>\r\n\r\n                            <td selection-model-ignore>\r\n                                <a href="javascript:;" ng-click="OpenPaymentInvoice(itm.InvoiceRef, $event, itm.BuyerAccountId)" auth-key="All/Download" auth="r">{{ itm.InvoiceRef }}<\/a>\r\n                                <span auth-key-hide="All/Download" auth="r">{{ itm.InvoiceRef }}<\/span>\r\n                            <\/td>\r\n\r\n                            <td>{{ itm.TypeLabel }}<\/td>\r\n                            <td>{{ itm.CustomerRef }}<\/td>\r\n                            <td class="tf-right">\r\n                                {{ itm.Amount-itm.AmountPending | currency }}\r\n                                <span ng-if="itm.AmountPending!=0">\r\n                                    <br />\r\n                                    <i tooltip-placement="top" tooltip="{{ \'Pending payments: \' + (itm.AmountPending | currency) }}" class="text-muted">{{ itm.Amount | currency }}<\/i>\r\n                                <\/span>\r\n                            <\/td>\r\n                            <td class="tf-right" ng-show="!itm.selected" selection-model-ignore>\r\n                                <button class="btn link-btn-inline" ng-click="focusOnAmount(itm)">Select amount<\/button>\r\n                            <\/td>\r\n                            <td class="tf-right tf-input" ng-show="itm.selected" selection-model-ignore>\r\n                                <span class="payment-item-amount">\r\n                                    <label for="{{ itm.InvoiceRef }}_payment"><span class="sr-only">Pay amount for invoice {{ itm.InvoiceRef }}<\/span>$<\/label>\r\n                                    <input id="{{ itm.InvoiceRef }}_payment" class="form-control input-sm" type="text" placeholder="0.00"\r\n                                        dyn-name="itm.InvoiceRef"\r\n                                        ng-model="itm.PayAmount"\r\n                                        ng-change="payAmountChanged(itm.PayAmount)"\r\n                                        ng-disabled="!itm.selected"\r\n                                        validator="payAmount"\r\n                                        initial-validity="true"\r\n                                        autocomplete="off"\r\n                                        selection-model-ignore />\r\n                                <\/span>\r\n                            <\/td>\r\n                        <\/tr>\r\n                    <\/tbody>\r\n                    <tfoot>\r\n                        <tr>\r\n                            <td colspan="5"><span ng-show="selectedItems.length > 0">{{selectedItems.length}} item{{selectedItems.length > 1 ? \'s\' : \'\'}} selected<\/span><\/td>\r\n                            <td class="tf-right" colspan="3"><span ng-show="selectedItems.length > 0"><strong>Total amount to pay:<\/strong><\/span><\/td>\r\n                            <td class="tf-right"><span ng-show="selectedItems.length > 0"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/span><\/td>\r\n                        <\/tr>\r\n                    <\/tfoot>\r\n                <\/table>\r\n            <\/div>\r\n\r\n            <!-- PAGINATION AND BUTTONS -->\r\n            <div class="row fx-fade" ng-hide="(list.data.loading && !list.items.length) || !list.items.length">\r\n                <div class="col-xs-12 col-md-6">\r\n                    <div pagination-nav><\/div>\r\n                <\/div>\r\n                <div class="col-xs-12 col-md-6 text-right">\r\n                    <!-- Bigger screen button -->\r\n                    <button type="submit" class="hidden-xs btn btn-primary block-headroom block-margin" ng-click="reviewSelection()" ng-disabled="hasCriticalErrors">Review selection <i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n                    <!-- Small screen button -->\r\n                    <button type="submit" class="visible-xs btn btn-primary btn-block block-headroom block-margin" ng-click="reviewSelection()" ng-disabled="hasCriticalErrors">Review selection<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/form>\r\n    <\/div>\r\n\r\n    <!-- MONTHLY STATEMENT INTERSTITIAL VIEW -->\r\n    <div ng-show="isPayStatement">\r\n        <page-loading-message message="Calculating statement items for payment"><\/page-loading-message>\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n\r\n<script type="text/ng-template" id="flag.html">\r\n    <div class="pull-right">\r\n        <div ng-show="flag.saving === true" class="loading"><i><\/i><\/div>\r\n        <small ng-show="flag.saving === false" class="text-muted">Saved<\/small>\r\n    <\/div>\r\n    <strong class="{{flag.color}}"><i class="fa fa-lg fa-flag {{flag.icon}}"><\/i> {{flag.label}}<\/strong>\r\n    <div ng-show="!flag.editing && flag.current > 0" class="flag-comment">\r\n        {{flag.comment}}<small ng-show="flag.comment === null">No comment<\/small><br>\r\n        <small class="text-muted"><strong>{{flag.updatedBy}}<\/strong> {{flag.updatedDate | date:"d MMM yy \'at\' h:mma"}}<\/small>\r\n    <\/div>\r\n    <div ng-show="flag.editing" class="flag-comment">\r\n        <span class="sr-only"><label class="control-label">Flag comment<\/label><\/span>\r\n        <input ng-model="flag.comment" type="text" class="form-control" autosave-field placeholder="Comment for your reference">\r\n    <\/div>\r\n<\/script>');n.put("Payments-PayOrders.html",'<div ng-controller="PaymentsPayOrdersController" list-view-lite>\r\n\r\n    <!-- TABS -->\r\n    <ul class="nav nav-tabs">\r\n        <li ng-if="!cashAccountsOnly">\r\n            <a ui-sref="app.payments.payInvoices"><i class="fa fa-lg fa-file-text-o"><\/i> Pay invoices<\/a>\r\n        <\/li>\r\n        <li class="active">\r\n            <a ui-sref="app.payments.payOrders"><i class="fa fa-lg fa-shopping-cart"><\/i> Pay sales orders<\/a>\r\n        <\/li>\r\n        <li>\r\n            <a ui-sref="app.payments.payStatements"><i class="fa fa-lg fa-calendar-check-o"><\/i> Pay statements<\/a>\r\n        <\/li>\r\n        <li ng-if="currentPayment.JobId === null" id="paymentsLumpsumTab">\r\n            <a ui-sref="app.payments.payAccounts"><i class="fa fa-lg fa-credit-card"><\/i> Pay a lump sum<\/a>\r\n        <\/li>\r\n    <\/ul>\r\n\r\n    <div class="block-margin block-headroom">\r\n        <h2 class="block-margin-sm">Select sales orders for payment<\/h2>\r\n        <p>You\'ll have a chance to review your selection on the next screen.<\/p>\r\n    <\/div>\r\n\r\n    <div class="form-inline fx-fade" ng-hide="(list.data.loading && !list.items.length) || !list.items.length">\r\n\r\n        <!-- UPPER BUTTONS -->\r\n        <div class="hidden-xs pull-right">\r\n            <div class="btn-group">\r\n                <button class="btn btn-primary" ng-click="reviewSelection()" ng-disabled="hasCriticalErrors">Review selection<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div job-header class="clr" show-documents-link documents-link-label="Link Orders" doc-type="orders" subheading="Pay a sales order associated with a job." class="clr" ng-if="payments.payByJob"><\/div>\r\n\r\n    <div ng-show="totalPayment < 1" class="alert alert-warning"><p>Minimum payment amount is $1.00<\/p><\/div>\r\n\r\n    <form id="formOrders" name="form" novalidate form-validator>\r\n\r\n        <!-- STATE: LOADING -->\r\n        <page-loading-message message="Loading sales orders" ng-show="list.data.loading"><\/page-loading-message>\r\n\r\n        <!-- STATE: EMPTY -->\r\n        <page-empty-message\r\n            ng-if="!list.data.loading && (!list.items || !list.items.length)"\r\n            feature="order"\r\n            title="No sales orders are available for payment"\r\n            message="Sales orders are available for payment on cash accounts only. For credit accounts, payments must be made against invoices.">\r\n            <button class="content-empty-btn btn btn-default" ui-sref="app.payments.payInvoices">Pay invoices<\/button>\r\n        <\/page-empty-message>\r\n\r\n        <!-- STATE: LOADED -->\r\n        <div class="table-responsive" ng-hide="list.data.loading">\r\n            <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" ng-show="list.items.length">\r\n                <thead>\r\n                    <tr>\r\n                        <td colspan="6">\r\n                            <!-- SELECT ALL / NONE -->\r\n                            <div class="pull-left">\r\n                                <input type="checkbox" name="selectAll" ng-model="selectAll" ng-true-value="\'all\'" ng-false-value="\'none\'" class="hidden">\r\n                                {{selectedItems.length}} item{{selectedItems.length == 1 ? \'\' : \'s\'}} selected<span role="presentation">&nbsp;|&nbsp;<\/span>\r\n                                Select <a href="javascript:;" ng-click="selectAll = \'all\'; tableSelectAll()">all<\/a> / <a href="javascript:;" ng-click="selectAll = \'none\'; tableSelectAll()">none<\/a>\r\n                            <\/div>\r\n                        <\/td>\r\n                        <td class="tf-right" colspan="2"><span ng-show="selectedItems.length > 0"><strong>Total amount to pay:<\/strong><\/span><\/td>\r\n                        <td class="tf-right"><span ng-show="selectedItems.length > 0"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/span><\/td>\r\n                    <\/tr>\r\n                    <tr table-headers><\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    <tr ng-repeat="itm in list.items"\r\n                        selection-model\r\n                        selection-model-type="checkbox"\r\n                        selection-model-mode="multiple-additive"\r\n                        selection-model-selected-items="selectedItems"\r\n                        selection-model-on-change="selectionChanged(itm)">\r\n                        <td><input type="checkbox" /><\/td>\r\n                        <td>{{ itm.DeliveryDate | date : \'d MMM yyyy\' }}<\/td>\r\n                        <td>{{ itm.AccountId }}<\/td>\r\n                        <td><a href="javascript:;" ng-click="OpenSalesOrder(itm.AccountId, itm.OrderRef)">{{ itm.OrderRef }}<\/a><\/td>\r\n                        <td>{{ itm.CustomerRef }}<\/td>\r\n                        <td>{{ itm.ShipToAddress }}<\/td>\r\n                        <td class="tf-right">\r\n                            {{ itm.Amount | currency }}\r\n                        <\/td>\r\n                        <td class="tf-right">\r\n                            {{ itm.AmountPaid | currency }}\r\n                            <span ng-if="itm.AmountPending!=0">\r\n                                <br />\r\n                                <i tooltip-placement="top" tooltip="{{ \'Pending payments: \' + (itm.AmountPending | currency) }}" class="text-muted">{{ itm.AmountPaid + itm.AmountPending | currency }}<\/i>\r\n                            <\/span>\r\n                        <\/td>\r\n                        <td class="tf-right" ng-show="!itm.selected"  selection-model-ignore>\r\n                            <button class="btn link-btn-inline" ng-click="focusOnAmount(itm)">Select amount<\/button>\r\n                        <\/td>\r\n                        <td class="tf-right tf-input" ng-show="itm.selected" selection-model-ignore>\r\n                            <span ng-show="itm.selected" class="payment-item-amount">\r\n                                <label for="{{ itm.OrderRef }}_payment"><span class="sr-only">Pay amount for order {{itm.OrderRef}}<\/span>$<\/label>\r\n                                <input id="{{ itm.OrderRef }}_payment" class="form-control input-sm" type="text" placeholder="0.00"\r\n                                    dyn-name="itm.OrderRef"\r\n                                    ng-model="itm.PayAmount"\r\n                                    ng-change="payAmountChanged(itm.PayAmount)"\r\n                                    ng-disabled="!itm.selected"\r\n                                    validator="payAmount"\r\n                                    initial-validity="true"\r\n                                    selection-model-ignore />\r\n                            <\/span>\r\n                        <\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n                <tfoot>\r\n                    <tr>\r\n                        <td colspan="3"><span ng-show="selectedItems.length > 0">{{selectedItems.length}} item{{selectedItems.length > 1 ? \'s\' : \'\'}} selected<\/span><\/td>\r\n                        <td colspan="5" class="tf-right"><span ng-show="selectedItems.length > 0"><strong>Total amount to pay:<\/strong><\/span><\/td>\r\n                        <td class="tf-right"><span ng-show="selectedItems.length > 0"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/span><\/td>\r\n                    <\/tr>\r\n                <\/tfoot>\r\n            <\/table>\r\n        <\/div>\r\n\r\n    <\/form>\r\n\r\n    <!-- PAGINATION AND BUTTONS -->\r\n    <div class="row fx-fade" ng-hide="(list.data.loading && !list.items.length) || !list.items.length">\r\n        <div class="col-xs-12 col-md-6">\r\n            <div pagination-nav><\/div>\r\n        <\/div>\r\n        <div class="col-xs-12 col-md-6 text-right">\r\n            <!-- Bigger screen button -->\r\n            <button typeof="submit" class="hidden-xs btn btn-primary block-headroom block-margin" ng-disabled="hasCriticalErrors" ng-click="reviewSelection()">Review payments<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n            <!-- Small screen button -->\r\n            <button typeof="submit" class="visible-xs btn btn-primary btn-block block-headroom block-margin" ng-disabled="hasCriticalErrors" ng-click="reviewSelection()">Review payments<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>');n.put("Payments-PayStatements.html",'<div ng-controller="PaymentsPayStatementsController">\r\n\r\n    <!-- TABS -->\r\n    <ul class="nav nav-tabs">\r\n        <li ng-if="!cashAccountsOnly" >\r\n            <a ui-sref="app.payments.payInvoices"><i class="fa fa-lg fa-file-text-o"><\/i> Pay invoices<\/a>\r\n        <\/li>\r\n        <li ng-if="cashAccounts" >\r\n            <a ui-sref="app.payments.payOrders"><i class="fa fa-lg fa-shopping-cart"><\/i> Pay sales orders<\/a>\r\n        <\/li>\r\n        <li class="active">\r\n            <a ui-sref="app.payments.payStatements"><i class="fa fa-lg fa-calendar-check-o"><\/i> Pay statements<\/a>\r\n        <\/li>\r\n        <li ng-if="currentPayment.JobId === null">\r\n            <a ui-sref="app.payments.payAccounts"><i class="fa fa-lg fa-credit-card"><\/i> Pay a lump sum<\/a>\r\n        <\/li>\r\n    <\/ul>\r\n\r\n    <div class="block-margin block-headroom">\r\n        <h2 class="block-margin-sm">Select a statement for payment<\/h2>\r\n        <p>You\'ll have a chance to review your selection on the next screen.<\/p>\r\n    <\/div>\r\n\r\n    <div navigate-to-payment>\r\n        <div class="row block-margin-sm">\r\n            <div class="col-xs-12 col-md-3 col-lg-3">\r\n                <select class="form-control" id="pay-statements-month-selector" ng-model="payStatement.monthSelector.selectedMonth" ng-change="payStatement.changeMonth()" ng-init="payStatement.monthSelector.selectedMonth = \'0\'">\r\n                    <option value="0">{{ currentDate | date:\'MMMM\'}}<\/option>\r\n                    <option value="1">{{ lastMonthDate | date:\'MMMM\'}}<\/option>\r\n                <\/select>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <page-loading-message ng-show="payStatement.loading" message="Checking your statements"><\/page-loading-message>\r\n\r\n        <div class="table-wrap block-margin" ng-if="payStatement.statementsAvailable">\r\n            <table class="table table-striped table-hover table-row-click table-select-all table-smash">\r\n                <thead>\r\n                    <tr>\r\n                        <th><\/th>\r\n                        <th>Account No.<\/th>\r\n                        <th><\/th>\r\n                        <th>Account Name<\/th>\r\n                        <th>Balance<\/th>\r\n                    <\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    <tr ng-repeat="account in payStatement.accounts"\r\n                        selection-model\r\n                        selection-model-type="checkbox"\r\n                        selection-model-mode="multiple-additive"\r\n                        selection-model-selected-items="payStatement.selectedItems"\r\n                        selection-model-on-change="payStatement.selectionChanged(account)">\r\n                        <td class="tf-center tf-select-checkbox"><input type="checkbox" aria-label="Select statement" /><span role="presentation"> Select statement<\/span><\/td>\r\n                        <td data-th="Account No.">{{account.AccountId}}<\/td>\r\n                        <td data-th=""><sbu-image sbu-code="account.SbuCode"><\/sbu-image><\/td>\r\n                        <td data-th="Account Name">{{account.CompanyName}}<\/td>\r\n                        <td data-th="Balance">{{account.Amount | currency}}<\/td>\r\n                    <\/tr>\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n\r\n        <div class="clr text-right" ng-if="payStatement.statementsAvailable">\r\n            <div class="btn-group">\r\n                <button id="payments-review-btn" type="submit" class="btn btn-primary" ng-disabled="payStatement.selectedItems.length == 0" ng-click="payStatement.payStatements()">Pay {{payStatement.selectedItems.length || \'\'}} statement{{payStatement.selectedItems.length == 1 ? \'\' : \'s\'}}<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- EMPTY -->\r\n        <page-empty-message ng-if="payStatement.monthEstablished && !payStatement.statementsAvailable"\r\n                            feature="date"\r\n                            title="No statements for payment"\r\n                            message="You can pay a lump sum against an account.">\r\n            <button class="content-empty-btn btn btn-default" ui-sref="app.payments.payAccounts">Pay a lump sum<\/button>\r\n        <\/page-empty-message>\r\n\r\n    <\/div>\r\n\r\n<\/div>');n.put("Payments-ReviewAccounts.html",'<div ng-controller="PaymentsReviewAccountsController">\r\n\r\n    <div class="block-margin block-headroom">\r\n        <h2 class="block-margin-sm">Review your lump sum payment{{currentPayment.SelectedLineItems.length == 1 ? \'\' : \'s\'}}<\/h2>\r\n        <p>You\'ll choose your payment method on the next screen.<\/p>\r\n    <\/div>\r\n\r\n    <div class="well cf" ng-show="!currentPayment.SelectedLineItems">\r\n        There are no items to display.\r\n    <\/div>\r\n\r\n    <div class="table-responsive">\r\n        <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" ng-show="currentPayment.SelectedLineItems.length > 0">\r\n            <thead>\r\n                <tr table-headers><\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr ng-repeat="itm in currentPayment.SelectedLineItems">\r\n                    <td>{{ itm.AccountId }}<\/td>\r\n                    <td><sbu-image sbu-code="itm.SbuCode"><\/sbu-image><\/td>\r\n                    <td>{{ itm.AccountName }}<\/td>\r\n                    <td class="tf-right">{{ itm.TotalDue | currency }}<\/td>\r\n                    <td class="tf-right">{{ itm.PaidNow | currency }}<\/td>\r\n                    <td class="tf-right tf-input"><button class="btn btn-sm btn-default" ng-click="removeLineItem(itm.AccountId)"><i class="fa fa-times-circle"><\/i> remove<\/button><\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n            <tfoot>\r\n                <tr>\r\n                    <td colspan="4" class="tf-right"><strong>Total:<\/strong><\/td>\r\n                    <td colspan="1" class="tf-right"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/td>\r\n                    <td role="presentation"><\/td>\r\n                <\/tr>\r\n            <\/tfoot>\r\n        <\/table>\r\n    <\/div>\r\n\r\n    <div class="tf-right">\r\n        <button ng-click="goBack()" type="button" class="btn btn-link">Back to selection<\/button>\r\n        <button ng-click="goNext()" type="button" class="btn btn-primary" id="paymentsSelectMethod">Select payment method<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n<\/div>');n.put("Payments-ReviewInvoices.html",'<div data-ng-controller="PaymentsReviewInvoicesController">\r\n\r\n    <div class="block-margin block-headroom">\r\n        <h2 class="block-margin-sm">Review your invoice payment{{currentPayment.SelectedLineItems.length == 1 ? \'\' : \'s\'}}<\/h2>\r\n        <p>You\'ll choose your payment method on the next screen.<\/p>\r\n    <\/div>\r\n\r\n    <div class="well cf" data-ng-show="!currentPayment.SelectedLineItems">\r\n        There are no items to display.\r\n    <\/div>\r\n\r\n    <div job-header details-only><\/div>\r\n\r\n    <div class="tf-right block-margin">\r\n        <button ng-click="goBack()" type="button" class="btn btn-link">Back to selection<\/button>\r\n        <button ng-click="goNext()" type="button" class="btn btn-primary">Select payment method<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n\r\n    <div class="table-responsive">\r\n        <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" data-ng-show="currentPayment.SelectedLineItems.length > 0 && reviewInvoicesLoaded == true">\r\n            <thead>\r\n                <tr data-table-headers><\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr data-ng-repeat="itm in currentPayment.SelectedLineItems">\r\n                    <td>{{ itm.DocumentDate | date : \'d MMM yyyy\' }}<\/td>\r\n                    <td>{{ itm.AccountId }}<\/td>\r\n                    <td>{{ itm.CsrReference }}<\/td>\r\n                    <td>{{ itm.DocumentType }}<\/td>\r\n                    <td>{{ itm.CustomerReference }}<\/td>\r\n                    <td class="tf-right">{{ itm.TotalDue | currency }}<\/td>\r\n                    <td class="tf-right">{{ itm.PaidNow | currency }}<\/td>\r\n                    <td class="tf-right tf-input"><button class="btn btn-sm btn-default" data-ng-click="removeLineItem(itm.CsrReference)"><i class="fa fa-times-circle"><\/i> remove<\/button><\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n            <tfoot>\r\n                <tr>\r\n                    <td colspan="3">{{currentPayment.SelectedLineItems.length}} payment{{currentPayment.SelectedLineItems.length > 1 ? \'s\' : \'\'}}<\/td>\r\n                    <td colspan="3" class="tf-right"><strong>Total:<\/strong><\/td>\r\n                    <td colspan="1" class="tf-right"><strong>{{ currentPayment.AmountInCents / 100 | currency }}<\/strong><\/td>\r\n                    <td role="presentation"><\/td>\r\n                <\/tr>\r\n            <\/tfoot>\r\n        <\/table>\r\n    <\/div>\r\n\r\n    <div class="tf-right">\r\n        <button ng-click="goBack()" type="button" class="btn btn-link">Back to selection<\/button>\r\n        <button ng-click="goNext()" type="button" class="btn btn-primary" id="paymentsSelectMethod">Select payment method<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n<\/div>');n.put("Payments-ReviewOrders.html",'<div ng-controller="PaymentsReviewOrdersController">\r\n\r\n    <div class="block-margin block-headroom">\r\n        <h2 class="block-margin-sm">Review your sales order payment{{currentPayment.SelectedLineItems.length == 1 ? \'\' : \'s\'}}<\/h2>\r\n        <p>You\'ll choose your payment method on the next screen.<\/p>\r\n    <\/div>\r\n\r\n    <div class="well cf" ng-show="!currentPayment.SelectedLineItems">\r\n        There are no items to display.\r\n    <\/div>\r\n\r\n    <div job-header details-only><\/div>\r\n\r\n    <div class="tf-right block-margin">\r\n        <button ng-click="goBack()" type="button" class="btn btn-link">Back to selection<\/button>\r\n        <button ng-click="goNext()" type="button" class="btn btn-primary">Select payment method<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n\r\n    <div class="table-responsive">\r\n        <table class="table table-striped table-hover table-row-click table-select-all table-loading-ind" ng-show="currentPayment.SelectedLineItems.length > 0">\r\n            <thead>\r\n                <tr table-headers><\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr ng-repeat="itm in currentPayment.SelectedLineItems">\r\n                    <td>{{ itm.DocumentDate | date : \'d MMM yyyy\' }}<\/td>\r\n                    <td>{{ itm.AccountId }}<\/td>\r\n                    <td>{{ itm.CsrReference }}<\/td>\r\n                    <td>{{ itm.CustomerReference }}<\/td>\r\n                    <td class="tf-block">{{ itm.Address }}<\/td>\r\n                    <td class="tf-right">{{ itm.TotalDue | currency }}<\/td>\r\n                    <td class="tf-right">{{ itm.AlreadyPaid | currency }}<\/td>\r\n                    <td class="tf-right">{{ itm.PaidNow | currency }}<\/td>\r\n                    <td class="tf-right tf-input"><button class="btn btn-sm btn-default" ng-click="removeLineItem(itm.CsrReference)"><i class="fa fa-times-circle"><\/i> remove<\/button><\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n            <tfoot>\r\n                <tr>\r\n                    <td colspan="7" class="tf-right">Total:<\/td>\r\n                    <td colspan="2">{{ currentPayment.AmountInCents / 100 | currency }}<\/td>\r\n                <\/tr>\r\n            <\/tfoot>\r\n        <\/table>\r\n    <\/div>\r\n\r\n    <div class="tf-right">\r\n        <button ng-click="goBack()" type="button" class="btn btn-link">Back to selection<\/button>\r\n        <button ng-click="goNext()" type="button" class="btn btn-primary" id="paymentsSelectMethod">Select payment method<i class="fa fa-lg fa-lnk-r fa-caret-right"><\/i><\/button>\r\n    <\/div>\r\n<\/div>');n.put("permalink-button.html",'<button class="btn btn-link btn-icon" type="button" ng-click="permalinkButton.share();" ng-disabled="permalinkButton.isDisabled === true"><i class="fa fa-fw fa-share-square-o"><\/i> Share<\/button>\r\n');n.put("permalink-prompt.html",'<div class="modal-content permalink" role="dialog">\r\n\r\n        <div class="modal-header">\r\n            <button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-click="$dismiss()"><span class="aria-hidden">&times;<\/span><\/button>\r\n            <h4 class="modal-title">Share this document<\/h4>\r\n        <\/div>\r\n\r\n        <div class="modal-body clearfix">\r\n            <div class="animate-appear-in vertical-align-top" ng-if="permalinkPrompt.showRegenerateLink">\r\n                <h4 class="text-success">\r\n                    <i class="fa fa-check m-t-n-10 m-b-10 m-r-10"><\/i> Your links have been regenerated\r\n                <\/h4>\r\n            <\/div>\r\n            <tabset>\r\n                <tab ng-if="permalinkPrompt.smsDetails !== undefined && permalinkPrompt.smsDetails.SmsText.length > 0" class="release-sms">\r\n                    <tab-heading><i class="fa fa-mobile"><\/i>SMS<span class="hidden-xs"> message<\/span><\/tab-heading>\r\n                    <form name="permalinkPrompt.sendSmsForm">\r\n                        <div class="permalink-label">\r\n                            <div class="alert alert-success" ng-show="permalinkPrompt.smsSent === true"><i class="fa fa-check"><\/i> SMS sent.<\/div>\r\n                            <div class="alert alert-danger" ng-show="permalinkPrompt.smsSent === false"><i class="fa fa-times"><\/i> We were unable to send the SMS, please try again or contact Connect support.<\/div>\r\n                            <p>Send a message with updates and a link to this document to any mobile phone number.<\/p>\r\n                        <\/div>\r\n                        <div class="row" ng-if="permalinkPrompt.SmsShareVersions.length > 0">\r\n                            <div class="col-md-4">\r\n                                <div class="form-group">\r\n                                    <label for="smsNumber">Mobile number<\/label>\r\n                                    <form-element-feedback form-element="permalinkPrompt.sendSmsForm.smsNumber"><\/form-element-feedback>\r\n                                    <input type="tel" id="smsNumber" name="smsNumber" required valid-mobile-number class="form-control" ng-model="permalinkPrompt.smsDetails.ContactNumber" />\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class="col-md-8">\r\n                                <div class="form-group">\r\n                                    <label for="smsVersion">Add lite order link?<\/label>\r\n                                    <select id="smsVersion" name="smsVersion" ng-options="smsversion.Version for smsversion in permalinkPrompt.SmsShareVersions" ng-change="permalinkPrompt.versionChanged()" required class="form-control" ng-model="permalinkPrompt.SmsVersion"><\/select>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div class="form-group" ng-if="permalinkPrompt.SmsShareVersions.length == 0">\r\n                            <label for="smsNumber">Mobile number<\/label>\r\n                            <form-element-feedback form-element="permalinkPrompt.sendSmsForm.smsNumber"><\/form-element-feedback>\r\n                            <input type="tel" id="smsNumber" name="smsNumber" required valid-mobile-number class="form-control" ng-model="permalinkPrompt.smsDetails.ContactNumber" />\r\n                        <\/div>\r\n\r\n\r\n                        <div class="form-group">\r\n                            <label for="smsText">Message<\/label>\r\n                            <pre id="smsText" name="smsText" ng-bind-html="permalinkPrompt.smsDetails.SmsText | linky :\'_blank\':{class: \'nofollow\'}"><\/pre>\r\n                        <\/div>\r\n                        <div class="row">\r\n                            <div class="col-xs-12 col-sm-6 col-sm-offset-3">\r\n                                <button type="button" class="btn btn-block btn-primary" ng-click="permalinkPrompt.sendSms()" ng-disabled="permalinkPrompt.sendingSms === true">{{ permalinkPrompt.sendingSms === true ? \'Sending SMS...\' : \'Send SMS\' }}<\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/form>\r\n                <\/tab>\r\n                <tab ng-if="permalinkPrompt.liteDeliveriesLinkUrl !== undefined && permalinkPrompt.showPublicLink === true">\r\n                    <tab-heading><i class="fa fa-globe"><\/i>Public<span class="hidden-xs"> link<\/span><\/tab-heading>\r\n                    <div>\r\n                        <div class="permalink-label">\r\n                            <div class="alert alert-success" ng-show="permalinkPrompt.elementCopied === \'lite-deliveries\'"><i class="fa fa-check"><\/i> Public link copied.<\/div>\r\n                            <p>Share this link with anyone not using Connect and they will be able to view the details of this document through any browser.<\/p>\r\n                        <\/div>\r\n                        <div class="form-group">\r\n                            <textarea id="liteDeliveriesUrl" class="form-control" readonly="readonly">{{permalinkPrompt.liteDeliveriesLinkUrl}}<\/textarea>\r\n                        <\/div>\r\n                        <div class="row">\r\n                            <div class="col-xs-12 col-sm-6 col-sm-offset-3">\r\n                                <button type="button" class="btn btn-block btn-primary" metrics-track="Documents/CopyPermalink/Documents/Single" metrics-track-data="permalinkPrompt.publicCopyTrackEventData" data-clipboard-text="{{permalinkPrompt.liteDeliveriesLinkUrl}}" data-clipboard-key="lite-deliveries">Copy public link<\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/tab>\r\n                <tab ng-if="permalinkPrompt.PublicPreviewLinks.length > 0 && permalinkPrompt.showPublicLink === true">\r\n                    <tab-heading><i class="fa fa-globe"><\/i>Public<span class="hidden-xs"> link<\/span><\/tab-heading>\r\n                    <div>\r\n                        <div class="permalink-label">\r\n                            <div class="alert alert-success" ng-show="permalinkPrompt.elementCopied === \'lite-orders\'">\r\n                                <i class="fa fa-check"><\/i> {{permalinkPrompt.version}} Public link copied.\r\n                            <\/div>\r\n                            <p>Share this link with anyone not using Connect and they will be able to view the details of this document through any browser.<\/p>\r\n                        <\/div>\r\n                        <div ng-repeat="item in permalinkPrompt.PublicPreviewLinks">\r\n                            <div class="row">\r\n                                <div class="col-xs-12">\r\n                                    <h5>{{item.Version}}<\/h5>\r\n                                    <div class="form-group">\r\n                                        <textarea class="form-control" readonly="readonly">{{item.Url}}<\/textarea>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6 col-sm-offset-3">\r\n                                    <button type="button" class="btn btn-block btn-primary" metrics-track="Documents/CopyPermalink/Documents/Single" metrics-track-data="permalinkPrompt.publicCopyTrackEventData" data-clipboard-text="{{item.Url}}" data-clipboard-key="lite-orders" data-clipboard-version="{{item.Version}}">Copy public link<\/button>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/tab>\r\n                <tab ng-if="permalinkPrompt.showPrivateLink === true">\r\n                    <tab-heading><i class="fa fa-user"><\/i>Private<span class="hidden-xs"> link<\/span><\/tab-heading>\r\n                    <div class="permalink-label">\r\n                        <div class="alert alert-success" ng-show="permalinkPrompt.elementCopied === \'permalink\'"><i class="fa fa-check"><\/i> Private link copied.<\/div>\r\n                        <p>Share this link with anyone using Connect and they will be able to view this document only when they are logged in.<\/p>\r\n                    <\/div>\r\n                    <div class="form-group">\r\n                        <textarea id="shortenedUrl" class="form-control" readonly="readonly">{{permalinkPrompt.targetUrl}}<\/textarea>\r\n                    <\/div>\r\n                    <div class="row">\r\n                        <div class="col-xs-12 col-sm-6 col-sm-offset-3">\r\n                            <button type="button" class="btn btn-block btn-primary" metrics-track="Documents/CopyPermalink/Documents/Single" metrics-track-data="permalinkPrompt.privateCopyTrackEventData" data-clipboard-text="{{permalinkPrompt.targetUrl}}" data-clipboard-key="permalink">Copy private link<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/tab>\r\n            <\/tabset>\r\n            <div class="clearfix"><\/div>\r\n\r\n        <\/div>\r\n\r\n<\/div>\r\n');n.put("permalink.html",'<div><div class="loading loading-page"><i><\/i> Loading permalink&hellip;<\/div><\/div>\r\n');n.put("profileFilters.html",'<div>\r\n    <div class="layout-cells block-margin-sm">\r\n        \r\n        <div class="form-group">\r\n            <button class="btn btn-primary" ng-click="addCondition()">\r\n                <span>Add Filter<\/span>\r\n            <\/button>\r\n        <\/div>\r\n\r\n        <div class="layout-row">\r\n\r\n            <div ng-repeat="filter in filters">\r\n             <!--   <div class="layout-cell">\r\n                    <select class="form-control" ng-model="filter.LogicalOperator">\r\n                        <option ng-repeat="logicalType in logicalTypes" value="{{logicalType.name}}">{{logicalType.name}}<\/option>\r\n                    <\/select>\r\n                <\/div>-->\r\n                <div class="layout-cell">\r\n                    <select class="form-control" ng-model="filter.SearchOperatorType">\r\n                        <option ng-repeat="searchOperatorType in searchOperatorTypes" value="{{searchOperatorType.name}}">{{searchOperatorType.name}}<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class="layout-cell">\r\n                    <select class="form-control" ng-change="filter.SearchValue=\'\'" ng-model="filter.SearchType">\r\n                        <option value="{{filterType.name}}" data-ng-repeat="filterType in filterTypes">\r\n                            {{filterType.name}}\r\n                        <\/option>\r\n                    <\/select>\r\n                <\/div>\r\n\r\n                <!-- Profile Type Filter -->\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'Profile Type\'">\r\n                    <select ng-options="profileType.Name as profileType.Name for profileType in profileTypes" class="form-control" ng-model="filter.SearchValue"><\/select>\r\n                <\/div>\r\n\r\n                <!-- SBU Filter -->\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'SBU\'">\r\n                    <input type="text" ng-model="filter.SearchValue" class="form-control col-xs-4" placeholder="e.g. 4200, 4100, 4000">\r\n                <\/div>\r\n                \r\n                <!-- Account Id Filter -->\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'Linked Accounts\'">\r\n                    <textarea rows="3" cols="40" maxlength="3000" ng-model="filter.SearchValue" class="form-control col-xs-4" placeholder="Comma seperated Account Ids, with a maximum length 3000 characters"><\/textarea>\r\n                <\/div>\r\n                \r\n                <!-- Permissions Filter -->\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'Permissions\'">\r\n                    <select ng-options="permission.Name as permission.Name for permission in permissions" class="form-control" ng-model="filter.SearchValue"><\/select>\r\n                <\/div>\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'Permissions\'">\r\n                    <select ng-options="permissionCrudType.name as permissionCrudType.name for permissionCrudType in permissionCrudTypes" class="form-control" ng-model="filter.PermissionAction"><\/select>\r\n                <\/div>\r\n                \r\n                <!-- Sales Offic Filter -->\r\n                <div class="layout-cell" ng-if="filter.SearchType == \'Sales Office\'">\r\n                    <input type="text" ng-model="filter.SearchValue" class="form-control col-xs-4" placeholder="e.g. PN, GW, BQ, etc">\r\n                <\/div>\r\n\r\n                <div class="layout-cell">\r\n                    <button ng-click="removeCondition($index)" class="btn btn-danger">X<\/button>\r\n                <\/div>\r\n            <\/div>\r\n   \r\n         <\/div>\r\n    <\/div>\r\n<\/div>');n.put("managePlants.html",'<div class="container" auth-key="Admin/ManagePlants" ng-controller="ManagePlantsController as ctrl" ng-cloak list-view-lite>\r\n\r\n    <div ng-if="ctrl.modalOpen">\r\n        <div class="modal-large-overlay"><\/div>\r\n        <div class="modal-large-content">\r\n            <div class="container" ng-cloak>\r\n                <div class="row">\r\n                    <div class="doc-view col-xs-12">\r\n                        <div class="row">\r\n                            <!-- TITLE BAR -->\r\n                            <div class="doc-titlebar col-xs-12">\r\n                                <small class="doc-titlebar-type"><\/small><br>\r\n                                <h1 class="doc-titlebar-title">CREATE {{ ctrl.view == 0 ? \'PLANT E-MAIL\' : ctrl.view == 1 ? \'PICKUP PLANT\' : \'FAILED ORDER E-MAIL\'}}<\/h1>\r\n\r\n                                <a class="doc-titlebar-close" href="javascript:;" ng-click="ctrl.closeModal()"><i class="fa fa-lg fa-close"><\/i><span class="sr-only">Close viewer<\/span><\/a>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div ng-if="ctrl.view === 0">\r\n                            <div class="row plant-details">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-PlantId">Plant Id<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.PlantId" id="field-PlantId" name="PlantId" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Bu">BU*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SbuCode" id="field-SbuCode" name="SbuCode" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-SalesOffice">Sales Office<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SalesOffice" id="field-SalesOffice" name="SalesOffice" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-SalesGroup">Sales Group<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SalesGroup" id="field-SalesGroup" name="SalesGroup" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label class="label plant-checkbox-label" for="field-forDelivery">\r\n                                            <input id="field-forDelivery" class="checkbox-2x" type="checkbox" ng-model="ctrl.currentPlant.ForDelivery" value="false" />\r\n                                            <i class="fa fa-lg fa-fw fa-truck fa-flip-horizontal"><\/i>\r\n                                            For Delivery\r\n                                        <\/label>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label class="label plant-checkbox-label" for="field-forPickup">\r\n                                            <input id="field-forPickup" class="checkbox-2x" type="checkbox" ng-model="ctrl.currentPlant.ForPickup" value="false" />\r\n                                            <i class="fa fa-lg fa-fw fa-shopping-cart"><\/i>\r\n                                            For Pickup\r\n                                        <\/label>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-9 col-md-6">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Emails">Emails<\/label><br />\r\n                                        <input type="text" class="form-control add-email-field" ng-model="ctrl.newEmail" id="field-Emails" name="Emails" />\r\n                                        <a href="#" data-auth="c" ng-click="ctrl.addPlantEmailItem()" class="btn btn-success add-email-button">Add E-mail<\/a>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="table-responsive flush">\r\n                                <table class="table table-striped table-hover plants-emails-table">\r\n                                    <tbody>\r\n                                        <tr ng-repeat="itm in ctrl.currentPlant.Emails.split(\',\')">\r\n                                            <td class="plant-email-item">{{ itm }}<\/td>\r\n\r\n                                            <!-- ACTIONS -->\r\n                                            <td>\r\n                                                <div class="doc-actions">\r\n                                                    <div class="btn-group">\r\n                                                        <!-- Delete -->\r\n                                                        <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.deletePlantEmailItem(itm)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    <\/tbody>\r\n                                <\/table>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-12 col-md-12">\r\n                                    <a data-auth="c" ng-click="ctrl.savePlantEmail()" class="btn btn-success pull-right">Save<\/a>\r\n                                    <a ng-click="ctrl.closeModal()" class="btn btn-danger btn-cancel pull-right">Cancel<\/a>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div ng-if="ctrl.view === 1">\r\n                            <div class="row plant-details">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-PlantId">Plant Id*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.PlantId" id="field-PlantId" name="PlantId" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-PlantName">Plant Name*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.PlantName" id="field-PlantName" name="PlantName" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Bu">BU*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SbuCode" id="field-SbuCode" name="SbuCode" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-SalesOffice">Sales Org<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SalesOffice" id="field-SalesOffice" name="SalesOrg" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row plant-details">\r\n                                <div class="col-xs-12 col-sm-9 col-md-6">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Address1">Address*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Address1" id="field-Address1" name="Address1" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Suburb">Suburb*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Suburb" id="field-Suburb" name="Suburb" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Postcode">Postcode*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Postcode" id="field-Postcode" name="Postcode" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Region">State*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Region" id="field-Region" name="Region" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-PhoneNumber">Phone Number<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.CallForStockPhoneNumber" id="field-PhoneNumber" name="PhoneNumber" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row plant-details">\r\n                                <div class="col-xs-12 col-sm-9 col-md-6">\r\n                                    <div class="form-group">\r\n                                        <label for="field-IanaTimeZoneId">Iana TimeZone Id*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.IanaTimeZoneId" id="field-IanaTimeZoneId" name="IanaTimeZoneId" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Latitude">Latitude*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Latitude" id="field-Latitude" name="Latitude" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Longitude">Longitude*<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.Longitude" id="field-Longitude" name="Longitude" validator="required" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label class="label plant-checkbox-label" for="field-clickAndCollectEnabled">\r\n                                            <input id="field-clickAndCollectEnabled" class="checkbox-2x" type="checkbox" ng-model="ctrl.currentPlant.ClickAndCollectEnabled" value="false" />\r\n                                            <i class="fa fa-lg fa-fw fa-shopping-cart"><\/i>\r\n                                            Click & Collect\r\n                                        <\/label>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label class="label plant-checkbox-label" for="field-availableForDelivery">\r\n                                            <input id="field-availableForDelivery" class="checkbox-2x" type="checkbox" ng-model="ctrl.currentPlant.AvailableForDelivery" value="false" />\r\n                                            <i class="fa fa-lg fa-fw fa-truck fa-flip-horizontal"><\/i>\r\n                                            Delivery\r\n                                        <\/label>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-12 col-md-12">\r\n                                    <a data-auth="c" ng-click="ctrl.savePickupPlant()" class="btn btn-success pull-right">Save<\/a>\r\n                                    <a ng-click="ctrl.closeModal()" class="btn btn-danger btn-cancel pull-right">Cancel<\/a>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <div ng-if="ctrl.view === 2">\r\n                            <div class="row plant-details">\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-PlantId">Plant Id<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.PlantId" id="field-PlantId" name="PlantId" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-sbuCode">SBU Code<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SbuCode" id="field-SbuCode" name="SbuCode" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div class="col-xs-12 col-sm-6 col-md-3">\r\n                                    <div class="form-group">\r\n                                        <label for="field-SalesOffice">Sales Office<\/label>\r\n                                        <input type="text" class="form-control" ng-model="ctrl.currentPlant.SalesOffice" id="field-SalesOffice" name="SalesOffice" />\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-9 col-md-6">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Emails">To Emails<\/label><br />\r\n                                        <input type="text" class="form-control add-email-field" ng-model="ctrl.newEmail" id="field-ToEmails" name="ToEmails" />\r\n                                        <a href="#" data-auth="c" ng-click="ctrl.addFailedOrderToEmailItem()" class="btn btn-success add-email-button">Add To E-mail<\/a>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="table-responsive flush">\r\n                                <table class="table table-striped table-hover plants-emails-table">\r\n                                    <tbody>\r\n                                        <tr ng-repeat="itm in ctrl.currentPlant.ToEmails.split(\',\')">\r\n                                            <td class="plant-email-item">{{ itm }}<\/td>\r\n\r\n                                            <!-- ACTIONS -->\r\n                                            <td>\r\n                                                <div class="doc-actions">\r\n                                                    <div class="btn-group">\r\n                                                        <!-- Delete -->\r\n                                                        <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.deleteFailedOrderToEmailItem(itm)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    <\/tbody>\r\n                                <\/table>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-9 col-md-6">\r\n                                    <div class="form-group">\r\n                                        <label for="field-Emails">CC Emails<\/label><br />\r\n                                        <input type="text" class="form-control add-email-field" ng-model="ctrl.newCcEmail" id="field-CcEmails" name="CcEmails" />\r\n                                        <a href="#" data-auth="c" ng-click="ctrl.addFailedOrderCcEmailItem()" class="btn btn-success add-email-button">Add CC E-mail<\/a>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n\r\n                            <div class="table-responsive flush">\r\n                                <table class="table table-striped table-hover plants-emails-table">\r\n                                    <tbody>\r\n                                        <tr ng-repeat="itm in ctrl.currentPlant.CCEmails.split(\',\')">\r\n                                            <td class="plant-email-item">{{ itm }}<\/td>\r\n\r\n                                            <!-- ACTIONS -->\r\n                                            <td>\r\n                                                <div class="doc-actions">\r\n                                                    <div class="btn-group">\r\n                                                        <!-- Delete -->\r\n                                                        <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.deleteFailedOrderCcEmailItem(itm)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                                    <\/div>\r\n                                                <\/div>\r\n                                            <\/td>\r\n                                        <\/tr>\r\n                                    <\/tbody>\r\n                                <\/table>\r\n                            <\/div>\r\n\r\n                            <div class="row m-t-15">\r\n                                <div class="col-xs-12 col-sm-12 col-md-12">\r\n                                    <a data-auth="c" ng-click="ctrl.saveFailedOrderEmail()" class="btn btn-success pull-right">Save<\/a>\r\n                                    <a ng-click="ctrl.closeModal()" class="btn btn-danger btn-cancel pull-right">Cancel<\/a>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12">\r\n\r\n            <div class="row block-margin-sm">\r\n                <div class="col-xs-6">\r\n                    <h1 class="flush">Manage Plants<\/h1>\r\n                <\/div>\r\n                <div class="col-xs-6 tf-right">\r\n                    <a href="#" data-auth="c" ng-if="ctrl.view === 0" ng-click="ctrl.openCreatePlantEmail()" class="btn btn-success">Create Plant E-mail<\/a>\r\n                    <a href="#" data-auth="c" ng-if="ctrl.view === 1" ng-click="ctrl.openCreatePickupPlant()" class="btn btn-success">Create Pickup Plant<\/a>\r\n                    <a href="#" data-auth="c" ng-if="ctrl.view === 2" ng-click="ctrl.openCreateFailedOrderEmail()" class="btn btn-success">Create Failed Order E-mail<\/a>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="row">\r\n                <div class="col-xs-12">\r\n                    <p class="lead">Select a plant below to update or delete<\/p>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="connect-panel clear">\r\n                <ul class="nav nav-tabs">\r\n                    <li ng-class="{ \'active\' : ctrl.view === 0 }">\r\n                        <a href="#" ng-click="ctrl.changeView(0)"><i class="fa fa-lg fa-address-book"><\/i> Plant E-mails<\/a>\r\n                    <\/li>\r\n                    <li ng-class="{ \'active\' : ctrl.view === 1 }">\r\n                        <a href="#" ng-click="ctrl.changeView(1)"><i class="fa fa-lg fa-industry"><\/i> Pickup Plants<\/a>\r\n                    <\/li>\r\n                    <li ng-class="{ \'active\' : ctrl.view === 2 }">\r\n                        <a href="#" ng-click="ctrl.changeView(2)"><i class="fa fa-lg fa-envelope-square"><\/i> Failed Order E-mails<\/a>\r\n                    <\/li>\r\n                <\/ul>\r\n\r\n                <div class="clr" ng-show="ctrl.view === 0">\r\n                    <!-- PLANTEMAILS LIST -->\r\n                    <!-- STATE: LOADING -->\r\n                    <page-loading-message message="Loading Plant Emails" ng-show="list.data.loading"><\/page-loading-message>\r\n\r\n                    <!-- STATE: EMPTY -->\r\n                    <div ng-if="!list.data.loading && (!list.items || !list.items.length)">\r\n\r\n                        <!-- EMPTY: SHOW ALL -->\r\n                        <page-empty-message feature="document"\r\n                                            title="No plant e-mails"\r\n                                            message="You can create a new Plant E-mail with the \'Create Plant E-mail\' button">\r\n                        <\/page-empty-message>\r\n                    <\/div>\r\n\r\n                    <!-- STATE: LOADED -->\r\n                    <div class="table-responsive flush" ng-if="!list.data.loading">\r\n                        <table class="table table-striped table-hover table-loading-ind plants-table" ng-show="list.items.length">\r\n                            <thead>\r\n                                <tr table-headers><\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr ng-repeat="itm in list.items">\r\n                                    <td>{{ itm.PlantId }}<\/td>\r\n                                    <td>{{ itm.SbuCode }}<\/td>\r\n                                    <td>{{ itm.SalesOffice}}<\/td>\r\n                                    <td>{{ itm.SalesGroup}}<\/td>\r\n                                    <td>{{ itm.Emails.substring(0, 50) }} {{ itm.Emails.length > 49 ? \'&hellip;\' : \'\'}}<\/td>\r\n\r\n                                    <td class="tf-center"><input type="checkbox" disabled ng-model="itm.ForDelivery" /><\/td>\r\n                                    <td class="tf-center"><input type="checkbox" disabled ng-model="itm.ForPickup" /><\/td>\r\n\r\n                                    <!-- ACTIONS -->\r\n                                    <td>\r\n                                        <div class="doc-actions">\r\n                                            <div class="btn-group">\r\n                                                <!-- Edit-->\r\n                                                <button type="button" class="btn btn-default plant-actions-edit hidden-xs" ng-click="ctrl.editPlantEmail(itm.Id)" aria-label="Edit" tooltip="Edit" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-pencil"><\/i><\/button>\r\n\r\n                                                <!-- Delete -->\r\n                                                <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.confirmDeletePlantEmail(itm.Id)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class="clr" ng-show="ctrl.view === 1">\r\n                    <!-- PICKUPLANTS LIST -->\r\n                    <!-- STATE: LOADING -->\r\n                    <page-loading-message message="Loading Pickup Plants" ng-show="list.data.loading"><\/page-loading-message>\r\n\r\n                    <!-- STATE: EMPTY -->\r\n                    <div ng-if="!list.data.loading && (!list.items || !list.items.length)">\r\n\r\n                        <!-- EMPTY: SHOW ALL -->\r\n                        <page-empty-message feature="document"\r\n                                            title="No pickup plants"\r\n                                            message="You can create new Pickup Plants with the \'Create Pickup Plant\' button">\r\n                        <\/page-empty-message>\r\n                    <\/div>\r\n\r\n                    <!-- STATE: LOADED -->\r\n                    <div class="table-responsive flush" ng-if="!list.data.loading">\r\n                        <table class="table table-striped table-hover table-loading-ind plants-table" ng-show="list.items.length">\r\n                            <thead>\r\n                                <tr table-headers><\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr ng-repeat="itm in list.items">\r\n                                    <td>{{ itm.PlantId }}<\/td>\r\n                                    <td>{{ itm.PlantName }}<\/td>\r\n                                    <td>{{ itm.SbuCode }}<\/td>\r\n                                    <td>{{ itm.SalesOrg}}<\/td>\r\n                                    <td>{{ itm.Address1}} {{ itm.Suburb }}, {{ itm.Region }}<\/td>\r\n\r\n                                    <td class="tf-center"><input type="checkbox" disabled ng-model="itm.ClickAndCollectEnabled" /><\/td>\r\n                                    <td class="tf-center"><input type="checkbox" disabled ng-model="itm.AvailableForDelivery" /><\/td>\r\n\r\n                                    <!-- ACTIONS -->\r\n                                    <td>\r\n                                        <div class="doc-actions">\r\n                                            <div class="btn-group">\r\n                                                <!-- Edit -->\r\n                                                <button type="button" class="btn btn-default plant-actions-edit hidden-xs" ng-click="ctrl.editPickupPlant(itm.Id)" aria-label="Edit" tooltip="Edit" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-pencil"><\/i><\/button>\r\n\r\n                                                <!-- Delete -->\r\n                                                <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.confirmDeletePickupPlant(itm.Id)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class="clr" ng-show="ctrl.view === 2">\r\n                    <!-- FAILED ORDER EMAIL LIST-->\r\n                    <!-- STATE: LOADING -->\r\n                    <page-loading-message message="Loading Failed Order E-mails" ng-show="list.data.loading"><\/page-loading-message>\r\n\r\n                    <!-- STATE: EMPTY -->\r\n                    <div ng-if="!list.data.loading && (!list.items || !list.items.length)">\r\n                        <!-- EMPTY: SHOW ALL -->\r\n                        <page-empty-message feature="document"\r\n                                            title="No failed order e-mails"\r\n                                            message="You can create new Failed Order E-mails with the \'Create Failed Order E-mail\' button">\r\n                        <\/page-empty-message>\r\n                    <\/div>\r\n\r\n                    <!-- STATE: LOADED -->\r\n                    <div class="table-responsive flush" ng-if="!list.data.loading">\r\n                        <table class="table table-striped table-hover table-loading-ind plants-table" ng-show="list.items.length">\r\n                            <thead>\r\n                                <tr table-headers><\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr ng-repeat="itm in list.items">\r\n                                    <td>{{ itm.PlantId }}<\/td>\r\n                                    <td>{{ itm.SbuCode }}<\/td>\r\n                                    <td>{{ itm.SalesOffice }}<\/td>\r\n                                    <td>{{ itm.ToEmails }}<\/td>\r\n                                    <td>{{ itm.CCEmails }}<\/td>\r\n\r\n                                    <!-- ACTIONS -->\r\n                                    <td>\r\n                                        <div class="doc-actions">\r\n                                            <div class="btn-group">\r\n                                                <!-- Edit -->\r\n                                                <button type="button" class="btn btn-default plant-actions-edit hidden-xs" ng-click="ctrl.editFailedOrderEmail(itm.Id)" aria-label="Edit" tooltip="Edit" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-pencil"><\/i><\/button>\r\n\r\n                                                <!-- Delete -->\r\n                                                <button type="button" class="btn btn-default plant-actions-delete hidden-xs" ng-click="ctrl.confirmDeleteFailedOrderEmail(itm.Id)" aria-label="Delete" tooltip="Delete" tooltip-placement="top" tooltip-popup-delay="300"><i class="fa fa-trash"><\/i><\/button>\r\n                                            <\/div>\r\n                                        <\/div>\r\n\r\n                                    <\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>');n.put("modalImage.html",'<div class="modal-image">\r\n    <div class="modal-header text-muted">\r\n        {{imageDescription}}\r\n        <button ng-click="$dismiss()" class="close pull-right" aria-hidden="true">&times;<\/button>\r\n        <div class="clearfix"><\/div>\r\n    <\/div>\r\n\r\n    <div class="modal-body">\r\n        <img ng-src="{{imageSrc}}" alt="{{imageDescription}}">\r\n    <\/div>\r\n<\/div>\r\n');n.put("product-super-search.html",'<div class="angucomplete-holder" ng-class="{\'angucomplete-dropdown-visible\': showDropdown}">\r\n    <div class="input-group input-group-lg">\r\n        <input ng-model="searchStr"\r\n               id="item-super-search-input"\r\n               ng-disabled="disableInput"\r\n               type="text"\r\n               placeholder="{{placeholder}}"\r\n               ng-focus="onFocusHandler()"\r\n               class="{{inputClass}}"\r\n               ng-focus="resetHideResults()"\r\n               ng-blur="hideResults($event)"\r\n               autocapitalize="off"\r\n               autocorrect="off"\r\n               autocomplete="off"\r\n               maxlength="40"\r\n               ng-keydown="inputChangeHandler(searchStr)" />\r\n        <span class="input-group-btn">\r\n            <button id="pricelist-search-btn" type="submit" class="btn btn-default btn-white"><i class="fa fa-fw fa-search"><\/i><\/button>\r\n        <\/span>\r\n    <\/div>\r\n    <div class="angucomplete-dropdown" ng-show="showDropdown" id="{{id}}_dropdown">\r\n        <div class="angucomplete-searching" ng-show="searching"><span class="loading loading-inline"><i><\/i><\/span> Loading suggestions<\/div>\r\n        <div class="angucomplete-searching" ng-show="!searching && !$parent.tooManyResults && (!results || results.length == 0)" ng-bind="textNoResults"><\/div>\r\n        <div class="angucomplete-row" ng-repeat="result in results" ng-click="selectResult(result)" ng-mouseenter="hoverRow($index)" ng-class="{\'angucomplete-selected-row\': $index == currentIndex}">\r\n            <a class="pull-right" href="javascript:;" ng-if="result.originalObject.canDelete" ng-click="deleteResult(result, true, $event)"><i class="fa fa-lg fa-close text-muted"><\/i><span class="sr-only">Delete {{result.title}} from your suggested results<\/span><\/a>\r\n            <div ng-if="imageField && result.image && result.image != \'\'" class="angucomplete-image-holder">\r\n                <img ng-if="result.image && result.image != \'\'" ng-src="{{result.image}}" class="angucomplete-image" />\r\n            <\/div>\r\n            <div class="angucomplete-title text-capitalize fs-16" ng-bind-html="result.title" ng-class="{\'m-l-1\': !imageField || !result.image || result.image == \'\'}"><\/div>\r\n            <div ng-if="result.description && result.description != \'\'" class="angucomplete-description"><small ng-bind-html="result.description"><\/small><\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("products.html",'<div class="container-fluid" ng-controller="ProductsV2Controller as pricelist" list-layout="products"\r\n    data-tour="tourProducts" auth-key="Customer/ProductList">\r\n\r\n    <!-- HEADER -->\r\n    <div class="row">\r\n\r\n        <!-- ACCOUNT -->\r\n        <div class="col-xs-12 col-md-3">\r\n            <div class="form-group">\r\n                <single-account-selector />\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <span ng-if="pricelist.suggestionSelected.originalObject.custom">\r\n            You selected a custom country <span\r\n                class="bold-span">{{pricelist.suggestionSelected.originalObject.name}}<\/span>\r\n        <\/span>\r\n        <!-- SEARCH -->\r\n        <form class="col-xs-9 col-sm-7 col-md-5" ng-submit="pricelist.goToSearch()" ng-hide="pricelist.excludedState"\r\n            ng-style="{\'margin-top: 20px\' : pricelist.stockAvailabilityEnabled}">\r\n            <div class="form-group form-group-relative-size">\r\n                <label for="pricelistSearchKeywords" class="sr-only">Product search<\/label>\r\n                <!-- End search box -->\r\n\r\n                <angucomplete-alt id="pricelistSearchKeywords2" placeholder="Find products" pause="400" minlength="0"\r\n                    selected-object="pricelist.suggestionSelected" deleted-object="pricelist.suggestionDeleted"\r\n                    remote-url="api/customerproducts/suggest"\r\n                    remote-url-request-formatter="pricelist.productSearchApiFn"\r\n                    remote-url-response-formatter="pricelist.productSearchResponseFn" remote-url-data-field="Items"\r\n                    search-fields="Code,Description,Group,MainGroup,SubGroup" title-field="SearchTerm"\r\n                    description-field="SearchTermDescription" match-class="search-highlight" image-field="ImageAssetUri"\r\n                    input-class="form-control" template-url="product-super-search.html"\r\n                    input-changed="pricelist.searchChanged" initial-value="pricelist.searchKeywords" can-submit="true"\r\n                    on-submit="pricelist.goToSearch" can-delete="true" text-no-results="No suggestions" />\r\n            <\/div>\r\n        <\/form>\r\n\r\n        <!-- CAT TOGGLE / TOOLS / DOWNLOAD -->\r\n        <div class="form-group form-group-relative-size col-xs-3 visible-xs-block" ng-hide="pricelist.excludedState">\r\n            <button id="products-category-btn" class="btn btn-default btn-lg btn-white btn-block"\r\n                ng-if="(pricelist.isSearching) ||  pricelist.productsReloading === true"\r\n                ng-click="pricelist.showFilterCategoryModal()">\r\n                <i class="fa fa-fw fa-filter"><\/i> <span class="btn-label">Filters <span\r\n                        ng-if="pricelist.numberOfCategoryFilters>0">({{pricelist.numberOfCategoryFilters}})<\/span><\/span>\r\n            <\/button>\r\n            <button id="products-category-btn" class="btn btn-default btn-lg btn-white btn-block collapsed"\r\n                data-toggle="collapse" data-target="#cat-menu" ng-if="!pricelist.isSearching">\r\n                <i class="fa fa-fw fa-folder-open collapse-off"><\/i><i class="fa fa-fw fa-folder collapse-on"><\/i> <span\r\n                    class="btn-label">Categories<\/span>\r\n            <\/button>\r\n        <\/div>\r\n\r\n        <!-- STOCK AVAILABILITY -->\r\n        <div class="col-md-offset-0 col-xs-12 col-sm-5 col-md-4 stock-availability-container" auth-key="Customer/Atp"\r\n            ng-if="pricelist.stockAvailability.stockAvailabilityEnabled == true && !pricelist.excludedState"\r\n            ng-hide="(!pricelist.stockAvailability.enableStoreSelector && pricelist.stockAvailability.selectedStore == undefined)">\r\n            <div class="row hidden-sm hidden-md hidden-lg">\r\n                <div class="col-xs-9">\r\n                    <select id="field-selected-store-mobile"\r\n                        class="form-control display-inline stock-availability-store-dropdown"\r\n                        ng-model="pricelist.stockAvailability.selectedStore" ng-change="pricelist.selectedStore()"\r\n                        ng-disabled="!pricelist.stockAvailability.enableStoreSelector">\r\n                        <option value="" disabled selected hidden>Select Store<\/option>\r\n                        <optgroup ng-repeat="(key, value) in pricelist.stockAvailability.stores" label="{{key}}">\r\n                            <option ng-repeat="store in pricelist.stockAvailability.stores[key] | orderBy : \'Name\'"\r\n                                value="{{store.Id}}">{{store.Name}}<\/option>\r\n                        <\/optgroup>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class="col-xs-3">\r\n                    <button id="check-stock-mobile" ng-disabled="!pricelist.stockAvailability.getStockButtonEnabled"\r\n                        ng-click="pricelist.checkStockAvailability(null)"\r\n                        class="btn btn-success btn-sm btn-check-stock-availability display-inline stock-availability-check-stock-button"\r\n                        metrics-track="Products: Store Stock Check"\r\n                        metrics-track-data="{ type: \'category\', level1: pricelist.selectedCat.level1.Description, level2: pricelist.selectedCat.level2.Description, level3: pricelist.selectedCat.Description, AccountId: pricelist.account.AccountId, sbuCode: pricelist.account.SbuCode, selectedStore: pricelist.stockAvailability.selectedStore, keywords: pricelist.searchKeywords }">\r\n                        Check Stock\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n            <div class="display-inline hidden-xs">\r\n                <select id="field-selected-store" class="form-control display-inline stock-availability-store-dropdown"\r\n                    ng-model="pricelist.stockAvailability.selectedStore" ng-change="pricelist.selectedStore()"\r\n                    ng-disabled="!pricelist.stockAvailability.enableStoreSelector">\r\n                    <option value="" disabled selected hidden>Select Store<\/option>\r\n                    <optgroup ng-repeat="(key, value) in pricelist.stockAvailability.stores" label="{{key}}">\r\n                        <option ng-repeat="store in pricelist.stockAvailability.stores[key] | orderBy : \'Name\'"\r\n                            value="{{store.Id}}">{{store.Name}}<\/option>\r\n                    <\/optgroup>\r\n                <\/select>\r\n                <button id="check-stock" ng-disabled="!pricelist.stockAvailability.getStockButtonEnabled"\r\n                    ng-click="pricelist.checkStockAvailability(null)"\r\n                    class="btn btn-success btn-sm btn-check-stock-availability display-inline stock-availability-check-stock-button"\r\n                    metrics-track="Products: Store Stock Check"\r\n                    metrics-track-data="{ type: \'category\', level1: pricelist.selectedCat.level1.Description, level2: pricelist.selectedCat.level2.Description, level3: pricelist.selectedCat.Description, AccountId: pricelist.account.AccountId, sbuCode: pricelist.account.SbuCode, selectedStore: pricelist.stockAvailability.selectedStore, keywords: pricelist.searchKeywords }">\r\n                    Check Stock\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <!-- PRICING EXCLUDED MSG -->\r\n    <div class="panel" ng-show="pricelist.excludedState">\r\n        <div class="well well-empty">\r\n            <p class="lead lead-flush">Pricing unavailable for this account<\/p>\r\n            <p>Please contact your CSR representative for pricing on this account.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- MAIN -->\r\n    <div class="row" ng-hide="pricelist.excludedState">\r\n\r\n        <!-- CAT MENU -->\r\n        <div class="col-xs-12 col-sm-4 col-md-3 collapse in" id="cat-menu">\r\n\r\n            <!-- QUICKPICKS MENU -->\r\n            <div class="cat-menu"\r\n                ng-show="!(pricelist.isSearching && pricelist.products.length) && pricelist.productsReloading !== true">\r\n                <h2>Quick picks<\/h2>\r\n                <ul class="cat-menu-list">\r\n                    <li class="cat-menu-item">\r\n                        <a ui-sref="app.productListV2.acc({accId: pricelist.account.AccountId})"\r\n                            metrics-track="Products/Search/Products/Plural"\r\n                            metrics-track-data="{ type: \'quickPicks.mostOrdered\', accountId: pricelist.account.AccountId }"><i\r\n                                class="fa fa-fw fa-lg fa-bar-chart"><\/i> <span class="cat-menu-item-desc">Most\r\n                                ordered<\/span><\/a>\r\n                    <\/li>\r\n                    <li class="cat-menu-item fx-list-fade"\r\n                        ng-repeat="starredCategory in pricelist.starredCategories track by starredCategory.Id">\r\n                        <a ng-click="pricelist.selectCategoryById(starredCategory.Id)"\r\n                            ng-href="{{starredCategory.categoryUrl}}" metrics-track="Products/Search/Products/Plural"\r\n                            metrics-track-data="{ type: \'quickPicks.categoryFavourite\', accountId: pricelist.account.AccountId, categoryId: starredCategory.Id, level1: starredCategory.level1.Description, level2: starredCategory.level2.Description, level3: starredCategory.Description }">\r\n                            <i class="fa fa-fw fa-lg fa-star"><\/i> <span\r\n                                class="cat-menu-item-desc">{{starredCategory.level1.Description}} <i\r\n                                    class="fa fa-fw fa-angle-right"><\/i> {{starredCategory.level2.Description}}\r\n                                <strong>{{starredCategory.Description}}<\/strong><\/span>\r\n                        <\/a>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n\r\n            <!-- CATEGORIES MENU -->\r\n            <div class="cat-menu"\r\n                ng-show="!(pricelist.isSearching && pricelist.products.length) && pricelist.productsReloading !== true">\r\n                <h2>Categories<\/h2>\r\n                <div ng-show="!pricelist.hierarchy.length" class="loading"><i><\/i><\/div>\r\n                <ul ng-show="pricelist.hierarchy.length" class="cat-menu-list">\r\n                    <!-- LEVEL 1 -->\r\n                    <li ng-repeat="level1 in pricelist.hierarchy" class="cat-menu-item">\r\n                        <button ng-if="!level1.LevelTwo.length">{{level1.HierarchyDetails.Description | titleCase:\r\n                            true}}<\/button>\r\n\r\n                        <button ng-if-start="level1.LevelTwo.length" data-toggle="collapse"\r\n                            data-target="#cat-{{level1.HierarchyDetails.Id}}"\r\n                            data-parent="#cat-menu">{{level1.HierarchyDetails.Description | titleCase: true}} <span\r\n                                class="caret"><\/span><\/button>\r\n\r\n                        <ul ng-if-end id="cat-{{level1.HierarchyDetails.Id}}" class="collapse"\r\n                            ng-class="{in: pricelist.selectedCat.level1.Id === level1.HierarchyDetails.Id}">\r\n                            <!-- LEVEL 2 -->\r\n                            <li ng-repeat="level2 in level1.LevelTwo" class="cat-menu-item">\r\n                                <button ng-if="!level2.LevelThree.length">{{level2.HierarchyDetails.Description |\r\n                                    titleCase: true}}<\/button>\r\n\r\n                                <button ng-if-start="level2.LevelThree.length" data-toggle="collapse"\r\n                                    data-target="#cat-{{level2.HierarchyDetails.Id}}"\r\n                                    data-parent="#cat-{{level1.HierarchyDetails.Id}}">{{level2.HierarchyDetails.Description\r\n                                    | titleCase: true}} <span class="caret"><\/span><\/button>\r\n\r\n                                <ul ng-if-end id="cat-{{level2.HierarchyDetails.Id}}" class="collapse"\r\n                                    ng-class="{in: pricelist.selectedCat.level2.Id === level2.HierarchyDetails.Id || pricelist.selectedCat.Id === level2.HierarchyDetails.Id}">\r\n                                    <!-- LEVEL 3 -->\r\n                                    <li ng-repeat="level3 in level2.LevelThree" class="cat-menu-item"\r\n                                        ng-class="{selected: level3.Id === pricelist.selectedCat.Id}">\r\n                                        <a href="javascript:;" class="cat-favourite-button"\r\n                                            ng-click="pricelist.toggleCategoryStarForId(level3.Id, \'sidemenu\')"><i\r\n                                                class="fa fa-fw"\r\n                                                ng-class="level3.isStarred ? \'fa-star\' : \'fa-star-o\'"><\/i> <span\r\n                                                class="sr-only">{{level3.isStarred ? \'Unstar\' : \'Star\'}} this product\r\n                                                category<\/span><\/a>\r\n                                        <a ng-href="{{level3.categoryUrl}}"\r\n                                            metrics-track="Products/Search/Products/Plural"\r\n                                            metrics-track-data="{ type: \'category\', level1: level1.HierarchyDetails.Description, level2: level2.HierarchyDetails.Description, level3: level3.Description, AccountId: pricelist.account.AccountId }">{{level3.Description\r\n                                            | titleCase}}<\/a>\r\n                                    <\/li>\r\n                                <\/ul>\r\n                            <\/li>\r\n                        <\/ul>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n\r\n\r\n            <a class="btn btn-categoryfilter-back btn-default m-b-2 hidden-xs" href="javascript:;"\r\n                ng-show="(pricelist.isSearching && pricelist.products.length) ||  pricelist.productsReloading === true"\r\n                ng-click="pricelist.clearSearch()">\r\n                <i class="fa fa-angle-left fa-2x m-r-1"><\/i><span class="btn-categoryfilter-back-label">Browse All\r\n                    Products<\/span>\r\n            <\/a>\r\n\r\n\r\n            <!-- CATEGORIES FILTER MENU -->\r\n            <div id="main-categories" class="cat-menu hidden-xs"\r\n                ng-show="(pricelist.isSearching && pricelist.products.length) ||  pricelist.productsReloading === true">\r\n                <h2>Main Categories<\/h2>\r\n                <div ng-show="!pricelist.hierarchy.length" class="loading"><i><\/i><\/div>\r\n                <ul ng-show="pricelist.hierarchy.length" class="cat-menu-list">\r\n                    <li id="show-all-main" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="!pricelist.filterMainCategory">\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All\r\n                            ({{pricelist.productResultCount > 100 ? \'100+\' : pricelist.productResultCount}})\r\n                        <\/button>\r\n                        <button class="text-left" ng-show="pricelist.filterMainCategory"\r\n                            ng-click="pricelist.filterOnMainCategory(null, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All ({{pricelist.productResultCount > 100 ?\r\n                            \'100+\' : pricelist.productResultCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                    <li id="{{level1.HierarchyDetails.Description}}" ng-show="level1.productCount > 0"\r\n                        ng-repeat="level1 in pricelist.hierarchy" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="level1==pricelist.filterMainCategory"\r\n                            ng-click="pricelist.filterOnMainCategory(null, true)">\r\n                            <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span\r\n                                    class="sr-only">Clear filter<\/span><\/div>\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level1.HierarchyDetails.Description |\r\n                            titleCase: true}} ({{level1.productCount > 100 ? \'100+\' : level1.productCount}})\r\n                        <\/button>\r\n                        <button id="select-category" class="text-left" ng-show="pricelist.filterMainCategory==null"\r\n                            ng-click="pricelist.filterOnMainCategory(level1, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level1.HierarchyDetails.Description |\r\n                            titleCase: true}} ({{level1.productCount > 100 ? \'100+\' : level1.productCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n            <div id="categories" class="cat-menu hidden-xs"\r\n                ng-show="pricelist.isSearching && pricelist.filterMainCategory.canExpand">\r\n                <h2>Categories<\/h2>\r\n                <ul class="cat-menu-list">\r\n                    <li id="show-all" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="!pricelist.filterCategory">\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All\r\n                            ({{pricelist.filterMainCategory.productCount > 100 ? \'100+\' :\r\n                            pricelist.filterMainCategory.productCount}})\r\n                        <\/button>\r\n                        <button class="text-left" ng-show="pricelist.filterCategory"\r\n                            ng-click="pricelist.filterOnCategory(null, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All\r\n                            ({{pricelist.filterMainCategory.productCount > 100 ? \'100+\' :\r\n                            pricelist.filterMainCategory.productCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                    <li id="{{level2.HierarchyDetails.Description}}" ng-show="level2.productCount > 0"\r\n                        ng-repeat="level2 in pricelist.filterMainCategory.LevelTwo" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="level2==pricelist.filterCategory"\r\n                            ng-click="pricelist.filterOnCategory(null, true)">\r\n                            <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span\r\n                                    class="sr-only">Clear filter<\/span><\/div>\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level2.HierarchyDetails.Description |\r\n                            titleCase: true}} ({{level2.productCount > 100 ? \'100+\' : level2.productCount}})\r\n                        <\/button>\r\n                        <button id="select-category" class="text-left" ng-show="pricelist.filterCategory==null"\r\n                            ng-click="pricelist.filterOnCategory(level2, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level2.HierarchyDetails.Description |\r\n                            titleCase: true}} ({{level2.productCount > 100 ? \'100+\' : level2.productCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n            <div id="sub-categories" class="cat-menu hidden-xs"\r\n                ng-show="pricelist.isSearching && pricelist.filterCategory.productCategoryCount>1">\r\n                <h2>Sub Categories<\/h2>\r\n                <ul class="cat-menu-list">\r\n                    <li id="show-all-sub" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="!pricelist.filterSubCategory">\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All\r\n                            ({{pricelist.filterCategory.productCount > 100 ? \'100+\' :\r\n                            pricelist.filterCategory.productCount}})\r\n                        <\/button>\r\n                        <button class="text-left" ng-show="pricelist.filterSubCategory"\r\n                            ng-click="pricelist.filterOnSubCategory(null, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All ({{pricelist.filterCategory.productCount\r\n                            > 100 ? \'100+\' : pricelist.filterCategory.productCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                    <li id="{{level3.Description}}" ng-show="level3.productCount > 0"\r\n                        ng-repeat="level3 in pricelist.filterCategory.LevelThree" class="cat-menu-item">\r\n                        <button class="text-left" ng-show="level3==pricelist.filterSubCategory"\r\n                            ng-click="pricelist.filterOnSubCategory(null, true)">\r\n                            <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span\r\n                                    class="sr-only">Clear filter<\/span><\/div>\r\n                            <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level3.Description | titleCase:\r\n                            true}} ({{level3.productCount > 100 ? \'100+\' : level3.productCount}})\r\n                        <\/button>\r\n                        <button id="select-category" class="text-left" ng-show="pricelist.filterSubCategory==null"\r\n                            ng-click="pricelist.filterOnSubCategory(level3, true)">\r\n                            <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level3.Description | titleCase: true}}\r\n                            ({{level3.productCount > 100 ? \'100+\' : level3.productCount}})\r\n                        <\/button>\r\n                    <\/li>\r\n                <\/ul>\r\n            <\/div>\r\n\r\n            <script type="text/ng-template" id="filter-category-modal.html">\r\n                <div class="modal-header">\r\n                    <h3 class="modal-title"><i class="fa fa-filter"><\/i> Filter your results<\/h3>\r\n                <\/div>\r\n                <div class="modal-body">\r\n\r\n                    <!-- CATEGORIES FILTER MENU -->\r\n                    <div class="cat-menu cat-menu-modal">\r\n                        <h2>Main Categories<\/h2>\r\n                        <div ng-show="!pricelist.hierarchy.length" class="loading"><i><\/i><\/div>\r\n                        <ul ng-show="pricelist.hierarchy.length" class="cat-menu-list">\r\n                            <li class="cat-menu-item">\r\n                                <button ng-show="!pricelist.filterMainCategory">\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All ({{pricelist.productResultCount > 100 ? \'100+\' : pricelist.productResultCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterMainCategory" ng-click="pricelist.filterOnMainCategory(null, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All ({{pricelist.productResultCount > 100 ? \'100+\' : pricelist.productResultCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                            <li ng-show="level1.productCount > 0" ng-repeat="level1 in pricelist.hierarchy" class="cat-menu-item">\r\n                                <button ng-show="level1==pricelist.filterMainCategory" ng-click="pricelist.filterOnMainCategory(null, false)">\r\n                                    <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span class="sr-only">Clear filter<\/span><\/div>\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level1.HierarchyDetails.Description | titleCase: true}} ({{level1.productCount > 100 ? \'100+\' : level1.productCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterMainCategory==null" ng-click="pricelist.filterOnMainCategory(level1, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level1.HierarchyDetails.Description | titleCase: true}} ({{level1.productCount > 100 ? \'100+\' : level1.productCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                    <div class="cat-menu cat-menu-modal" ng-show="pricelist.filterMainCategory.canExpand">\r\n                        <h2>Categories<\/h2>\r\n                        <ul class="cat-menu-list">\r\n                            <li class="cat-menu-item">\r\n                                <button ng-show="!pricelist.filterCategory">\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All ({{pricelist.filterMainCategory.productCount > 100 ? \'100+\' : pricelist.filterMainCategory.productCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterCategory" ng-click="pricelist.filterOnCategory(null, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All ({{pricelist.filterMainCategory.productCount > 100 ? \'100+\' : pricelist.filterMainCategory.productCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                            <li ng-show="level2.productCount > 0" ng-repeat="level2 in pricelist.filterMainCategory.LevelTwo" class="cat-menu-item">\r\n                                <button ng-show="level2==pricelist.filterCategory" ng-click="pricelist.filterOnCategory(null, false)">\r\n                                    <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span class="sr-only">Clear filter<\/span><\/div>\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level2.HierarchyDetails.Description | titleCase: true}} ({{level2.productCount > 100 ? \'100+\' : level2.productCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterCategory==null" ng-click="pricelist.filterOnCategory(level2, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level2.HierarchyDetails.Description | titleCase: true}} ({{level2.productCount > 100 ? \'100+\' : level2.productCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n                    <div class="cat-menu cat-menu-modal" ng-show="pricelist.filterCategory.productCategoryCount>1">\r\n                        <h2>Sub Categories<\/h2>\r\n                        <ul class="cat-menu-list">\r\n                            <li class="cat-menu-item">\r\n                                <button ng-show="!pricelist.filterSubCategory">\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> Show All ({{pricelist.filterCategory.productCount > 100 ? \'100+\' : pricelist.filterCategory.productCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterSubCategory" ng-click="pricelist.filterOnSubCategory(null, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> Show All ({{pricelist.filterCategory.productCount > 100 ? \'100+\' : pricelist.filterCategory.productCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                            <li ng-show="level3.productCount > 0" ng-repeat="level3 in pricelist.filterCategory.LevelThree" class="cat-menu-item">\r\n                                <button ng-show="level3==pricelist.filterSubCategory" ng-click="pricelist.filterOnSubCategory(null, false)">\r\n                                    <div class="cat-clear-icon"><i class="fa fa-fw fa-times-circle"><\/i> <span class="sr-only">Clear filter<\/span><\/div>\r\n                                    <i class="fa fa-fw fa-check p-r-2 text-success"><\/i> {{level3.Description | titleCase: true}} ({{level3.productCount > 100 ? \'100+\' : level3.productCount}})\r\n                                <\/button>\r\n                                <button ng-show="pricelist.filterSubCategory==null" ng-click="pricelist.filterOnSubCategory(level3, false)">\r\n                                    <i class="fa fa-fw fa-circle-o p-r-2"><\/i> {{level3.Description | titleCase: true}} ({{level3.productCount > 100 ? \'100+\' : level3.productCount}})\r\n                                <\/button>\r\n                            <\/li>\r\n                        <\/ul>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n                <div class="modal-footer">\r\n                    <div class="pull-right">\r\n                        <button data-ng-click="pricelist.filterProductsByCategory()" class="btn btn-primary" value="Download">Filter Products<\/button>\r\n                        <button class="btn btn-link" ng-click="pricelist.resetFilterProductsByCategory()">Cancel<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/script>\r\n\r\n        <\/div>\r\n\r\n        <!-- PRODUCTS GRID -->\r\n        <div class="col-xs-12 col-sm-8 col-md-9 products-display-{{layout.mode}}">\r\n\r\n            <!-- LIST || GRID SELECTOR -->\r\n\r\n            <!-- TITLE / SELECTED CATEGORY / SEARCH NAME -->\r\n            <div class="row">\r\n\r\n                <div class="col-xs-8 col-sm-7 vertical-align-top">\r\n\r\n                    <!-- PRODUCT DETAILS -->\r\n                    <div ng-show="pricelist.detailMode" class="cat-title">\r\n\r\n                        <button class="btn-link pricelist-favourite-btn"\r\n                            ng-click="pricelist.toggleCategoryStar(\'header\')"\r\n                            ng-show="pricelist.selectedCat && !pricelist.isSearching"><i class="fa fa-lg fa-fw"\r\n                                ng-class="pricelist.selectedCat.starred ? \'fa-star\' : \'fa-star-o\'"><\/i> <span\r\n                                class="sr-only">{{pricelist.selectedCat.starred ? \'Unstar\' : \'Star\'}} this product\r\n                                category<\/span><\/button>\r\n\r\n                        <h2 ng-show="!pricelist.isSearching">\r\n                            <span class="cat-title-level-1">{{pricelist.productDetail.MainGroup | titleCase:\r\n                                true}}<\/span>\r\n                            <span class="cat-title-level-2"><a href="javascript:;"\r\n                                    ui-sref="app.productListV2.cat({accId: pricelist.account.AccountId, parentCatDesc: pricelist.productDetail.MainGroup.replace(\' \', \'_\'), searchCatDesc: pricelist.productDetail.Group.replace(\' \', \'_\'), catDesc: pricelist.productDetail.SubGroup.replace(\' \', \'_\'), catId: pricelist.productDetail.SubGroupId})">{{pricelist.productDetail.Group\r\n                                    | titleCase: true}}<\/a><\/span>\r\n                            <span class="cat-title-level-3">{{pricelist.productDetail.Description | titleCase:\r\n                                true}}<\/span>\r\n                        <\/h2>\r\n\r\n                    <\/div>\r\n\r\n                    <!-- MOST ORDERED -->\r\n                    <h2 ng-hide="pricelist.selectedCat || pricelist.isSearching || pricelist.detailMode"><i\r\n                            class="fa fa-fw fa-bar-chart"><\/i> Most ordered<\/h2>\r\n\r\n                    <!-- CATEGORY -->\r\n                    <div class="cat-title"\r\n                        ng-show="pricelist.selectedCat && !pricelist.isSearching && !pricelist.detailMode">\r\n\r\n                        <button class="btn-link pricelist-favourite-btn"\r\n                            ng-click="pricelist.toggleCategoryStar(\'header\')"><i class="fa fa-lg fa-fw"\r\n                                ng-class="pricelist.selectedCat.starred ? \'fa-star\' : \'fa-star-o\'"><\/i> <span\r\n                                class="sr-only">{{pricelist.selectedCat.starred ? \'Unstar\' : \'Star\'}} this product\r\n                                category<\/span><\/button>\r\n\r\n                        <h2 ng-show="!pricelist.detailMode">\r\n                            <span class="cat-title-level-1">{{pricelist.selectedCat.level1.Description | titleCase:\r\n                                true}}<\/span>\r\n                            <span class="cat-title-level-2">{{pricelist.selectedCat.level2.Description | titleCase:\r\n                                true}}<\/span>\r\n                            <span class="cat-title-level-3">{{pricelist.selectedCat.Description | titleCase:\r\n                                true}}<\/span>\r\n                        <\/h2>\r\n\r\n                    <\/div>\r\n\r\n                    <!-- SEARCH -->\r\n                    <div ng-show="pricelist.isSearching" class="header-search">\r\n                        <h2 class="header-search-title">{{pricelist.searchTitle}}<\/h2>\r\n                        <p class="header-search-action" ng-show="pricelist.searchGroup && pricelist.searchingGroup">\r\n                            in {{pricelist.searchGroup.Description | titleCase: true}} <a href="javascript:;"\r\n                                ng-click="pricelist.showAllResults(true)">Show all results<\/a> or\r\n                        <\/p>\r\n                        <p class="header-search-action" ng-show="pricelist.searchGroup && !pricelist.searchingGroup">\r\n                            <a href="javascript:;" ng-click="pricelist.showAllResults(false)">Search within\r\n                                {{pricelist.searchGroup.Description | titleCase: true}}<\/a> or\r\n                        <\/p>\r\n                        <a class="header-search-action" href="javascript:;" ng-click="pricelist.clearSearch()">Clear\r\n                            search<\/a>\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n                <div class="col-xs-4 col-sm-5 vertical-align-top">\r\n                    <div class="row pull-right form-inline text-right">\r\n                        <div class="col-xs-12">\r\n                            <div class="input-group m-b-5">\r\n\r\n                                <select id="product-sortby" class=" filter-sort-type form-control"\r\n                                    ng-model="pricelist.sorting.sortBy" ng-change="pricelist.sortProducts(true)">\r\n                                    <option ng-show="pricelist.isSearching" value="relevance">Relevance<\/option>\r\n                                    <option ng-hide="pricelist.selectedCat" value="category">Category<\/option>\r\n                                    <option value="description">Name<\/option>\r\n                                    <option ng-if="pricelist.userHasProductPricingPermission" value="price">Price\r\n                                    <\/option>\r\n                                <\/select>\r\n\r\n                                <div class="input-group-addon filter-sort-addon">\r\n                                    <!-- SORT DIRECTION -->\r\n                                    <fieldset class="filter-sort-toggle">\r\n                                        <legend class="sr-only">Sort direction<\/legend>\r\n\r\n                                        <input id="filter-sort-toggle-asc" type="radio" name="filterSortToggle"\r\n                                            value="0" ng-model="pricelist.sorting.sortOrder"\r\n                                            ng-checked="pricelist.sorting.sortOrder === \'0\'"\r\n                                            ng-change="pricelist.sortProducts()">\r\n                                        <label for="filter-sort-toggle-desc"><i\r\n                                                class="fa fa-lg fa-sort-amount-asc"><\/i><span class="sr-only">Sort\r\n                                                descending<\/span><\/label>\r\n\r\n                                        <input id="filter-sort-toggle-desc" type="radio" name="filterSortToggle"\r\n                                            value="1" ng-model="pricelist.sorting.sortOrder"\r\n                                            ng-checked="pricelist.sorting.sortOrder === \'1\'"\r\n                                            ng-change="pricelist.sortProducts()">\r\n                                        <label for="filter-sort-toggle-asc"><i\r\n                                                class="fa fa-lg fa-sort-amount-desc"><\/i><span class="sr-only">Sort\r\n                                                ascending<\/span><\/label>\r\n                                    <\/fieldset>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <div class="btn-group m-b-5" role="group">\r\n                                <button type="button" class="btn btn-default" ng-class="{active: layout.mode == \'list\'}"\r\n                                    ng-click="layout.setMode(\'list\')"><i class="fa fa-fw fa-list"><\/i><\/button>\r\n                                <button type="button" class="btn btn-default" ng-class="{active: layout.mode == \'grid\'}"\r\n                                    ng-click="layout.setMode(\'grid\')"><i class="fa fa-fw fa-th"><\/i><\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row p-b-1" ng-show="pricelist.loadingPrices">\r\n                        <div class="col-xs-12 text-right">\r\n                            <div\r\n                                class="loading loading-inline text-nowrap text-muted pull-right pricelist-activity-spinner">\r\n                                <i><\/i><span>Getting prices&nbsp;<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Show price conditions for PGH ONLY -->\r\n            <div class="col-xs-12 col-sm-12 vertical-align-top"\r\n                ng-if="pricelist.account.SbuCode === \'4300\' && pricelist.detailMode === false">\r\n                <div class="row pull-right form-inline text-right">\r\n                    <small class="font-bold m-r-2">Base price, freight charges will apply to some areas<\/small>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class="pricelist-listing">\r\n\r\n                <!-- PRODUCTS LOADING / SEARCHING -->\r\n                <div ng-show="pricelist.products === false || pricelist.productsReloading === true"\r\n                    class="loading loading-page">\r\n                    <i><\/i>\r\n                    {{pricelist.isSearching && pricelist.productsReloading !== true ? \'Searching\' : \'Loading\'}}\r\n                    products...\r\n                <\/div>\r\n\r\n                <!-- EMPTY -->\r\n                <div class="content-empty"\r\n                    ng-if="pricelist.products !== false && !pricelist.products.length && !pricelist.tooManyResults && pricelist.detailMode === false">\r\n                    <span class="content-empty-icon fs-icon" data-feature="order"><\/span>\r\n                    <!-- EMPTY SEARCH OR CATEGORY -->\r\n                    <div ng-if="pricelist.selectedCat || pricelist.isSearching">\r\n                        <h3 class="content-empty-title">No products to display<\/h3>\r\n                        <p class="content-empty-instruction">Try a new search or selection<\/p>\r\n                        <button class="content-empty-btn btn btn-default" ng-show="pricelist.isSearching"\r\n                            ng-click="pricelist.clearSearch()">Clear search<\/button>\r\n                    <\/div>\r\n                    <!-- EMPTY MOST ORDERED -->\r\n                    <div ng-if="!pricelist.isSearching && !pricelist.selectedCat">\r\n                        <h3 class="content-empty-title">Your most ordered products will appear here<\/h3>\r\n                        <p class="content-empty-instruction">Search or select a category to view your products and\r\n                            unique pricing.<\/p>\r\n                        <button class="content-empty-btn btn btn-default" ui-sref="app.orderCreate"\r\n                            auth-key="Customer/OnlineOrdering" auth="c">Place an order<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- TOO MANY RESULTS -->\r\n                <div ng-show="pricelist.tooManyResults && pricelist.detailMode === false" class="alert alert-warning">\r\n                    Find what you\'re looking for faster by adding more keywords to narrow your search.<\/div>\r\n\r\n\r\n                <!-- PRODUCTS -->\r\n                <div id=\'products-grid\' ng-show="pricelist.products.length && pricelist.detailMode === false"\r\n                    class="row">\r\n                    <!-- PRODUCT -->\r\n                    <div id="{{product.Code}}" ng-show="product.isVisible != false"\r\n                        ng-repeat="product in pricelist.products" class="col-xs-12 col-sm-4 col-lg-3 product-grid">\r\n                        <div class="product-tile clearfix">\r\n                            <!-- IMG -->\r\n                            <div class="img-responsive text-center product-tile-img">\r\n                                <a href="javascript:;"\r\n                                    ng-click="pricelist.openModalImage(pricelist.productImgSrc(\'large\', product), product.Description | titleCase: true)">\r\n                                    <img ng-src="{{ pricelist.productImgSrc(\'thumb\', product) }}"\r\n                                        alt="{{product.Description | titleCase: true}}" />\r\n                                <\/a>\r\n                            <\/div>\r\n\r\n                            <!-- NAME + ID -->\r\n                            <div ng-if="!pricelist.isSearching" class="product-tile-desc">\r\n                                <small\r\n                                    ng-hide="(pricelist.selectedCat || pricelist.isSearching) && pricelist.fullRangeDescription != pricelist.selectedCat.Description"\r\n                                    ng-bind-html="product.MainGroup + \' / \' + product.Group + \' / \' + product.SubGroup | titleCase: true"><\/small>\r\n                                <h3 ng-if="product.productOverviewAvailable === false || product.productOverviewAvailable == undefined || product.ShowProductDetails === false"\r\n                                    ng-bind-html="product.Description | titleCase: true"><\/h3>\r\n                                <a ng-if="product.productOverviewAvailable === true && product.ShowProductDetails === true"\r\n                                    ui-sref="app.productListV2.details({ accId: pricelist.account.AccountId, sbuCode: pricelist.account.SbuCode, productCode: product.Code})"\r\n                                    ui-sref-options="{reload: true}">\r\n                                    <h3 ng-bind-html="product.Description | titleCase: true"><\/h3>\r\n                                <\/a>\r\n                                <small ng-bind-html="product.Code | productCode"><\/small>\r\n\r\n                                <btn class="btn btn-sm btn-blank btn-upload" auth-key="Customer/ProductList/UploadImage"\r\n                                    ng-disabled="product.IsUploading" csr-upload-button data-accept="jpg,png,gif,jpeg"\r\n                                    data-url="{{\'/api/products/\' + product.Code + \'/upload\' + pricelist.imageUploadAccessToken}}"\r\n                                    data-on-upload="pricelist.productImageUpload(product)"\r\n                                    data-on-success="pricelist.productImageUploadSuccess(product, response)"\r\n                                    data-on-error="pricelist.productImageUploadError(product, response)">\r\n                                    Change Image\r\n                                <\/btn>\r\n                            <\/div>\r\n\r\n                            <div ng-if="pricelist.isSearching" class="product-tile-desc">\r\n                                <small\r\n                                    ng-bind-html="product.MainGroup + \' / \' + product.Group + \' / \' + product.SubGroup | titleCase: true | typeaheadHighlight:pricelist.searchHighlight"><\/small>\r\n                                <h3 ng-if="product.productOverviewAvailable === false || product.productOverviewAvailable == undefined || product.ShowProductDetails === false"\r\n                                    ng-bind-html="product.Description | titleCase: true | typeaheadHighlight:pricelist.searchHighlight">\r\n                                <\/h3>\r\n                                <a ng-if="product.productOverviewAvailable === true && product.ShowProductDetails === true"\r\n                                    ui-sref="app.productListV2.details({ accId: pricelist.account.AccountId, sbuCode: pricelist.account.SbuCode, productCode: product.Code})"\r\n                                    ui-sref-options="{reload: true}">\r\n                                    <h3\r\n                                        ng-bind-html="product.Description | titleCase: true | typeaheadHighlight:pricelist.searchHighlight">\r\n                                    <\/h3>\r\n                                <\/a>\r\n                                <small\r\n                                    ng-bind-html="product.Code | productCode | typeaheadHighlight:pricelist.searchHighlight"><\/small>\r\n\r\n                                <btn class="btn btn-sm btn-blank btn-upload" auth-key="Customer/ProductList/UploadImage"\r\n                                    ng-disabled="product.IsUploading" csr-upload-button data-accept="jpg,png,gif,jpeg"\r\n                                    data-url="{{\'/api/products/\' + product.Code + \'/upload\' + pricelist.imageUploadAccessToken}}"\r\n                                    data-on-upload="pricelist.productImageUpload(product)"\r\n                                    data-on-success="pricelist.productImageUploadSuccess(product, response)"\r\n                                    data-on-error="pricelist.productImageUploadError(product, response)">\r\n                                    Change Image\r\n                                <\/btn>\r\n                            <\/div>\r\n\r\n                            <!-- PRICE & ORDER BTN -->\r\n                            <div class="product-tile-details">\r\n                                <div class="product-tile-price">\r\n                                    <div ng-show="product.PricingAvailability != pricelist.priceAvailability.unknown">\r\n                                        <strong\r\n                                            ng-hide="!pricelist.userHasProductPricingPermission || !product.UnitPriceExcludingGST"\r\n                                            class="product-tile-qty-price">{{product.Conversion *\r\n                                            product.UnitPriceExcludingGST/product.PricingQuantity | currency}} per\r\n                                            {{product.QuantityUOM}}<\/strong>\r\n                                        <small\r\n                                            ng-show="pricelist.userHasProductPricingPermission && (product.PricingQuantity > 1 || (product.Conversion != 1 && product.UnitPriceExcludingGST))"\r\n                                            class="product-tile-unit-price">\r\n                                            {{product.UnitPriceExcludingGST | currency}} per {{product.PricingQuantity >\r\n                                            1 ? product.PricingQuantity + \' \' : \'\' }}{{product.PricingUOM}}\r\n                                        <\/small>\r\n                                        <small\r\n                                            ng-show="pricelist.userHasProductPricingPermission && product.PricingAvailability == pricelist.priceAvailability.available && product.UnitPriceExcludingGST"\r\n                                            class="product-tile-note">Excl. GST<\/small>\r\n                                    <\/div>\r\n                                <\/div>\r\n\r\n\r\n                                <div class="product-tile-btn" ng-if="pricelist.userHasOrderPermission">\r\n\r\n                                    <div class="product-tile-qty"\r\n                                        ng-if="pricelist.userHasProductPricingPermission && product.PricingAvailability != pricelist.priceAvailability.unknown && !product.UnitPriceExcludingGST">\r\n                                        <div class="label label-info inline-block">\r\n                                            <span class="inline-block m-t-5 m-b-5 m-r-1 m-l-1">\r\n                                                <i class="fa fa-phone m-r-2"><\/i> Call for price\r\n                                            <\/span>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    <div class="product-tile-qty"\r\n                                        ng-if="product.PricingAvailability == pricelist.priceAvailability.unknown && product.loadingPrice">\r\n                                        <div\r\n                                            class="loading loading-inline text-nowrap pull-right pricelist-activity-spinner">\r\n                                            <i class="text-muted"><\/i>\r\n                                        <\/div>\r\n                                    <\/div>\r\n\r\n                                    <div class="product-tile-qty"\r\n                                        ng-if="product.PricingAvailability == pricelist.priceAvailability.available">\r\n                                        <label class="sr-only">Quantity<\/label>\r\n                                        <span class="input-group" ng-if="product.DeliveryBlockSize>1">\r\n                                            <brick-input data-input-id="productQty{{product.Code}}"\r\n                                                data-batch-size="product.DeliveryBlockSize"\r\n                                                data-selected-value="product.Quantity"\r\n                                                data-min-value="product.DeliveryBlockSize"\r\n                                                data-callback-function="pricelist.updatedQty(product)"\r\n                                                ng-disabled="product.PricingAvailability == 0" />\r\n                                        <\/span>\r\n                                        <div class="input-group" ng-if="product.DeliveryBlockSize==1">\r\n                                            <input id="productQty{{product.Code}}" ng-model="product.Quantity"\r\n                                                type="text" qty-spinner="productQty{{pricelist.Code}}"\r\n                                                ng-change="pricelist.updatedQty(product)" value="1" min="1" max="9999"\r\n                                                ng-disabled="product.PricingAvailability == 0"\r\n                                                ng-model-options="{ debounce: 150 }" />\r\n                                            <div class="product-uom-addon input-group-addon">{{product.QuantityUOM}}\r\n                                            <\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    <button id="add-to-order-{{product.Code}}" ng-click="pricelist.addToOrder(product)"\r\n                                        class="btn btn-default btn-sm product-list-price-btn">Add to\r\n                                        order<\/button><br /><br />\r\n                                    <div class="product-tile-qty m-t-n-5"\r\n                                        ng-if="pricelist.stockAvailability.stockAvailabilityEnabled == true">\r\n                                        <div class="stock-availability-status" ng-if="product.AtpStatus == \'?\'"><span\r\n                                                class="loading stock-availability-loading"><i><\/i><\/span><\/div>\r\n                                        <div class="stock-availability-status"\r\n                                            ng-if="product.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.y">\r\n                                            <i id="stock-avilable"\r\n                                                class="fa fa-lg fa-check text-success stock-availability-icon"\r\n                                                data-tooltip-placement="top" data-tooltip="Stock is available"><\/i>\r\n                                            <div class="stock-availability-text">In Stock<\/div>\r\n                                        <\/div>\r\n                                        <div class="stock-availability-status"\r\n                                            ng-if="product.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.l">\r\n                                            <i id="low-stock"\r\n                                                class="fa fa-lg low-stock text-success stock-availability-icon"\r\n                                                data-tooltip-placement="top"\r\n                                                data-tooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your order"><\/i>\r\n                                            <div class="stock-availability-text">Low Stock<\/div>\r\n                                        <\/div>\r\n                                        <div class="stock-availability-status hidden-xs hidden-sm"\r\n                                            ng-if="product.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.n">\r\n                                            <div id="call-for-stock"\r\n                                                class="stock-availability-icon stock-availability-phone-icon"><\/div>\r\n                                            <div class="stock-availability-text call-for-stock-text">\r\n                                                {{pricelist.stockAvailability.callForStockPhoneNumber}} for stock<\/div>\r\n                                        <\/div>\r\n                                        <div class="stock-availability-status hidden-md hidden-lg"\r\n                                            ng-if="product.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.n">\r\n                                            <a id="call-for-stock-mobile"\r\n                                                href="tel:{{pricelist.stockAvailability.callForStockPhoneNumber}}">\r\n                                                <div class="stock-availability-icon stock-availability-phone-icon">\r\n                                                <\/div>\r\n                                            <\/a>\r\n                                            <div class="stock-availability-text call-for-stock-text"><a\r\n                                                    href="tel:{{pricelist.stockAvailability.callForStockPhoneNumber}}"\r\n                                                    class="no-text-decoration">{{pricelist.stockAvailability.callForStockPhoneNumber}}\r\n                                                    for stock<\/a><\/div>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                    <div class="product-list-details-btn product-details-btn">\r\n                                        <button id="view-details-button"\r\n                                            ng-if="product.productOverviewAvailable === true && product.ShowProductDetails === true"\r\n                                            ng-click="pricelist.viewProductDetails(pricelist.account.AccountId, pricelist.account.SbuCode, product.Code)"\r\n                                            class="btn btn-success btn-sm btn-view-product-details">\r\n                                            Details\r\n                                        <\/button>\r\n                                        <button id="no-details-button"\r\n                                            ng-if="product.productOverviewAvailable !== true && product.ShowProductDetails === true"\r\n                                            class="btn btn-secondary btn-sm btn-view-product-details btn-view-product-details-inactive">\r\n                                            No Details\r\n                                        <\/button>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n            <\/div>\r\n\r\n            <!-- PRODUCT DETAILS -->\r\n            <div id="product-details"\r\n                ng-if="pricelist.detailMode === true && Object.keys(pricelist.productDetail).length !== 0"\r\n                class="col-xs-12 col-sm-4 col-lg-3 product-grid">\r\n                <div class="product-tile clearfix">\r\n                    <!-- IMG -->\r\n                    <div class="img-responsive text-center product-tile-img">\r\n                        <a href="javascript:;"\r\n                            ng-click="pricelist.openModalImage(pricelist.productImgSrc(\'large\', pricelist.productDetail), pricelist.productDetail.Description | titleCase: true)">\r\n                            <img ng-src="{{ pricelist.productImgSrc(\'thumb\', pricelist.productDetail) }}"\r\n                                alt="{{pricelist.productDetail.Description | titleCase: true}}" />\r\n                        <\/a>\r\n                    <\/div>\r\n                    <!-- NAME + ID -->\r\n                    <div class="product-tile-desc m-b-30">\r\n                        <small\r\n                            ng-hide="(pricelist.selectedCat || pricelist.isSearching) && pricelist.fullRangeDescription != pricelist.selectedCat.Description"\r\n                            ng-bind-html="pricelist.productDetail.MainGroup + \' / \' + pricelist.productDetail.Group + \' / \' + pricelist.productDetail.SubGroup | titleCase: true"><\/small>\r\n                        <h3 ng-bind-html="pricelist.productDetail.Description | titleCase: true"><\/h3>\r\n                        <small ng-bind-html="pricelist.productDetail.Code | productCode"><\/small>\r\n                    <\/div>\r\n\r\n                    <!-- PRICE & ORDER BTN -->\r\n                    <div class="product-tile-details">\r\n                        <div class="stock-availability-status display-inline-block m-t-n-20"\r\n                            ng-if="pricelist.productDetail.AtpStatus == \'?\'"><span\r\n                                class="loading stock-availability-loading"><i><\/i><\/span><\/div>\r\n                        <div class="stock-availability-status display-inline-block m-t-n-20"\r\n                            ng-if="pricelist.productDetail.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.y">\r\n                            <i id="stock-avilable" class="fa fa-lg fa-check text-success stock-availability-icon"\r\n                                data-tooltip-placement="top" data-tooltip="Stock is available"><\/i>\r\n                            <div class="stock-availability-text">In Stock<\/div>\r\n                        <\/div>\r\n                        <div class="stock-availability-status display-inline-block m-t-n-20"\r\n                            ng-if="pricelist.productDetail.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.l">\r\n                            <i id="low-stock" class="fa fa-lg low-stock text-success stock-availability-icon"\r\n                                data-tooltip-placement="top"\r\n                                data-tooltip="This item has low stock levels. Customer service will contact you if there are any issues fulfilling your order"><\/i>\r\n                            <div class="stock-availability-text">Low Stock<\/div>\r\n                        <\/div>\r\n                        <div class="stock-availability-status display-inline-block m-t-n-20 hidden-xs hidden-sm"\r\n                            ng-if="pricelist.productDetail.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.n">\r\n                            <div id="call-for-stock" class="stock-availability-icon stock-availability-phone-icon">\r\n                            <\/div>\r\n                            <div class="stock-availability-text call-for-stock-text">\r\n                                {{pricelist.stockAvailability.callForStockPhoneNumber}} for stock<\/div>\r\n                        <\/div>\r\n                        <div class="stock-availability-status display-inline-block m-t-n-20 hidden-md hidden-lg"\r\n                            ng-if="pricelist.productDetail.AtpStatus == pricelist.stockAvailability.stockAvailabilityAtpStatus.n">\r\n                            <a id="call-for-stock-mobile"\r\n                                href="tel:{{pricelist.stockAvailability.callForStockPhoneNumber}}">\r\n                                <div class="stock-availability-icon stock-availability-phone-icon"><\/div>\r\n                            <\/a>\r\n                            <div class="stock-availability-text call-for-stock-text"><a\r\n                                    href="tel:{{pricelist.stockAvailability.callForStockPhoneNumber}}"\r\n                                    class="no-text-decoration">{{pricelist.stockAvailability.callForStockPhoneNumber}}\r\n                                    for stock<\/a><\/div>\r\n                        <\/div>\r\n                        <div class="product-tile-price">\r\n                            <strong\r\n                                ng-hide="!pricelist.userHasProductPricingPermission || !product.UnitPriceExcludingGST"\r\n                                class="product-tile-qty-price">{{pricelist.productDetail.Conversion *\r\n                                pricelist.productDetail.UnitPriceExcludingGST/pricelist.productDetail.PricingQuantity |\r\n                                currency}} per {{pricelist.productDetail.QuantityUOM}}<\/strong>\r\n                            <small\r\n                                ng-show="pricelist.userHasProductPricingPermission && (pricelist.productDetail.PricingQuantity > 1 || (pricelist.productDetail.Conversion != 1 && pricelist.productDetail.UnitPriceExcludingGST))"\r\n                                class="product-tile-unit-price">\r\n                                {{pricelist.productDetail.UnitPriceExcludingGST | currency}} per\r\n                                {{pricelist.productDetail.PricingQuantity > 1 ? pricelist.productDetail.PricingQuantity\r\n                                + \' \' : \'\' }}{{pricelist.productDetail.PricingUOM}}\r\n                            <\/small>\r\n                            <span\r\n                                ng-show="pricelist.userHasProductPricingPermission && pricelist.productDetail.PricingAvailability != pricelist.priceAvailability.unknown && !pricelist.productDetail.UnitPriceExcludingGST"\r\n                                class="label label-default">Call for price<\/span>\r\n                            <small ng-show="pricelist.userHasProductPricingPermission" class="product-tile-note">Excl.\r\n                                GST<\/small>\r\n                        <\/div>\r\n\r\n                        <div class="product-tile-btn" ng-if="pricelist.userHasOrderPermission">\r\n                            <div class="product-tile-qty"\r\n                                ng-show="pricelist.productDetail.PricingAvailability != pricelist.priceAvailability.unknown">\r\n                                <label class="sr-only">Quantity<\/label>\r\n                                <span class="input-group" ng-if="pricelist.productDetail.DeliveryBlockSize>1">\r\n                                    <brick-input data-input-id="productQty{{pricelist.productDetail.Code}}"\r\n                                        data-batch-size="product.DeliveryBlockSize"\r\n                                        data-selected-value="product.Quantity"\r\n                                        data-callback-function="pricelist.updatedQty(pricelist.productDetail)"\r\n                                        data-min-value="product.DeliveryBlockSize"\r\n                                        ng-disabled="pricelist.productDetail.PricingAvailability == 0" />\r\n                                <\/span>\r\n                                <div class="input-group" ng-if="pricelist.productDetail.DeliveryBlockSize==1">\r\n                                    <input id="productQty{{pricelist.productDetail.Code}}"\r\n                                        ng-model="pricelist.productDetail.Quantity" type="text"\r\n                                        qty-spinner="productQty{{pricelist.productDetail.Code}}"\r\n                                        ng-show="pricelist.productDetail.DeliveryBlockSize<=1"\r\n                                        ng-change="pricelist.updatedQty(pricelist.productDetail)" value="1" min="1"\r\n                                        max="9999" ng-disabled="pricelist.productDetail.PricingAvailability == 0"\r\n                                        ng-model-options="{ debounce: 150 }" />\r\n                                    <span\r\n                                        class="product-uom-addon input-group-addon">{{pricelist.productDetail.QuantityUOM}}<\/span>\r\n                                <\/div>\r\n                            <\/div>\r\n                            <button id="product-details-add-to-order-{{product.Code}}"\r\n                                ng-click="pricelist.addToOrder(pricelist.productDetail)"\r\n                                ng-enabled="pricelist.productDetail.PricingAvailability != pricelist.priceAvailability.unknown"\r\n                                class="btn btn-default btn-sm product-list-price-btn">Add to order<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                    <div class="row m-t-0 m-l-0 m-r-0"\r\n                        ng-repeat="overviewRow in pricelist.productDetail.ProductOverview">\r\n                        <hr class="product-detail-hr" ng-if="overviewRow[0].Heading != undefined" />\r\n                        <div ng-if="overviewRow[0].Heading != undefined">\r\n                            <h3 class="product-detail-column product-detail-heading m-t-10">{{overviewRow[0].Heading}}\r\n                            <\/h3>\r\n                        <\/div>\r\n                        <div ng-if="overviewRow[0].Heading === undefined" class="col product-detail-column"\r\n                            ng-class="{\'col-xs-12\':overviewRow.length==1, \'col-sm-6\':overviewRow.length==2, \'col-sm-4\':overviewRow.length==3, \'col-md-3\':overviewRow.length==4,\'col-sm-6\':overviewRow.length>=4, \'col-xs-6\':overviewRow.length==4, \'col-md-2\':overviewRow.length==5, \'col-xs-12\':overviewRow.length>4}"\r\n                            ng-repeat="overviewCol in overviewRow">\r\n                            <h5 ng-if="overviewCol.Title">{{overviewCol.Title}}<\/h5>\r\n                            <p ng-if="!overviewCol.URL">{{overviewCol.Content}}<\/p>\r\n                            <a href="{{overviewCol.URL}}" target="_productdetails" ng-if="overviewCol.URL">\r\n                                <i ng-if="overviewCol.URLType==\'pdf\'" class="fa fa-file-pdf-o p-r-1"><\/i>\r\n                                <i ng-if="overviewCol.URLType==\'external-link\'" class="fa fa-external-link p-r-1"><\/i>\r\n                                {{overviewCol.Content}}\r\n                            <\/a>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n        <div class="product-tile-footer"\r\n            ng-if="pricelist.products !== false && pricelist.products.length && !pricelist.tooManyResults">\r\n            <p><a href="javascript:scrollToY(0);" class="link-back"><i class="fa fa-chevron-up"><\/i> Back to top<\/a><\/p>\r\n\r\n            <p>\r\n                <small>\r\n                    Some products may not be available at all locations. Availability will be confirmed during the\r\n                    ordering process.<br>\r\n                    All prices exclude GST unless noted otherwise.\r\n                <\/small>\r\n            <\/p>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<div help-centre-content="products">\r\n\r\n    <div class="help-centre-content help-centre-content-first-time">\r\n        <h2>Welcome to product price list<\/h2>\r\n        <p class="lead">Browse the complete range of CSR products with your unique pricing.<\/p>\r\n    <\/div>\r\n\r\n    <div class="help-centre-content">\r\n        <h2>Get help with products<\/h2>\r\n    <\/div>\r\n\r\n    <div class="list-group">\r\n        <a id="products-tour-help" tour-link="tourProducts" class="list-group-item" href="javascript:;"><i\r\n                class="fa fa-lg fa-fw fa-map-signs"><\/i> Take a tour <small class="text-muted">(30 seconds)<\/small><\/a>\r\n        <a id="products-video-help" class="list-group-item" href="javascript:;">\r\n            <div\r\n                class="wistia_embed wistia_async_k6zbxcyqif popover=true popoverContent=html popoverPreventScroll=true videoFoam=true">\r\n                <i class="fa fa-lg fa-fw fa-play"><\/i> Watch a short video <small class="text-muted">(40\r\n                    seconds)<\/small>\r\n            <\/div>\r\n        <\/a>\r\n    <\/div>\r\n\r\n    <script src="//fast.wistia.com/embed/medias/k6zbxcyqif.jsonp" async><\/script>\r\n\r\n<\/div>');n.put("registration-sign-up.html",'<div ui-view="signUp" ng-hide="$state.current.name !== \'app.signUp.form\'"><\/div>\r\n<div ui-view ng-show="$state.current.name !== \'app.signUp.form\'"><\/div>\r\n');n.put("invoice-delivery-by-day.html",'<div class="container" ng-cloak>\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="invoiceReport.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>{{ invoiceReport.pageTitle }}<\/h1>\r\n            <div class="panel" ng-if="!invoiceReport.isLoading && invoiceReport.items.length > 0">\r\n                <div class="table-responsive">\r\n                    <table class="table">\r\n                        <thead>\r\n                            <tr>\r\n                                <th style="width: 1%;"><span class="sr-only">Status<\/span><\/th>\r\n                                <th>Invoice date<\/th>\r\n                                <th>Invoice No<\/th>\r\n                                <th>Reference<\/th>\r\n                                <th>Account No<\/th>\r\n                                <th>Supplier<\/th>\r\n                                <th>Customer<\/th>\r\n                                <th>Email<\/th>\r\n                            <\/tr>\r\n                        <\/thead>\r\n                        <tbody>\r\n                            <tr ng-repeat="item in invoiceReport.items">\r\n                                <td>\r\n                                    <i class="fa fa-warning" ng-class="[{\'fa-warning\': item.Status === 2}, {\'fa-check-circle\': item.Status === 0}]" title="{{item.Status === 0 ? \'Success\' : \'Warning\'}}"><\/i>\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.Date | date : "d MMM yyyy"}}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.DocumentNo }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.Reference || "Unavailable" }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.AccountId }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.SbuCode | sbuName }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.CustomerName }}\r\n                                <\/td>\r\n                                <td>\r\n                                    <a href="mailto:{{item.ContactEmail}}">{{ item.ContactEmail }}<\/a>\r\n                                <\/td>\r\n                            <\/tr>\r\n                        <\/tbody>\r\n                    <\/table>\r\n                <\/div>\r\n                <pagination ng-if="invoiceReport.hasPagination" total-items="invoiceReport.paginationInfo.totalItems" ng-model="invoiceReport.paginationInfo.currentPage" max-size="5" items-per-page="invoiceReport.paginationInfo.itemsPerPage" boundary-links="true" rotate="false" direction-links="false" ng-change="invoiceReport.getPage()"><\/pagination>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="invoiceReport.isLoading"><\/page-loading-message>\r\n    <page-empty-message ng-if="invoiceReport.isLoading === false && (invoiceReport.items.length === 0 || invoiceReport.items === null)"><\/page-empty-message>\r\n    <page-error-message ng-if="invoiceReport.isLoading === false && invoiceReport.hasError === true"><\/page-error-message>\r\n\r\n<\/div>\r\n');n.put("invoice-delivery-by-month.html",'<div class="container" ng-cloak>\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="invoiceReport.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>{{ invoiceReport.pageTitle }}<\/h1>\r\n\r\n            <div class="panel" ng-if="!invoiceReport.isLoading && invoiceReport.items.length > 0">\r\n                <div class="table-responsive">\r\n                    <table class="table">\r\n                        <thead>\r\n                            <tr>\r\n                                <th style="width: 1%;"><span class="sr-only">Status<\/span><\/th>\r\n                                <th>Invoice date<\/th>\r\n                                <th>Report date / time<\/th>\r\n                                <th>Successful<\/th>\r\n                                <th>Failed<\/th>\r\n                                <th><span class="sr-only">Actions<\/span><\/th>\r\n                            <\/tr>\r\n                        <\/thead>\r\n                        <tbody>\r\n                            <tr ng-repeat="item in invoiceReport.items">\r\n                                <td>\r\n                                    <i class="fa" ng-class="[{\'fa-warning\': item.invoicesNotSentTotal > 0}, {\'fa-check-circle\': item.invoicesNotSentTotal === 0}]" title="{{item.invoicesNotSentTotal === 0 ? \'Success\' : \'Warning\'}}"><\/i>\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.linkDate |  date : "d MMM yyyy"}}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.reportDate |  date : "EEE, d MMM yyyy \'/\' HH:mm"}}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.invoicesSentTotal }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.invoicesNotSentTotal }}\r\n                                <\/td>\r\n                                <td style="width: 1%;">\r\n                                    <a ng-if="item.invoicesNotSentTotal > 0" ui-sref="app.invoiceDeliveryByDay({year: item.year, month: item.month, day: item.day})">View details<\/a>\r\n                                <\/td>\r\n                            <\/tr>\r\n                        <\/tbody>\r\n                    <\/table>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="invoiceReport.isLoading"><\/page-loading-message>\r\n    <page-empty-message ng-if="invoiceReport.isLoading === false && (invoiceReport.items.length === 0 || invoiceReport.items === null)"><\/page-empty-message>\r\n    <page-error-message ng-if="invoiceReport.isLoading === false && invoiceReport.hasError === true"><\/page-error-message>\r\n\r\n<\/div>');n.put("invoice-delivery-by-year.html",'<div class="container" ng-cloak>\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="invoiceReport.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>{{ invoiceReport.pageTitle }}<\/h1>\r\n\r\n            <div class="panel" ng-if="!invoiceReport.isLoading && invoiceReport.items.length > 0">\r\n                <div class="table-responsive">\r\n                    <table class="table">\r\n                        <thead>\r\n                            <tr>\r\n                                <th>Month<\/th>\r\n                                <th>Successful<\/th>\r\n                                <th>Failed<\/th>\r\n                                <th><span class="sr-only">Actions<\/span><\/th>\r\n                            <\/tr>\r\n                        <\/thead>\r\n                        <tbody>\r\n                            <tr ng-repeat="item in invoiceReport.items">\r\n                                <td>\r\n                                    {{ item.month | monthName }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.invoicesSentTotal }}\r\n                                <\/td>\r\n                                <td>\r\n                                    {{ item.invoicesNotSentTotal }}\r\n                                <\/td>\r\n                                <td style="width: 1%;">\r\n                                    <a ui-sref="app.invoiceDeliveryByMonth({year: item.year, month: item.month})">View details<\/a>\r\n                                <\/td>\r\n                            <\/tr>\r\n                        <\/tbody>\r\n                    <\/table>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="invoiceReport.isLoading"><\/page-loading-message>\r\n    <page-empty-message ng-if="invoiceReport.isLoading === false && (invoiceReport.items.length === 0 || invoiceReport.items === null)"><\/page-empty-message>\r\n    <page-error-message ng-if="invoiceReport.isLoading === false && invoiceReport.hasError === true"><\/page-error-message>\r\n\r\n<\/div>');n.put("invoice-delivery-report.html",'<div class="container" ng-cloak>\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n\r\n            <p class="breadcrumbs">\r\n                <breadcrumb details="invoiceReport.breadcrumbDetails"><\/breadcrumb>\r\n            <\/p>\r\n            <h1>{{ invoiceReport.pageTitle }}<\/h1>\r\n\r\n            <div class="panel" ng-if="!invoiceReport.isLoading && invoiceReport.items.length > 0">\r\n                <div class="table-responsive">\r\n                    <table class="table">\r\n                        <thead>\r\n                        <th>Year<\/th>\r\n                        <th>Successful<\/th>\r\n                        <th>Failed<\/th>\r\n                        <th><span class="sr-only">Actions<\/span><\/th>\r\n                        <\/thead>\r\n                        <tbody>\r\n                        <tr ng-repeat="item in invoiceReport.items">\r\n                            <td>{{ item.year }}<\/td>\r\n                            <td>{{ item.invoicesSentTotal }}<\/td>\r\n                            <td>{{ item.invoicesNotSentTotal }}<\/td>\r\n                            <td style="width: 1%;">\r\n                                <a ui-sref="app.invoiceDeliveryByYear({year: item.year})">View details<\/a>\r\n                            <\/td>\r\n                        <\/tr>\r\n                        <\/tbody>\r\n                    <\/table>\r\n                <\/div>\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <page-loading-message ng-if="invoiceReport.isLoading"><\/page-loading-message>\r\n    <page-empty-message ng-if="invoiceReport.isLoading === false && invoiceReport.items.length === 0"><\/page-empty-message>\r\n    <page-error-message ng-if="invoiceReport.isLoading === false && invoiceReport.hasError === true"><\/page-error-message>\r\n\r\n<\/div>');n.put("modify-resource-modal.html",'<div class="modal-header">\r\n    <button type="button" class="close" aria-label="Close" ng-click="$dismiss()"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <h3 class="modal-title">{{newItem == true ? \'Add\' : \'Modify\'}} Resource Item<\/h3>\r\n<\/div>\r\n<div class="modal-body">\r\n\r\n    <div>\r\n        <div class="form-group" ng-if="heading.Name != undefined">\r\n            <label for="parent" class="control-label">Parent<\/label>\r\n            <input id="parent" name="name" ng-model="heading.Name" type="text" disabled class="form-control input-lg" />\r\n        <\/div>\r\n        <div class="form-group">\r\n            <label for="name" class="control-label">Name<\/label>\r\n            <input id="name" name="name" ng-model="item.Name" type="text" class="form-control input-lg" />\r\n        <\/div>\r\n        <div class="form-group" ng-if="item.Type == 1">\r\n            <label for="url" class="control-label">URL<\/label>\r\n            <input id="url" name="url" ng-model="item.Url" type="text" class="form-control input-lg" />\r\n        <\/div>\r\n        <div class="form-group" ng-if="item.Type == 1">\r\n            <label for="sbus" class="control-label">SBUs (eg. 4100,4200)<\/label>\r\n            <input id="sbus" name="sbus" ng-model="item.Bus" type="text" class="form-control input-lg" />\r\n        <\/div>\r\n        <div class="form-group" ng-if="item.Type == 1">\r\n            <label for="icon" class="control-label">Icon<\/label>\r\n            <input id="icon" name="url" ng-model="item.Icon" type="text" class="form-control input-lg" />\r\n        <\/div>\r\n        <div class="form-group">\r\n            <label for="order" class="control-label">Order<\/label>\r\n            <input id="order" name="url" ng-model="item.ItemOrder" type="number" class="form-control input-lg" />\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n<div class="modal-footer">\r\n    <button class="btn btn-solid" type="button" ng-click="$dismiss()">Back to Useful Links<\/button>\r\n    <button class="btn btn-primary" type="button" ng-click="$close(item)">Save and Close<\/button>\r\n<\/div>');n.put("resources.html",'<div class="container">\r\n    <div class="row">\r\n\r\n        <div class="col-xs-12 m-b-20">\r\n            <h1 class="m-b-0">Resources<\/h1>\r\n            <div ng-if="hasProfileType([1])"><input type="checkbox" ng-model="ctrlResources.showEdit" /> Enable Edit Mode<\/div>\r\n        <\/div>\r\n        <div class="col-xs-12 col-md-6">\r\n            <div class="list-group" ng-repeat="heading in ctrlResources.resourceItems | orderBy : \'ItemOrder\'">\r\n                <h3 ng-if="ctrlResources.showEdit || heading.Children.length>0">{{ctrlResources.showEdit ? \'[\' + heading.ItemOrder + \'] \' : \'\'}}{{heading.Name}} \r\n                    <span ng-if="ctrlResources.showEdit" ng-click="ctrlResources.deleteMenuItem($event, heading.Id)" class="float-right pointer-cursor m-l-5">\r\n                        <i class="fa fa-fw fa-trash"><\/i>\r\n                    <\/span>\r\n                    <span ng-if="ctrlResources.showEdit" ng-click="ctrlResources.editMenuItem($event, heading, heading.Id)" class="float-right pointer-cursor">\r\n                        <i class="fa fa-fw fa-pencil"><\/i>\r\n                    <\/span><\/h3>\r\n                <a ng-repeat="child in heading.Children | orderBy : \'ItemOrder\'" class="list-group-item p-r-5" ng-href="{{child.Url}}" target="_blank" metrics-track="Resources: Useful Link Clicked" metrics-track-data="{linkName: child.Name, linkUrl: child.Url, linkSbus: child.Bus }"><i class="fa fa-fw" ng-class="child.Icon"><\/i> {{ctrlResources.showEdit ? \'[\' + child.ItemOrder + \'] \' : \'\'}}{{child.Name}} <span ng-if="ctrlResources.showEdit" ng-click="ctrlResources.deleteMenuItem($event, child.Id)" class="float-right m-l-5"><i class="fa fa-fw fa-trash"><\/i><\/span><span ng-if="ctrlResources.showEdit" ng-click="ctrlResources.editMenuItem($event, child, heading)" class="float-right pointer-cursor"><i class="fa fa-fw fa-pencil"><\/i><\/span><\/a>\r\n            <a ng-if="hasProfileType([1]) && ctrlResources.showEdit" class="list-group-item" href="javascript:;" ng-click="ctrlResources.addNewMenuItem(heading)"><i class="fa fa-fw fa-plus-circle"><\/i> Add New Link<\/a>\r\n        <\/div>\r\n            \r\n            <div ng-if="hasProfileType([1]) && ctrlResources.showEdit" class="list-group">\r\n                <a href="javascript:;" ng-click="ctrlResources.addNewMenuItem(undefined)"><h3>Add New Heading<\/h3><\/a>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n<\/div>\r\n');n.put("thankyou.html",'<div id="thankyouContent" class="container">\r\n\r\n    <div class="row" ng-if="!thankyou.isLoading">\r\n\r\n        <div class="content-empty" ng-show="thankyou.hasSuccess">\r\n            <span class="content-empty-icon fs-icon" data-feature="concierge" data-status="success"><\/span>\r\n            <h3 class="content-empty-title">Completed!<\/h3>\r\n            <p>{{thankyou.note}}<\/p>\r\n        <\/div>\r\n\r\n        <div class="content-empty" ng-show="thankyou.hasError">\r\n            <span class="content-empty-icon fs-icon" data-feature="concierge" data-status="warning"><\/span>\r\n            <h3 class="content-empty-title">Something went wrong<\/h3>\r\n            <p>Please try again or contact Connect support.<\/p>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n    <div class="row" ng-show="thankyou.isLoading">\r\n        <div class="col-xs-12">\r\n            <div class="loading loading-page fx-fade"><i><\/i> Loading&hellip;\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("_userQuickAdd.html",'<div class="modal-header modal-header-clean text-center">\r\n    <button type="button" class="modal-close close" aria-label="Close" ng-click="$close(\'x\')"><span aria-hidden="true">&times;<\/span><\/button>\r\n    <span class="fs-icon block-margin-sm" data-feature="deligates" data-status="{{step == 2 ? \'warning\' : \'\'}}{{step == 4 ? \'success\' : \'\'}}{{step == 5 ? \'error\' : \'\'}}"><\/span>\r\n    <h2 id="modal-title" class="flush">Add teammates <span class="label label-feature label-feature-updated">updated<\/span><\/h2>\r\n<\/div>\r\n\r\n<!-- Form -->\r\n<div class="modal-body" ng-show="step === 1">\r\n    \r\n    <p id="modal-desc" class="lead sub-block-margin text-center">Give your teammates instant access to your CSR Connect accounts.<\/p>\r\n\r\n    <form name="userQuickAdd">\r\n        <div role="group" aria-labelledby="teammate-add-multi-label">\r\n            <p id="teammate-add-multi-label" class="control-label">Enter up to 3 emails<\/p>\r\n\r\n            <div class="form-group">\r\n                <label for="userQuickAddEmail1" class="control-label sr-only">Email 1<\/label>\r\n                <div ng-messages="(userQuickAdd.$submitted || userQuickAdd.userQuickAddEmail1.$dirty) && userQuickAdd.userQuickAddEmail1.$error" role="alert" class="form-control-status">\r\n                    <p ng-message="required" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please enter an email address.<\/p>\r\n                    <p ng-message="email" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please provide a valid email address<\/p>\r\n                    <p ng-message="uniqueComboEmailUsername" role="alert" class="form-control-error" metrics-track="Add teammate nonunique email" metrics-track-data="{email: userQuickAdd.userQuickAddEmail1.$viewValue}" metrics-track-immediately="true"><i class="fa fa-exclamation-triangle"><\/i> Your new teammate needs a unique email - this one\'s already in use for Connect.<\/p>\r\n                <\/div>\r\n                <input id="userQuickAddEmail1" name="userQuickAddEmail1" type="email"\r\n                       placeholder="eg: jeff@example.com"\r\n                       class="form-control input-lg" ng-model="newUsers[0].email"\r\n                       ng-model-options="{ updateOn: \'default blur\', debounce: {\'default\': 300, \'blur\': 0} }"\r\n                       required valid-email unique-combo-email-username />\r\n            <\/div>\r\n        \r\n            <div class="form-group">\r\n                <label for="userQuickAddEmail2" class="control-label sr-only" ng-class="{disabled: !(!!newUsers[0].email || !!newUsers[1].email)}">Email 2<\/label>\r\n                <div ng-messages="(userQuickAdd.$submitted || userQuickAdd.userQuickAddEmail2.$dirty) && userQuickAdd.userQuickAddEmail2.$error" role="alert" class="form-control-status">\r\n                    <p ng-message="email" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please provide a valid email address<\/p>\r\n                    <p ng-message="uniqueComboEmailUsername" role="alert" class="form-control-error" metrics-track="Add teammate nonunique email" metrics-track-data="{email: userQuickAdd.userQuickAddEmail2.$viewValue}" metrics-track-immediately="true"><i class="fa fa-exclamation-triangle"><\/i> Your new teammate needs a unique email - this one\'s already in use for Connect.<\/p>\r\n                <\/div>\r\n                <input id="userQuickAddEmail2" name="userQuickAddEmail2" type="email"\r\n                       placeholder="eg: jeff@example.com"\r\n                       class="form-control input-lg" ng-model="newUsers[1].email"\r\n                       ng-model-options="{ updateOn: \'default blur\', debounce: {\'default\': 300, \'blur\': 0} }"\r\n                       valid-email unique-combo-email-username />\r\n            <\/div>\r\n\r\n            <div class="form-group">\r\n                <label for="userQuickAddEmail3" class="control-label sr-only" ng-class="{disabled: !(!!newUsers[1].email || !!newUsers[2].email)}">Email 3<\/label>\r\n                <div ng-messages="(userQuickAdd.$submitted || userQuickAdd.userQuickAddEmail3.$dirty) && userQuickAdd.userQuickAddEmail3.$error" role="alert" class="form-control-status">\r\n                    <p ng-message="email" role="alert" class="form-control-error"><i class="fa fa-exclamation-triangle"><\/i> Please provide a valid email address<\/p>\r\n                    <p ng-message="uniqueComboEmailUsername" role="alert" class="form-control-error" metrics-track="Add teammate nonunique email" metrics-track-data="{email: userQuickAdd.userQuickAddEmail3.$viewValue}" metrics-track-immediately="true"><i class="fa fa-exclamation-triangle"><\/i> Your new teammate needs a unique email - this one\'s already in use for Connect.<\/p>\r\n                <\/div>\r\n                <input id="userQuickAddEmail3" name="userQuickAddEmail3" type="email"\r\n                       placeholder="eg: jeff@example.com"\r\n                       class="form-control input-lg" ng-model="newUsers[2].email"\r\n                       ng-model-options="{ updateOn: \'default blur\', debounce: {\'default\': 300, \'blur\': 0} }"\r\n                       valid-email unique-combo-email-username />\r\n            <\/div>\r\n        <\/div>\r\n    <\/form>\r\n<\/div>\r\n<div class="modal-footer" ng-show="step === 1" aria-describedby="quick-add-further-info">\r\n    <button type="submit" class="btn btn-primary btn-lg btn-block" validation-submit="userQuickAdd" ng-click="submitQuickAddForm()">Add teammates<\/button>\r\n    <p id="quick-add-further-info">Your teammates will be activated immediately with same account access as you.<\/p>\r\n<\/div>\r\n\r\n<!-- Confirmation - ya sure? (singular add) -->\r\n<div class="modal-body text-center" ng-if="step === 2">\r\n    <p class="lead">Are you sure you want to create the user accounts below?<\/p>\r\n    <ul class="list-group">\r\n        <li class="list-group-item" ng-repeat="newUser in newUsers" ng-if="newUser.email"><strong>{{newUser.email}}<\/strong><\/li>\r\n    <\/ul>\r\n    <p>They will be activated immediately and will have the same permissions as you and access to all of your CSR accounts.<\/p>\r\n<\/div>\r\n<div class="modal-footer" ng-if="step === 2">\r\n    <div class="row">\r\n        <div class="col-xs-12 col-sm-6">\r\n            <button type="button" class="btn btn-primary btn-lg btn-block" ng-click="createNewUser()">Continue<\/button>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6">\r\n            <button type="button" class="btn btn-default btn-lg btn-block" ng-click="cancelNewUser()">Cancel<\/button>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<!-- Submitting -->\r\n<div class="modal-body" ng-if="step === 3">\r\n    <div class="loading loading-page"><i><\/i> Adding your teammates&hellip;<\/div>\r\n<\/div>\r\n\r\n<!-- Success -->\r\n<div class="modal-body text-center" ng-if="step === 4">\r\n    <p class="lead">Your users have been successfully created.<\/p>\r\n    <p>An email has been sent to each user inviting them to get started. You can <a ui-sref="app.adminProfile.list" ng-click="$close()" metrics-track="Add teammate post action" metrics-track-data="{action: \'View teammates\'}">manage your teammates<\/a> to update permissions or edit details.<\/p>\r\n    <div ng-if="newUserFailures && newUserFailures.length" class="alert alert-danger">\r\n        <p><span ng-repeat="failure in newUserFailures track by $index">{{failure}},&nbsp;<\/span> could not be created. Please contact Connect support for assistance.<\/p>\r\n    <\/div>\r\n<\/div>\r\n<div class="modal-footer" ng-if="step === 4">\r\n    <div class="row">\r\n        <div class="col-xs-12 col-sm-6">\r\n            <button type="button" class="btn btn-primary btn-lg btn-block" ng-click="$close()" metrics-track="Add teammate post action" metrics-track-data="{action: \'OK\'}">Ok<\/button>\r\n        <\/div>\r\n        <div class="col-xs-12 col-sm-6">\r\n            <a ui-sref="app.adminProfile.list" class="btn btn-default btn-lg btn-block" ng-click="$close()" metrics-track="Add teammate post action" metrics-track-data="{action: \'View teammates\'}">Manage your teammates<\/a>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n\r\n<!-- Error -->\r\n<div class="modal-body" ng-if="step === 5">\r\n    <p class="lead">There was an error creating your new teammate.<\/p>\r\n    <p>Please try again later, or contact support.<\/p>    \r\n<\/div>\r\n<div class="modal-footer" ng-if="step === 5">\r\n    <button type="button" class="btn btn-default btn-lg btn-block" ng-click="$close()">Ok :(<\/button>\r\n<\/div>');n.put("profile-insights.html",'<div class="row" data-list-view>\r\n\r\n    <div class="col-xs-12">\r\n        <p data-ng-if="!canManageOthersDelegates || !delegateParentId" class="breadcrumbs">\r\n            <a data-ng-href="#/admin/profile/list">{{isTeammatesView ? \'Teammates\' : \'Users\'}}<\/a> <i class="fa fa-angle-right"><\/i>\r\n            <a href="javascript:;" data-ng-href="#/admin/profile/edit/{{newUser.UserId}}">{{newUser.LoginId}}<\/a> <i class="fa fa-angle-right"><\/i>\r\n            Your company details\r\n        <\/p>\r\n\r\n        <p data-ng-if="delegateParentId && canManageOthersDelegates" class="breadcrumbs">\r\n            <a href="javascript:;" data-ng-href="#/admin/profile/list">Users<\/a> <i class="fa fa-angle-right"><\/i>\r\n            <a href="javascript:;" data-ng-href="#/admin/profile/edit/{{delegateParentId}}">{{delegateParent.LoginId}}<\/a> <i class="fa fa-angle-right"><\/i>\r\n            <a href="javascript:;" data-ng-href="#/admin/profile/delegates/{{delegateParentId}}">Delegates<\/a> <i class="fa fa-angle-right"><\/i>\r\n            <a href="javascript:;" data-ng-click="backToProfile(newUser.UserId, delegateParentId)">{{newUser.LoginId}}<\/a> <i class="fa fa-angle-right"><\/i>\r\n            Your company details\r\n        <\/p>\r\n\r\n        <h1>{{newUser.FirstName + \' \' + newUser.LastName}}<\/h1>\r\n        <h2>Your company details<\/h2>\r\n    <\/div>\r\n\r\n    <div class="col-xs-12 col-md-8">\r\n\r\n        <div class="panel">\r\n\r\n            <div class="row" ng-if="insights.loading">\r\n                <div class="col-xs-12">\r\n                    <div class="loading loading-page">\r\n                        <i><\/i>\r\n                        Loading Company Details&hellip;\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div ng-if="!insights.loading" insight-questions questions-complete="insights.questionsComplete()"\r\n                 show-progress="false" mode="edit"\r\n                 userid="{{newUser.UserId}}"\r\n                 nav-link="#/admin/profile/edit/{{newUser.UserId}}" nav-link-display="Back to user details"><\/div>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n');n.put("user-insights-edit.html",'<div class="container user-details">\r\n\r\n    <div class="row">\r\n        <div class="col-xs-12">\r\n            <h1>Your company details<\/h1>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class="row">\r\n\r\n        <div user-edit-nav><\/div>\r\n\r\n        <div class="col-xs-12 col-md-8">\r\n            <div class="panel">\r\n                <div insight-questions questions-complete="insights.questionsComplete()" show-progress="false" mode="edit"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("user-insights.html",'<div id="dataQuality">\r\n    <div class="container container-small">\r\n        <div insight-questions questions-complete="insights.questionsComplete()" show-progress="true" show-reminder="true" mode="create"><\/div>\r\n    <\/div>\r\n<\/div>\r\n');n.put("userEditNav.html",'<div class="col-xs-12 col-md-4 pull-right" ng-if="ueNav.dqStatus.insightQuestionsEnabled">\r\n    <div class="list-group" role="group" aria-label="User options">\r\n        <a data-ng-href="#/user/details"\r\n           id="nav-userDetails"\r\n           class="list-group-item">\r\n            <i class="fa fa-fw fa-edit"><\/i> User details\r\n        <\/a>\r\n\r\n        <a id="nav-manageNotifications"\r\n           data-ng-show="ueNav.canManageInvoiceNotifications"\r\n           ng-href="#/user/invoicenotifications"\r\n           data-auth-key="Customer/Invoice&Customer/Invoice/Notifications/Toggle"\r\n           class="list-group-item">\r\n            <i class="fa fa-fw fa-bell"><\/i> Manage email notifications\r\n        <\/a>\r\n\r\n        <a data-ng-href="#/user/insightsedit"\r\n           id="nav-companyDetails"\r\n           class="list-group-item">\r\n            <i class="fa fa-fw fa-question-circle"><\/i> Your company details <span ng-if="hasProfileType([1,2,3])">({{ueNav.dqStatus.insightsPercentComplete}}%)<\/span>\r\n        <\/a>\r\n    <\/div>\r\n<\/div>\r\n\r\n<div class="col-xs-12 col-md-4 pull-right" ng-if="!ueNav.dqStatus.insightQuestionsEnabled && ueNav.canManageInvoiceNotifications" data-auth-key="Customer/Invoice&Customer/Invoice/Notifications/Toggle">\r\n    <div class="list-group" role="group" aria-label="User options">\r\n        <a data-ng-href="#/user/details"\r\n           id="nav-userDetails"\r\n           class="list-group-item">\r\n            <i class="fa fa-fw fa-edit"><\/i> User details\r\n        <\/a>\r\n\r\n        <a id="nav-manageNotifications"\r\n           data-ng-show="ueNav.canManageInvoiceNotifications"\r\n           ng-href="#/user/invoicenotifications"\r\n           data-auth-key="Customer/Invoice&Customer/Invoice/Notifications/Toggle"\r\n           class="list-group-item">\r\n            <i class="fa fa-fw fa-bell"><\/i> Manage email notifications\r\n        <\/a>\r\n    <\/div>\r\n<\/div>\r\n');n.put("datepicker.html",'<div ng-switch="view">\r\n    <div ng-switch-when="date">\r\n        <table>\r\n            <thead>\r\n                <tr>\r\n                    <th><button type="button" ng-click="prev()"><i class="fa fa-arrow-left"><\/i><\/button><\/th>\r\n                    <th colspan="5" class="switch"><button type="button" ng-click="setView(\'month\')">{{date|date:"MMMM yyyy"}}<\/button><\/th>\r\n                    <th><button type="button" ng-click="next()"><i class="fa fa-arrow-right"><\/i><\/button><\/th>\r\n                <\/tr>\r\n                <tr>\r\n                    <th ng-repeat="day in weekdays" style="overflow: hidden">{{ day|date:"EEE" }}<\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr ng-repeat="week in weeks">\r\n                    <td ng-repeat="day in week" ng-class="{\'start\': isStart(day), \'end\': isEnd(day), \'now\':isNow(day),\'active\':isSameDay(day),\'disabled\':(day.getMonth()!=date.getMonth() || ((isFromDatePicker() ? !inValidRange(day) : false))),\'after\':isAfter(day),\'before\':isBefore(day)}">\r\n                        <button type="button" ng-click="setDate(day)" ng-bind="day.getDate()" ng-disabled="(isFromDatePicker() ? !inValidRange(day) : false)"><\/button>\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n    <div ng-switch-when="year">\r\n        <table>\r\n            <thead>\r\n                <tr>\r\n                    <th><button type="button" ng-click="prev(10)"><i class="fa fa-arrow-left"><\/i><\/button><\/th>\r\n                    <th colspan="5" class="switch">{{years[0].getFullYear()}}-{{years[years.length-1].getFullYear()}}<\/th>\r\n                    <th><button type="button" ng-click="next(10)"><i class="fa fa-arrow-right"><\/i><\/button><\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr>\r\n                    <td colspan="7">\r\n                        <button type="button" ng-repeat="year in years"\r\n                                ng-class="{\'active\':isSameYear(year),\'now\':isNow(year)}"\r\n                                ng-click="setDate(year)"\r\n                                ng-bind="year.getFullYear()"\r\n                                ng-disabled="!isSameYear(year) && !inValidRange(year)"><\/button>\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n    <div ng-switch-when="month">\r\n        <table>\r\n            <thead>\r\n                <tr>\r\n                    <th><button type="button" ng-click="prev()"><i class="fa fa-arrow-left"><\/i><\/button><\/th>\r\n                    <th colspan="5" class="switch" ng-click="setView(\'year\')">{{ date|date:"yyyy" }}<\/th>\r\n                    <th><button type="button" ng-click="next()"><i class="fa fa-arrow-right"><\/i><\/button><\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr>\r\n                    <td colspan="7">\r\n                        <button type="button" ng-repeat="month in months"\r\n                                ng-class="{\'active\':isSameMonth(month),\'after\':isAfter(month),\'before\':isBefore(month),\'now\':isNow(month)}"\r\n                                ng-click="setDate(month)"\r\n                                ng-bind="month|date:\'MMM\'"\r\n                                ng-disabled="!isSameMonth(month) && !inValidRange(month)"><\/button>\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n    <div ng-switch-when="hours">\r\n        <table>\r\n            <thead>\r\n                <tr>\r\n                    <th><button type="button" ng-click="prev(24)"><i class="fa fa-arrow-left"><\/i><\/button><\/th>\r\n                    <th colspan="5" class="switch"><button type="button" ng-click="setView(\'date\')">{{ date|date:"dd MMMM yyyy" }}<\/button><\/th>\r\n                    <th><button type="button" ng-click="next(24)"><i class="fa fa-arrow-right"><\/i><\/button><\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr>\r\n                    <td colspan="7">\r\n                        <button type="button" ng-repeat="hour in hours"\r\n                                ng-class="{\'now\':isNow(hour),\'active\':isSameHour(hour)}"\r\n                                ng-click="setDate(hour)" ng-bind="hour|time"\r\n                                ng-disabled="!isSameHour(hour) && !inValidRange(hour)"><\/button>\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n    <div ng-switch-when="minutes">\r\n        <table>\r\n            <thead>\r\n                <tr>\r\n                    <th><button type="button" ng-click="prev()"><i class="fa fa-arrow-left"><\/i><\/button><\/th>\r\n                    <th colspan="5" class="switch">\r\n                        <button type="button" ng-click="setView(\'hours\')">{{ date|date:"dd mmmm yyyy" }}<\/button>\r\n                    <\/th>\r\n                    <th><button type="button" ng-click="next()"><i class="fa fa-arrow-right"><\/i><\/button><\/th>\r\n                <\/tr>\r\n            <\/thead>\r\n            <tbody>\r\n                <tr>\r\n                    <td colspan="7" ng-class="{active:isSameMinutes(minute),\'now\':isNow(minute)}">\r\n                        <button type="button" ng-repeat="minute in minutes"\r\n                                ng-click="setDate(minute)"\r\n                                ng-bind="minute|time"\r\n                                ng-disabled="!isSameMinutes(minute) && !inValidRange(minute)"><\/button>\r\n                    <\/td>\r\n                <\/tr>\r\n            <\/tbody>\r\n        <\/table>\r\n    <\/div>\r\n<\/div>\r\n')}]),function(){"use strict";function n(n,t){var i=this,r;i.isLoading=!0;i.hasSuccess=null;i.hasError=null;i.note="Thank you!";r=function(){t.save(null,{id:n.id,thanks:n.thanks},function(n){i.note=n.Note;i.hasSuccess=!0;i.hasError=!1;i.isLoading=!1},function(){i.hasSuccess=!1;i.hasError=!0;i.isLoading=!1})};r()}angular.module("app.thankyou").controller("thankyouController",n);n.$inject=["$stateParams","thankyouService"]}(),function(){"use strict";function n(n){n.configureStates(t())}function t(){return[{state:"app.thankyou",config:{url:"/thankyou?id$?thanks",pageTitle:"Thankyou",bodyClass:"landing",views:{"app@":{templateUrl:"thankyou.html",controller:"thankyouController",controllerAs:"thankyou"},"application-header@":{templateUrl:"lite-header.html"},"application-footer@":{templateUrl:"app-footer.html"}}}}]}angular.module("app.thankyou").run(n);n.$inject=["routerHelper"]}(),function(){"use strict";function n(n){return n("/api/thankyou/:id/:thanks")}angular.module("app.thankyou").factory("thankyouService",n);n.$inject=["$resource"]}(),function(){"use strict";function n(n,t,i,r,u){n.selectedAccounts={};n.searchText="";n.oAssignedAccountsCount=null;n.assignedAccountsCount=null;n.showAssignedOnly=null;n.dirty=!1;n.loading=!0;n.quickSearch=function(t){(t.length>1||t.length===0)&&n.list.search(!0)};n.isDelegateProfileType=function(){return[8,10,12,13,14].indexOf(n.getNewUser().ProfileType)>=0};n.loadUserAssignedAccounts=function(){n.isDelegateProfileType()?r.loadDelegates.get({userId:i.userId},function(t){n.selectedAccounts={};angular.forEach(t.Accounts,function(t){n.selectedAccounts[t.AccountId]=t});n.oAssignedAccountsCount=n.updateCount()}):r.load.get({userId:i.userId},function(t){n.selectedAccounts={};angular.forEach(t.Accounts,function(t){n.selectedAccounts[t.MasterId]=t});n.oAssignedAccountsCount=n.updateCount()})};n.renderAccountList=function(){n.loadUserAssignedAccounts();n.isDelegateProfileType()?(n.tableHeaders=[{columnName:"Name1",displayName:"Name"},{columnName:"SbuName",displayName:"Business"},{columnName:"AccountId",displayName:"Account No."},{columnName:"IsActive",displayName:"Status"}],n.listViewConfig={resourceName:"userAccountsById",filters:[{field:"IsActive",operator:"=",value:"true"},{field:"Name1",operator:"like",value:n.searchText,condition:"or"},{field:"AccountId",operator:"like",value:n.searchText,condition:"or"}],order:[{field:"Name1",orderBy:"asc"}],count:!0,itemsPerPage:10,additionalQueryParams:{userId:n.delegateParentId}}):n.listViewConfig={resourceName:"userCustomerMasterAccountsWithChildren",filters:[{field:"IsActive",operator:"=",value:"true"},{field:"Name",operator:"like",value:n.searchText,condition:"or",nested:"start"},{field:"MasterId",operator:"like",value:n.searchText,condition:"or",nested:"end"}],order:[{field:"Name",orderBy:"asc"}],count:!0,itemsPerPage:10,additionalQueryParams:{userId:t.session.user.Profile.UserId,assigneeId:i.userId}};angular.isDefined(n.list)&&n.list.init(n.listViewConfig);n.profileLoaded=!0};n.init=function(){n.newUser.UserId?n.renderAccountList():n.loadUserData(i.userId,function(){n.renderAccountList()})};n.init();n.$on("list.search",function(){n.loading=!0;n.isDelegateProfileType()?(n.list.config.filters.Name1.value=n.searchText,n.list.config.filters.AccountId.value=n.searchText):(n.list.config.filters.Name.value=n.searchText,n.list.config.filters.MasterId.value=n.searchText)});n.$on("list.onDataBind",function(){n.loading=!1});n.saveAccounts=function(){var t=[];angular.isNumber(n.savesInProgress)||(n.savesInProgress=0);n.savesInProgress++;angular.forEach(n.selectedAccounts,function(n){t.push(n.Id)});r.update.save({userId:i.userId},t,function(){n.savesInProgress--;u.add({id:"form-status",type:"success",message:n.assignedAccountsCount+" account(s) assigned to "+n.newUser.LoginId,expire:!0});n.dirty=!1},function(n){u.add({id:"form-status",type:"error",message:n.data.Message})})};n.toggleAccount=function(t){n.isDelegateProfileType()?angular.isDefined(n.selectedAccounts[t.AccountId])?delete n.selectedAccounts[t.AccountId]:n.selectedAccounts[t.AccountId]=t:angular.isDefined(n.selectedAccounts[t.MasterId])?delete n.selectedAccounts[t.MasterId]:n.selectedAccounts[t.MasterId]=t;n.updateCount();n.dirty=!0};n.numberOfChildrenAssigned=function(t){var i=0;return angular.forEach(t.Children,function(t){n.isAssigned(t)&&i++}),i};n.toggleMasterAccount=function(t,i){if(n.isDelegateProfileType()){var r=i.target.checked;angular.forEach(t.Children,function(t){angular.isDefined(n.selectedAccounts[t.AccountId])&&!r?delete n.selectedAccounts[t.AccountId]:n.selectedAccounts[t.AccountId]=t})}else n.toggleAccount(t);n.updateCount();n.dirty=!0};n.updateCount=function(){return n.assignedAccountsCount=Object.keys(n.selectedAccounts).length};n.refreshList=function(){n.list.config.additionalQueryParams.userId=n.showAssignedOnly?i.userId:n.isDelegateProfileType()?n.delegateParentId:t.session.user.Profile.UserId;n.list.search(!0)};n.toggleShowAssignedOnly=function(){n.showAssignedOnly=!n.showAssignedOnly;n.refreshList()};n.clearAssignedAccounts=function(){n.selectedAccounts={};n.updateCount();n.dirty=!0;n.showAssignedOnly=!1;n.refreshList()};n.isAssigned=function(t){return n.isDelegateProfileType()?angular.isDefined(n.selectedAccounts[t.AccountId]):angular.isDefined(n.selectedAccounts[t.MasterId])};n.areAllChildrenAssigned=function(t){var i=t.Children.length,r=0;return angular.forEach(t.Children,function(t){n.isAssigned(t)&&r++}),i===r&&i!==0?!0:!1};n.oneOrMoreChildrenAssigned=function(t){return angular.isDefined(t)?angular.isDefined(t.Children)?(angular.forEach(t.Children,function(t){if(n.isAssigned(t))return!0}),!1):!1:!1}}angular.module("app.users").controller("UserAccountsController",n);n.$inject=["$scope","$rootScope","$stateParams","userAccountsAssociate","notificationService"]}(),function(){"use strict";function n(n,t,i,r,u){n.forceUserCsatData={};n.searchOption={};n.profileId=i.userId;n.init=function(){u.get({userId:i.userId},function(t){n.userCsatTrack=t;n.forceUserCsatData.CsatDateEligible=new Date(t.CsatDateEligible)})};n.error=function(n){r.add({id:"form-status",type:"error",message:n})};n.success=function(n){r.add({id:"form-status",type:"success",message:n,expire:!0})};n.quickSearch=function(t){(t.length>1||t.length===0)&&n.list.search()};n.tableHeaders=[{columnName:"ResponseDateTime",displayName:"CSAT Date and time"},{columnName:"Response",displayName:"Response"},{columnName:"Reason",displayName:"Reason"}];n.listViewConfig={resourceName:"userCsat",filters:[{field:"UserId",operator:"=",value:i.userId}],count:!0,additionalQueryParams:{userId:i.userId}};n.forceUserCsat=function(){var r={UserId:i.userId,CsatDateEligible:t("date")(n.forceUserCsatData.CsatDateEligible,"yyyy-MM-dd HH:mm:ss")};u.save(r,function(){n.success("User was successfully forced to be CSAT prompted.")},function(t){n.error(t.data.Message)})};n.humaniseResponse=function(n){return n==1?"Not Good":n==2?"Good":n==3?"Spectacular":void 0};n.init()}angular.module("app.users").controller("UserCsatController",n);n.$inject=["$scope","$filter","$stateParams","notificationService","userCsatTrack"]}(),function(n){"use strict";function t(t,i,r,u,f,e,o,s,h){function c(t,i,r,u){var f="<div style=text-align: left><p>The email address you are changing to is currently being used as the primary contact for invoices on the following accounts:<\/p>",e="<p>By proceeding, you will continue to receive summary emails from Connect and if you have been receiving individual emails per invoice, or other non-email correspondence, this will no longer be sent.<\/p><p>If you have any queries please contact our support team.<\/p><\/div>";i.requestConfirmation=!0;t(i,function(n){r(n)},function(o){var c,l;o&&o.data&&o.data.Message?(c=JSON.parse(o.data.Message),c||u("Could not parse response data."),c.cause!=="Confirmation Required"&&u(c.cause),l="",n.forEach(c.accounts,function(n){l+='<div class="well" style="text-align: left;"><i class="fa fa-briefcase fa-fw"><\/i> '+s("sbuName")(n.sbuCode)+" - "+n.accountId+"<\/div>"}),h.swal({title:"Confirm change of email address",text:f+l+e,html:!0,showCancelButton:!0,cancelButtonText:"Amend details",confirmButtonText:"Proceed"},function(n){n&&(i.requestConfirmation=!1,t(i,function(n){r(n)},u))})):u(o)})}i.isImpersonating=!!t.isImpersonating;i.validationErrors=null;i.isInternalUser=!1;i.dqStatus=o.status;u.get().$promise.then(function(n){i.user=n.Profile;i.setIsInternalUser(String(i.user.ProfileType))});i.isCustomerOrDelegate=f.isUserCustomerOrCustomerDelegate();i.notifications=function(n){r.go("app.adminProfile.invoice-notifications",{userId:n.UserId})};i.submitUserDetailsForm=function(n){i.submitted=!0;i.form.$valid&&c(u.update,n,i.success,i.errors)};i.setIsInternalUser=function(n){i.isInternalUser=f.isInternalUser(n)};i.success=function(t){var r=n.extend({},i.session.user,{Profile:t});f.setUser(r);e.add({id:"form-status",type:"success",message:"Your details have been updated",expire:!0});i.$emit("achievements.taskComplete",{taskName:"02UpdateUserDetails",status:2})};i.errors=function(n){n.data.ModelState&&(i.validationErrors=n.data.ModelState)};i.toggleNotification=function(n,t){if(i.user!==undefined){(i.user.UserNotificationSettings===undefined||i.user.UserNotificationSettings===null)&&(i.user.UserNotificationSettings=[]);var r=i.user.UserNotificationSettings.indexOf(n);t&&r===-1&&i.user.UserNotificationSettings.push(n);t||r===-1||i.user.UserNotificationSettings.splice(r,1)}}}n.module("app.users").controller("UserDetailsController",t);t.$inject=["$rootScope","$scope","$state","userData","authService","notificationService","dqService","$filter","SweetAlert"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h,c,l,a,v,y,p){function k(){n.newUser.IsActive=!0;s.add({id:"form-status",type:"success",message:"You have activated "+f(n.formattedUserString),expire:!0})}function d(n,t,i,r){var u="<div style=text-align: left><p>The email address you are changing to is currently being used as the primary contact for invoices on the following accounts:<\/p>",f="<p>By proceeding, you will continue to receive summary emails from Connect and if you have been receiving individual emails per invoice, or other non-email correspondence, this will no longer be sent.<\/p><p>If you have any queries please contact our support team.<\/p><\/div>";t.requestConfirmation=!0;n(t,function(n){i(n)},function(e){var o,s;e&&e.data&&e.data.Message?(o=JSON.parse(e.data.Message),o||r("Could not parse response data."),o.cause!=="Confirmation Required"&&r(o.cause),s="",angular.forEach(o.accounts,function(n){s+='<div class="well" style="text-align: left;"><i class="fa fa-briefcase fa-fw"><\/i> '+v("sbuName")(n.sbuCode)+" - "+n.accountId+"<\/div>"}),l.swal({title:"Confirm change of email address",text:u+s+f,html:!0,showCancelButton:!0,cancelButtonText:"Amend details",confirmButtonText:"Proceed"},function(u){u&&(t.requestConfirmation=!1,n(t,function(n){i(n)},r))})):r(e)})}function g(){return l.swal({type:"warning",title:"Cannot reset user password",text:"Inactive users cannot have their passwords reset"})}function nt(){return!n.isNewUser&&!n.newUser.IsActive}function tt(t){return l.swal({title:"Reset user password",text:"Are you sure you want to reset password for \n"+f(n.formattedUserString)+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Reset Password"},function(n){n&&e.resetPwd.save({userId:t},function(){s.add({id:"form-status",type:"success",message:"Password reset successfully!",expire:!0})},function(n){s.add({id:"form-status",type:"error",message:n.data.Message})})})}var b,w;n.clearUserData();n.backToSearchUrl=null;n.teammatesOrUsers=n.isTeammatesView?"Teammates":"Users";b=n.canManageOthersDelegates?u.delegateParentId:n.session.user.Profile.UserId;n.setDelegateParentId(b);n.$watch("delegateParent",function(i){n.isNewUser&&n.delegateParentId&&(n.newUser.CompanyName=i&&i.CompanyName?i.CompanyName:t.session.user.Profile.CompanyName)});w=p.get();w&&w.state.name=="app.adminProfile.list"&&(w.params.search!=undefined||w.params.type!=undefined||w.params.page>=1)&&(n.backToSearchUrl=r.href(w.state.name,w.params));n.loadUserData(u.profileId);n.lockoutHasCompleted=function(){return moment.utc()>moment(n.newUser.FailedPasswordSuspendedUntil)?!0:!1};n.updateSelectedPosition=function(n){n.Position=n.selectedPosition==="Other"?"":n.selectedPosition};n.listDelegates=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.delegates",{delegateParentId:u.profileId})};n.isInternalUser=function(n){return["1","2","3","4","5","6"].indexOf(String(n))>-1};n.accounts=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.accounts",{userId:u.profileId})};n.permissions=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.permissions",{userId:u.profileId})};n.notifications=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.invoiceNotificationsToggle",{userId:u.profileId})};n.csat=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.csat",{userId:u.profileId})};n.insightQuestions=function(){angular.isDefined(u.profileId)&&r.go("app.adminProfile.insights",{userId:u.profileId})};n.dataQuality=function(){var t="<b>"+f(n.formattedUserString)+"<\/b>",r,i;if(n.newUser.dqStatus.LastPromptedDateUtc){r=moment(n.newUser.dqStatus.LastPromptedDateUtc).format("DD/MM/YYYY HH:mm");i=","+n.newUser.dqStatus.OutstandingAreas.join()+",";t=t+"<p><i>Last prompted: "+r+".<\/i><\/p>";var u=i.indexOf(","+Enums.dataQualityAreas.basicDetails+",")==-1,e=i.indexOf(","+Enums.dataQualityAreas.profilePic+",")==-1,o=i.indexOf(","+Enums.dataQualityAreas.insights+",")==-1;n.newUser.dqStatus.PercentComplete!==100&&(n.newUser.dqStatus.PercentComplete!==0&&(t=t+"<p>The following area(s) are <b>complete<\/b>:<br/>",u&&(t=t+"<br/>Basic Details"),e&&(t=t+"<br/>Profile Picture"),o&&(t=t+"<br/>Insights"),t=t+"<\/p>"),t=t+"<p>The following area(s) are <b>incomplete<\/b>:<br/>",u||(t=t+"<br/>Basic Details"),e||(t=t+"<br/>Profile Picture"),o||(t=t+"<br/>Insights"),t=t+"<\/p>");n.newUser.dqStatus.ReminderDateUtc&&n.newUser.dqStatus.PercentComplete!==100&&(t=t+" A reminder is set for "+moment(n.newUser.dqStatus.ReminderDateUtc).format("DD/MM/YYYY HH:mm")+".")}else t=t+" has not been prompted.<br/>";t=t.replace(/^[,.]+|[,.]+$/,"");t=t+"<p><br/><b>The profile is "+n.newUser.dqStatus.PercentComplete+"% complete.<\/b><\/p>";l.swal({title:"Data Quality",text:t,type:"info",html:!0,showCancelButton:!1,confirmButtonText:"OK"},function(){return})};n.resetPwd=function(n){return nt()?g():tt(n)};n.clearIntercomUserId=function(t){e.clearIntercomUserId.save({userId:t},function(){s.add({id:"form-status",type:"success",message:"You have cleared the Intercom User Id for "+f(n.formattedUserString),expire:!0})},function(n){s.add({id:"form-status",type:"error",message:n.data.Message})})};n.inactive=function(t){l.swal({title:"Deactivate user",text:"Are you sure you want to deactivate\n"+f(n.formattedUserString)+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Deactivate user"},function(i){i&&e.inactive.save({userId:t},function(){n.newUser.IsActive=!1;s.add({id:"form-status",type:"success",message:"You have deactivated "+f(n.formattedUserString),expire:!0})},function(n){s.add({id:"form-status",type:"error",message:n.data.Message})})})};n.active=function(t){l.swal({title:"Activate user",text:"Are you sure you want to activate\n"+f(n.formattedUserString)+"?",type:"warning",showCancelButton:!0,confirmButtonText:"Activate user"},function(n){n&&e.active.save({userId:t,forceActivation:!1},function(n){n.WarningMessage?l.swal({html:!0,title:"Activate user",text:f(n.WarningMessage),type:"warning",showCancelButton:!0,confirmButtonText:"Activate user"},function(n){n&&e.active.save({userId:t,forceActivation:!0},function(){k()})}):k()},function(n){s.add({id:"form-status",type:"error",message:n.data.Message})})})};n.$on("user.impersonate",function(){r.go("app.dash").then(function(){s.add({id:"impersonation.status",type:"success",message:"You are now impersonating",expire:!0})})});n.impersonate=function(r){var u=function(){e.impersonate.save({userId:r},function(n){var u=i.get("connectToken"),r;h.destroySession();i.put("connectToken_secondary",u);r=n.access_token;h.createSession(r);t.$broadcast("user.impersonate");c.initActive([]);a.get(null,function(n){c.initActive(n.UserPreference.AccountSelection);h.user().then(function(n){t.session.auth=n.Permissions;t.isImpersonating=i.get("connectToken_secondary");h.setUser(n);t.$broadcast("user.authenticated");y.loadOrganisations().then(function(n){h.updateSessionOrg(n)})})})},function(n){s.add({id:"impersonation.status",type:"error",message:n.data.Message})})};l.swal({title:"Impersonate "+n.newUser.LoginId+"?",text:"You are about to enter impersonation mode as\n"+f(n.formattedUserString),type:"info",showCancelButton:!0,confirmButtonText:"Continue"},function(n){n&&u()})};n.error=function(n){s.add({id:"form-status",type:"error",message:n})};n.success=function(n){s.add({id:"form-status",type:"success",message:n,expire:!0})};n.submit=function(t){n.form.$valid&&(n.isNewUser&&!n.delegateParentId?d(e.save,t,function(t){h.isInternalUser(String(t.ProfileType))?n.backToProfile(t.UserId):r.go("app.adminProfile.accounts",{userId:t.UserId});n.success(t.LoginId+" successfully created")},function(t){n.error(t.data.Message)}):n.isNewUser&&n.delegateParentId?(t.DelegateParentId=n.delegateParentId,o.profile.save(t,function(i){h.isInternalUser(String(i.ProfileType))?n.backToProfile(i.UserId,t.DelegateParentId):r.go("app.adminProfile.accounts",{userId:i.UserId});n.success("Delegate "+i.LoginId+" successfully created")},function(t){n.error(t.data.Message)})):d(e.edit.save,t,function(i){n.backToProfile(i.UserId,t.DelegateParentId);n.success("User details updated successfully");i.dqStatus&&(n.newUser.dqStatus=i.dqStatus)},function(t){n.error(t.data.Message)}))}}angular.module("app.users").controller("UserEditController",n);n.$inject=["$scope","$rootScope","$cookieStore","$state","$stateParams","$sanitize","userProfile","userProfilesDelegates","notificationService","authService","accountsService","SweetAlert","userPreferences","$filter","amOrganisationsService","$previousState"]}(),function(){function t(){return{restrict:"A",scope:{model:"=",form:"="},controller:n,controllerAs:"ueNav",templateUrl:"userEditNav.html"}}function n(n,t,i){var r=this;r.canManageInvoiceNotifications=!1;r.pageTitle=n.current.pageTitle;r.dqStatus=t.$parent.dqStatus;i.isUserCustomerOrCustomerDelegate()&&(r.canManageInvoiceNotifications=i.canDo("r","Customer/Invoice/Notifications/Toggle"))}angular.module("component.userDetails").directive("userEditNav",t);n.$inject=["$state","$scope","authService","userPermissionTypes"]}(),function(n){"use strict";function t(n,t){function r(){t.exitToDash()}function u(){t.exitToDash()}var i=this;i.questionsComplete=r;n.$on("dq.remindLater",u)}n.module("app.users").controller("UserInsightsController",t);t.$inject=["$scope","authService"]}(angular),function(n){"use strict";function t(n,t,i,r){function f(){i.add({id:"form-status",type:"success",message:"Your company details have been updated",expire:!0})}var u=this;u.questionsComplete=f;n.dqStatus=r.status;u.loading=!0;t.userId&&(u.userId=t.userId,n.loadUserData(t.userId,function(){u.loading=!1}))}n.module("app.users").controller("UserInsightsEditController",t);t.$inject=["$scope","$stateParams","notificationService","dqService"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e,o,s,h){function p(){a("Loading notifications");!c.isCurrentUser||f.isUserCustomerOrCustomerDelegate()?(c.isCurrentUser||n.loadUserData(i.userId),tt("Customer/Invoice/Notifications/Toggle"),u.get({userId:l}).$promise.then(function(n){c.accountsAvailable=n.length>0;g(n);c.hasActivePrimaryAccount=k();v()},function(n){v();r.log(y,n);o.add({id:"invoice-notification-management",type:"error",message:"Failed to retrieve notification settings. Please try again at another time."})})):(c.notPermitted=!0,v())}function w(){p();h.swal({title:"Update failed",text:"We were unable to update your notification settings at this time. Please try again soon, or contact customer support if the problem persists.",type:"error",showCancelButton:!1,confirmButtonText:"Ok"})}function k(){return c.invAccounts.length>0&&c.invAccounts.find(d)?!0:!1}function d(n){return n.enabled}function g(n){c.invAccounts=[];c.sharedAccounts=[];angular.forEach(n,function(n){n.isInv?c.invAccounts.push(n):c.sharedAccounts.push(n)})}function nt(n){var t=[];return angular.forEach(n,function(n){n.length>0&&angular.forEach(n,function(n){t.push(n)})}),t}function tt(n){c.isCurrentUser?c.hasNotificationPermissions=f.canDo("r",n):s.get({userId:i.userId,profileDefault:!1},function(t){c.hasNotificationPermissions=t.PermissionItems.find(it,n)!==undefined},function(){c.hasNotificationPermissions=!1})}function a(n){c.loading=!0;c.loadingMessage=n||"Loading"}function v(){c.loading=!1}function it(n){return n.Reference===this&&n.Read}var c=this;e.setState(!1);a("Loading notifications");var y="[InvoiceNotificationsController]",l=i.userId,b=f.getUser();l||(l=b.Profile.UserId);c.accounts=function(){t.go("app.adminProfile.accounts",{userId:l})};c.isCurrentUser=l===b.Profile.UserId;c.hasNotificationPermissions=null;c.canEdit=f.canDo("u","Customer/Invoice/Notifications/Toggle");c.enableAll=function(){c.invAccounts.length>0&&angular.forEach(c.invAccounts,function(n){n.enabled=!0});c.sharedAccounts.length>0&&angular.forEach(c.sharedAccounts,function(n){n.enabled=!0});c.invoiceNotificationForm.$setDirty()};c.updateToggles=function(){a("Saving notifications");var n=[c.invAccounts,c.sharedAccounts],t=nt(n),i={userId:l,notifications:t};u.update(i).$promise.then(function(){c.hasActivePrimaryAccount=k();o.add({id:"form-status",type:"success",message:"Your email notifications have been updated",expire:!0})},function(n){o.add({id:"form-status",type:"error",message:n.data.Message,expire:!0});w()}).then(function(){v()})};c.turnOnNotifications=function(){a("Loading notifications");u.allowNotifications({userid:i.userId},{}).$promise.then(function(){c.hasNotificationPermissions=!0;p()},function(n){w();r.log(y,n)})};c.turnOffNotifications=function(){a("Disabling notifications");u.disallowNotifications({userid:i.userId},{}).$promise.then(function(){c.hasNotificationPermissions=!1;v()},function(n){w();r.log(y,n)})};p()}angular.module("app.users").controller("InvoiceNotificationsController",n);n.$inject=["$scope","$state","$stateParams","$log","userInvoiceNotifications","authService","accountsService","notificationService","userPermissionTypes","SweetAlert"]}(),function(n){"use strict";function t(t,i,r,u,f,e){function s(n){return n.Reference===this}function o(n,t,i){n[i]===!0&&t[i]!==!0&&(n[i]=!1)}t.loadPermissions=function(r,f){var e={userId:i.userId,profileDefault:n.isDefined(r)?r:!1};return u.get(e).$promise.then(function(n){f?t.DefaultPermissionItems=n.PermissionItems:t.PermissionItems=n.PermissionItems;t.hasActiveInvAccount=n.UserIsConnectPrimary?!0:!1;t.AllowablePermissions=n.AllowablePermissions;t.updateDependentPermissions()})};t.matchPermission=function(n){return function(t){return t.PermissionId===n}};t.updateDependentPermissions=function(){n.isArray(t.PermissionItems)&&n.forEach([{child:"Customer/Invoice/Notifications/Toggle",dependsOn:["Customer/Invoice"]}],function(i){var r=t.PermissionItems.find(s,i.child),u;r&&(r.isChild=!0,u=r.Disabled,n.forEach(i.dependsOn,function(n){var i=t.PermissionItems.find(s,n);i&&i.Read||(u=!0)}),r.Disabled=u,u&&(r.Read=!1,r.Update=!1,r.Delete=!1,r.Create=!1))})};t.uncheckPermissionsThatInvolvePricing=function(n){n.Reference!=="Customer/ProductPricing"||n.Read||e.swal({title:"Remove product pricing?",text:"The relevant permissions will be unchecked to ensure the user can't view product pricing. Do you wish to continue?",type:"warning",showCancelButton:!0,confirmButtonText:"Confirm"},function(i){if(i)for(var r=0;r<t.PermissionItems.length;r++)(t.PermissionItems[r].Reference=="Customer/Statement"||t.PermissionItems[r].Reference=="Customer/Invoice"||t.PermissionItems[r].Reference=="Customer/SalesOrder"||t.PermissionItems[r].Reference=="Customer/Quote"||t.PermissionItems[r].Reference=="All/Payment"||t.PermissionItems[r].Reference=="Customer/Reporting"||t.PermissionItems[r].Reference=="Customer/Account/Balance")&&(t.PermissionItems[r].Create=!1,t.PermissionItems[r].Read=!1,t.PermissionItems[r].Update=!1,t.PermissionItems[r].Delete=!1);else n.Read=!0});t.updateDependentPermissions()};t.hideProductPricingChecked=!1;t.filterPermissions=function(t){return function(i){return!n.isDefined(t)||t===""?i.Hidden?!1:!0:i.Name.toLowerCase().indexOf(t.toLowerCase())>-1&&!i.Hidden}};t.$watch("newUser.ProfileType",function(n,i){i!=null&&n!=i&&n!=t.currentProfileType&&e.swal({title:"Change user type?",text:"Changing the user type will replace any currently assigned permissions and accounts with the defaults for\n "+t.profileTypeNames[n],type:"warning",showCancelButton:!0,confirmButtonText:"Confirm"},function(u){u?(t.setProfileType(n),t.setCurrentProfileType(n),f.edit.save(t.newUser,function(){t.loadPermissions(!0)},function(n){r.add({id:"form-status",type:"error",message:n.data.Message,expire:!0});t.setProfileType(i);t.setCurrentProfileType(i)})):(t.setProfileType(i),t.setCurrentProfileType(i))})});t.updatePermissions=function(){for(var i,n,f=0;f<t.PermissionItems.length;f++)i=t.PermissionItems[f],n=selectByProp("PermissionId",i.PermissionId,t.AllowablePermissions),n!==null&&n!==undefined&&(o(i,n.result,"Create"),o(i,n.result,"Read"),o(i,n.result,"Update"),o(i,n.result,"Delete"));u.update.save(t.PermissionItems,function(){r.add({id:"form-status",type:"success",message:"Permissions updated successfully",expire:!0})},function(n){r.add({id:"form-status",type:"error",message:n.data.Message,expire:!0})})};t.loadUserData(i.userId,function(){t.loadPermissions().then(function(){t.loadPermissions(!0,!0)})});t.showInvoiceDisabledInformation=function(){return e.swal("Unable to disable this permission","This user is the main invoice contact for one of their accounts. Please contact support to update the invoicing permission for this user.")}}n.module("app.users").controller("UserPermissionsController",t);t.$inject=["$scope","$stateParams","notificationService","userPermissionTypes","userProfile","SweetAlert"]}(angular),function(){"use strict";function n(n,t,i,r,u,f){function s(n){return n.Reference===this&&n.Read}function h(n){return n.Reference===this&&n.AllowablePermissions.indexOf("r")>=0}function c(){var t=n.newUser.FullName,i=n.newUser.LoginId;return t.trim().length>0?t:i}n.profileTypes=[];n.profileTypeNames={};n.isNewUser=!1;n.canImpersonate=!1;n.newUser={Phone:"",Mobile:""};n.isInternalUser=!1;n.isAdminUser=!1;n.delegateParentId=null;n.delegateParent=null;n.profileLoaded=!1;n.isImpersonating=!1;n.formattedUserString=null;n.isTeammatesView=i.isCustomerUser();n.canManageInvoiceNotifications=!1;n.getNewUser=function(){return n.newUser};n.setIsAdminUser=function(t){n.isAdminUser=i.isAdminUser(t)};n.setProfileType=function(t){n.newUser.ProfileType=t;n.setIsInternalUser(String(t));n.setIsAdminUser(String(t))};n.setIsInternalUser=function(t){n.isInternalUser=i.isInternalUser(t)};n.canManageOthersDelegates=[1,2,3,4,5].indexOf(n.session.user.Profile.ProfileType)>=0;n.setCurrentProfileType=function(t){n.currentProfileType=t};n.setDelegateParentId=function(t){n.delegateParentId=t};n.setDelegateParent=function(t){n.delegateParent=t};var e=!1,o=!1;n.loadUserData=function(t,l){if(angular.isDefined(t)){if(t===n.profileLoaded){l&&l.call();return}n.canManageInvoiceNotifications=!1;n.profileLoaded=!1;r.load.get({profileId:t},function(r){n.newUser=r.newUser;n.newUser.FullName=c();n.isNewUser=r.isNewUser;n.isImpersonating=i.isImpersonating();n.profileLoaded=o&&e;n.setProfileType(r.newUser.ProfileType);n.setCurrentProfileType(r.newUser.ProfileType);n.setDelegateParentId(r.newUser.DelegateParentId);n.setDelegateParent(r.delegateParent);n.newUser.dqStatus=r.dqStatus?r.dqStatus:null;n.formattedUserString=n.newUser.FirstName+" "+n.newUser.LastName+" ("+n.newUser.LoginId+")";[7,8].indexOf(r.newUser.ProfileType)>=0?f.get({userId:t,profileDefault:!1},function(t){n.canManageInvoiceNotifications=t.PermissionItems.find(s,"Customer/Invoice")&&t.AllowablePermissions.find(h,"Customer/Invoice/Notifications/Toggle");e=!0;n.profileLoaded=!0},function(){n.profileLoaded=!0}):n.profileLoaded=!0;l&&l.call()})}else n.isNewUser=!0,n.profileLoaded=!0,n.currentProfileType=null,n.loadParentData();u.all.get({parentId:n.delegateParentId},function(t){n.profileTypes=t;angular.forEach(t,function(t){n.profileTypeNames[t.ProfileTypeId]=t.Name})})};n.loadParentData=function(){n.canManageOthersDelegates&&n.delegateParentId&&r.load.get({profileId:n.delegateParentId},function(t){n.setDelegateParent(t.newUser)})};n.clearUserData=function(){n.isNewUser=!1;n.canImpersonate=!1;n.newUser={Phone:"",Mobile:""};n.isInternalUser=!1;n.isAdminUser=!1;n.delegateParentId=null;n.delegateParent=null;n.profileLoaded=!1;n.isImpersonating=!1;n.formattedUserString=null;n.currentProfileType=null;n.isTeammatesView=i.isCustomerUser()};n.backToProfile=function(n,i){i?t.go("app.adminProfile.editDelegate",{profileId:n,delegateParentId:i}):t.go("app.adminProfile.edit",{profileId:n})}}angular.module("app.users").controller("UserProfilesController",n);n.$inject=["$scope","$state","authService","userProfile","userProfileTypes","userPermissionTypes"]}(),function(n){function t(t,i,r,u,f){function s(r,o){function l(){r.step=e.start;r.newUser={firstName:null,email:null};f.track("Add teammate displayed");r.quickAddModal=i.open({templateUrl:"_userQuickAdd.html",scope:r,ariaLabelledBy:"modal-title",ariaDescribedBy:"modal-desc",resolve:{step:function(){return r.step},newUser:function(){return r.newUser}}});r.quickAddModal.result.then(h,h)}function h(){f.track("Add teammate closed");r.newUser.success&&t.current.name==="app.adminProfile.list"&&t.reload()}function a(){f.track("Add teammate submitted");var t=[];n.forEach(r.newUsers,function(n){!n.email||t.indexOf(n.email)>=0?(n.firstname=null,n.email=null):t.push(n.email)});s(e.confirmation)}function v(){f.track("Add teammate cancelled");s(e.start)}function y(){s(e.submitting);var i=r.newUsers,t=[];n.forEach(i,function(n){n.email!=null&&t.push({emailAddress:n.email,firstName:n.firstName})});u.createDelegate.save(t,function(t){var i=[];if(n.forEach(t.Users,function(n){n&&(i.push({profileId:n.UserId,delegateParentId:r.session.user.Profile.UserId,emailAddress:n.email}),f.track("Add teammate successful",{firstName:n.firstName,emailAddress:n.emailAddress}))}),t.Failures&&t.Failures.length&&f.track("Add teammate failed",{error:t.Messages}),r.newUserParams=i[0],r.newUserFailures=t.Failures,!i.length){c("Failure creating users - no users returned.");return}r.newUser.success=!0;s(e.success);n.forEach(r.newUsers,function(n){n.firstname=null;n.email=null})},function(n){c(n)})}function c(n){s(e.error);f.track("Add teammates failed",{error:n})}function s(n){r.step=e[n]||n}r.quickAddModal=null;r.step=e.start;r.newUser={firstName:null,email:null};r.newUsers=[{firstName:"",email:null},{firstName:"",email:null},{firstName:"",email:null}];o.click(l);r.submitQuickAddForm=a;r.createNewUser=y;r.cancelNewUser=v}var o={restrict:"A",link:s,replace:!1},e={start:1,confirmation:2,submitting:3,success:4,error:5};return o}n.module("app.users").directive("userQuickAdd",t);t.$inject=["$state","$modal","$validation","userProfile","metrics"]}(angular),function(n){"use strict";function t(n){n.configureStates(i())}function i(){return[{state:"app.user-details",config:{url:"/user/details",pageTitle:"User details",templateUrl:"authuser/userdetails",needsAuth:!0}},{state:"app.invoice-notifications",config:{url:"/user/invoicenotifications",needsAuth:!0,pageTitle:"Invoice notifications",templateUrl:"administration/profile/notifications",access:"Customer/Invoice/Notifications/Toggle"}},{state:"app.adminProfile",config:{url:"/admin/profile",pageTitle:"Users",templateUrl:"administration/profile",access:"All/Profile"}},{state:"app.adminProfile.list",config:{url:"/list?search?type?page",pageTitle:"Users",templateUrl:"administration/profile/list",access:"All/Profile"}},{state:"app.adminProfile.delegates",config:{url:"/delegates/:delegateParentId",pageTitle:"Delegates",templateUrl:"administration/profile/delegates",access:"All/Profile"}},{state:"app.adminProfile.new",config:{url:"/new",pageTitle:"Create new user",templateUrl:"administration/profile/edit",access:"All/Profile"}},{state:"app.adminProfile.newDelegate",config:{url:"/delegates/new/:delegateParentId",pageTitle:"Create new delegate",templateUrl:"administration/profile/delegatesedit",access:"All/Profile"}},{state:"app.adminProfile.edit",config:{url:"/edit/{profileId}",pageTitle:"User details",templateUrl:"administration/profile/edit",access:"All/Profile"}},{state:"app.adminProfile.editDelegate",config:{url:"/delegates/edit/:delegateParentId/:profileId",pageTitle:"Delegate details",templateUrl:"administration/profile/delegatesedit",access:"All/Profile"}},{state:"app.adminProfile.accounts",config:{url:"/accounts/{userId}",pageTitle:"Account assignment",templateUrl:"administration/profile/accounts",access:"All/Profile"}},{state:"app.adminProfile.permissions",config:{url:"/permissions/{userId}",pageTitle:"User permissions",templateUrl:"administration/profile/permissions",access:"All/Profile"}},{state:"app.adminProfile.invoiceNotificationsToggle",config:{url:"/notifications/{userId}",pageTitle:"Manage notifications",templateUrl:"administration/profile/notifications",access:"Customer/Invoice/Notifications/Toggle"}},{state:"app.adminProfile.csat",config:{url:"/csat/{userId}",pageTitle:"CSAT",templateUrl:"administration/profile/csat",access:"All/Profile"}},{state:"app.user-welcome",config:{url:"/user/welcome",pageTitle:"Welcome",templateUrl:"authuser/userwelcome",bodyClass:"fullscreenview",needsAuth:!0}},{state:"app.user-insights",config:{url:"/user/insights",pageTitle:"User insights",templateUrl:"user-insights.html",controller:"UserInsightsController",controllerAs:"insights",bodyClass:"fullscreenview",needsAuth:!0}},{state:"app.user-insights-edit",config:{url:"/user/insightsedit",pageTitle:"User insights",templateUrl:"user-insights-edit.html",controller:"UserInsightsEditController",controllerAs:"insights",needsAuth:!0}},{state:"app.adminProfile.insights",config:{url:"/insights/{userId}",pageTitle:"User insights",templateUrl:"profile-insights.html",controller:"UserInsightsEditController",controllerAs:"insights",access:"All/Profile"}}]}n.module("app.users").run(t);t.$inject=["routerHelper"]}(angular),function(n){"use strict";function t(n,t,i,r,u,f,e,o,s,h,c,l,a,v){n.clearUserData();n.searchText=t.params.search||"";n.selectedFilter=t.params.type||"";n.accessToken=f.token();n.userId=i.session.user.Profile.UserId;n.delegateParentId=r.delegateParentId;n.delegateParent=null;n.delegateParentId&&(n.isDelegateList=!0);n.delegateParentId&&s.load.get({profileId:n.delegateParentId},function(t){n.delegateParent=t.newUser});var y=function(){var t=$.grep(n.profileTypes,function(t){return t.ProfileTypeId.toString()==n.selectedFilter});return t.length?t[0].Name+"s":"users"};n.profileTypes=o.all.get(function(){n.selectedProfileTypeName=y()});n.delete=function(t){c.swal({title:"Delete Profile?",text:"Are you sure you want to delete this Profile?",type:"warning",showCancelButton:!0,confirmButtonText:"Yes",cancelButtonText:"Cancel"},function(i){i&&s.remove.save({userId:t},function(){n.list.search(!0)},function(n){a.add({type:"error",message:n.data.Message,expire:!0})})})};n.createNew=function(){var r="app.adminProfile.new",u=n.delegateParentId;n.isDelegateList&&n.canManageOthersDelegates&&(r="app.adminProfile.newDelegate");n.canManageOthersDelegates||(u=i.session.user.Profile.UserId);t.go(r,{delegateParentId:u})};n.editUrl=function(n,i){return t.href(i?"app.adminProfile.editDelegate":"app.adminProfile.edit",{profileId:n,delegateParentId:i})};n.exportFiles=function(t,i){t.preventDefault();u.open({templateUrl:"modal.html",controller:["$scope","$modalInstance","selectedItems","items",function(n,t,r,u){n.selectedItems=r.length?r:u;var e=jstz.determine(),o=$.map(n.selectedItems,function(n){return n.UserId}).join(","),s="/api/admin/profile/export?access_token="+f.token()+"&accountId="+l.getActive().join(",")+"&timeZone="+e.name()+"&fileType="+i+"&ids="+o;n.beginDownload=function(){t.dismiss();v.downloadUrl(s,"blah",undefined)};n.cancel=function(n){n.preventDefault();t.dismiss("cancel")}}],resolve:{selectedItems:function(){return n.selectedItems},items:function(){return n.list.items}}})};$("#btn-download-csv").on("click",function(t){n.exportFiles(t,e.csv)});$("#btn-download-excel").on("click",function(t){n.exportFiles(t,e.excel)});n.quickSearch=function(i){(i.length>0||i.length==0)&&(t.go(t.current.name,{search:i,type:n.selectedFilter,page:1},{notify:!1}),n.list.search(!0,!0))};n.tableHeaders=[{columnName:"",displayName:"",checkbox:!0},{columnName:"LoginId",displayName:"Username"},{columnName:"FullName",displayName:"Name"},{columnName:"CompanyName",displayName:"Company"},{columnName:"ProfileType",displayName:"Profile Type"},{columnName:"IsActive",displayName:"Status",className:"tf-center"},{columnName:"",displayName:""}];n.listViewConfig={resourceName:n.isDelegateList?"userDelegates":"userProfiles",filters:[{field:"IsDeleted",operator:"=",value:"false"},{field:"FullName",operator:"like",nested:"start",condition:"or",value:n.searchText},{field:"LoginId",operator:"like",condition:"or",value:n.searchText},{field:"EmailAddress",operator:"like",condition:"or",value:n.searchText},{field:"CompanyName",operator:"like",nested:"end",value:n.searchText},{field:"ProfileType",operator:"=",value:n.selectedFilter}],order:[{field:"FullName",orderBy:"asc"}],page:t.params.page,sortColumn:"FullName",asc:!1,itemName:n.isTeammatesView?"teammate":"user",count:!0,additionalQueryParams:{delegateParentId:r.delegateParentId}};n.$on("list.search",function(){n.selectedProfileTypeName=y();var t=n.searchText.replace(/'/g,"''");n.list.config.filters.FullName.value=t;n.list.config.filters.CompanyName.value=t;n.list.config.filters.LoginId.value=t;n.list.config.filters.EmailAddress.value=t;n.list.config.filters.ProfileType.value=n.selectedFilter})}n.module("app.users").controller("UsersListController",t);t.$inject=["$scope","$state","$rootScope","$stateParams","$modal","authService","exportService","userProfileTypes","userProfile","userProfiles","SweetAlert","accountsService","notificationService","shareTools"]}(angular),function(){"use strict";function n(n,t,i,r,u,f,e,o,s){function c(){t.dqStatus=e.status;f.get().$promise.then(function(n){t.user=n.Profile;t.userLoaded=!0});u.search().m!=undefined&&h()}function l(){t.loading=!0;r.checkValid(t.form)?f.update(t.user,function(i){n.info("got user details confirmation",t.user);n.info("got user details confirmation response",i);e.updateStatus({userPrompted:!0,detailsConfirmed:!0},function(){h(!0)});t.loading=!1},function(n){t.loading=!1;n.ModelState&&(t.validationErrors=n.ModelState)}):t.loading=!1}function h(n){if(!t.currentStep||t.currentStep==0){t.currentStep=t.steps.Welcome;return}if(t.currentStep==t.steps.Welcome){if($.inArray(Enums.dataQualityAreas.basicDetails,t.dqStatus.outstandingAreas)>=0){t.currentStep=t.steps.Details;return}if($.inArray(Enums.dataQualityAreas.profilePic,t.dqStatus.outstandingAreas)>=0){t.currentStep=t.steps.Avatar;return}if($.inArray(Enums.dataQualityAreas.insights,t.dqStatus.outstandingAreas)>=0){i.go("app.user-insights");return}}if(t.currentStep==t.steps.Details)if(n){if(!t.isCustomerOrDelegateUser()){s.exitToDash();return}if($.inArray(Enums.dataQualityAreas.profilePic,t.dqStatus.outstandingAreas)>=0){t.currentStep=t.steps.Avatar;return}if(!t.dqStatus.isNewUser&&$.inArray(Enums.dataQualityAreas.insights,t.dqStatus.outstandingAreas)>=0){i.go("app.user-insights");return}}else{l();return}if(t.currentStep==t.steps.Avatar)if(n){if($.inArray(Enums.dataQualityAreas.insights,t.dqStatus.outstandingAreas)>=0){i.go("app.user-insights");return}}else{if(e.status.avatarUploadedByUser){e.updateStatus({userPrompted:!0},function(){h(!0)});return}e.updateStatus({avatarSkipped:!0},function(){h(!0)});return}s.exitToDash()}t.loading=!1;t.userLoaded=!1;t.dqStatus=null;t.steps={Welcome:1,Details:2,Avatar:3};t.currentStep=1;o.isReady()?c():(n.log("User welcome > Init > Deferring until accounts ready"),t.$on("accounts.dataReady",c));t.goNext=function(){h()};t.showProgressIndicator=function(){return t.userLoaded&&t.currentStep!==t.steps.Welcome&&t.isCustomerOrDelegateUser()};t.showNewUserWelcome=function(){return t.userLoaded&&!t.dqStatus.isReminder&&t.dqStatus.isNewUser};t.showExistingUserWelcome=function(){return t.userLoaded&&!t.dqStatus.isReminder&&!t.dqStatus.isNewUser};t.showReminderWelcome=function(){return t.userLoaded&&t.dqStatus.isReminder};t.isCustomerOrDelegateUser=function(){return t.userLoaded&&(s.isCustomerUser(t.user.ProfileType)||s.isCustomerDelegateUser(t.user.ProfileType))}}angular.module("app.users").controller("UserWelcomeController",n);n.$inject=["$log","$scope","$state","$validation","$location","userData","dqService","accountsService","authService"]}()