SmartIT_Extensions/BMC/smart-it-full/scripts/app/asset/asset-edit-details-controll...

198 lines
10 KiB
JavaScript

"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);
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
};
$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);
}
]);
})();