--- /dev/null
+/*-\r
+ * ================================================================================\r
+ * ECOMP Portal\r
+ * ================================================================================\r
+ * Copyright (C) 2017 AT&T Intellectual Property\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ================================================================================\r
+ */\r
+/**\r
+ * Created by nnaffar on 12/20/15.\r
+ */\r
+'use strict';\r
+(function () {\r
+ class NewCatalogModalCtrl {\r
+ constructor($scope, $log, usersService, catalogService, applicationsService, confirmBoxService) {\r
+ let init = () => {\r
+ //$log.info('NewUserModalCtrl::init');\r
+ this.isSaving = false;\r
+ this.adminApps =[];\r
+ this.appRoles = [];\r
+ $scope.userAppRoles = [];\r
+ $scope.titleText = "Request for Access in MyLogins:";\r
+ $scope.title ="Request is pending in MyLogins for the following Roles";\r
+ this.isGettingAdminApps = false;\r
+ if($scope.ngDialogData && $scope.ngDialogData.selectedUser && $scope.ngDialogData.dialogState){\r
+ this.selectedUser = $scope.ngDialogData.selectedUser;\r
+ this.dialogState = $scope.ngDialogData.dialogState;\r
+ this.isShowBack = false;\r
+ if(this.dialogState === 2){\r
+ this.getUserAppsRoles();\r
+ }\r
+ }\r
+ };\r
+\r
+ this.appChanged = (index) => {\r
+ let myApp = this.adminApps[index];\r
+ //$log.debug('NewUserModalCtrl::appChanged: index: ', index, '; app id: ', myApp.id, 'app name: ',myApp.name);\r
+ myApp.isChanged = true;\r
+ this.anyChanges = true;\r
+ }\r
+ \r
+ this.deleteApp = (app) => {\r
+ let appMessage = this.selectedUser.firstName + ' ' + this.selectedUser.lastName;\r
+ confirmBoxService.deleteItem(appMessage).then(isConfirmed => {\r
+ if(isConfirmed){\r
+ this.anyChanges = true;\r
+ app.isChanged = true;\r
+ app.isDeleted = true; // use this to hide the app in the display\r
+ app.appRoles.forEach(function(role){\r
+ role.isApplied = false;\r
+ });\r
+ }\r
+ }).catch(err => {\r
+ $log.error('NewUserModalCtrl::deleteApp error: ',err);\r
+ confirmBoxService.showInformation('There was a problem deleting the the applications. ' +\r
+ 'Please try again later. Error: ' + err.status).then(isConfirmed => {});\r
+ });\r
+ };\r
+ \r
+ this.getUserAppsRoles = () => {\r
+\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: about to call getAdminAppsSimpler');\r
+ this.isGettingAdminApps = true;\r
+ catalogService.getAppCatalog().then((apps) => {\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: beginning of then for getAdminAppsSimpler');\r
+ \r
+ this.isGettingAdminApps = false;\r
+ if (!apps || !apps.length) {\r
+ $log.error('NewUserModalCtrl::getUserApps error: no admin apps found');\r
+ return null;\r
+ }\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: then for getAdminAppsSimpler: step 2');\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: admin apps: ', apps);\r
+ \r
+ this.dialogState = 2; \r
+ this.isLoading = true;\r
+ this.adminApps = apps;\r
+ \r
+ catalogService.getuserAppRolesCatalog(this.selectedUser.headerText).then(\r
+ function(result) {\r
+ // $log.debug('CatalogCtrl:storeSelection result is ', result);\r
+ \r
+ $scope.userAppRoles = result;\r
+ $scope.displyUserAppCatalogRoles = true;\r
+ if(result.length === 1 && result[0].requestedRoleId === null)\r
+ {\r
+ $scope.title= "Removal Request is pending in MyLogins";\r
+ }\r
+ \r
+ if($scope.userAppRoles.length==0)\r
+ {\r
+ $scope.displyUserAppCatalogRoles = false;\r
+ }\r
+ });\r
+ apps.forEach(app => {\r
+ if(app.name === this.selectedUser.headerText){\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: app: id: ', app.id, 'name: ',app.name);\r
+ // Keep track of which app has changed, so we know which apps to update using a BE API\r
+ app.isChanged = false;\r
+ // Each of these specifies a state, which corresponds to a different message and style that gets displayed\r
+ app.isLoading = true;\r
+ app.isError = false;\r
+ app.isDeleted = false;\r
+ app.printNoChanges = false;\r
+ app.isUpdating = false;\r
+ app.isErrorUpdating = false;\r
+ app.isDoneUpdating = false;\r
+ app.errorMessage = "";\r
+ usersService.getUserAppRoles(app.id, this.selectedUser.attuid).promise().then((userAppRolesResult) => {\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: got a result for app: ',app.id,': ',app.name,': ',userAppRolesResult);\r
+ app.appRoles = userAppRolesResult;\r
+ app.isLoading = false;\r
+ }).catch(err => {\r
+ $log.error(err);\r
+ app.isError = true;\r
+ app.isLoading = false;\r
+ app.errorMessage = err.headers('FEErrorString');\r
+ //$log.debug('NewUserModalCtrl::getUserAppsRoles: in new-user.controller: response header: '+err.headers('FEErrorString'));\r
+ }).finally(()=>{\r
+ this.numberAppsProcessed++;\r
+ if (this.numberAppsProcessed === this.adminApps.length) {\r
+ this.isLoading = false;\r
+ }\r
+ });\r
+ }\r
+ })\r
+ return;\r
+ }).catch(err => {\r
+ $log.error(err);\r
+ })\r
+\r
+ }\r
+ \r
+ \r
+ /**\r
+ * Update the selected user apps with the new roles.\r
+ * If no roles remain, set the user to inactive.\r
+ */\r
+ this.updateUserAppsRoles = () => {\r
+ // $log.debug('NewUserModalCtrl::updateUserAppsRoles: entering updateUserAppsRoles');\r
+ if(!this.selectedUser || !this.selectedUser.attuid || !this.adminApps){\r
+ $log.error('NewUserModalCtrl::updateUserAppsRoles: mmissing arguments');\r
+ return;\r
+ }\r
+ this.isSaving = true;\r
+ confirmBoxService.makeUserAppRoleCatalogChanges('Are you sure you want to make these changes?')\r
+ .then(confirmed => {\r
+ if(confirmed === true){\r
+ //$log.debug('NewUserModalCtrl::updateUserAppsRoles: going to update user: ' + this.selectedUser.attuid);\r
+ this.numberAppsProcessed = 0;\r
+ this.numberAppsSucceeded = 0;\r
+ this.adminApps.forEach(app => {\r
+ if (app.isChanged) {\r
+ //$log.debug('NewUserModalCtrl::updateUserAppsRoles: app roles have changed; going to update: id: ', app.id, '; name: ', app.name);\r
+ app.isUpdating = true;\r
+ var UserAppRolesRequest = {\r
+ attuid: this.selectedUser.attuid,\r
+ appId: app.id, \r
+ appRoles: app.appRoles,\r
+ appName: app.name\r
+ }; \r
+ this.isSaving = true;\r
+ $log.debug('going to update user: ' + this.selectedUser.attuid + ' with app roles: ' + JSON.stringify(this.adminAppsRoles));\r
+ applicationsService.saveUserAppsRoles(UserAppRolesRequest).then(res => {\r
+ app.isUpdating = false;\r
+ $scope.closeThisDialog(true);\r
+ }).catch(err => {\r
+ $log.error('NewAdminModalCtrl.updateAdminAppsRoles:: Failed - ' + err);\r
+ }).finally(()=> {\r
+ this.isSaving = false;\r
+ })\r
+ }\r
+ });\r
+ }else{\r
+ this.isSaving = false;\r
+ }\r
+ \r
+\r
+ \r
+ });\r
+ \r
+ };\r
+\r
+ /**\r
+ * Navigate between dialog screens using step number: 1,2,...\r
+ */\r
+ this.navigateBack = () => {\r
+ if (this.dialogState === 1) {\r
+ //back from 1st screen?\r
+ }\r
+ if (this.dialogState === 3) {\r
+ this.dialogState = 1;\r
+ }\r
+ };\r
+\r
+ init();\r
+\r
+ $scope.$on('$stateChangeStart', e => {\r
+ //Disable navigation when modal is opened\r
+ //**Nabil - note: this will cause the history back state to be replaced with current state\r
+ e.preventDefault();\r
+ });\r
+ }\r
+ }\r
+ NewCatalogModalCtrl.$inject = ['$scope', '$log', 'usersService', 'catalogService', 'applicationsService', 'confirmBoxService'];\r
+ angular.module('ecompApp').controller('NewCatalogModalCtrl', NewCatalogModalCtrl);\r
+})();\r