{"version":3,"sources":["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/services/PerformanceService.ts","webpack:///./src/views/PerformanceContractPerformancePage.vue?7ad3","webpack:///./src/components/PerformanceContractPerformanceCustomer.vue?1ab3","webpack:///./src/components/PerformanceContractPerformanceList.vue?fcbe","webpack:///./src/components/PerformanceContractPerformanceList.vue","webpack:///./src/components/PerformanceContractPerformanceList.vue?35a0","webpack:///./src/components/PerformanceContractPerformanceList.vue?b600","webpack:///./src/components/PerformanceContractPerformanceChart.vue?b5f3","webpack:///./src/components/PerformanceContractPerformanceChart.vue","webpack:///./src/components/PerformanceContractPerformanceChart.vue?afd7","webpack:///./src/components/PerformanceContractPerformanceChart.vue?6fb1","webpack:///./src/store/modules/contractPerformanceContractPeriods.ts","webpack:///./src/components/PerformanceContractPerformanceCustomer.vue","webpack:///./src/components/PerformanceContractPerformanceCustomer.vue?6e03","webpack:///./src/components/PerformanceContractPerformanceCustomer.vue?1f20","webpack:///./src/store/modules/contractPerformanceForCustomers.ts","webpack:///./src/views/PerformanceContractPerformancePage.vue","webpack:///./src/views/PerformanceContractPerformancePage.vue?bdf2","webpack:///./src/views/PerformanceContractPerformancePage.vue?89c2","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/models/Performance/PerformanceDataType.ts","webpack:///./src/views/PerformanceInvoicedVolumesPage.vue?edb8","webpack:///./src/components/PerformanceInvoicedVolumesFilter.vue?2830","webpack:///./src/components/PerformanceInvoicedVolumesFilter.vue","webpack:///./src/components/PerformanceInvoicedVolumesFilter.vue?3c5d","webpack:///./src/components/PerformanceInvoicedVolumesFilter.vue?b0b6","webpack:///./src/components/PerformanceInvoicedVolumesCustomer.vue?43af","webpack:///./src/components/PerformanceInvoicedVolumesChart.vue?4885","webpack:///./src/components/PerformanceInvoicedVolumesChart.vue","webpack:///./src/components/PerformanceInvoicedVolumesChart.vue?64d5","webpack:///./src/components/PerformanceInvoicedVolumesChart.vue?a8f2","webpack:///./src/components/PerformanceInvoicedVolumesCustomer.vue","webpack:///./src/components/PerformanceInvoicedVolumesCustomer.vue?d6aa","webpack:///./src/components/PerformanceInvoicedVolumesCustomer.vue?426a","webpack:///./src/store/modules/invoicedVolumesByDates.ts","webpack:///./src/views/PerformanceInvoicedVolumesPage.vue","webpack:///./src/views/PerformanceInvoicedVolumesPage.vue?7998","webpack:///./src/views/PerformanceInvoicedVolumesPage.vue?c354","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/utils/RoutingForPerformance.ts","webpack:///./src/components/PerformanceActionButtons.vue?0439","webpack:///./src/components/PerformanceActionButtons.vue","webpack:///./src/components/PerformanceActionButtons.vue?d4fa","webpack:///./src/components/PerformanceActionButtons.vue?9425","webpack:///./src/store/modules/userCustomers.ts","webpack:///./src/components/CompanyChainCustomersTreeSelect.vue?6385"],"names":["_arrayWithoutHoles","arr","Array","isArray","arrayLikeToArray","_iterableToArray","iter","Symbol","iterator","Object","from","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","PerformanceService","customerIds","monthRange","this","get","fromYear","year","fromMonth","month","toYear","to","toMonth","then","response","data","catch","error","Promise","reject","downloadFile","contractPeriodId","contractPeriodIds","performanceService","render","_vm","_h","$createElement","_c","_self","attrs","breadcrumbs","staticClass","_v","_s","$t","responsibles","length","nonResponsibles","customerIdsFilter","on","onCustomersFilterSelect","_e","getCustomerIds","customerSelectedContractPeriods","PerformanceDataType","ContractPerformance","contractPerformanceSummary","companyChainName","productVolumes","_l","contractPerformanceForCustomer","key","customerId","certifiedVolumesRoute","staticRenderFns","customerName","contractPeriods","selectedContractPeriodId","noCurrentContractPeriod","undefined","onSelectedContractPeriodInput","contractPerformanceForContractPeriod","collections","yearsAndMonths","yearAndMonths","name","toString","volumes","map","productVolume","productDisplayName","productColorCategory","invoicedVolumes","totalVolume","totalInvoicedVolume","extraColumns","number","totalContractedVolume","contractPerformancePercentYTD","contractPerformancePercent","totalVolumes","totalInvoicedVolumes","extraColumnsTotals","averageContractPerformancePercentYTD","averageContractPerformancePercent","required","components","CollectionVolumesList","component","chartOptions","tooltipPointFormatter","point","relatedPoints","series","chart","filter","yAxis","flatMap","points","seriesPoint","index","productName","contractedVolumesPoint","find","p","isContractedVolumes","invoicedVolumesPoint","date","Date","x","tooltip","yearAndMonth","getFullYear","getMonth","relatedPointTooltip","relatedPoint","isCurrentPoint","isAggregated","i18n","t","y","title","text","xAxis","type","labels","style","fontSize","format","min","height","offset","lineWidth","top","credits","enabled","time","useUTC","customOptions","chartHeight","spacing","chartSpacing","zoomType","backgroundColor","legend","verticalAlign","plotOptions","spline","marker","lineColor","fillColor","radius","symbol","column","grouping","stacking","headerFormat","pointFormatter","commonChartOptions","invoicedVolumesSeries","volume","volumeIndex","getTime","id","color","Config","getProductColor","pointPlacement","stack","contractedSeries","contractedVolumes","Helpers","AddAlphaToColor","linkedTo","invoicedVolumesAggregatedSeries","invoicedVolumesAggregated","contractedVolumesAggregatedSeries","contractedVolumesAggregated","dashStyle","lessHighChart","default","highcharts","common","getDataFor","payload","setLoading","setLoadingComplete","setLoadingError","hasFreshDataFor","resolve","item","currentlyLoadingPromise","isCurrentlyLoading","Consoler","debugLog","loadingPromise","getContractPerformanceForContractPeriod","commitSetLoadingComplete","debugWarn","commitSetLoadingError","commitSetLoading","contractPerformanceForContractPeriods","namespaced","dynamic","store","contractPerformanceContractPeriodsModule","currentContractPeriodPerformance","isLoading","errorLoading","dispatchLoad","finally","loadContractPerformanceForContractPeriod","ContractPeriodsSelect","PerformanceContractPerformanceList","PerformanceContractPerformanceChart","loading","contractPerformance","customerPerformance","longestLength","currentContractPeriodsSummary","reduce","acc","curr","currLength","forEach","push","c","minLength","search","setLoadedDate","clearLoadedDate","clearLoading","setLoadingPromise","loadingId","join","loadingPromiseForId","needToReLoad","commitClearSearch","getContractPerformanceForCustomers","commitSetSearch","dispatchAdd","commitSetLoadedDate","commitClearLoading","commitSetLoadingPromise","contractPerformanceForCustomersModule","userProfile","customers","userCustomers","customerContractPerformance","$route","routeTrackingInfo","initialize","updateContractPerformance","stopTrackPage","loadData","params","query","$router","all","getContractPerformance","customer","updateQuery","immediate","deep","DefaultLayout","Breadcrumbs","Messages","PerformanceActionButtons","CompanyChainCustomersTreeSelect","PerformanceContractPerformanceCustomer","value","selectOptions","placeholder","onInput","options","period","shortText","isCurrent","dateRange","fromDate","toDate","placeholderOption","$emit","SelectBox","selectedMonthRange","onMonthRangeChange","InvoicedVolumes","customerVolumes","dateRangeShortcuts","minDate","startOfToday","maxRangeLengthInMonths","Dates","getStartOfMonthInThePast","shortcuts","range","startOfYear","startOf12MonthsAgo","yearsToAdd","endOfYear","CustomMonthRangePicker","gridLineWidth","product","PerformanceInvoicedVolumesChart","getInvoicedVolumes","invoicedVolumesByDatesModule","beforeRoute","next","stoppedInAdvance","registerHooks","updateInvoicedVolumes","PerformanceInvoicedVolumesFilter","PerformanceInvoicedVolumesCustomer","clearable","multiple","disabled","onSelect","nodes","nonResponsibleCompanyChainNodes","companyChain","companyChainHasFilteredCustomers","label","children","filterIsSmiCustomer","isSmiCustomer","showIfSmiCustomer","responsibleCompanyChainNodes","isDefaultExpanded","concat","some","TreeSelect","getUTCFullYear","defaultMonthRange","getPerformanceParams","route","customerIdsString","split","customerIdString","Number","isNaN","generatePerformanceQuery","anyPerformanceQueryChanges","getPerformanceRoute","getPerformanceRouteParams","getPerformanceBreadcrumbs","performanceRoute","items","routeName","routeParams","String","padStart","enableExportButton","isExportingToExcel","exportToExcel","selectedContractPeriodIds","dispatchMethod","downloadContractPerformance","downloadInvoicedVolumes","errorMessage","Message","EventBus","AddMessageEvent","UserCustomersModule","force","getCustomers","commitSetUserCustomers","commitClearUserCustomers","userCustomersModule"],"mappings":"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","file":"js/performance.8a8f347c.js","sourcesContent":["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}","import { arrayParamsSerializer, BaseServiceDefinition } from './BaseService';\r\nimport { ContractPerformanceForContractPeriod } from '@/models/ContractPerformance/ContractPerformanceForContractPeriod';\r\nimport { ContractPerformanceForCustomers } from '@/models/ContractPerformance/ContractPerformanceForCustomers';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { InvoicedVolumesByDates } from '@/models/InvoicedVolumes/InvoicedVolumesByDates';\r\n\r\nclass PerformanceService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public getInvoicedVolumes(\r\n customerIds: number[],\r\n monthRange: MonthRange\r\n ): Promise {\r\n return this.get(\r\n '/api/v1/performance/invoicedVolumes',\r\n {\r\n customerIds,\r\n fromYear: monthRange.from.year,\r\n fromMonth: monthRange.from.month + 1,\r\n toYear: monthRange.to.year,\r\n toMonth: monthRange.to.month + 1,\r\n },\r\n arrayParamsSerializer\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 downloadInvoicedVolumes(\r\n customerIds: number[],\r\n monthRange: MonthRange\r\n ): Promise {\r\n await this.downloadFile(\r\n '/api/v1/performance/invoicedVolumes/excel',\r\n 'InvoicedVolumes.xlsx',\r\n {\r\n customerIds,\r\n fromYear: monthRange.from.year,\r\n fromMonth: monthRange.from.month + 1,\r\n toYear: monthRange.to.year,\r\n toMonth: monthRange.to.month + 1,\r\n },\r\n arrayParamsSerializer\r\n );\r\n }\r\n\r\n public getContractPerformanceForCustomers(\r\n customerIds: number[]\r\n ): Promise {\r\n return this.get(\r\n '/api/v1/performance/contractPerformance/customers',\r\n {\r\n customerIds,\r\n },\r\n arrayParamsSerializer\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 getContractPerformanceForContractPeriod(\r\n contractPeriodId: number\r\n ): Promise {\r\n return this.get(\r\n `/api/v1/performance/contractPerformance/${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 downloadContractPerformance(\r\n contractPeriodIds: number[]\r\n ): Promise {\r\n await this.downloadFile(\r\n '/api/v1/performance/contractPerformance/excel',\r\n 'ContractPerformance.xlsx',\r\n {\r\n contractPeriodIds,\r\n },\r\n arrayParamsSerializer\r\n );\r\n }\r\n}\r\n\r\nconst performanceService: PerformanceService = new PerformanceService();\r\n\r\nexport default performanceService;\r\n","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-row justify-content-between flex-wrap align-items-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('performanceContractPerformancePage.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.customerIdsFilter,\"responsibles\":_vm.responsibles,\"nonResponsibles\":_vm.nonResponsibles,\"clearable\":true,\"placeholder\":_vm.$t('performanceContractPerformancePage.customersPlaceholder')},on:{\"select\":_vm.onCustomersFilterSelect}})],1):_vm._e()]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex flex-row justify-content-between flex-wrap align-items-center mb-4\"},[_c('div',{staticClass:\"d-align-self-end\"},[_c('PerformanceActionButtons',{attrs:{\"customerIds\":_vm.getCustomerIds(),\"selectedContractPeriodIds\":_vm.customerSelectedContractPeriods,\"type\":_vm.PerformanceDataType.ContractPerformance}})],1)]),(_vm.error)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('performanceContractPerformancePage.error')))])]):_vm._e(),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12\"},[(_vm.loading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):(!_vm.error)?[(_vm.contractPerformanceSummary !== null)?_c('div',{staticClass:\"mb-6\"},[_c('h2',{staticClass:\"t-heading-4\"},[_vm._v(\" \"+_vm._s(_vm.$t( 'performanceContractPerformancePage.summaryForCompanyChain', [_vm.contractPerformanceSummary.companyChainName] ))+\" \")]),(_vm.contractPerformanceSummary.productVolumes.length > 0)?[_c('PerformanceContractPerformanceChart',{staticClass:\"mb-3\",attrs:{\"data\":_vm.contractPerformanceSummary}}),_c('PerformanceContractPerformanceList',{attrs:{\"data\":_vm.contractPerformanceSummary}})]:_c('div',[_vm._v(\" \"+_vm._s(_vm.$t('performanceContractPerformancePage.noSummaryData'))+\" \")])],2):_vm._e(),_vm._l((_vm.contractPerformance),function(contractPerformanceForCustomer){return _c('PerformanceContractPerformanceCustomer',{key:contractPerformanceForCustomer.customerId,staticClass:\"mb-6\",attrs:{\"data\":contractPerformanceForCustomer}})})]:_vm._e()],2)]),_c('router-link',{staticClass:\"o-text-link\",attrs:{\"to\":_vm.certifiedVolumesRoute}},[_vm._v(\" \"+_vm._s(_vm.$t('performanceContractPerformancePage.seeCertifiedVolumes'))+\" \")])],1)],1)}\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',[_c('h2',{staticClass:\"t-heading-4\"},[_vm._v(\" \"+_vm._s(_vm.data.customerName)+\" \")]),(_vm.contractPeriods.length === 0)?_c('div',[_vm._v(\" \"+_vm._s(_vm.$t('performanceContractPerformanceCustomer.noContractPeriods'))+\" \")]):_c('div',{staticClass:\"grey-box-shadow p-4\"},[_c('ContractPeriodsSelect',{staticClass:\"mb-3\",attrs:{\"value\":_vm.selectedContractPeriodId,\"contractPeriods\":_vm.contractPeriods,\"placeholder\":_vm.noCurrentContractPeriod\n ? _vm.$t(\n 'performanceContractPerformanceCustomer.contractPeriodsPlaceholder'\n )\n : undefined},on:{\"input\":_vm.onSelectedContractPeriodInput}}),(_vm.isLoading)?_c('div',{staticClass:\"u-text-center\"},[_c('div',{staticClass:\"o-loader mt-2\"})]):(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('performanceContractPerformanceCustomer.error')))])]):(\n _vm.contractPerformanceForContractPeriod !== null &&\n _vm.contractPerformanceForContractPeriod.productVolumes.length > 0\n )?_c('div',[_c('PerformanceContractPerformanceChart',{staticClass:\"mb-3\",attrs:{\"data\":_vm.contractPerformanceForContractPeriod,\"lessHighChart\":true}}),_c('PerformanceContractPerformanceList',{attrs:{\"data\":_vm.contractPerformanceForContractPeriod}})],1):_c('div',[(_vm.showNoCurrentContractPeriodError)?[_vm._v(_vm._s(_vm.$t('performanceContractPerformanceCustomer.noCurrentContractPeriod')))]:[_vm._v(_vm._s(_vm.$t('performanceContractPerformanceCustomer.noData')))]],2)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CollectionVolumesList',{staticClass:\"c-table--dense-horizontal c-table--print-dense c-table--print-fit-content\",attrs:{\"collections\":_vm.collections,\"yearsAndMonths\":_vm.yearsAndMonths,\"mainColumnName\":_vm.$t('performanceContractPerformanceList.mainColumnName'),\"extraColumnNames\":[\n _vm.$t('performanceContractPerformanceList.contractedVolume'),\n _vm.$t('performanceContractPerformanceList.contractPerformancePercentYTD'),\n _vm.$t('performanceContractPerformanceList.contractPerformancePercent') ]}})}\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 CollectionVolumesList, {\r\n CollectionVolume,\r\n} from './CollectionVolumesList.vue';\r\nimport { YearAndMonth } from '@/models/YearAndMonth';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { ContractPerformance } from '@/models/ContractPerformance/ContractPerformance';\r\n\r\n@Component({\r\n components: {\r\n CollectionVolumesList,\r\n },\r\n})\r\nexport default class PerformanceContractPerformanceList extends Vue {\r\n @Prop({ required: true })\r\n private data!: ContractPerformance;\r\n\r\n private get yearsAndMonths(): YearAndMonth[] {\r\n return this.data.yearAndMonths;\r\n }\r\n\r\n private get collections(): CollectionVolume[] {\r\n return [\r\n {\r\n name: this.$t('performanceContractPerformanceList.invoiced').toString(),\r\n volumes: this.data.productVolumes.map((productVolume) => ({\r\n productDisplayName: productVolume.productDisplayName,\r\n productColorCategory: productVolume.productColorCategory,\r\n volumes: productVolume.invoicedVolumes,\r\n totalVolume: productVolume.totalInvoicedVolume,\r\n extraColumns: [\r\n numberFilter(productVolume.totalContractedVolume)?.toString() ?? '',\r\n productVolume.contractPerformancePercentYTD !== undefined\r\n ? this.$t(\r\n 'performanceContractPerformanceList.contractPerformancePercentValueYTD',\r\n [numberFilter(productVolume.contractPerformancePercentYTD)]\r\n ).toString()\r\n : '-',\r\n productVolume.contractPerformancePercent !== undefined\r\n ? this.$t(\r\n 'performanceContractPerformanceList.contractPerformancePercentValue',\r\n [numberFilter(productVolume.contractPerformancePercent)]\r\n ).toString()\r\n : '-',\r\n ],\r\n })),\r\n totalVolumes: this.data.totalInvoicedVolumes,\r\n totalVolume: this.data.totalInvoicedVolume,\r\n extraColumnsTotals: [\r\n numberFilter(this.data.totalContractedVolume)?.toString() ?? '',\r\n this.data.averageContractPerformancePercentYTD !== undefined\r\n ? this.$t(\r\n 'performanceContractPerformanceList.contractPerformancePercentValueYTD',\r\n [numberFilter(this.data.averageContractPerformancePercentYTD)]\r\n ).toString()\r\n : '-',\r\n this.data.averageContractPerformancePercent !== undefined\r\n ? this.$t(\r\n 'performanceContractPerformanceList.contractPerformancePercentValue',\r\n [numberFilter(this.data.averageContractPerformancePercent)]\r\n ).toString()\r\n : '-',\r\n ],\r\n },\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!./PerformanceContractPerformanceList.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!./PerformanceContractPerformanceList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceContractPerformanceList.vue?vue&type=template&id=1623fe3e&\"\nimport script from \"./PerformanceContractPerformanceList.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceContractPerformanceList.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('highcharts',{attrs:{\"options\":_vm.chartOptions}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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 { numberFilter } from '@/filters/number';\r\nimport { Config } from '@/utils/Config';\r\nimport { ContractPerformance } from '@/models/ContractPerformance/ContractPerformance';\r\nimport i18n from '@/i18n/i18n';\r\nimport { Helpers } from '@/utils/Helpers';\r\nimport { yearAndMonthFilter } from '@/filters/yearAndMonth';\r\n\r\ninterface ContractedPerformancePointOptions extends PointOptionsObject {\r\n productName: string;\r\n productDisplayName: string;\r\n isContractedVolumes: boolean;\r\n isAggregated: boolean;\r\n}\r\ninterface ContractedPerformancePoint extends Point {\r\n productName: string;\r\n productDisplayName: string;\r\n isContractedVolumes: boolean;\r\n isAggregated: boolean;\r\n}\r\n\r\nfunction tooltipPointFormatter(point: ContractedPerformancePoint): string {\r\n const relatedPoints = point.series.chart.series\r\n .filter((series) => series.yAxis === point.series.yAxis)\r\n .flatMap((series) =>\r\n series.points.filter((seriesPoint) => seriesPoint.index === point.index)\r\n )\r\n .map((seriesPoint) => seriesPoint as ContractedPerformancePoint)\r\n .filter((seriesPoint) => seriesPoint.productName === point.productName);\r\n\r\n const contractedVolumesPoint = relatedPoints.find(\r\n (p) => p.isContractedVolumes\r\n );\r\n const invoicedVolumesPoint = relatedPoints.find(\r\n (p) => !p.isContractedVolumes\r\n );\r\n\r\n const date = new Date(point.x);\r\n let tooltip = `
\r\n ${yearAndMonthFilter(\r\n date.getFullYear(),\r\n date.getMonth() + 1\r\n )}\r\n
${point.productDisplayName}
\r\n
`;\r\n\r\n if (point.isAggregated) {\r\n tooltip += `${i18n.t(\r\n 'performanceContractPerformanceChart.tooltips.aggregatedVolumes'\r\n )}:
`;\r\n }\r\n\r\n if (contractedVolumesPoint !== undefined) {\r\n tooltip += relatedPointTooltip(contractedVolumesPoint);\r\n }\r\n if (invoicedVolumesPoint !== undefined) {\r\n tooltip += relatedPointTooltip(invoicedVolumesPoint);\r\n }\r\n\r\n function relatedPointTooltip(\r\n relatedPoint: ContractedPerformancePoint\r\n ): string {\r\n const isCurrentPoint =\r\n relatedPoint.isContractedVolumes === point.isContractedVolumes &&\r\n relatedPoint.isAggregated === point.isAggregated;\r\n return `${i18n.t(\r\n `performanceContractPerformanceChart.tooltips.${\r\n relatedPoint.isContractedVolumes\r\n ? 'contractedVolumes'\r\n : 'invoicedVolumes'\r\n }`\r\n )}: ${isCurrentPoint ? '' : ''}${numberFilter(relatedPoint.y)} t${\r\n isCurrentPoint ? '' : ''\r\n }\r\n
`;\r\n }\r\n\r\n return tooltip;\r\n}\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n },\r\n})\r\nexport default class PerformanceContractPerformanceChart extends Vue {\r\n @Prop({ required: true })\r\n public data!: ContractPerformance;\r\n @Prop({ required: false, default: () => false })\r\n private lessHighChart!: boolean;\r\n\r\n private readonly chartSpacing = [5, 5, 5, 0];\r\n\r\n private readonly commonChartOptions: Options = {\r\n title: {\r\n text: undefined,\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n title: {\r\n text: this.$t(\r\n 'performanceContractPerformanceChart.yAxis.aggregated'\r\n ).toString(),\r\n },\r\n labels: {\r\n format: '{value} t',\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n min: 0,\r\n height: '52%',\r\n offset: 0,\r\n lineWidth: 1,\r\n },\r\n {\r\n title: {\r\n text: this.$t(\r\n 'performanceContractPerformanceChart.yAxis.monthly'\r\n ).toString(),\r\n },\r\n labels: {\r\n format: '{value} t',\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n min: 0,\r\n top: '66%',\r\n height: '34%',\r\n offset: 0,\r\n lineWidth: 1,\r\n },\r\n ],\r\n credits: {\r\n enabled: false,\r\n },\r\n time: {\r\n useUTC: false,\r\n },\r\n };\r\n\r\n private get chartOptions(): Options {\r\n const customOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: this.chartSpacing,\r\n zoomType: 'x',\r\n backgroundColor: 'transparent',\r\n },\r\n legend: {\r\n enabled: true,\r\n verticalAlign: 'top',\r\n },\r\n plotOptions: {\r\n spline: {\r\n marker: {\r\n enabled: undefined,\r\n lineColor: undefined,\r\n lineWidth: 2,\r\n fillColor: '#fff',\r\n radius: 5,\r\n symbol: 'circle',\r\n },\r\n },\r\n column: {\r\n grouping: false,\r\n stacking: 'normal',\r\n },\r\n },\r\n series: this.series,\r\n tooltip: {\r\n headerFormat: '',\r\n pointFormatter: function () {\r\n return tooltipPointFormatter(this as ContractedPerformancePoint);\r\n },\r\n },\r\n };\r\n\r\n return { ...this.commonChartOptions, ...customOptions };\r\n }\r\n\r\n private get series(): SeriesOptionsType[] {\r\n const invoicedVolumesSeries: SeriesOptionsType[] =\r\n this.data.productVolumes.map((productVolume) => {\r\n const data: ContractedPerformancePointOptions[] =\r\n productVolume.invoicedVolumes.map((volume, volumeIndex) => ({\r\n x: new Date(\r\n this.data.yearAndMonths[volumeIndex].year,\r\n this.data.yearAndMonths[volumeIndex].month - 1,\r\n 1\r\n ).getTime(),\r\n y: volume,\r\n productName: productVolume.productName,\r\n productDisplayName: productVolume.productDisplayName,\r\n isContractedVolumes: false,\r\n isAggregated: false,\r\n }));\r\n\r\n return {\r\n id: productVolume.productName,\r\n name: productVolume.productDisplayName,\r\n data,\r\n color: Config.getProductColor(productVolume.productColorCategory),\r\n type: 'column',\r\n pointPlacement: 0,\r\n stack: 'invoiced',\r\n yAxis: 1,\r\n };\r\n });\r\n\r\n const contractedSeries: SeriesOptionsType[] = this.data.productVolumes.map(\r\n (productVolume) => {\r\n const data: ContractedPerformancePointOptions[] =\r\n productVolume.contractedVolumes.map((volume, volumeIndex) => ({\r\n x: new Date(\r\n this.data.yearAndMonths[volumeIndex].year,\r\n this.data.yearAndMonths[volumeIndex].month - 1,\r\n 1\r\n ).getTime(),\r\n y: volume,\r\n productName: productVolume.productName,\r\n productDisplayName: productVolume.productDisplayName,\r\n isContractedVolumes: true,\r\n isAggregated: false,\r\n }));\r\n\r\n return {\r\n name: productVolume.productDisplayName,\r\n data,\r\n color: Helpers.AddAlphaToColor(\r\n Config.getProductColor(productVolume.productColorCategory),\r\n 0.3\r\n ),\r\n type: 'column',\r\n linkedTo: productVolume.productName,\r\n stack: 'contracted',\r\n pointPlacement: -0.2,\r\n yAxis: 1,\r\n };\r\n }\r\n );\r\n\r\n const invoicedVolumesAggregatedSeries: SeriesOptionsType[] =\r\n this.data.productVolumes.map((productVolume) => {\r\n const data: ContractedPerformancePointOptions[] =\r\n productVolume.invoicedVolumesAggregated.map(\r\n (volume, volumeIndex) => ({\r\n x: new Date(\r\n this.data.yearAndMonths[volumeIndex].year,\r\n this.data.yearAndMonths[volumeIndex].month - 1,\r\n 1\r\n ).getTime(),\r\n y: volume,\r\n productName: productVolume.productName,\r\n productDisplayName: productVolume.productDisplayName,\r\n isContractedVolumes: false,\r\n isAggregated: true,\r\n })\r\n );\r\n\r\n return {\r\n name: productVolume.productDisplayName,\r\n data,\r\n color: Config.getProductColor(productVolume.productColorCategory),\r\n type: 'spline',\r\n linkedTo: productVolume.productName,\r\n };\r\n });\r\n\r\n const contractedVolumesAggregatedSeries: SeriesOptionsType[] =\r\n this.data.productVolumes.map((productVolume) => {\r\n const data: ContractedPerformancePointOptions[] =\r\n productVolume.contractedVolumesAggregated.map(\r\n (volume, volumeIndex) => ({\r\n x: new Date(\r\n this.data.yearAndMonths[volumeIndex].year,\r\n this.data.yearAndMonths[volumeIndex].month - 1,\r\n 1\r\n ).getTime(),\r\n y: volume,\r\n productName: productVolume.productName,\r\n productDisplayName: productVolume.productDisplayName,\r\n isContractedVolumes: true,\r\n isAggregated: true,\r\n })\r\n );\r\n\r\n return {\r\n name: productVolume.productDisplayName,\r\n data,\r\n color: Config.getProductColor(productVolume.productColorCategory),\r\n type: 'line',\r\n dashStyle: 'Dash',\r\n lineWidth: 1,\r\n linkedTo: productVolume.productName,\r\n marker: {\r\n enabled: false,\r\n },\r\n };\r\n });\r\n\r\n return [\r\n ...contractedSeries,\r\n ...invoicedVolumesSeries,\r\n ...invoicedVolumesAggregatedSeries,\r\n ...contractedVolumesAggregatedSeries,\r\n ];\r\n }\r\n\r\n private get chartHeight(): number {\r\n return this.lessHighChart ? 300 : 350;\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!./PerformanceContractPerformanceChart.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!./PerformanceContractPerformanceChart.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceContractPerformanceChart.vue?vue&type=template&id=4f0d6d1e&\"\nimport script from \"./PerformanceContractPerformanceChart.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceContractPerformanceChart.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 { Consoler } from '@/utils/Consoler';\r\nimport { 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 { CommonArrayStore } from '../commonArrayStore';\r\nimport performanceService from '@/services/PerformanceService';\r\nimport { ContractPerformanceForContractPeriod } from '@/models/ContractPerformance/ContractPerformanceForContractPeriod';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'contractPerformanceContractPeriods',\r\n dynamic: true,\r\n store,\r\n})\r\nclass ContractPerformanceContractPeriodsModule extends VuexModule {\r\n private common = new CommonArrayStore<\r\n ContractPerformanceForContractPeriod,\r\n number\r\n >(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (contractPeriodId: number) =>\r\n this.common.getDataFor(contractPeriodId);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\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 @Mutation private commitSetLoadingComplete(payload: {\r\n id: number;\r\n data: ContractPerformanceForContractPeriod;\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\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n contractPeriodId: number;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(payload.contractPeriodId)) {\r\n return Promise.resolve(this.item(payload.contractPeriodId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.contractPeriodId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'contractPerformanceContractPeriods',\r\n payload\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = performanceService\r\n .getContractPerformanceForContractPeriod(payload.contractPeriodId)\r\n .then((response) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.contractPeriodId,\r\n data: response,\r\n });\r\n Consoler.debugLog(\r\n 'Load contractPerformanceContractPeriods success',\r\n payload,\r\n response\r\n );\r\n return Promise.resolve(response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn(\r\n 'Load contractPerformanceContractPeriods failed',\r\n payload,\r\n error\r\n );\r\n this.commitSetLoadingError({\r\n id: payload.contractPeriodId,\r\n error,\r\n });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.contractPeriodId,\r\n loadingPromise,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n\r\n @Action\r\n public async dispatchAdd(payload: {\r\n contractPerformanceForContractPeriods: ContractPerformanceForContractPeriod[];\r\n }): Promise {\r\n for (const contractPerformanceForContractPeriod of payload.contractPerformanceForContractPeriods) {\r\n this.commitSetLoadingComplete({\r\n id: contractPerformanceForContractPeriod.contractPeriodId,\r\n data: contractPerformanceForContractPeriod,\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const contractPerformanceContractPeriodsModule = getModule(\r\n ContractPerformanceContractPeriodsModule\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\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 ContractPeriodsSelect from './ContractPeriodsSelect.vue';\r\nimport PerformanceContractPerformanceList from './PerformanceContractPerformanceList.vue';\r\nimport PerformanceContractPerformanceChart from './PerformanceContractPerformanceChart.vue';\r\nimport { ContractPerformanceForCustomer } from '@/models/ContractPerformance/ContractPerformanceForCustomer';\r\nimport { ContractPerformanceForContractPeriod } from '@/models/ContractPerformance/ContractPerformanceForContractPeriod';\r\nimport { contractPerformanceContractPeriodsModule } from '@/store/modules/contractPerformanceContractPeriods';\r\nimport { ContractPeriod } from '@/models/ContractPerformance/ContractPeriod';\r\n\r\n@Component({\r\n components: {\r\n ContractPeriodsSelect,\r\n PerformanceContractPerformanceList,\r\n PerformanceContractPerformanceChart,\r\n },\r\n})\r\nexport default class PerformanceContractPerformanceCustomer extends Vue {\r\n @Prop({ required: true })\r\n private data!: ContractPerformanceForCustomer;\r\n\r\n private selectedContractPeriodId: number | null = null;\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n\r\n private get noCurrentContractPeriod(): boolean {\r\n return this.data.currentContractPeriodPerformance === undefined;\r\n }\r\n\r\n private get showNoCurrentContractPeriodError(): boolean {\r\n return (\r\n this.selectedContractPeriodId === null && this.noCurrentContractPeriod\r\n );\r\n }\r\n\r\n private get contractPeriods(): ContractPeriod[] {\r\n return this.data.contractPeriods;\r\n }\r\n\r\n private get contractPerformanceForContractPeriod(): ContractPerformanceForContractPeriod | null {\r\n return this.selectedContractPeriodId !== null\r\n ? contractPerformanceContractPeriodsModule.item(\r\n this.selectedContractPeriodId\r\n )\r\n : null;\r\n }\r\n\r\n private created() {\r\n if (this.data.currentContractPeriodPerformance !== undefined) {\r\n this.selectedContractPeriodId =\r\n this.data.currentContractPeriodPerformance.contractPeriodId;\r\n }\r\n }\r\n\r\n private loadContractPerformanceForContractPeriod() {\r\n if (this.selectedContractPeriodId === null) {\r\n return;\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n contractPerformanceContractPeriodsModule\r\n .dispatchLoad({ contractPeriodId: this.selectedContractPeriodId })\r\n .catch(() => {\r\n this.errorLoading = true;\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private onSelectedContractPeriodInput(contractPeriodId: number): void {\r\n this.selectedContractPeriodId = contractPeriodId;\r\n this.data.selectedContractPeriodId = contractPeriodId;\r\n this.loadContractPerformanceForContractPeriod();\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!./PerformanceContractPerformanceCustomer.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!./PerformanceContractPerformanceCustomer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceContractPerformanceCustomer.vue?vue&type=template&id=4305e49d&\"\nimport script from \"./PerformanceContractPerformanceCustomer.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceContractPerformanceCustomer.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 { CommonStore } from '@/store/common';\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 { Consoler } from '@/utils/Consoler';\r\nimport { ContractPerformanceForCustomers } from '@/models/ContractPerformance/ContractPerformanceForCustomers';\r\nimport performanceService from '@/services/PerformanceService';\r\nimport { contractPerformanceContractPeriodsModule } from './contractPerformanceContractPeriods';\r\n\r\nexport interface Search {\r\n customerIds: number[];\r\n data: ContractPerformanceForCustomers;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'contractPerformanceForCustomers',\r\n dynamic: true,\r\n store,\r\n})\r\nclass ContractPerformanceForCustomersModule extends VuexModule {\r\n public search: Search | 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 commitSetSearch(payload: Search) {\r\n for (const customerPerformance of payload.data.contractPerformance) {\r\n customerPerformance.selectedContractPeriodId =\r\n customerPerformance.currentContractPeriodPerformance?.contractPeriodId;\r\n }\r\n let longestLength = 12;\r\n payload.data.currentContractPeriodsSummary?.productVolumes.reduce(\r\n (acc, curr) => {\r\n const currLength = curr.invoicedVolumes.length;\r\n if (currLength > acc) {\r\n longestLength = currLength;\r\n return currLength;\r\n } else {\r\n return acc;\r\n }\r\n },\r\n 0\r\n );\r\n\r\n payload.data.currentContractPeriodsSummary?.productVolumes.forEach(\r\n (productVolume) => {\r\n for (\r\n let index = productVolume.invoicedVolumes.length;\r\n index < longestLength;\r\n index++\r\n ) {\r\n productVolume.invoicedVolumes.push(0);\r\n }\r\n }\r\n );\r\n\r\n payload.data.contractPerformance.forEach((c) => {\r\n const minLength =\r\n c.currentContractPeriodPerformance?.yearAndMonths.length ?? 12;\r\n\r\n c.currentContractPeriodPerformance?.productVolumes.forEach(\r\n (productVolume) => {\r\n for (\r\n let index = productVolume.invoicedVolumes.length;\r\n index < minLength;\r\n index++\r\n ) {\r\n productVolume.invoicedVolumes.push(0);\r\n }\r\n }\r\n );\r\n });\r\n\r\n this.search = payload;\r\n }\r\n\r\n @Mutation public commitClearSearch() {\r\n this.search = 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(payload: { customerIds: number[] }): Promise {\r\n const loadingId = payload.customerIds.join(',');\r\n\r\n if (\r\n this.search !== null &&\r\n this.common.loading.loadingPromiseForId === loadingId &&\r\n !this.common.needToReLoad()\r\n ) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading(loadingId)) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'contractPerformanceForCustomers'\r\n );\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n this.commitClearSearch();\r\n\r\n const loadingPromise = performanceService\r\n .getContractPerformanceForCustomers(payload.customerIds)\r\n .then((response) => {\r\n Consoler.debugLog(\r\n 'Load contractPerformanceForCustomers success',\r\n response\r\n );\r\n\r\n this.commitSetSearch({\r\n customerIds: payload.customerIds,\r\n data: response,\r\n });\r\n\r\n // Save any defined contract performance for contract periods to contractPerformanceContractPeriodsModule as well:\r\n contractPerformanceContractPeriodsModule.dispatchAdd({\r\n contractPerformanceForContractPeriods: response.contractPerformance\r\n .filter((c) => c.currentContractPeriodPerformance !== undefined)\r\n .map((c) => c.currentContractPeriodPerformance!),\r\n });\r\n\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn(\r\n 'Load contractPerformanceForCustomers failed',\r\n error\r\n );\r\n this.commitSetLoadingError({ error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: loadingId,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const contractPerformanceForCustomersModule = getModule(\r\n ContractPerformanceForCustomersModule\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 PerformanceActionButtons from '@/components/PerformanceActionButtons.vue';\r\nimport PerformanceContractPerformanceCustomer from '@/components/PerformanceContractPerformanceCustomer.vue';\r\nimport PerformanceContractPerformanceList from '@/components/PerformanceContractPerformanceList.vue';\r\nimport PerformanceContractPerformanceChart from '@/components/PerformanceContractPerformanceChart.vue';\r\nimport CompanyChainCustomersTreeSelect from '@/components/CompanyChainCustomersTreeSelect.vue';\r\nimport { userCustomersModule } from '@/store/modules/userCustomers';\r\nimport { contractPerformanceForCustomersModule } from '@/store/modules/contractPerformanceForCustomers';\r\nimport { PerformanceDataType } from '@/models/Performance/PerformanceDataType';\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 {\r\n anyPerformanceQueryChanges,\r\n generatePerformanceQuery,\r\n getPerformanceParams,\r\n getPerformanceBreadcrumbs,\r\n} from '@/utils/RoutingForPerformance';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { Customers } from '@/models/Customers';\r\nimport { CompanyChain } from '@/models/CompanyChain';\r\nimport { ContractPerformanceForCustomer } from '@/models/ContractPerformance/ContractPerformanceForCustomer';\r\nimport { ContractPerformanceSummary } from '@/models/ContractPerformance/ContractPerformanceSummary';\r\nimport { routeNameSustainabilityCertifiedVolumes } from '@/router/routes';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport { getRouteTrackingInfo } from '@/router/functions';\r\nimport { Location } from 'vue-router';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n PerformanceActionButtons,\r\n CompanyChainCustomersTreeSelect,\r\n PerformanceContractPerformanceCustomer,\r\n PerformanceContractPerformanceList,\r\n PerformanceContractPerformanceChart,\r\n },\r\n})\r\nexport default class PerformanceContractPerformancePage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private loading: boolean = false;\r\n private error: boolean = false;\r\n private customerIdsFilter: number[] = [];\r\n\r\n private readonly PerformanceDataType = PerformanceDataType;\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get certifiedVolumesRoute(): Location {\r\n return {\r\n name: routeNameSustainabilityCertifiedVolumes,\r\n };\r\n }\r\n\r\n private get customers(): Customer[] {\r\n return this.userProfile !== null && this.userProfile.customers\r\n ? this.userProfile.customers\r\n : [];\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 contractPerformance(): ContractPerformanceForCustomer[] {\r\n return contractPerformanceForCustomersModule.search !== null\r\n ? contractPerformanceForCustomersModule.search.data.contractPerformance\r\n : [];\r\n }\r\n\r\n private get contractPerformanceSummary(): ContractPerformanceSummary | null {\r\n return contractPerformanceForCustomersModule.search !== null &&\r\n contractPerformanceForCustomersModule.search.data\r\n .currentContractPeriodsSummary !== undefined\r\n ? contractPerformanceForCustomersModule.search.data\r\n .currentContractPeriodsSummary\r\n : null;\r\n }\r\n\r\n private get customerSelectedContractPeriods(): number[] {\r\n return this.contractPerformance\r\n .filter(\r\n (customerContractPerformance) =>\r\n customerContractPerformance.selectedContractPeriodId !== undefined\r\n )\r\n .map(\r\n (customerContractPerformance) =>\r\n customerContractPerformance.selectedContractPeriodId!\r\n );\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n return getPerformanceBreadcrumbs(\r\n PerformanceDataType.ContractPerformance,\r\n this.$route\r\n );\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize();\r\n this.updateContractPerformance().finally(() => {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize();\r\n this.loadData().finally(() => {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n });\r\n }\r\n\r\n private initialize(): void {\r\n const params = getPerformanceParams(this.$route);\r\n\r\n if (params.customerIds.length > 0) {\r\n this.customerIdsFilter = params.customerIds;\r\n } else {\r\n this.customerIdsFilter = [];\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 = generatePerformanceQuery(this.customerIdsFilter);\r\n\r\n if (anyPerformanceQueryChanges(this.$route, query)) {\r\n this.$router.push({ query });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private loadData(): Promise {\r\n this.loading = true;\r\n this.error = false;\r\n\r\n return Promise.all([\r\n this.getContractPerformance(),\r\n userCustomersModule.dispatchLoad(),\r\n ])\r\n .then(() => undefined)\r\n .catch(() => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.loading = false;\r\n });\r\n }\r\n\r\n private updateContractPerformance(): Promise {\r\n this.loading = true;\r\n this.error = false;\r\n\r\n return this.getContractPerformance()\r\n .catch(() => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.loading = false;\r\n });\r\n }\r\n\r\n private getContractPerformance(): Promise {\r\n const customerIds = this.getCustomerIds();\r\n\r\n if (customerIds.length === 0) {\r\n Consoler.debugWarn('No customer to use');\r\n return Promise.reject('No customer to use');\r\n }\r\n\r\n return contractPerformanceForCustomersModule.dispatchLoad({\r\n customerIds,\r\n });\r\n }\r\n\r\n private getCustomerIds(): number[] {\r\n if (this.customerIdsFilter.length > 0) {\r\n return this.customerIdsFilter;\r\n } else if (this.customers.length > 0) {\r\n return this.customers.map((customer) => customer.id);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n private onCustomersFilterSelect(customers: number[]) {\r\n this.customerIdsFilter = customers;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.customerIdsFilter = [];\r\n this.updateQuery();\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!./PerformanceContractPerformancePage.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!./PerformanceContractPerformancePage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceContractPerformancePage.vue?vue&type=template&id=735c47da&\"\nimport script from \"./PerformanceContractPerformancePage.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceContractPerformancePage.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('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","export enum PerformanceDataType {\r\n ContractPerformance = 'ContractPerformance',\r\n InvoicedVolumes = 'InvoicedVolumes',\r\n}\r\n","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-row justify-content-between flex-wrap align-items-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('performanceInvoicedVolumesPage.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.customerIdsFilter,\"responsibles\":_vm.responsibles,\"nonResponsibles\":_vm.nonResponsibles,\"clearable\":true,\"placeholder\":_vm.$t('performanceInvoicedVolumesPage.customersPlaceholder')},on:{\"select\":_vm.onCustomersFilterSelect}})],1):_vm._e()]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex flex-row justify-content-between flex-wrap align-items-center mb-4\"},[_c('PerformanceInvoicedVolumesFilter',{staticClass:\"mb-1 mr-2\",attrs:{\"selectedMonthRange\":_vm.selectedMonthRange},on:{\"monthRangeChange\":_vm.onMonthRangeChange}}),_c('div',{staticClass:\"d-align-self-end mb-1\"},[_c('PerformanceActionButtons',{attrs:{\"customerIds\":_vm.getCustomerIds(),\"monthRange\":_vm.selectedMonthRange,\"type\":_vm.PerformanceDataType.InvoicedVolumes}})],1)],1),(_vm.error)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('performanceInvoicedVolumesPage.error')))])]):_vm._e(),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 mb-3\"},[(_vm.loading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):(!_vm.error && _vm.invoicedVolumes.length)?_vm._l((_vm.invoicedVolumes),function(customerVolumes,index){return _c('PerformanceInvoicedVolumesCustomer',{key:index,staticClass:\"mb-6\",attrs:{\"data\":customerVolumes,\"yearsAndMonths\":_vm.yearAndMonths}})}):_vm._e()],2)]),_c('router-link',{staticClass:\"o-text-link\",attrs:{\"to\":_vm.certifiedVolumesRoute}},[_vm._v(\" \"+_vm._s(_vm.$t('performanceInvoicedVolumesPage.seeCertifiedVolumes'))+\" \")])],1)],1)}\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:\"d-flex flex-column flex-sm-row flex-wrap align-items-sm-center\"},[(_vm.showMonthRangePicker)?_c('CustomMonthRangePicker',{attrs:{\"monthRange\":_vm.selectedMonthRange,\"shortcuts\":_vm.dateRangeShortcuts,\"minDate\":_vm.minDate,\"maxDate\":_vm.startOfToday,\"maxRangeLengthInMonths\":_vm.maxRangeLengthInMonths},on:{\"change\":_vm.onMonthRangeChange}}):_vm._e()],1)}\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 CustomMonthRangePicker from '@/components/general/CustomMonthRangePicker.vue';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { DateRangeShortcut } from '@/models/DateRangeShortcut';\r\nimport { Dates } from '@/utils/Dates';\r\n\r\n@Component({\r\n components: {\r\n CustomMonthRangePicker,\r\n },\r\n})\r\nexport default class PerformanceInvoicedVolumesFilter extends Vue {\r\n @Prop({ required: false, default: () => undefined })\r\n private selectedMonthRange!: MonthRange | undefined;\r\n\r\n private get showMonthRangePicker(): boolean {\r\n return this.selectedMonthRange !== undefined;\r\n }\r\n\r\n private readonly maxRangeLengthInMonths: number = 24;\r\n\r\n private get minDate(): Date {\r\n return new Date(2001, 0, 1);\r\n }\r\n\r\n private get startOfToday(): Date {\r\n return Dates.startOfToday();\r\n }\r\n\r\n private get startOf12MonthsAgo(): Date {\r\n return Dates.getStartOfMonthInThePast(11);\r\n }\r\n private get dateRangeShortcuts(): DateRangeShortcut[] {\r\n const shortcuts: DateRangeShortcut[] = [];\r\n\r\n shortcuts.push({\r\n text: this.$t('performanceFilter.ranges.currentYear').toString(),\r\n range: {\r\n fromDate: Dates.startOfYear(this.startOfToday.getFullYear()),\r\n toDate: this.startOfToday,\r\n },\r\n });\r\n shortcuts.push({\r\n text: this.$t('performanceFilter.ranges.pastYear').toString(),\r\n range: {\r\n fromDate: this.startOf12MonthsAgo,\r\n toDate: this.startOfToday,\r\n },\r\n });\r\n\r\n const yearsToAdd: number[] = [\r\n this.startOfToday.getFullYear() - 1,\r\n this.startOfToday.getFullYear() - 2,\r\n this.startOfToday.getFullYear() - 3,\r\n this.startOfToday.getFullYear() - 4,\r\n this.startOfToday.getFullYear() - 5,\r\n this.startOfToday.getFullYear() - 6,\r\n ];\r\n\r\n for (const year of yearsToAdd) {\r\n shortcuts.push({\r\n text: year.toString(),\r\n range: {\r\n fromDate: Dates.startOfYear(year),\r\n toDate: Dates.endOfYear(year),\r\n },\r\n });\r\n }\r\n\r\n return shortcuts;\r\n }\r\n\r\n private onMonthRangeChange(value: MonthRange) {\r\n this.$emit('monthRangeChange', value);\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!./PerformanceInvoicedVolumesFilter.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!./PerformanceInvoicedVolumesFilter.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceInvoicedVolumesFilter.vue?vue&type=template&id=04e2af31&\"\nimport script from \"./PerformanceInvoicedVolumesFilter.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceInvoicedVolumesFilter.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',[_c('h2',{staticClass:\"t-heading-4\"},[_vm._v(_vm._s(_vm.data.customerName))]),_c('div',{staticClass:\"grey-box-shadow p-4\"},[(_vm.data.productVolumes.length)?[_c('PerformanceInvoicedVolumesChart',{staticClass:\"mb-3\",attrs:{\"data\":_vm.data,\"yearsAndMonths\":_vm.yearsAndMonths}}),_c('CollectionVolumesList',{staticClass:\"c-table--dense-horizontal c-table--print-dense c-table--print-fit-content\",attrs:{\"collections\":_vm.collections,\"yearsAndMonths\":_vm.yearsAndMonths,\"mainColumnName\":_vm.$t('performanceInvoicedVolumesCustomer.mainColumnName')}})]:[_vm._v(\" \"+_vm._s(_vm.$t('performanceInvoicedVolumesCustomer.noData'))+\" \")]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('highcharts',{attrs:{\"options\":_vm.chartOptions}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Chart } from 'highcharts-vue';\r\nimport { Options } from 'highcharts';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { InvoicedVolumesForCustomer } from '@/models/InvoicedVolumes/InvoicedVolumesForCustomer';\r\nimport { Config } from '@/utils/Config';\r\nimport { YearAndMonth } from '@/models/YearAndMonth';\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n },\r\n})\r\nexport default class PerformanceInvoicedVolumesChart extends Vue {\r\n @Prop({ required: true })\r\n public data!: InvoicedVolumesForCustomer;\r\n @Prop({ required: true }) private yearsAndMonths!: YearAndMonth[];\r\n\r\n private readonly chartHeight = 250;\r\n private readonly chartSpacing = [0, 5, 5, 0];\r\n\r\n private readonly commonChartOptions: Options = {\r\n title: {\r\n text: undefined,\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 min: 0,\r\n },\r\n credits: {\r\n enabled: false,\r\n },\r\n time: {\r\n useUTC: false,\r\n },\r\n };\r\n\r\n private get chartOptions(): Options {\r\n const customOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: this.chartSpacing,\r\n zoomType: 'x',\r\n backgroundColor: 'transparent',\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n labels: {\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 plotOptions: {\r\n spline: {\r\n marker: {\r\n enabled: undefined,\r\n lineColor: undefined,\r\n lineWidth: 2,\r\n fillColor: '#fff',\r\n radius: 5,\r\n symbol: 'circle',\r\n },\r\n },\r\n },\r\n series: this.data.productVolumes.map((productVolume) => ({\r\n name: productVolume.productDisplayName,\r\n data: productVolume.invoicedVolumes.map((volume, volumeIndex) => ({\r\n x: new Date(\r\n this.yearsAndMonths[volumeIndex].year,\r\n this.yearsAndMonths[volumeIndex].month - 1,\r\n 1\r\n ).getTime(),\r\n y: volume,\r\n })),\r\n color: Config.getProductColor(productVolume.productColorCategory),\r\n type: 'spline',\r\n })),\r\n tooltip: {\r\n pointFormatter: function () {\r\n return ` ${\r\n this.series.name\r\n }: ${numberFilter(this.y)} t
`;\r\n },\r\n },\r\n };\r\n\r\n return { ...this.commonChartOptions, ...customOptions };\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!./PerformanceInvoicedVolumesChart.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!./PerformanceInvoicedVolumesChart.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceInvoicedVolumesChart.vue?vue&type=template&id=7f3e96b6&\"\nimport script from \"./PerformanceInvoicedVolumesChart.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceInvoicedVolumesChart.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","\n\n\n\n\n\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 { ProductVolumes } from '@/models/Sustainability/CertifiedVolumes/ProductVolumes';\r\nimport { Config } from '@/utils/Config';\r\nimport CollectionVolumesList, {\r\n CollectionVolume,\r\n} from './CollectionVolumesList.vue';\r\nimport PerformanceInvoicedVolumesChart from './PerformanceInvoicedVolumesChart.vue';\r\nimport { InvoicedVolumesForCustomer } from '@/models/InvoicedVolumes/InvoicedVolumesForCustomer';\r\nimport { YearAndMonth } from '@/models/YearAndMonth';\r\n\r\n@Component({\r\n components: {\r\n CollectionVolumesList,\r\n PerformanceInvoicedVolumesChart,\r\n },\r\n})\r\nexport default class PerformanceInvoicedVolumesCustomer extends Vue {\r\n @Prop({ required: true }) private yearsAndMonths!: YearAndMonth[];\r\n @Prop({ required: true }) private data!: InvoicedVolumesForCustomer;\r\n\r\n private get collections(): CollectionVolume[] {\r\n const collections: CollectionVolume[] = [];\r\n\r\n if (this.data.productVolumes.length > 0) {\r\n collections.push({\r\n name: this.$t('performanceInvoicedVolumesCustomer.invoiced').toString(),\r\n volumes: this.data.productVolumes.map((productVolume) => ({\r\n productDisplayName: productVolume.productDisplayName,\r\n productColorCategory: productVolume.productColorCategory,\r\n volumes: productVolume.invoicedVolumes,\r\n totalVolume: productVolume.totalInvoicedVolume,\r\n })),\r\n totalVolumes: this.data.totalInvoicedVolumes,\r\n totalVolume: this.data.totalInvoicedVolume,\r\n });\r\n }\r\n\r\n return collections;\r\n }\r\n\r\n private getProductStyle(product: ProductVolumes): any {\r\n return {\r\n color: Config.getProductColor(product.productColorCategory),\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!./PerformanceInvoicedVolumesCustomer.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!./PerformanceInvoicedVolumesCustomer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceInvoicedVolumesCustomer.vue?vue&type=template&id=cbec78dc&\"\nimport script from \"./PerformanceInvoicedVolumesCustomer.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceInvoicedVolumesCustomer.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 { CommonStore } from '@/store/common';\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 { Consoler } from '@/utils/Consoler';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { InvoicedVolumesByDates } from '@/models/InvoicedVolumes/InvoicedVolumesByDates';\r\nimport performanceService from '@/services/PerformanceService';\r\n\r\nexport interface Search {\r\n customerIds: number[];\r\n monthRange: MonthRange;\r\n data: InvoicedVolumesByDates;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'invoicedVolumesByDates',\r\n dynamic: true,\r\n store,\r\n})\r\nclass InvoicedVolumesByDatesModule extends VuexModule {\r\n public search: Search | 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 commitSetSearch(payload: Search) {\r\n this.search = payload;\r\n }\r\n\r\n @Mutation public commitClearSearch() {\r\n this.search = 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(payload: {\r\n customerIds: number[];\r\n monthRange: MonthRange;\r\n }): Promise {\r\n const loadingId = `${payload.customerIds.join(',')}|${\r\n payload.monthRange.from.year\r\n }|${payload.monthRange.from.month}|${payload.monthRange.to.year}|${\r\n payload.monthRange.to.month\r\n }}`;\r\n\r\n if (\r\n this.search !== null &&\r\n this.common.loading.loadingPromiseForId === loadingId &&\r\n !this.common.needToReLoad()\r\n ) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading(loadingId)) {\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n this.commitClearSearch();\r\n\r\n const loadingPromise = performanceService\r\n .getInvoicedVolumes(payload.customerIds, payload.monthRange)\r\n .then((response) => {\r\n Consoler.debugLog('Load invoicedVolumesByDates success', response);\r\n this.commitSetSearch({\r\n customerIds: payload.customerIds,\r\n monthRange: payload.monthRange,\r\n data: response,\r\n });\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load invoicedVolumesByDates failed', error);\r\n this.commitSetLoadingError({ error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: loadingId,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const invoicedVolumesByDatesModule = getModule(\r\n InvoicedVolumesByDatesModule\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\n\n\n\n\n\n\n\n\n\n\n\n\n\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 PerformanceInvoicedVolumesFilter from '@/components/PerformanceInvoicedVolumesFilter.vue';\r\nimport PerformanceActionButtons from '@/components/PerformanceActionButtons.vue';\r\nimport PerformanceInvoicedVolumesCustomer from '@/components/PerformanceInvoicedVolumesCustomer.vue';\r\nimport CompanyChainCustomersTreeSelect from '@/components/CompanyChainCustomersTreeSelect.vue';\r\nimport { userCustomersModule } from '@/store/modules/userCustomers';\r\nimport { invoicedVolumesByDatesModule } from '@/store/modules/invoicedVolumesByDates';\r\nimport { PerformanceDataType } from '@/models/Performance/PerformanceDataType';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { MonthRange } from '@/models/MonthRange';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { UserProfile } from '@/models/UserProfile/UserProfile';\r\nimport { Customer } from '@/models/Customer';\r\nimport { Location, RawLocation, Route } from 'vue-router';\r\nimport {\r\n anyPerformanceQueryChanges,\r\n defaultMonthRange,\r\n generatePerformanceQuery,\r\n getPerformanceParams,\r\n getPerformanceRoute,\r\n getPerformanceBreadcrumbs,\r\n} from '@/utils/RoutingForPerformance';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { Customers } from '@/models/Customers';\r\nimport { CompanyChain } from '@/models/CompanyChain';\r\nimport { InvoicedVolumesForCustomer } from '@/models/InvoicedVolumes/InvoicedVolumesForCustomer';\r\nimport { YearAndMonth } from '@/models/YearAndMonth';\r\nimport { routeNameSustainabilityCertifiedVolumes } from '@/router/routes';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport { getRouteTrackingInfo } from '@/router/functions';\r\n\r\nComponent.registerHooks(['beforeRouteEnter', 'beforeRouteUpdate']);\r\n\r\nfunction beforeRoute(\r\n to: Route,\r\n from: Route,\r\n next: (to?: RawLocation | void) => void\r\n): void {\r\n const params = getPerformanceParams(to);\r\n if (!params.monthRange) {\r\n Consoler.debugLog('Wrong or no month range, going to default month range');\r\n\r\n // Stop tracking as well (with the stoppedInAdvance flag), since we can not be sure routing is done (if route is exactly the same as before)\r\n telemetryService.stopTrackPage(getRouteTrackingInfo(to), {\r\n stoppedInAdvance: true,\r\n });\r\n\r\n next(\r\n getPerformanceRoute(\r\n PerformanceDataType.InvoicedVolumes,\r\n params.customerIds,\r\n defaultMonthRange\r\n )\r\n );\r\n } else {\r\n next();\r\n }\r\n}\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n PerformanceInvoicedVolumesFilter,\r\n PerformanceActionButtons,\r\n CompanyChainCustomersTreeSelect,\r\n PerformanceInvoicedVolumesCustomer,\r\n },\r\n})\r\nexport default class PerformanceInvoicedVolumesPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private loading: boolean = false;\r\n private error: boolean = false;\r\n private customerIdsFilter: number[] = [];\r\n private selectedMonthRange: MonthRange = defaultMonthRange;\r\n\r\n PerformanceDataType = PerformanceDataType;\r\n\r\n private get userProfile(): UserProfile | null {\r\n return userProfileModule.data?.userProfile ?? null;\r\n }\r\n\r\n private get customers(): Customer[] {\r\n return this.userProfile !== null && this.userProfile.customers\r\n ? this.userProfile.customers\r\n : [];\r\n }\r\n\r\n private get certifiedVolumesRoute(): Location {\r\n return {\r\n name: routeNameSustainabilityCertifiedVolumes,\r\n };\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 invoicedVolumes(): InvoicedVolumesForCustomer[] {\r\n return invoicedVolumesByDatesModule.search !== null\r\n ? invoicedVolumesByDatesModule.search.data.invoicedVolumes\r\n : [];\r\n }\r\n\r\n private get yearAndMonths(): YearAndMonth[] {\r\n return invoicedVolumesByDatesModule.search !== null\r\n ? invoicedVolumesByDatesModule.search.data.yearAndMonths\r\n : [];\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n return getPerformanceBreadcrumbs(\r\n PerformanceDataType.InvoicedVolumes,\r\n this.$route\r\n );\r\n }\r\n\r\n public async beforeRouteEnter(\r\n to: Route,\r\n from: Route,\r\n next: (to?: RawLocation | void) => void\r\n ): Promise {\r\n beforeRoute(to, from, next);\r\n }\r\n\r\n public async beforeRouteUpdate(\r\n to: Route,\r\n from: Route,\r\n next: (to?: RawLocation | void) => void\r\n ): Promise {\r\n beforeRoute(to, from, next);\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize();\r\n this.updateInvoicedVolumes().finally(() => {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize();\r\n this.loadData().finally(() => {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n });\r\n }\r\n\r\n private initialize(): void {\r\n const params = getPerformanceParams(this.$route);\r\n\r\n if (params.customerIds.length > 0) {\r\n this.customerIdsFilter = params.customerIds;\r\n } else {\r\n this.customerIdsFilter = [];\r\n }\r\n\r\n this.selectedMonthRange =\r\n params.monthRange !== undefined ? params.monthRange : defaultMonthRange;\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 = generatePerformanceQuery(this.customerIdsFilter);\r\n\r\n if (anyPerformanceQueryChanges(this.$route, query)) {\r\n this.$router.push({ query });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private loadData(): Promise {\r\n this.loading = true;\r\n this.error = false;\r\n\r\n return Promise.all([\r\n this.getInvoicedVolumes(),\r\n userCustomersModule.dispatchLoad(),\r\n ])\r\n .then(() => undefined)\r\n .catch(() => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.loading = false;\r\n });\r\n }\r\n\r\n private updateInvoicedVolumes(): Promise {\r\n this.loading = true;\r\n this.error = false;\r\n\r\n return this.getInvoicedVolumes()\r\n .catch(() => {\r\n this.error = true;\r\n })\r\n .finally(() => {\r\n this.loading = false;\r\n });\r\n }\r\n\r\n private getInvoicedVolumes(): Promise {\r\n const customerIds = this.getCustomerIds();\r\n\r\n if (customerIds.length === 0) {\r\n Consoler.debugWarn('No customer to use');\r\n return Promise.reject('No customer to use');\r\n }\r\n\r\n return invoicedVolumesByDatesModule.dispatchLoad({\r\n customerIds,\r\n monthRange: this.selectedMonthRange,\r\n });\r\n }\r\n\r\n private getCustomerIds(): number[] {\r\n if (this.customerIdsFilter.length > 0) {\r\n return this.customerIdsFilter;\r\n } else if (this.customers.length > 0) {\r\n return this.customers.map((customer) => customer.id);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n private onCustomersFilterSelect(customers: number[]) {\r\n this.customerIdsFilter = customers;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.customerIdsFilter = [];\r\n this.updateQuery();\r\n }\r\n\r\n private onMonthRangeChange(monthRange: MonthRange) {\r\n this.$router.push(\r\n getPerformanceRoute(\r\n PerformanceDataType.InvoicedVolumes,\r\n this.customerIdsFilter,\r\n monthRange\r\n )\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!./PerformanceInvoicedVolumesPage.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!./PerformanceInvoicedVolumesPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceInvoicedVolumesPage.vue?vue&type=template&id=01ad1ab1&\"\nimport script from \"./PerformanceInvoicedVolumesPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceInvoicedVolumesPage.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 { 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","import { MonthRange } from '@/models/MonthRange';\r\nimport {\r\n routeNamePerformanceContractPerformance,\r\n routeNamePerformanceInvoicedVolumes,\r\n routeNamePerformanceRoot,\r\n} from '@/router/routes';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { Route, Location, Dictionary } from 'vue-router/types/router';\r\nimport { Dates } from './Dates';\r\nimport { getMonthRangeFromRouteParams } from './RoutingGeneral';\r\nimport i18n from '@/i18n/i18n';\r\nimport { monthRangeFilter } from '@/filters/monthRange';\r\nimport { PerformanceDataType } from '@/models/Performance/PerformanceDataType';\r\n\r\nconst startOfToday = Dates.startOfToday();\r\nconst startOfYear = Dates.startOfYear(startOfToday.getUTCFullYear());\r\nexport const defaultMonthRange: MonthRange = {\r\n from: {\r\n year: startOfYear.getFullYear(),\r\n month: startOfYear.getMonth(),\r\n },\r\n to: {\r\n year: startOfToday.getFullYear(),\r\n month: startOfToday.getMonth(),\r\n },\r\n};\r\n\r\nexport interface PerformanceParams {\r\n customerIds: number[];\r\n monthRange?: MonthRange;\r\n}\r\n\r\nexport function getPerformanceParams(route: Route): PerformanceParams {\r\n const customerIdsString = route.query.customers\r\n ? (route.query.customers as string)\r\n : '';\r\n const customerIds = customerIdsString\r\n ? customerIdsString\r\n .split(',')\r\n .map((customerIdString) => Number(customerIdString))\r\n .filter((customerId) => !isNaN(customerId))\r\n : [];\r\n\r\n const monthRange = getMonthRangeFromRouteParams(route);\r\n\r\n return {\r\n customerIds,\r\n monthRange,\r\n };\r\n}\r\n\r\nexport function generatePerformanceQuery(customerIds: number[]): any {\r\n const query: { customers?: string } = {};\r\n\r\n if (customerIds.length > 0) {\r\n query.customers = customerIds.join(',');\r\n }\r\n\r\n return query;\r\n}\r\n\r\nexport function anyPerformanceQueryChanges(route: Route, query: any): any {\r\n return route.query.customers !== query.customers;\r\n}\r\n\r\nexport function getPerformanceRoute(\r\n type: PerformanceDataType,\r\n customerIds: number[],\r\n monthRange?: MonthRange | null\r\n): Location {\r\n const params = getPerformanceRouteParams(monthRange);\r\n const query = generatePerformanceQuery(customerIds);\r\n\r\n return {\r\n name:\r\n type === PerformanceDataType.InvoicedVolumes\r\n ? routeNamePerformanceInvoicedVolumes\r\n : routeNamePerformanceContractPerformance,\r\n params,\r\n query,\r\n };\r\n}\r\n\r\nexport function getPerformanceBreadcrumbs(\r\n type: PerformanceDataType,\r\n route: Route\r\n): Breadcrumb[] {\r\n const performanceRoute: string =\r\n type === PerformanceDataType.InvoicedVolumes\r\n ? routeNamePerformanceInvoicedVolumes\r\n : routeNamePerformanceContractPerformance;\r\n\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNamePerformanceRoot,\r\n name: i18n.t('breadcrumbs.' + routeNamePerformanceRoot).toString(),\r\n },\r\n {\r\n routeName: performanceRoute,\r\n name: i18n.t('breadcrumbs.' + performanceRoute).toString(),\r\n },\r\n ];\r\n\r\n const params = getPerformanceParams(route);\r\n if (\r\n type === PerformanceDataType.InvoicedVolumes &&\r\n params.monthRange !== undefined\r\n ) {\r\n items.push({\r\n routeName: performanceRoute,\r\n routeParams: getPerformanceRouteParams(params.monthRange),\r\n name: monthRangeFilter(params.monthRange),\r\n });\r\n }\r\n\r\n return items;\r\n}\r\n\r\nfunction getPerformanceRouteParams(\r\n monthRange?: MonthRange | null\r\n): Dictionary {\r\n let routeParams: Dictionary = {};\r\n if (monthRange) {\r\n routeParams = {\r\n fromYear: monthRange.from.year.toString(),\r\n fromMonth: String(monthRange.from.month + 1).padStart(2, '0'),\r\n toYear: monthRange.to.year.toString(),\r\n toMonth: String(monthRange.to.month + 1).padStart(2, '0'),\r\n };\r\n }\r\n\r\n return routeParams;\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"o-button o-button--black\",attrs:{\"type\":\"button\",\"disabled\":!_vm.enableExportButton || _vm.isExportingToExcel},on:{\"click\":_vm.exportToExcel}},[_vm._v(\" \"+_vm._s(_vm.$t('performanceActionButtons.exportToExcel'))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport performanceService from '@/services/PerformanceService';\r\nimport { Message, MessageType } from '@/models/Message';\r\nimport { EventBus } from '@/utils/EventBus';\r\nimport { Config } from '@/utils/Config';\r\nimport { PerformanceDataType } from '@/models/Performance/PerformanceDataType';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { MonthRange } from '@/models/MonthRange';\r\n\r\n@Component\r\nexport default class PerformanceActionButtons extends Vue {\r\n @Prop({ required: true })\r\n private customerIds!: number[];\r\n @Prop({ required: false, default: () => [] })\r\n private selectedContractPeriodIds!: number[];\r\n @Prop({ required: false, default: () => undefined })\r\n private monthRange!: MonthRange | undefined;\r\n @Prop({ required: true })\r\n private type!: PerformanceDataType;\r\n\r\n private isExportingToExcel: boolean = false;\r\n\r\n private get enableExportButton(): boolean {\r\n return (\r\n this.type === PerformanceDataType.InvoicedVolumes ||\r\n this.selectedContractPeriodIds.length > 0\r\n );\r\n }\r\n\r\n private async exportToExcel(): Promise {\r\n let dispatchMethod: Promise | undefined;\r\n\r\n switch (this.type) {\r\n case PerformanceDataType.ContractPerformance:\r\n dispatchMethod = performanceService.downloadContractPerformance(\r\n this.selectedContractPeriodIds\r\n );\r\n\r\n break;\r\n case PerformanceDataType.InvoicedVolumes:\r\n if (this.monthRange === undefined) {\r\n Consoler.debugWarn(\"No month range, can't export\");\r\n return;\r\n }\r\n dispatchMethod = performanceService.downloadInvoicedVolumes(\r\n this.customerIds,\r\n this.monthRange\r\n );\r\n break;\r\n }\r\n\r\n if (!dispatchMethod) {\r\n Consoler.debugWarn(\"Invalid type, can't export\", this.type);\r\n return;\r\n }\r\n\r\n this.isExportingToExcel = true;\r\n\r\n await dispatchMethod\r\n .catch((error) => {\r\n Consoler.debugWarn('Error downloading Excel data', error);\r\n const errorMessage: Message = {\r\n text: this.$t(\r\n 'performanceActionButtons.errorDownloadingExcel'\r\n ).toString(),\r\n type: MessageType.error,\r\n };\r\n EventBus.$emit(Config.AddMessageEvent, errorMessage);\r\n })\r\n .finally(() => {\r\n this.isExportingToExcel = false;\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!./PerformanceActionButtons.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!./PerformanceActionButtons.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./PerformanceActionButtons.vue?vue&type=template&id=15491bb3&\"\nimport script from \"./PerformanceActionButtons.vue?vue&type=script&lang=ts&\"\nexport * from \"./PerformanceActionButtons.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 { 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":""}