"use strict"; (function () { 'use strict'; angular.module('assetModule') .controller('AssetEditDetailsController', ['$scope', '$timeout', 'events', 'configurationModel', 'assetModel', 'metadataModel', '$q', 'systemAlertService', '$filter', 'searchModel', function ($scope, $timeout, events, configurationModel, assetModel, metadataModel, $q, systemAlertService, $filter, searchModel) { var tooltipTimer; $scope.isAssetSaving = false; $scope.updatedModel = {}; $scope.state = { isTooltipOpenCostCenter: false, exceedsChunkSizeCostCenter: false, isTooltipOpenManufacturer: false, exceedsChunkSizeManufacturer: false, isTooltipOpenSupplier: false, exceedsChunkSizeSupplier: false, }; refreshAssetData(); $scope.$on(events.TOGGLE_EDIT_MODE, refreshAssetData); $scope.$on(events.ASSET_UPDATE_PRODUCT_CATEGORY_MANUFACTURER, function ($event, data) { $scope.updatedModel.manufacturer = data.productManufacturer; }); function refreshAssetData() { $q.all([metadataModel.getMetadataByType(EntityVO.TYPE_ASSET), assetModel.getAssetDetailsByID(assetModel.assetId, assetModel.assetClassId)]).then(function (data) { var meta = data[0], assetDetails = data[1]; $scope.metadata = angular.copy(meta); $scope.updatedModel = angular.copy(assetDetails); $scope.lifecycleDates = { 'availableDate': { 'date': undefined, 'time': undefined }, 'installationDate': { 'date': undefined, 'time': undefined }, 'returnDate': { 'date': undefined, 'time': undefined }, 'receivedDate': { 'date': undefined, 'time': undefined }, 'lastScanDate': { 'date': undefined, 'time': undefined }, 'purchaseDate': { 'date': undefined, 'time': undefined }, 'disposalDate': { 'date': undefined, 'time': undefined } }; $scope.selectedImpact = getSelectedTypeObject('impacts', $scope.updatedModel.impact); $scope.selectedPriority = getSelectedTypeObject('priorities', $scope.updatedModel.priority); $scope.selectedUrgency = getSelectedTypeObject('urgencies', $scope.updatedModel.urgency); if (!$scope.updatedModel.financial) { $scope.updatedModel.financial = {}; } if (!$scope.updatedModel.lifecycleDates) { $scope.updatedModel.lifecycleDates = {}; } $scope.selectedDepreciated = getSelectedTypeObject('depreciated', $scope.updatedModel.financial.depreciated); _.forOwn($scope.updatedModel.lifecycleDates, function (value, prop) { this.lifecycleDates[prop] = { 'date': value, 'time': value }; }, $scope); }); } $scope.getCompaniesByType = function (text, type) { return searchModel.getCompaniesByText(text, -1, { "companyType": type }).then(function (data) { if (type === 'Supplier') { $scope.state.isTooltipOpenSupplier = $scope.state.exceedsChunkSizeSupplier = data.exceedsChunkSize; } else if (type === 'Manufacturer') { $scope.state.isTooltipOpenManufacturer = $scope.state.exceedsChunkSizeManufacturer = data.exceedsChunkSize; } $timeout(function () { $scope.state.isTooltipOpenManufacturer = false; $scope.state.isTooltipOpenSupplier = false; }, 10000); return data.companies; }); }; $scope.setCompanyByType = function (item, type) { $scope.updatedModel[type] = item.name; }; $scope.datePickerOptions = { startingDay: configurationModel.getWeekStartingDay(), 'show-weeks': false, minDate: moment().year(1970).month(0).date(2), maxDate: moment().year(2038).month(0).date(18) }; $scope.showMeridian = window.showMeridian; $scope.assetDate = { availableDatePicker: { open: false }, installationDatePicker: { open: false }, returnDatePicker: { open: false }, receivedDatePicker: { open: false }, lastScanDatePicker: { open: false }, purchaseDatePicker: { open: false }, disposalDatePicker: { open: false } }; $scope.updateDateTime = function (type) { if (($scope.lifecycleDates[type].date && !$scope.lifecycleDates[type].time) || (!$scope.lifecycleDates[type].date && $scope.lifecycleDates[type].time)) { $scope.lifecycleDates[type].time = _.clone($scope.lifecycleDates[type].date); } var timeObj = moment($scope.lifecycleDates[type].time); $scope.updatedModel.lifecycleDates[type] = moment($scope.lifecycleDates[type].date).set('hours', timeObj.get('hours')).set('minutes', timeObj.get('minutes')).format('X'); }; $scope.openDatePicker = function (calendar) { calendar.open = true; }; $scope.isFieldValid = function () { if ($scope.updatedModel && $scope.updatedModel.type === EntityVO.TYPE_HARDWARE && ($scope.updatedModel.classId === 'BMC_PRINTER' || $scope.updatedModel.classId === 'BMC_MAINFRAME' || $scope.updatedModel.classId === 'BMC_COMPUTERSYSTEM')) { return true; } return false; }; $scope.updateAssetField = function (type, item) { if (type === 'depreciated') { $scope.updatedModel.financial.depreciated = item.label; } $scope.updatedModel[type] = item.name; }; function getSelectedTypeObject(type, value) { return _.find($scope.metadata[type], { name: value }); } $scope.getCostCentersByCompany = function (text) { $scope.loadingCostCenters = true; return assetModel.getCostCentersByCompanyName(text, $scope.updatedModel.company.name).then(function (results) { $scope.state.isTooltipOpenCostCenter = $scope.state.exceedsChunkSizeCostCenter = results.exceedsChunkSize; if (tooltipTimer) { $timeout.cancel(tooltipTimer); } tooltipTimer = $timeout(function () { $scope.state.exceedsChunkSizeCostCenter = false; $scope.state.isTooltipOpenCostCenter = false; }, 10000); return results.items; }).finally(function () { $scope.loadingCostCenters = false; }); }; $scope.onInputFocusBlur = function () { $scope.state.isTooltipOpenManufacturer = false; $scope.state.isTooltipOpenSupplier = false; $scope.state.isTooltipOpenCostCenter = false; }; $scope.updateCostCenter = function (item) { $scope.updatedModel.financial.costCenter = item.value; }; $scope.$on(events.SAVE_CHANGES, function () { $scope.isAssetSaving = true; if ($scope.selectedImpact === null) { $scope.updatedModel.impact = ""; } if ($scope.selectedUrgency === null) { $scope.updatedModel.urgency = ""; } var updates = { assetId: $scope.updatedModel.assetId, description: $scope.updatedModel.desc, version: $scope.updatedModel.version, manufacturer: $scope.updatedModel.manufacturer, supplier: $scope.updatedModel.supplier, impact: $scope.updatedModel.impact, priority: $scope.updatedModel.priority, urgency: $scope.updatedModel.urgency, systemRole: $scope.updatedModel.systemRole, serialNumber: $scope.updatedModel.serialNumber, partNumber: $scope.updatedModel.partNumber, floor: $scope.updatedModel.floor, room: $scope.updatedModel.room, invoiceNumber: $scope.updatedModel.invoiceNumber, isAssetUpdate: true }; $scope.updatedModel.financial.invoiceNumber = $scope.updatedModel.invoiceNumber; _.each($scope.updatedModel.financial, function (value, key) { updates[key] = value; }); _.each($scope.updatedModel.lifecycleDates, function (value, key) { if (typeof value === "string") { value = value * 1000; } updates[key] = value; }); delete updates.modifiedDate; $scope.$emit(events.SAVE_CHANGES_REQUEST, updates); }); $scope.$on(events.SAVE_ALL_CHANGES_COMPLETE, function (event, data) { $scope.isAssetSaving = false; $scope.$emit(events.SAVE_CHANGES_COMPLETE); if (data.needsReconciliation) { systemAlertService.warning({ text: $filter('i18n')('asset.reconWarning'), hide: 10000 }); } else { assetModel.updateCacheAssetDetails(data); } }); $scope.$on(events.SAVE_ALL_CHANGES_FAULT, function (event, err) { $scope.isAssetSaving = false; if (err && err.data) { systemAlertService.error({ text: err.data.error, clear: false }); } }); $scope.$on(events.DISCARD_CHANGES, refreshAssetData); } ]); })();