203 lines
11 KiB
JavaScript
203 lines
11 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);
|
|
$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);
|
|
}
|
|
]);
|
|
})();
|