SmartIT_Extensions/BMC/smart-it-full/scripts/app/asset/asset-update-controller.js

206 lines
11 KiB
JavaScript

"use strict";
/**
* Created by andey on 11-01-2016.
*/
(function () {
'use strict';
angular.module('assetModule')
.controller('AssetUpdateController', ['$scope', '$timeout', 'configurationModel', 'metadataModel', 'userModel', 'searchModel', 'createTicketModel', 'categoriesService',
function ($scope, $timeout, configurationModel, metadataModel, userModel, searchModel, createTicketModel, categoriesService) {
$scope.asset = {
installationDate: { 'date': undefined, 'time': undefined }
};
$scope.assetEntity = {
ticketType: EntityVO.TYPE_ASSET,
classId: "",
assetUpdateFields: $scope.assetUpdateFields
};
function loadSitesList(companyName) {
return searchModel.getSitesByCompany(companyName)
.then(function (response) {
$scope.sites = response.objects;
$scope.state.tooManySites = response.exceedsChunkSize;
});
}
function resetCategories(events) {
if ($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 ||
$scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3
|| $scope.assetUpdateFields.productModelVersion) {
$scope.assetEntity.company = $scope.asset.company;
$scope.$broadcast(events.CLEAR_CATEGORY_DETAILS, $scope.assetEntity.company);
}
}
function initForBulkUpdate() {
if ($scope.assetUpdateFields.status) {
$scope.asset.selectedStatus = _.first($scope.assetMetadata.statuses);
$scope.updateStatusReason();
}
}
function initForSingleAsset(selectedAsset) {
if ($scope.assetUpdateFields.name) {
$scope.asset.name = selectedAsset.name;
}
if ($scope.assetUpdateFields.status && selectedAsset.status) {
$scope.asset.selectedStatus = _.find($scope.assetMetadata.statuses, { name: selectedAsset.status.value });
if ($scope.assetUpdateFields.statusReason) {
$scope.updateStatusReason(selectedAsset.status.reason);
}
}
if ($scope.assetUpdateFields.partNumber) {
$scope.asset.partNumber = selectedAsset.partNumber;
}
if ($scope.assetUpdateFields.manufacturer) {
$scope.asset.manufacturer = selectedAsset.manufacturer;
}
if ($scope.assetUpdateFields.supplier) {
$scope.asset.supplier = selectedAsset.supplier;
}
//lifecycleDates not available in ConsoleItemVO. Backend has to send these values to preload values from console
if ($scope.assetUpdateFields.installationDate && selectedAsset.lifecycleDates && selectedAsset.lifecycleDates.installationDate) {
$scope.asset.installationDate.value = selectedAsset.lifecycleDates.installationDate;
$scope.asset.installationDate.date = moment(selectedAsset.lifecycleDates.installationDate).toDate();
$scope.asset.installationDate.time = moment(selectedAsset.lifecycleDates.installationDate).toDate();
}
if ($scope.assetUpdateFields.room) {
$scope.asset.room = selectedAsset.room;
}
if ($scope.assetUpdateFields.floor) {
$scope.asset.floor = selectedAsset.floor;
}
//assetExtension not available in ConsoleItemVO
if ($scope.assetUpdateFields.primaryCapability && selectedAsset.assetExtension) {
$scope.asset.primaryCapability = _.find($scope.primaryCapabilities, { name: selectedAsset.assetExtension.primaryCapability });
}
if (($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 ||
$scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3
|| $scope.assetUpdateFields.productModelVersion) && selectedAsset.allCategories) {
$scope.asset.allCategories = selectedAsset.allCategories;
}
}
function init() {
$scope.state = {
tooManyCompanies: false,
isDataLoading: false
};
$scope.selections = {
companies: []
};
$scope.datePickerOptions = {
startingDay: configurationModel.getWeekStartingDay(),
'show-weeks': false
};
$scope.assetDate = {
installationDatePicker: { open: false }
};
metadataModel.getMetadataByType(EntityVO.TYPE_ASSET).then(function (metadata) {
$scope.assetMetadata = metadata;
$scope.primaryCapabilities = $scope.assetMetadata.primaryCapabilities;
if ($scope.assetUpdateFields.productName || $scope.assetUpdateFields.productCategoryTier1 ||
$scope.assetUpdateFields.productCategoryTier2 || $scope.assetUpdateFields.productCategoryTier3
|| $scope.assetUpdateFields.productModelVersion) {
$scope.asset.allCategories = _.cloneDeep(categoriesService.populateCategories([{
name: 'product',
tiers: {}
}], $scope.assetMetadata));
}
$scope.assetEntity.company = { name: $scope.assetMetadata.systemConfigurations.defaultCompany };
if ($scope.linkParams.selectedItem.length > 1) {
initForBulkUpdate();
}
else {
var selectedAsset = _.cloneDeep($scope.linkParams.selectedItem[0]);
initForSingleAsset(selectedAsset);
}
});
userModel.getFullCurrentUserData().then(function () {
$scope.state.isDataLoading = true;
searchModel.getOperatingCompanies(null, -1).then(function (result) {
$scope.selections.companies = _.cloneDeep(result.companies);
$scope.state.tooManyCompanies = result.exceedsChunkSize;
//Load company if single asset selected
if (($scope.linkParams.selectedItem.length < 2) && $scope.assetUpdateFields.company && $scope.linkParams.selectedItem[0].company) {
$scope.asset.company = _.find($scope.selections.companies, { name: $scope.linkParams.selectedItem[0].company.name });
if ($scope.asset.company) { //Setting company value for product category
$scope.assetEntity.company = $scope.asset.company;
}
if ($scope.assetUpdateFields.site) {
loadSitesList($scope.asset.company.name).then(function () {
if ($scope.linkParams.selectedItem[0].site.name) {
$scope.asset.site = _.find($scope.sites, { name: $scope.linkParams.selectedItem[0].site.name });
}
$scope.state.isDataLoading = false;
});
}
else {
$scope.state.isDataLoading = false;
}
}
else {
$scope.state.isDataLoading = false;
}
});
});
}
$scope.updateStatusReason = function (statusReason) {
if ($scope.assetUpdateFields.statusReason && !_.isEmpty($scope.asset.selectedStatus.statusReasons)) {
$scope.asset.selectedStatusReason = _.find($scope.asset.selectedStatus.statusReasons, { name: statusReason }) || {};
}
else if ($scope.assetUpdateFields.statusReason) {
$scope.asset.selectedStatusReason = {};
}
};
$scope.getCompaniesByType = function (text, type) {
return searchModel.getCompaniesByText(text, -1, { "companyType": type }).then(function (data) {
if (type === 'Supplier') {
$scope.isTooltipOpenSupplier = $scope.exceedsChunkSizeSupplier = data.exceedsChunkSize;
}
else if (type === 'Manufacturer') {
$scope.isTooltipOpenManufacturer = $scope.exceedsChunkSizeManufacturer = data.exceedsChunkSize;
}
$timeout(function () {
$scope.isTooltipOpenManufacturer = false;
$scope.isTooltipOpenSupplier = false;
}, 10000);
return data.companies;
});
};
$scope.onInputFocusBlur = function () {
$scope.isTooltipOpenManufacturer = false;
$scope.isTooltipOpenSupplier = false;
};
$scope.setCompany = function (company) {
$scope.asset.company = company;
loadSitesList($scope.asset.company.name);
resetCategories();
};
$scope.setCompanyByType = function (item, type) {
$scope.asset[type] = item.name;
};
$scope.setSite = function (site) {
$scope.asset.site = site;
$scope.asset.siteGroup = site.siteGroup;
};
$scope.openDatePicker = function (calendar) {
calendar.open = true;
};
$scope.updateDateTime = function (type) {
if (($scope.asset[type].date && !$scope.asset[type].time) || (!$scope.asset[type].date && $scope.asset[type].time)) {
$scope.asset[type].time = _.clone($scope.asset[type].date);
}
var timeObj = moment($scope.asset[type].time);
$scope.asset[type].value = moment($scope.asset[type].date).set('hours', timeObj.get('hours')).set('minutes', timeObj.get('minutes')).valueOf();
};
$scope.setPrimaryCapability = function (item) {
$scope.asset.primaryCapability = item;
};
$scope.getSitesByText = function (searchText) {
return searchModel.getSitesByText(searchText);
};
$scope.getList = function (type, term) {
return createTicketModel.getList(type, term);
};
init();
}
]);
})();