{"version":3,"sources":["webpack:///./src/components/ForecastList.vue?6437","webpack:///./src/components/ForecastList.vue","webpack:///./src/components/ForecastList.vue?6416","webpack:///./src/components/ForecastList.vue?c6a0","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///./src/components/general/AmountPicker.vue?b2fb","webpack:///./src/components/ForecastList.vue?1fc1","webpack:///./src/services/SmiForecastService.ts","webpack:///./src/components/ContractPeriodsSelect.vue?34b6","webpack:///./src/components/ContractPeriodsSelect.vue","webpack:///./src/components/ContractPeriodsSelect.vue?417c","webpack:///./src/components/ContractPeriodsSelect.vue?7656","webpack:///./src/services/ForecastService.ts","webpack:///./src/components/ForecastQuantity.vue?0f05","webpack:///./src/components/general/AmountPicker.vue?d41e","webpack:///./src/components/general/AmountPicker.vue","webpack:///./src/components/general/AmountPicker.vue?2802","webpack:///./src/components/general/AmountPicker.vue?646f","webpack:///./src/components/ForecastQuantity.vue","webpack:///./src/components/ForecastQuantity.vue?3326","webpack:///./src/components/ForecastQuantity.vue?f61b","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue?0bed","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue?e004","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue?30ea","webpack:///./src/components/ForecastCharts.vue?3306","webpack:///./src/utils/ForecastsUtilities.ts","webpack:///./src/store/modules/forecastsContractPeriodSummary.ts","webpack:///./src/store/modules/smiForecastsContractPeriodSummary.ts","webpack:///./src/components/ForecastCharts.vue","webpack:///./src/components/ForecastCharts.vue?fffe","webpack:///./src/components/ForecastCharts.vue?7a8c","webpack:///./src/components/ProductsTreeSelect.vue?9268","webpack:///./src/components/ProductsTreeSelect.vue","webpack:///./src/components/ProductsTreeSelect.vue?6e16","webpack:///./src/components/ProductsTreeSelect.vue?73b6","webpack:///./src/components/ForecastQuantity.vue?f560","webpack:///./src/components/HistoricForecastList.vue?b1ea","webpack:///./src/components/HistoricForecastList.vue","webpack:///./src/components/HistoricForecastList.vue?a864","webpack:///./src/components/HistoricForecastList.vue?3a7a","webpack:///./src/components/ProductsTreeSelect.vue?5a81","webpack:///./src/components/HistoricForecastList.vue?d3f0","webpack:///./src/store/modules/userCustomers.ts","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue?6385"],"names":["render","_vm","this","_h","$createElement","_c","_self","forecastMonthsforContractPeriods","scopedSlots","_u","key","fn","ref","invalid","handleSubmit","staticClass","attrs","on","$event","preventDefault","hasBeenSubmitted","submit","_l","period","periodIndex","_v","_s","$t","getDateRange","fromDate","toDate","forecastMonth","monthIndex","class","isExpanded","getAnyChangedForecastsForMonth","yearAndMonthFilter","year","month","weeks","weekNumber","length","forecastWeek","forecasts","getAnyChangedForecastsForWeek","stopPropagation","currentYear","currentWeek","dateRangeFilter","startDate","endDate","getQuantityForWeekText","forecast","forecastIndex","isForecastFiltered","active","quantity","newQuantity","getForecastProductText","isSaving","isAllowedToEdit","editable","_e","totalChangedForecastsCount","errorSaving","onCloseErrorAlertClick","changedForecastsSummaryText","totalChangedAndFilteredForecastsCount","onResetAllClick","staticRenderFns","dateRange","yearAndMonth","$moment","isoWeek","from","to","reduce","periodSum","currentPeriod","forecastMonths","monthSum","currentMonth","weekSum","sum","current","some","contractPeriod","localizationPathPrefix","localizationValue","isAnyChangesFilteredOut","toString","filteredProductNumbers","undefined","productNumber","weekQuantity","isNaN","number","productDisplayName","forEach","$emit","updates","push","id","required","components","ForecastQuantity","component","_arrayWithoutHoles","arr","Array","isArray","arrayLikeToArray","_iterableToArray","iter","Symbol","iterator","Object","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","SmiForecastService","smiWarehouseId","get","then","response","data","catch","error","Promise","reject","contractPeriodId","put","smiForecastService","value","selectOptions","placeholder","onInput","options","contractPeriods","map","text","shortText","isCurrent","placeholderOption","default","SelectBox","ForecastService","customerId","forecastService","originalQuantity","newQuantityIsEdited","originalQuantityTooltipText","originalQuantityDiff","originalQuantityDiffText","newQuantityDiffText","onResetClick","validationId","quantityValidationRules","failed","model","callback","$$v","$set","_n","expression","_f","disabled","theValue","minus","directives","name","rawName","modifiers","domProps","target","blur","select","composing","$forceUpdate","plus","val","parseInt","plusMinusModifier","immediate","deep","newQuantityDiff","diffType","Math","abs","AmountPicker","clearable","multiple","onSelect","nodes","nonResponsibleCompanyChainNodes","nonResponsibles","filter","companyChain","companyChainHasFilteredCustomers","label","children","customers","customer","filterIsSmiCustomer","isSmiCustomer","showIfSmiCustomer","responsibleCompanyChainNodes","responsibles","isDefaultExpanded","concat","TreeSelect","upcomingForecastChartOptions","allContractPeriods","selectedContractPeriodId","onSelectedContractPeriodInput","contractPeriodChartOptions","getForecastWeekPercentageInMonth","forecastDaysInMonth","firstDateOfMonth","Date","lastDateOfMonth","endOf","forecastWeekStartDate","forecastWeekEndDate","isSameOrAfter","isSameOrBefore","isBefore","diff","forecastWeekDays","common","getDataFor","payload","setLoadingComplete","setLoadingError","setLoading","force","hasFreshDataFor","resolve","item","currentlyLoadingPromise","isCurrentlyLoading","Consoler","debugLog","loadingPromise","getForecastsContractPeriodSummary","forecastsContractPeriodSummary","commitSetLoadingComplete","debugWarn","commitSetLoadingError","commitSetLoading","clearData","namespaced","dynamic","store","forecastsContractPeriodSummaryModule","getSmiForecastsContractPeriodSummary","smiForecastsContractPeriodSummary","smiForecastsContractPeriodSummaryModule","tooltipPointFormatter","currentPoint","pointWithProducts","isSalesAgreement","tooltipText","i18n","t","filteredProductsCount","products","product","isFiltered","agreementQuantity","forecastQuantity","y","chart","height","chartHeight","spacing","type","backgroundColor","title","xAxis","gridLineWidth","labels","style","fontSize","yAxis","format","legend","enabled","verticalAlign","credits","time","useUTC","plotOptions","column","grouping","loadForecastContractPeriodSummary","isSmi","selectedCustomerId","selectedSmiWarehouseId","summaryMonths","upcomingForecastWeeks","customOptions","series","getSeries","week","timeValue","tooltip","headerFormat","pointFormatter","commonChartOptions","forecastMonthsSummary","getTime","today","firstDayOfMonth","getFullYear","getMonth","summaryValues","xValue","isCurrentOrFutureValue","timeValueIsWeek","summaryValue","filteredProductNumber","salesAgreementData","p","totalAgreementQuantity","x","color","red","red50","pointPlacement","zIndex","negativeForecastChangeColor","limeGreen20","forecastData","changedForecastsData","totalForecastQuantity","currentForecastsData","currentForecastMonthsForContractPeriods","flatMap","forecastsForContractPeriod","valueChange","index","forecastWeeks","filteredForecastMonths","filteredForecastMonth","change","forecastWeekPercentageInMonth","round","a","b","changeColor","limeGreen","blue","blue50","stacking","linkedTo","dispatchMethod","dispatchLoad","isLoadingForecastMonthsSummary","errorLoadingForecastMonthsSummary","finally","highcharts","ContractPeriodsSelect","placeholderAsEmptyOption","displayName","productNumbers","UserCustomersModule","loading","userCustomers","setLoadedDate","clearLoadedDate","clearLoading","setLoadingPromise","needToReLoad","getCustomers","commitSetUserCustomers","commitSetLoadedDate","commitClearLoading","commitClearUserCustomers","commitSetLoadingPromise","loadingPromiseForId","userCustomersModule"],"mappings":"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","file":"js/forecasts~smi.5c95b081.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.forecastMonthsforContractPeriods.length)?_c('div',[_c('ValidationObserver',{scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar invalid = ref.invalid;\nvar handleSubmit = ref.handleSubmit;\nreturn [_c('form',{staticClass:\"u-width-100\",attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();_vm.hasBeenSubmitted = true;\n handleSubmit(_vm.submit);}}},[_vm._l((_vm.forecastMonthsforContractPeriods),function(period,periodIndex){return _c('div',{key:periodIndex,staticClass:\"mb-5\"},[_c('h3',{staticClass:\"t-heading-5 mb-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.contractPeriod', [ _vm.getDateRange(period.fromDate, period.toDate) ]))+\" \")]),_c('div',{staticClass:\"o-line o-line--thin mb-3\"}),_c('div',{staticClass:\"c-accordion u-full-width px-2\"},[_c('div',{staticClass:\"c-accordion c-form c-form--validated c-form--light-grey u-full-width p-0\"},_vm._l((period.forecastMonths),function(forecastMonth,monthIndex){return _c('div',{key:monthIndex,staticClass:\"forecast-month-row c-accordion__item mb-3\",class:{\n 'is-open': forecastMonth.isExpanded,\n 'is-changed': _vm.getAnyChangedForecastsForMonth(forecastMonth),\n }},[_c('a',{staticClass:\"c-accordion__toggle py-1\",on:{\"click\":function($event){forecastMonth.isExpanded = !forecastMonth.isExpanded}}},[_c('h4',{staticClass:\"month-title d-inline-flex justify-content-between t-body-regular-sans-serif mb-0\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.yearAndMonthFilter( forecastMonth.year, forecastMonth.month ))+\" (\"+_vm._s(_vm.$t('forecastList.monthWeeks', [ forecastMonth.weeks[0].weekNumber, forecastMonth.weeks[forecastMonth.weeks.length - 1] .weekNumber ]))+\") \")])])]),_c('div',{staticClass:\"c-accordion__content py-0 px-0 mx-2\"},[_c('div',{staticClass:\"c-table c-table--no-divider js-table js-table-expandable\"},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',[_c('tbody',[_vm._l((forecastMonth.weeks),function(forecastWeek){return [_c('tr',{key:(monthIndex + \"|\" + (forecastWeek.weekNumber)),staticClass:\"forecast-week-row c-table__primary\",class:{\n 'c-table__clickable-row':\n forecastWeek.forecasts.length,\n 'is-changed':\n _vm.getAnyChangedForecastsForWeek(forecastWeek),\n 'is-showing': forecastWeek.isExpanded,\n },attrs:{\"aria-expanded\":\"false\",\"aria-label\":_vm.$t('forecastList.primaryAriaLabel')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();forecastWeek.isExpanded =\n !forecastWeek.isExpanded}}},[_c('td',[_c('div',{staticClass:\"c-table__td-content\"},[_c('span',{staticClass:\"nowrap mr-1 u-bold\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.weekPart1', [ forecastWeek.weekNumber ]))+\" \")]),_c('span',{staticClass:\"nowrap\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.weekPart2', [ _vm.currentYear === forecastMonth.year && _vm.currentWeek === forecastWeek.weekNumber ? _vm.$t('forecastList.currentWeek') : _vm.dateRangeFilter( forecastWeek.startDate, forecastWeek.endDate ) ]))+\" \")])])]),_c('td'),_c('td',{staticClass:\"u-text-right\"},[_c('span',{staticClass:\"nowrap mr-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.quantity'))+\": \"+_vm._s(_vm.getQuantityForWeekText(forecastWeek)))])])]),_vm._l((forecastWeek.forecasts),function(forecast,forecastIndex){return [(_vm.isForecastFiltered(forecast))?_c('tr',{key:(monthIndex + \"|\" + (forecastWeek.weekNumber) + \"|\" + forecastIndex),staticClass:\"c-table__secondary forecast-row\",class:{\n active: forecastWeek.isExpanded,\n 'is-changed':\n forecast.quantity !== forecast.newQuantity,\n },attrs:{\"aria-hidden\":forecastWeek.isExpanded ? 'true' : 'false'}},[_c('td'),_c('td',[_vm._v(_vm._s(_vm.getForecastProductText(forecast)))]),_c('td',[_c('ForecastQuantity',{attrs:{\"forecast\":forecast,\"validationId\":(monthIndex + \"|\" + (forecastWeek.weekNumber) + \"|\" + forecastIndex),\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"editable\":forecastWeek.editable}})],1)]):_vm._e()]})]})],2)])])])])])}),0)])])}),(_vm.totalChangedForecastsCount > 0)?_c('div',{staticClass:\"c-alert c-alert--sticky-bottom\",class:{\n 'c-alert--green': !_vm.errorSaving && (!invalid || !_vm.hasBeenSubmitted),\n 'c-alert--red': _vm.errorSaving || (invalid && _vm.hasBeenSubmitted),\n }},[(_vm.errorSaving || (invalid && _vm.hasBeenSubmitted))?_c('div',{staticClass:\"c-alert c-alert--yellow mb-2\",attrs:{\"data-element-id\":\"smiForecastListValidationErrorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[(_vm.errorSaving)?[_vm._v(_vm._s(_vm.$t('forecastList.errorSaving')))]:[_vm._v(_vm._s(_vm.$t('forecastList.validationErrors')))]],2),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"smiForecastListValidationErrorAlert\"},on:{\"click\":_vm.onCloseErrorAlertClick}})]):_vm._e(),_c('div',{staticClass:\"d-flex align-items-center justify-content-between\"},[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('span',{staticClass:\"material-icons mr-1\"},[_vm._v(\"info\")]),_c('span',{staticClass:\"c-alert__text\"},[_c('strong',[_vm._v(_vm._s(_vm.changedForecastsSummaryText))])])]),(_vm.totalChangedAndFilteredForecastsCount > 0)?_c('div',{staticClass:\"d-flex flex-column flex-md-row\"},[_c('button',{staticClass:\"o-button ml-2 mb-1 mb-md-0\",class:{\n 'o-button--lime-green-50':\n !_vm.errorSaving && (!invalid || !_vm.hasBeenSubmitted),\n 'o-button--white':\n _vm.errorSaving || (invalid && _vm.hasBeenSubmitted),\n },attrs:{\"disabled\":_vm.isSaving},on:{\"click\":_vm.onResetAllClick}},[(_vm.isAnyChangesFilteredOut)?[_vm._v(_vm._s(_vm.$t('forecastList.actionBar.reset.filtered')))]:[_vm._v(_vm._s(_vm.$t('forecastList.actionBar.reset.all')))]],2),_c('button',{staticClass:\"o-button o-button--black ml-2\",attrs:{\"type\":\"submit\",\"disabled\":_vm.isSaving || !_vm.isAllowedToEdit}},[(_vm.isAnyChangesFilteredOut)?[_vm._v(_vm._s(_vm.$t('forecastList.actionBar.save.filtered')))]:[_vm._v(_vm._s(_vm.$t('forecastList.actionBar.save.all')))]],2)]):_vm._e()])]):_vm._e()],2)]}}],null,false,4124652083)})],1):_vm._e()}\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\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport ForecastQuantity from '@/components/ForecastQuantity.vue';\r\nimport { ForecastWeek } from '@/models/Forecasts/ForecastWeek';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { yearAndMonthFilter } from '@/filters/yearAndMonth';\r\nimport { ForecastMonth } from '@/models/Forecasts/ForecastMonth';\r\nimport { UpdateSmiForecast } from '@/models/Smi/Forecasts/UpdateSmiForecast';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { ForecastsForContractPeriod } from '@/models/Forecasts/ForecastsForContractPeriod';\r\nimport { IForecast } from '@/models/Forecasts/IForecast';\r\n\r\n@Component({\r\n components: {\r\n ForecastQuantity,\r\n },\r\n})\r\nexport default class ForecastList extends Vue {\r\n @Prop({ required: true })\r\n public forecastMonthsforContractPeriods!: ForecastsForContractPeriod[];\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public errorSaving!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n\r\n private readonly dateRangeFilter = dateRangeFilter;\r\n private readonly yearAndMonthFilter = yearAndMonthFilter;\r\n\r\n private hasBeenSubmitted: boolean = false;\r\n\r\n private get currentYear(): number {\r\n return this.$moment().year();\r\n }\r\n private get currentWeek(): number {\r\n return this.$moment().isoWeek();\r\n }\r\n\r\n private getDateRange(from: string, to: string): string {\r\n return dateRangeFilter(from, to);\r\n }\r\n\r\n private get totalChangedForecastsCount(): number {\r\n return this.forecastMonthsforContractPeriods.reduce(\r\n (periodSum, currentPeriod) =>\r\n periodSum +\r\n currentPeriod.forecastMonths.reduce(\r\n (monthSum, currentMonth) =>\r\n monthSum +\r\n currentMonth.weeks.reduce(\r\n (weekSum, currentWeek) =>\r\n weekSum +\r\n currentWeek.forecasts.reduce(\r\n (sum, current) =>\r\n sum + (current.newQuantity !== current.quantity ? 1 : 0),\r\n 0\r\n ),\r\n 0\r\n ),\r\n 0\r\n ),\r\n 0\r\n );\r\n }\r\n\r\n private get totalChangedAndFilteredForecastsCount(): number {\r\n return this.forecastMonthsforContractPeriods.reduce(\r\n (periodSum, currentPeriod) =>\r\n periodSum +\r\n currentPeriod.forecastMonths.reduce(\r\n (monthSum, currentMonth) =>\r\n monthSum +\r\n currentMonth.weeks.reduce(\r\n (weekSum, currentWeek) =>\r\n weekSum +\r\n currentWeek.forecasts.reduce(\r\n (sum, current) =>\r\n sum +\r\n (current.newQuantity !== current.quantity &&\r\n this.isForecastFiltered(current)\r\n ? 1\r\n : 0),\r\n 0\r\n ),\r\n 0\r\n ),\r\n 0\r\n ),\r\n 0\r\n );\r\n }\r\n\r\n private get isAnyChangesFilteredOut(): boolean {\r\n return this.forecastMonthsforContractPeriods.some((contractPeriod) =>\r\n contractPeriod.forecastMonths.some((forecastMonth) =>\r\n forecastMonth.weeks.some((forecastWeek) =>\r\n forecastWeek.forecasts.some(\r\n (forecast) =>\r\n forecast.newQuantity !== forecast.quantity &&\r\n !this.isForecastFiltered(forecast)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n private get changedForecastsSummaryText(): string {\r\n let localizationPathPrefix: string;\r\n let localizationValue: number;\r\n if (\r\n this.isAnyChangesFilteredOut &&\r\n this.totalChangedAndFilteredForecastsCount === 0\r\n ) {\r\n localizationPathPrefix = 'forecastList.actionBar.summary.allFilteredOut';\r\n localizationValue = this.totalChangedForecastsCount;\r\n } else {\r\n localizationPathPrefix = `forecastList.actionBar.summary.${\r\n this.isAnyChangesFilteredOut ? 'filtered' : 'all'\r\n }`;\r\n localizationValue = this.totalChangedAndFilteredForecastsCount;\r\n }\r\n return this.$t(\r\n `${localizationPathPrefix}.${localizationValue === 1 ? 'one' : 'notOne'}`,\r\n [localizationValue]\r\n ).toString();\r\n }\r\n\r\n private isForecastFiltered(forecast: IForecast) {\r\n if (this.filteredProductNumbers.length === 0) {\r\n return true;\r\n }\r\n if (forecast.productNumber === undefined) {\r\n return false;\r\n }\r\n return this.filteredProductNumbers.some(\r\n (productNumber) => forecast.productNumber === productNumber\r\n );\r\n }\r\n\r\n private getAnyChangedForecastsForMonth(\r\n forecastMonth: ForecastMonth\r\n ): boolean {\r\n return forecastMonth.weeks.some((forecastWeek) =>\r\n this.getAnyChangedForecastsForWeek(forecastWeek)\r\n );\r\n }\r\n\r\n private getAnyChangedForecastsForWeek(\r\n forecastWeek: ForecastWeek\r\n ): boolean {\r\n return forecastWeek.forecasts.some(\r\n (forecast) =>\r\n forecast.newQuantity !== forecast.quantity &&\r\n this.isForecastFiltered(forecast)\r\n );\r\n }\r\n\r\n private getQuantityForWeekText(\r\n forecastWeek: ForecastWeek\r\n ): string {\r\n const weekQuantity = forecastWeek.forecasts.reduce((sum, current) => {\r\n const quantity = !isNaN(current.newQuantity)\r\n ? current.newQuantity\r\n : current.quantity;\r\n\r\n return sum + (this.isForecastFiltered(current) ? quantity : 0);\r\n }, 0);\r\n\r\n return `${numberFilter(weekQuantity)} t`;\r\n }\r\n\r\n private getForecastProductText(forecast: IForecast): string {\r\n if (forecast.productNumber === undefined) {\r\n return '?';\r\n }\r\n return forecast.productDisplayName && forecast.productDisplayName !== ''\r\n ? forecast.productDisplayName\r\n : forecast.productNumber;\r\n }\r\n\r\n private onResetAllClick() {\r\n this.forecastMonthsforContractPeriods.forEach((contractPeriod) => {\r\n contractPeriod.forecastMonths.forEach((forecastMonth) => {\r\n forecastMonth.weeks.forEach((forecastWeek) => {\r\n forecastWeek.forecasts.forEach((forecast) => {\r\n if (this.isForecastFiltered(forecast)) {\r\n forecast.newQuantity = forecast.quantity;\r\n }\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$emit('resetErrors');\r\n }\r\n\r\n private onCloseErrorAlertClick() {\r\n this.hasBeenSubmitted = false;\r\n this.$emit('resetErrors');\r\n }\r\n\r\n private submit() {\r\n const updates: UpdateSmiForecast[] = [];\r\n this.forecastMonthsforContractPeriods.forEach((contractPeriod) => {\r\n contractPeriod.forecastMonths.forEach((forecastMonth) => {\r\n forecastMonth.weeks.forEach((forecastWeek) => {\r\n forecastWeek.forecasts.forEach((forecast) => {\r\n if (forecast.newQuantity !== forecast.quantity) {\r\n updates.push({\r\n id: forecast.id,\r\n quantity: forecast.newQuantity,\r\n });\r\n }\r\n });\r\n });\r\n });\r\n });\r\n\r\n this.$emit('save', updates);\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!./ForecastList.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!./ForecastList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ForecastList.vue?vue&type=template&id=8a596a36&scoped=true&\"\nimport script from \"./ForecastList.vue?vue&type=script&lang=ts&\"\nexport * from \"./ForecastList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ForecastList.vue?vue&type=style&index=0&id=8a596a36&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 \"8a596a36\",\n null\n \n)\n\nexport default component.exports","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","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!./AmountPicker.vue?vue&type=style&index=0&id=51d725b5&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!./ForecastList.vue?vue&type=style&index=0&id=8a596a36&scoped=true&lang=scss&\"","import { BaseServiceDefinition } from './BaseService';\r\nimport { UpdateSmiForecast } from '@/models/Smi/Forecasts/UpdateSmiForecast';\r\nimport { CurrentSmiForecasts } from '@/models/Smi/Forecasts/CurrentSmiForecasts';\r\nimport { ForecastContractPeriodSummary } from '@/models/Forecasts/ForecastContractPeriodSummary';\r\nimport { SmiForecast } from '@/models/Smi/Forecasts/SmiForecast';\r\nimport { HistoricSmiForecasts } from '@/models/Smi/Forecasts/HistoricSmiForecasts';\r\n\r\nclass SmiForecastService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public getCurrentSmiForecasts(\r\n smiWarehouseId: number\r\n ): Promise {\r\n return this.get(`/api/v1/smi/forecasts/${smiWarehouseId}/current`)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getHistoricSmiForecasts(\r\n smiWarehouseId: number\r\n ): Promise {\r\n return this.get(`/api/v1/smi/forecasts/${smiWarehouseId}/historic`)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getSmiForecastsContractPeriodSummary(\r\n smiWarehouseId: number,\r\n contractPeriodId: number\r\n ): Promise {\r\n return this.get(\r\n `/api/v1/smi/forecasts/${smiWarehouseId}/summary/${contractPeriodId}`\r\n )\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public async updateSmiForecasts(\r\n smiWarehouseId: number,\r\n updates: UpdateSmiForecast[]\r\n ): Promise {\r\n return this.put(`/api/v1/smi/forecasts/${smiWarehouseId}/update`, updates)\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst smiForecastService: SmiForecastService = new SmiForecastService();\r\n\r\nexport default smiForecastService;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SelectBox',{attrs:{\"value\":_vm.value,\"options\":_vm.selectOptions,\"placeholder\":_vm.placeholder},on:{\"input\":_vm.onInput}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SelectBox, { SelectOption } from '@/components/general/SelectBox.vue';\r\nimport { ContractPeriod } from '@/models/ContractPeriod';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\n\r\n@Component({\r\n components: {\r\n SelectBox,\r\n },\r\n})\r\nexport default class ContractPeriodsSelect extends Vue {\r\n @Prop({ required: true })\r\n public contractPeriods!: ContractPeriod[];\r\n @Prop({ required: true })\r\n public value!: number | null;\r\n @Prop({ required: false, default: () => false })\r\n public shortText!: boolean;\r\n @Prop({ required: false }) private placeholder!: string;\r\n\r\n private get selectOptions(): SelectOption[] {\r\n const options: SelectOption[] = this.contractPeriods.map((period) => ({\r\n value: period.id,\r\n text: this.$t(\r\n `contractPeriodsSelect.contractPeriodValue.${\r\n this.shortText ? 'short' : 'long'\r\n }.${period.isCurrent ? 'isCurrent' : 'notCurrent'}`,\r\n [dateRangeFilter(period.fromDate, period.toDate)]\r\n ).toString(),\r\n }));\r\n\r\n if (this.placeholder) {\r\n const placeholderOption = {\r\n value: null,\r\n text: this.placeholder,\r\n };\r\n return [placeholderOption, ...options];\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private onInput(contractPeriodId: number): void {\r\n this.$emit('input', contractPeriodId);\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!./ContractPeriodsSelect.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!./ContractPeriodsSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ContractPeriodsSelect.vue?vue&type=template&id=6f3a5dc0&\"\nimport script from \"./ContractPeriodsSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./ContractPeriodsSelect.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","import { CurrentForecasts } from '@/models/Forecasts/CurrentForecasts';\r\nimport { Forecast } from '@/models/Forecasts/Forecast';\r\nimport { ForecastContractPeriodSummary } from '@/models/Forecasts/ForecastContractPeriodSummary';\r\nimport { UpdateForecast } from '@/models/Forecasts/UpdateForecast';\r\nimport { BaseServiceDefinition } from './BaseService';\r\nimport { HistoricForecasts } from '@/models/Forecasts/HistoricForecasts';\r\n\r\nclass ForecastService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public getCurrentForecasts(customerId: number): Promise {\r\n return this.get('/api/v1/forecasts/current', { customerId })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getHistoricForecasts(customerId: number): Promise {\r\n return this.get('/api/v1/forecasts/historic', { customerId })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public getForecastsContractPeriodSummary(\r\n customerId: number,\r\n contractPeriodId: number\r\n ): Promise {\r\n return this.get(`/api/v1/forecasts/summary/${contractPeriodId}`, {\r\n customerId,\r\n })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public async updateForecasts(\r\n customerId: number,\r\n updates: UpdateForecast[]\r\n ): Promise {\r\n return this.put(`/api/v1/forecasts/update`, updates, { customerId })\r\n .then((response) => {\r\n return response.data;\r\n })\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst forecastService: ForecastService = new ForecastService();\r\n\r\nexport default forecastService;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"d-flex align-items-center justify-content-between\"},[_c('div',{staticClass:\"mr-3\"},[(\n (_vm.forecast.originalQuantity !== undefined &&\n _vm.forecast.quantity !== _vm.forecast.originalQuantity) ||\n _vm.newQuantityIsEdited\n )?_c('span',{staticClass:\"nowrap\",attrs:{\"title\":_vm.originalQuantityTooltipText}},[_c('i',{staticClass:\"material-icons\"},[(_vm.originalQuantityDiff === 0)?[_vm._v(\"trending_flat\")]:(_vm.originalQuantityDiff < 0)?[_vm._v(\"trending_down\")]:[_vm._v(\"trending_up\")]],2),_c('span',{staticClass:\"nowrap ml-1\"},[_vm._v(_vm._s(_vm.originalQuantityDiffText))])]):_vm._e()]),(_vm.editable)?_c('div',{staticClass:\"d-flex align-items-center\"},[(_vm.forecast.quantity !== _vm.forecast.newQuantity)?_c('div',{staticClass:\"d-flex align-items-center nowrap mr-2\"},[_c('span',[_vm._v(_vm._s(_vm.newQuantityDiffText))]),_c('button',{staticClass:\"o-round-button o-round-button--mini o-round-button--white ml-1\",attrs:{\"title\":_vm.$t('forecastQuantityEditor.resetForecastTooltip'),\"disabled\":_vm.isSaving},on:{\"click\":function($event){return _vm.onResetClick()}}},[_c('i',{staticClass:\"material-icons\"},[_vm._v(\"close\")])])]):_vm._e(),_c('ValidationProvider',{attrs:{\"name\":(_vm.validationId + \"|quantity\"),\"rules\":_vm.quantityValidationRules,\"tag\":\"div\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\n var failed = ref.failed;\nreturn [_c('AmountPicker',{attrs:{\"plusMinusModifier\":100,\"invalid\":failed,\"disabled\":_vm.isSaving || !_vm.isAllowedToEdit,\"title\":_vm.isAllowedToEdit ? '' : _vm.$t('forecastQuantityEditor.notAllowedToEdit')},model:{value:(_vm.forecast.newQuantity),callback:function ($$v) {_vm.$set(_vm.forecast, \"newQuantity\", _vm._n($$v))},expression:\"forecast.newQuantity\"}})]}}],null,false,473860220)})],1):_c('span',{staticClass:\"mr-4\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.forecast.quantity))+\" t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-form-element-group c-form-element-group--small c-form-element-group--prepend c-form-element-group--append amount-picker\"},[_c('span',{staticClass:\"c-form-element-group__prepend d-flex\"},[_c('button',{staticClass:\"o-round-button o-round-button--extra-small o-round-button--round\",class:{\n 'o-round-button--disabled': _vm.disabled,\n 'o-round-button--danger': !_vm.disabled,\n },attrs:{\"type\":\"button\",\"disabled\":isNaN(_vm.theValue) || _vm.disabled},on:{\"click\":function($event){return _vm.minus()}}},[_c('span',{staticClass:\"mdi mdi-minus\"})])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.theValue),expression:\"theValue\",modifiers:{\"number\":true}}],staticClass:\"u-border-radius-none o-text-input o-text-input--small o-text-input--light-grey u-text-center\",class:{ invalid: _vm.invalid },attrs:{\"type\":\"text\",\"inputmode\":\"numeric\",\"disabled\":_vm.disabled,\"required\":true,\"autocomplete\":\"chrome-off\",\"data-lpignore\":\"true\"},domProps:{\"value\":(_vm.theValue)},on:{\"wheel\":function($event){return $event.target.blur()},\"focus\":function($event){return $event.target.select()},\"input\":function($event){if($event.target.composing){ return; }_vm.theValue=_vm._n($event.target.value)},\"blur\":function($event){return _vm.$forceUpdate()}}}),_c('span',{staticClass:\"c-form-element-group__append d-flex\"},[_c('button',{staticClass:\"o-round-button o-round-button--extra-small o-round-button--round\",class:{\n 'o-round-button--disabled': _vm.disabled,\n 'o-round-button--success': !_vm.disabled,\n },attrs:{\"type\":\"button\",\"disabled\":isNaN(_vm.theValue) || _vm.disabled},on:{\"click\":function($event){return _vm.plus()}}},[_c('span',{staticClass:\"mdi mdi-plus\"})])])])}\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\r\nimport { Component, Vue, Prop, Watch } from 'vue-property-decorator';\r\n\r\n@Component({})\r\nexport default class AmountPicker extends Vue {\r\n @Prop({ required: true })\r\n private value!: number;\r\n @Prop({ required: false, default: () => false })\r\n private invalid!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private disabled!: boolean;\r\n @Prop({ required: false, default: () => 10 })\r\n private plusMinusModifier!: number;\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 val = val ? parseInt(val, 10) : 0;\r\n this.theValue = val;\r\n this.$emit('input', val);\r\n }\r\n }\r\n\r\n private plus(): void {\r\n this.theValue = this.theValue + this.plusMinusModifier;\r\n }\r\n\r\n private minus(): void {\r\n if (this.value >= this.plusMinusModifier) {\r\n this.theValue = this.theValue - this.plusMinusModifier;\r\n } else {\r\n this.theValue = 0;\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!./AmountPicker.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!./AmountPicker.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AmountPicker.vue?vue&type=template&id=51d725b5&scoped=true&\"\nimport script from \"./AmountPicker.vue?vue&type=script&lang=ts&\"\nexport * from \"./AmountPicker.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./AmountPicker.vue?vue&type=style&index=0&id=51d725b5&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 \"51d725b5\",\n null\n \n)\n\nexport default component.exports","\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, Prop } from 'vue-property-decorator';\r\nimport AmountPicker from '@/components/general/AmountPicker.vue';\r\nimport { Forecast } from '@/models/Forecasts/Forecast';\r\nimport { numberFilter } from '@/filters/number';\r\n\r\n@Component({\r\n components: {\r\n AmountPicker,\r\n },\r\n})\r\nexport default class ForecastQuantity extends Vue {\r\n @Prop({ required: true })\r\n public forecast!: Forecast;\r\n @Prop({ required: true })\r\n public validationId!: string;\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public editable!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n\r\n private readonly quantityValidationRules = 'required|numeric';\r\n\r\n private get newQuantityDiffText(): string {\r\n if (this.newQuantityDiff === undefined || this.newQuantityDiff === 0) {\r\n return '';\r\n }\r\n\r\n if (this.newQuantityDiff > 0) {\r\n return `(+${numberFilter(this.newQuantityDiff)} t)`;\r\n } else {\r\n return `(${numberFilter(this.newQuantityDiff)} t)`;\r\n }\r\n }\r\n\r\n private get originalQuantityDiffText(): string {\r\n if (this.originalQuantityDiff === 0) {\r\n return '+-0 t';\r\n } else if (this.originalQuantityDiff > 0) {\r\n return `+${numberFilter(this.originalQuantityDiff)} t`;\r\n } else {\r\n return `${numberFilter(this.originalQuantityDiff)} t`;\r\n }\r\n }\r\n\r\n private get originalQuantityTooltipText(): string {\r\n let diffType: string;\r\n if (this.originalQuantityDiff === 0) {\r\n diffType = 'equal';\r\n } else if (this.originalQuantityDiff > 0) {\r\n diffType = 'up';\r\n } else {\r\n diffType = 'down';\r\n }\r\n\r\n return this.$t(\r\n `forecastQuantityEditor.originalQuantityTooltip.${diffType}`,\r\n [numberFilter(Math.abs(this.originalQuantityDiff))]\r\n ).toString();\r\n }\r\n\r\n private get newQuantityIsEdited(): boolean {\r\n return this.newQuantityDiff !== undefined && this.newQuantityDiff !== 0;\r\n }\r\n\r\n private get newQuantityDiff(): number | undefined {\r\n if (isNaN(this.forecast.newQuantity)) {\r\n return undefined;\r\n }\r\n\r\n return this.forecast.newQuantity - this.forecast.quantity;\r\n }\r\n\r\n private get originalQuantityDiff(): number {\r\n return (\r\n (this.forecast.originalQuantity !== undefined\r\n ? this.forecast.quantity - this.forecast.originalQuantity\r\n : 0) + (this.newQuantityDiff ?? 0)\r\n );\r\n }\r\n\r\n private onResetClick() {\r\n this.forecast.newQuantity = this.forecast.quantity;\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!./ForecastQuantity.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!./ForecastQuantity.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ForecastQuantity.vue?vue&type=template&id=3d5ebfc2&scoped=true&\"\nimport script from \"./ForecastQuantity.vue?vue&type=script&lang=ts&\"\nexport * from \"./ForecastQuantity.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ForecastQuantity.vue?vue&type=style&index=0&id=3d5ebfc2&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 \"3d5ebfc2\",\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('TreeSelect',{staticClass:\"the-tree-select\",attrs:{\"value\":_vm.value,\"options\":_vm.options,\"placeholder\":_vm.placeholder,\"clearable\":_vm.clearable,\"multiple\":_vm.multiple,\"disabled\":_vm.disabled},on:{\"input\":_vm.onInput,\"select\":_vm.onSelect}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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 TreeSelect, {\r\n TreeSelectNode,\r\n} from '@/components/general/TreeSelect.vue';\r\nimport { CompanyChain } from '@/models/CompanyChain';\r\n\r\n@Component({\r\n components: {\r\n TreeSelect,\r\n },\r\n})\r\nexport default class CompanyChainCustomersTreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: number[];\r\n @Prop({ required: true }) private responsibles!: CompanyChain[];\r\n @Prop({ required: true })\r\n private nonResponsibles!: CompanyChain[];\r\n @Prop({ required: true }) private placeholder!: string;\r\n @Prop({ required: false, default: () => true })\r\n private multiple!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n @Prop({ required: false, default: () => undefined })\r\n private filterIsSmiCustomer!: boolean | undefined;\r\n @Prop({ required: false, default: () => false })\r\n private showIfSmiCustomer!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private disabled!: boolean;\r\n\r\n private get options(): TreeSelectNode[] {\r\n let nodes: TreeSelectNode[] = [];\r\n\r\n const nonResponsibleCompanyChainNodes: TreeSelectNode[] =\r\n this.nonResponsibles\r\n .filter((companyChain) =>\r\n this.companyChainHasFilteredCustomers(companyChain)\r\n )\r\n .map((companyChain) => ({\r\n id: `nonResponsibles|companyChain|${companyChain.id}`,\r\n label: companyChain.name,\r\n children: companyChain.customers\r\n .filter(\r\n (customer) =>\r\n this.filterIsSmiCustomer === undefined ||\r\n customer.isSmiCustomer === this.filterIsSmiCustomer\r\n )\r\n .map((customer) => ({\r\n id: customer.id,\r\n label: `${customer.name}${\r\n this.showIfSmiCustomer && customer.isSmiCustomer ? ' (SMI)' : ''\r\n }`,\r\n })),\r\n }));\r\n\r\n const responsibleCompanyChainNodes: TreeSelectNode[] = this.responsibles\r\n .filter((companyChain) =>\r\n this.companyChainHasFilteredCustomers(companyChain)\r\n )\r\n .map((companyChain) => ({\r\n id: `responsibles|companyChain|${companyChain.id}`,\r\n label: companyChain.name,\r\n children: companyChain.customers\r\n .filter(\r\n (customer) =>\r\n this.filterIsSmiCustomer === undefined ||\r\n customer.isSmiCustomer === this.filterIsSmiCustomer\r\n )\r\n .map((customer) => ({\r\n id: customer.id,\r\n label: customer.name,\r\n })),\r\n }));\r\n\r\n if (responsibleCompanyChainNodes.length > 0) {\r\n nodes.push({\r\n id: 'responsibles',\r\n label: this.$t(\r\n 'companyChainCustomersTreeSelect.responsibles'\r\n ).toString(),\r\n children: responsibleCompanyChainNodes,\r\n isDefaultExpanded: true,\r\n });\r\n }\r\n\r\n if (nonResponsibleCompanyChainNodes.length > 0) {\r\n if (responsibleCompanyChainNodes.length > 0) {\r\n nodes.push({\r\n id: 'nonResponsibles',\r\n label: this.$t(\r\n 'companyChainCustomersTreeSelect.nonResponsibles'\r\n ).toString(),\r\n children: nonResponsibleCompanyChainNodes,\r\n });\r\n } else {\r\n nodes = nodes.concat(nonResponsibleCompanyChainNodes);\r\n }\r\n }\r\n\r\n return nodes;\r\n }\r\n\r\n private companyChainHasFilteredCustomers(\r\n companyChain: CompanyChain\r\n ): boolean {\r\n return companyChain.customers.some(\r\n (customer) =>\r\n this.filterIsSmiCustomer === undefined ||\r\n customer.isSmiCustomer === this.filterIsSmiCustomer\r\n );\r\n }\r\n\r\n private onInput(customers: number[]) {\r\n this.$emit('input', customers);\r\n }\r\n\r\n private onSelect(customers: number[]) {\r\n this.$emit('select', customers);\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!./CompanyChainCustomersTreeSelect.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!./CompanyChainCustomersTreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CompanyChainCustomersTreeSelect.vue?vue&type=template&id=5bcb6a06&scoped=true&\"\nimport script from \"./CompanyChainCustomersTreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./CompanyChainCustomersTreeSelect.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./CompanyChainCustomersTreeSelect.vue?vue&type=style&index=0&id=5bcb6a06&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 \"5bcb6a06\",\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:\"row\"},[_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"u-background-color-white px-4 py-3\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase u-text-muted mb-4\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastCharts.upcomingWeeks'))+\" \")]),_c('highcharts',{attrs:{\"options\":_vm.upcomingForecastChartOptions}})],1)]),(_vm.allContractPeriods.length > 0)?_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"u-background-color-white px-4 py-3\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase u-text-muted mb-2 d-flex flex-wrap align-items-center\"},[_c('div',{staticClass:\"mr-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastCharts.contractPeriod'))+\" \")]),(_vm.allContractPeriods.length > 0)?_c('ContractPeriodsSelect',{staticClass:\"u-background-color-light-grey pl-3\",attrs:{\"value\":_vm.selectedContractPeriodId,\"contractPeriods\":_vm.allContractPeriods,\"shortText\":true},on:{\"input\":_vm.onSelectedContractPeriodInput}}):_vm._e()],1),_c('div',[(_vm.isLoadingForecastMonthsSummary)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_c('highcharts',{attrs:{\"options\":_vm.contractPeriodChartOptions}})],1)])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { ForecastWeek } from '@/models/Forecasts/ForecastWeek';\r\nimport { IForecast } from '@/models/Forecasts/IForecast';\r\nimport moment from 'moment';\r\n\r\nexport function getForecastWeekPercentageInMonth(\r\n forecastWeek: ForecastWeek,\r\n year: number,\r\n month: number\r\n): number {\r\n const firstDateOfMonth = moment(new Date(year, month - 1, 1));\r\n const lastDateOfMonth = moment(firstDateOfMonth).endOf('month');\r\n const forecastWeekStartDate = moment(new Date(forecastWeek.startDate));\r\n const forecastWeekEndDate = moment(new Date(forecastWeek.endDate));\r\n\r\n if (\r\n forecastWeekStartDate.isSameOrAfter(firstDateOfMonth, 'day') &&\r\n forecastWeekEndDate.isSameOrBefore(lastDateOfMonth)\r\n ) {\r\n return 1;\r\n }\r\n\r\n let forecastDaysInMonth: number;\r\n if (forecastWeekStartDate.isBefore(firstDateOfMonth)) {\r\n forecastDaysInMonth =\r\n 7 - firstDateOfMonth.diff(forecastWeekStartDate, 'days');\r\n } else {\r\n forecastDaysInMonth =\r\n 7 - (forecastWeekEndDate.diff(lastDateOfMonth, 'days') + 1);\r\n }\r\n\r\n const forecastWeekDays =\r\n forecastWeekEndDate.diff(forecastWeekStartDate, 'days') + 1;\r\n\r\n return forecastDaysInMonth / forecastWeekDays;\r\n}\r\n","import { store } from '@/store';\r\n\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 forecastService from '@/services/ForecastService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { ForecastContractPeriodSummary } from '@/models/Forecasts/ForecastContractPeriodSummary';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'forecastsContractPeriodSummary',\r\n dynamic: true,\r\n store,\r\n})\r\nclass ForecastsContractPeriodSummaryModule extends VuexModule {\r\n private common = new CommonArrayStore<\r\n ForecastContractPeriodSummary,\r\n { customerId: number; contractPeriodId: number }\r\n >(20, ['customerId', 'contractPeriodId']); // reLoadMinMinutesInterval, complexIdFields\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (key: { customerId: number; contractPeriodId: number }) =>\r\n this.common.getDataFor(key);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: { customerId: number; contractPeriodId: number };\r\n data: ForecastContractPeriodSummary;\r\n }) {\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: { customerId: number; contractPeriodId: 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: { customerId: number; contractPeriodId: 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 contractPeriodId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload)) {\r\n return Promise.resolve(this.item(payload)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(payload);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'forecastContractPeriodSummary'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = forecastService\r\n .getForecastsContractPeriodSummary(\r\n payload.customerId,\r\n payload.contractPeriodId\r\n )\r\n .then((forecastsContractPeriodSummary) => {\r\n this.commitSetLoadingComplete({\r\n id: payload,\r\n data: forecastsContractPeriodSummary,\r\n });\r\n Consoler.debugLog(\r\n 'Load forecastSummary success',\r\n forecastsContractPeriodSummary\r\n );\r\n return Promise.resolve(forecastsContractPeriodSummary);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load forecastSummary failed', error);\r\n this.commitSetLoadingError({ id: payload, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const forecastsContractPeriodSummaryModule = getModule(\r\n ForecastsContractPeriodSummaryModule\r\n);\r\n","import { store } from '@/store';\r\n\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 smiForecastService from '@/services/SmiForecastService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { ForecastContractPeriodSummary } from '@/models/Forecasts/ForecastContractPeriodSummary';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiForecastsContractPeriodSummary',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiForecastsContractPeriodSummaryModule extends VuexModule {\r\n private common = new CommonArrayStore<\r\n ForecastContractPeriodSummary,\r\n { smiWarehouseId: number; contractPeriodId: number }\r\n >(20, ['smiWarehouseId', 'contractPeriodId']); // reLoadMinMinutesInterval, complexIdFields\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (key: { smiWarehouseId: number; contractPeriodId: number }) =>\r\n this.common.getDataFor(key);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: { smiWarehouseId: number; contractPeriodId: number };\r\n data: ForecastContractPeriodSummary;\r\n }) {\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: { smiWarehouseId: number; contractPeriodId: 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: { smiWarehouseId: number; contractPeriodId: 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 smiWarehouseId: number;\r\n contractPeriodId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload)) {\r\n return Promise.resolve(this.item(payload)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(payload);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiForecastContractPeriodSummary'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiForecastService\r\n .getSmiForecastsContractPeriodSummary(\r\n payload.smiWarehouseId,\r\n payload.contractPeriodId\r\n )\r\n .then((smiForecastsContractPeriodSummary) => {\r\n this.commitSetLoadingComplete({\r\n id: payload,\r\n data: smiForecastsContractPeriodSummary,\r\n });\r\n Consoler.debugLog(\r\n 'Load smiForecastSummary success',\r\n smiForecastsContractPeriodSummary\r\n );\r\n return Promise.resolve(smiForecastsContractPeriodSummary);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiForecastSummary failed', error);\r\n this.commitSetLoadingError({ id: payload, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiForecastsContractPeriodSummaryModule = getModule(\r\n SmiForecastsContractPeriodSummaryModule\r\n);\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Chart } from 'highcharts-vue';\r\nimport {\r\n Options,\r\n Point,\r\n PointOptionsObject,\r\n SeriesOptionsType,\r\n} from 'highcharts';\r\nimport ContractPeriodsSelect from '@/components/ContractPeriodsSelect.vue';\r\nimport { ForecastSummaryValue } from '@/models/Forecasts/ForecastSummaryValue';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { Colors } from '@/utils/Constants';\r\nimport { ContractPeriod } from '@/models/ContractPeriod';\r\nimport { ForecastSummaryProduct } from '@/models/Forecasts/ForecastSummaryProduct';\r\nimport i18n from '@/i18n/i18n';\r\nimport { getForecastWeekPercentageInMonth } from '@/utils/ForecastsUtilities';\r\nimport { CurrentForecasts } from '@/models/Forecasts/CurrentForecasts';\r\nimport { IForecast } from '@/models/Forecasts/IForecast';\r\nimport { ForecastWeek } from '@/models/Forecasts/ForecastWeek';\r\nimport { forecastsContractPeriodSummaryModule } from '@/store/modules/forecastsContractPeriodSummary';\r\nimport { ForecastContractPeriodSummary } from '@/models/Forecasts/ForecastContractPeriodSummary';\r\nimport { smiForecastsContractPeriodSummaryModule } from '@/store/modules/smiForecastsContractPeriodSummary';\r\n\r\ninterface PointWithProductsOptions extends PointOptionsObject {\r\n isSalesAgreement: boolean;\r\n products?: ForecastSummaryProduct[];\r\n}\r\n\r\ninterface PointWithProducts extends Point {\r\n isSalesAgreement: boolean;\r\n products?: ForecastSummaryProduct[];\r\n}\r\n\r\nfunction tooltipPointFormatter(currentPoint: PointWithProducts): string {\r\n const pointWithProducts = currentPoint;\r\n const isSalesAgreement = pointWithProducts.isSalesAgreement;\r\n\r\n let tooltipText = `${i18n.t(\r\n 'forecastCharts.tooltips.' +\r\n (isSalesAgreement ? 'salesAgreements' : 'forecasts')\r\n )}

