313 lines
16 KiB
JavaScript
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();
|
|
}]);
|
|
})();
|