"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; } //Format link asset data 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); } } //Format post data 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; _.forEach(response, function (data) { var errorResponse = _.find(data, { type: 'Failure' }); if (errorResponse) { numberOfErrors++; } else { _.forEach(data, function (messages) { if (messages.additionalInformation && messages.additionalInformation.listOfMessage) { errorResponse = _.find(messages.additionalInformation.listOfMessage, { type: 'Failure' }); if (errorResponse) { numberOfErrors++; } } }); } 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 ($scope.linkParams.selectedItem.length > 1) { systemAlertService.success({ text: $filter('i18n')('asset.actionBlade.assetAction.success.multiple'), hide: 10000 }); } else { 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(); }]); })();