`;\r\n\r\n let filteredProductsCount = 0;\r\n if (pointWithProducts.products) {\r\n for (let product of pointWithProducts.products) {\r\n if (product.isFiltered === true) {\r\n filteredProductsCount += 1;\r\n }\r\n\r\n if (product.isFiltered !== false) {\r\n tooltipText += `${product.productDisplayName}: ${numberFilter(\r\n isSalesAgreement\r\n ? product.agreementQuantity\r\n : product.forecastQuantity\r\n )} t
`;\r\n }\r\n }\r\n }\r\n\r\n if (filteredProductsCount !== 1) {\r\n tooltipText += `
\r\n ${i18n.t(\r\n `forecastCharts.tooltips.${\r\n filteredProductsCount > 0 ? 'totalFiltered' : 'total'\r\n }.${isSalesAgreement ? 'salesAgreements' : 'forecasts'}`\r\n )}: ${numberFilter(pointWithProducts.y)} t`;\r\n }\r\n\r\n return tooltipText;\r\n}\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n ContractPeriodsSelect,\r\n },\r\n})\r\nexport default class ForecastCharts extends Vue {\r\n @Prop({ required: true }) private selectedContractPeriodId!: number;\r\n @Prop({ required: true })\r\n public upcomingForecastWeeks!: ForecastSummaryValue[];\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public allContractPeriods!: ContractPeriod[];\r\n @Prop({ required: true })\r\n private currentForecastsData!: CurrentForecasts | null;\r\n @Prop({ required: true })\r\n private isSmi!: boolean;\r\n @Prop({ required: false, default: () => null }) private selectedCustomerId!:\r\n | number\r\n | null;\r\n @Prop({ required: false, default: () => null })\r\n private selectedSmiWarehouseId!: number | null;\r\n\r\n private isLoadingForecastMonthsSummary: boolean = false;\r\n private errorLoadingForecastMonthsSummary: boolean = false;\r\n\r\n public reloadData(force?: boolean): void {\r\n this.loadForecastContractPeriodSummary(force);\r\n }\r\n\r\n private get forecastMonthsSummary(): ForecastSummaryValue[] {\r\n if (\r\n this.selectedContractPeriodId !== null &&\r\n !this.isSmi &&\r\n this.selectedCustomerId !== null\r\n ) {\r\n return (\r\n forecastsContractPeriodSummaryModule.item({\r\n customerId: this.selectedCustomerId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n })?.summaryMonths ?? []\r\n );\r\n } else if (\r\n this.selectedContractPeriodId !== null &&\r\n this.isSmi &&\r\n this.selectedSmiWarehouseId !== null\r\n ) {\r\n return (\r\n smiForecastsContractPeriodSummaryModule.item({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n })?.summaryMonths ?? []\r\n );\r\n }\r\n return [];\r\n }\r\n\r\n private readonly chartHeight = 320;\r\n\r\n private readonly commonChartOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: [15, 5, 0, 0],\r\n type: 'column',\r\n backgroundColor: 'transparent',\r\n },\r\n title: {\r\n text: undefined,\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n gridLineWidth: 0,\r\n title: {\r\n text: null,\r\n },\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n yAxis: {\r\n title: {\r\n text: null,\r\n },\r\n gridLineWidth: 0,\r\n labels: {\r\n format: '{value} t',\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n legend: {\r\n enabled: true,\r\n verticalAlign: 'top',\r\n },\r\n credits: {\r\n enabled: false,\r\n },\r\n time: {\r\n useUTC: false,\r\n },\r\n plotOptions: {\r\n column: {\r\n grouping: false,\r\n },\r\n },\r\n };\r\n\r\n private get upcomingForecastChartOptions(): Options {\r\n if (this.upcomingForecastWeeks === null) {\r\n return {};\r\n }\r\n\r\n const customOptions: Options = {\r\n xAxis: {\r\n labels: {\r\n format: 'W {value}',\r\n },\r\n },\r\n series: this.getSeries(\r\n this.upcomingForecastWeeks,\r\n (week) => week.timeValue,\r\n () => true,\r\n true\r\n ),\r\n tooltip: {\r\n headerFormat: `${this.$t(\r\n 'forecastCharts.week'\r\n )} {point.key}
`,\r\n pointFormatter: function () {\r\n return tooltipPointFormatter(this as PointWithProducts);\r\n },\r\n },\r\n };\r\n\r\n return { ...this.commonChartOptions, ...customOptions };\r\n }\r\n\r\n private get contractPeriodChartOptions(): Options {\r\n if (this.forecastMonthsSummary === null) {\r\n return {};\r\n }\r\n\r\n const customOptions: Options = {\r\n series: this.getSeries(\r\n this.forecastMonthsSummary,\r\n (month) => new Date(month.year, month.timeValue - 1, 1).getTime(),\r\n (month) => {\r\n const today = new Date();\r\n const firstDayOfMonth = new Date(\r\n today.getFullYear(),\r\n today.getMonth(),\r\n 1\r\n );\r\n return (\r\n new Date(month.year, month.timeValue - 1, 1) >= firstDayOfMonth\r\n );\r\n },\r\n false\r\n ),\r\n tooltip: {\r\n pointFormatter: function () {\r\n return tooltipPointFormatter(this as PointWithProducts);\r\n },\r\n },\r\n };\r\n\r\n return { ...this.commonChartOptions, ...customOptions };\r\n }\r\n\r\n private getSeries(\r\n summaryValues: ForecastSummaryValue[],\r\n xValue: (value: ForecastSummaryValue) => number,\r\n isCurrentOrFutureValue: (value: ForecastSummaryValue) => boolean,\r\n timeValueIsWeek: boolean\r\n ): SeriesOptionsType[] {\r\n const series: SeriesOptionsType[] = [];\r\n\r\n // Set \"isFiltered\" value on each month and product\r\n for (let summaryValue of summaryValues) {\r\n if (summaryValue.products) {\r\n for (let product of summaryValue.products) {\r\n if (this.filteredProductNumbers.length === 0) {\r\n product.isFiltered = undefined;\r\n } else {\r\n product.isFiltered = this.filteredProductNumbers.some(\r\n (filteredProductNumber) =>\r\n filteredProductNumber === product.productNumber\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n const salesAgreementData: PointWithProductsOptions[] = summaryValues.map(\r\n (summaryValue) => {\r\n const value: number =\r\n this.filteredProductNumbers.length !== 0 &&\r\n summaryValue.products !== undefined\r\n ? summaryValue.products\r\n .filter((p) => p.isFiltered)\r\n .reduce((sum, product) => sum + product.agreementQuantity, 0)\r\n : summaryValue.totalAgreementQuantity;\r\n\r\n return {\r\n x: xValue(summaryValue),\r\n y: value,\r\n products: summaryValue.products,\r\n isSalesAgreement: true,\r\n color: isCurrentOrFutureValue(summaryValue)\r\n ? Colors.red\r\n : Colors.red50,\r\n };\r\n }\r\n );\r\n series.push({\r\n name: this.$t('forecastCharts.salesAgreements').toString(),\r\n type: 'column',\r\n data: salesAgreementData,\r\n pointPlacement: -0.05,\r\n zIndex: 1,\r\n color: Colors.red,\r\n });\r\n\r\n const negativeForecastChangeColor = Colors.limeGreen20;\r\n const forecastData: PointWithProductsOptions[] = [];\r\n const changedForecastsData: PointOptionsObject[] = [];\r\n\r\n for (const summaryValue of summaryValues) {\r\n let value: number =\r\n this.filteredProductNumbers.length !== 0 &&\r\n summaryValue.products !== undefined\r\n ? summaryValue.products\r\n .filter((p) => p.isFiltered)\r\n .reduce((sum, product) => sum + product.forecastQuantity, 0)\r\n : summaryValue.totalForecastQuantity;\r\n\r\n const forecastMonths =\r\n this.currentForecastsData?.currentForecastMonthsForContractPeriods.flatMap(\r\n (forecastsForContractPeriod) =>\r\n forecastsForContractPeriod.forecastMonths\r\n ) ?? [];\r\n\r\n let valueChange = forecastMonths\r\n .map((forecastMonth, index) => {\r\n let forecastWeeks: ForecastWeek[] = [];\r\n\r\n if (timeValueIsWeek && forecastMonth.year === summaryValue.year) {\r\n forecastWeeks = forecastMonth.weeks.filter(\r\n (forecastWeek) =>\r\n forecastWeek.weekNumber == summaryValue.timeValue\r\n );\r\n } else if (\r\n !timeValueIsWeek &&\r\n forecastMonth.year === summaryValue.year &&\r\n forecastMonth.month === summaryValue.timeValue\r\n ) {\r\n let filteredForecastMonths = [forecastMonth];\r\n\r\n // Include the month before and after, to see later on if a week splitted into two months is in those\r\n if (index > 0) {\r\n filteredForecastMonths.push(forecastMonths[index - 1]);\r\n }\r\n if (forecastMonths.length > index + 1) {\r\n filteredForecastMonths.push(forecastMonths[index + 1]);\r\n }\r\n\r\n forecastWeeks = filteredForecastMonths.flatMap(\r\n (filteredForecastMonth) => filteredForecastMonth.weeks\r\n );\r\n }\r\n\r\n return (\r\n forecastWeeks\r\n .flatMap((forecastWeek) => {\r\n return forecastWeek.forecasts\r\n .filter(\r\n (forecast) =>\r\n this.filteredProductNumbers.length === 0 ||\r\n this.filteredProductNumbers.some(\r\n (productNumber) =>\r\n productNumber === forecast.productNumber\r\n )\r\n )\r\n .map((forecast) => {\r\n let change = forecast.newQuantity - forecast.quantity;\r\n\r\n if (!timeValueIsWeek && change !== 0) {\r\n // Check if week is in month (get the percentage) and if so adjust the change\r\n const forecastWeekPercentageInMonth =\r\n getForecastWeekPercentageInMonth(\r\n forecastWeek,\r\n forecastMonth.year,\r\n forecastMonth.month\r\n );\r\n\r\n return forecastWeekPercentageInMonth > 0\r\n ? Math.round(change * forecastWeekPercentageInMonth)\r\n : 0;\r\n }\r\n\r\n return change;\r\n });\r\n })\r\n .reduce((a, b) => a + b, 0) ?? 0\r\n );\r\n })\r\n .reduce((a, b) => a + b, 0);\r\n\r\n let changeColor: string = Colors.limeGreen;\r\n if (valueChange < 0) {\r\n value += valueChange;\r\n valueChange *= -1;\r\n changeColor = negativeForecastChangeColor;\r\n }\r\n\r\n if (valueChange !== 0) {\r\n changedForecastsData.push({\r\n x: xValue(summaryValue),\r\n y: valueChange,\r\n color: changeColor,\r\n });\r\n }\r\n\r\n forecastData.push({\r\n x: xValue(summaryValue),\r\n y: value,\r\n products: summaryValue.products,\r\n isSalesAgreement: false,\r\n color: isCurrentOrFutureValue(summaryValue)\r\n ? Colors.blue\r\n : Colors.blue50,\r\n });\r\n }\r\n\r\n series.push({\r\n name: this.$t('forecastCharts.changedForecasts').toString(),\r\n type: 'column',\r\n data: changedForecastsData,\r\n pointPlacement: 0.25,\r\n zIndex: 3,\r\n color: Colors.limeGreen,\r\n stacking: 'normal',\r\n linkedTo: 'forecasts',\r\n tooltip: {\r\n pointFormatter: function () {\r\n return `${this.series.name}: ${\r\n this.color === negativeForecastChangeColor ? '-' : ''\r\n }${numberFilter(this.y)} t
`;\r\n },\r\n },\r\n });\r\n\r\n series.push({\r\n id: 'forecasts',\r\n name: this.$t('forecastCharts.forecasts').toString(),\r\n type: 'column',\r\n data: forecastData,\r\n pointPlacement: 0.25,\r\n zIndex: 2,\r\n color: Colors.blue,\r\n stacking: 'normal',\r\n });\r\n\r\n return series;\r\n }\r\n\r\n private loadForecastContractPeriodSummary(\r\n force?: boolean\r\n ): Promise {\r\n if (this.selectedContractPeriodId === null) {\r\n return Promise.reject('No selected contract period!');\r\n }\r\n\r\n let dispatchMethod: Promise;\r\n if (this.isSmi) {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n dispatchMethod = smiForecastsContractPeriodSummaryModule.dispatchLoad({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n force,\r\n });\r\n } else {\r\n if (this.selectedCustomerId === null) {\r\n return Promise.reject('No selected customer!');\r\n }\r\n dispatchMethod = forecastsContractPeriodSummaryModule.dispatchLoad({\r\n customerId: this.selectedCustomerId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n force,\r\n });\r\n }\r\n\r\n this.isLoadingForecastMonthsSummary = true;\r\n this.errorLoadingForecastMonthsSummary = false;\r\n\r\n return dispatchMethod\r\n .catch(() => {\r\n this.errorLoadingForecastMonthsSummary = true;\r\n })\r\n .finally(() => {\r\n this.isLoadingForecastMonthsSummary = false;\r\n });\r\n }\r\n\r\n private onSelectedContractPeriodInput(contractPeriodId: number): void {\r\n this.$emit('changeContractPeriodId', contractPeriodId);\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!./ForecastCharts.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!./ForecastCharts.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ForecastCharts.vue?vue&type=template&id=4555fe98&\"\nimport script from \"./ForecastCharts.vue?vue&type=script&lang=ts&\"\nexport * from \"./ForecastCharts.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('TreeSelect',{staticClass:\"the-tree-select\",attrs:{\"value\":_vm.value,\"options\":_vm.options,\"placeholder\":_vm.placeholder,\"clearable\":_vm.clearable,\"multiple\":_vm.multiple,\"disabled\":_vm.disabled},on:{\"input\":_vm.onInput,\"select\":_vm.onSelect}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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 TreeSelect, {\r\n TreeSelectNode,\r\n} from '@/components/general/TreeSelect.vue';\r\nimport { IProduct } from '@/models/IProduct';\r\n\r\n@Component({\r\n components: {\r\n TreeSelect,\r\n },\r\n})\r\nexport default class ProductsTreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: string[];\r\n @Prop({ required: true }) private products!: IProduct[];\r\n @Prop({ required: true }) private placeholder!: string;\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n @Prop({ required: false, default: () => true })\r\n private multiple!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private disabled!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n private placeholderAsEmptyOption!: boolean;\r\n\r\n private get options(): TreeSelectNode[] {\r\n const options: TreeSelectNode[] = [];\r\n\r\n if (this.placeholderAsEmptyOption) {\r\n options.push({\r\n id: '',\r\n label: this.placeholder,\r\n });\r\n }\r\n\r\n for (let product of this.products) {\r\n options.push({\r\n id: product.productNumber,\r\n label:\r\n product.displayName && product.displayName !== ''\r\n ? product.displayName\r\n : product.productNumber,\r\n });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private onInput(productNumbers: string[]) {\r\n this.$emit('input', productNumbers);\r\n }\r\n\r\n private onSelect(productNumbers: string[]) {\r\n if (productNumbers.length === 1 && productNumbers[0] === '') {\r\n productNumbers = [];\r\n }\r\n this.$emit('select', productNumbers);\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!./ProductsTreeSelect.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!./ProductsTreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductsTreeSelect.vue?vue&type=template&id=01b7af92&scoped=true&\"\nimport script from \"./ProductsTreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductsTreeSelect.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductsTreeSelect.vue?vue&type=style&index=0&id=01b7af92&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 \"01b7af92\",\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!./ForecastQuantity.vue?vue&type=style&index=0&id=3d5ebfc2&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.forecastMonthsforContractPeriods.length)?_c('div',_vm._l((_vm.forecastMonthsforContractPeriods),function(period,periodIndex){return _c('div',{key:periodIndex,staticClass:\"mb-5\"},[_c('h3',{staticClass:\"t-heading-5 mb-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.contractPeriod', [ _vm.getDateRange(period.fromDate, period.toDate) ]))+\" \")]),_c('div',{staticClass:\"o-line o-line--thin mb-3\"}),_c('div',{staticClass:\"c-accordion u-full-width px-2\"},[_c('div',{staticClass:\"c-accordion c-form c-form--validated c-form--light-grey u-full-width p-0\"},_vm._l((period.forecastMonths),function(forecastMonth,monthIndex){return _c('div',{key:monthIndex,staticClass:\"forecast-month-row c-accordion__item mb-3\",class:{\n 'is-open': forecastMonth.isExpanded,\n }},[_c('a',{staticClass:\"c-accordion__toggle py-1\",on:{\"click\":function($event){forecastMonth.isExpanded = !forecastMonth.isExpanded}}},[_c('h4',{staticClass:\"month-title d-inline-flex justify-content-between t-body-regular-sans-serif mb-0\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.yearAndMonthFilter(forecastMonth.year, forecastMonth.month))+\" (\"+_vm._s(_vm.$t('forecastList.monthWeeks', [ forecastMonth.weeks[0].weekNumber, forecastMonth.weeks[forecastMonth.weeks.length - 1] .weekNumber ]))+\") \")])])]),_c('div',{staticClass:\"c-accordion__content py-0 px-0 mx-2\"},[_c('div',{staticClass:\"c-table c-table--no-divider js-table js-table-expandable\"},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',[_c('tbody',[_vm._l((forecastMonth.weeks),function(forecastWeek){return [_c('tr',{key:(monthIndex + \"|\" + (forecastWeek.weekNumber)),staticClass:\"forecast-week-row c-table__primary\",class:{\n 'c-table__clickable-row':\n forecastWeek.forecasts.length,\n 'is-showing': forecastWeek.isExpanded,\n },attrs:{\"aria-expanded\":\"false\",\"aria-label\":_vm.$t('forecastList.primaryAriaLabel')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();forecastWeek.isExpanded = !forecastWeek.isExpanded}}},[_c('td',[_c('div',{staticClass:\"c-table__td-content\"},[_c('span',{staticClass:\"nowrap mr-1 u-bold\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.weekPart1', [ forecastWeek.weekNumber ]))+\" \")]),_c('span',{staticClass:\"nowrap\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.weekPart2', [ _vm.dateRangeFilter( forecastWeek.startDate, forecastWeek.endDate ) ]))+\" \")])])]),_c('td'),_c('td',{staticClass:\"u-text-right\"},[_c('span',{staticClass:\"nowrap mr-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('forecastList.quantity'))+\": \"+_vm._s(_vm.getQuantityForWeekText(forecastWeek)))])])]),_vm._l((forecastWeek.forecasts),function(forecast,forecastIndex){return [(_vm.isForecastFiltered(forecast))?_c('tr',{key:(monthIndex + \"|\" + (forecastWeek.weekNumber) + \"|\" + forecastIndex),staticClass:\"c-table__secondary forecast-row\",class:{\n active: forecastWeek.isExpanded,\n },attrs:{\"aria-hidden\":forecastWeek.isExpanded ? 'true' : 'false'}},[_c('td'),_c('td',[_vm._v(_vm._s(_vm.getForecastProductText(forecast)))]),_c('td',[_c('ForecastQuantity',{attrs:{\"forecast\":forecast,\"validationId\":(monthIndex + \"|\" + (forecastWeek.weekNumber) + \"|\" + forecastIndex),\"isAllowedToEdit\":_vm.isAllowedToEdit,\"editable\":forecastWeek.editable}})],1)]):_vm._e()]})]})],2)])])])])])}),0)])])}),0):_vm._e()}\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\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, Prop } from 'vue-property-decorator';\r\nimport ForecastQuantity from '@/components/ForecastQuantity.vue';\r\nimport { ForecastWeek } from '@/models/Forecasts/ForecastWeek';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { yearAndMonthFilter } from '@/filters/yearAndMonth';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { ForecastsForContractPeriod } from '@/models/Forecasts/ForecastsForContractPeriod';\r\nimport { IForecast } from '@/models/Forecasts/IForecast';\r\n\r\n@Component({\r\n components: {\r\n ForecastQuantity,\r\n },\r\n})\r\nexport default class HistoricForecastList extends Vue {\r\n @Prop({ required: true })\r\n public forecastMonthsforContractPeriods!: ForecastsForContractPeriod[];\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n\r\n private readonly dateRangeFilter = dateRangeFilter;\r\n private readonly yearAndMonthFilter = yearAndMonthFilter;\r\n\r\n private getDateRange(from: string, to: string): string {\r\n return dateRangeFilter(from, to);\r\n }\r\n\r\n private isForecastFiltered(forecast: IForecast) {\r\n if (this.filteredProductNumbers.length === 0) {\r\n return true;\r\n }\r\n if (forecast.productNumber === undefined) {\r\n return false;\r\n }\r\n return this.filteredProductNumbers.some(\r\n (productNumber) => forecast.productNumber === productNumber\r\n );\r\n }\r\n\r\n private getQuantityForWeekText(\r\n forecastWeek: ForecastWeek\r\n ): string {\r\n const weekQuantity = forecastWeek.forecasts.reduce((sum, current) => {\r\n const quantity = !isNaN(current.newQuantity)\r\n ? current.newQuantity\r\n : current.quantity;\r\n\r\n return sum + (this.isForecastFiltered(current) ? quantity : 0);\r\n }, 0);\r\n\r\n return `${numberFilter(weekQuantity)} t`;\r\n }\r\n\r\n private getForecastProductText(forecast: IForecast): string {\r\n if (forecast.productNumber === undefined) {\r\n return '?';\r\n }\r\n return forecast.productDisplayName && forecast.productDisplayName !== ''\r\n ? forecast.productDisplayName\r\n : forecast.productNumber;\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!./HistoricForecastList.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!./HistoricForecastList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./HistoricForecastList.vue?vue&type=template&id=1920eacb&scoped=true&\"\nimport script from \"./HistoricForecastList.vue?vue&type=script&lang=ts&\"\nexport * from \"./HistoricForecastList.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./HistoricForecastList.vue?vue&type=style&index=0&id=1920eacb&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 \"1920eacb\",\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!./ProductsTreeSelect.vue?vue&type=style&index=0&id=01b7af92&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!./HistoricForecastList.vue?vue&type=style&index=0&id=1920eacb&scoped=true&lang=scss&\"","import { CommonStore } from '@/store/common';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { store } from '@/store';\r\n\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 userService from '@/services/UserService';\r\nimport { Customers } from '@/models/Customers';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'userCustomers',\r\n dynamic: true,\r\n store,\r\n})\r\nclass UserCustomersModule extends VuexModule {\r\n public userCustomers: Customers | null = null;\r\n\r\n private common = new CommonStore(60); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get loading() {\r\n return this.common.loading;\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation public commitSetUserCustomers(userCustomers: Customers) {\r\n this.userCustomers = userCustomers;\r\n }\r\n\r\n @Mutation public commitClearUserCustomers() {\r\n this.userCustomers = null;\r\n }\r\n\r\n // From common:\r\n @Mutation private commitSetLoadedDate() {\r\n this.common.setLoadedDate();\r\n }\r\n @Mutation private commitClearLoadedDate() {\r\n this.common.clearLoadedDate();\r\n }\r\n @Mutation private commitSetLoadingError(payload: { error: any }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading() {\r\n this.common.setLoading();\r\n }\r\n @Mutation private commitClearLoading() {\r\n this.common.clearLoading();\r\n }\r\n @Mutation private commitSetLoadingPromise(payload: {\r\n loadingPromise: Promise;\r\n loadingPromiseForId: any;\r\n }) {\r\n this.common.setLoadingPromise(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(data?: { force: boolean }): Promise {\r\n // If recently loaded, return\r\n if ((!data || (data && !data.force)) && !this.common.needToReLoad()) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading()) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'userCustomers'\r\n );\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n\r\n const loadingPromise = userService\r\n .getCustomers()\r\n .then((userCustomers) => {\r\n this.commitSetUserCustomers(userCustomers);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n Consoler.debugLog('Load userCustomers success', userCustomers);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load userCustomers failed', error);\r\n this.commitSetLoadingError({ error });\r\n this.commitClearUserCustomers();\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({ loadingPromise, loadingPromiseForId: null });\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const userCustomersModule = getModule(UserCustomersModule);\r\n","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!./CompanyChainCustomersTreeSelect.vue?vue&type=style&index=0&id=5bcb6a06&scoped=true&lang=scss&\""],"sourceRoot":""}