{"version":3,"sources":["webpack:///./src/views/SmiMyConsumptionsPage.vue?174b","webpack:///./src/components/SmiConsumptionOverviewByDatesCharts.vue?8537","webpack:///./src/filters/dayAndShortMonthAndYear.ts","webpack:///./src/components/SmiConsumptionOverviewByDatesCharts.vue","webpack:///./src/components/SmiConsumptionOverviewByDatesCharts.vue?de17","webpack:///./src/components/SmiConsumptionOverviewByDatesCharts.vue?0394","webpack:///./src/components/SmiConsumptionOverviewKPIs.vue?6f93","webpack:///./src/components/SmiConsumptionOverviewKPIs.vue","webpack:///./src/components/SmiConsumptionOverviewKPIs.vue?44f8","webpack:///./src/components/SmiConsumptionOverviewKPIs.vue?8ce7","webpack:///./src/store/modules/smiConsumptionOverview.ts","webpack:///./src/store/modules/smiConsumptionOverviewByDates.ts","webpack:///./src/views/SmiMyConsumptionsPage.vue","webpack:///./src/views/SmiMyConsumptionsPage.vue?c341","webpack:///./src/views/SmiMyConsumptionsPage.vue?e145","webpack:///./src/views/SmiConsumptionLogPage.vue?8c7b","webpack:///./src/components/SmiConsumptionLogCharts.vue?f422","webpack:///./src/components/SmiConsumptionLogCharts.vue","webpack:///./src/components/SmiConsumptionLogCharts.vue?beb2","webpack:///./src/components/SmiConsumptionLogCharts.vue?cfff","webpack:///./src/components/SmiConsumptionLog.vue?91ff","webpack:///./src/components/SmiConsumptionLogMonth.vue?b6d1","webpack:///./src/components/SmiConsumptionLogWeek.vue?5ae2","webpack:///./src/components/SmiConsumptionLogWeekProductRow.vue?7c21","webpack:///./src/components/SmiConsumptionLogQuantityInput.vue?66ec","webpack:///./src/components/SmiConsumptionLogQuantityInput.vue","webpack:///./src/components/SmiConsumptionLogQuantityInput.vue?e756","webpack:///./src/components/SmiConsumptionLogQuantityInput.vue?8335","webpack:///./src/components/SmiConsumptionLogQuantityTotalInput.vue?84fc","webpack:///./src/components/SmiConsumptionLogQuantityTotalInput.vue","webpack:///./src/components/SmiConsumptionLogQuantityTotalInput.vue?4a9b","webpack:///./src/components/SmiConsumptionLogQuantityTotalInput.vue?034a","webpack:///./src/components/SmiConsumptionLogWeekProductRow.vue","webpack:///./src/components/SmiConsumptionLogWeekProductRow.vue?313b","webpack:///./src/components/SmiConsumptionLogWeekProductRow.vue?44bb","webpack:///./src/filters/weekday.ts","webpack:///./src/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct.ts","webpack:///./src/store/modules/smiConsumptionLogs.ts","webpack:///./src/components/SmiConsumptionLogWeek.vue","webpack:///./src/components/SmiConsumptionLogWeek.vue?524c","webpack:///./src/components/SmiConsumptionLogWeek.vue?cf6a","webpack:///./src/components/SmiConsumptionLogMonth.vue","webpack:///./src/components/SmiConsumptionLogMonth.vue?7948","webpack:///./src/components/SmiConsumptionLogMonth.vue?6281","webpack:///./src/components/SmiConsumptionLog.vue","webpack:///./src/components/SmiConsumptionLog.vue?424a","webpack:///./src/components/SmiConsumptionLog.vue?5a52","webpack:///./src/components/SmiHistoricalConsumptionLog.vue?183a","webpack:///./src/components/SmiHistoricalConsumptionLogMonth.vue?483a","webpack:///./src/components/SmiHistoricalConsumptionLogWeek.vue?8b74","webpack:///./src/components/SmiHistoricalConsumptionLogWeekProductRow.vue?d468","webpack:///./src/components/SmiHistoricalConsumptionLogWeekProductRow.vue","webpack:///./src/components/SmiHistoricalConsumptionLogWeekProductRow.vue?508c","webpack:///./src/components/SmiHistoricalConsumptionLogWeekProductRow.vue?53c8","webpack:///./src/components/SmiHistoricalConsumptionLogWeek.vue","webpack:///./src/components/SmiHistoricalConsumptionLogWeek.vue?829a","webpack:///./src/components/SmiHistoricalConsumptionLogWeek.vue?723c","webpack:///./src/components/SmiHistoricalConsumptionLogMonth.vue","webpack:///./src/components/SmiHistoricalConsumptionLogMonth.vue?1a6f","webpack:///./src/components/SmiHistoricalConsumptionLogMonth.vue?c043","webpack:///./src/components/SmiHistoricalConsumptionLog.vue","webpack:///./src/components/SmiHistoricalConsumptionLog.vue?5984","webpack:///./src/components/SmiHistoricalConsumptionLog.vue?1175","webpack:///./src/components/SmiConsumptionLogConfirmationModal.vue?c307","webpack:///./src/components/SmiConsumptionLogConfirmationModal.vue","webpack:///./src/components/SmiConsumptionLogConfirmationModal.vue?4627","webpack:///./src/components/SmiConsumptionLogConfirmationModal.vue?3de9","webpack:///./src/store/modules/smiHistoricalConsumptionLogs.ts","webpack:///./src/views/SmiConsumptionLogPage.vue","webpack:///./src/views/SmiConsumptionLogPage.vue?0207","webpack:///./src/views/SmiConsumptionLogPage.vue?d771","webpack:///./src/services/SmiConsumptionService.ts","webpack:///./src/components/SmiConsumptionLogQuantityTotalInput.vue?0c4d","webpack:///./src/store/modules/adminUsersSpecific.ts","webpack:///./src/views/SmiStockDeviationsPage.vue?461b","webpack:///./src/store/modules/smiWarehouseStockDeviations.ts","webpack:///./src/components/SmiWarehouseStockDeviationList.vue?e26d","webpack:///./src/components/SmiWarehouseStockDeviationList.vue","webpack:///./src/components/SmiWarehouseStockDeviationList.vue?5f31","webpack:///./src/components/SmiWarehouseStockDeviationList.vue?a7e2","webpack:///./src/views/SmiStockDeviationsPage.vue","webpack:///./src/views/SmiStockDeviationsPage.vue?ddb5","webpack:///./src/views/SmiStockDeviationsPage.vue?9802","webpack:///./src/components/SmiHistoricalConsumptionLogWeekProductRow.vue?9aab","webpack:///./src/components/SmiWarehouseTreeSelect.vue?bb82","webpack:///./src/components/SmiWarehouseTreeSelect.vue","webpack:///./src/components/SmiWarehouseTreeSelect.vue?3df9","webpack:///./src/components/SmiWarehouseTreeSelect.vue?799a","webpack:///./src/components/SmiConsumptionLogWeekProductRow.vue?7d54","webpack:///./src/views/SmiForecastsPage.vue?5ab1","webpack:///./src/store/modules/smiForecasts.ts","webpack:///./src/store/modules/smiHistoricForecasts.ts","webpack:///./src/views/SmiForecastsPage.vue","webpack:///./src/views/SmiForecastsPage.vue?72b4","webpack:///./src/views/SmiForecastsPage.vue?1361","webpack:///./src/components/SmiConsumptionLogConfirmationModal.vue?ec4c","webpack:///./src/components/SmiConsumptionLogQuantityInput.vue?5797","webpack:///./src/views/SmiForecastsPage.vue?098e","webpack:///./src/store/modules/smiWarehouses.ts","webpack:///./src/components/SmiHistoricalConsumptionLogWeek.vue?3262","webpack:///./src/services/AdminUsersService.ts","webpack:///./src/components/AdminUserEditorModal.vue?fe57","webpack:///./src/components/AdminUserPermissionsEditor.vue?63f1","webpack:///./src/components/AdminUserPermissionEditor.vue?0152","webpack:///./src/components/AdminUserPermissionEditor.vue","webpack:///./src/components/AdminUserPermissionEditor.vue?ffeb","webpack:///./src/components/AdminUserPermissionEditor.vue?af5a","webpack:///./src/components/AdminUserPermissionsEditor.vue","webpack:///./src/components/AdminUserPermissionsEditor.vue?915d","webpack:///./src/components/AdminUserPermissionsEditor.vue?cc5f","webpack:///./src/components/AdminUserCustomersEditor.vue?7932","webpack:///./src/components/AdminUserCustomersEditor.vue","webpack:///./src/components/AdminUserCustomersEditor.vue?66ea","webpack:///./src/components/AdminUserCustomersEditor.vue?9d4b","webpack:///./src/components/AdminUserEditorModal.vue","webpack:///./src/components/AdminUserEditorModal.vue?55df","webpack:///./src/components/AdminUserEditorModal.vue?0de1","webpack:///./src/store/modules/adminUsers.ts","webpack:///./src/components/SmiConsumptionLogWeek.vue?9a59","webpack:///./src/components/SmiConsumptionOverviewKPIs.vue?00ec","webpack:///./src/components/SmiWarehouseTreeSelect.vue?686e","webpack:///./src/views/SmiMyWarehousePage.vue?8c94","webpack:///./src/store/modules/smiMyWarehouse.ts","webpack:///./src/views/SmiMyWarehousePage.vue","webpack:///./src/views/SmiMyWarehousePage.vue?37aa","webpack:///./src/views/SmiMyWarehousePage.vue?38a7"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","breadcrumbs","staticClass","_v","_s","$t","selectedSmiWarehouseId","smiWarehouses","on","onSmiWarehouseSelect","allContractPeriods","length","selectedContractPeriodId","onSelectedContractPeriodInput","_e","allProducts","filteredProductNumber","onProductsFilterSelect","warehouses","performance","overviewByDatesDateRange","dateRangeShortcuts","minDate","maxDate","onOverviewByDatesDateRangeUpdate","smiConsumptionOverviewByDates","staticRenderFns","datesTitle","datesChartOptions","totalChartOptions","dayAndShortMonthAndYearFilter","value","format","dayAndShortMonthAndYear","filter","DataType","tooltipPointFormatter","currentPoint","isWeeklyNotDaily","dataTypeLocale","dataType","SalesAgreement","Forecast","Consumption","tooltipText","lastDayOfWeek","Dates","endOfWeek","dateValue","date","i18n","t","week","dateRange","anyFiltered","productValues","product","isFiltered","productValue","undefined","salesAgreementQuantity","forecastQuantity","consumptionQuantity","productDisplayName","number","y","title","text","yAxis","gridLineWidth","labels","style","fontSize","min","credits","enabled","time","useUTC","overviewByDates","productSummaries","p","productNumber","dateRangeShort","fromDate","toDate","toString","customOptions","chart","height","chartHeight","spacing","chartSpacing","zoomType","backgroundColor","xAxis","type","legend","plotOptions","spline","marker","lineColor","lineWidth","fillColor","radius","symbol","series","name","data","datesChartData","color","red","blue","limeGreen","tooltip","formatter","point","commonChartOptions","values","map","find","totalSalesAgreementQuantity","totalForecastQuantity","totalConsumptionQuantity","x","Date","getTime","categories","filteredProductSummaries","productSummary","minPointLength","some","pointFormatter","required","components","highcharts","component","class","consumptionVsForecastStatusColorClass","consumptionVsForecastDiffInPercent","consumptionVsSalesAgreementStatusColorClass","consumptionVsSalesAgreementDiffInPercent","getStatusColorClass","statusColor","Green","Yellow","Red","key","common","getDataFor","payload","setLoadingComplete","setLoadingError","setLoading","hasFreshDataFor","Promise","resolve","item","currentlyLoadingPromise","isCurrentlyLoading","Consoler","debugLog","loadingPromise","getConsumptionOverview","smiWarehouseId","contractPeriodId","then","response","commitSetLoadingComplete","id","payloadWithCorrectContractPeriodId","smiConsumptionOverview","catch","error","debugWarn","commitSetLoadingError","reject","commitSetLoading","clearData","namespaced","dynamic","store","smiConsumptionOverviewModule","getConsumptionOverviewByDates","smiConsumptionOverviewByDatesModule","responsibles","nonResponsibles","responsiblesWarehouses","concat","nonResponsiblesWarehouses","smiConsumptionOverviewResponse","hasNoCurrentOrPastContractPeriods","totalPerformance","performanceForProduct","performancePerProduct","warehouse","w","items","routeName","selectedWarehouse","push","routeQuery","customerName","startOfToday","endOfMonth","contractPeriodFromDate","contractPeriodToDate","shortcuts","range","startOfMonth","$moment","subtract","startOfWeek","shortcut","isSameOrBefore","isSameOrAfter","routeTrackingInfo","$route","initialize","hasFinished","stopTrackPage","warehouseIdByQuery","query","warehouseId","Number","isNaN","invalidSelectedSmiWarehouse","loadWarehouses","loadOverview","userProfile","selectedCustomer","customerId","updateQuery","generateQuery","$router","replace","params","loadOverviewByDates","isLoading","errorLoading","dispatchLoad","finally","setInitialDateRange","immediate","deep","DefaultLayout","Breadcrumbs","Messages","ContractPeriodsSelect","ProductsTreeSelect","CustomDateRangePicker","SmiWarehouseTreeSelect","SmiConsumptionOverviewByDatesCharts","SmiConsumptionOverviewKPIs","endOfCurrentWeek","maxRangeLengthInWeeks","onDateRangeUpdate","isDateRangeTheDefault","onClearFilters","smiConsumptionLogsSearch","logMonths","logProducts","from","to","filteredProductNumbers","isSaving","isAllowedToEdit","errorSaving","onSaveConsumptionByDays","onSaveConsumptionByWeek","onResetLog","activeHistoricalLength","HistoricalLength","TwoYears","$event","loadHistoricalConsumptions","getFullYear","OneYear","SixMonths","setMonth","getMonth","ThreeMonths","showHistory","isLoadingHistory","historicalLogMonths","ref","consumptionByDays","consumptionByWeek","productCurrentStockQuantity","reportByWeek","loadConsumptions","byWeeksChartOptions","weekRangeFilter","weekRange","Object","flatMap","logMonth","logWeeks","reduce","logWeek","logWeekKey","weekNumber","logWeekProducts","existingProducts","existingProduct","quantity","startOfWeekYear","products","productKey","isoWeek","verticalAlign","summaryProduct","displayName","pointWithDates","Config","getProductColor","colorCategory","startDate","isCurrentWeek","headerFormat","colorByPoint","scopedSlots","_u","fn","invalid","handleSubmit","preventDefault","hasBeenSubmitted","onSubmit","isEditing","isAdding","_l","monthIndex","onReset","_f","year","month","weekIndex","logWeeksLatestFirst","onEditLogWeekProduct","onCancelEditLogWeekProduct","onAddLogWeekProduct","dateOfWeek","dateIndex","isEditingOrAddingDailiesOnThisLogWeek","isDateToday","weekdayFilter","logWeekProduct","productIndex","isProductFiltered","isEditingOrAdding","availableProducts","isWeekSplittedBetweenMonths","isEditingOrAddingOnThisLogWeek","isLastWeek","isEditingOrAddingOnThisRow","addNotEdit","directives","rawName","expression","addingProductNumber","onAddProductFilterSelect","weekGrouping","onSwitchToWeeklyEditing","onSwitchToDailyEditing","totalValue","onTotalQuantityInput","anyValidChange","onSwitchToWeekly","newTotalConsumptionQuantity","days","onDayQuantityChange","onSwitchToDaily","isEditingOrAddingDailiesOnLogWeek","changedQuantity","onCancelEditClick","canEdit","onEditClick","validationId","validationRules","failed","day","modifiers","changedSuccessfully","locked","showOriginalQuantityTitle","changed","isDateInFuture","isOpen","disabled","domProps","target","blur","select","onChange","composing","$set","_n","onInput","$forceUpdate","newQuantity","isBefore","event","indexOf","replaceAll","$emit","default","changedWithOkNumber","originalValue","$refs","theInput","focus","editLogWeekProduct","openAllDates","openSpecificDates","addingProduct","changedWeekGrouping","productDay","isValidNumberInput","sum","datesOfWeek","isSame","resetEditingProduct","dayIndex","consumptions","openDate","allDatesWithinSameMonth","$nextTick","totalInput","availableProduct","initializeAddingProduct","focusOnWeekTotal","clearAddingProduct","daysInLogWeek","startOf","diff","totalPerDay","Math","floor","remainder","d","i","getTotalConsumptionQuantityByDays","val","SmiConsumptionLogQuantityInput","SmiConsumptionLogQuantityTotalInput","weekday","resetSmiConsumptionLogWeekProductQuantities","loading","search","setLoadedDate","clearLoadedDate","clearLoading","setLoadingPromise","loadingId","toISOString","force","loadingPromiseForId","needToReLoad","commitClearSearch","getConsumptionsByDates","commitSetSearch","commitSetLoadedDate","commitClearLoading","commitSetLoadingPromise","reportConsumptionsByDays","reportConsumptionsByWeek","rawError","smiConsumptionLogsModule","logProduct","isToday","consumptionLogWeekProduct","SmiConsumptionLogWeekProductRow","slice","reverse","resetAllProductsEditing","SmiConsumptionLogWeek","changedItem","getChangedLogWeekAndProduct","oldTotalConsumptionQuantity","removeExisting","reportDays","consumptionDate","oldQuantity","updateExisting","SmiConsumptionLogMonth","SmiHistoricalConsumptionLogWeekProductRow","SmiHistoricalConsumptionLogWeek","SmiHistoricalConsumptionLogMonth","weekText","numberFilter","totalQuantityChange","dayAndShortMonthFilter","getQuantityChange","updatedOriginalStock","reportStockQuantity","onReportStockQuantityInput","stockLevelDeviationText","onResetReportStockQuantityClick","proxy","errorConflictDetails","availableQuantity","onClose","apply","arguments","stockLevelIsInvalid","dayAndShortMonth","dateWithTime","stockLevelReportIsInvalid","stockLevelReportRequired","stockLevelReportChangedSuccessfully","deviation","getWeekText","quantityChange","modal","showModal","resetReportStockQuantity","originalQuantity","reportedQuantity","reportStockDeviation","createStockDeviationReport","saveConsumptions","dispatchReportByWeek","filteredConsumptionDays","dispatchReportByDays","dispatchMethod","hideModal","status","conflictErrorDetails","Modal","SmiConsumptionLogStockQuantityInput","smiHistoricalConsumptionLogsModule","NoHistory","Permissions","hasPermission","PermissionType","IsAllowedToEditSmiConsumptions","smiHistoricalConsumptionLogsSearch","defaultDateRange","currentStockQuantity","smiConsumptionLogConfirmationModal","show","SmiConsumptionLogCharts","SmiConsumptionLog","SmiConsumptionLogConfirmationModal","SmiHistoricalConsumptionLog","SmiConsumptionService","get","toDateString","smiContractPeriodId","post","smiConsumptionService","AdminUsersSpecificModule","axId","results","u","findUser","adminUsersSpecificModule","deviationProducts","anyFilter","smiWarehouseStockDeviations","filteredStockDeviations","getStockDeviations","smiStockDeviations","smiWarehouseStockDeviationsModule","stockDeviations","columns","rows","property","fixedOnMobile","isSortable","properties","reportDate","getQuantityText","getDeviationText","reportedBy","reportedByUser","AdminUserEditorModal","Table","s","includes","Map","loadStockDeviations","SmiWarehouseStockDeviationList","options","placeholder","clearable","onSelect","nodes","label","children","isDefaultExpanded","TreeSelect","productsCurrentAndFutureContractPeriod","currentForecastUpcomingWeeks","currentForecastsData","onChangeContractPeriodId","currentForecastMonthsForContractPeriods","hasFilteredOnNonCurrentProductsOnly","onSaveForecasts","onResetForecastListErrors","loadHistoricForecasts","closeHistory","historicForecastMonthsForContractPeriods","period","forecastMonths","forecastMonth","isExpanded","weeks","forecastWeek","isInFocus","forecasts","forecast","contractPeriod","contractPeriodProduct","contractPeriodProducts","contractPeriodProductId","getCurrentSmiForecasts","currentSmiForecasts","updateSmiForecasts","updates","smiForecastsModule","getHistoricSmiForecasts","historicSmiForecasts","smiHistoricForecastsModule","IsAllowedToEditSmiForecasts","currentProducts","historicForecastsData","currentAndFutureContractPeriods","c","forEach","currentProduct","upcomingWeeksSummary","currentContractPeriod","isCurrent","productNumbers","split","trim","loadForecasts","defaultContractPeriodId","reloadForecastChartsData","join","dispatchSave","forecastCharts","reloadData","saveForecasts","ForecastList","HistoricForecastList","ForecastCharts","SmiWarehousesModule","commitClearSmiWarehouses","getWarehouses","commitSetSmiWarehouses","smiWarehousesModule","AdminUsersService","sortBy","sortAsc","pageIndex","pageSize","term","customerIds","permission","noPermissions","businessContact","all","azureAdId","put","permissionIds","downloadFile","userAxIds","adminUsersService","user","contactId","email","businessContactsText","errorLastSignIn","lastSignIn","parentPermissions","onPermissionIdsChange","onCustomerIdsChange","canUpdate","loadingUser","hasChanges","updating","index","onPermissionChange","canBeUsed","isPermissionChecked","childPermissions","validate","authRequirements","valid","permissions","isForSmiCustomersOnly","toggle","findIndex","splice","togglePermission","AdminUserPermissionEditor","onCustomersChange","userCustomers","CompanyChainCustomersTreeSelect","adminUsersSpecific","hasRole","Roles","IsAdminUser","hasPermissionChanges","hasCustomerChanges","Helpers","areEqual","customers","businessContacts","responsibleUser","responsibilities","loadSpecificUser","errorLoadingUser","loadingLastSignIn","adminUsers","dispatchGetUserLastSignIn","errorUpdating","dispatchUpdateUserPermissions","dispatchUpdateUserCustomers","AdminUserPermissionsEditor","AdminUserCustomersEditor","AdminUsersModule","userIndex","sort","commitClearUsers","findUsers","commitSetUsers","updateUserCustomers","commitSetUser","updateUserPermissions","users","getUserLastSignIn","commitSetUserLastSignIn","adminUsersModule","orderFlowRoute","stopPropagation","navigate","contactRoute","filteredProducts","productDetails","openStockReportModal","stockDetailsForModal","stockDetails","modifiedMaxQuantity","maxQuantity","modifiedMinQuantity","minQuantity","getWarehouse","commitSetSmiWarehouse","updateStockLevel","smiMyWarehouseModule","IsAllowedToEditSmiWarehouse","updateStockLevelForWarehouse","loadMyWarehouse","dispatchUpdateStockLevel","smiWarehouseStockReportModal","SmiWarehousePerformanceCharts","SmiWarehouseProductsDetails","SmiWarehouseDeliveries","SmiWarehouseStockReportModal"],"mappings":"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","file":"js/smi.8de14fce.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DefaultLayout',[_c('Breadcrumbs',{attrs:{\"items\":_vm.breadcrumbs}}),_c('Messages'),_c('div',{staticClass:\"container-fluid mt-3\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyConsumptionsPage.title'))+\" \")]),_c('div',{staticClass:\"d-align-self-end\"},[_c('SmiWarehouseTreeSelect',{attrs:{\"value\":_vm.selectedSmiWarehouseId,\"smiWarehouses\":_vm.smiWarehouses,\"placeholder\":_vm.$t('smiMyConsumptionsPage.warehouses.placeholder'),\"clearable\":false},on:{\"select\":_vm.onSmiWarehouseSelect}})],1)]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex align-items-center flex-wrap mb-4\"},[(_vm.allContractPeriods.length > 0)?_c('ContractPeriodsSelect',{staticClass:\"u-xs-full-width pl-3\",attrs:{\"contractPeriods\":_vm.allContractPeriods,\"value\":_vm.selectedContractPeriodId},on:{\"input\":_vm.onSelectedContractPeriodInput}}):_vm._e(),(_vm.allProducts.length)?_c('ProductsTreeSelect',{staticClass:\"products-tree-select ml-0 ml-sm-3 mt-1 mt-sm-0\",attrs:{\"value\":_vm.filteredProductNumber,\"products\":_vm.allProducts,\"placeholder\":_vm.$t('smiMyConsumptionsPage.products.placeholder'),\"clearable\":false,\"multiple\":false,\"placeholderAsEmptyOption\":true},on:{\"select\":_vm.onProductsFilterSelect}}):_vm._e()],1),_c('div',{staticClass:\"u-position-relative\"},[(_vm.isLoading)?_c('span',{staticClass:\"o-loader o-loader--absolute mt-6\"}):(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiMyConsumptionsPage.error')))])]):(_vm.hasNoCurrentOrPastContractPeriods)?_c('div',{staticClass:\"c-alert c-alert--yellow mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiMyConsumptionsPage.noPastOrCurrentContractPeriods')))])]):(_vm.invalidSelectedSmiWarehouse)?_c('div',[(_vm.warehouses.length > 0)?[_vm._v(\" \"+_vm._s(_vm.$t('smiMyConsumptionsPage.noWarehouses.hasWarehouses'))+\" \")]:[_vm._v(\" \"+_vm._s(_vm.$t('smiMyConsumptionsPage.noWarehouses.hasNoWarehouses'))+\" \")]],2):(_vm.smiConsumptionOverview)?_c('div',{staticClass:\"mt-2\"},[(_vm.performance)?_c('div',[_c('SmiConsumptionOverviewKPIs',{staticClass:\"u-full-height\",attrs:{\"performance\":_vm.performance}}),_c('div',{staticClass:\"mt-4\"},[_c('div',{staticClass:\"d-flex align-items-center flex-wrap\"},[(_vm.overviewByDatesDateRange)?_c('CustomDateRangePicker',{staticClass:\"u-xs-full-width\",attrs:{\"dateRange\":_vm.overviewByDatesDateRange,\"shortcuts\":_vm.dateRangeShortcuts,\"minDate\":_vm.minDate,\"maxDate\":_vm.maxDate},on:{\"update\":_vm.onOverviewByDatesDateRangeUpdate}}):_vm._e()],1),(_vm.smiConsumptionOverviewByDates)?_c('div',{staticClass:\"u-background-color-white mt-3\"},[_c('SmiConsumptionOverviewByDatesCharts',{attrs:{\"overviewByDates\":_vm.smiConsumptionOverviewByDates,\"filteredProductNumber\":_vm.filteredProductNumber}})],1):_vm._e()])],1):_c('div',[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiMyConsumptionsPage.noData.\" + (_vm.filteredProductNumber === null ? 'total' : 'product')) ))+\" \")])]):_vm._e()])])],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:\"row\"},[_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"p-4\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase mb-2\"},[_vm._v(\" \"+_vm._s(_vm.datesTitle)+\" \")]),_c('highcharts',{attrs:{\"options\":_vm.datesChartOptions}})],1)]),_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"p-4\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase mb-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionOverviewByDatesCharts.total.title'))+\" \")]),_c('highcharts',{attrs:{\"options\":_vm.totalChartOptions}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import moment from 'moment';\r\nimport Vue from 'vue';\r\nimport { DateFormats } from '@/utils/Constants';\r\n\r\nVue.filter('dayAndShortMonthAndYear', (value: string) =>\r\n dayAndShortMonthAndYearFilter(value)\r\n);\r\n\r\nexport function dayAndShortMonthAndYearFilter(value: string): string {\r\n return moment(value).format(DateFormats.dayAndShortMonthAndYear);\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Chart } from 'highcharts-vue';\r\nimport { Options, Point, PointOptionsObject } from 'highcharts';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { SmiConsumptionOverviewByDates } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDates';\r\nimport { Colors } from '@/utils/Constants';\r\nimport { dateRangeShortFilter } from '@/filters/dateRangeShort';\r\nimport { SmiConsumptionOverviewByDatesValue } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDatesValue';\r\nimport i18n from '@/i18n/i18n';\r\nimport { weekFilter } from '@/filters/week';\r\nimport { dayAndShortMonthAndYearFilter } from '@/filters/dayAndShortMonthAndYear';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { SmiConsumptionOverviewByDatesProductSummary } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDatesProductSummary';\r\n\r\nenum DataType {\r\n SalesAgreement,\r\n Forecast,\r\n Consumption,\r\n}\r\ninterface PointWithValueOptions extends PointOptionsObject {\r\n dataType: DataType;\r\n dateValue: SmiConsumptionOverviewByDatesValue;\r\n}\r\ninterface PointWithValue extends Point {\r\n dataType: DataType;\r\n dateValue: SmiConsumptionOverviewByDatesValue;\r\n}\r\n\r\nfunction tooltipPointFormatter(\r\n currentPoint: PointWithValue,\r\n isWeeklyNotDaily: boolean\r\n): string {\r\n let dataTypeLocale = '';\r\n if (currentPoint.dataType === DataType.SalesAgreement) {\r\n dataTypeLocale = 'salesAgreement';\r\n } else if (currentPoint.dataType === DataType.Forecast) {\r\n dataTypeLocale = 'forecast';\r\n } else if (currentPoint.dataType === DataType.Consumption) {\r\n dataTypeLocale = 'consumption';\r\n }\r\n\r\n let tooltipText = '';\r\n\r\n if (isWeeklyNotDaily) {\r\n const lastDayOfWeek = Dates.endOfWeek(currentPoint.dateValue.date);\r\n tooltipText = `
${i18n.t(\r\n `smiConsumptionOverviewByDatesCharts.weekAndDate`,\r\n [\r\n weekFilter(currentPoint.dateValue.date),\r\n dateRangeFilter(currentPoint.dateValue.date, lastDayOfWeek, true),\r\n ]\r\n )}
`;\r\n } else {\r\n tooltipText = `
${dayAndShortMonthAndYearFilter(\r\n currentPoint.dateValue.date\r\n )}
`;\r\n }\r\n\r\n tooltipText += `
${i18n.t(\r\n `smiConsumptionOverviewByDatesCharts.dates.${dataTypeLocale}`\r\n )}
`;\r\n\r\n let anyFiltered = false;\r\n for (const product of currentPoint.dateValue.productValues) {\r\n if (product.isFiltered !== false) {\r\n let productValue: number | undefined = undefined;\r\n if (currentPoint.dataType === DataType.SalesAgreement) {\r\n productValue = product.salesAgreementQuantity;\r\n } else if (currentPoint.dataType === DataType.Forecast) {\r\n productValue = product.forecastQuantity;\r\n } else if (currentPoint.dataType === DataType.Consumption) {\r\n productValue = product.consumptionQuantity;\r\n }\r\n tooltipText += `${product.productDisplayName}: ${numberFilter(\r\n productValue\r\n )} t
`;\r\n } else {\r\n anyFiltered = true;\r\n }\r\n }\r\n\r\n if (!anyFiltered) {\r\n tooltipText += `
\r\n ${i18n.t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.total'\r\n )}: ${numberFilter(currentPoint.y)} t`;\r\n }\r\n\r\n return tooltipText;\r\n}\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n },\r\n})\r\nexport default class SmiConsumptionOverviewByDatesCharts extends Vue {\r\n @Prop({ required: true })\r\n public overviewByDates!: SmiConsumptionOverviewByDates;\r\n @Prop({ required: true })\r\n public filteredProductNumber!: string | null;\r\n\r\n private readonly chartHeight = 320;\r\n private readonly chartSpacing = [15, 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 filteredProductSummaries(): SmiConsumptionOverviewByDatesProductSummary[] {\r\n return this.overviewByDates.productSummaries.filter(\r\n (p) =>\r\n this.filteredProductNumber === null ||\r\n p.productNumber === this.filteredProductNumber\r\n );\r\n }\r\n\r\n private get datesTitle(): string {\r\n return this.$t('smiConsumptionOverviewByDatesCharts.dates.title', [\r\n dateRangeShortFilter(\r\n this.overviewByDates.fromDate,\r\n this.overviewByDates.toDate\r\n ),\r\n ]).toString();\r\n }\r\n\r\n private get datesChartOptions(): Options {\r\n const isWeeklyNotDaily = this.overviewByDates.isWeeklyNotDaily;\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 },\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: [\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.salesAgreement'\r\n ).toString(),\r\n data: this.datesChartData(DataType.SalesAgreement),\r\n color: Colors.red,\r\n type: 'spline',\r\n },\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.forecast'\r\n ).toString(),\r\n data: this.datesChartData(DataType.Forecast),\r\n color: Colors.blue,\r\n type: 'spline',\r\n },\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.consumption'\r\n ).toString(),\r\n data: this.datesChartData(DataType.Consumption),\r\n color: Colors.limeGreen,\r\n type: 'spline',\r\n },\r\n ],\r\n tooltip: {\r\n formatter: function () {\r\n return tooltipPointFormatter(\r\n this.point as PointWithValue,\r\n isWeeklyNotDaily\r\n );\r\n },\r\n },\r\n };\r\n\r\n return { ...this.commonChartOptions, ...customOptions };\r\n }\r\n\r\n private datesChartData(dataType: DataType): PointWithValueOptions[] {\r\n return this.overviewByDates.values.map((dateValue) => {\r\n for (const productValue of dateValue.productValues) {\r\n productValue.isFiltered =\r\n this.filteredProductNumber !== null\r\n ? this.filteredProductNumber === productValue.productNumber\r\n : undefined;\r\n }\r\n\r\n let y: number | undefined = undefined;\r\n if (dataType == DataType.SalesAgreement) {\r\n y =\r\n this.filteredProductNumber !== null\r\n ? dateValue.productValues.find(\r\n (p) => p.productNumber === this.filteredProductNumber\r\n )?.salesAgreementQuantity\r\n : dateValue.totalSalesAgreementQuantity;\r\n } else if (dataType == DataType.Forecast) {\r\n y =\r\n this.filteredProductNumber !== null\r\n ? dateValue.productValues.find(\r\n (p) => p.productNumber === this.filteredProductNumber\r\n )?.forecastQuantity\r\n : dateValue.totalForecastQuantity;\r\n } else if (dataType == DataType.Consumption) {\r\n y =\r\n this.filteredProductNumber !== null\r\n ? dateValue.productValues.find(\r\n (p) => p.productNumber === this.filteredProductNumber\r\n )?.consumptionQuantity\r\n : dateValue.totalConsumptionQuantity;\r\n }\r\n\r\n return {\r\n x: new Date(dateValue.date).getTime(),\r\n y,\r\n dataType,\r\n dateValue,\r\n };\r\n });\r\n }\r\n\r\n private get totalChartOptions(): Options {\r\n const customOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: this.chartSpacing,\r\n backgroundColor: 'transparent',\r\n },\r\n xAxis: {\r\n categories: this.filteredProductSummaries.map(\r\n (productSummary) => productSummary.productDisplayName\r\n ),\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 },\r\n series: [\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.salesAgreement'\r\n ).toString(),\r\n data: this.filteredProductSummaries.map(\r\n (productSummary) => productSummary.totalSalesAgreementQuantity\r\n ),\r\n color: Colors.red,\r\n type: 'column',\r\n },\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.forecast'\r\n ).toString(),\r\n data: this.filteredProductSummaries.map(\r\n (productSummary) => productSummary.totalForecastQuantity\r\n ),\r\n color: Colors.blue,\r\n type: 'column',\r\n },\r\n {\r\n name: this.$t(\r\n 'smiConsumptionOverviewByDatesCharts.dates.consumption'\r\n ).toString(),\r\n data: this.filteredProductSummaries.map((productSummary) =>\r\n productSummary.totalConsumptionQuantity === 0\r\n ? null\r\n : productSummary.totalConsumptionQuantity ?? null\r\n ),\r\n color: Colors.limeGreen,\r\n type: 'column',\r\n minPointLength: this.filteredProductSummaries.some(\r\n (productSummary) =>\r\n productSummary.totalConsumptionQuantity !== undefined &&\r\n productSummary.totalConsumptionQuantity > 0\r\n )\r\n ? 3\r\n : undefined,\r\n },\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!./SmiConsumptionOverviewByDatesCharts.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!./SmiConsumptionOverviewByDatesCharts.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionOverviewByDatesCharts.vue?vue&type=template&id=5d1f0ce2&\"\nimport script from \"./SmiConsumptionOverviewByDatesCharts.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionOverviewByDatesCharts.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',{staticClass:\"row u-text-center\"},[_c('div',{staticClass:\"performance-box col-12 col-md-4\"},[_c('div',{staticClass:\"box grey-box-shadow\"},[_c('span',{staticClass:\"t-heading-1 mb-2\"},[_vm._v(\" \"+_vm._s(_vm.performance.totalConsumptionQuantity)+\" t \")]),_c('span',{staticClass:\"t-heading-3\"},[_vm._v(_vm._s(_vm.$t('smiMyConsumptionsPage.performance.totalConsumptionQuantity.title')))])])]),_c('div',{staticClass:\"performance-box col-12 col-md-4\"},[_c('div',{staticClass:\"box grey-box-shadow\"},[_c('span',{staticClass:\"t-heading-1 mb-2\",class:_vm.consumptionVsForecastStatusColorClass},[(_vm.performance.consumptionVsForecastDiffInPercent)?[_vm._v(\" \"+_vm._s(_vm.performance.consumptionVsForecastDiffInPercent)+\"% \")]:[_vm._v(\"-\")]],2),_c('span',{staticClass:\"t-heading-3 mb-0\"},[_vm._v(_vm._s(_vm.$t( 'smiMyConsumptionsPage.performance.consumptionVsForecastDiffInPercent.title' )))])])]),_c('div',{staticClass:\"performance-box col-12 col-md-4\"},[_c('div',{staticClass:\"box grey-box-shadow\"},[_c('span',{staticClass:\"t-heading-1 mb-2\",class:_vm.consumptionVsSalesAgreementStatusColorClass},[(_vm.performance.consumptionVsSalesAgreementDiffInPercent)?[_vm._v(\" \"+_vm._s(_vm.performance.consumptionVsSalesAgreementDiffInPercent)+\"% \")]:[_vm._v(\"-\")]],2),_c('span',{staticClass:\"t-heading-3\"},[_vm._v(_vm._s(_vm.$t( 'smiMyConsumptionsPage.performance.consumptionVsSalesAgreementDiffInPercent.title' )))])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Chart } from 'highcharts-vue';\r\nimport { SmiPerformance } from '@/models/Smi/SmiPerformance';\r\nimport {\r\n getSmiDiffInPercentStatusColors,\r\n SmiDiffInPercentStatusColors,\r\n} from '@/utils/SmiHelpers';\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n },\r\n})\r\nexport default class SmiConsumptionOverviewKPIs extends Vue {\r\n @Prop({ required: true })\r\n public performance!: SmiPerformance;\r\n\r\n private get consumptionVsForecastStatusColorClass(): string {\r\n if (this.performance === null) {\r\n return '';\r\n }\r\n return this.getStatusColorClass(\r\n getSmiDiffInPercentStatusColors(\r\n this.performance.consumptionVsForecastDiffInPercent\r\n )\r\n );\r\n }\r\n private get consumptionVsSalesAgreementStatusColorClass(): string {\r\n if (this.performance === null) {\r\n return '';\r\n }\r\n return this.getStatusColorClass(\r\n getSmiDiffInPercentStatusColors(\r\n this.performance.consumptionVsSalesAgreementDiffInPercent\r\n )\r\n );\r\n }\r\n\r\n private getStatusColorClass(statusColor?: SmiDiffInPercentStatusColors) {\r\n if (statusColor === SmiDiffInPercentStatusColors.Green) {\r\n return 'status-color-green';\r\n } else if (statusColor === SmiDiffInPercentStatusColors.Yellow) {\r\n return 'status-color-yellow';\r\n } else if (statusColor === SmiDiffInPercentStatusColors.Red) {\r\n return 'status-color-red';\r\n }\r\n return '';\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!./SmiConsumptionOverviewKPIs.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!./SmiConsumptionOverviewKPIs.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionOverviewKPIs.vue?vue&type=template&id=c899a1f4&scoped=true&\"\nimport script from \"./SmiConsumptionOverviewKPIs.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionOverviewKPIs.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionOverviewKPIs.vue?vue&type=style&index=0&id=c899a1f4&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 \"c899a1f4\",\n null\n \n)\n\nexport default component.exports","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport smiConsumptionService from '@/services/SmiConsumptionService';\r\nimport { SmiConsumptionOverviewResponse } from '@/models/Smi/Consumptions/SmiConsumptionOverviewResponse';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiConsumptionOverview',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiConsumptionOverviewModule extends VuexModule {\r\n private common = new CommonArrayStore<\r\n SmiConsumptionOverviewResponse,\r\n { smiWarehouseId: number; contractPeriodId?: number }\r\n >(20, ['smiWarehouseId', 'contractPeriodId']); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (key: { smiWarehouseId: number; contractPeriodId?: number }) =>\r\n this.common.getDataFor(key);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: { smiWarehouseId: number; contractPeriodId?: number };\r\n data: SmiConsumptionOverviewResponse;\r\n }) {\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: { smiWarehouseId: number; contractPeriodId?: number };\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: { smiWarehouseId: number; contractPeriodId?: number };\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n smiWarehouseId: number;\r\n contractPeriodId?: number;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(payload)) {\r\n return Promise.resolve(this.item(payload)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(payload);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiForecastContractPeriodSummary'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiConsumptionService\r\n .getConsumptionOverview(payload.smiWarehouseId, payload.contractPeriodId)\r\n .then((response) => {\r\n if (payload.contractPeriodId === undefined) {\r\n // Save with undefined id as well (if requesting without contractPeriodId again)\r\n this.commitSetLoadingComplete({\r\n id: payload,\r\n data: response,\r\n });\r\n }\r\n const payloadWithCorrectContractPeriodId = {\r\n smiWarehouseId: payload.smiWarehouseId,\r\n contractPeriodId: response.smiConsumptionOverview?.contractPeriodId,\r\n };\r\n this.commitSetLoadingComplete({\r\n id: payloadWithCorrectContractPeriodId,\r\n data: response,\r\n });\r\n\r\n Consoler.debugLog('Load smiConsumptionOverview success', response);\r\n return Promise.resolve(response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiConsumptionOverview failed', error);\r\n this.commitSetLoadingError({\r\n id: payload,\r\n error,\r\n });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiConsumptionOverviewModule = getModule(\r\n SmiConsumptionOverviewModule\r\n);\r\n","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport { SmiConsumptionOverviewByDates } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDates';\r\nimport smiConsumptionService from '@/services/SmiConsumptionService';\r\n\r\ninterface SmiConsumptionOverviewByDatesKey {\r\n smiWarehouseId: number;\r\n contractPeriodId: number;\r\n fromDate: Date;\r\n toDate: Date;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiConsumptionOverviewByDates',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiConsumptionOverviewByDatesModule extends VuexModule {\r\n private common = new CommonArrayStore<\r\n SmiConsumptionOverviewByDates,\r\n SmiConsumptionOverviewByDatesKey\r\n >(20, ['smiWarehouseId', 'contractPeriodId', 'fromDate', 'toDate']); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (key: SmiConsumptionOverviewByDatesKey) =>\r\n this.common.getDataFor(key);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: SmiConsumptionOverviewByDatesKey;\r\n data: SmiConsumptionOverviewByDates;\r\n }) {\r\n for (const value of payload.data.values) {\r\n for (const productValue of value.productValues) {\r\n productValue.productDisplayName =\r\n payload.data.productSummaries.find(\r\n (p) => p.productNumber === productValue.productNumber\r\n )?.productDisplayName ?? productValue.productNumber;\r\n }\r\n }\r\n\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: SmiConsumptionOverviewByDatesKey;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: SmiConsumptionOverviewByDatesKey;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n smiWarehouseId: number;\r\n contractPeriodId: number;\r\n fromDate: Date;\r\n toDate: Date;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(payload)) {\r\n return Promise.resolve(this.item(payload)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(payload);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiForecastContractPeriodSummary'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiConsumptionService\r\n .getConsumptionOverviewByDates(\r\n payload.smiWarehouseId,\r\n payload.contractPeriodId,\r\n payload.fromDate,\r\n payload.toDate\r\n )\r\n .then((smiConsumptionOverviewByDates) => {\r\n this.commitSetLoadingComplete({\r\n id: payload,\r\n data: smiConsumptionOverviewByDates,\r\n });\r\n\r\n Consoler.debugLog(\r\n 'Load smiConsumptionOverviewByDates success',\r\n smiConsumptionOverviewByDates\r\n );\r\n return Promise.resolve(smiConsumptionOverviewByDates);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiConsumptionOverviewByDates failed', error);\r\n this.commitSetLoadingError({\r\n id: payload,\r\n error,\r\n });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiConsumptionOverviewByDatesModule = getModule(\r\n SmiConsumptionOverviewByDatesModule\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\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 Messages from '@/components/general/Messages.vue';\r\nimport Breadcrumbs from '@/components/general/Breadcrumbs.vue';\r\nimport ContractPeriodsSelect from '@/components/ContractPeriodsSelect.vue';\r\nimport CustomDateRangePicker from '@/components/general/CustomDateRangePicker.vue';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport SmiWarehouseTreeSelect from '@/components/SmiWarehouseTreeSelect.vue';\r\nimport SmiConsumptionOverviewByDatesCharts from '@/components/SmiConsumptionOverviewByDatesCharts.vue';\r\nimport SmiConsumptionOverviewKPIs from '@/components/SmiConsumptionOverviewKPIs.vue';\r\nimport { smiConsumptionOverviewModule } from '@/store/modules/smiConsumptionOverview';\r\nimport { smiWarehousesModule } from '@/store/modules/smiWarehouses';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { routeNameSmiMyConsumptions, routeNameSmiRoot } from '@/router/routes';\r\nimport { DateRange } from '@/models/DateRange';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { DateRangeShortcut } from '@/models/DateRangeShortcut';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\nimport { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport { SmiConsumptionOverview } from '@/models/Smi/Consumptions/SmiConsumptionOverview';\r\nimport { ContractPeriod } from '@/models/ContractPeriod';\r\nimport { Product } from '@/models/Product';\r\nimport { SmiPerformance } from '@/models/Smi/SmiPerformance';\r\nimport { SmiConsumptionOverviewByDates } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDates';\r\nimport { smiConsumptionOverviewByDatesModule } from '@/store/modules/smiConsumptionOverviewByDates';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { SmiConsumptionOverviewResponse } from '@/models/Smi/Consumptions/SmiConsumptionOverviewResponse';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n ContractPeriodsSelect,\r\n ProductsTreeSelect,\r\n CustomDateRangePicker,\r\n SmiWarehouseTreeSelect,\r\n SmiConsumptionOverviewByDatesCharts,\r\n SmiConsumptionOverviewKPIs,\r\n },\r\n})\r\nexport default class SmiMyConsumptionsPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n private invalidSelectedSmiWarehouse: boolean = false;\r\n private overviewByDatesDateRange: DateRange | null = null;\r\n private selectedSmiWarehouseId: number | null = null;\r\n private selectedContractPeriodId: number | null = null;\r\n private filteredProductNumber: string | null = null;\r\n\r\n private get smiWarehouses(): SmiWarehouses | null {\r\n return smiWarehousesModule.data;\r\n }\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get smiConsumptionOverviewResponse(): SmiConsumptionOverviewResponse | null {\r\n return this.selectedSmiWarehouseId !== null\r\n ? smiConsumptionOverviewModule.item({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId ?? undefined,\r\n })\r\n : null;\r\n }\r\n\r\n private get hasNoCurrentOrPastContractPeriods(): boolean | undefined {\r\n return this.smiConsumptionOverviewResponse\r\n ?.hasNoCurrentOrPastContractPeriods;\r\n }\r\n\r\n private get smiConsumptionOverview(): SmiConsumptionOverview | null {\r\n return this.smiConsumptionOverviewResponse !== null &&\r\n this.smiConsumptionOverviewResponse.smiConsumptionOverview\r\n ? this.smiConsumptionOverviewResponse.smiConsumptionOverview\r\n : null;\r\n }\r\n private get allContractPeriods(): ContractPeriod[] {\r\n return this.smiConsumptionOverview\r\n ? this.smiConsumptionOverview.allContractPeriods\r\n : [];\r\n }\r\n private get allProducts(): Product[] {\r\n return this.smiConsumptionOverview\r\n ? this.smiConsumptionOverview.allProducts\r\n : [];\r\n }\r\n private get performance(): SmiPerformance | null {\r\n if (this.filteredProductNumber === null) {\r\n return this.smiConsumptionOverview?.totalPerformance ?? null;\r\n }\r\n const performanceForProduct =\r\n this.smiConsumptionOverview?.performancePerProduct.find(\r\n (p) => p.productNumber === this.filteredProductNumber\r\n );\r\n return performanceForProduct?.performance ?? null;\r\n }\r\n\r\n private get smiConsumptionOverviewByDates(): SmiConsumptionOverviewByDates | null {\r\n return this.selectedSmiWarehouseId !== null &&\r\n this.selectedContractPeriodId !== null &&\r\n this.overviewByDatesDateRange !== null\r\n ? smiConsumptionOverviewByDatesModule.item({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n fromDate: this.overviewByDatesDateRange.fromDate,\r\n toDate: this.overviewByDatesDateRange.toDate,\r\n })\r\n : null;\r\n }\r\n\r\n private get selectedWarehouse(): SmiWarehouse | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n const warehouse = this.warehouses.find(\r\n (w) => w.id === this.selectedSmiWarehouseId\r\n );\r\n return warehouse ?? null;\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSmiRoot,\r\n name: this.$t('breadcrumbs.' + routeNameSmiRoot).toString(),\r\n },\r\n {\r\n routeName: routeNameSmiMyConsumptions,\r\n name: this.$t('breadcrumbs.' + routeNameSmiMyConsumptions).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedWarehouse !== null) {\r\n items.push({\r\n routeName: routeNameSmiMyConsumptions,\r\n routeQuery: { warehouse: this.selectedSmiWarehouseId },\r\n name: this.selectedWarehouse.customerName,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n private get startOfToday(): Date {\r\n return Dates.startOfToday();\r\n }\r\n private get endOfMonth(): Date {\r\n return Dates.endOfMonth(this.startOfToday);\r\n }\r\n private get minDate(): Date | null {\r\n return this.smiConsumptionOverview\r\n ? new Date(this.smiConsumptionOverview.contractPeriodFromDate)\r\n : null;\r\n }\r\n private get maxDate(): Date | null {\r\n return this.smiConsumptionOverview\r\n ? new Date(this.smiConsumptionOverview.contractPeriodToDate)\r\n : null;\r\n }\r\n private get dateRangeShortcuts(): DateRangeShortcut[] {\r\n if (!this.smiConsumptionOverview) {\r\n return [];\r\n }\r\n\r\n const shortcuts: DateRangeShortcut[] = [\r\n {\r\n text: this.$t(\r\n 'smiMyConsumptionsPage.dateRanges.thisContractPeriod'\r\n ).toString(),\r\n range: {\r\n fromDate: new Date(\r\n this.smiConsumptionOverview.contractPeriodFromDate\r\n ),\r\n toDate: new Date(this.smiConsumptionOverview.contractPeriodToDate),\r\n },\r\n },\r\n {\r\n text: this.$t('smiMyConsumptionsPage.dateRanges.thisMonth').toString(),\r\n range: {\r\n fromDate: Dates.startOfMonth(this.startOfToday),\r\n toDate: this.endOfMonth,\r\n },\r\n },\r\n {\r\n text: this.$t('smiMyConsumptionsPage.dateRanges.lastMonth').toString(),\r\n range: {\r\n fromDate: Dates.startOfMonth(\r\n this.$moment(this.startOfToday).subtract(1, 'month').toDate()\r\n ),\r\n toDate: Dates.endOfMonth(\r\n this.$moment(this.startOfToday).subtract(1, 'month').toDate()\r\n ),\r\n },\r\n },\r\n {\r\n text: this.$t('smiMyConsumptionsPage.dateRanges.thisWeek').toString(),\r\n range: {\r\n fromDate: Dates.startOfWeek(this.startOfToday),\r\n toDate: Dates.endOfWeek(this.startOfToday),\r\n },\r\n },\r\n {\r\n text: this.$t('smiMyConsumptionsPage.dateRanges.lastWeek').toString(),\r\n range: {\r\n fromDate: Dates.startOfWeek(\r\n this.$moment(this.startOfToday).subtract(1, 'week').toDate()\r\n ),\r\n toDate: Dates.endOfWeek(\r\n this.$moment(this.startOfToday).subtract(1, 'week').toDate()\r\n ),\r\n },\r\n },\r\n ];\r\n\r\n return shortcuts.filter(\r\n (shortcut) =>\r\n this.$moment(shortcut.range.fromDate).isSameOrBefore(\r\n this.smiConsumptionOverview?.contractPeriodToDate\r\n ) &&\r\n this.$moment(shortcut.range.fromDate).isSameOrAfter(\r\n this.smiConsumptionOverview?.contractPeriodFromDate\r\n )\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().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let warehouseIdByQuery: number | null = null;\r\n if (this.$route.query.warehouse) {\r\n const warehouseId = Number(this.$route.query.warehouse.toString());\r\n if (!isNaN(warehouseId)) {\r\n warehouseIdByQuery = warehouseId;\r\n }\r\n }\r\n\r\n this.invalidSelectedSmiWarehouse = false;\r\n this.selectedContractPeriodId = null;\r\n\r\n return this.loadWarehouses()\r\n .then(async () => {\r\n if (warehouseIdByQuery !== null) {\r\n if (\r\n this.warehouses.some(\r\n (warehouse) => warehouse.id === warehouseIdByQuery\r\n )\r\n ) {\r\n this.selectedSmiWarehouseId = warehouseIdByQuery;\r\n await this.loadOverview();\r\n } else {\r\n this.invalidSelectedSmiWarehouse = true;\r\n }\r\n } else if (this.warehouses.length > 0) {\r\n this.selectedSmiWarehouseId =\r\n (userProfileModule.selectedCustomer !== null\r\n ? this.warehouses.find(\r\n (warehouse) =>\r\n warehouse.customerId ===\r\n userProfileModule.selectedCustomer?.id\r\n )?.id\r\n : undefined) ?? this.warehouses[0].id;\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (this.$route.query.warehouse === query.warehouse) {\r\n return false;\r\n } else {\r\n // If just going from a no defined warehouse to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.warehouse?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: {\r\n warehouse?: string;\r\n } = {};\r\n\r\n if (this.selectedSmiWarehouseId) {\r\n query.warehouse = this.selectedSmiWarehouseId.toString();\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private onSmiWarehouseSelect(smiWarehouseId: number) {\r\n if (this.selectedSmiWarehouseId !== smiWarehouseId) {\r\n this.selectedSmiWarehouseId = smiWarehouseId;\r\n this.selectedContractPeriodId = null;\r\n this.updateQuery();\r\n }\r\n }\r\n\r\n private onOverviewByDatesDateRangeUpdate(dateRange: DateRange) {\r\n this.overviewByDatesDateRange = dateRange;\r\n this.loadOverviewByDates();\r\n }\r\n\r\n private onSelectedContractPeriodInput(contractPeriodId: number): void {\r\n this.selectedContractPeriodId = contractPeriodId;\r\n this.loadOverview();\r\n }\r\n\r\n private onProductsFilterSelect(productNumber: string[]) {\r\n if (productNumber.length > 0) {\r\n this.filteredProductNumber = productNumber[0];\r\n } else {\r\n this.filteredProductNumber = null;\r\n }\r\n }\r\n\r\n private loadWarehouses(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehousesModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private loadOverview(): Promise {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiConsumptionOverviewModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId ?? undefined,\r\n })\r\n .then((response) => {\r\n this.selectedContractPeriodId =\r\n response.smiConsumptionOverview?.contractPeriodId ?? null;\r\n\r\n if (response.smiConsumptionOverview !== undefined) {\r\n this.setInitialDateRange();\r\n\r\n return this.loadOverviewByDates();\r\n }\r\n })\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n private loadOverviewByDates(): Promise {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n } else if (this.selectedContractPeriodId === null) {\r\n return Promise.reject('No selected smi contract period!');\r\n } else if (this.overviewByDatesDateRange === null) {\r\n return Promise.reject('No date range selected!');\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiConsumptionOverviewByDatesModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n contractPeriodId: this.selectedContractPeriodId,\r\n fromDate: this.overviewByDatesDateRange.fromDate,\r\n toDate: this.overviewByDatesDateRange.toDate,\r\n })\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n private setInitialDateRange() {\r\n if (!this.smiConsumptionOverview) {\r\n return;\r\n }\r\n\r\n if (this.dateRangeShortcuts.length > 0) {\r\n this.overviewByDatesDateRange = {\r\n fromDate: new Date(this.dateRangeShortcuts[0].range.fromDate),\r\n toDate: new Date(this.dateRangeShortcuts[0].range.toDate),\r\n };\r\n } else {\r\n this.overviewByDatesDateRange = {\r\n fromDate: new Date(this.smiConsumptionOverview.contractPeriodFromDate),\r\n toDate: new Date(this.smiConsumptionOverview.contractPeriodToDate),\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!./SmiMyConsumptionsPage.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!./SmiMyConsumptionsPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiMyConsumptionsPage.vue?vue&type=template&id=324f11d4&\"\nimport script from \"./SmiMyConsumptionsPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiMyConsumptionsPage.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('DefaultLayout',[_c('Breadcrumbs',{attrs:{\"items\":_vm.breadcrumbs}}),_c('Messages'),_c('div',{staticClass:\"container-fluid mt-3\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.title'))+\" \")]),_c('div',{staticClass:\"d-align-self-end\"},[_c('SmiWarehouseTreeSelect',{attrs:{\"value\":_vm.selectedSmiWarehouseId,\"smiWarehouses\":_vm.smiWarehouses,\"placeholder\":_vm.$t('smiConsumptionLogPage.warehouses.placeholder'),\"clearable\":false},on:{\"select\":_vm.onSmiWarehouseSelect}})],1)]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex align-items-center flex-wrap mb-4\"},[(_vm.dateRange)?_c('CustomDateRangePicker',{staticClass:\"u-xs-full-width mr-sm-2\",attrs:{\"dateRange\":_vm.dateRange,\"maxDate\":_vm.endOfCurrentWeek,\"maxRangeLengthInWeeks\":_vm.maxRangeLengthInWeeks,\"weekRangeMode\":true},on:{\"update\":_vm.onDateRangeUpdate}}):_vm._e(),(!_vm.isDateRangeTheDefault)?_c('button',{staticClass:\"o-button px-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onClearFilters}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.clearFilters'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"restore\")])]):_vm._e()],1),_c('div',{staticClass:\"u-position-relative\"},[(_vm.isLoading)?_c('span',{staticClass:\"o-loader o-loader--absolute mt-6\"}):(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiConsumptionLogPage.error')))])]):(_vm.invalidSelectedSmiWarehouse)?_c('div',[(_vm.warehouses.length > 0)?[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.noWarehouses.hasWarehouses'))+\" \")]:[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.noWarehouses.hasNoWarehouses'))+\" \")]],2):[(\n _vm.smiConsumptionLogsSearch !== null &&\n _vm.logMonths.length &&\n _vm.logProducts.length\n )?_c('div',{staticClass:\"mb-5\"},[_c('SmiConsumptionLogCharts',{attrs:{\"logProducts\":_vm.logProducts,\"logMonths\":_vm.logMonths,\"fromDate\":_vm.smiConsumptionLogsSearch.from,\"toDate\":_vm.smiConsumptionLogsSearch.to}})],1):_vm._e(),(_vm.logMonths.length)?_c('SmiConsumptionLog',{attrs:{\"logMonths\":_vm.logMonths,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"errorSaving\":_vm.errorSaving},on:{\"saveConsumptionByDays\":_vm.onSaveConsumptionByDays,\"saveConsumptionByWeek\":_vm.onSaveConsumptionByWeek,\"reset\":_vm.onResetLog}}):(!_vm.isLoading && !_vm.errorLoading)?_c('div',{staticClass:\"mt-2\"},[_c('span',[_vm._v(_vm._s(_vm.$t('smiConsumptionLogPage.noConsumptions')))])]):_vm._e(),_c('h1',{staticClass:\"t-heading-4 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.historyTitle'))+\" \")]),_c('button',{staticClass:\"o-button o-button--blue o-button--small m-1\",attrs:{\"disabled\":this.activeHistoricalLength === _vm.HistoricalLength.TwoYears},on:{\"click\":function($event){_vm.loadHistoricalConsumptions(\n new Date(new Date().getFullYear() - 1, 0, 1),\n _vm.HistoricalLength.TwoYears\n )}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.twoYears'))+\" \")]),_c('button',{staticClass:\"o-button o-button--blue o-button--small m-1\",attrs:{\"disabled\":this.activeHistoricalLength === _vm.HistoricalLength.OneYear},on:{\"click\":function($event){_vm.loadHistoricalConsumptions(\n new Date(new Date().getFullYear(), 0, 1),\n _vm.HistoricalLength.OneYear\n )}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.oneYear'))+\" \")]),_c('button',{staticClass:\"o-button o-button--blue o-button--small m-1\",attrs:{\"disabled\":this.activeHistoricalLength === _vm.HistoricalLength.SixMonths},on:{\"click\":function($event){_vm.loadHistoricalConsumptions(\n new Date(new Date().setMonth(new Date().getMonth() - 6)),\n _vm.HistoricalLength.SixMonths\n )}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.sixMonths'))+\" \")]),_c('button',{staticClass:\"o-button o-button--blue o-button--small m-1\",attrs:{\"disabled\":this.activeHistoricalLength === _vm.HistoricalLength.ThreeMonths},on:{\"click\":function($event){_vm.loadHistoricalConsumptions(\n new Date(new Date().setMonth(new Date().getMonth() - 3)),\n _vm.HistoricalLength.ThreeMonths\n )}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogPage.threeMonths'))+\" \")]),(_vm.isLoadingHistory)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.showHistory && !_vm.isLoadingHistory)?[(_vm.historicalLogMonths.length)?_c('SmiHistoricalConsumptionLog',{attrs:{\"logMonths\":_vm.historicalLogMonths,\"filteredProductNumbers\":_vm.filteredProductNumbers}}):_vm._e()]:_vm._e()]],2)]),_c('SmiConsumptionLogConfirmationModal',{ref:\"smiConsumptionLogConfirmationModal\",attrs:{\"consumptionByDays\":_vm.consumptionByDays,\"consumptionByWeek\":_vm.consumptionByWeek,\"selectedSmiWarehouseId\":_vm.selectedSmiWarehouseId,\"productDisplayName\":_vm.productDisplayName,\"productCurrentStockQuantity\":_vm.productCurrentStockQuantity,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"reportByWeek\":_vm.reportByWeek},on:{\"loadConsumptions\":_vm.loadConsumptions}})],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:\"row\"},[_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"u-background-color-white px-4 py-3\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase u-text-muted mb-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogCharts.byWeeks'))+\" \")]),_c('highcharts',{attrs:{\"options\":_vm.byWeeksChartOptions}})],1)]),_c('div',{staticClass:\"col-12 col-md-6\"},[_c('div',{staticClass:\"u-background-color-white px-4 py-3\"},[_c('div',{staticClass:\"t-body-regular-sans-serif-uppercase u-text-muted mb-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogCharts.total', [ _vm.weekRangeFilter(_vm.fromDate, _vm.toDate) ]))+\" \")]),_c('highcharts',{attrs:{\"options\":_vm.totalChartOptions}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { Chart } from 'highcharts-vue';\r\nimport { Options, Point, PointOptionsObject } from 'highcharts';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { Config } from '@/utils/Config';\r\nimport { SmiConsumptionLogProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogProduct';\r\nimport moment from 'moment';\r\nimport i18n from '@/i18n/i18n';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { weekRangeFilter } from '@/filters/weekRange';\r\nimport { SmiConsumptionLogMonth } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\ninterface PointWithDatesOptions extends PointOptionsObject {\r\n fromDate: Date;\r\n toDate: Date;\r\n}\r\ninterface PointWithDates extends Point {\r\n fromDate: Date;\r\n toDate: Date;\r\n}\r\n\r\ninterface ConsumptionChartWeek {\r\n startOfWeekYear: number;\r\n weekNumber: number;\r\n fromDate: string;\r\n toDate: string;\r\n products: ConsumptionChartWeekProduct[];\r\n}\r\n\r\ninterface ConsumptionChartWeekProduct {\r\n productNumber: string;\r\n productDisplayName: string;\r\n quantity: number;\r\n}\r\n\r\n@Component({\r\n components: {\r\n highcharts: Chart,\r\n },\r\n})\r\nexport default class SmiConsumptionLogCharts extends Vue {\r\n @Prop({ required: true })\r\n public logProducts!: SmiConsumptionLogProduct[];\r\n @Prop({ required: true })\r\n public logMonths!: SmiConsumptionLogMonth[];\r\n @Prop({ required: true })\r\n public fromDate!: Date;\r\n @Prop({ required: true })\r\n public toDate!: Date;\r\n\r\n private readonly weekRangeFilter = weekRangeFilter;\r\n private readonly chartHeight = 320;\r\n private readonly chartSpacing = [15, 15, 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 },\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 logWeeks(): ConsumptionChartWeek[] {\r\n return Object.values(\r\n this.logMonths\r\n .flatMap((logMonth) => logMonth.logWeeks)\r\n .reduce>((logWeeks, logWeek) => {\r\n const logWeekKey = logWeek.weekNumber;\r\n const logWeekProducts = logWeek.existingProducts.map(\r\n (existingProduct) => ({\r\n productNumber: existingProduct.productNumber,\r\n productDisplayName: existingProduct.productDisplayName,\r\n quantity: existingProduct.totalConsumptionQuantity,\r\n })\r\n );\r\n\r\n if (logWeeks[logWeekKey] === undefined) {\r\n logWeeks[logWeekKey] = {\r\n startOfWeekYear: logWeek.startOfWeekYear,\r\n weekNumber: logWeek.weekNumber,\r\n fromDate: logWeek.fromDate,\r\n toDate: logWeek.toDate,\r\n products: logWeekProducts,\r\n };\r\n } else {\r\n logWeeks[logWeekKey]!.products = Object.values(\r\n [...logWeeks[logWeekKey]!.products, ...logWeekProducts].reduce<\r\n Record\r\n >((products, product) => {\r\n const productKey = product.productNumber;\r\n if (products[productKey] === undefined) {\r\n products[productKey] = product;\r\n } else {\r\n products[productKey].quantity += product.quantity;\r\n }\r\n return products;\r\n }, {})\r\n );\r\n }\r\n return logWeeks;\r\n }, {})\r\n );\r\n }\r\n\r\n private get byWeeksChartOptions(): Options {\r\n const customOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: this.chartSpacing,\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n },\r\n formatter: function () {\r\n return i18n\r\n .t('smiConsumptionLogCharts.xAxisFormat', [\r\n moment(this.value).isoWeek(),\r\n ])\r\n .toString();\r\n },\r\n },\r\n },\r\n legend: {\r\n enabled: true,\r\n verticalAlign: 'top',\r\n },\r\n series: this.logProducts.map((summaryProduct) => ({\r\n name: summaryProduct.displayName,\r\n data: this.logWeeks.map((week) => {\r\n const pointWithDates: PointWithDatesOptions = {\r\n x: Dates.startOfWeek(week.fromDate).getTime(), // This is to solve a weird bug in highcharts (?), where x-axis date range could be weired until resizing if only one day in a week\r\n y: week.products.find(\r\n (p) => p.productNumber === summaryProduct.productNumber\r\n )?.quantity,\r\n fromDate: new Date(week.fromDate),\r\n toDate: new Date(week.toDate),\r\n };\r\n return pointWithDates;\r\n }),\r\n color: Config.getProductColor(summaryProduct.colorCategory),\r\n type: 'column',\r\n })),\r\n tooltip: {\r\n formatter: function () {\r\n const startDate = moment(this.x);\r\n const point = this.point as PointWithDates;\r\n return `${i18n.t(\r\n 'smiConsumptionLogCharts.weekPart1',\r\n [startDate.isoWeek()]\r\n )} ${i18n.t('smiConsumptionLogCharts.weekPart2', [\r\n Dates.isCurrentWeek(startDate.toDate())\r\n ? i18n.t('smiConsumptionLogCharts.currentWeek')\r\n : dateRangeFilter(point.fromDate, point.toDate),\r\n ])}
\r\n ● ${\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 private get totalChartOptions(): Options {\r\n const customOptions: Options = {\r\n chart: {\r\n height: this.chartHeight,\r\n spacing: this.chartSpacing,\r\n },\r\n xAxis: {\r\n categories: this.logProducts.map(\r\n (summaryProduct) => summaryProduct.displayName\r\n ),\r\n labels: {\r\n style: {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n legend: {\r\n enabled: false,\r\n },\r\n tooltip: {\r\n headerFormat: '',\r\n pointFormatter: function () {\r\n return `● ${\r\n this.name\r\n }: ${numberFilter(this.y)} t
`;\r\n },\r\n },\r\n series: [\r\n {\r\n colorByPoint: true,\r\n data: this.logProducts.map((summaryProduct) => ({\r\n name: summaryProduct.displayName,\r\n y: summaryProduct.totalConsumptionQuantity,\r\n color: Config.getProductColor(summaryProduct.colorCategory),\r\n })),\r\n type: 'column',\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!./SmiConsumptionLogCharts.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!./SmiConsumptionLogCharts.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogCharts.vue?vue&type=template&id=7e31d236&\"\nimport script from \"./SmiConsumptionLogCharts.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogCharts.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 (_vm.logMonths.length)?_c('div',[_c('ValidationObserver',{scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar invalid = ref.invalid;\nvar handleSubmit = ref.handleSubmit;\nreturn [_c('form',{staticClass:\"u-width-100\",attrs:{\"autocomplete\":\"off\"},on:{\"submit\":function($event){$event.preventDefault();_vm.hasBeenSubmitted = true;\n handleSubmit(_vm.onSubmit);}}},[_c('div',{staticClass:\"c-form c-form--validated c-form--light-grey\"},[_c('div',{staticClass:\"c-table c-table--no-divider js-table\",class:{\n 'c-table--dense': _vm.isEditing || _vm.isAdding,\n }},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',_vm._l((_vm.logMonthsLatestFirst),function(logMonth,monthIndex){return _c('SmiConsumptionLogMonth',{key:monthIndex,attrs:{\"logMonth\":logMonth,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"invalid\":invalid,\"isEditing\":_vm.isEditing,\"isAdding\":_vm.isAdding,\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"errorSaving\":_vm.errorSaving},on:{\"reset\":_vm.onReset}})}),1)])])])])]}}],null,false,1754691606)})],1):_vm._e()}\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('h3',[_vm._v(_vm._s(_vm._f(\"yearAndMonth\")(_vm.logMonth.year,_vm.logMonth.month)))]),_c('div',{staticClass:\"u-background-color-white p-3 mb-6\"},[_c('div',{staticClass:\"c-table c-table--no-divider js-table\",class:{\n 'c-table--dense': _vm.isEditing || _vm.isAdding,\n }},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',_vm._l((_vm.logWeeksLatestFirst),function(logWeek,weekIndex){return _c('SmiConsumptionLogWeek',{key:weekIndex,attrs:{\"logWeek\":logWeek,\"month\":_vm.logMonth.month,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"invalid\":_vm.invalid,\"isEditing\":_vm.isEditing,\"isAdding\":_vm.isAdding,\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"errorSaving\":_vm.errorSaving,\"isLastWeek\":weekIndex === _vm.logWeeksLatestFirst.length - 1},on:{\"editLogWeekProduct\":_vm.onEditLogWeekProduct,\"cancelEditLogWeekProduct\":_vm.onCancelEditLogWeekProduct,\"addLogWeekProduct\":_vm.onAddLogWeekProduct}})}),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('tbody',[_c('tr',{staticClass:\"c-table__primary c-table__primary_non_expandable consumption-week-row is-showing\"},[_c('td',[_c('span',{staticClass:\"nowrap mr-1 t-heading-5 mb-0\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeek.weekTitle', [_vm.logWeek.weekNumber]))+\" \")])]),_c('td',{staticClass:\"u-border-right u-text-right\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeek.columns.total'))+\" \")]),_vm._l((_vm.logWeek.datesOfWeek),function(dateOfWeek,dateIndex){return _c('td',{key:((_vm.logWeek.weekNumber) + \"|dates|\" + dateIndex),staticClass:\"u-text-right\"},[_c('div',{class:{\n 'pr-3': _vm.isEditingOrAddingDailiesOnThisLogWeek,\n 'u-bold': _vm.isDateToday(dateOfWeek.date),\n }},[(dateOfWeek.includedInMonth)?[_c('span',[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogWeek.columns.weekdays.\" + (_vm.weekdayFilter( dateOfWeek.date ))) )))]),_c('br'),_c('span',[_vm._v(_vm._s(_vm._f(\"day\")(dateOfWeek.date)))])]:_c('span',{staticClass:\"t-heading-5 u-text-muted mb-0\"},[_vm._v(\"―\")])],2)])}),_c('td',{staticClass:\"u-border-left\"})],2),_vm._l((_vm.logWeek.existingProducts),function(logWeekProduct,productIndex){return [(_vm.isProductFiltered(logWeekProduct))?_c('SmiConsumptionLogWeekProductRow',{key:((_vm.logWeek.weekNumber) + \"|\" + productIndex),attrs:{\"logWeek\":_vm.logWeek,\"invalid\":_vm.invalid,\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"isEditingOrAdding\":_vm.isEditingOrAdding,\"isEditingOrAddingDailiesOnLogWeek\":_vm.isEditingOrAddingDailiesOnThisLogWeek,\"editLogWeekProduct\":logWeekProduct},on:{\"edit\":function($event){return _vm.onEditLogWeekProduct(logWeekProduct)},\"cancelEdit\":function($event){return _vm.onCancelEditLogWeekProduct(logWeekProduct)}}}):_vm._e()]}),(_vm.availableProducts.length)?_c('SmiConsumptionLogWeekProductRow',{attrs:{\"logWeek\":_vm.logWeek,\"invalid\":_vm.invalid,\"isSaving\":_vm.isSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit,\"isEditingOrAdding\":_vm.isEditingOrAdding,\"isEditingOrAddingDailiesOnLogWeek\":_vm.isEditingOrAddingDailiesOnThisLogWeek,\"availableProducts\":_vm.availableProducts},on:{\"add\":_vm.onAddLogWeekProduct}}):_vm._e(),(\n _vm.logWeek.existingProducts.length === 0 && _vm.availableProducts.length === 0\n )?_c('tr',{staticClass:\"noproducts-row\"},[_c('td',{staticClass:\"u-text-muted\",attrs:{\"colspan\":\"99\"}},[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogWeek.noProducts.\" + (_vm.isWeekSplittedBetweenMonths ? 'splittedBetweenMonths' : 'sameMonth')) ))+\" \")])]):_vm._e(),(_vm.errorSaving && _vm.isEditingOrAddingOnThisLogWeek)?_c('tr',{staticClass:\"warning-row\"},[_c('td',{attrs:{\"colspan\":\"99\"}},[_c('div',{staticClass:\"c-alert c-alert--red mt-2\",attrs:{\"data-element-id\":\"smiConsumptionLogWeek-errorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiConsumptionLogWeek.errorSaving')))]),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"smiConsumptionLogWeek-errorAlert\"}})])])]):_vm._e(),(!_vm.isLastWeek)?_c('tr',{staticClass:\"emptyspace-row\"},[_c('td',{attrs:{\"colspan\":\"99\"}})]):_vm._e()],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('tr',{staticClass:\"c-table__secondary active\",class:{ 'is-editing': _vm.isEditingOrAddingOnThisRow }},[_c('td',{class:{ 'u-border-right': _vm.addNotEdit && !_vm.isEditingOrAddingOnThisRow },attrs:{\"colspan\":_vm.addNotEdit && !_vm.isEditingOrAddingOnThisRow ? 2 : 1}},[(_vm.addNotEdit)?_c('ProductsTreeSelect',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isEditingOrAddingOnThisRow),expression:\"!isEditingOrAddingOnThisRow\"}],staticClass:\"products-tree-select\",attrs:{\"value\":_vm.addingProductNumber,\"products\":_vm.availableProducts,\"placeholder\":_vm.$t('smiConsumptionLogWeekProductRow.productsPlaceholder'),\"clearable\":false,\"multiple\":false,\"disabled\":_vm.isEditingOrAdding || !_vm.isAllowedToEdit,\"title\":_vm.isAllowedToEdit\n ? ''\n : _vm.$t('smiConsumptionLogWeekProductRow.notAllowedToEdit')},on:{\"select\":_vm.onAddProductFilterSelect}}):_vm._e(),(!_vm.addNotEdit || _vm.isEditingOrAddingOnThisRow)?_c('span',{class:{ 'u-bold': _vm.isEditingOrAddingOnThisRow }},[_vm._v(\" \"+_vm._s(_vm.logWeekProduct.productDisplayName)+\" \")]):_vm._e()],1),(!_vm.addNotEdit || _vm.isEditingOrAddingOnThisRow)?_c('td',{staticClass:\"u-border-right u-text-right nowrap\"},[(\n _vm.isEditingOrAddingOnThisRow &&\n _vm.logWeekProduct &&\n !_vm.logWeekProduct.weekGrouping &&\n !_vm.addNotEdit\n )?_c('button',{staticClass:\"o-button o-button--small o-button--blue px-2 d-inline-block nowrap mr-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onSwitchToWeeklyEditing}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeekProductRow.switchToWeekly'))+\" \")]):_vm._e(),(\n _vm.isEditingOrAddingOnThisRow &&\n _vm.logWeekProduct &&\n _vm.logWeekProduct.weekGrouping &&\n !_vm.addNotEdit\n )?_c('button',{staticClass:\"o-button o-button--small o-button--blue px-2 d-inline-block nowrap mr-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onSwitchToDailyEditing}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeekProductRow.switchToDaily'))+\" \")]):_vm._e(),(\n _vm.isEditingOrAddingOnThisRow &&\n _vm.logWeekProduct &&\n _vm.logWeekProduct.weekGrouping\n )?_c('SmiConsumptionLogQuantityTotalInput',{ref:\"totalInput\",staticClass:\"d-inline-block\",attrs:{\"value\":_vm.totalValue,\"originalValue\":_vm.logWeekProduct.totalConsumptionQuantity,\"validationId\":((_vm.logWeek.startOfWeekYear) + \"|\" + (_vm.logWeek.weekNumber) + \"|\" + (_vm.logWeekProduct.productNumber) + \"|total\"),\"disabled\":_vm.isSaving},on:{\"input\":_vm.onTotalQuantityInput}}):(_vm.addNotEdit && _vm.isEditingOrAddingOnThisRow && !_vm.anyValidChange)?_c('button',{staticClass:\"o-button o-button--small o-button--blue px-2 d-inline-block nowrap\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onSwitchToWeekly}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeekProductRow.switchToWeekly'))+\" \")]):_c('span',{staticClass:\"u-bold ml-2\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.logWeekProduct.newTotalConsumptionQuantity))+\" t\")])],1):_vm._e(),_vm._l((_vm.logWeek.datesOfWeek),function(dateOfWeek,dateIndex){return _c('td',{key:dateIndex,staticClass:\"u-text-right\"},[(dateOfWeek.includedInMonth)?[(\n _vm.isEditingOrAddingOnThisRow &&\n _vm.logWeekProduct &&\n !_vm.logWeekProduct.weekGrouping\n )?_c('SmiConsumptionLogQuantityInput',{attrs:{\"day\":_vm.logWeekProduct.days[dateIndex],\"date\":dateOfWeek.date,\"validationId\":((_vm.logWeek.startOfWeekYear) + \"|\" + (_vm.logWeek.weekNumber) + \"|\" + (_vm.logWeekProduct.productNumber) + \"|\" + dateIndex),\"isSaving\":_vm.isSaving,\"showOriginalQuantityTitle\":!_vm.addNotEdit},on:{\"change\":_vm.onDayQuantityChange}}):(\n _vm.addNotEdit &&\n _vm.isEditingOrAddingOnThisRow &&\n _vm.logWeekProduct.weekGrouping &&\n !_vm.anyValidChange\n )?[(dateIndex === 0)?_c('div',{staticClass:\"d-inline-block nowrap\"},[_c('span',{staticClass:\"mr-2\"},[_vm._v(_vm._s(_vm.$t('smiConsumptionLogWeekProductRow.or')))]),_c('button',{staticClass:\"o-button o-button--small o-button--blue px-2 d-inline-block nowrap\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onSwitchToDaily}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeekProductRow.switchToDaily'))+\" \")])]):_vm._e()]:[(_vm.logWeekProduct && _vm.logWeekProduct.weekGrouping)?_c('span',{class:{ 'mr-3': _vm.isEditingOrAddingDailiesOnLogWeek }},[_vm._v(\" - \")]):(\n !_vm.addNotEdit &&\n _vm.logWeekProduct &&\n _vm.logWeekProduct.days[dateIndex].consumptionQuantity\n )?_c('span',{class:{ 'mr-3': _vm.isEditingOrAddingDailiesOnLogWeek }},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.logWeekProduct.days[dateIndex].consumptionQuantity))+\" t\")]):_vm._e()]]:_vm._e()],2)}),_c('td',{staticClass:\"u-border-left u-text-right\"},[(_vm.isEditingOrAddingOnThisRow)?_c('div',{staticClass:\"nowrap\"},[(!_vm.addNotEdit && _vm.changedQuantity !== undefined)?_c('span',{staticClass:\"mr-1\",attrs:{\"title\":_vm.$t('smiConsumptionLogWeekProductRow.changedQuantityTooltip')}},[(_vm.changedQuantity > 0)?[_vm._v(\"+\")]:(_vm.changedQuantity === 0)?[_vm._v(\"+-\")]:_vm._e(),_vm._v(_vm._s(_vm._f(\"number\")(_vm.changedQuantity)))],2):_vm._e(),(_vm.isSaving)?_c('span',{staticClass:\"o-loader o-loader--medium\"}):_c('button',{staticClass:\"o-round-button o-round-button--mini\",class:{\n 'o-round-button--success':\n !_vm.invalid && _vm.anyValidChange && _vm.isAllowedToEdit,\n },attrs:{\"type\":\"submit\",\"disabled\":_vm.invalid || !_vm.anyValidChange || !_vm.isAllowedToEdit,\"title\":_vm.$t(\n (\"smiConsumptionLogWeekProductRow.saveTooltip.\" + (_vm.addNotEdit ? 'add' : 'edit'))\n )}},[_c('i',{staticClass:\"material-icons md-24\"},[_vm._v(\"done\")])]),_c('button',{staticClass:\"o-round-button o-round-button--mini o-round-button--black ml-1\",attrs:{\"type\":\"button\",\"disabled\":_vm.isSaving,\"title\":_vm.$t(\n (\"smiConsumptionLogWeekProductRow.cancelEditTooltip.\" + (_vm.addNotEdit ? 'add' : 'edit'))\n )},on:{\"click\":_vm.onCancelEditClick}},[_c('i',{staticClass:\"material-icons md-24\"},[_vm._v(\"close\")])])]):[(!_vm.addNotEdit)?_c('button',{staticClass:\"o-round-button o-round-button--mini\",class:{\n 'o-round-button--blue':\n !_vm.isSaving && !_vm.isEditingOrAdding && _vm.isAllowedToEdit && _vm.canEdit,\n },attrs:{\"type\":\"button\",\"disabled\":_vm.isSaving || _vm.isEditingOrAdding || !_vm.isAllowedToEdit || !_vm.canEdit,\"title\":_vm.$t(\n (\"smiConsumptionLogWeekProductRow.\" + (!_vm.canEdit\n ? 'canNotEdit'\n : _vm.isAllowedToEdit\n ? 'editTooltip'\n : 'notAllowedToEdit'))\n )},on:{\"click\":_vm.onEditClick}},[_c('i',{staticClass:\"material-icons md-24\"},[(_vm.canEdit)?[_vm._v(\"edit\")]:[_vm._v(\"edit_off\")]],2)]):_vm._e()]],2)],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('ValidationProvider',{staticClass:\"c-form-element-group\",attrs:{\"name\":(_vm.validationId + \"|quantity\"),\"rules\":_vm.validationRules,\"tag\":\"div\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar failed = ref.failed;\nreturn [_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.day.newQuantity),expression:\"day.newQuantity\",modifiers:{\"number\":true}}],staticClass:\"o-text-input o-text-input--width-100 u-text-right\",class:{\n invalid: failed,\n 'u-background-color-lime-green-20': !failed && _vm.changedSuccessfully,\n 'locked-input': _vm.locked,\n },attrs:{\"type\":\"text\",\"inputmode\":\"numeric\",\"title\":_vm.showOriginalQuantityTitle && _vm.changed && !_vm.locked\n ? _vm.$t('smiConsumptionLogQuantityInput.originalQuantity', [\n _vm.day.consumptionQuantity ])\n : _vm.isDateInFuture\n ? _vm.$t('smiConsumptionLogQuantityInput.lockedInputDateInFuture')\n : !_vm.day.isOpen\n ? _vm.$t('smiConsumptionLogQuantityInput.lockedInputNotOpen')\n : undefined,\"disabled\":_vm.disabled,\"required\":false,\"autocomplete\":\"chrome-off\",\"data-lpignore\":\"true\"},domProps:{\"value\":(_vm.day.newQuantity)},on:{\"wheel\":function($event){return $event.target.blur()},\"focus\":function($event){return $event.target.select()},\"change\":_vm.onChange,\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.day, \"newQuantity\", _vm._n($event.target.value))},_vm.onInput],\"blur\":function($event){return _vm.$forceUpdate()}}})]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { SmiConsumptionLogWeekProductDay } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekProductDay';\r\n\r\n@Component\r\nexport default class SmiConsumptionLogQuantityInput extends Vue {\r\n @Prop({ required: true })\r\n public day!: SmiConsumptionLogWeekProductDay;\r\n @Prop({ required: true })\r\n public date!: string;\r\n @Prop({ required: true })\r\n public validationId!: string;\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: false, default: () => false })\r\n public showOriginalQuantityTitle!: boolean;\r\n\r\n private readonly validationRules = 'min_value:0|maxThreeDecimals';\r\n\r\n private get disabled(): boolean {\r\n return this.locked || this.isSaving;\r\n }\r\n\r\n private get locked(): boolean {\r\n return !this.day.isOpen || this.isDateInFuture;\r\n }\r\n\r\n private get changed(): boolean {\r\n return this.day.newQuantity !== this.day.consumptionQuantity;\r\n }\r\n\r\n private get changedSuccessfully(): boolean {\r\n return (\r\n (this.day.newQuantity !== undefined &&\r\n !isNaN(Number(this.day.newQuantity)) &&\r\n this.day.newQuantity > 0 &&\r\n (this.day.consumptionQuantity === undefined ||\r\n this.day.consumptionQuantity !== this.day.newQuantity)) ||\r\n (this.day.consumptionQuantity !== undefined &&\r\n (this.day.newQuantity === undefined ||\r\n this.day.newQuantity === '' ||\r\n this.day.newQuantity === 0))\r\n );\r\n }\r\n\r\n private get isDateInFuture() {\r\n return this.$moment().isBefore(this.date, 'day');\r\n }\r\n\r\n private onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n if (target.value.indexOf(',') !== -1) {\r\n target.value = target.value.replaceAll(',', '.');\r\n }\r\n }\r\n\r\n private onChange() {\r\n this.$emit('change');\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!./SmiConsumptionLogQuantityInput.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!./SmiConsumptionLogQuantityInput.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogQuantityInput.vue?vue&type=template&id=33e14e54&scoped=true&\"\nimport script from \"./SmiConsumptionLogQuantityInput.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogQuantityInput.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionLogQuantityInput.vue?vue&type=style&index=0&id=33e14e54&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 \"33e14e54\",\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('ValidationProvider',{staticClass:\"c-form-element-group\",attrs:{\"name\":(_vm.validationId + \"|quantity\"),\"rules\":_vm.validationRules,\"tag\":\"div\"},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar failed = ref.failed;\nreturn [_c('input',{ref:\"theInput\",staticClass:\"o-text-input o-text-input--width-100 u-text-right\",class:{\n invalid: failed,\n 'u-background-color-lime-green-20': !failed && _vm.changedWithOkNumber,\n },attrs:{\"type\":\"text\",\"inputmode\":\"numeric\",\"disabled\":_vm.disabled,\"required\":false,\"placeholder\":_vm.$t('smiConsumptionLogQuantityTotalInput.placeholder'),\"autocomplete\":\"chrome-off\",\"data-lpignore\":\"true\"},domProps:{\"value\":_vm.value},on:{\"wheel\":function($event){return $event.target.blur()},\"focus\":function($event){return $event.target.select()},\"input\":_vm.onInput}})]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class SmiConsumptionLogQuantityTotalInput extends Vue {\r\n @Prop({ required: true })\r\n public value!: number;\r\n @Prop({ required: true })\r\n public validationId!: string;\r\n @Prop({ required: true })\r\n public disabled!: boolean;\r\n @Prop({ required: false, default: () => undefined })\r\n public originalValue!: number | undefined;\r\n\r\n private readonly validationRules = 'min_value:0|maxThreeDecimals';\r\n\r\n private get changedWithOkNumber(): boolean {\r\n return (\r\n this.value !== undefined &&\r\n !isNaN(this.value) &&\r\n this.value >= 0 &&\r\n (this.originalValue === undefined ||\r\n this.originalValue !== Number(this.value))\r\n );\r\n }\r\n\r\n private onInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n if (target.value.indexOf(',') !== -1) {\r\n target.value = target.value.replaceAll(',', '.');\r\n }\r\n this.$emit('input', target.value);\r\n }\r\n\r\n public focus(): void {\r\n (this.$refs.theInput as HTMLInputElement)?.focus();\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!./SmiConsumptionLogQuantityTotalInput.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!./SmiConsumptionLogQuantityTotalInput.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogQuantityTotalInput.vue?vue&type=template&id=17c3b2df&scoped=true&\"\nimport script from \"./SmiConsumptionLogQuantityTotalInput.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogQuantityTotalInput.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionLogQuantityTotalInput.vue?vue&type=style&index=0&id=17c3b2df&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 \"17c3b2df\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport SmiConsumptionLogQuantityInput from '@/components/SmiConsumptionLogQuantityInput.vue';\r\nimport SmiConsumptionLogQuantityTotalInput from '@/components/SmiConsumptionLogQuantityTotalInput.vue';\r\nimport { dayFilter } from '@/filters/day';\r\nimport { SmiConsumptionLogWeek } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogProduct';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { SmiConsumptionLogWeekAvailableProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekAvailableProduct';\r\n\r\n@Component({\r\n components: {\r\n ProductsTreeSelect,\r\n SmiConsumptionLogQuantityInput,\r\n SmiConsumptionLogQuantityTotalInput,\r\n },\r\n})\r\nexport default class SmiConsumptionLogWeekProductRow extends Vue {\r\n @Prop({ required: true })\r\n public logWeek!: SmiConsumptionLogWeek;\r\n @Prop({ required: true })\r\n public invalid!: boolean;\r\n @Prop({ required: true })\r\n public isEditingOrAdding!: boolean;\r\n @Prop({ required: true })\r\n public isEditingOrAddingDailiesOnLogWeek!: boolean;\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n @Prop({ required: false, default: () => null })\r\n public editLogWeekProduct!: SmiConsumptionLogWeekExistingProduct | null;\r\n @Prop({ required: false, default: () => [] })\r\n public availableProducts!: SmiConsumptionLogProduct[];\r\n\r\n private readonly dayFilter = dayFilter;\r\n\r\n private totalValue: string = '';\r\n\r\n private get addNotEdit(): boolean {\r\n return this.editLogWeekProduct === null;\r\n }\r\n\r\n private get canEdit() {\r\n return (\r\n this.addNotEdit ||\r\n (this.editLogWeekProduct !== null &&\r\n (this.editLogWeekProduct.openAllDates ||\r\n this.editLogWeekProduct.openSpecificDates.length > 0))\r\n );\r\n }\r\n\r\n private get addingProductNumber(): string | undefined {\r\n return this.logWeek.addingProduct?.productNumber;\r\n }\r\n\r\n private get isEditingOrAddingOnThisRow(): boolean {\r\n return (\r\n (this.addNotEdit && this.logWeek.addingProduct !== null) ||\r\n (!this.addNotEdit && this.editLogWeekProduct!.isEditing)\r\n );\r\n }\r\n\r\n private get logWeekProduct(): SmiConsumptionLogWeekExistingProduct | null {\r\n return this.addNotEdit\r\n ? this.logWeek.addingProduct\r\n : this.editLogWeekProduct;\r\n }\r\n\r\n private get anyValidChange(): boolean {\r\n if (this.logWeekProduct === null) {\r\n return false;\r\n }\r\n\r\n if (this.logWeekProduct.changedWeekGrouping) {\r\n return true;\r\n }\r\n\r\n if (this.logWeekProduct.weekGrouping) {\r\n return (\r\n Number(this.logWeekProduct.newTotalConsumptionQuantity) !==\r\n Number(this.logWeekProduct.totalConsumptionQuantity) &&\r\n this.logWeekProduct.newTotalConsumptionQuantity >= 0\r\n );\r\n } else {\r\n return this.logWeekProduct.days.some(\r\n (productDay) =>\r\n (Number(productDay.newQuantity) !==\r\n Number(productDay.consumptionQuantity) &&\r\n Number(productDay.newQuantity) > 0) ||\r\n (productDay.consumptionQuantity !== undefined &&\r\n productDay.newQuantity === undefined) ||\r\n productDay.newQuantity === '' ||\r\n productDay.newQuantity === 0\r\n );\r\n }\r\n }\r\n\r\n private get changedQuantity(): number | undefined {\r\n if (!this.anyValidChange || this.logWeekProduct === null) {\r\n // No changes\r\n return undefined;\r\n }\r\n\r\n if (\r\n this.logWeekProduct.weekGrouping &&\r\n this.isValidNumberInput(this.logWeekProduct.newTotalConsumptionQuantity)\r\n ) {\r\n return (\r\n this.logWeekProduct.newTotalConsumptionQuantity -\r\n (this.logWeekProduct.totalConsumptionQuantity ?? 0)\r\n );\r\n } else if (\r\n !this.logWeekProduct.weekGrouping &&\r\n !this.logWeekProduct.days.some(\r\n (day) => !this.isValidNumberInput(day.newQuantity)\r\n ) &&\r\n this.logWeekProduct.days.some((day) =>\r\n this.isValidNumberInput(day.newQuantity)\r\n )\r\n ) {\r\n // No days has invalid input and at least one input has (valid) input\r\n return this.logWeekProduct.days.reduce(\r\n (sum, day) =>\r\n sum +\r\n (day.newQuantity !== undefined && !isNaN(Number(day.newQuantity))\r\n ? Number(day.newQuantity) - (day.consumptionQuantity ?? 0)\r\n : 0),\r\n 0\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n private get allDatesWithinSameMonth(): boolean {\r\n return (\r\n this.logWeek.datesOfWeek.length <= 1 ||\r\n this.$moment(this.logWeek.datesOfWeek[0].date).isSame(\r\n this.logWeek.datesOfWeek[this.logWeek.datesOfWeek.length - 1].date,\r\n 'month'\r\n )\r\n );\r\n }\r\n\r\n private created() {\r\n this.resetEditingProduct();\r\n }\r\n\r\n private isValidNumberInput(value?: number | string) {\r\n return value !== undefined && !isNaN(Number(value));\r\n }\r\n\r\n private getTotalConsumptionQuantityByDays(): number {\r\n return (\r\n this.logWeekProduct?.days.reduce(\r\n (sum, day) =>\r\n sum +\r\n (this.isValidNumberInput(day.newQuantity) && day.newQuantity! > 0\r\n ? Number(day.newQuantity)\r\n : 0),\r\n 0\r\n ) ?? 0\r\n );\r\n }\r\n\r\n private initializeAddingProduct(\r\n product: SmiConsumptionLogWeekAvailableProduct\r\n ) {\r\n this.logWeek.addingProduct = {\r\n productNumber: product.productNumber,\r\n productDisplayName: product.productDisplayName,\r\n totalConsumptionQuantity: 0,\r\n newTotalConsumptionQuantity: 0,\r\n days: this.logWeek.datesOfWeek.map((date, dayIndex) => ({\r\n consumptionQuantity: undefined,\r\n consumptions: [],\r\n newQuantity: undefined,\r\n isOpen:\r\n product.openAllDates ||\r\n product.openSpecificDates.some(\r\n (openDate) => openDate === this.logWeek.datesOfWeek[dayIndex].date\r\n ),\r\n })),\r\n weekGrouping: this.allDatesWithinSameMonth,\r\n openAllDates: product.openAllDates,\r\n openSpecificDates: product.openSpecificDates,\r\n isEditing: true,\r\n changedWeekGrouping: false,\r\n };\r\n this.totalValue = '';\r\n }\r\n\r\n private clearAddingProduct() {\r\n this.logWeek.addingProduct = null;\r\n this.totalValue = '';\r\n }\r\n\r\n private resetEditingProduct() {\r\n if (this.logWeekProduct !== null) {\r\n this.logWeekProduct.newTotalConsumptionQuantity =\r\n this.logWeekProduct.totalConsumptionQuantity;\r\n this.totalValue =\r\n this.logWeekProduct.newTotalConsumptionQuantity.toString() ?? '';\r\n if (this.logWeekProduct.changedWeekGrouping) {\r\n this.logWeekProduct.weekGrouping = !this.logWeekProduct.weekGrouping;\r\n this.logWeekProduct.changedWeekGrouping = false;\r\n }\r\n }\r\n }\r\n\r\n private focusOnWeekTotal() {\r\n this.$nextTick(() => {\r\n (this.$refs.totalInput as SmiConsumptionLogQuantityTotalInput)?.focus();\r\n });\r\n }\r\n\r\n private onAddProductFilterSelect(productNumber: string[]) {\r\n if (productNumber.length > 0) {\r\n const addingProduct = this.logWeek.availableProducts.find(\r\n (availableProduct) =>\r\n availableProduct.productNumber === productNumber[0]\r\n );\r\n\r\n if (!addingProduct) {\r\n Consoler.debugWarn(\r\n 'Could not find product to add in logWeek availableProducts..',\r\n productNumber\r\n );\r\n return;\r\n }\r\n\r\n this.initializeAddingProduct(addingProduct);\r\n this.$emit('add', this.logWeekProduct);\r\n if (this.logWeek.addingProduct?.weekGrouping) {\r\n this.focusOnWeekTotal();\r\n }\r\n } else {\r\n this.clearAddingProduct();\r\n }\r\n }\r\n\r\n private onSwitchToDaily() {\r\n if (this.logWeek.addingProduct !== null) {\r\n this.logWeek.addingProduct.weekGrouping = false;\r\n this.totalValue = '';\r\n }\r\n }\r\n\r\n private onSwitchToWeekly() {\r\n if (this.logWeek.addingProduct !== null) {\r\n this.logWeek.addingProduct.weekGrouping = true;\r\n this.totalValue = '';\r\n this.focusOnWeekTotal();\r\n }\r\n }\r\n\r\n private onSwitchToWeeklyEditing() {\r\n if (this.logWeekProduct !== null) {\r\n this.logWeekProduct.weekGrouping = true;\r\n this.logWeekProduct.changedWeekGrouping =\r\n !this.logWeekProduct.changedWeekGrouping;\r\n this.focusOnWeekTotal();\r\n }\r\n }\r\n\r\n private onSwitchToDailyEditing() {\r\n if (this.logWeekProduct !== null) {\r\n this.logWeekProduct.weekGrouping = false;\r\n this.logWeekProduct.changedWeekGrouping =\r\n !this.logWeekProduct.changedWeekGrouping;\r\n\r\n let daysInLogWeek = 0;\r\n if (this.isDateInFuture(this.logWeek.toDate)) {\r\n daysInLogWeek =\r\n this.$moment()\r\n .startOf('day')\r\n .diff(this.$moment(this.logWeek.fromDate), 'days') + 1;\r\n } else {\r\n daysInLogWeek =\r\n this.$moment(this.logWeek.toDate).diff(\r\n this.$moment(this.logWeek.fromDate),\r\n 'days'\r\n ) + 1;\r\n }\r\n\r\n const totalPerDay = Math.floor(\r\n this.logWeekProduct.totalConsumptionQuantity / daysInLogWeek\r\n );\r\n let remainder =\r\n this.logWeekProduct.totalConsumptionQuantity % daysInLogWeek;\r\n\r\n this.logWeekProduct.days = this.logWeek.datesOfWeek.map(\r\n (d, dayIndex) => ({\r\n consumptionQuantity: !this.isDateInFuture(d.date)\r\n ? totalPerDay\r\n : undefined,\r\n consumptions: [],\r\n newQuantity: !this.isDateInFuture(d.date) ? totalPerDay : undefined,\r\n isOpen:\r\n (this.logWeekProduct?.openAllDates ||\r\n this.logWeekProduct?.openSpecificDates.some(\r\n (openDate) =>\r\n openDate === this.logWeek.datesOfWeek[dayIndex].date\r\n )) ??\r\n false,\r\n })\r\n );\r\n\r\n while (remainder > 0) {\r\n for (let i = 0; i < this.logWeekProduct.days.length; i++) {\r\n if (remainder === 0) {\r\n break;\r\n }\r\n this.logWeekProduct.days[i].consumptionQuantity! += 1;\r\n this.logWeekProduct.days[i].newQuantity =\r\n this.logWeekProduct.days[i].consumptionQuantity;\r\n remainder -= 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\r\n }\r\n\r\n private onEditClick() {\r\n this.$emit('edit');\r\n\r\n this.$nextTick(() => {\r\n if (this.logWeekProduct?.weekGrouping) {\r\n this.focusOnWeekTotal();\r\n }\r\n });\r\n }\r\n\r\n private onCancelEditClick() {\r\n if (this.addNotEdit) {\r\n this.clearAddingProduct();\r\n } else {\r\n this.resetEditingProduct();\r\n }\r\n\r\n this.$emit('cancelEdit');\r\n }\r\n\r\n private onDayQuantityChange() {\r\n const totalValue = this.getTotalConsumptionQuantityByDays();\r\n this.totalValue = totalValue.toString();\r\n if (this.logWeekProduct !== null) {\r\n this.logWeekProduct.newTotalConsumptionQuantity = totalValue;\r\n }\r\n }\r\n\r\n private onTotalQuantityInput(val: string) {\r\n if (this.logWeekProduct === null) {\r\n return;\r\n }\r\n\r\n this.logWeekProduct.newTotalConsumptionQuantity = Number(val);\r\n this.totalValue = val;\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!./SmiConsumptionLogWeekProductRow.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!./SmiConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogWeekProductRow.vue?vue&type=template&id=0eccbdb3&scoped=true&\"\nimport script from \"./SmiConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionLogWeekProductRow.vue?vue&type=style&index=0&id=0eccbdb3&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 \"0eccbdb3\",\n null\n \n)\n\nexport default component.exports","import moment from 'moment';\r\nimport Vue from 'vue';\r\n\r\nVue.filter('weekday', (value: string) => weekdayFilter(value));\r\n\r\nexport function weekdayFilter(value: moment.MomentInput): number {\r\n return moment(value).weekday();\r\n}\r\n","import { SmiConsumptionLogWeekProductDay } from './SmiConsumptionLogWeekProductDay';\r\n\r\nexport interface SmiConsumptionLogWeekExistingProduct {\r\n productNumber: string;\r\n totalConsumptionQuantity: number;\r\n days: SmiConsumptionLogWeekProductDay[];\r\n weekGrouping: boolean;\r\n weekGroupingCreatedDate?: string;\r\n weekGroupingCreatedByName?: string;\r\n openAllDates: boolean;\r\n openSpecificDates: string[];\r\n\r\n // UI set fields:\r\n productDisplayName: string;\r\n isEditing: boolean;\r\n newTotalConsumptionQuantity: number;\r\n changedWeekGrouping: boolean;\r\n}\r\n\r\nexport function resetSmiConsumptionLogWeekProductQuantities(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n): void {\r\n logWeekProduct.newTotalConsumptionQuantity =\r\n logWeekProduct.totalConsumptionQuantity;\r\n\r\n for (const day of logWeekProduct.days) {\r\n day.newQuantity = day.consumptionQuantity;\r\n }\r\n}\r\n","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 smiConsumptionService from '@/services/SmiConsumptionService';\r\nimport { SmiConsumptionLogsByDates } from '@/models/Smi/Consumptions/SmiConsumptionLogsByDates';\r\nimport { resetSmiConsumptionLogWeekProductQuantities } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { ReportSmiConsumptionByDays } from '@/models/Smi/Consumptions/ReportSmiConsumptionByDays';\r\nimport { ReportSmiConsumptionByWeek } from '@/models/Smi/Consumptions/ReportSmiConsumptionByWeek';\r\n\r\nexport interface Search {\r\n from: Date;\r\n to: Date;\r\n data: SmiConsumptionLogsByDates;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiConsumptionLogs',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiConsumptionLogsModule extends VuexModule {\r\n public search: Search | null = null;\r\n\r\n private common = new CommonStore(10); // 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 logMonth of payload.data.logMonths) {\r\n for (const logWeek of logMonth.logWeeks) {\r\n logWeek.addingProduct = null;\r\n\r\n for (const logWeekProduct of logWeek.existingProducts) {\r\n logWeekProduct.productDisplayName =\r\n payload.data.logProducts.find(\r\n (p) => p.productNumber === logWeekProduct.productNumber\r\n )?.displayName ?? logWeekProduct.productNumber;\r\n\r\n logWeekProduct.isEditing = false;\r\n resetSmiConsumptionLogWeekProductQuantities(logWeekProduct);\r\n\r\n for (\r\n let dayIndex = 0;\r\n dayIndex < logWeekProduct.days.length;\r\n dayIndex++\r\n ) {\r\n logWeekProduct.days[dayIndex].isOpen =\r\n logWeekProduct.openAllDates ||\r\n logWeekProduct.openSpecificDates.some(\r\n (openDate) => openDate === logWeek.datesOfWeek[dayIndex].date\r\n );\r\n }\r\n }\r\n\r\n for (const logWeekProduct of logWeek.availableProducts) {\r\n logWeekProduct.productDisplayName =\r\n payload.data.logProducts.find(\r\n (p) => p.productNumber === logWeekProduct.productNumber\r\n )?.displayName ?? logWeekProduct.productNumber;\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: {\r\n smiWarehouseId: number;\r\n from: Date;\r\n to: Date;\r\n force?: boolean;\r\n }): Promise {\r\n const loadingId = `${\r\n payload.smiWarehouseId\r\n }|${payload.from.toISOString()}|${payload.to.toISOString()}`;\r\n\r\n if (\r\n !payload.force &&\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 = smiConsumptionService\r\n .getConsumptionsByDates(payload.smiWarehouseId, payload.from, payload.to)\r\n .then((response) => {\r\n Consoler.debugLog('Load smiConsumptionLogs success', response);\r\n this.commitSetSearch({\r\n from: payload.from,\r\n to: payload.to,\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 smiConsumptionLogs 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 @Action({ rawError: true })\r\n public async dispatchReportByDays(payload: {\r\n smiWarehouseId: number;\r\n consumptionByDays: ReportSmiConsumptionByDays;\r\n }): Promise {\r\n return smiConsumptionService\r\n .reportConsumptionsByDays(\r\n payload.smiWarehouseId,\r\n payload.consumptionByDays\r\n )\r\n .then(() => {\r\n Consoler.debugLog('Report smiConsumptionLogs byDays success');\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Report smiConsumptionLogs byDays failed', error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n @Action\r\n public async dispatchReportByWeek(payload: {\r\n smiWarehouseId: number;\r\n consumptionByWeek: ReportSmiConsumptionByWeek;\r\n }): Promise {\r\n return smiConsumptionService\r\n .reportConsumptionsByWeek(\r\n payload.smiWarehouseId,\r\n payload.consumptionByWeek\r\n )\r\n .then(() => {\r\n Consoler.debugLog('Report smiConsumptionLogs byWeek success');\r\n })\r\n .catch((error) => {\r\n Consoler.debugLog('Report smiConsumptionLogs byWeek failed', error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nexport const smiConsumptionLogsModule = getModule(SmiConsumptionLogsModule);\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiConsumptionLogWeekProductRow from '@/components/SmiConsumptionLogWeekProductRow.vue';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { weekdayFilter } from '@/filters/weekday';\r\nimport { dayFilter } from '@/filters/day';\r\nimport { SmiConsumptionLogWeek as SmiConsumptionLogWeekModel } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { SmiConsumptionLogProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogProduct';\r\nimport { smiConsumptionLogsModule } from '@/store/modules/smiConsumptionLogs';\r\nimport moment from 'moment';\r\n\r\n@Component({\r\n components: {\r\n SmiConsumptionLogWeekProductRow,\r\n },\r\n})\r\nexport default class SmiConsumptionLogWeek extends Vue {\r\n @Prop({ required: true })\r\n public logWeek!: SmiConsumptionLogWeekModel;\r\n @Prop({ required: true })\r\n public month!: number;\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public invalid!: boolean;\r\n @Prop({ required: true })\r\n public isEditing!: boolean;\r\n @Prop({ required: true })\r\n public isAdding!: boolean;\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public errorSaving!: boolean;\r\n @Prop({ required: true })\r\n public isLastWeek!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n\r\n private readonly dateRangeFilter = dateRangeFilter;\r\n private readonly weekdayFilter = weekdayFilter;\r\n private readonly dayFilter = dayFilter;\r\n\r\n private get isLogWeekCurrentWeek(): boolean {\r\n return Dates.isCurrentWeek(this.fromDate);\r\n }\r\n\r\n private get fromDate(): moment.Moment {\r\n return this.$moment(this.logWeek.fromDate);\r\n }\r\n\r\n private get toDate(): moment.Moment {\r\n return this.$moment(this.logWeek.toDate);\r\n }\r\n\r\n private get isWeekSplittedBetweenMonths(): boolean {\r\n return this.fromDate.month() !== this.toDate.month();\r\n }\r\n\r\n private get isEditingOrAdding(): boolean {\r\n return this.isEditing || this.isAdding;\r\n }\r\n\r\n private get isEditingOrAddingOnThisLogWeek(): boolean {\r\n return (\r\n this.logWeek.addingProduct !== null ||\r\n this.logWeek.existingProducts.some((product) => product.isEditing)\r\n );\r\n }\r\n\r\n private get isEditingOrAddingDailiesOnThisLogWeek(): boolean {\r\n return (\r\n (this.logWeek.addingProduct !== null &&\r\n !this.logWeek.addingProduct.weekGrouping) ||\r\n this.logWeek.existingProducts.some(\r\n (product) => product.isEditing && !product.weekGrouping\r\n )\r\n );\r\n }\r\n\r\n private get availableProducts(): SmiConsumptionLogProduct[] {\r\n return this.logProducts.filter((logProduct) =>\r\n this.logWeek.availableProducts.some(\r\n (logWeekProduct) =>\r\n logWeekProduct.productNumber === logProduct.productNumber\r\n )\r\n );\r\n }\r\n\r\n private get logProducts(): SmiConsumptionLogProduct[] {\r\n return smiConsumptionLogsModule.search?.data.logProducts ?? [];\r\n }\r\n\r\n private isDateToday(date: string) {\r\n return Dates.isToday(date);\r\n }\r\n\r\n private isProductFiltered(\r\n consumptionLogWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ): boolean {\r\n if (this.filteredProductNumbers.length === 0) {\r\n return true;\r\n }\r\n if (consumptionLogWeekProduct.productNumber === undefined) {\r\n return false;\r\n }\r\n return this.filteredProductNumbers.some(\r\n (productNumber) =>\r\n consumptionLogWeekProduct.productNumber === productNumber\r\n );\r\n }\r\n\r\n private onEditLogWeekProduct(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ) {\r\n this.$emit('editLogWeekProduct', logWeekProduct);\r\n }\r\n\r\n private onCancelEditLogWeekProduct(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ) {\r\n this.$emit('cancelEditLogWeekProduct', logWeekProduct);\r\n }\r\n\r\n private onAddLogWeekProduct(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ) {\r\n this.$emit('addLogWeekProduct', logWeekProduct);\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!./SmiConsumptionLogWeek.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!./SmiConsumptionLogWeek.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogWeek.vue?vue&type=template&id=0ae4c6d7&scoped=true&\"\nimport script from \"./SmiConsumptionLogWeek.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogWeek.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionLogWeek.vue?vue&type=style&index=0&id=0ae4c6d7&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 \"0ae4c6d7\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiConsumptionLogWeek from '@/components/SmiConsumptionLogWeek.vue';\r\nimport { SmiConsumptionLogWeek as SmiConsumptionLogWeekModel } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport {\r\n resetSmiConsumptionLogWeekProductQuantities,\r\n SmiConsumptionLogWeekExistingProduct,\r\n} from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { SmiConsumptionLogMonth as SmiConsumptionLogMonthModel } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\n@Component({\r\n components: {\r\n SmiConsumptionLogWeek,\r\n },\r\n})\r\nexport default class SmiConsumptionLogMonth extends Vue {\r\n @Prop({ required: true })\r\n public logMonth!: SmiConsumptionLogMonthModel;\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public invalid!: boolean;\r\n @Prop({ required: true })\r\n public isEditing!: boolean;\r\n @Prop({ required: true })\r\n public isAdding!: boolean;\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n @Prop({ required: true })\r\n public errorSaving!: boolean;\r\n\r\n private hasBeenSubmitted: boolean = false;\r\n\r\n private get logWeeksLatestFirst(): SmiConsumptionLogWeekModel[] {\r\n return this.logMonth.logWeeks.slice().reverse();\r\n }\r\n\r\n private getChangedLogWeekAndProduct(): {\r\n week: SmiConsumptionLogWeekModel;\r\n product: SmiConsumptionLogWeekExistingProduct;\r\n } | null {\r\n for (const logWeek of this.logMonth.logWeeks) {\r\n const item =\r\n logWeek.addingProduct !== null\r\n ? logWeek.addingProduct\r\n : logWeek.existingProducts.find((product) => product.isEditing);\r\n\r\n if (item) {\r\n return {\r\n week: logWeek,\r\n product: item,\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private onEditLogWeekProduct(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ) {\r\n this.resetAllProductsEditing();\r\n logWeekProduct.isEditing = true;\r\n }\r\n\r\n private onCancelEditLogWeekProduct(\r\n logWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ) {\r\n resetSmiConsumptionLogWeekProductQuantities(logWeekProduct);\r\n // this.resetAllProductsEditing();\r\n logWeekProduct.isEditing = false;\r\n }\r\n\r\n private onAddLogWeekProduct() {\r\n this.resetAllProductsEditing();\r\n }\r\n\r\n private resetAllProductsEditing(): void {\r\n this.$emit('reset');\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\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!./SmiConsumptionLogMonth.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!./SmiConsumptionLogMonth.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogMonth.vue?vue&type=template&id=3d534775&\"\nimport script from \"./SmiConsumptionLogMonth.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogMonth.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\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiConsumptionLogMonth from '@/components/SmiConsumptionLogMonth.vue';\r\nimport { SmiConsumptionLogWeek as SmiConsumptionLogWeekModel } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { ReportSmiConsumptionByWeek } from '@/models/Smi/Consumptions/ReportSmiConsumptionByWeek';\r\nimport { ReportSmiConsumptionDay } from '@/models/Smi/Consumptions/ReportSmiConsumptionDay';\r\nimport { ReportSmiConsumptionByDays } from '@/models/Smi/Consumptions/ReportSmiConsumptionByDays';\r\nimport { SmiConsumptionLogMonth as SmiConsumptionLogMonthModel } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\n@Component({\r\n components: {\r\n SmiConsumptionLogMonth,\r\n },\r\n})\r\nexport default class SmiConsumptionLog extends Vue {\r\n @Prop({ required: true })\r\n public logMonths!: SmiConsumptionLogMonthModel[];\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public isSaving!: boolean;\r\n @Prop({ required: true })\r\n public isAllowedToEdit!: boolean;\r\n @Prop({ required: true })\r\n public errorSaving!: boolean;\r\n\r\n private hasBeenSubmitted: boolean = false;\r\n\r\n private get logMonthsLatestFirst(): SmiConsumptionLogMonthModel[] {\r\n return this.logMonths.slice().reverse();\r\n }\r\n\r\n private get isEditing(): boolean {\r\n return this.logMonths.some((logMonth) =>\r\n logMonth.logWeeks.some((logWeek) =>\r\n logWeek.existingProducts.some((product) => product.isEditing)\r\n )\r\n );\r\n }\r\n\r\n private get isAdding(): boolean {\r\n return this.logMonths.some((logMonth) =>\r\n logMonth.logWeeks.some((logWeek) => logWeek.addingProduct !== null)\r\n );\r\n }\r\n\r\n private getChangedLogWeekAndProduct(): {\r\n week: SmiConsumptionLogWeekModel;\r\n month: number;\r\n product: SmiConsumptionLogWeekExistingProduct;\r\n } | null {\r\n for (const logMonth of this.logMonths) {\r\n for (const logWeek of logMonth.logWeeks) {\r\n const item =\r\n logWeek.addingProduct !== null\r\n ? logWeek.addingProduct\r\n : logWeek.existingProducts.find((product) => product.isEditing);\r\n\r\n if (item) {\r\n return {\r\n week: logWeek,\r\n month: logMonth.month,\r\n product: item,\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private onReset(): void {\r\n for (const logMonth of this.logMonths) {\r\n for (const logWeek of logMonth.logWeeks) {\r\n for (const product of logWeek.existingProducts) {\r\n product.isEditing = false;\r\n }\r\n }\r\n }\r\n this.$emit('reset');\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\r\n }\r\n\r\n private async onSubmit(): Promise {\r\n const changedItem = this.getChangedLogWeekAndProduct();\r\n if (changedItem === null) {\r\n Consoler.debugWarn('No log week product added/edited!');\r\n return Promise.reject('No log week product added/edited!');\r\n }\r\n\r\n if (changedItem.product.weekGrouping) {\r\n if (\r\n changedItem.product.newTotalConsumptionQuantity === undefined ||\r\n isNaN(changedItem.product.newTotalConsumptionQuantity) ||\r\n changedItem.product.newTotalConsumptionQuantity < 0\r\n ) {\r\n Consoler.debugWarn('No updates to send (invalid week total)');\r\n return Promise.reject('No updates to send');\r\n }\r\n\r\n const consumptionByWeek: ReportSmiConsumptionByWeek = {\r\n startOfWeekYear: changedItem.week.startOfWeekYear,\r\n weekNumber: changedItem.week.weekNumber,\r\n month: changedItem.month,\r\n productNumber: changedItem.product.productNumber,\r\n oldTotalConsumptionQuantity:\r\n changedItem.product.totalConsumptionQuantity,\r\n changedWeekGrouping: false,\r\n };\r\n\r\n if (\r\n changedItem.product.totalConsumptionQuantity !== undefined &&\r\n (changedItem.product.newTotalConsumptionQuantity === undefined ||\r\n changedItem.product.newTotalConsumptionQuantity > 0)\r\n ) {\r\n consumptionByWeek.totalConsumptionQuantity =\r\n changedItem.product.newTotalConsumptionQuantity;\r\n }\r\n\r\n if (changedItem.product.changedWeekGrouping) {\r\n consumptionByWeek.changedWeekGrouping = true;\r\n }\r\n\r\n if (\r\n changedItem.product.totalConsumptionQuantity !== undefined &&\r\n (changedItem.product.newTotalConsumptionQuantity === undefined ||\r\n changedItem.product.newTotalConsumptionQuantity === 0)\r\n ) {\r\n consumptionByWeek.removeExisting = true;\r\n }\r\n\r\n Consoler.debugLog(\r\n 'Saving consumption by week',\r\n consumptionByWeek,\r\n changedItem.product\r\n );\r\n\r\n this.$emit(\r\n 'saveConsumptionByWeek',\r\n consumptionByWeek,\r\n changedItem.product\r\n );\r\n } else {\r\n const reportDays: ReportSmiConsumptionDay[] = [];\r\n for (\r\n let dayIndex = 0;\r\n dayIndex < changedItem.product.days.length;\r\n dayIndex++\r\n ) {\r\n if (\r\n (changedItem.product.days[dayIndex].newQuantity !== undefined &&\r\n changedItem.product.days[dayIndex].newQuantity! > 0 &&\r\n changedItem.product.days[dayIndex].newQuantity !==\r\n changedItem.product.days[dayIndex].consumptionQuantity) ||\r\n (changedItem.product.changedWeekGrouping &&\r\n !this.isDateInFuture(changedItem.week.datesOfWeek[dayIndex].date))\r\n ) {\r\n reportDays.push({\r\n consumptionDate: changedItem.week.datesOfWeek[dayIndex].date,\r\n quantity: Number(changedItem.product.days[dayIndex].newQuantity),\r\n oldQuantity:\r\n changedItem.product.days[dayIndex].consumptionQuantity !==\r\n undefined\r\n ? Number(changedItem.product.days[dayIndex].consumptionQuantity)\r\n : undefined,\r\n updateExisting:\r\n changedItem.product.days[dayIndex].consumptionQuantity !==\r\n undefined,\r\n });\r\n } else if (\r\n changedItem.product.days[dayIndex].consumptionQuantity !==\r\n undefined &&\r\n (changedItem.product.days[dayIndex].newQuantity === undefined ||\r\n changedItem.product.days[dayIndex].newQuantity === '' ||\r\n changedItem.product.days[dayIndex].newQuantity === 0) &&\r\n !changedItem.product.changedWeekGrouping\r\n ) {\r\n reportDays.push({\r\n consumptionDate: changedItem.week.datesOfWeek[dayIndex].date,\r\n oldQuantity:\r\n changedItem.product.days[dayIndex].consumptionQuantity !==\r\n undefined\r\n ? Number(changedItem.product.days[dayIndex].consumptionQuantity)\r\n : undefined,\r\n removeExisting: true,\r\n });\r\n }\r\n }\r\n\r\n if (reportDays.length === 0) {\r\n Consoler.debugWarn(\r\n 'No updates to send (no days with changed quantity)'\r\n );\r\n return Promise.reject('No updates to send');\r\n }\r\n\r\n const consumptionByDays: ReportSmiConsumptionByDays = {\r\n productNumber: changedItem.product.productNumber,\r\n days: reportDays,\r\n changedWeekGrouping: changedItem.product.changedWeekGrouping,\r\n\r\n startOfWeekYear: changedItem.week.startOfWeekYear,\r\n weekNumber: changedItem.week.weekNumber,\r\n month: changedItem.month,\r\n };\r\n\r\n Consoler.debugLog(\r\n 'Saving consumption by days',\r\n consumptionByDays,\r\n changedItem.product\r\n );\r\n\r\n this.$emit(\r\n 'saveConsumptionByDays',\r\n consumptionByDays,\r\n changedItem.product\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!./SmiConsumptionLog.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!./SmiConsumptionLog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLog.vue?vue&type=template&id=40ea3b1a&\"\nimport script from \"./SmiConsumptionLog.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLog.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 (_vm.logMonths.length)?_c('div',[_c('div',{staticClass:\"c-table c-table--no-divider js-table\"},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',_vm._l((_vm.logMonthsLatestFirst),function(logMonth,monthIndex){return _c('SmiHistoricalConsumptionLogMonth',{key:monthIndex,attrs:{\"logMonth\":logMonth,\"filteredProductNumbers\":_vm.filteredProductNumbers}})}),1)])])]):_vm._e()}\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('h3',[_vm._v(_vm._s(_vm._f(\"yearAndMonth\")(_vm.logMonth.year,_vm.logMonth.month)))]),_c('div',{staticClass:\"u-background-color-white p-3 mb-6\"},[_c('div',{staticClass:\"c-table c-table--no-divider js-table\"},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',_vm._l((_vm.logWeeksLatestFirst),function(logWeek,weekIndex){return _c('SmiHistoricalConsumptionLogWeek',{key:weekIndex,attrs:{\"logWeek\":logWeek,\"month\":_vm.logMonth.month,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"isLastWeek\":weekIndex === _vm.logWeeksLatestFirst.length - 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('tbody',[_c('tr',{staticClass:\"c-table__primary c-table__primary_non_expandable consumption-week-row is-showing\"},[_c('td',[_c('span',{staticClass:\"nowrap mr-1 t-heading-5 mb-0\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeek.weekTitle', [_vm.logWeek.weekNumber]))+\" \")])]),_c('td',{staticClass:\"u-border-right u-text-right\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogWeek.columns.total'))+\" \")]),_vm._l((_vm.logWeek.datesOfWeek),function(dateOfWeek,dateIndex){return _c('td',{key:((_vm.logWeek.weekNumber) + \"|dates|\" + dateIndex),staticClass:\"u-text-right\"},[_c('div',{class:{\n 'u-bold': _vm.isDateToday(dateOfWeek.date),\n }},[(dateOfWeek.includedInMonth)?[_c('span',[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogWeek.columns.weekdays.\" + (_vm.weekdayFilter( dateOfWeek.date ))) )))]),_c('br'),_c('span',[_vm._v(_vm._s(_vm._f(\"day\")(dateOfWeek.date)))])]:_c('span',{staticClass:\"t-heading-5 u-text-muted mb-0\"},[_vm._v(\"―\")])],2)])}),_c('td',{staticClass:\"u-border-left\"})],2),_vm._l((_vm.logWeek.existingProducts),function(logWeekProduct,productIndex){return [(_vm.isProductFiltered(logWeekProduct))?_c('SmiHistoricalConsumptionLogWeekProductRow',{key:((_vm.logWeek.weekNumber) + \"|\" + productIndex),attrs:{\"logWeek\":_vm.logWeek,\"editLogWeekProduct\":logWeekProduct}}):_vm._e()]}),(_vm.logWeek.existingProducts.length === 0)?_c('tr',{staticClass:\"noproducts-row\"},[_c('td',{staticClass:\"u-text-muted\",attrs:{\"colspan\":\"99\"}},[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogWeek.noProducts.\" + (_vm.isWeekSplittedBetweenMonths ? 'splittedBetweenMonths' : 'sameMonth')) ))+\" \")])]):_vm._e(),(!_vm.isLastWeek)?_c('tr',{staticClass:\"emptyspace-row\"},[_c('td',{attrs:{\"colspan\":\"99\"}})]):_vm._e()],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('tr',{staticClass:\"c-table__secondary active\"},[_c('td',{attrs:{\"colspan\":1}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.logWeekProduct.productDisplayName)+\" \")])]),_c('td',{staticClass:\"u-border-right u-text-right nowrap\"}),_vm._l((_vm.logWeek.datesOfWeek),function(dateOfWeek,dateIndex){return _c('td',{key:dateIndex,staticClass:\"u-text-right\"},[[(_vm.logWeekProduct && _vm.logWeekProduct.weekGrouping)?_c('span',[_vm._v(\" - \")]):(\n _vm.logWeekProduct && _vm.logWeekProduct.days[dateIndex].consumptionQuantity\n )?_c('span',{staticClass:\"u-bold\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.logWeekProduct.days[dateIndex].consumptionQuantity))+\" t\")]):_vm._e()]],2)}),_c('td')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport SmiConsumptionLogQuantityInput from '@/components/SmiConsumptionLogQuantityInput.vue';\r\nimport SmiConsumptionLogQuantityTotalInput from '@/components/SmiConsumptionLogQuantityTotalInput.vue';\r\nimport { dayFilter } from '@/filters/day';\r\nimport { SmiConsumptionLogWeek } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\n\r\n@Component({\r\n components: {\r\n ProductsTreeSelect,\r\n SmiConsumptionLogQuantityInput,\r\n SmiConsumptionLogQuantityTotalInput,\r\n },\r\n})\r\nexport default class SmiHistoricalConsumptionLogWeekProductRow extends Vue {\r\n @Prop({ required: true })\r\n public logWeek!: SmiConsumptionLogWeek;\r\n @Prop({ required: false, default: () => null })\r\n public editLogWeekProduct!: SmiConsumptionLogWeekExistingProduct | null;\r\n\r\n private readonly dayFilter = dayFilter;\r\n\r\n private totalValue: string = '';\r\n\r\n private get logWeekProduct(): SmiConsumptionLogWeekExistingProduct | null {\r\n return this.editLogWeekProduct;\r\n }\r\n\r\n private get allDatesWithinSameMonth(): boolean {\r\n return (\r\n this.logWeek.datesOfWeek.length <= 1 ||\r\n this.$moment(this.logWeek.datesOfWeek[0].date).isSame(\r\n this.logWeek.datesOfWeek[this.logWeek.datesOfWeek.length - 1].date,\r\n 'month'\r\n )\r\n );\r\n }\r\n\r\n private focusOnWeekTotal() {\r\n this.$nextTick(() => {\r\n (this.$refs.totalInput as SmiConsumptionLogQuantityTotalInput)?.focus();\r\n });\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\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!./SmiHistoricalConsumptionLogWeekProductRow.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!./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=template&id=cba4a992&scoped=true&\"\nimport script from \"./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=style&index=0&id=cba4a992&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 \"cba4a992\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiHistoricalConsumptionLogWeekProductRow from '@/components/SmiHistoricalConsumptionLogWeekProductRow.vue';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { weekdayFilter } from '@/filters/weekday';\r\nimport { dayFilter } from '@/filters/day';\r\nimport { SmiConsumptionLogWeek as SmiConsumptionLogWeekModel } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { SmiConsumptionLogProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogProduct';\r\nimport { smiConsumptionLogsModule } from '@/store/modules/smiConsumptionLogs';\r\nimport moment from 'moment';\r\n\r\n@Component({\r\n components: {\r\n SmiHistoricalConsumptionLogWeekProductRow,\r\n },\r\n})\r\nexport default class SmiHistoricalConsumptionLogWeek extends Vue {\r\n @Prop({ required: true })\r\n public logWeek!: SmiConsumptionLogWeekModel;\r\n @Prop({ required: true })\r\n public month!: number;\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n @Prop({ required: true })\r\n public isLastWeek!: boolean;\r\n\r\n private readonly dateRangeFilter = dateRangeFilter;\r\n private readonly weekdayFilter = weekdayFilter;\r\n private readonly dayFilter = dayFilter;\r\n\r\n private get isLogWeekCurrentWeek(): boolean {\r\n return Dates.isCurrentWeek(this.fromDate);\r\n }\r\n\r\n private get fromDate(): moment.Moment {\r\n return this.$moment(this.logWeek.fromDate);\r\n }\r\n\r\n private get toDate(): moment.Moment {\r\n return this.$moment(this.logWeek.toDate);\r\n }\r\n\r\n private get isWeekSplittedBetweenMonths(): boolean {\r\n return this.fromDate.month() !== this.toDate.month();\r\n }\r\n\r\n private get logProducts(): SmiConsumptionLogProduct[] {\r\n return smiConsumptionLogsModule.search?.data.logProducts ?? [];\r\n }\r\n\r\n private isDateToday(date: string) {\r\n return Dates.isToday(date);\r\n }\r\n\r\n private isProductFiltered(\r\n consumptionLogWeekProduct: SmiConsumptionLogWeekExistingProduct\r\n ): boolean {\r\n if (this.filteredProductNumbers.length === 0) {\r\n return true;\r\n }\r\n if (consumptionLogWeekProduct.productNumber === undefined) {\r\n return false;\r\n }\r\n return this.filteredProductNumbers.some(\r\n (productNumber) =>\r\n consumptionLogWeekProduct.productNumber === productNumber\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!./SmiHistoricalConsumptionLogWeek.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!./SmiHistoricalConsumptionLogWeek.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiHistoricalConsumptionLogWeek.vue?vue&type=template&id=7e167870&scoped=true&\"\nimport script from \"./SmiHistoricalConsumptionLogWeek.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiHistoricalConsumptionLogWeek.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiHistoricalConsumptionLogWeek.vue?vue&type=style&index=0&id=7e167870&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 \"7e167870\",\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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiHistoricalConsumptionLogWeek from '@/components/SmiHistoricalConsumptionLogWeek.vue';\r\nimport { SmiConsumptionLogWeek as SmiConsumptionLogWeekModel } from '@/models/Smi/Consumptions/SmiConsumptionLogWeek';\r\nimport { SmiConsumptionLogMonth as SmiConsumptionLogMonthModel } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\n@Component({\r\n components: {\r\n SmiHistoricalConsumptionLogWeek,\r\n },\r\n})\r\nexport default class SmiHistoricalConsumptionLogMonth extends Vue {\r\n @Prop({ required: true })\r\n public logMonth!: SmiConsumptionLogMonthModel;\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n\r\n private get logWeeksLatestFirst(): SmiConsumptionLogWeekModel[] {\r\n return this.logMonth.logWeeks.slice().reverse();\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\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!./SmiHistoricalConsumptionLogMonth.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!./SmiHistoricalConsumptionLogMonth.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiHistoricalConsumptionLogMonth.vue?vue&type=template&id=e516686c&\"\nimport script from \"./SmiHistoricalConsumptionLogMonth.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiHistoricalConsumptionLogMonth.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\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport SmiHistoricalConsumptionLogMonth from '@/components/SmiHistoricalConsumptionLogMonth.vue';\r\nimport { SmiConsumptionLogMonth as SmiConsumptionLogMonthModel } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\n@Component({\r\n components: {\r\n SmiHistoricalConsumptionLogMonth,\r\n },\r\n})\r\nexport default class SmiHistoricalConsumptionLog extends Vue {\r\n @Prop({ required: true })\r\n public logMonths!: SmiConsumptionLogMonthModel[];\r\n @Prop({ required: true })\r\n public filteredProductNumbers!: string[];\r\n\r\n private get logMonthsLatestFirst(): SmiConsumptionLogMonthModel[] {\r\n return this.logMonths.slice().reverse();\r\n }\r\n\r\n private isDateInFuture(date: string) {\r\n return this.$moment().isBefore(date, 'day');\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!./SmiHistoricalConsumptionLog.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!./SmiHistoricalConsumptionLog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiHistoricalConsumptionLog.vue?vue&type=template&id=3bab3b22&\"\nimport script from \"./SmiHistoricalConsumptionLog.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiHistoricalConsumptionLog.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('Modal',{ref:\"modal\",attrs:{\"id\":\"smiConsumptionLogConfirmationModal\",\"title\":_vm.$t('smiConsumptionLogConfirmationModal.title'),\"showFooter\":true,\"closeableByOutsideClickAndEscKey\":false,\"isLarge\":true},scopedSlots:_vm._u([{key:\"body\",fn:function(){return [_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.subtitle'))+\" \")]),_c('table',{staticClass:\"keyvalue keyvalue--values-strong\"},[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.product'))+\":\")]),_c('td',[_vm._v(_vm._s(_vm.productDisplayName))])]),_c('tr',[_c('th',[_vm._v(\" \"+_vm._s(_vm.$t( 'smiConsumptionLogConfirmationModal.productCurrentStockQuantity' ))+\": \")]),_c('td',[(_vm.productCurrentStockQuantity !== null)?[_vm._v(_vm._s(_vm._f(\"number\")(_vm.productCurrentStockQuantity))+\" t\")]:_c('span',{staticClass:\"u-color-red\"},[_vm._v(_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.unknown')))])],2)]),_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.week'))+\":\")]),_c('td',[_vm._v(\" \"+_vm._s(_vm.weekText)+\" \")])]),_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.quantity'))+\":\")]),_c('td',[(_vm.totalQuantityChange)?_c('span',[_vm._v(_vm._s(_vm.numberFilter(_vm.totalQuantityChange))+\" t\")]):_vm._e()])])]),(_vm.consumptionByDays && !_vm.reportByWeek)?_c('div',[_c('div',{staticClass:\"c-table c-table--dense\"},[_c('div',{staticClass:\"c-table__scroll-container\"},[_c('table',[_c('tbody',[_c('tr',{staticClass:\"c-table__primary c-table__primary_non_expandable consumption-week-row is-showing\"},_vm._l((_vm.consumptionByDays.days),function(day,dayIndex){return _c('td',{key:dayIndex},[_c('span',[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogWeek.columns.weekdays.\" + (_vm.weekdayFilter( day.consumptionDate ))) ))+\" \")]),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(_vm.dayAndShortMonthFilter(day.consumptionDate))+\" \")])])}),0),_c('tr',{staticClass:\"c-table__secondary active\"},_vm._l((_vm.consumptionByDays.days),function(day,dayIndex){return _c('td',{key:dayIndex},[_vm._v(\" \"+_vm._s(_vm.numberFilter(day.quantity ? day.quantity : 0))+\" \"),(day.oldQuantity)?[_vm._v(_vm._s(_vm.getQuantityChange( day.quantity ? day.quantity : 0, day.oldQuantity ? day.oldQuantity : 0 ))+\" \")]:_vm._e(),_vm._v(\" t \")],2)}),0)])])])])]):_vm._e(),(_vm.updatedOriginalStock !== null)?_c('div',{staticClass:\"c-form c-form--validated mt-3\"},[(_vm.stockLevelReportRequired)?_c('p',{staticClass:\"u-color-red u-bold\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.stockLevel.warning'))+\" \")]):_vm._e(),_c('strong',[_vm._v(_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.stockLevel.title'))+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.stockLevel.introduction', [ _vm.productDisplayName ]))+\" \")]),_c('div',{staticClass:\"d-flex align-items-center\"},[_c('SmiConsumptionLogStockQuantityInput',{attrs:{\"originalValue\":_vm.updatedOriginalStock,\"value\":_vm.reportStockQuantity,\"disabled\":_vm.isSaving},on:{\"input\":_vm.onReportStockQuantityInput}}),_c('span',{staticClass:\"ml-1\"},[_vm._v(\"t\")]),(_vm.stockLevelDeviationText)?_c('span',{staticClass:\"ml-2\"},[_vm._v(_vm._s(_vm.stockLevelDeviationText))]):_vm._e(),(\n !_vm.isSaving &&\n _vm.reportStockQuantity !== _vm.updatedOriginalStock &&\n !(_vm.reportStockQuantity === null && _vm.updatedOriginalStock < 0)\n )?_c('button',{staticClass:\"o-button o-button--black ml-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onResetReportStockQuantityClick}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.stockLevel.reset'))+\" \")]):_vm._e()],1)]):_vm._e()]},proxy:true},{key:\"footer\",fn:function(){return [(_vm.isSaving)?_c('div',[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.errorSaving)?_c('div',{staticClass:\"c-alert c-alert--red mb-3\",attrs:{\"data-element-id\":\"smiConsumptionLogConfirmationModal-errorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[(_vm.errorConflictDetails !== undefined)?[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiConsumptionLogConfirmationModal.error.\" + (_vm.errorConflictDetails.type)), [_vm.numberFilter(_vm.errorConflictDetails.availableQuantity)] ))+\" \")]:[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.error.general'))+\" \")]],2),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"smiConsumptionLogConfirmationModal-errorAlert\"}})]):_vm._e(),_c('div',{staticClass:\"d-flex justify-content-end\"},[_c('button',{staticClass:\"o-button o-button--white mr-2\",attrs:{\"disabled\":_vm.isSaving},on:{\"click\":function($event){$event.preventDefault();return _vm.onClose.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.cancel'))+\" \")]),_c('button',{staticClass:\"o-button o-button--lime-green mr-2\",attrs:{\"disabled\":_vm.isSaving || !_vm.isAllowedToEdit || _vm.stockLevelIsInvalid},on:{\"click\":function($event){$event.preventDefault();return _vm.onSubmit.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiConsumptionLogConfirmationModal.confirm'))+\" \")])])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport Modal from '@/components/general/Modal.vue';\r\nimport { ReportSmiConsumptionByDays } from '@/models/Smi/Consumptions/ReportSmiConsumptionByDays';\r\nimport { ReportSmiConsumptionByWeek } from '@/models/Smi/Consumptions/ReportSmiConsumptionByWeek';\r\nimport { SmiConsumptionReportConflictDetails } from '@/models/Smi/Consumptions/SmiConsumptionReportConflictDetails';\r\nimport { dateRangeFilter } from '@/filters/dateRange';\r\nimport { weekdayFilter } from '@/filters/weekday';\r\nimport { dayAndShortMonthFilter } from '@/filters/dayAndShortMonth';\r\nimport { smiConsumptionLogsModule } from '@/store/modules/smiConsumptionLogs';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { AxiosError } from 'axios';\r\nimport { dateWithTimeFilter } from '@/filters/dateWithTime';\r\nimport SmiConsumptionLogStockQuantityInput from './SmiConsumptionLogStockQuantityInput.vue';\r\nimport { ReportSmiWarehouseStockDeviation } from '@/models/Smi/Warehouses/ReportSmiWarehouseStockDeviation';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n SmiConsumptionLogStockQuantityInput,\r\n },\r\n})\r\nexport default class SmiConsumptionLogConfirmationModal extends Vue {\r\n @Prop({ required: true })\r\n private consumptionByDays!: ReportSmiConsumptionByDays | null;\r\n @Prop({ required: true })\r\n private consumptionByWeek!: ReportSmiConsumptionByWeek | null;\r\n @Prop({ required: true })\r\n private reportByWeek!: boolean;\r\n @Prop({ required: true })\r\n private isAllowedToEdit!: boolean;\r\n @Prop({ required: true })\r\n private selectedSmiWarehouseId!: number;\r\n @Prop({ required: true })\r\n private productDisplayName!: string;\r\n @Prop({ required: true })\r\n private productCurrentStockQuantity!: number | null;\r\n\r\n private readonly weekdayFilter = weekdayFilter;\r\n private readonly dayAndShortMonthFilter = dayAndShortMonthFilter;\r\n private readonly dateWithTimeFilter = dateWithTimeFilter;\r\n private readonly numberFilter = numberFilter;\r\n\r\n private isSaving: boolean = false;\r\n private errorSaving: boolean = false;\r\n private errorConflictDetails:\r\n | SmiConsumptionReportConflictDetails\r\n | undefined = undefined;\r\n private reportStockQuantity: number | string | null = null;\r\n\r\n private get totalQuantityChange(): number | undefined {\r\n if (!this.reportByWeek && this.consumptionByDays !== null) {\r\n return this.consumptionByDays.days\r\n .filter((day) => day.quantity !== 0)\r\n .reduce(\r\n (sum, day) => sum + (day.quantity ?? 0) - (day.oldQuantity ?? 0),\r\n 0\r\n );\r\n } else if (this.reportByWeek && this.consumptionByWeek !== null) {\r\n return (\r\n (this.consumptionByWeek.totalConsumptionQuantity ?? 0) -\r\n (this.consumptionByWeek.oldTotalConsumptionQuantity ?? 0)\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private get updatedOriginalStock(): number | null {\r\n return this.totalQuantityChange !== undefined &&\r\n this.productCurrentStockQuantity !== null\r\n ? this.productCurrentStockQuantity - this.totalQuantityChange\r\n : null;\r\n }\r\n\r\n private get stockLevelReportRequired(): boolean {\r\n return this.updatedOriginalStock !== null && this.updatedOriginalStock < 0;\r\n }\r\n\r\n private get stockLevelReportIsInvalid(): boolean {\r\n return (\r\n this.reportStockQuantity === null ||\r\n this.reportStockQuantity === '' ||\r\n isNaN(Number(this.reportStockQuantity)) ||\r\n this.reportStockQuantity < 0\r\n );\r\n }\r\n\r\n private get stockLevelReportChangedSuccessfully(): boolean {\r\n return (\r\n !this.stockLevelReportIsInvalid &&\r\n this.reportStockQuantity !== this.updatedOriginalStock\r\n );\r\n }\r\n\r\n private get stockLevelIsInvalid(): boolean {\r\n return (\r\n this.stockLevelReportIsInvalid ||\r\n (this.stockLevelReportRequired &&\r\n !this.stockLevelReportChangedSuccessfully)\r\n );\r\n }\r\n\r\n private get stockLevelDeviationText(): string | null {\r\n if (\r\n this.updatedOriginalStock !== null &&\r\n this.stockLevelReportChangedSuccessfully\r\n ) {\r\n const deviation =\r\n Number(this.reportStockQuantity) - this.updatedOriginalStock;\r\n return `(${deviation > 0 ? '+' : ''}${numberFilter(deviation)} t)`;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private get weekText(): string {\r\n if (\r\n !this.reportByWeek &&\r\n this.consumptionByDays !== null &&\r\n this.consumptionByDays.weekNumber !== undefined &&\r\n this.consumptionByDays.startOfWeekYear !== undefined\r\n ) {\r\n return this.getWeekText(\r\n this.consumptionByDays.weekNumber,\r\n this.consumptionByDays.startOfWeekYear\r\n );\r\n } else if (this.reportByWeek && this.consumptionByWeek !== null) {\r\n return this.getWeekText(\r\n this.consumptionByWeek.weekNumber,\r\n this.consumptionByWeek.startOfWeekYear\r\n );\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private getQuantityChange(newQuantity: number, oldQuantity: number): string {\r\n const quantityChange = newQuantity - oldQuantity;\r\n if (quantityChange === 0) {\r\n return '';\r\n }\r\n return `(${quantityChange > 0 ? '+' : ''}${numberFilter(quantityChange)})`;\r\n }\r\n\r\n private getWeekText(weekNumber: number, year: number): string {\r\n const fromDate = this.$moment()\r\n .day('Monday')\r\n .year(year)\r\n .isoWeek(weekNumber)\r\n .toDate();\r\n const toDate = this.$moment()\r\n .day('Sunday')\r\n .year(year)\r\n .isoWeek(weekNumber)\r\n .toDate();\r\n\r\n return this.$t('smiConsumptionLogConfirmationModal.weekValue', [\r\n weekNumber,\r\n dateRangeFilter(fromDate, toDate),\r\n year,\r\n ]).toString();\r\n }\r\n\r\n public show(): void {\r\n this.initialize();\r\n\r\n (this.$refs.modal as Modal).showModal();\r\n }\r\n\r\n private initialize(): void {\r\n this.errorSaving = false;\r\n if (this.consumptionByDays === null && this.consumptionByWeek === null) {\r\n return;\r\n }\r\n\r\n this.resetReportStockQuantity();\r\n }\r\n\r\n private createStockDeviationReport(\r\n productNumber: string\r\n ): ReportSmiWarehouseStockDeviation | undefined {\r\n if (\r\n this.updatedOriginalStock !== null &&\r\n this.reportStockQuantity !== null &&\r\n this.stockLevelReportChangedSuccessfully\r\n ) {\r\n return {\r\n productNumber,\r\n originalQuantity: this.updatedOriginalStock,\r\n reportedQuantity: Number(this.reportStockQuantity),\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private resetReportStockQuantity(): void {\r\n this.reportStockQuantity =\r\n this.updatedOriginalStock !== null && this.updatedOriginalStock >= 0\r\n ? this.updatedOriginalStock\r\n : null;\r\n }\r\n\r\n private onResetReportStockQuantityClick(): void {\r\n this.resetReportStockQuantity();\r\n }\r\n\r\n private onReportStockQuantityInput(value: any): void {\r\n this.reportStockQuantity = value ? value : null;\r\n }\r\n\r\n private onSubmit() {\r\n if (\r\n (!this.reportByWeek && this.consumptionByDays === null) ||\r\n (this.reportByWeek && this.consumptionByWeek === null) ||\r\n !this.isAllowedToEdit ||\r\n this.stockLevelIsInvalid\r\n ) {\r\n return;\r\n }\r\n\r\n this.isSaving = true;\r\n this.errorSaving = false;\r\n\r\n if (!this.reportByWeek) {\r\n const filteredConsumptionDays: ReportSmiConsumptionByDays = {\r\n productNumber: this.consumptionByDays!.productNumber,\r\n days: this.consumptionByDays!.days.filter((d) => d.quantity !== 0),\r\n changedWeekGrouping: this.consumptionByDays!.changedWeekGrouping,\r\n reportStockDeviation: this.createStockDeviationReport(\r\n this.consumptionByDays!.productNumber\r\n ),\r\n };\r\n\r\n this.saveConsumptions(\r\n smiConsumptionLogsModule.dispatchReportByDays({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n consumptionByDays: filteredConsumptionDays,\r\n })\r\n );\r\n } else {\r\n const consumptionByWeek: ReportSmiConsumptionByWeek = {\r\n startOfWeekYear: this.consumptionByWeek!.startOfWeekYear,\r\n weekNumber: this.consumptionByWeek!.weekNumber,\r\n month: this.consumptionByWeek!.month,\r\n productNumber: this.consumptionByWeek!.productNumber,\r\n totalConsumptionQuantity:\r\n this.consumptionByWeek!.totalConsumptionQuantity,\r\n changedWeekGrouping: this.consumptionByWeek!.changedWeekGrouping,\r\n removeExisting: this.consumptionByWeek!.removeExisting,\r\n reportStockDeviation: this.createStockDeviationReport(\r\n this.consumptionByWeek!.productNumber\r\n ),\r\n };\r\n\r\n this.saveConsumptions(\r\n smiConsumptionLogsModule.dispatchReportByWeek({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n consumptionByWeek,\r\n })\r\n );\r\n }\r\n }\r\n\r\n private saveConsumptions(dispatchMethod: Promise) {\r\n this.isSaving = true;\r\n this.errorSaving = false;\r\n this.errorConflictDetails = undefined;\r\n\r\n return dispatchMethod\r\n .then(() => {\r\n this.$emit('loadConsumptions', true);\r\n (this.$refs.modal as Modal).hideModal();\r\n })\r\n .catch((error: AxiosError | undefined) => {\r\n if (\r\n error !== undefined &&\r\n error.response !== undefined &&\r\n error.response.status === 409\r\n ) {\r\n const conflictErrorDetails = error.response\r\n .data as SmiConsumptionReportConflictDetails;\r\n if (conflictErrorDetails.type) {\r\n this.errorConflictDetails = conflictErrorDetails;\r\n }\r\n }\r\n this.errorSaving = true;\r\n })\r\n .finally(() => {\r\n this.isSaving = false;\r\n });\r\n }\r\n\r\n private onClose() {\r\n (this.$refs.modal as Modal).hideModal();\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!./SmiConsumptionLogConfirmationModal.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!./SmiConsumptionLogConfirmationModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogConfirmationModal.vue?vue&type=template&id=1c140762&scoped=true&\"\nimport script from \"./SmiConsumptionLogConfirmationModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogConfirmationModal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiConsumptionLogConfirmationModal.vue?vue&type=style&index=0&id=1c140762&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 \"1c140762\",\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 smiConsumptionService from '@/services/SmiConsumptionService';\r\nimport { SmiConsumptionLogsByDates } from '@/models/Smi/Consumptions/SmiConsumptionLogsByDates';\r\nimport { resetSmiConsumptionLogWeekProductQuantities } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\n\r\nexport interface HistoricalSearch {\r\n from: Date;\r\n to: Date;\r\n data: SmiConsumptionLogsByDates;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiHistoricalConsumptionLogs',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiHistoricalConsumptionLogsModule extends VuexModule {\r\n public search: HistoricalSearch | null = null;\r\n\r\n private common = new CommonStore(10); // 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: HistoricalSearch) {\r\n for (const logMonth of payload.data.logMonths) {\r\n for (const logWeek of logMonth.logWeeks) {\r\n logWeek.addingProduct = null;\r\n\r\n for (const logWeekProduct of logWeek.existingProducts) {\r\n logWeekProduct.productDisplayName =\r\n payload.data.logProducts.find(\r\n (p) => p.productNumber === logWeekProduct.productNumber\r\n )?.displayName ?? logWeekProduct.productNumber;\r\n\r\n logWeekProduct.isEditing = false;\r\n resetSmiConsumptionLogWeekProductQuantities(logWeekProduct);\r\n\r\n for (\r\n let dayIndex = 0;\r\n dayIndex < logWeekProduct.days.length;\r\n dayIndex++\r\n ) {\r\n logWeekProduct.days[dayIndex].isOpen =\r\n logWeekProduct.openAllDates ||\r\n logWeekProduct.openSpecificDates.some(\r\n (openDate) => openDate === logWeek.datesOfWeek[dayIndex].date\r\n );\r\n }\r\n }\r\n\r\n for (const logWeekProduct of logWeek.availableProducts) {\r\n logWeekProduct.productDisplayName =\r\n payload.data.logProducts.find(\r\n (p) => p.productNumber === logWeekProduct.productNumber\r\n )?.displayName ?? logWeekProduct.productNumber;\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: {\r\n smiWarehouseId: number;\r\n from: Date;\r\n to: Date;\r\n force?: boolean;\r\n }): Promise {\r\n const loadingId = `historical|${\r\n payload.smiWarehouseId\r\n }|${payload.from.toISOString()}|${payload.to.toISOString()}`;\r\n\r\n if (\r\n !payload.force &&\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 = smiConsumptionService\r\n .getConsumptionsByDates(payload.smiWarehouseId, payload.from, payload.to)\r\n .then((response) => {\r\n Consoler.debugLog(\r\n 'Load smiHistoricalConsumptionLogs success',\r\n response\r\n );\r\n this.commitSetSearch({\r\n from: payload.from,\r\n to: payload.to,\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 smiHistoricalConsumptionLogs 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 smiHistoricalConsumptionLogsModule = getModule(\r\n SmiHistoricalConsumptionLogsModule\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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 Messages from '@/components/general/Messages.vue';\r\nimport Breadcrumbs from '@/components/general/Breadcrumbs.vue';\r\nimport CustomDateRangePicker from '@/components/general/CustomDateRangePicker.vue';\r\nimport SmiConsumptionLogCharts from '@/components/SmiConsumptionLogCharts.vue';\r\nimport SmiConsumptionLog from '@/components/SmiConsumptionLog.vue';\r\nimport SmiHistoricalConsumptionLog from '@/components/SmiHistoricalConsumptionLog.vue';\r\nimport SmiConsumptionLogConfirmationModal from '@/components/SmiConsumptionLogConfirmationModal.vue';\r\nimport SmiWarehouseTreeSelect from '@/components/SmiWarehouseTreeSelect.vue';\r\nimport {\r\n Search,\r\n smiConsumptionLogsModule,\r\n} from '@/store/modules/smiConsumptionLogs';\r\nimport {\r\n HistoricalSearch,\r\n smiHistoricalConsumptionLogsModule,\r\n} from '@/store/modules/smiHistoricalConsumptionLogs';\r\nimport { smiWarehousesModule } from '@/store/modules/smiWarehouses';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { routeNameSmiConsumptionLog, routeNameSmiRoot } from '@/router/routes';\r\nimport { DateRange } from '@/models/DateRange';\r\nimport { Dates } from '@/utils/Dates';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\nimport { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport { SmiConsumptionLogProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogProduct';\r\nimport { ReportSmiConsumptionByWeek } from '@/models/Smi/Consumptions/ReportSmiConsumptionByWeek';\r\nimport { ReportSmiConsumptionByDays } from '@/models/Smi/Consumptions/ReportSmiConsumptionByDays';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { SmiConsumptionLogWeekExistingProduct } from '@/models/Smi/Consumptions/SmiConsumptionLogWeekExistingProduct';\r\nimport { SmiConsumptionLogMonth } from '@/models/Smi/Consumptions/SmiConsumptionLogMonth';\r\n\r\nenum HistoricalLength {\r\n ThreeMonths = 'threeMonths',\r\n SixMonths = 'sixMonths',\r\n OneYear = 'oneYear',\r\n TwoYears = 'twoYears',\r\n NoHistory = 'noHistory',\r\n}\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n CustomDateRangePicker,\r\n SmiWarehouseTreeSelect,\r\n SmiConsumptionLogCharts,\r\n SmiConsumptionLog,\r\n SmiConsumptionLogConfirmationModal,\r\n SmiHistoricalConsumptionLog,\r\n },\r\n})\r\nexport default class SmiConsumptionLogPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n private invalidSelectedSmiWarehouse: boolean = false;\r\n private dateRange: DateRange | null = null;\r\n private selectedSmiWarehouseId: number | null = null;\r\n private filteredProductNumbers: string[] = []; // TODO\r\n private isSaving: boolean = false;\r\n private errorSaving: boolean = false;\r\n private consumptionByDays: ReportSmiConsumptionByDays | null = null;\r\n private consumptionByWeek: ReportSmiConsumptionByWeek | null = null;\r\n private reportByWeek = false;\r\n private productDisplayName: string = '';\r\n private productCurrentStockQuantity: number | null = null;\r\n private showHistory: boolean = false;\r\n private isLoadingHistory: boolean = false;\r\n\r\n HistoricalLength = HistoricalLength;\r\n private activeHistoricalLength: HistoricalLength = HistoricalLength.NoHistory;\r\n private readonly maxRangeLengthInWeeks: number = 10;\r\n\r\n private readonly defaultDateRange: DateRange = {\r\n fromDate: Dates.startOfWeek(\r\n this.$moment(this.startOfToday).subtract(3, 'week').toDate()\r\n ),\r\n toDate: Dates.endOfWeek(this.startOfToday),\r\n };\r\n\r\n private get isAllowedToEdit(): boolean {\r\n return Permissions.hasPermission(\r\n PermissionType.IsAllowedToEditSmiConsumptions\r\n );\r\n }\r\n\r\n private get smiWarehouses(): SmiWarehouses | null {\r\n return smiWarehousesModule.data;\r\n }\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get selectedWarehouse(): SmiWarehouse | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n const warehouse = this.warehouses.find(\r\n (w) => w.id === this.selectedSmiWarehouseId\r\n );\r\n return warehouse ?? null;\r\n }\r\n\r\n private get smiConsumptionLogsSearch(): Search | null {\r\n return smiConsumptionLogsModule.search;\r\n }\r\n private get smiHistoricalConsumptionLogsSearch(): HistoricalSearch | null {\r\n return smiHistoricalConsumptionLogsModule.search;\r\n }\r\n private get logMonths(): SmiConsumptionLogMonth[] {\r\n return this.smiConsumptionLogsSearch?.data.logMonths ?? [];\r\n }\r\n\r\n private get historicalLogMonths(): SmiConsumptionLogMonth[] {\r\n return this.smiHistoricalConsumptionLogsSearch?.data.logMonths ?? [];\r\n }\r\n\r\n private get logProducts(): SmiConsumptionLogProduct[] {\r\n return this.smiConsumptionLogsSearch?.data.logProducts ?? [];\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSmiRoot,\r\n name: this.$t('breadcrumbs.' + routeNameSmiRoot).toString(),\r\n },\r\n {\r\n routeName: routeNameSmiConsumptionLog,\r\n name: this.$t('breadcrumbs.' + routeNameSmiConsumptionLog).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedWarehouse !== null) {\r\n items.push({\r\n routeName: routeNameSmiConsumptionLog,\r\n routeQuery: { warehouse: this.selectedSmiWarehouseId },\r\n name: this.selectedWarehouse.customerName,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n private get startOfToday(): Date {\r\n return Dates.startOfToday();\r\n }\r\n private get endOfCurrentWeek(): Date {\r\n return Dates.endOfWeek(this.startOfToday);\r\n }\r\n\r\n private get isDateRangeTheDefault(): boolean {\r\n return (\r\n this.dateRange !== null &&\r\n this.$moment(this.defaultDateRange.fromDate).isSame(\r\n this.dateRange.fromDate,\r\n 'day'\r\n ) &&\r\n this.$moment(this.defaultDateRange.toDate).isSame(\r\n this.dateRange.toDate,\r\n 'day'\r\n )\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().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let warehouseIdByQuery: number | null = null;\r\n if (this.$route.query.warehouse) {\r\n const warehouseId = Number(this.$route.query.warehouse.toString());\r\n if (!isNaN(warehouseId)) {\r\n warehouseIdByQuery = warehouseId;\r\n }\r\n }\r\n this.dateRange = this.defaultDateRange;\r\n\r\n this.activeHistoricalLength = HistoricalLength.NoHistory;\r\n this.invalidSelectedSmiWarehouse = false;\r\n this.showHistory = false;\r\n\r\n return this.loadWarehouses()\r\n .then(async () => {\r\n if (warehouseIdByQuery !== null) {\r\n if (\r\n this.warehouses.some(\r\n (warehouse) => warehouse.id === warehouseIdByQuery\r\n )\r\n ) {\r\n this.selectedSmiWarehouseId = warehouseIdByQuery;\r\n await this.loadConsumptions();\r\n } else {\r\n this.invalidSelectedSmiWarehouse = true;\r\n }\r\n } else if (this.warehouses.length > 0) {\r\n this.selectedSmiWarehouseId =\r\n (userProfileModule.selectedCustomer !== null\r\n ? this.warehouses.find(\r\n (warehouse) =>\r\n warehouse.customerId ===\r\n userProfileModule.selectedCustomer?.id\r\n )?.id\r\n : undefined) ?? this.warehouses[0].id;\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (this.$route.query.warehouse === query.warehouse) {\r\n return false;\r\n } else {\r\n // If just going from a no defined warehouse to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.warehouse?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: {\r\n warehouse?: string;\r\n } = {};\r\n\r\n if (this.selectedSmiWarehouseId) {\r\n query.warehouse = this.selectedSmiWarehouseId.toString();\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private onSmiWarehouseSelect(smiWarehouseId: number) {\r\n if (this.selectedSmiWarehouseId !== smiWarehouseId) {\r\n this.selectedSmiWarehouseId = smiWarehouseId;\r\n this.updateQuery();\r\n }\r\n }\r\n\r\n private onDateRangeUpdate(dateRange: DateRange) {\r\n this.dateRange = dateRange;\r\n this.loadConsumptions();\r\n }\r\n\r\n private onClearFilters() {\r\n this.dateRange = this.defaultDateRange;\r\n this.loadConsumptions();\r\n }\r\n\r\n private loadWarehouses(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehousesModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private loadConsumptions(force?: boolean): Promise {\r\n if (this.dateRange === null) {\r\n return Promise.reject('No date range set!');\r\n } else if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiConsumptionLogsModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n from: this.dateRange.fromDate,\r\n to: this.dateRange.toDate,\r\n force,\r\n })\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n private loadHistoricalConsumptions(\r\n from: Date,\r\n length: HistoricalLength,\r\n force?: boolean\r\n ): Promise {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n\r\n this.isLoadingHistory = true;\r\n this.errorLoading = false;\r\n this.showHistory = true;\r\n this.activeHistoricalLength = length;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiHistoricalConsumptionLogsModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n from: from,\r\n to: new Date(),\r\n force,\r\n })\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoadingHistory = false;\r\n }\r\n });\r\n }\r\n\r\n private closeHistory() {\r\n this.showHistory = false;\r\n }\r\n\r\n private onResetLog() {\r\n this.errorSaving = false;\r\n }\r\n\r\n private onSaveConsumptionByDays(\r\n consumptionByDays: ReportSmiConsumptionByDays,\r\n product: SmiConsumptionLogWeekExistingProduct\r\n ): void {\r\n if (this.selectedSmiWarehouseId === null) {\r\n Consoler.debugWarn('No selected smi warehouse!');\r\n return;\r\n }\r\n\r\n this.consumptionByDays = consumptionByDays;\r\n this.consumptionByWeek = null;\r\n this.reportByWeek = false;\r\n this.productDisplayName = product.productDisplayName;\r\n this.productCurrentStockQuantity =\r\n this.logProducts.find(\r\n (logProduct) =>\r\n logProduct.productNumber === consumptionByDays.productNumber\r\n )?.currentStockQuantity ?? null;\r\n\r\n this.$nextTick(() => {\r\n (\r\n this.$refs\r\n .smiConsumptionLogConfirmationModal as SmiConsumptionLogConfirmationModal\r\n ).show();\r\n });\r\n }\r\n\r\n private onSaveConsumptionByWeek(\r\n consumptionByWeek: ReportSmiConsumptionByWeek,\r\n product: SmiConsumptionLogWeekExistingProduct\r\n ): void {\r\n if (this.selectedSmiWarehouseId === null) {\r\n Consoler.debugWarn('No selected smi warehouse!');\r\n return;\r\n }\r\n\r\n this.consumptionByWeek = consumptionByWeek;\r\n this.consumptionByDays = null;\r\n this.reportByWeek = true;\r\n this.productDisplayName = product.productDisplayName;\r\n this.productCurrentStockQuantity =\r\n this.logProducts.find(\r\n (logProduct) =>\r\n logProduct.productNumber === consumptionByWeek.productNumber\r\n )?.currentStockQuantity ?? null;\r\n\r\n this.$nextTick(() => {\r\n (\r\n this.$refs\r\n .smiConsumptionLogConfirmationModal as SmiConsumptionLogConfirmationModal\r\n ).show();\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!./SmiConsumptionLogPage.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!./SmiConsumptionLogPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiConsumptionLogPage.vue?vue&type=template&id=00f62321&\"\nimport script from \"./SmiConsumptionLogPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiConsumptionLogPage.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 { BaseServiceDefinition } from './BaseService';\r\nimport { SmiConsumptionOverviewByDates } from '@/models/Smi/Consumptions/SmiConsumptionOverviewByDates';\r\nimport { SmiConsumptionLogsByDates } from '@/models/Smi/Consumptions/SmiConsumptionLogsByDates';\r\nimport { ReportSmiConsumptionByDays } from '@/models/Smi/Consumptions/ReportSmiConsumptionByDays';\r\nimport { ReportSmiConsumptionByWeek } from '@/models/Smi/Consumptions/ReportSmiConsumptionByWeek';\r\nimport { SmiConsumptionOverviewResponse } from '@/models/Smi/Consumptions/SmiConsumptionOverviewResponse';\r\n\r\nclass SmiConsumptionService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public getConsumptionsByDates(\r\n smiWarehouseId: number,\r\n fromDate: Date,\r\n toDate: Date\r\n ): Promise {\r\n return this.get(`/api/v1/smi/consumptions/${smiWarehouseId}`, {\r\n fromDate: fromDate.toDateString(),\r\n toDate: toDate.toDateString(),\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 getConsumptionOverview(\r\n smiWarehouseId: number,\r\n contractPeriodId?: number\r\n ): Promise {\r\n return this.get(`/api/v1/smi/consumptions/overview/${smiWarehouseId}`, {\r\n contractPeriodId: 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 getConsumptionOverviewByDates(\r\n smiWarehouseId: number,\r\n smiContractPeriodId: number,\r\n fromDate: Date,\r\n toDate: Date\r\n ): Promise {\r\n return this.get(\r\n `/api/v1/smi/consumptions/overview/byDates/${smiWarehouseId}`,\r\n {\r\n smiContractPeriodId,\r\n fromDate: fromDate.toDateString(),\r\n toDate: toDate.toDateString(),\r\n }\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 reportConsumptionsByDays(\r\n smiWarehouseId: number,\r\n consumptionByDays: ReportSmiConsumptionByDays\r\n ): Promise {\r\n return this.post(\r\n `/api/v1/smi/consumptions/byDays/${smiWarehouseId}`,\r\n consumptionByDays\r\n ).catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n public reportConsumptionsByWeek(\r\n smiWarehouseId: number,\r\n consumptionByWeek: ReportSmiConsumptionByWeek\r\n ): Promise {\r\n return this.post(\r\n `/api/v1/smi/consumptions/byWeek/${smiWarehouseId}`,\r\n consumptionByWeek\r\n ).catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nconst smiConsumptionService: SmiConsumptionService =\r\n new SmiConsumptionService();\r\n\r\nexport default smiConsumptionService;\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!./SmiConsumptionLogQuantityTotalInput.vue?vue&type=style&index=0&id=17c3b2df&scoped=true&lang=scss&\"","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport adminUsersService from '@/services/AdminUsersService';\r\nimport { User } from '@/models/AdminUsers/User';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport { adminUsersModule } from './adminUsers';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'adminUsersSpecific',\r\n dynamic: true,\r\n store,\r\n})\r\nclass AdminUsersSpecificModule extends VuexModule {\r\n private common = new CommonArrayStore(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (axId: string) => {\r\n if (adminUsersModule.search?.results.items) {\r\n if (\r\n adminUsersModule.search?.results.items.filter((u) => u.axId === axId)\r\n .length > 0\r\n ) {\r\n return adminUsersModule.search?.results.items.filter(\r\n (u) => u.axId === axId\r\n )[0];\r\n }\r\n }\r\n return this.common.getDataFor(axId);\r\n };\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoading(payload: {\r\n id: string;\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: string;\r\n data: User;\r\n }) {\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: string;\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: { axId: string }): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(payload.axId)) {\r\n return Promise.resolve(this.item(payload.axId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.axId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'adminUsersSpecific',\r\n payload\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = adminUsersService\r\n .findUser(payload.axId)\r\n .then((response) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.axId,\r\n data: response,\r\n });\r\n Consoler.debugLog('Load adminUsersSpecific success', payload, response);\r\n return Promise.resolve(response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load adminUsersSpecific failed', payload, error);\r\n this.commitSetLoadingError({ id: payload.axId, error });\r\n\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.axId,\r\n loadingPromise,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const adminUsersSpecificModule = getModule(AdminUsersSpecificModule);\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-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiStockDeviationsPage.title'))+\" \")]),_c('div',{staticClass:\"d-align-self-end\"},[_c('SmiWarehouseTreeSelect',{attrs:{\"value\":_vm.selectedSmiWarehouseId,\"smiWarehouses\":_vm.smiWarehouses,\"placeholder\":_vm.$t('smiStockDeviationsPage.warehouses.placeholder'),\"clearable\":false},on:{\"select\":_vm.onSmiWarehouseSelect}})],1)]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex align-items-center flex-wrap mb-4\"},[(_vm.deviationProducts.length)?_c('ProductsTreeSelect',{attrs:{\"value\":_vm.filteredProductNumbers,\"products\":_vm.deviationProducts,\"placeholder\":_vm.$t('smiStockDeviationsPage.productsFilter.placeholder'),\"clearable\":false},on:{\"select\":_vm.onProductsFilterSelect}}):_vm._e(),(_vm.anyFilter && _vm.deviationProducts.length)?_c('button',{staticClass:\"o-button px-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onClearFilters}},[_vm._v(\" \"+_vm._s(_vm.$t('smiStockDeviationsPage.productsFilter.clearFilters'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"clear\")])]):_vm._e()],1),(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiStockDeviationsPage.error')))])]):(_vm.invalidSelectedSmiWarehouse)?_c('div',[(_vm.warehouses.length > 0)?[_vm._v(\" \"+_vm._s(_vm.$t('smiStockDeviationsPage.noWarehouses.hasWarehouses'))+\" \")]:[_vm._v(\" \"+_vm._s(_vm.$t('smiStockDeviationsPage.noWarehouses.hasNoWarehouses'))+\" \")]],2):_vm._e(),(_vm.isLoading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.smiWarehouseStockDeviations && !_vm.isLoading)?_c('div',[(_vm.filteredStockDeviations.length)?_c('SmiWarehouseStockDeviationList',{attrs:{\"stockDeviations\":_vm.filteredStockDeviations}}):_vm._e()],1):_vm._e(),(!_vm.smiWarehouseStockDeviations && !_vm.isLoading && !_vm.errorLoading)?_c('div',[_vm._v(\" \"+_vm._s(_vm.$t('smiStockDeviationsPage.noData'))+\" \")]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 smiWarehouseService from '@/services/SmiWarehouseService';\r\nimport { SmiWarehouseStockDeviation } from '@/models/Smi/Warehouses/SmiWarehouseStockDeviation';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiWarehouseStockDeviations',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiWarehouseStockDeviationsModule extends VuexModule {\r\n private common = new CommonArrayStore(\r\n 20\r\n ); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (id: number) => this.common.getDataFor(id);\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: SmiWarehouseStockDeviation[];\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 // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(\r\n smiWarehouseId: number\r\n ): Promise {\r\n if (this.common.hasFreshDataFor(smiWarehouseId)) {\r\n return Promise.resolve(this.item(smiWarehouseId)!);\r\n }\r\n\r\n const currentlyLoadingPromise =\r\n this.common.isCurrentlyLoading(smiWarehouseId);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiWarehouseStockDeviations'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiWarehouseService\r\n .getStockDeviations(smiWarehouseId)\r\n .then((smiStockDeviations) => {\r\n this.commitSetLoadingComplete({\r\n id: smiWarehouseId,\r\n data: smiStockDeviations,\r\n });\r\n\r\n Consoler.debugLog(\r\n 'Load smi warehouse stock deviations succeeded',\r\n smiStockDeviations\r\n );\r\n\r\n return Promise.resolve(smiStockDeviations);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smi warehouse stock deviations failed', error);\r\n\r\n this.commitSetLoadingError({ id: smiWarehouseId, error });\r\n\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: smiWarehouseId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiWarehouseStockDeviationsModule = getModule(\r\n SmiWarehouseStockDeviationsModule\r\n);\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.stockDeviations.length)?_c('Table',{attrs:{\"columns\":_vm.columns,\"rows\":_vm.rows,\"usePagination\":false}}):_vm._e()],1)}\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 AdminUserEditorModal from '@/components/AdminUserEditorModal.vue';\r\nimport Table from '@/components/general/Table.vue';\r\nimport { TableColumn, TableRow } from './general/Table.vue';\r\nimport { SmiWarehouseStockDeviation } from '@/models/Smi/Warehouses/SmiWarehouseStockDeviation';\r\nimport { numberFilter } from '@/filters/number';\r\nimport { dateWithTimeFilter } from '@/filters/dateWithTime';\r\n\r\n@Component({\r\n components: {\r\n AdminUserEditorModal,\r\n Table,\r\n },\r\n})\r\nexport default class SmiWarehouseStockDeviationList extends Vue {\r\n @Prop({ required: true })\r\n public stockDeviations!: SmiWarehouseStockDeviation[];\r\n\r\n private get columns(): TableColumn[] {\r\n const columns = [\r\n {\r\n text: this.$t('smiStockDeviationsPage.product').toString(),\r\n property: 'product',\r\n fixedOnMobile: true,\r\n isSortable: true,\r\n },\r\n {\r\n text: this.$t('smiStockDeviationsPage.reportDate').toString(),\r\n property: 'reportDate',\r\n isSortable: true,\r\n },\r\n {\r\n text: this.$t('smiStockDeviationsPage.originalStock').toString(),\r\n property: 'originalQuantity',\r\n isSortable: true,\r\n },\r\n {\r\n text: this.$t('smiStockDeviationsPage.reportedStock').toString(),\r\n property: 'reportedQuantity',\r\n isSortable: true,\r\n },\r\n {\r\n text: this.$t('smiStockDeviationsPage.deviation').toString(),\r\n property: 'deviation',\r\n isSortable: true,\r\n },\r\n {\r\n text: this.$t('smiStockDeviationsPage.reportedBy').toString(),\r\n property: 'reportedBy',\r\n isSortable: true,\r\n },\r\n ];\r\n\r\n return columns;\r\n }\r\n\r\n private get rows(): TableRow[] {\r\n return this.stockDeviations.map((deviation) => {\r\n const properties: { [key: string]: string | number } = {\r\n product: deviation.product.displayName,\r\n reportDate: dateWithTimeFilter(deviation.reportDate),\r\n originalQuantity: this.getQuantityText(deviation.originalQuantity),\r\n reportedQuantity: this.getQuantityText(deviation.reportedQuantity),\r\n deviation: this.getDeviationText(\r\n deviation.originalQuantity - deviation.reportedQuantity\r\n ),\r\n reportedBy: deviation.reportedByUser,\r\n };\r\n\r\n return {\r\n properties,\r\n deviation,\r\n };\r\n });\r\n }\r\n\r\n private getDeviationText(value: number) {\r\n if (value > 0) {\r\n return '+' + `${numberFilter(value)} t`;\r\n }\r\n return `${numberFilter(value)} t`;\r\n }\r\n\r\n private getQuantityText(value: number): string {\r\n return `${numberFilter(value)} t`;\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!./SmiWarehouseStockDeviationList.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!./SmiWarehouseStockDeviationList.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiWarehouseStockDeviationList.vue?vue&type=template&id=fe2616d4&\"\nimport script from \"./SmiWarehouseStockDeviationList.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiWarehouseStockDeviationList.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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 { routeNameSmiRoot, routeNameSmiStockDeviations } from '@/router/routes';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\nimport { smiWarehousesModule } from '@/store/modules/smiWarehouses';\r\nimport { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport SmiWarehouseTreeSelect from '@/components/SmiWarehouseTreeSelect.vue';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { smiWarehouseStockDeviationsModule } from '@/store/modules/smiWarehouseStockDeviations';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { Product } from '@/models/Product';\r\nimport SmiWarehouseStockDeviationList from '@/components/SmiWarehouseStockDeviationList.vue';\r\nimport { SmiWarehouseStockDeviation } from '@/models/Smi/Warehouses/SmiWarehouseStockDeviation';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n SmiWarehouseTreeSelect,\r\n ProductsTreeSelect,\r\n SmiWarehouseStockDeviationList,\r\n },\r\n})\r\nexport default class SmiStockDeviationsPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private selectedSmiWarehouseId: number | null = null;\r\n private invalidSelectedSmiWarehouse: boolean = false;\r\n private filteredProductNumbers: string[] = [];\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n\r\n private get smiWarehouses(): SmiWarehouses | null {\r\n return smiWarehousesModule.data;\r\n }\r\n\r\n private get anyFilter(): boolean {\r\n return this.filteredProductNumbers.length > 0;\r\n }\r\n\r\n private get smiWarehouseStockDeviations():\r\n | SmiWarehouseStockDeviation[]\r\n | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n return smiWarehouseStockDeviationsModule.item(this.selectedSmiWarehouseId);\r\n }\r\n\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n\r\n private get filteredStockDeviations(): SmiWarehouseStockDeviation[] {\r\n if (\r\n this.filteredProductNumbers.length > 0 &&\r\n this.smiWarehouseStockDeviations\r\n ) {\r\n return this.smiWarehouseStockDeviations.filter((s) =>\r\n this.filteredProductNumbers.includes(s.product.productNumber)\r\n );\r\n }\r\n\r\n return this.smiWarehouseStockDeviations\r\n ? this.smiWarehouseStockDeviations\r\n : [];\r\n }\r\n\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get deviationProducts(): Product[] {\r\n let products: Product[] = [];\r\n if (\r\n this.smiWarehouseStockDeviations &&\r\n this.smiWarehouseStockDeviations.length\r\n ) {\r\n this.smiWarehouseStockDeviations.map((s) => products.push(s.product));\r\n }\r\n\r\n return [\r\n ...new Map(\r\n products.map((item) => [item['productNumber'], item])\r\n ).values(),\r\n ];\r\n }\r\n\r\n private get selectedWarehouse(): SmiWarehouse | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n const warehouse = this.warehouses.find(\r\n (w) => w.id === this.selectedSmiWarehouseId\r\n );\r\n return warehouse ?? null;\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSmiRoot,\r\n name: this.$t('breadcrumbs.' + routeNameSmiRoot).toString(),\r\n },\r\n {\r\n routeName: routeNameSmiStockDeviations,\r\n name: this.$t('breadcrumbs.' + routeNameSmiStockDeviations).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedWarehouse !== null) {\r\n items.push({\r\n routeName: routeNameSmiStockDeviations,\r\n routeQuery: { warehouse: this.selectedSmiWarehouseId },\r\n name: this.selectedWarehouse.customerName,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let warehouseIdByQuery: number | null = null;\r\n if (this.$route.query.warehouse) {\r\n const warehouseId = Number(this.$route.query.warehouse.toString());\r\n if (!isNaN(warehouseId)) {\r\n warehouseIdByQuery = warehouseId;\r\n }\r\n }\r\n\r\n return this.loadWarehouses()\r\n .then(async () => {\r\n if (warehouseIdByQuery !== null) {\r\n if (\r\n this.warehouses.some(\r\n (warehouse) => warehouse.id === warehouseIdByQuery\r\n )\r\n ) {\r\n this.selectedSmiWarehouseId = warehouseIdByQuery;\r\n await this.loadStockDeviations();\r\n } else {\r\n this.invalidSelectedSmiWarehouse = true;\r\n }\r\n } else if (this.warehouses.length > 0) {\r\n this.selectedSmiWarehouseId =\r\n (userProfileModule.selectedCustomer !== null\r\n ? this.warehouses.find(\r\n (warehouse) =>\r\n warehouse.customerId ===\r\n userProfileModule.selectedCustomer?.id\r\n )?.id\r\n : undefined) ?? this.warehouses[0].id;\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n\r\n await this.loadStockDeviations();\r\n }\r\n\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n private async loadStockDeviations(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehouseStockDeviationsModule\r\n .dispatchLoad(this.selectedSmiWarehouseId!)\r\n .then(() => undefined)\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (this.$route.query.warehouse === query.warehouse) {\r\n return false;\r\n } else {\r\n // If just going from a no defined warehouse to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.warehouse?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: { warehouse?: string; products?: string } = {};\r\n\r\n if (this.selectedSmiWarehouseId) {\r\n query.warehouse = this.selectedSmiWarehouseId.toString();\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private loadWarehouses(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehousesModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private onSmiWarehouseSelect(smiWarehouseId: number) {\r\n if (this.selectedSmiWarehouseId !== smiWarehouseId) {\r\n this.selectedSmiWarehouseId = smiWarehouseId;\r\n this.updateQuery();\r\n }\r\n }\r\n\r\n private onProductsFilterSelect(products: string[]) {\r\n this.filteredProductNumbers = products;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.filteredProductNumbers = [];\r\n this.updateQuery();\r\n }\r\n}\r\n","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!./SmiStockDeviationsPage.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!./SmiStockDeviationsPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiStockDeviationsPage.vue?vue&type=template&id=c202ce98&\"\nimport script from \"./SmiStockDeviationsPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiStockDeviationsPage.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiHistoricalConsumptionLogWeekProductRow.vue?vue&type=style&index=0&id=cba4a992&scoped=true&lang=scss&\"","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\":false},on:{\"select\":_vm.onSelect}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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 { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\n\r\n@Component({\r\n components: {\r\n TreeSelect,\r\n },\r\n})\r\nexport default class SmiWarehouseTreeSelect extends Vue {\r\n @Prop({ required: true }) private value!: number | null;\r\n @Prop({ required: true }) private smiWarehouses!: SmiWarehouses | null;\r\n @Prop({ required: true }) private placeholder!: string;\r\n @Prop({ required: false, default: () => false })\r\n private clearable!: boolean;\r\n\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get options(): TreeSelectNode[] {\r\n const nodes: TreeSelectNode[] = [];\r\n\r\n if (this.responsiblesWarehouses.length > 0) {\r\n nodes.push({\r\n id: 'responsibles',\r\n label: this.$t('smiWarehouseTreeSelect.responsibles').toString(),\r\n children: this.responsiblesWarehouses.map((warehouse) => ({\r\n id: warehouse.id,\r\n label: warehouse.customerName,\r\n })),\r\n isDefaultExpanded: true,\r\n });\r\n }\r\n\r\n if (this.nonResponsiblesWarehouses.length > 0) {\r\n nodes.push({\r\n id: 'nonResponsibles',\r\n label: this.$t(\r\n this.responsiblesWarehouses.length > 0\r\n ? 'smiWarehouseTreeSelect.nonResponsibles'\r\n : 'smiWarehouseTreeSelect.default'\r\n ).toString(),\r\n children: this.nonResponsiblesWarehouses.map((warehouse) => ({\r\n id: warehouse.id,\r\n label: warehouse.customerName,\r\n })),\r\n isDefaultExpanded: this.responsiblesWarehouses.length === 0,\r\n });\r\n }\r\n\r\n return nodes;\r\n }\r\n\r\n private onSelect(smiWarehouseId: number) {\r\n this.$emit('select', smiWarehouseId);\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!./SmiWarehouseTreeSelect.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!./SmiWarehouseTreeSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiWarehouseTreeSelect.vue?vue&type=template&id=5f05f652&scoped=true&\"\nimport script from \"./SmiWarehouseTreeSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiWarehouseTreeSelect.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiWarehouseTreeSelect.vue?vue&type=style&index=0&id=5f05f652&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 \"5f05f652\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiConsumptionLogWeekProductRow.vue?vue&type=style&index=0&id=0eccbdb3&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DefaultLayout',[_c('Breadcrumbs',{attrs:{\"items\":_vm.breadcrumbs}}),_c('Messages'),_c('div',{staticClass:\"container-fluid mt-3\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3\"},[_vm._v(_vm._s(_vm.$t('smiForecastsPage.title')))]),_c('div',{staticClass:\"d-align-self-end\"},[_c('SmiWarehouseTreeSelect',{attrs:{\"value\":_vm.selectedSmiWarehouseId,\"smiWarehouses\":_vm.smiWarehouses,\"placeholder\":_vm.$t('smiForecastsPage.warehouses.placeholder'),\"clearable\":false},on:{\"select\":_vm.onSmiWarehouseSelect}})],1)]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex flex-wrap mb-4\"},[(_vm.productsCurrentAndFutureContractPeriod.length)?_c('ProductsTreeSelect',{staticClass:\"products-tree-select\",attrs:{\"value\":_vm.filteredProductNumbers,\"products\":_vm.productsCurrentAndFutureContractPeriod,\"placeholder\":_vm.$t('smiForecastsPage.products.placeholder'),\"clearable\":false},on:{\"select\":_vm.onProductsFilterSelect}}):_vm._e(),(_vm.anyFilter && _vm.productsCurrentAndFutureContractPeriod.length)?_c('button',{staticClass:\"o-button px-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onClearFilters}},[_vm._v(\" \"+_vm._s(_vm.$t('smiForecastsPage.clearFilters'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"clear\")])]):_vm._e()],1),(\n _vm.selectedSmiWarehouseId &&\n _vm.selectedContractPeriodId &&\n _vm.currentForecastUpcomingWeeks.length > 0\n )?_c('div',{staticClass:\"mb-5\"},[_c('ForecastCharts',{ref:\"forecastCharts\",attrs:{\"selectedContractPeriodId\":_vm.selectedContractPeriodId,\"selectedSmiWarehouseId\":_vm.selectedSmiWarehouseId,\"upcomingForecastWeeks\":_vm.currentForecastUpcomingWeeks,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"allContractPeriods\":_vm.allContractPeriods,\"currentForecastsData\":_vm.currentForecastsData,\"isSmi\":true},on:{\"changeContractPeriodId\":_vm.onChangeContractPeriodId}})],1):_vm._e(),(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiForecastsPage.error')))])]):_vm._e(),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 mb-3\"},[(_vm.isLoading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):(_vm.invalidSelectedSmiWarehouse)?_c('div',[(_vm.warehouses.length > 0)?[_vm._v(\" \"+_vm._s(_vm.$t('smiForecastsPage.noWarehouses.hasWarehouses'))+\" \")]:[_vm._v(\" \"+_vm._s(_vm.$t('smiForecastsPage.noWarehouses.hasNoWarehouses'))+\" \")]],2):(!_vm.errorLoading)?[(\n _vm.currentForecastMonthsForContractPeriods.length &&\n !_vm.hasFilteredOnNonCurrentProductsOnly\n )?[_c('ForecastList',{attrs:{\"forecastMonthsforContractPeriods\":_vm.currentForecastMonthsForContractPeriods,\"filteredProductNumbers\":_vm.filteredProductNumbers,\"isSaving\":_vm.isSaving,\"errorSaving\":_vm.errorSaving,\"isAllowedToEdit\":_vm.isAllowedToEdit},on:{\"save\":_vm.onSaveForecasts,\"resetErrors\":_vm.onResetForecastListErrors}})]:_c('div',[(_vm.hasFilteredOnNonCurrentProductsOnly)?[_vm._v(_vm._s(_vm.$t('smiForecastsPage.noDataForFilteredProducts')))]:[_vm._v(_vm._s(_vm.$t('smiForecastsPage.noData')))]],2),(!_vm.showHistory)?_c('a',{staticClass:\"mt-2\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.loadHistoricForecasts()}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiForecastsPage.showHistory'))+\" \")]):_vm._e(),(_vm.isLoadingHistory)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.showHistory && !_vm.isLoadingHistory)?[_c('a',{staticClass:\"mt-2 mb-2\",attrs:{\"href\":\"\"},on:{\"click\":function($event){$event.preventDefault();return _vm.closeHistory()}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiForecastsPage.hideHistory'))+\" \")]),_c('HistoricForecastList',{attrs:{\"forecastMonthsforContractPeriods\":_vm.historicForecastMonthsForContractPeriods,\"filteredProductNumbers\":_vm.filteredProductNumbers}})]:_vm._e()]:_vm._e()],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport smiForecastService from '@/services/SmiForecastService';\r\nimport { UpdateSmiForecast } from '@/models/Smi/Forecasts/UpdateSmiForecast';\r\nimport { CurrentSmiForecasts } from '@/models/Smi/Forecasts/CurrentSmiForecasts';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiForecasts',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiForecastsModule extends VuexModule {\r\n private common = new CommonArrayStore(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (smiWarehouseId: number) => this.common.getDataFor(smiWarehouseId);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: number;\r\n data: CurrentSmiForecasts;\r\n }) {\r\n for (const period of payload.data.currentForecastMonthsForContractPeriods) {\r\n for (const forecastMonth of period.forecastMonths) {\r\n forecastMonth.isExpanded = forecastMonth.weeks.some(\r\n (forecastWeek) => forecastWeek.isInFocus\r\n );\r\n\r\n for (const forecastWeek of forecastMonth.weeks) {\r\n forecastWeek.isExpanded = forecastWeek.isInFocus;\r\n\r\n for (const forecast of forecastWeek.forecasts) {\r\n forecast.newQuantity = forecast.quantity;\r\n\r\n for (const contractPeriod of payload.data.allContractPeriods) {\r\n const contractPeriodProduct =\r\n contractPeriod.contractPeriodProducts.find(\r\n (p) => p.id === forecast.contractPeriodProductId\r\n );\r\n if (contractPeriodProduct !== undefined) {\r\n forecast.productNumber =\r\n contractPeriodProduct.product.productNumber;\r\n forecast.productDisplayName =\r\n contractPeriodProduct.product.displayName;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: number;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: number;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n smiWarehouseId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload.smiWarehouseId)) {\r\n return Promise.resolve(this.item(payload.smiWarehouseId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.smiWarehouseId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiForecasts'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiForecastService\r\n .getCurrentSmiForecasts(payload.smiWarehouseId)\r\n .then((currentSmiForecasts) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.smiWarehouseId,\r\n data: currentSmiForecasts,\r\n });\r\n Consoler.debugLog('Load smiForecasts success', currentSmiForecasts);\r\n return Promise.resolve(currentSmiForecasts);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiForecasts failed', error);\r\n this.commitSetLoadingError({ id: payload.smiWarehouseId, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.smiWarehouseId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n\r\n @Action\r\n public async dispatchSave(payload: {\r\n smiWarehouseId: number;\r\n updates: UpdateSmiForecast[];\r\n }): Promise {\r\n return smiForecastService\r\n .updateSmiForecasts(payload.smiWarehouseId, payload.updates)\r\n .then(() => undefined)\r\n .catch((error) => {\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nexport const smiForecastsModule = getModule(SmiForecastsModule);\r\n","import { store } from '@/store';\r\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport smiForecastService from '@/services/SmiForecastService';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { CommonArrayStore } from '../commonArrayStore';\r\nimport { HistoricSmiForecasts } from '@/models/Smi/Forecasts/HistoricSmiForecasts';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiHistoricForecasts',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiHistoricForecastsModule extends VuexModule {\r\n private common = new CommonArrayStore(60); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (smiWarehouseId: number) => this.common.getDataFor(smiWarehouseId);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetLoadingComplete(payload: {\r\n id: number;\r\n data: HistoricSmiForecasts;\r\n }) {\r\n for (const period of payload.data\r\n .historicForecastMonthsForContractPeriods) {\r\n for (const forecastMonth of period.forecastMonths) {\r\n forecastMonth.isExpanded = forecastMonth.weeks.some(\r\n (forecastWeek) => forecastWeek.isInFocus\r\n );\r\n\r\n for (const forecastWeek of forecastMonth.weeks) {\r\n forecastWeek.isExpanded = forecastWeek.isInFocus;\r\n\r\n for (const forecast of forecastWeek.forecasts) {\r\n forecast.newQuantity = forecast.quantity;\r\n\r\n for (const contractPeriod of payload.data.allContractPeriods) {\r\n const contractPeriodProduct =\r\n contractPeriod.contractPeriodProducts.find(\r\n (p) => p.id === forecast.contractPeriodProductId\r\n );\r\n if (contractPeriodProduct !== undefined) {\r\n forecast.productNumber =\r\n contractPeriodProduct.product.productNumber;\r\n forecast.productDisplayName =\r\n contractPeriodProduct.product.displayName;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.common.setLoadingComplete(payload);\r\n }\r\n @Mutation private commitSetLoadingError(payload: {\r\n id: number;\r\n error?: any;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoadingError(payload);\r\n }\r\n @Mutation private commitSetLoading(payload: {\r\n id: number;\r\n loadingPromise: Promise;\r\n clearData?: boolean;\r\n }) {\r\n this.common.setLoading(payload);\r\n }\r\n\r\n // ---------------\r\n // ### Actions ###\r\n // ---------------\r\n\r\n @Action\r\n public async dispatchLoad(payload: {\r\n smiWarehouseId: number;\r\n force?: boolean;\r\n }): Promise {\r\n // If recently loaded, return\r\n if (!payload.force && this.common.hasFreshDataFor(payload.smiWarehouseId)) {\r\n return Promise.resolve(this.item(payload.smiWarehouseId)!);\r\n }\r\n\r\n const currentlyLoadingPromise = this.common.isCurrentlyLoading(\r\n payload.smiWarehouseId\r\n );\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiForecasts'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiForecastService\r\n .getHistoricSmiForecasts(payload.smiWarehouseId)\r\n .then((historicSmiForecasts) => {\r\n this.commitSetLoadingComplete({\r\n id: payload.smiWarehouseId,\r\n data: historicSmiForecasts,\r\n });\r\n Consoler.debugLog(\r\n 'Load smiHistoricForecasts success',\r\n historicSmiForecasts\r\n );\r\n return Promise.resolve(historicSmiForecasts);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiHistoricForecasts failed', error);\r\n this.commitSetLoadingError({ id: payload.smiWarehouseId, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: payload.smiWarehouseId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiHistoricForecastsModule = getModule(SmiHistoricForecastsModule);\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 ForecastList from '@/components/ForecastList.vue';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport ForecastCharts from '@/components/ForecastCharts.vue';\r\nimport SmiWarehouseTreeSelect from '@/components/SmiWarehouseTreeSelect.vue';\r\nimport { smiForecastsModule } from '@/store/modules/smiForecasts';\r\nimport { routeNameSmiForecasts, routeNameSmiRoot } from '@/router/routes';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { UpdateSmiForecast } from '@/models/Smi/Forecasts/UpdateSmiForecast';\r\nimport { ContractPeriod } from '@/models/ContractPeriod';\r\nimport { Product } from '@/models/Product';\r\nimport { smiWarehousesModule } from '@/store/modules/smiWarehouses';\r\nimport { CurrentSmiForecasts } from '@/models/Smi/Forecasts/CurrentSmiForecasts';\r\nimport { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport { ForecastSummaryProduct } from '@/models/Forecasts/ForecastSummaryProduct';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\nimport { ForecastsForContractPeriod } from '@/models/Forecasts/ForecastsForContractPeriod';\r\nimport { SmiForecast } from '@/models/Smi/Forecasts/SmiForecast';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport HistoricForecastList from '@/components/HistoricForecastList.vue';\r\nimport { HistoricSmiForecasts } from '@/models/Smi/Forecasts/HistoricSmiForecasts';\r\nimport { smiHistoricForecastsModule } from '@/store/modules/smiHistoricForecasts';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n ForecastList,\r\n HistoricForecastList,\r\n ProductsTreeSelect,\r\n ForecastCharts,\r\n SmiWarehouseTreeSelect,\r\n },\r\n})\r\nexport default class SmiForecastsPage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n private isSaving: boolean = false;\r\n private errorSaving: boolean = false;\r\n private invalidSelectedSmiWarehouse: boolean = false;\r\n private filteredProductNumbers: string[] = [];\r\n private selectedSmiWarehouseId: number | null = null;\r\n private selectedContractPeriodId: number | null = null;\r\n private showHistory: boolean = false;\r\n private isLoadingHistory: boolean = false;\r\n\r\n private get anyFilter(): boolean {\r\n return this.filteredProductNumbers.length > 0;\r\n }\r\n\r\n private get smiWarehouses(): SmiWarehouses | null {\r\n return smiWarehousesModule.data;\r\n }\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get isAllowedToEdit(): boolean {\r\n return Permissions.hasPermission(\r\n PermissionType.IsAllowedToEditSmiForecasts\r\n );\r\n }\r\n\r\n private get selectedWarehouse(): SmiWarehouse | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n const warehouse = this.warehouses.find(\r\n (w) => w.id === this.selectedSmiWarehouseId\r\n );\r\n return warehouse ?? null;\r\n }\r\n\r\n private get currentForecastsData(): CurrentSmiForecasts | null {\r\n return this.selectedSmiWarehouseId !== null\r\n ? smiForecastsModule.item(this.selectedSmiWarehouseId)\r\n : null;\r\n }\r\n\r\n private get historicForecastsData(): HistoricSmiForecasts | null {\r\n return this.selectedSmiWarehouseId !== null\r\n ? smiHistoricForecastsModule.item(this.selectedSmiWarehouseId)\r\n : null;\r\n }\r\n\r\n private get allContractPeriods(): ContractPeriod[] {\r\n return this.currentForecastsData?.allContractPeriods ?? [];\r\n }\r\n private get currentProducts(): Product[] {\r\n return this.currentForecastsData?.currentProducts ?? [];\r\n }\r\n private get currentForecastMonthsForContractPeriods(): ForecastsForContractPeriod[] {\r\n return (\r\n this.currentForecastsData?.currentForecastMonthsForContractPeriods ?? []\r\n );\r\n }\r\n\r\n private get historicForecastMonthsForContractPeriods(): ForecastsForContractPeriod[] {\r\n return (\r\n this.historicForecastsData?.historicForecastMonthsForContractPeriods ?? []\r\n );\r\n }\r\n\r\n private get allProducts(): Product[] {\r\n return this.currentForecastsData?.allProducts ?? [];\r\n }\r\n\r\n private get currentAndFutureContractPeriods(): ContractPeriod[] {\r\n return this.allContractPeriods.filter((i) =>\r\n this.$moment().isSameOrBefore(i.toDate)\r\n );\r\n }\r\n\r\n private get productsCurrentAndFutureContractPeriod(): Product[] {\r\n let products: Product[] = [];\r\n this.currentAndFutureContractPeriods.map((c) =>\r\n c.contractPeriodProducts.forEach((p) => products.push(p.product))\r\n );\r\n\r\n return [\r\n ...new Map(\r\n products.map((item) => [item['productNumber'], item])\r\n ).values(),\r\n ];\r\n }\r\n private get hasFilteredOnNonCurrentProductsOnly(): boolean {\r\n return (\r\n this.filteredProductNumbers.length > 0 &&\r\n !this.filteredProductNumbers.some((filteredProductNumber) =>\r\n this.currentProducts.some(\r\n (currentProduct) =>\r\n filteredProductNumber === currentProduct.productNumber\r\n )\r\n )\r\n );\r\n }\r\n\r\n private get currentForecastUpcomingWeeks(): ForecastSummaryProduct[] {\r\n return this.currentForecastsData?.upcomingWeeksSummary ?? [];\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSmiRoot,\r\n name: this.$t('breadcrumbs.' + routeNameSmiRoot).toString(),\r\n },\r\n {\r\n routeName: routeNameSmiForecasts,\r\n name: this.$t('breadcrumbs.' + routeNameSmiForecasts).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedWarehouse !== null) {\r\n items.push({\r\n routeName: routeNameSmiForecasts,\r\n routeQuery: { warehouse: this.selectedSmiWarehouseId },\r\n name: this.selectedWarehouse.customerName,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n private get defaultContractPeriodId(): number | null {\r\n if (this.allContractPeriods.length === 0) {\r\n return null;\r\n }\r\n\r\n const currentContractPeriod = this.allContractPeriods.find(\r\n (period) => period.isCurrent\r\n );\r\n return currentContractPeriod !== undefined\r\n ? currentContractPeriod.id\r\n : this.allContractPeriods[0].id;\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let warehouseIdByQuery: number | null = null;\r\n if (this.$route.query.warehouse) {\r\n const warehouseId = Number(this.$route.query.warehouse.toString());\r\n if (!isNaN(warehouseId)) {\r\n warehouseIdByQuery = warehouseId;\r\n }\r\n }\r\n\r\n let productNumbers: string[] = [];\r\n if (this.$route.query.products) {\r\n productNumbers = this.$route.query.products\r\n .toString()\r\n .split(',')\r\n .map((p) => p.trim())\r\n .filter((p) => p !== '');\r\n }\r\n this.filteredProductNumbers = productNumbers;\r\n\r\n this.invalidSelectedSmiWarehouse = false;\r\n\r\n return this.loadWarehouses()\r\n .then(async () => {\r\n if (warehouseIdByQuery !== null) {\r\n if (\r\n this.warehouses.some(\r\n (warehouse) => warehouse.id === warehouseIdByQuery\r\n )\r\n ) {\r\n this.selectedSmiWarehouseId = warehouseIdByQuery;\r\n await this.loadForecasts().then(() => {\r\n if (this.allContractPeriods.length > 0) {\r\n this.selectedContractPeriodId = this.defaultContractPeriodId;\r\n this.reloadForecastChartsData();\r\n } else {\r\n this.selectedContractPeriodId = null;\r\n }\r\n });\r\n } else {\r\n this.invalidSelectedSmiWarehouse = true;\r\n }\r\n } else if (this.warehouses.length > 0) {\r\n this.selectedSmiWarehouseId =\r\n (userProfileModule.selectedCustomer !== null\r\n ? this.warehouses.find(\r\n (warehouse) =>\r\n warehouse.customerId ===\r\n userProfileModule.selectedCustomer?.id\r\n )?.id\r\n : undefined) ?? this.warehouses[0].id;\r\n\r\n this.reloadForecastChartsData();\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (\r\n this.$route.query.warehouse === query.warehouse &&\r\n this.$route.query.products === query.products\r\n ) {\r\n return false;\r\n } else {\r\n // If just going from a no defined warehouse to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.warehouse?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: { warehouse?: string; products?: string } = {};\r\n\r\n if (this.selectedSmiWarehouseId) {\r\n query.warehouse = this.selectedSmiWarehouseId.toString();\r\n }\r\n if (this.filteredProductNumbers.length > 0) {\r\n query.products = this.filteredProductNumbers.join(',');\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private loadWarehouses(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehousesModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private loadForecasts(force?: boolean): Promise {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiForecastsModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n force,\r\n })\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n private loadHistoricForecasts(force?: boolean): Promise {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return Promise.reject('No selected smi warehouse!');\r\n }\r\n\r\n this.isLoadingHistory = true;\r\n this.errorLoading = false;\r\n this.showHistory = true;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiHistoricForecastsModule\r\n .dispatchLoad({\r\n smiWarehouseId,\r\n force,\r\n })\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoadingHistory = false;\r\n }\r\n });\r\n }\r\n\r\n private saveForecasts(updates: UpdateSmiForecast[]) {\r\n if (this.selectedSmiWarehouseId === null || !this.isAllowedToEdit) {\r\n return;\r\n }\r\n\r\n this.isSaving = true;\r\n this.errorSaving = false;\r\n\r\n return smiForecastsModule\r\n .dispatchSave({\r\n smiWarehouseId: this.selectedSmiWarehouseId,\r\n updates,\r\n })\r\n .then(() => {\r\n this.loadForecasts(true).then(() => {\r\n this.reloadForecastChartsData(true);\r\n });\r\n })\r\n .catch(() => {\r\n this.errorSaving = true;\r\n })\r\n .finally(() => {\r\n this.isSaving = false;\r\n });\r\n }\r\n\r\n private closeHistory() {\r\n this.showHistory = false;\r\n }\r\n\r\n private reloadForecastChartsData(force?: boolean) {\r\n this.$nextTick(() => {\r\n (this.$refs.forecastCharts as ForecastCharts)?.reloadData(force);\r\n });\r\n }\r\n\r\n private onResetForecastListErrors() {\r\n this.errorSaving = false;\r\n }\r\n\r\n private onSmiWarehouseSelect(smiWarehouseId: number) {\r\n if (this.selectedSmiWarehouseId !== smiWarehouseId) {\r\n this.selectedSmiWarehouseId = smiWarehouseId;\r\n this.reloadForecastChartsData();\r\n this.updateQuery();\r\n this.closeHistory();\r\n }\r\n }\r\n\r\n private onProductsFilterSelect(products: string[]) {\r\n this.filteredProductNumbers = products;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.filteredProductNumbers = [];\r\n this.updateQuery();\r\n }\r\n\r\n private onSaveForecasts(updates: UpdateSmiForecast[]) {\r\n this.saveForecasts(updates);\r\n }\r\n\r\n private onChangeContractPeriodId(contractPeriodId: number) {\r\n this.selectedContractPeriodId = contractPeriodId;\r\n this.reloadForecastChartsData();\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiForecastsPage.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!./SmiForecastsPage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiForecastsPage.vue?vue&type=template&id=f8c5a1a8&scoped=true&\"\nimport script from \"./SmiForecastsPage.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiForecastsPage.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SmiForecastsPage.vue?vue&type=style&index=0&id=f8c5a1a8&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 \"f8c5a1a8\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiConsumptionLogConfirmationModal.vue?vue&type=style&index=0&id=1c140762&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiConsumptionLogQuantityInput.vue?vue&type=style&index=0&id=33e14e54&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiForecastsPage.vue?vue&type=style&index=0&id=f8c5a1a8&scoped=true&lang=scss&\"","import { CommonStore } from '@/store/common';\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 { Consoler } from '@/utils/Consoler';\r\nimport smiWarehouseService from '@/services/SmiWarehouseService';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiWarehouses',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiWarehousesModule extends VuexModule {\r\n public data: SmiWarehouses | null = null;\r\n\r\n private common = new CommonStore(10); // 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 commitSetSmiWarehouses(payload: SmiWarehouses) {\r\n this.data = payload;\r\n }\r\n\r\n @Mutation public commitClearSmiWarehouses() {\r\n this.data = 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(): Promise {\r\n if (!this.common.needToReLoad()) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.common.isCurrentlyLoading()) {\r\n return this.common.loading.loadingPromise;\r\n }\r\n\r\n this.commitSetLoading();\r\n this.commitClearSmiWarehouses();\r\n\r\n const loadingPromise = smiWarehouseService\r\n .getWarehouses()\r\n .then((smiWarehouses) => {\r\n this.commitSetSmiWarehouses(smiWarehouses);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n Consoler.debugLog('Load smi warehouses success', smiWarehouses);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smi warehouses failed', error);\r\n this.commitSetLoadingError({ error });\r\n\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoadingPromise({\r\n loadingPromise,\r\n loadingPromiseForId: null,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n}\r\n\r\nexport const smiWarehousesModule = getModule(SmiWarehousesModule);\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!./SmiHistoricalConsumptionLogWeek.vue?vue&type=style&index=0&id=7e167870&scoped=true&lang=scss&\"","import { arrayParamsSerializer, BaseServiceDefinition } from './BaseService';\r\nimport { User } from '@/models/AdminUsers/User';\r\nimport { PaginatedResult } from '@/models/PaginatedResult{T}';\r\nimport { UsersSortBy } from '@/models/AdminUsers/UsersSortBy';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { AxiosError, AxiosResponse } from 'axios';\r\nimport { fileNameDateFilter } from '@/filters/fileNameDate';\r\nimport moment from 'moment';\r\nimport { UserBusinessContact } from '@/models/AdminUsers/UserBusinessContact';\r\n\r\nclass AdminUsersService extends BaseServiceDefinition {\r\n constructor() {\r\n super();\r\n }\r\n\r\n public findUsers(\r\n sortBy: UsersSortBy,\r\n sortAsc: boolean,\r\n pageIndex: number,\r\n pageSize?: number,\r\n term?: string,\r\n customerIds?: number[],\r\n permission?: PermissionType,\r\n noPermissions?: boolean,\r\n businessContact?: string,\r\n all?: boolean\r\n ): Promise> {\r\n return this.get(\r\n '/api/v1/admin/users/find',\r\n {\r\n sortBy,\r\n sortAsc,\r\n pageIndex,\r\n pageSize,\r\n term,\r\n customerIds,\r\n permission,\r\n noPermissions,\r\n businessContact,\r\n all,\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 updateUserCustomers(\r\n azureAdId: string,\r\n customerIds: Array\r\n ): Promise {\r\n return this.put(`/api/v1/admin/users/${azureAdId}/customers`, customerIds)\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 updateUserPermissions(\r\n azureAdId: string,\r\n permissionIds: Array\r\n ): Promise {\r\n return this.put(\r\n `/api/v1/admin/users/${azureAdId}/permissions`,\r\n permissionIds\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 getUserLastSignIn(azureAdId: string): Promise {\r\n try {\r\n const response: AxiosResponse = await this.get(\r\n `/api/v1/admin/users/${azureAdId}/lastSignIn`\r\n );\r\n\r\n return response.data;\r\n } catch (error) {\r\n if ((error as AxiosError)?.response?.status === 404) {\r\n return null;\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n public async findUser(axId: string): Promise {\r\n return this.get('/api/v1/admin/users/find/specific', { axId })\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 downloadUserListDataAsExcel(\r\n sortBy: UsersSortBy,\r\n sortAsc: boolean,\r\n term?: string,\r\n customerIds?: number[],\r\n permission?: PermissionType,\r\n noPermissions?: boolean,\r\n businessContact?: string\r\n ): Promise {\r\n await this.downloadFile(\r\n `/api/v1/admin/users/excel`,\r\n `AdminUsers_List_${fileNameDateFilter(moment())}.xlsx`,\r\n {\r\n sortBy,\r\n sortAsc,\r\n term,\r\n customerIds,\r\n permission,\r\n noPermissions,\r\n businessContact,\r\n },\r\n arrayParamsSerializer\r\n );\r\n }\r\n\r\n public async getAllBusinessContactsForUser(): Promise {\r\n return this.get('/api/v1/admin/users/businessContacts')\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 getUsersContacts(userAxIds: string[]) {\r\n return this.get(\r\n '/api/v1/admin/users/usersContacts',\r\n { userAxIds: userAxIds },\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\r\nconst adminUsersService: AdminUsersService = new AdminUsersService();\r\n\r\nexport default adminUsersService;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{ref:\"modal\",attrs:{\"id\":\"adminUserEditorModal\",\"title\":_vm.user ? _vm.user.name : '',\"showFooter\":true,\"closeableByOutsideClickAndEscKey\":false},scopedSlots:_vm._u([(_vm.user)?{key:\"body\",fn:function(){return [_c('div',{staticClass:\"mb-3\"},[_c('table',{staticClass:\"keyvalue w-100\"},[(_vm.isAdminUser)?_c('tr',[_c('th',{staticClass:\"w-25\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.metadata.axId'))+\": \")]),_c('td',[_vm._v(_vm._s(_vm.user.axId))])]):_vm._e(),(_vm.isAdminUser)?_c('tr',[_c('th',{staticClass:\"w-25\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.metadata.contactId'))+\": \")]),_c('td',[_vm._v(_vm._s(_vm.contactId ? _vm.contactId : '-'))])]):_vm._e(),_c('tr',[_c('th',{staticClass:\"w-25\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.metadata.email'))+\": \")]),_c('td',[_vm._v(_vm._s(_vm.user.email))])]),(_vm.isAdminUser)?_c('tr',[_c('th',{staticClass:\"w-25\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.metadata.businessContacts'))+\": \")]),_c('td',[_vm._v(_vm._s(_vm.businessContactsText))])]):_vm._e(),(_vm.loadingLastSignIn)?_c('tr',[_c('td',{attrs:{\"colspan\":\"2\"}},[_c('span',{staticClass:\"o-loader o-loader--medium\"})])]):(!_vm.errorLastSignIn)?_c('tr',[_c('th',{staticClass:\"w-25\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.metadata.lastSignIn'))+\": \")]),_c('td',[_vm._v(_vm._s(_vm.lastSignIn))])]):_vm._e()])]),_c('AdminUserPermissionsEditor',{attrs:{\"permissions\":_vm.parentPermissions,\"permissionIds\":_vm.permissionIds},on:{\"permissionIdsChange\":_vm.onPermissionIdsChange}}),_c('AdminUserCustomersEditor',{attrs:{\"customerIds\":_vm.customerIds},on:{\"customerIdsChange\":_vm.onCustomerIdsChange}})]},proxy:true}:null,{key:\"footer\",fn:function(){return [(_vm.errorUpdating)?_c('div',{staticClass:\"c-alert c-alert--red mb-3\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('adminUserEditorModal.errorUpdating')))]),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}})]):_vm._e(),(_vm.errorLastSignIn)?_c('div',{staticClass:\"c-alert c-alert--red mb-3\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('adminUserEditorModal.errorLoadingLastSignIn')))]),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}})]):_vm._e(),(_vm.errorLoadingUser)?_c('div',{staticClass:\"c-alert c-alert--red mb-3\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('adminUserEditorModal.errorLoadingUser')))]),_c('span',{staticClass:\"js-toggle-hidden c-alert__close\",attrs:{\"data-element-id\":\"adminUserEditorModal-errorAlert\"}})]):_vm._e(),(_vm.loadingUser)?_c('div',{staticClass:\"d-flex align-items-center justify-content-center u-min-height-300\"},[_c('span',{staticClass:\"o-loader\"},[_vm._v(_vm._s(_vm.$t('adminUserEditorModal.loadingUser')))])]):_vm._e(),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.canUpdate && !_vm.loadingUser),expression:\"canUpdate && !loadingUser\"}]},[_c('button',{staticClass:\"o-button o-button--lime-green mr-2\",attrs:{\"disabled\":!_vm.hasChanges || _vm.updating},on:{\"click\":function($event){$event.preventDefault();return _vm.onSubmit.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.okButton'))+\" \")]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.hasChanges),expression:\"hasChanges\"}],staticClass:\"o-button o-button--white mr-2\",attrs:{\"disabled\":_vm.updating},on:{\"click\":function($event){$event.preventDefault();return _vm.onReset.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserEditorModal.resetButton'))+\" \")])])]},proxy:true}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasPermission)?_c('div',[_c('h3',{staticClass:\"t-heading-5 mb-2\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserPermissionsEditor.title'))+\" \")]),_c('div',{staticClass:\"mb-3\"},[_c('h4',{staticClass:\"t-heading-6 u-thin\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserPermissionsEditor.general'))+\": \")]),_vm._l((_vm.generalPermissions),function(permission,index){return _c('AdminUserPermissionEditor',{key:(\"general|\" + index),attrs:{\"permission\":permission,\"permissionIds\":_vm.permissionIds},on:{\"permissionChange\":_vm.onPermissionChange}})})],2),_c('div',{staticClass:\"mb-3\"},[_c('h4',{staticClass:\"t-heading-6 u-thin\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserPermissionsEditor.nonSmi'))+\": \")]),_vm._l((_vm.nonSmiPermissions),function(permission,index){return _c('AdminUserPermissionEditor',{key:(\"nonSmi|\" + index),attrs:{\"permission\":permission,\"permissionIds\":_vm.permissionIds},on:{\"permissionChange\":_vm.onPermissionChange}})})],2),_c('div',{staticClass:\"mb-3\"},[_c('h4',{staticClass:\"t-heading-6 u-thin\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserPermissionsEditor.smi'))+\": \")]),_vm._l((_vm.smiPermissions),function(permission,index){return _c('AdminUserPermissionEditor',{key:(\"smi|\" + index),attrs:{\"permission\":permission,\"permissionIds\":_vm.permissionIds},on:{\"permissionChange\":_vm.onPermissionChange}})})],2)]):_vm._e()}\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('label',{staticClass:\"o-checkbox mb-1\"},[_c('input',{attrs:{\"disabled\":!_vm.permission.canBeUsed,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isPermissionChecked(_vm.permission)},on:{\"change\":function($event){return _vm.onPermissionChange(_vm.permission)}}}),_c('span',{staticClass:\"checkmark\"}),_vm._v(\" \"+_vm._s(_vm.$t((\"permissionTypes.\" + (_vm.permission.type))))+\" \")]),(_vm.permission.childPermissions.length)?_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isPermissionChecked(_vm.permission)),expression:\"isPermissionChecked(permission)\"}],staticClass:\"ml-3\"},_vm._l((_vm.permission.childPermissions),function(permission,index){return _c('div',{key:index},[_c('label',{staticClass:\"o-checkbox mb-1\"},[_c('input',{attrs:{\"disabled\":!permission.canBeUsed,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isPermissionChecked(permission)},on:{\"change\":function($event){return _vm.onPermissionChange(permission)}}}),_c('span',{staticClass:\"checkmark\"}),_vm._v(\" \"+_vm._s(_vm.$t((\"permissionTypes.\" + (permission.type))))+\" \")])])}),0):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { ParentPermission } from '@/models/AdminUsers/ParentPermission';\r\nimport { Permission } from '@/models/AdminUsers/Permission';\r\n\r\n@Component\r\nexport default class AdminUserPermissionEditor extends Vue {\r\n @Prop({ required: true }) private permission!: ParentPermission;\r\n @Prop({ required: true }) private permissionIds!: PermissionType[];\r\n\r\n private isPermissionChecked(permission: Permission): boolean {\r\n return this.permissionIds.some((id) => id === permission.type);\r\n }\r\n\r\n private onPermissionChange(permission: Permission) {\r\n this.$emit(\r\n 'permissionChange',\r\n permission,\r\n !this.isPermissionChecked(permission)\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!./AdminUserPermissionEditor.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!./AdminUserPermissionEditor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AdminUserPermissionEditor.vue?vue&type=template&id=294384b4&\"\nimport script from \"./AdminUserPermissionEditor.vue?vue&type=script&lang=ts&\"\nexport * from \"./AdminUserPermissionEditor.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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ParentPermission } from '@/models/AdminUsers/ParentPermission';\r\nimport { Permission } from '@/models/AdminUsers/Permission';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport AdminUserPermissionEditor from './AdminUserPermissionEditor.vue';\r\nimport { authRequirementsForAdminUserPermissions } from '@/router/authRequirements';\r\nimport { Permissions } from '@/utils/Permissions';\r\n\r\n@Component({\r\n components: {\r\n AdminUserPermissionEditor,\r\n },\r\n})\r\nexport default class AdminUserPermissionsEditor extends Vue {\r\n @Prop({ required: true }) private permissions!: ParentPermission[];\r\n @Prop({ required: true }) private permissionIds!: PermissionType[];\r\n\r\n private get hasPermission(): boolean {\r\n return Permissions.validate(authRequirementsForAdminUserPermissions).valid;\r\n }\r\n\r\n private get generalPermissions(): ParentPermission[] {\r\n return this.permissions.filter(\r\n (p) => p.isForSmiCustomersOnly === undefined\r\n );\r\n }\r\n\r\n private get nonSmiPermissions(): ParentPermission[] {\r\n return this.permissions.filter((p) => p.isForSmiCustomersOnly === false);\r\n }\r\n\r\n private get smiPermissions(): ParentPermission[] {\r\n return this.permissions.filter((p) => p.isForSmiCustomersOnly === true);\r\n }\r\n\r\n private togglePermission(\r\n permission: Permission,\r\n toggle: boolean\r\n ): PermissionType[] {\r\n const permissionIds = [...this.permissionIds];\r\n\r\n let index = permissionIds.findIndex((p) => p === permission.type);\r\n\r\n if (index === -1) {\r\n if (toggle) {\r\n permissionIds.push(permission.type);\r\n }\r\n\r\n return permissionIds;\r\n }\r\n\r\n permissionIds.splice(index, 1);\r\n\r\n ((permission as ParentPermission)?.childPermissions ?? []).forEach((p) => {\r\n index = permissionIds.findIndex((id) => id === p.type);\r\n\r\n if (index === -1) {\r\n return;\r\n }\r\n\r\n permissionIds.splice(index, 1);\r\n });\r\n\r\n return permissionIds;\r\n }\r\n\r\n private onPermissionChange(permission: Permission, toggle: boolean): void {\r\n this.onPermissionIdsChange(this.togglePermission(permission, toggle));\r\n }\r\n\r\n private onPermissionIdsChange(permissionIds: PermissionType[]): void {\r\n this.$emit('permissionIdsChange', permissionIds);\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!./AdminUserPermissionsEditor.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!./AdminUserPermissionsEditor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AdminUserPermissionsEditor.vue?vue&type=template&id=0f8b7284&\"\nimport script from \"./AdminUserPermissionsEditor.vue?vue&type=script&lang=ts&\"\nexport * from \"./AdminUserPermissionsEditor.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 (_vm.hasPermission)?_c('div',[_c('h3',{staticClass:\"t-heading-5\"},[_vm._v(\" \"+_vm._s(_vm.$t('adminUserCustomersEditor.title'))+\" \")]),_c('CompanyChainCustomersTreeSelect',{staticClass:\"tree-select--light-grey\",attrs:{\"value\":_vm.customerIds,\"responsibles\":_vm.responsibles,\"nonResponsibles\":_vm.nonResponsibles,\"showIfSmiCustomer\":true,\"placeholder\":_vm.$t('adminUserCustomersEditor.placeholder')},on:{\"input\":_vm.onCustomersChange}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { CompanyChain } from '@/models/CompanyChain';\r\nimport { userCustomersModule } from '@/store/modules/userCustomers';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport CompanyChainCustomersTreeSelect from './CompanyChainCustomersTreeSelect.vue';\r\nimport { authRequirementsForAdminUserCustomers } from '@/router/authRequirements';\r\nimport { Permissions } from '@/utils/Permissions';\r\n\r\n@Component({\r\n components: {\r\n CompanyChainCustomersTreeSelect,\r\n },\r\n})\r\nexport default class AdminUserCustomersEditor extends Vue {\r\n @Prop({ required: true }) private customerIds!: number[];\r\n\r\n private get hasPermission(): boolean {\r\n return Permissions.validate(authRequirementsForAdminUserCustomers).valid;\r\n }\r\n\r\n private get responsibles(): CompanyChain[] {\r\n return userCustomersModule.userCustomers?.responsibles ?? [];\r\n }\r\n\r\n private get nonResponsibles(): CompanyChain[] {\r\n return userCustomersModule.userCustomers?.nonResponsibles ?? [];\r\n }\r\n\r\n private onCustomersChange(customerIds: number[]): void {\r\n this.onCustomerIdsChange(customerIds);\r\n }\r\n\r\n private onCustomerIdsChange(customerIds: number[]): void {\r\n this.$emit('customerIdsChange', customerIds);\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!./AdminUserCustomersEditor.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!./AdminUserCustomersEditor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AdminUserCustomersEditor.vue?vue&type=template&id=512689b8&\"\nimport script from \"./AdminUserCustomersEditor.vue?vue&type=script&lang=ts&\"\nexport * from \"./AdminUserCustomersEditor.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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 Modal from '@/components/general/Modal.vue';\r\nimport { User } from '@/models/AdminUsers/User';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { adminUsersModule } from '@/store/modules/adminUsers';\r\nimport { ParentPermission } from '@/models/AdminUsers/ParentPermission';\r\nimport { dateFilter } from '@/filters/date';\r\nimport { Roles } from '@/models/UserProfile/Roles';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport { adminUsersSpecificModule } from '@/store/modules/adminUsersSpecific';\r\nimport AdminUserPermissionsEditor from './AdminUserPermissionsEditor.vue';\r\nimport AdminUserCustomersEditor from './AdminUserCustomersEditor.vue';\r\nimport {\r\n authRequirementsForAdminUserPermissions,\r\n authRequirementsForAdminUserCustomers,\r\n} from '@/router/authRequirements';\r\nimport { Helpers } from '@/utils/Helpers';\r\n\r\n@Component({\r\n components: {\r\n Modal,\r\n AdminUserPermissionsEditor,\r\n AdminUserCustomersEditor,\r\n },\r\n})\r\nexport default class AdminUserEditorModal extends Vue {\r\n @Prop({ required: true }) private axId!: string;\r\n @Prop({ required: true }) private parentPermissions!: ParentPermission[];\r\n @Prop({ required: false }) private contactId?: string | null;\r\n\r\n private permissionIds: PermissionType[] = [];\r\n private customerIds: number[] = [];\r\n\r\n private updating: boolean = false;\r\n private errorUpdating: boolean = false;\r\n\r\n private loadingLastSignIn: boolean = false;\r\n private errorLastSignIn: boolean = false;\r\n\r\n private loadingUser: boolean = false;\r\n private errorLoadingUser: boolean = false;\r\n\r\n private get user(): User | null {\r\n return adminUsersSpecificModule.item(this.axId);\r\n }\r\n\r\n private get lastSignIn(): string {\r\n const lastSignIn = this.user?.lastSignIn;\r\n\r\n if (lastSignIn) {\r\n return dateFilter(lastSignIn.toString());\r\n }\r\n\r\n return '-';\r\n }\r\n\r\n private get isAdminUser(): boolean {\r\n return Permissions.hasRole(Roles.IsAdminUser);\r\n }\r\n\r\n private get canUpdate(): boolean {\r\n return (\r\n Permissions.validate(authRequirementsForAdminUserPermissions).valid ||\r\n Permissions.validate(authRequirementsForAdminUserCustomers).valid\r\n );\r\n }\r\n\r\n private get hasChanges(): boolean {\r\n return this.hasPermissionChanges || this.hasCustomerChanges;\r\n }\r\n\r\n private get hasPermissionChanges(): boolean {\r\n if (!this.user) {\r\n return false;\r\n }\r\n\r\n return !Helpers.areEqual(this.user.permissions, this.permissionIds);\r\n }\r\n\r\n private get hasCustomerChanges(): boolean {\r\n if (!this.user) {\r\n return false;\r\n }\r\n\r\n return !Helpers.areEqual(\r\n this.user.customers.map((c) => c.id),\r\n this.customerIds\r\n );\r\n }\r\n\r\n private get businessContactsText(): string {\r\n return this.user !== null && this.user.businessContacts.length > 0\r\n ? this.user.businessContacts\r\n .map(\r\n (responsibleUser) =>\r\n `${responsibleUser.name} (${responsibleUser.responsibilities.join(\r\n ', '\r\n )})`\r\n )\r\n .join(', ')\r\n : '-';\r\n }\r\n\r\n public show(): void {\r\n if (this.user === null && this.axId !== null) {\r\n this.loadSpecificUser();\r\n } else {\r\n this.initialize();\r\n }\r\n\r\n const modal = this.$refs.modal as Modal;\r\n\r\n if (!modal) {\r\n return;\r\n }\r\n\r\n modal.showModal();\r\n }\r\n\r\n private loadSpecificUser() {\r\n this.errorLoadingUser = false;\r\n this.loadingUser = true;\r\n\r\n adminUsersSpecificModule\r\n .dispatchLoad({ axId: this.axId })\r\n .catch(() => {\r\n this.errorLoadingUser = true;\r\n })\r\n .finally(() => {\r\n this.initialize();\r\n this.loadingUser = false;\r\n });\r\n }\r\n\r\n private initialize(): void {\r\n if (!this.user) {\r\n return;\r\n }\r\n\r\n this.permissionIds = [...this.user.permissions];\r\n this.customerIds = this.user.customers.map((c) => c.id);\r\n\r\n this.errorLastSignIn = false;\r\n this.loadingLastSignIn = true;\r\n\r\n adminUsersModule\r\n .dispatchGetUserLastSignIn({\r\n azureAdId: this.user.azureAdId,\r\n })\r\n .catch(() => {\r\n this.errorLastSignIn = true;\r\n })\r\n .finally(() => {\r\n this.loadingLastSignIn = false;\r\n });\r\n }\r\n\r\n private onPermissionIdsChange(permissionIds: PermissionType[]) {\r\n this.permissionIds = permissionIds;\r\n }\r\n\r\n private onCustomerIdsChange(customerIds: number[]): void {\r\n this.customerIds = customerIds;\r\n }\r\n\r\n private async onSubmit(): Promise {\r\n if (!this.user) {\r\n return;\r\n }\r\n\r\n this.updating = true;\r\n this.errorUpdating = false;\r\n\r\n if (this.hasPermissionChanges) {\r\n await adminUsersModule\r\n .dispatchUpdateUserPermissions({\r\n azureAdId: this.user.azureAdId,\r\n permissionIds: this.permissionIds,\r\n })\r\n .catch(() => {\r\n this.errorUpdating = true;\r\n });\r\n }\r\n\r\n if (this.hasCustomerChanges) {\r\n await adminUsersModule\r\n .dispatchUpdateUserCustomers({\r\n azureAdId: this.user.azureAdId,\r\n customerIds: this.customerIds,\r\n })\r\n .catch(() => {\r\n this.errorUpdating = true;\r\n });\r\n }\r\n\r\n this.updating = false;\r\n\r\n if (this.errorUpdating) {\r\n return;\r\n }\r\n\r\n const modal = this.$refs.modal as Modal;\r\n\r\n if (!modal) {\r\n return;\r\n }\r\n\r\n modal.hideModal();\r\n }\r\n\r\n private onReset(): void {\r\n this.initialize();\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!./AdminUserEditorModal.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!./AdminUserEditorModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./AdminUserEditorModal.vue?vue&type=template&id=7d96eae3&\"\nimport script from \"./AdminUserEditorModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./AdminUserEditorModal.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\nimport {\r\n Module,\r\n VuexModule,\r\n Mutation,\r\n Action,\r\n getModule,\r\n} from 'vuex-module-decorators';\r\nimport adminUsersService from '@/services/AdminUsersService';\r\nimport { PaginatedResult } from '@/models/PaginatedResult{T}';\r\nimport { User } from '@/models/AdminUsers/User';\r\nimport { Consoler } from '@/utils/Consoler';\r\nimport { UsersSortBy } from '@/models/AdminUsers/UsersSortBy';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\n\r\ninterface Search {\r\n sortBy: UsersSortBy;\r\n sortAsc: boolean;\r\n pageIndex: number;\r\n pageSize?: number;\r\n term?: string;\r\n customerIds: number[];\r\n permission?: PermissionType;\r\n noPermissions: boolean;\r\n businessContact?: string;\r\n results: PaginatedResult;\r\n}\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'adminUsers',\r\n dynamic: true,\r\n store,\r\n})\r\nclass AdminUsersModule extends VuexModule {\r\n public search: Search | null = null;\r\n\r\n private common = new CommonStore(20); // 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 commitSetUsers(payload: Search) {\r\n payload.results.items.forEach((user) => (user.lastSignIn = undefined));\r\n\r\n this.search = payload;\r\n }\r\n\r\n @Mutation public commitClearUsers() {\r\n this.search = null;\r\n }\r\n\r\n @Mutation public commitSetUser(user: User) {\r\n if (this.search === null) {\r\n Consoler.debugWarn(\r\n 'commitSetUser: Could not update user since no users loaded.'\r\n );\r\n return;\r\n }\r\n\r\n const userIndex = this.search.results.items.findIndex(\r\n (u) => u.azureAdId === user.azureAdId\r\n );\r\n if (userIndex < 0) {\r\n Consoler.debugWarn(\r\n 'commitSetUser: Could not update user since not found.',\r\n user,\r\n this.search\r\n );\r\n return;\r\n }\r\n\r\n this.search.results.items.splice(userIndex, 1, user);\r\n }\r\n\r\n @Mutation private commitSetUserLastSignIn(payload: {\r\n user: User;\r\n lastSignIn: Date;\r\n }): void {\r\n payload.user.lastSignIn = payload.lastSignIn;\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 sortBy: UsersSortBy;\r\n sortAsc: boolean;\r\n pageIndex: number;\r\n pageSize?: number;\r\n term?: string;\r\n customerIds: number[];\r\n permission?: PermissionType;\r\n noPermissions: boolean;\r\n businessContact?: string;\r\n all?: boolean;\r\n }): Promise {\r\n const loadingId = `${payload.sortBy}|${payload.sortAsc}|${\r\n payload.pageIndex\r\n }|${payload.pageSize}|${payload.term ?? ''}|${payload.customerIds\r\n .sort()\r\n .join(',')}|${payload.permission ?? ''}|${payload.noPermissions}|${\r\n payload.businessContact ?? ''\r\n }`;\r\n\r\n if (\r\n this.search !== null &&\r\n this.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.commitClearUsers();\r\n\r\n const loadingPromise = adminUsersService\r\n .findUsers(\r\n payload.sortBy,\r\n payload.sortAsc,\r\n payload.pageIndex,\r\n payload.pageSize,\r\n payload.term,\r\n payload.customerIds,\r\n payload.permission,\r\n payload.noPermissions,\r\n payload.businessContact,\r\n payload.all ?? false\r\n )\r\n .then((response) => {\r\n const search: Search = {\r\n sortBy: payload.sortBy,\r\n sortAsc: payload.sortAsc,\r\n pageIndex: payload.pageIndex,\r\n pageSize: payload.pageSize,\r\n term: payload.term,\r\n customerIds: payload.customerIds,\r\n permission: payload.permission,\r\n noPermissions: payload.noPermissions,\r\n results: response,\r\n };\r\n this.commitSetUsers(search);\r\n this.commitSetLoadedDate();\r\n this.commitClearLoading();\r\n Consoler.debugLog('Load adminUsers success', response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load adminUsers failed', error);\r\n this.commitSetLoadingError({ error });\r\n\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 @Action\r\n public async dispatchUpdateUserCustomers(payload: {\r\n azureAdId: string;\r\n customerIds: Array;\r\n }): Promise {\r\n if (\r\n this.search === null ||\r\n !this.search.results.items.some(\r\n (user) => user.azureAdId === payload.azureAdId\r\n )\r\n ) {\r\n return Promise.reject(\r\n `User with Azure AD ID ${payload.azureAdId} must first be loaded before updating its customers.`\r\n );\r\n }\r\n\r\n return adminUsersService\r\n .updateUserCustomers(payload.azureAdId, payload.customerIds)\r\n .then((user) => {\r\n Consoler.debugLog('Updating user customers succeeded.');\r\n\r\n this.commitSetUser(user);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Updating user customers failed.', error);\r\n\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n @Action\r\n public async dispatchUpdateUserPermissions(payload: {\r\n azureAdId: string;\r\n permissionIds: Array;\r\n }): Promise {\r\n if (\r\n this.search === null ||\r\n !this.search.results.items.some(\r\n (user) => user.azureAdId === payload.azureAdId\r\n )\r\n ) {\r\n return Promise.reject(\r\n `User with Azure AD ID ${payload.azureAdId} must first be loaded before updating its permissions.`\r\n );\r\n }\r\n\r\n return adminUsersService\r\n .updateUserPermissions(payload.azureAdId, payload.permissionIds)\r\n .then((user) => {\r\n Consoler.debugLog('Updating user permissions succeeded.');\r\n\r\n this.commitSetUser(user);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Updating user permissions failed.', error);\r\n\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n @Action({ rawError: true })\r\n public async dispatchGetUserLastSignIn(payload: {\r\n azureAdId: string;\r\n }): Promise {\r\n const users = this.search?.results?.items ?? [];\r\n\r\n const user = users.find((u) => u.azureAdId === payload.azureAdId);\r\n\r\n if (!user || user.lastSignIn) {\r\n return;\r\n }\r\n\r\n let lastSignIn: Date | null;\r\n\r\n try {\r\n lastSignIn = await adminUsersService.getUserLastSignIn(payload.azureAdId);\r\n\r\n Consoler.debugLog('Getting user last sign in succeeded.');\r\n } catch (error) {\r\n Consoler.debugWarn('Getting user last sign in failed.', error);\r\n\r\n throw error;\r\n }\r\n\r\n if (!lastSignIn) {\r\n return;\r\n }\r\n\r\n this.commitSetUserLastSignIn({ user, lastSignIn });\r\n }\r\n}\r\n\r\nexport const adminUsersModule = getModule(AdminUsersModule);\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!./SmiConsumptionLogWeek.vue?vue&type=style&index=0&id=0ae4c6d7&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiConsumptionOverviewKPIs.vue?vue&type=style&index=0&id=c899a1f4&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SmiWarehouseTreeSelect.vue?vue&type=style&index=0&id=5f05f652&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DefaultLayout',[_c('Breadcrumbs',{attrs:{\"items\":_vm.breadcrumbs}}),_c('Messages'),_c('div',{staticClass:\"container-fluid mt-3\"},[_c('div',{staticClass:\"d-flex flex-column flex-sm-row justify-content-between flex-wrap align-items-sm-center\"},[_c('h1',{staticClass:\"t-heading-3 pr-2\"},[_vm._v(_vm._s(_vm.$t('smiMyWarehousePage.title')))]),_c('div',{staticClass:\"d-align-self-end\"},[_c('SmiWarehouseTreeSelect',{attrs:{\"value\":_vm.selectedSmiWarehouseId,\"smiWarehouses\":_vm.smiWarehouses,\"placeholder\":_vm.$t('smiMyWarehousePage.warehouses.placeholder'),\"clearable\":false},on:{\"select\":_vm.onSmiWarehouseSelect}})],1)]),_c('span',{staticClass:\"o-line\"}),_c('div',{staticClass:\"d-flex justify-content-between mb-2\"},[(_vm.warehouse)?_c('div',{staticClass:\"d-flex flex-wrap mb-4\"},[(_vm.warehouse.products.length)?_c('ProductsTreeSelect',{attrs:{\"value\":_vm.filteredProductNumbers,\"products\":_vm.warehouse.products,\"placeholder\":_vm.$t('smiMyWarehousePage.productsFilter.placeholder'),\"clearable\":false},on:{\"select\":_vm.onProductsFilterSelect}}):_vm._e(),(_vm.anyFilter && _vm.warehouse.products.length)?_c('button',{staticClass:\"o-button px-1\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.onClearFilters}},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyWarehousePage.productsFilter.clearFilters'))+\" \"),_c('i',{staticClass:\"material-icons\"},[_vm._v(\"clear\")])]):_vm._e()],1):_vm._e(),_c('div',[_c('router-link',{staticClass:\"o-button u-center-text o-button--blue d-align-self-end mr-1\",attrs:{\"to\":_vm.orderFlowRoute},on:{\"click\":function($event){$event.stopPropagation();return _vm.navigate.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyWarehousePage.orderFlow'))+\" \")]),_c('router-link',{staticClass:\"o-button u-center-text o-button--blue d-align-self-end\",attrs:{\"to\":_vm.contactRoute},on:{\"click\":function($event){$event.stopPropagation();return _vm.navigate.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyWarehousePage.contact'))+\" \")])],1)]),(_vm.errorLoading)?_c('div',{staticClass:\"c-alert c-alert--red mb-2\"},[_c('span',{staticClass:\"c-alert__text\"},[_vm._v(_vm._s(_vm.$t('smiMyWarehousePage.error')))])]):_vm._e(),(_vm.isLoading)?_c('div',{staticClass:\"u-position-relative u-min-height-300\"},[_c('span',{staticClass:\"o-loader o-loader--absolute\"})]):_vm._e(),(_vm.warehouse)?_c('div',[_c('div',{staticClass:\"mb-5\"},[_c('h2',{staticClass:\"t-heading-4\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyWarehousePage.totalPerformance'))+\" \")]),(_vm.warehouse.totalPerformance)?_c('div',{staticClass:\"u-background-color-white p-4\"},[_c('SmiWarehousePerformanceCharts',{attrs:{\"performance\":_vm.warehouse.totalPerformance}})],1):_c('div',[_vm._v(_vm._s(_vm.$t('smiMyWarehousePage.noTotalPerformance')))])]),_c('h2',{staticClass:\"t-heading-4 mb-3\"},[_vm._v(\" \"+_vm._s(_vm.$t('smiMyWarehousePage.products'))+\" \")]),_c('div',{staticClass:\"mb-5\"},[(_vm.filteredProducts.length > 0)?_vm._l((_vm.filteredProducts),function(productDetails,index){return _c('SmiWarehouseProductsDetails',{key:(index + \"|\" + (productDetails.productNumber)),staticClass:\"mb-4\",attrs:{\"productDetails\":productDetails,\"smiWarehouseId\":_vm.selectedSmiWarehouseId,\"isAllowedToEdit\":_vm.isAllowedToEdit},on:{\"openStockReportModal\":_vm.openStockReportModal}})}):_c('div',[_vm._v(\" \"+_vm._s(_vm.$t( (\"smiMyWarehousePage.noStock.\" + (_vm.anyFilter ? 'filtered' : 'notFiltered')) ))+\" \")])],2),_c('SmiWarehouseDeliveries',{attrs:{\"warehouseId\":_vm.warehouse.id,\"products\":_vm.filteredProducts}})],1):_vm._e(),_c('SmiWarehouseStockReportModal',{ref:\"smiWarehouseStockReportModal\",attrs:{\"smiWarehouseId\":_vm.selectedSmiWarehouseId,\"productNumber\":_vm.productNumber,\"productDisplayName\":_vm.productDisplayName,\"stockDetails\":_vm.stockDetailsForModal}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 smiWarehouseService from '@/services/SmiWarehouseService';\r\nimport { SmiWarehouseDetails } from '@/models/Smi/Warehouses/SmiWarehouseDetails';\r\n\r\n@Module({\r\n namespaced: true,\r\n name: 'smiMyWarehouse',\r\n dynamic: true,\r\n store,\r\n})\r\nclass SmiMyWarehouseModule extends VuexModule {\r\n private common = new CommonArrayStore(20); // reLoadMinMinutesInterval\r\n\r\n // ---------------\r\n // ### Getters ###\r\n // ---------------\r\n\r\n public get item() {\r\n return (id: number) => this.common.getDataFor(id);\r\n }\r\n\r\n // -----------------\r\n // ### Mutations ###\r\n // -----------------\r\n\r\n @Mutation private commitSetSmiWarehouse(payload: SmiWarehouseDetails) {\r\n for (const product of payload.products) {\r\n if (product.stockDetails !== undefined) {\r\n product.stockDetails.modifiedMaxQuantity =\r\n product.stockDetails.maxQuantity ?? 0;\r\n product.stockDetails.modifiedMinQuantity =\r\n product.stockDetails.minQuantity ?? 0;\r\n }\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: SmiWarehouseDetails;\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(\r\n smiWarehouseId: number,\r\n force?: boolean\r\n ): Promise {\r\n // If recently loaded, return\r\n if (this.common.hasFreshDataFor(smiWarehouseId) && !force) {\r\n return Promise.resolve(this.item(smiWarehouseId)!);\r\n }\r\n\r\n const currentlyLoadingPromise =\r\n this.common.isCurrentlyLoading(smiWarehouseId);\r\n if (currentlyLoadingPromise) {\r\n Consoler.debugLog(\r\n 'Already loading, waiting for existing load to finish',\r\n 'smiWarehouse'\r\n );\r\n return currentlyLoadingPromise;\r\n }\r\n\r\n const loadingPromise = smiWarehouseService\r\n .getWarehouse(smiWarehouseId)\r\n .then((response) => {\r\n this.commitSetSmiWarehouse(response);\r\n this.commitSetLoadingComplete({\r\n id: smiWarehouseId,\r\n data: response,\r\n });\r\n Consoler.debugLog(\r\n 'Load smiWarehouse success in smiMyWarehouse',\r\n response\r\n );\r\n return Promise.resolve(response);\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Load smiWarehouse failed in smiMyWarehouse', error);\r\n this.commitSetLoadingError({ id: smiWarehouseId, error });\r\n return Promise.reject(error);\r\n });\r\n\r\n this.commitSetLoading({\r\n id: smiWarehouseId,\r\n loadingPromise,\r\n clearData: true,\r\n });\r\n\r\n return loadingPromise;\r\n }\r\n\r\n @Action\r\n public async dispatchUpdateStockLevel(smiWarehouseId: number): Promise {\r\n return smiWarehouseService\r\n .updateStockLevel(smiWarehouseId)\r\n .then(() => {\r\n Consoler.debugLog('Update warehouse stock level success');\r\n })\r\n .catch((error) => {\r\n Consoler.debugWarn('Update warehouse stock level failed', error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n}\r\n\r\nexport const smiMyWarehouseModule = getModule(SmiMyWarehouseModule);\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 {\r\n routeNameSmiMyWarehouse,\r\n routeNameSmiRoot,\r\n routeNameUserContacts,\r\n routeNameOrderFlow,\r\n} from '@/router/routes';\r\nimport { Breadcrumb } from '@/models/Breadcrumb';\r\nimport { SmiWarehouses } from '@/models/Smi/Warehouses/SmiWarehouses';\r\nimport { smiWarehousesModule } from '@/store/modules/smiWarehouses';\r\nimport { smiMyWarehouseModule } from '@/store/modules/smiMyWarehouse';\r\nimport { SmiWarehouse } from '@/models/Smi/Warehouses/SmiWarehouse';\r\nimport SmiWarehouseTreeSelect from '@/components/SmiWarehouseTreeSelect.vue';\r\nimport ProductsTreeSelect from '@/components/ProductsTreeSelect.vue';\r\nimport { Location } from 'vue-router';\r\nimport { SmiWarehouseDetails } from '@/models/Smi/Warehouses/SmiWarehouseDetails';\r\nimport SmiWarehousePerformanceCharts from '@/components/SmiWarehousePerformanceCharts.vue';\r\nimport SmiWarehouseProductsDetails from '@/components/SmiWarehouseProductsDetails.vue';\r\nimport SmiWarehouseDeliveries from '@/components/SmiWarehouseDeliveries.vue';\r\nimport { userProfileModule } from '@/store/modules/userProfile';\r\nimport { SmiWarehouseProductDetails } from '@/models/Smi/Warehouses/SmiWarehouseProductDetails';\r\nimport telemetryService, {\r\n RouteTrackingInfo,\r\n} from '@/services/TelemetryService';\r\nimport {\r\n createParamsWithProgrammaticRouting,\r\n getRouteTrackingInfo,\r\n} from '@/router/functions';\r\nimport { PermissionType } from '@/models/UserProfile/PermissionType';\r\nimport { Permissions } from '@/utils/Permissions';\r\nimport SmiWarehouseStockReportModal from '@/components/SmiWarehouseStockReportModal.vue';\r\nimport { SmiWarehouseStockDetails } from '@/models/Smi/Warehouses/SmiWarehouseStockDetails';\r\n\r\n@Component({\r\n components: {\r\n DefaultLayout,\r\n Breadcrumbs,\r\n Messages,\r\n SmiWarehouseTreeSelect,\r\n SmiWarehousePerformanceCharts,\r\n SmiWarehouseProductsDetails,\r\n ProductsTreeSelect,\r\n SmiWarehouseDeliveries,\r\n SmiWarehouseStockReportModal,\r\n },\r\n})\r\nexport default class SmiMyWarehousePage extends Vue {\r\n private routeTrackingInfo: RouteTrackingInfo = {};\r\n private selectedSmiWarehouseId: number | null = null;\r\n private invalidSelectedSmiWarehouse: boolean = false;\r\n private filteredProductNumbers: string[] = [];\r\n private isLoading: boolean = false;\r\n private errorLoading: boolean = false;\r\n private contactRoute: Location = { name: routeNameUserContacts };\r\n private orderFlowRoute: Location = { name: routeNameOrderFlow };\r\n private productNumber: string = '';\r\n private productDisplayName: string = '';\r\n private stockDetails: SmiWarehouseStockDetails | undefined = undefined;\r\n\r\n private get smiWarehouses(): SmiWarehouses | null {\r\n return smiWarehousesModule.data;\r\n }\r\n\r\n private get anyFilter(): boolean {\r\n return this.filteredProductNumbers.length > 0;\r\n }\r\n\r\n private get stockDetailsForModal(): SmiWarehouseStockDetails | undefined {\r\n return this.stockDetails;\r\n }\r\n\r\n private get warehouse(): SmiWarehouseDetails | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n return smiMyWarehouseModule.item(this.selectedSmiWarehouseId);\r\n }\r\n\r\n private get responsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.responsibles ?? [];\r\n }\r\n\r\n private get nonResponsiblesWarehouses(): SmiWarehouse[] {\r\n return this.smiWarehouses?.nonResponsibles ?? [];\r\n }\r\n\r\n private get warehouses(): SmiWarehouse[] {\r\n return this.responsiblesWarehouses.concat(this.nonResponsiblesWarehouses);\r\n }\r\n\r\n private get selectedWarehouse(): SmiWarehouse | null {\r\n if (this.selectedSmiWarehouseId === null) {\r\n return null;\r\n }\r\n const warehouse = this.warehouses.find(\r\n (w) => w.id === this.selectedSmiWarehouseId\r\n );\r\n return warehouse ?? null;\r\n }\r\n\r\n private get filteredProducts(): SmiWarehouseProductDetails[] | null {\r\n if (this.warehouse) {\r\n if (this.filteredProductNumbers.length > 0) {\r\n return this.warehouse.products.filter((p) =>\r\n this.filteredProductNumbers.includes(p.productNumber)\r\n );\r\n }\r\n }\r\n return this.warehouse?.products ?? null;\r\n }\r\n\r\n private get isAllowedToEdit(): boolean {\r\n return Permissions.hasPermission(\r\n PermissionType.IsAllowedToEditSmiWarehouse\r\n );\r\n }\r\n\r\n private get breadcrumbs(): Breadcrumb[] {\r\n const items: Breadcrumb[] = [\r\n {\r\n routeName: routeNameSmiRoot,\r\n name: this.$t('breadcrumbs.' + routeNameSmiRoot).toString(),\r\n },\r\n {\r\n routeName: routeNameSmiMyWarehouse,\r\n name: this.$t('breadcrumbs.' + routeNameSmiMyWarehouse).toString(),\r\n },\r\n ];\r\n\r\n if (this.selectedWarehouse !== null) {\r\n items.push({\r\n routeName: routeNameSmiMyWarehouse,\r\n routeQuery: { warehouse: this.selectedSmiWarehouseId },\r\n name: this.selectedWarehouse.customerName,\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n @Watch('$route', { immediate: false, deep: true })\r\n private onRouteChange(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private created(): void {\r\n this.routeTrackingInfo = getRouteTrackingInfo(this.$route);\r\n this.initialize().then((hasFinished) => {\r\n if (hasFinished) {\r\n telemetryService.stopTrackPage(this.routeTrackingInfo);\r\n }\r\n });\r\n }\r\n\r\n private initialize(): Promise {\r\n let warehouseIdByQuery: number | null = null;\r\n if (this.$route.query.warehouse) {\r\n const warehouseId = Number(this.$route.query.warehouse.toString());\r\n if (!isNaN(warehouseId)) {\r\n warehouseIdByQuery = warehouseId;\r\n }\r\n }\r\n\r\n return this.loadWarehouses()\r\n .then(async () => {\r\n if (warehouseIdByQuery !== null) {\r\n if (\r\n this.warehouses.some(\r\n (warehouse) => warehouse.id === warehouseIdByQuery\r\n )\r\n ) {\r\n this.selectedSmiWarehouseId = warehouseIdByQuery;\r\n await this.updateStockLevelForWarehouse();\r\n await this.loadMyWarehouse();\r\n } else {\r\n this.invalidSelectedSmiWarehouse = true;\r\n }\r\n } else if (this.warehouses.length > 0) {\r\n this.selectedSmiWarehouseId =\r\n (userProfileModule.selectedCustomer !== null\r\n ? this.warehouses.find(\r\n (warehouse) =>\r\n warehouse.customerId ===\r\n userProfileModule.selectedCustomer?.id\r\n )?.id\r\n : undefined) ?? this.warehouses[0].id;\r\n\r\n if (this.updateQuery()) {\r\n return false;\r\n }\r\n\r\n await this.updateStockLevelForWarehouse();\r\n await this.loadMyWarehouse();\r\n }\r\n\r\n return true;\r\n })\r\n .catch(() => {\r\n // Just catch the error from logging\r\n return true;\r\n });\r\n }\r\n\r\n private updateStockLevelForWarehouse(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiMyWarehouseModule\r\n .dispatchUpdateStockLevel(this.selectedSmiWarehouseId!)\r\n .then(() => undefined)\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private loadMyWarehouse(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n const smiWarehouseId = this.selectedSmiWarehouseId;\r\n\r\n return smiMyWarehouseModule\r\n .dispatchLoad(this.selectedSmiWarehouseId!)\r\n .then(() => undefined)\r\n .catch(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n }\r\n })\r\n .finally(() => {\r\n if (smiWarehouseId === this.selectedSmiWarehouseId) {\r\n this.isLoading = false;\r\n }\r\n });\r\n }\r\n\r\n // Updates the query (if any changes) which then changes the $route and the @Watch is triggered\r\n private updateQuery(): boolean {\r\n const query = this.generateQuery();\r\n\r\n if (this.$route.query.warehouse === query.warehouse) {\r\n return false;\r\n } else {\r\n // If just going from a no defined warehouse to a defined one, just replace route, otherwise push a new route.\r\n if ((this.$route.query.warehouse?.toString() ?? '') === '') {\r\n this.$router.replace({\r\n query,\r\n params: createParamsWithProgrammaticRouting(),\r\n });\r\n } else {\r\n this.$router.push({ query });\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n private generateQuery(): any {\r\n const query: { warehouse?: string; products?: string } = {};\r\n\r\n if (this.selectedSmiWarehouseId) {\r\n query.warehouse = this.selectedSmiWarehouseId.toString();\r\n }\r\n\r\n return query;\r\n }\r\n\r\n private loadWarehouses(): Promise {\r\n this.isLoading = true;\r\n this.errorLoading = false;\r\n\r\n return smiWarehousesModule\r\n .dispatchLoad()\r\n .catch(() => {\r\n this.errorLoading = true;\r\n return Promise.reject();\r\n })\r\n .finally(() => {\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n private onSmiWarehouseSelect(smiWarehouseId: number) {\r\n if (this.selectedSmiWarehouseId !== smiWarehouseId) {\r\n this.selectedSmiWarehouseId = smiWarehouseId;\r\n this.updateQuery();\r\n }\r\n }\r\n\r\n private onProductsFilterSelect(products: string[]) {\r\n this.filteredProductNumbers = products;\r\n this.updateQuery();\r\n }\r\n\r\n private onClearFilters() {\r\n this.filteredProductNumbers = [];\r\n this.updateQuery();\r\n }\r\n\r\n private openStockReportModal(\r\n productDetails: SmiWarehouseProductDetails\r\n ): void {\r\n this.productNumber = productDetails.productNumber;\r\n this.productDisplayName = productDetails.displayName;\r\n this.stockDetails = productDetails.stockDetails;\r\n this.$nextTick(() => {\r\n (\r\n this.$refs.smiWarehouseStockReportModal as SmiWarehouseStockReportModal\r\n ).show();\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!./SmiMyWarehousePage.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!./SmiMyWarehousePage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SmiMyWarehousePage.vue?vue&type=template&id=4f19d5de&\"\nimport script from \"./SmiMyWarehousePage.vue?vue&type=script&lang=ts&\"\nexport * from \"./SmiMyWarehousePage.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"],"sourceRoot":""}