SmartIT_Extensions/BMC/smart-it-full-helix/scripts/app/asset/asset-launch-action-control...

313 lines
16 KiB
JavaScript

"use strict";
/**
* Created by andey on 04-01-2016.
*/
(function () {
'use strict';
angular.module('assetModule')
.controller('AssetLaunchActionController', ['$scope', '$modalInstance', 'linkParams', 'events', 'assetModel', '$q', 'systemAlertService', '$filter', 'i18nService',
function ($scope, $modalInstance, linkParams, events, assetModel, $q, systemAlertService, $filter, i18nService) {
$scope.tabIds = {
assetUpdate: 'assetUpdate',
assetRelation: 'assetRelation',
peopleRelation: 'peopleRelation'
};
$scope.state = {
selectedTab: $scope.tabIds.assetUpdate,
processing: false
};
$scope.close = function () {
var modalInstance = systemAlertService.modal({
title: i18nService.getLocalizedString('common.notification.dirty.title'),
text: i18nService.getLocalizedString('common.notification.dirty.message'),
buttons: [
{
text: i18nService.getLocalizedString('common.labels.yes'),
data: true
},
{
text: i18nService.getLocalizedString('common.labels.no'),
data: false
}
]
});
modalInstance.result.then(function (data) {
if (data) {
$modalInstance.dismiss();
}
});
};
function handleModalBackdropClick() {
$scope.close();
}
$scope.$on(events.MODAL_BACKDROP_CLICK, handleModalBackdropClick);
$scope.modalInstance = $modalInstance;
$scope.isConsoleMode = true;
$scope.linkParams = linkParams;
$scope.displayedTabs = {
assetRelation: false,
peopleRelation: false,
assetUpdate: false
};
$scope.assetUpdateData = {};
$scope.addPeopleData = {};
$scope.linkAssetData = {};
$scope.saveLaunchActionForm = function () {
var executeActionData = {
sourceList: [],
sourceType: EntityVO.TYPE_ASSET,
action: {
resource: EntityVO.TYPE_ASSET,
actionType: 'launch',
actionName: '',
actionId: '',
parameters: {
peopleRelation: [],
assetRelation: [],
assetUpdate: {},
direction: false
}
}
};
//Format add people data
if ($scope.displayedTabs.peopleRelation) {
var addPeopleData = _.cloneDeep($scope.addPeopleData);
if (addPeopleData.subType === EntityVO.TYPE_PEOPLE) {
addPeopleData.id = addPeopleData.selectedPerson.displayId;
}
else {
addPeopleData.id = addPeopleData.selectedPerson.id;
}
delete addPeopleData.selectedPerson;
executeActionData.action.parameters.peopleRelation.push(addPeopleData);
}
//Format asset update data
if ($scope.displayedTabs.assetUpdate) {
var assetUpdateData = _.cloneDeep($scope.assetUpdateData);
if (assetUpdateData.selectedStatus) {
assetUpdateData.status = assetUpdateData.selectedStatus.name;
delete assetUpdateData.selectedStatus;
}
if (assetUpdateData.selectedStatusReason) {
assetUpdateData.statusReason = assetUpdateData.selectedStatusReason.name || '';
delete assetUpdateData.selectedStatusReason;
}
if (assetUpdateData.primaryCapability) {
assetUpdateData.primaryCapability = assetUpdateData.primaryCapability.name;
}
if (assetUpdateData.installationDate) {
assetUpdateData.installationDate = assetUpdateData.installationDate.value;
}
if (assetUpdateData.company) {
assetUpdateData.companyName = assetUpdateData.company.name;
delete assetUpdateData.company;
}
if (assetUpdateData.site) {
assetUpdateData.siteName = assetUpdateData.site.name;
assetUpdateData.siteRegion = assetUpdateData.site.region;
delete assetUpdateData.site;
}
if (assetUpdateData.allCategories) {
var productCategoryObject = _.find($scope.assetUpdateData.allCategories, { name: EntityVO.CATEGORY_PRODUCT });
_.forEach(productCategoryObject && productCategoryObject.listOfTiers, function (tier) {
if (tier.selectedValue) {
assetUpdateData[tier.name] = tier.selectedValue;
}
else {
assetUpdateData[tier.name] = '';
}
});
delete assetUpdateData.allCategories;
}
executeActionData.action.parameters.assetUpdate = assetUpdateData;
}
else {
delete executeActionData.action.parameters.assetUpdate;
}
//This is to add a relationship when starting asset is a child
if ($scope.linkAssetData.relationSubType.value === 'child') {
if ($scope.displayedTabs.assetRelation) {
for (var items in $scope.linkAssetData.entities) {
var source = {
instanceId: $scope.linkAssetData.entities[items].instanceId,
reconciliationId: $scope.linkAssetData.entities[items].reconciliationId,
classId: $scope.linkAssetData.entities[items].classId
};
executeActionData.sourceList.push(source);
}
}
for (var item in $scope.linkParams.selectedItem) {
var relateAsset = {
id: $scope.linkParams.selectedItem[item].instanceId,
type: EntityVO.TYPE_ASSET,
relationshipType: $scope.linkAssetData.relation.value,
tag: 'linkeditem',
desc: $scope.linkAssetData.entities[item].desc
};
executeActionData.action.parameters.assetRelation.push(relateAsset);
}
}
else { // This is to add a relationship when starting asset is a parent
if ($scope.displayedTabs.assetRelation) {
for (var items in $scope.linkAssetData.entities) {
var relateAsset = {
id: $scope.linkAssetData.entities[items].instanceId,
type: EntityVO.TYPE_ASSET,
relationshipType: $scope.linkAssetData.relation.value,
tag: 'linkeditem',
desc: $scope.linkAssetData.entities[items].desc
};
executeActionData.action.parameters.assetRelation.push(relateAsset);
}
}
for (var item in $scope.linkParams.selectedItem) {
var source = {
instanceId: $scope.linkParams.selectedItem[item].instanceId,
reconciliationId: $scope.linkParams.selectedItem[item].reconciliationId,
classId: $scope.linkParams.selectedItem[item].classId
};
executeActionData.sourceList.push(source);
}
}
executeActionData.action.actionId = $scope.linkParams.actionItem.id;
executeActionData.action.actionName = $scope.linkParams.actionItem.actionName;
$scope.state.processing = true;
assetModel.bulkUpdateRelateAsset(executeActionData).then(function (response) {
$modalInstance.close(response);
var displayReconWarning = false, numberOfErrors = 0, numberOfSuccess = 0;
_.forEach(response, function (data) {
var errorResponse = _.find(data, { type: 'Failure' });
var successResponse = _.find(data, { type: 'Success' });
if (errorResponse) {
numberOfErrors++;
}
else {
_.forEach(data, function (messages) {
if (messages.additionalInformation && messages.additionalInformation.listOfMessage) {
var failureCount = _.countBy(messages.additionalInformation.listOfMessage, 'type').Failure;
if (failureCount) {
numberOfErrors = failureCount + numberOfErrors;
}
}
});
}
if (successResponse) {
numberOfSuccess++;
}
else {
_.forEach(data, function (messages) {
if (messages.additionalInformation && messages.additionalInformation.listOfMessage) {
var successCount = _.countBy(messages.additionalInformation.listOfMessage, 'type').Success;
if (successCount) {
numberOfSuccess = successCount + numberOfSuccess;
}
}
});
}
var updateAssetResponse = _.find(data, { additionalInformation: { subActionName: 'assetUpdate' } });
if (updateAssetResponse && updateAssetResponse.additionalInformation.needsReconciliation) {
displayReconWarning = true;
}
});
if (numberOfErrors > 0) {
systemAlertService.error({
text: $filter('i18n')('ticket.notification.alreadyExist.message', numberOfErrors),
clear: false
});
}
if (displayReconWarning) {
systemAlertService.warning({
text: $filter('i18n')('asset.actionBlade.assetAction.warning.reconciliation'),
hide: 10000
});
}
if (numberOfSuccess > 1) {
systemAlertService.success({
text: $filter('i18n')('asset.actionBlade.assetAction.success.multiple'),
hide: 10000
});
}
else if (numberOfSuccess == 1) {
systemAlertService.success({
text: $filter('i18n')('asset.actionBlade.assetAction.success.single'),
hide: 10000
});
}
}).catch(function (error) {
if (error) {
systemAlertService.error({
text: error.data.error,
clear: false
});
}
return $q.reject(error);
}).finally(function () {
$scope.state.processing = false;
});
};
$scope.disableSubmitButton = function () {
var isCategorizationInvalid = false;
if ($scope.displayedTabs.assetUpdate) {
var productCategoryObject = _.find($scope.assetUpdateData.allCategories, { name: EntityVO.CATEGORY_PRODUCT });
_.forEach(productCategoryObject && productCategoryObject.listOfTiers, function (tier) {
if ($scope.displayedTabs.assetUpdate[tier.name] && !tier.selectedValue) {
isCategorizationInvalid = true;
}
});
}
return ($scope.displayedTabs.peopleRelation && !($scope.addPeopleData.subType && $scope.addPeopleData.relationshipType && $scope.addPeopleData.selectedPerson))
|| ($scope.displayedTabs.assetRelation && (!($scope.linkAssetData.entities && $scope.linkAssetData.entities.length) || !$scope.linkAssetData.relation))
|| ($scope.displayedTabs.assetUpdate && ($scope.assetUpdateForm && ($scope.assetUpdateForm.formObject.$invalid || isCategorizationInvalid)));
};
$scope.nextTab = function (currentTab) {
if (currentTab === $scope.tabIds.assetUpdate) {
if ($scope.displayedTabs.assetRelation) {
$scope.state.selectedTab = $scope.tabIds.assetRelation;
}
else {
$scope.state.selectedTab = $scope.tabIds.peopleRelation;
}
}
else { //If its last tab, next button wouldnt appear hence no need to check for any other condition
$scope.state.selectedTab = $scope.tabIds.peopleRelation;
}
};
function initTabsToDisplay() {
_.forEach($scope.linkParams.actionItem.subActions, function (object) {
if (object.name === 'assetUpdate') {
$scope.displayedTabs.assetUpdate = {};
_.forEach(object.fields, function (field) {
$scope.displayedTabs.assetUpdate[field] = true;
});
if ($scope.displayedTabs.assetUpdate.model) {
$scope.displayedTabs.assetUpdate.productModelVersion = true;
delete $scope.displayedTabs.assetUpdate.model;
}
}
else {
$scope.displayedTabs[object.name] = true;
}
});
if ($scope.displayedTabs.assetUpdate) {
$scope.state.selectedTab = $scope.tabIds.assetUpdate;
}
else if ($scope.displayedTabs.assetRelation) {
$scope.state.selectedTab = $scope.tabIds.assetRelation;
}
else {
$scope.state.selectedTab = $scope.tabIds.peopleRelation;
}
if ($scope.displayedTabs.peopleRelation) {
$scope.showSubmitTab = $scope.tabIds.peopleRelation;
}
else if ($scope.displayedTabs.assetRelation) {
$scope.showSubmitTab = $scope.tabIds.assetRelation;
}
else {
$scope.showSubmitTab = $scope.tabIds.assetUpdate;
}
}
initTabsToDisplay();
}]);
})();