{"version":3,"sources":["webpack:///./src/layouts/DefaultLayout.vue?b4cf","webpack:///./src/layouts/DefaultLayout.vue","webpack:///./src/layouts/DefaultLayout.vue?8707","webpack:///./src/layouts/DefaultLayout.vue?7673","webpack:///./src/components/general/Messages.vue?3276","webpack:///./src/components/general/Messages.vue","webpack:///./src/components/general/Messages.vue?7f9f","webpack:///./src/components/general/Messages.vue?cf22","webpack:///./src/components/general/Breadcrumbs.vue?683a","webpack:///./src/components/general/Breadcrumbs.vue","webpack:///./src/components/general/Breadcrumbs.vue?69cb","webpack:///./src/components/general/Breadcrumbs.vue?ebc0","webpack:///./src/components/general/SelectBox.vue?d797","webpack:///./src/components/general/SelectBox.vue","webpack:///./src/components/general/SelectBox.vue?81ce","webpack:///./src/components/general/SelectBox.vue?9312","webpack:///./src/components/general/Messages.vue?bc99","webpack:///./src/views/ForecastsPage.vue?18b5","webpack:///./src/views/ForecastsPage.vue?a1d0","webpack:///./src/store/modules/forecasts.ts","webpack:///./src/store/modules/historicForecasts.ts","webpack:///./src/views/ForecastsPage.vue","webpack:///./src/views/ForecastsPage.vue?188d","webpack:///./src/views/ForecastsPage.vue?4271"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","class","noBottomPadding","_t","staticRenderFns","required","default","component","directives","name","rawName","value","messages","length","expression","_l","message","index","key","getAlertClass","type","_v","_s","text","on","$event","preventDefault","stopPropagation","onRemoveMessage","EventBus","$on","Config","AddMessageEvent","onAddMessage","$off","push","Message","info","success","warning","error","splice","$t","authProfileName","profileName","_e","profile","hasCustomers","hasMultipleCustomers","attrs","showCustomerSelection","apply","arguments","selectedCustomer","breadcrumb","routeName","params","routeParams","query","routeQuery","userProfile","data","isAuthenticated","firstName","lastName","undefined","auth","authProfile","given_name","family_name","customers","$emit","ShowCustomerSelectionModalEvent","disabled","readonly","placeholder","$$selectedVal","Array","prototype","filter","call","target","options","o","selected","map","val","_value","theValue","multiple","option","domProps","optionGroups","optionGroup","optionGroupIndex","immediate","deep","breadcrumbs","responsibles","nonResponsibles","selectedCustomerId","onCustomersFilterSelect","allProducts","filteredProductNumbers","onProductsFilterSelect","anyFilter","onClearFilters","selectedContractPeriodId","currentForecastUpcomingWeeks","ref","allContractPeriods","currentForecastsData","onChangeContractPeriodId","errorLoading","currentForecastMonthsForContractPeriods","hasFilteredOnNonCurrentProductsOnly","isSaving","errorSaving","isAllowedToEdit","onSaveForecasts","onResetForecastListErrors","showHistory","loadHistoricForecasts","isLoadingHistory","closeHistory","historicForecastMonthsForContractPeriods","customerId","common","getDataFor","payload","period","forecastMonths","forecastMonth","isExpanded","weeks","some","forecastWeek","isInFocus","forecasts","forecast","newQuantity","quantity","contractPeriod","contractPeriodProduct","contractPeriodProducts","find","p","id","contractPeriodProductId","productNumber","product","productDisplayName","displayName","setLoadingComplete","setLoadingError","setLoading","force","hasFreshDataFor","Promise","resolve","item","currentlyLoadingPromise","isCurrentlyLoading","Consoler","debugLog","loadingPromise","getCurrentForecasts","then","currentForecasts","commitSetLoadingComplete","catch","debugWarn","commitSetLoadingError","reject","commitSetLoading","clearData","updateForecasts","updates","namespaced","dynamic","store","forecastsModule","getHistoricForecasts","historicForecasts","historicForecastsModule","Permissions","hasPermission","PermissionType","IsAllowedToEditForecasts","currentProducts","filteredProductNumber","currentProduct","upcomingWeeksSummary","historicForecastsData","currentContractPeriod","isCurrent","userCustomers","flatMap","cc","concat","c","items","toString","customer","initializeAndStopTrackPage","$route","route","routeTrackingInfo","initialize","hasFinished","stopTrackPage","customerIdByQuery","Number","isNaN","productNumbers","products","split","trim","invalidSelectedCustomer","loadCustomers","isSmiCustomer","nonSmiCustomers","updateQuery","loadForecasts","defaultContractPeriodId","reloadForecastChartsData","generateQuery","$router","replace","join","isLoading","dispatchLoad","finally","dispatchSave","$nextTick","$refs","forecastCharts","reloadData","saveForecasts","contractPeriodId","components","DefaultLayout","Breadcrumbs","Messages","CompanyChainCustomersTreeSelect","ForecastCharts","ForecastList","HistoricForecastList","ProductsTreeSelect"],"mappings":"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","file":"js/forecasts.cde8e8c2.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('main',{staticClass:\"content\",class:{ 'pb-6': !_vm.noBottomPadding }},[_c('div',[_vm._t(\"default\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class DefaultLayout extends Vue {\r\n @Prop({ required: false, default: () => false })\r\n public noBottomPadding!: boolean;\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DefaultLayout.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DefaultLayout.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./DefaultLayout.vue?vue&type=template&id=29cdfac5&\"\nimport script from \"./DefaultLayout.vue?vue&type=script&lang=ts&\"\nexport * from \"./DefaultLayout.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.messages.length > 0),expression:\"messages.length > 0\"}],staticClass:\"messages mt-2\"},[_c('div',{staticClass:\"container-fluid\"},[_vm._l((_vm.messages),function(message,index){return [_c('div',{key:index,staticClass:\"c-alert mb-2\",class:_vm.getAlertClass(message.type)},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(message.text))]),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onRemoveMessage(index)}}})])]})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport { Message, MessageType } from '@/models/Message';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Config } from '@/utils/Config';\r\n\r\n@Component\r\nexport default class Messages extends Vue {\r\n private messages: Message[] = [];\r\n\r\n private created(): void {\r\n EventBus.$on(Config.AddMessageEvent, this.onAddMessage);\r\n }\r\n\r\n private destroyed(): void {\r\n EventBus.$off(Config.AddMessageEvent, this.onAddMessage);\r\n }\r\n\r\n private onAddMessage(message: Message) {\r\n this.messages.push(message);\r\n }\r\n\r\n private getAlertClass(type: MessageType): string {\r\n switch (type) {\r\n case MessageType.info:\r\n return 'c-alert--blue';\r\n case MessageType.success:\r\n return 'c-alert--green';\r\n case MessageType.warning:\r\n return 'c-alert--yellow';\r\n case MessageType.error:\r\n return 'c-alert--red';\r\n }\r\n return '';\r\n }\r\n\r\n private onRemoveMessage(index: number) {\r\n this.messages.splice(index, 1);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Messages.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Messages.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Messages.vue?vue&type=template&id=0dc8484e&scoped=true&\"\nimport script from \"./Messages.vue?vue&type=script&lang=ts&\"\nexport * from \"./Messages.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Messages.vue?vue&type=style&index=0&id=0dc8484e&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0dc8484e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-breadcrumbs c-breadcrumbs--yellow\"},[_c('div',{staticClass:\"container-fluid\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between\"},[_c('div',{staticClass:\"order-2 u-sm-text-right pl-sm-3\"},[(_vm.isAuthenticated)?_c('span',{staticClass:\"d-none d-sm-inline\"},[(_vm.authProfile)?[_c('span',[_vm._v(\" \"+_vm._s(_vm.$t('breadcrumbs.other.loggedInAs'))+\": \")]),_c('span',{staticClass:\"nowrap u-tiny u-text-color-sodra-black\"},[_vm._v(_vm._s(_vm.authProfileName))])]:(_vm.profile)?[_c('span',{staticClass:\"nowrap u-tiny u-text-color-sodra-black\"},[_vm._v(_vm._s(_vm.profileName))])]:_vm._e()],2):_vm._e(),(_vm.profile && _vm.hasCustomers)?_c('span',{class:{\n 'd-none d-sm-inline': !_vm.hasMultipleCustomers,\n }},[_c('span',{staticClass:\"d-none d-sm-inline\"},[_vm._v(\", \")]),(_vm.hasMultipleCustomers)?_c('a',{staticClass:\"nowrap\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.showCustomerSelection.apply(null, arguments)}}},[_c('span',{staticClass:\"nowrap\"},[(_vm.selectedCustomer)?[_vm._v(_vm._s(_vm.selectedCustomer.name))]:[_vm._v(_vm._s(_vm.$t('breadcrumbs.other.chooseACustomer')))]],2),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"expand_more\")])]):(_vm.selectedCustomer)?_c('span',{staticClass:\"nowrap\"},[_vm._v(_vm._s(_vm.selectedCustomer.name))]):_vm._e()]):_vm._e()]),_c('div',[_c('router-link',{staticClass:\"c-breadcrumbs__item nowrap\",attrs:{\"to\":'/'}},[_c('i',{staticClass:\"material-icons\",attrs:{\"data-element-id\":\"home\"}},[_vm._v(\"home\")]),_vm._v(\" \"+_vm._s(_vm.$t('breadcrumbs.other.startPage'))+\" \")]),(_vm.items)?[_vm._l((_vm.items),function(breadcrumb,index){return [(breadcrumb.routeName)?_c('router-link',{key:index,staticClass:\"c-breadcrumbs__item nowrap\",attrs:{\"to\":{\n name: breadcrumb.routeName,\n params: breadcrumb.routeParams,\n query: breadcrumb.routeQuery,\n }}},[_vm._v(_vm._s(breadcrumb.name))]):_c('span',{key:index,staticClass:\"c-breadcrumbs__item nowrap\"},[_vm._v(_vm._s(breadcrumb.name))])]})]:_vm._e()],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Config } from '@/utils/Config';\r\nimport { authModule } from '@/store/modules/auth';\r\nimport { Profile } from 'oidc-client';\r\n\r\n@Component\r\nexport default class Breadcrumbs extends Vue {\r\n @Prop({ required: false, default: () => [] })\r\n private items!: Breadcrumb[];\r\n\r\n private get profile(): UserProfile | null {\r\n return userProfileModule.data !== null && userProfileModule.data.userProfile\r\n ? userProfileModule.data.userProfile\r\n : null;\r\n }\r\n\r\n private get profileName(): string | undefined {\r\n return this.isAuthenticated && this.profile\r\n ? `${this.profile.firstName} ${this.profile.lastName}`\r\n : undefined;\r\n }\r\n\r\n private get authProfile(): Profile | null | undefined {\r\n return authModule.profile;\r\n }\r\n\r\n private get authProfileName(): string | undefined {\r\n return this.isAuthenticated && this.authProfile\r\n ? `${this.authProfile.given_name} ${this.authProfile.family_name}`\r\n : undefined;\r\n }\r\n\r\n private get isAuthenticated(): boolean {\r\n return authModule.isAuthenticated;\r\n }\r\n\r\n private get selectedCustomer(): Customer | null {\r\n return userProfileModule.selectedCustomer;\r\n }\r\n\r\n private get hasCustomers(): boolean {\r\n return (\r\n this.profile !== null &&\r\n this.profile.customers !== undefined &&\r\n this.profile.customers.length > 0\r\n );\r\n }\r\n\r\n private get hasMultipleCustomers(): boolean {\r\n return (\r\n this.profile !== null &&\r\n this.profile.customers !== undefined &&\r\n this.profile.customers.length > 1\r\n );\r\n }\r\n\r\n private showCustomerSelection() {\r\n EventBus.$emit(Config.ShowCustomerSelectionModalEvent);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Breadcrumbs.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Breadcrumbs.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Breadcrumbs.vue?vue&type=template&id=ad90db9c&\"\nimport script from \"./Breadcrumbs.vue?vue&type=script&lang=ts&\"\nexport * from \"./Breadcrumbs.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.theValue),expression:\"theValue\"}],staticClass:\"o-select mb-0\",attrs:{\"disabled\":_vm.disabled,\"readonly\":_vm.readonly,\"placeholder\":_vm.placeholder},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.theValue=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_vm._l((_vm.options),function(option,index){return _c('option',{key:(\"options|\" + index),attrs:{\"label\":option.text,\"disabled\":option.disabled},domProps:{\"value\":option.value}},[_vm._v(\" \"+_vm._s(option.text)+\" \")])}),(_vm.optionGroups.length)?[(_vm.options.length === 0)?_c('option',{attrs:{\"disabled\":\"disabled\",\"default\":\"default\"},domProps:{\"value\":null}},[_vm._v(\" \"+_vm._s(_vm.placeholder)+\" \")]):_vm._e(),_vm._l((_vm.optionGroups),function(optionGroup,optionGroupIndex){return _c('optgroup',{key:(\"optionGroups|\" + optionGroupIndex),attrs:{\"label\":optionGroup.text}},_vm._l((optionGroup.options),function(option,index){return _c('option',{key:index,attrs:{\"label\":option.text,\"disabled\":option.disabled},domProps:{\"value\":option.value}},[_vm._v(\" \"+_vm._s(option.text)+\" \")])}),0)})]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\nexport interface SelectOption {\r\n value: any;\r\n text: string;\r\n disabled?: boolean;\r\n}\r\nexport interface SelectOptionGroup {\r\n options: SelectOption[];\r\n text: string;\r\n}\r\n\r\n@Component\r\nexport default class SelectBox extends Vue {\r\n @Prop({ required: true }) private value!: any;\r\n @Prop({ required: false, default: () => [] })\r\n private options!: SelectOption[];\r\n @Prop({ required: false, default: () => [] })\r\n private optionGroups!: SelectOptionGroup[];\r\n\r\n @Prop({ required: false, default: () => false }) private disabled!: boolean;\r\n @Prop({ required: false, default: () => false }) private readonly!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private formElementGroup!: boolean;\r\n @Prop({ required: false }) private placeholder!: string;\r\n\r\n private theValue: any = '';\r\n\r\n private created(): void {\r\n this.theValue = this.value;\r\n }\r\n\r\n // Watch value change\r\n @Watch('value', { immediate: false, deep: true })\r\n private onValueChange(val: any) {\r\n this.theValue = val;\r\n }\r\n\r\n // Watch theValue change\r\n @Watch('theValue', { immediate: false, deep: true })\r\n private onTheValueChange(val: any) {\r\n if (val !== this.value) {\r\n this.$emit('input', val);\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SelectBox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SelectBox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SelectBox.vue?vue&type=template&id=ebd2ef72&\"\nimport script from \"./SelectBox.vue?vue&type=script&lang=ts&\"\nexport * from \"./SelectBox.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Messages.vue?vue&type=style&index=0&id=0dc8484e&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForecastsPage.vue?vue&type=style&index=0&id=8c674428&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DefaultLayout',[_c('Breadcrumbs',{attrs:{\"items\":_vm.breadcrumbs}}),_c('Messages'),_c('div',{staticClass:\"container-fluid mt-3\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3\"},[_vm._v(_vm._s(_vm.$t('forecastsPage.title')))]),(_vm.responsibles.length || _vm.nonResponsibles.length)?_c('div',{staticClass:\"d-align-self-end\"},[_c('CompanyChainCustomersTreeSelect',{staticClass:\"customers-tree-select mb-1\",attrs:{\"value\":_vm.selectedCustomerId,\"responsibles\":_vm.responsibles,\"nonResponsibles\":_vm.nonResponsibles,\"filterIsSmiCustomer\":false,\"multiple\":false,\"clearable\":false,\"placeholder\":_vm.$t('forecastsPage.customerPlaceholder')},on:{\"select\":_vm.onCustomersFilterSelect}})],1):_vm._e()]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex flex-wrap mb-4\"},[(_vm.allProducts.length)?_c('ProductsTreeSelect',{staticClass:\"products-tree-select\",attrs:{\"value\":_vm.filteredProductNumbers,\"products\":_vm.allProducts,\"placeholder\":_vm.$t('forecastsPage.products.placeholder'),\"clearable\":false},on:{\"select\":_vm.onProductsFilterSelect}}):_vm._e(),(_vm.anyFilter && _vm.allProducts.length)?_c('button',{staticClass:\"o-button px-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onClearFilters}},[_vm._v(\" \"+_vm._s(_vm.$t('forecastsPage.clearFilters'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"clear\")])]):_vm._e()],1),(\n _vm.selectedCustomerId &&\n _vm.selectedContractPeriodId &&\n _vm.currentForecastUpcomingWeeks.length > 0\n )?_c('div',{staticClass:\"mb-5\"},[_c('ForecastCharts',{ref:\"forecastCharts\",attrs:{\"selectedContractPeriodId\":_vm.selectedContractPeriodId,\"selectedCustomerId\":_vm.selectedCustomerId,\"upcomingForecastWeeks\":_vm.currentForecastUpcomingWeeks,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"allContractPeriods\":_vm.allContractPeriods,\"currentForecastsData\":_vm.currentForecastsData,\"isSmi\":false},on:{\"changeContractPeriodId\":_vm.onChangeContractPeriodId}})],1):_vm._e(),(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('forecastsPage.error')))])]):_vm._e(),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 mb-3\"},[(_vm.isLoading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):(_vm.invalidSelectedCustomer)?_c('div',[_vm._v(\" \"+_vm._s(_vm.$t('forecastsPage.invalidSelectedCustomer'))+\" \")]):(!_vm.errorLoading)?[(\n _vm.currentForecastMonthsForContractPeriods.length &&\n !_vm.hasFilteredOnNonCurrentProductsOnly\n )?[_c('ForecastList',{attrs:{\"forecastMonthsforContractPeriods\":_vm.currentForecastMonthsForContractPeriods,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"isSaving\":_vm.isSaving,\"errorSaving\":_vm.errorSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit},on:{\"save\":_vm.onSaveForecasts,\"resetErrors\":_vm.onResetForecastListErrors}})]:_c('div',[(_vm.hasFilteredOnNonCurrentProductsOnly)?[_vm._v(_vm._s(_vm.$t('forecastsPage.noDataForFilteredProducts')))]:[_vm._v(_vm._s(_vm.$t('forecastsPage.noData')))]],2),(!_vm.showHistory)?_c('a',{staticClass:\"mt-2\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.loadHistoricForecasts()}}},[_vm._v(\" \"+_vm._s(_vm.$t('forecastsPage.showHistory'))+\" \")]):_vm._e(),(_vm.isLoadingHistory)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.showHistory && !_vm.isLoadingHistory)?[_c('a',{staticClass:\"mt-2 mb-2\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.closeHistory()}}},[_vm._v(\" \"+_vm._s(_vm.$t('forecastsPage.hideHistory'))+\" \")]),_c('HistoricForecastList',{attrs:{\"forecastMonthsforContractPeriods\":_vm.historicForecastMonthsForContractPeriods,\"filteredProductNumbers\":_vm.filteredProductNumbers}})]:_vm._e()]:_vm._e()],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport { CurrentForecasts } from '@/models/Forecasts/CurrentForecasts';\r\nimport forecastService from '@/services/ForecastService';\r\nimport { UpdateForecast } from '@/models/Forecasts/UpdateForecast';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'forecasts',\r\n dynamic: true,\r\n store,\r\n})\r\nclass ForecastsModule extends VuexModule {\r\n private common = new CommonArrayStore(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (customerId: number) => this.common.getDataFor(customerId);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: number;\r\n data: CurrentForecasts;\r\n }) {\r\n for (const period of payload.data.currentForecastMonthsForContractPeriods) {\r\n for (const forecastMonth of period.forecastMonths) {\r\n forecastMonth.isExpanded = forecastMonth.weeks.some(\r\n (forecastWeek) => forecastWeek.isInFocus\r\n );\r\n\r\n for (const forecastWeek of forecastMonth.weeks) {\r\n forecastWeek.isExpanded = forecastWeek.isInFocus;\r\n\r\n for (const forecast of forecastWeek.forecasts) {\r\n forecast.newQuantity = forecast.quantity;\r\n\r\n for (const contractPeriod of payload.data.allContractPeriods) {\r\n const contractPeriodProduct =\r\n contractPeriod.contractPeriodProducts.find(\r\n (p) => p.id === forecast.contractPeriodProductId\r\n );\r\n if (contractPeriodProduct !== undefined) {\r\n forecast.productNumber =\r\n contractPeriodProduct.product.productNumber;\r\n forecast.productDisplayName =\r\n contractPeriodProduct.product.displayName;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: number;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: number;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n customerId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload.customerId)) {\r\n return Promise.resolve(this.item(payload.customerId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.customerId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'forecasts'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = forecastService\r\n .getCurrentForecasts(payload.customerId)\r\n .then((currentForecasts) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.customerId,\r\n data: currentForecasts,\r\n });\r\n Consoler.debugLog('Load forecasts success', currentForecasts);\r\n return Promise.resolve(currentForecasts);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load forecasts failed', error);\r\n this.commitSetLoadingError({ id: payload.customerId, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.customerId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n\r\n @Action\r\n public async dispatchSave(payload: {\r\n customerId: number;\r\n updates: UpdateForecast[];\r\n }): Promise {\r\n return forecastService\r\n .updateForecasts(payload.customerId, payload.updates)\r\n .then(() => undefined)\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nexport const forecastsModule = getModule(ForecastsModule);\r\n","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport { HistoricForecasts } from '@/models/Forecasts/HistoricForecasts';\r\nimport forecastService from '@/services/ForecastService';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'historicForecasts',\r\n dynamic: true,\r\n store,\r\n})\r\nclass HistoricForecastsModule extends VuexModule {\r\n private common = new CommonArrayStore(60); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (customerId: number) => this.common.getDataFor(customerId);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: number;\r\n data: HistoricForecasts;\r\n }) {\r\n for (const period of payload.data\r\n .historicForecastMonthsForContractPeriods) {\r\n for (const forecastMonth of period.forecastMonths) {\r\n forecastMonth.isExpanded = forecastMonth.weeks.some(\r\n (forecastWeek) => forecastWeek.isInFocus\r\n );\r\n\r\n for (const forecastWeek of forecastMonth.weeks) {\r\n forecastWeek.isExpanded = forecastWeek.isInFocus;\r\n\r\n for (const forecast of forecastWeek.forecasts) {\r\n forecast.newQuantity = forecast.quantity;\r\n\r\n for (const contractPeriod of payload.data.allContractPeriods) {\r\n const contractPeriodProduct =\r\n contractPeriod.contractPeriodProducts.find(\r\n (p) => p.id === forecast.contractPeriodProductId\r\n );\r\n if (contractPeriodProduct !== undefined) {\r\n forecast.productNumber =\r\n contractPeriodProduct.product.productNumber;\r\n forecast.productDisplayName =\r\n contractPeriodProduct.product.displayName;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: number;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: number;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n customerId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload.customerId)) {\r\n return Promise.resolve(this.item(payload.customerId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.customerId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'historic forecasts'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = forecastService\r\n .getHistoricForecasts(payload.customerId)\r\n .then((historicForecasts) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.customerId,\r\n data: historicForecasts,\r\n });\r\n Consoler.debugLog('Load historic forecasts success', historicForecasts);\r\n return Promise.resolve(historicForecasts);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load historic forecasts failed', error);\r\n this.commitSetLoadingError({ id: payload.customerId, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.customerId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const historicForecastsModule = getModule(HistoricForecastsModule);\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport DefaultLayout from '@/layouts/DefaultLayout.vue';\r\nimport Breadcrumbs from '@/components/general/Breadcrumbs.vue';\r\nimport Messages from '@/components/general/Messages.vue';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { routeNameForecasts } from '@/router/routes';\r\nimport ForecastCharts from '@/components/ForecastCharts.vue';\r\nimport CompanyChainCustomersTreeSelect from '@/components/CompanyChainCustomersTreeSelect.vue';\r\nimport ForecastList from '@/components/ForecastList.vue';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport { forecastsModule } from '@/store/modules/forecasts';\r\nimport { ForecastSummaryProduct } from '@/models/Forecasts/ForecastSummaryProduct';\r\nimport { CurrentForecasts } from '@/models/Forecasts/CurrentForecasts';\r\nimport { ContractPeriod } from '@/models/ContractPeriod';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { userCustomersModule } from '@/store/modules/userCustomers';\r\nimport { Customers } from '@/models/Customers';\r\nimport { CompanyChain } from '@/models/CompanyChain';\r\nimport { ForecastsForContractPeriod } from '@/models/Forecasts/ForecastsForContractPeriod';\r\nimport { Forecast } from '@/models/Forecasts/Forecast';\r\nimport { Product } from '@/models/Product';\r\nimport { UpdateForecast } from '@/models/Forecasts/UpdateForecast';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Route } from 'vue-router';\r\nimport { historicForecastsModule } from '@/store/modules/historicForecasts';\r\nimport { HistoricForecasts } from '@/models/Forecasts/HistoricForecasts';\r\nimport HistoricForecastList from '@/components/HistoricForecastList.vue';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n CompanyChainCustomersTreeSelect,\r\n ForecastCharts,\r\n ForecastList,\r\n HistoricForecastList,\r\n ProductsTreeSelect,\r\n },\r\n})\r\nexport default class ForecastsPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n private isSaving: boolean = false;\r\n private errorSaving: boolean = false;\r\n private selectedCustomerId: number | null = null;\r\n private invalidSelectedCustomer: boolean = false;\r\n private filteredProductNumbers: string[] = [];\r\n private selectedContractPeriodId: number | null = null;\r\n private showHistory: boolean = false;\r\n private isLoadingHistory: boolean = false;\r\n\r\n private get anyFilter(): boolean {\r\n return this.filteredProductNumbers.length > 0;\r\n }\r\n\r\n private get currentForecastsData(): CurrentForecasts | null {\r\n return this.selectedCustomerId !== null\r\n ? forecastsModule.item(this.selectedCustomerId)\r\n : null;\r\n }\r\n\r\n private get isAllowedToEdit(): boolean {\r\n return Permissions.hasPermission(PermissionType.IsAllowedToEditForecasts);\r\n }\r\n\r\n private get allContractPeriods(): ContractPeriod[] {\r\n return this.currentForecastsData?.allContractPeriods ?? [];\r\n }\r\n private get currentProducts(): Product[] {\r\n return this.currentForecastsData?.currentProducts ?? [];\r\n }\r\n private get currentForecastMonthsForContractPeriods(): ForecastsForContractPeriod[] {\r\n return (\r\n this.currentForecastsData?.currentForecastMonthsForContractPeriods ?? []\r\n );\r\n }\r\n private get allProducts(): Product[] {\r\n return this.currentForecastsData?.allProducts ?? [];\r\n }\r\n private get hasFilteredOnNonCurrentProductsOnly(): boolean {\r\n return (\r\n this.filteredProductNumbers.length > 0 &&\r\n !this.filteredProductNumbers.some((filteredProductNumber) =>\r\n this.currentProducts.some(\r\n (currentProduct) =>\r\n filteredProductNumber === currentProduct.productNumber\r\n )\r\n )\r\n );\r\n }\r\n\r\n private get currentForecastUpcomingWeeks(): ForecastSummaryProduct[] {\r\n return this.currentForecastsData?.upcomingWeeksSummary ?? [];\r\n }\r\n\r\n private get historicForecastsData(): HistoricForecasts | null {\r\n return this.selectedCustomerId !== null\r\n ? historicForecastsModule.item(this.selectedCustomerId)\r\n : null;\r\n }\r\n\r\n private get historicForecastMonthsForContractPeriods(): ForecastsForContractPeriod[] {\r\n return (\r\n this.historicForecastsData?.historicForecastMonthsForContractPeriods ?? []\r\n );\r\n }\r\n\r\n private get defaultContractPeriodId(): number | null {\r\n if (this.allContractPeriods.length === 0) {\r\n return null;\r\n }\r\n\r\n const currentContractPeriod = this.allContractPeriods.find(\r\n (period) => period.isCurrent\r\n );\r\n return currentContractPeriod !== undefined\r\n ? currentContractPeriod.id\r\n : this.allContractPeriods[0].id;\r\n }\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get userCustomers(): Customers | null {\r\n return userCustomersModule.userCustomers;\r\n }\r\n\r\n private get responsibles(): CompanyChain[] {\r\n return this.userCustomers !== null ? this.userCustomers.responsibles : [];\r\n }\r\n\r\n private get nonResponsibles(): CompanyChain[] {\r\n return this.userCustomers !== null\r\n ? this.userCustomers.nonResponsibles\r\n : [];\r\n }\r\n\r\n private get customers(): Customer[] {\r\n return this.responsibles\r\n .flatMap((cc) => cc.customers)\r\n .concat(this.nonResponsibles.flatMap((cc) => cc.customers));\r\n }\r\n\r\n private get selectedCustomer(): Customer | null {\r\n if (this.selectedCustomerId === null) {\r\n return null;\r\n }\r\n\r\n return this.customers.find((c) => c.id === this.selectedCustomerId) ?? null;\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameForecasts,\r\n name: this.$t('breadcrumbs.' + routeNameForecasts).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedCustomer !== null) {\r\n items.push({\r\n routeName: routeNameForecasts,\r\n routeQuery: { customer: this.selectedCustomer.id },\r\n name: this.selectedCustomer.name,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.initializeAndStopTrackPage(this.$route);\r\n }\r\n\r\n private created(): void {\r\n this.initializeAndStopTrackPage(this.$route);\r\n }\r\n\r\n private initializeAndStopTrackPage(route: Route): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(route);\r\n\r\n this.initialize().then((hasFinished) => {\r\n if (!hasFinished) {\r\n return;\r\n }\r\n\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let customerIdByQuery: number | null = null;\r\n if (this.$route.query.customer) {\r\n const customerId = Number(this.$route.query.customer.toString());\r\n if (!isNaN(customerId)) {\r\n customerIdByQuery = customerId;\r\n }\r\n }\r\n\r\n let productNumbers: string[] = [];\r\n if (this.$route.query.products) {\r\n productNumbers = this.$route.query.products\r\n .toString()\r\n .split(',')\r\n .map((p) => p.trim())\r\n .filter((p) => p !== '');\r\n }\r\n this.filteredProductNumbers = productNumbers;\r\n\r\n this.invalidSelectedCustomer = false;\r\n\r\n return this.loadCustomers()\r\n .then(async () => {\r\n if (customerIdByQuery !== null) {\r\n if (\r\n this.customers.some(\r\n (customer) =>\r\n customer.id === customerIdByQuery && !customer.isSmiCustomer\r\n )\r\n ) {\r\n this.selectedCustomerId = customerIdByQuery;\r\n } else {\r\n this.invalidSelectedCustomer = true;\r\n }\r\n } else {\r\n if (\r\n userProfileModule.selectedCustomer !== null &&\r\n !userProfileModule.selectedCustomer.isSmiCustomer\r\n ) {\r\n this.selectedCustomerId = userProfileModule.selectedCustomer.id;\r\n } else {\r\n const nonSmiCustomers = this.customers.filter(\r\n (customer) => !customer.isSmiCustomer\r\n );\r\n if (nonSmiCustomers.length > 0) {\r\n this.selectedCustomerId = nonSmiCustomers[0].id;\r\n }\r\n }\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n }\r\n\r\n await this.loadForecasts().then(() => {\r\n if (this.allContractPeriods.length > 0) {\r\n this.selectedContractPeriodId = this.defaultContractPeriodId;\r\n this.reloadForecastChartsData();\r\n } else {\r\n this.selectedContractPeriodId = null;\r\n }\r\n });\r\n\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (\r\n this.$route.query.customer === query.customer &&\r\n this.$route.query.products === query.products\r\n ) {\r\n return false;\r\n } else {\r\n // If just going from a no defined customer to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.customer?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: { customer?: string; products?: string } = {};\r\n\r\n if (this.selectedCustomerId) {\r\n query.customer = this.selectedCustomerId.toString();\r\n }\r\n if (this.filteredProductNumbers.length > 0) {\r\n query.products = this.filteredProductNumbers.join(',');\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private loadCustomers(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return userCustomersModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private loadForecasts(force?: boolean): Promise {\r\n if (this.selectedCustomerId === null) {\r\n return Promise.reject('No selected customer!');\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const customerId = this.selectedCustomerId;\r\n\r\n return forecastsModule\r\n .dispatchLoad({\r\n customerId,\r\n force,\r\n })\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (customerId === this.selectedCustomerId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (customerId === this.selectedCustomerId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n private loadHistoricForecasts(force?: boolean): Promise {\r\n if (this.selectedCustomerId === null) {\r\n return Promise.reject('No selected customer!');\r\n }\r\n\r\n this.isLoadingHistory = true;\r\n this.errorLoading = false;\r\n this.showHistory = true;\r\n\r\n const customerId = this.selectedCustomerId;\r\n\r\n return historicForecastsModule\r\n .dispatchLoad({\r\n customerId,\r\n force,\r\n })\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (customerId === this.selectedCustomerId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (customerId === this.selectedCustomerId) {\r\n this.isLoadingHistory = false;\r\n }\r\n });\r\n }\r\n\r\n private saveForecasts(updates: UpdateForecast[]) {\r\n if (this.selectedCustomerId === null) {\r\n return;\r\n }\r\n\r\n this.isSaving = true;\r\n this.errorSaving = false;\r\n\r\n return forecastsModule\r\n .dispatchSave({\r\n customerId: this.selectedCustomerId,\r\n updates,\r\n })\r\n .then(() => {\r\n this.loadForecasts(true).then(() => {\r\n this.reloadForecastChartsData(true);\r\n });\r\n })\r\n .catch(() => {\r\n this.errorSaving = true;\r\n })\r\n .finally(() => {\r\n this.isSaving = false;\r\n });\r\n }\r\n\r\n private reloadForecastChartsData(force?: boolean) {\r\n this.$nextTick(() => {\r\n (this.$refs.forecastCharts as ForecastCharts)?.reloadData(force);\r\n });\r\n }\r\n\r\n private closeHistory() {\r\n this.showHistory = false;\r\n }\r\n\r\n private onResetForecastListErrors() {\r\n this.errorSaving = false;\r\n }\r\n\r\n private onCustomersFilterSelect(customer: number[]) {\r\n if (this.selectedCustomerId !== customer[0]) {\r\n this.selectedCustomerId = customer[0];\r\n this.updateQuery();\r\n this.closeHistory();\r\n }\r\n }\r\n\r\n private onProductsFilterSelect(products: string[]) {\r\n this.filteredProductNumbers = products;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.filteredProductNumbers = [];\r\n this.updateQuery();\r\n }\r\n\r\n private onSaveForecasts(updates: UpdateForecast[]) {\r\n this.saveForecasts(updates);\r\n }\r\n\r\n private onChangeContractPeriodId(contractPeriodId: number) {\r\n this.selectedContractPeriodId = contractPeriodId;\r\n this.reloadForecastChartsData();\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForecastsPage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForecastsPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ForecastsPage.vue?vue&type=template&id=8c674428&scoped=true&\"\nimport script from \"./ForecastsPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./ForecastsPage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ForecastsPage.vue?vue&type=style&index=0&id=8c674428&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c674428\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}