[PORTAL-7] Rebase
[portal.git] / ecomp-portal-FE-os / client / src / views / catalog / add-catalog-dialogs / new-catalog.controller.js
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 /**\r
21  * Created by nnaffar on 12/20/15.\r
22  */\r
23 'use strict';\r
24 (function () {\r
25     class NewCatalogModalCtrl {\r
26         constructor($scope, $log, usersService, catalogService, applicationsService, confirmBoxService) {\r
27             let init = () => {\r
28                 //$log.info('NewUserModalCtrl::init');\r
29                 this.isSaving = false;\r
30                 this.adminApps =[];\r
31                 this.appRoles = [];\r
32                 $scope.userAppRoles = [];\r
33                 $scope.titleText = "Request for Access in MyLogins:";\r
34                 $scope.title ="Request is pending in MyLogins for the following Roles";\r
35                 this.isGettingAdminApps = false;\r
36                 if($scope.ngDialogData && $scope.ngDialogData.selectedUser && $scope.ngDialogData.dialogState){\r
37                     this.selectedUser = $scope.ngDialogData.selectedUser;\r
38                     this.dialogState = $scope.ngDialogData.dialogState;\r
39                     this.isShowBack = false;\r
40                     if(this.dialogState === 2){\r
41                         this.getUserAppsRoles();\r
42                     }\r
43                 }\r
44             };\r
45 \r
46             this.appChanged = (index) => {\r
47                 let myApp = this.adminApps[index];\r
48                 //$log.debug('NewUserModalCtrl::appChanged: index: ', index, '; app id: ', myApp.id, 'app name: ',myApp.name);\r
49                 myApp.isChanged = true;\r
50                 this.anyChanges = true;\r
51             }\r
52             \r
53             this.deleteApp = (app) => {\r
54                 let appMessage = this.selectedUser.firstName + ' ' + this.selectedUser.lastName;\r
55                 confirmBoxService.deleteItem(appMessage).then(isConfirmed => {\r
56                     if(isConfirmed){\r
57                         this.anyChanges = true;\r
58                         app.isChanged = true;\r
59                         app.isDeleted = true; // use this to hide the app in the display\r
60                         app.appRoles.forEach(function(role){\r
61                             role.isApplied = false;\r
62                         });\r
63                     }\r
64                 }).catch(err => {\r
65                     $log.error('NewUserModalCtrl::deleteApp error: ',err);\r
66                     confirmBoxService.showInformation('There was a problem deleting the the applications. ' +\r
67                         'Please try again later. Error: ' + err.status).then(isConfirmed => {});\r
68                 });\r
69             };\r
70       \r
71             this.getUserAppsRoles = () => {\r
72 \r
73                 //$log.debug('NewUserModalCtrl::getUserAppsRoles: about to call getAdminAppsSimpler');\r
74                 this.isGettingAdminApps = true;\r
75                 catalogService.getAppCatalog().then((apps) => {\r
76                     //$log.debug('NewUserModalCtrl::getUserAppsRoles: beginning of then for getAdminAppsSimpler');\r
77                         \r
78                         this.isGettingAdminApps = false;\r
79                     if (!apps || !apps.length) {\r
80                         $log.error('NewUserModalCtrl::getUserApps error: no admin apps found');\r
81                         return null;\r
82                     }\r
83                     //$log.debug('NewUserModalCtrl::getUserAppsRoles: then for getAdminAppsSimpler: step 2');\r
84                     //$log.debug('NewUserModalCtrl::getUserAppsRoles: admin apps: ', apps);\r
85                     \r
86                     this.dialogState = 2; \r
87                     this.isLoading = true;\r
88                     this.adminApps = apps;\r
89                    \r
90                                 catalogService.getuserAppRolesCatalog(this.selectedUser.headerText).then(\r
91                                                 function(result) {\r
92                                                         // $log.debug('CatalogCtrl:storeSelection result is ', result);\r
93                                                         \r
94                                                         $scope.userAppRoles = result;\r
95                                                         $scope.displyUserAppCatalogRoles = true;\r
96                                                         if(result.length === 1 && result[0].requestedRoleId === null)\r
97                                                                 {\r
98                                                                 $scope.title= "Removal Request is pending in MyLogins";\r
99                                                                 }\r
100                                                         \r
101                                                            if($scope.userAppRoles.length==0)\r
102                                                                 {\r
103                                                                 $scope.displyUserAppCatalogRoles = false;\r
104                                                                 }\r
105                                                 });\r
106                     apps.forEach(app => {\r
107                         if(app.name === this.selectedUser.headerText){\r
108                         //$log.debug('NewUserModalCtrl::getUserAppsRoles: app: id: ', app.id, 'name: ',app.name);\r
109                         // Keep track of which app has changed, so we know which apps to update using a BE API\r
110                         app.isChanged = false;\r
111                         // Each of these specifies a state, which corresponds to a different message and style that gets displayed\r
112                         app.isLoading = true;\r
113                         app.isError = false;\r
114                         app.isDeleted = false;\r
115                         app.printNoChanges = false;\r
116                         app.isUpdating = false;\r
117                         app.isErrorUpdating = false;\r
118                         app.isDoneUpdating = false;\r
119                         app.errorMessage = "";\r
120                         usersService.getUserAppRoles(app.id, this.selectedUser.attuid).promise().then((userAppRolesResult) => {\r
121                             //$log.debug('NewUserModalCtrl::getUserAppsRoles: got a result for app: ',app.id,': ',app.name,': ',userAppRolesResult);\r
122                                 app.appRoles = userAppRolesResult;\r
123                                 app.isLoading = false;\r
124                         }).catch(err => {\r
125                             $log.error(err);\r
126                             app.isError = true;\r
127                             app.isLoading = false;\r
128                             app.errorMessage = err.headers('FEErrorString');\r
129                             //$log.debug('NewUserModalCtrl::getUserAppsRoles: in new-user.controller: response header: '+err.headers('FEErrorString'));\r
130                         }).finally(()=>{\r
131                             this.numberAppsProcessed++;\r
132                             if (this.numberAppsProcessed === this.adminApps.length) {\r
133                                 this.isLoading = false;\r
134                             }\r
135                         });\r
136                         }\r
137                     })\r
138                     return;\r
139                 }).catch(err => {\r
140                     $log.error(err);\r
141                 })\r
142 \r
143             }\r
144            \r
145                         \r
146             /**\r
147              * Update the selected user apps with the new roles.\r
148              * If no roles remain, set the user to inactive.\r
149              */\r
150             this.updateUserAppsRoles = () => {\r
151                 // $log.debug('NewUserModalCtrl::updateUserAppsRoles: entering updateUserAppsRoles');\r
152                 if(!this.selectedUser || !this.selectedUser.attuid || !this.adminApps){\r
153                     $log.error('NewUserModalCtrl::updateUserAppsRoles: mmissing arguments');\r
154                     return;\r
155                 }\r
156                 this.isSaving = true;\r
157                 confirmBoxService.makeUserAppRoleCatalogChanges('Are you sure you want to make these  changes?')\r
158                                             .then(confirmed => {\r
159                                                 if(confirmed === true){\r
160                 //$log.debug('NewUserModalCtrl::updateUserAppsRoles: going to update user: ' + this.selectedUser.attuid);\r
161                 this.numberAppsProcessed = 0;\r
162                 this.numberAppsSucceeded = 0;\r
163                 this.adminApps.forEach(app => {\r
164                     if (app.isChanged) {\r
165                         //$log.debug('NewUserModalCtrl::updateUserAppsRoles: app roles have changed; going to update: id: ', app.id, '; name: ', app.name);\r
166                         app.isUpdating = true;\r
167                         var UserAppRolesRequest = {\r
168                                 attuid: this.selectedUser.attuid,\r
169                                 appId: app.id, \r
170                                 appRoles: app.appRoles,\r
171                                 appName: app.name\r
172                         };                 \r
173                         this.isSaving = true;\r
174                         $log.debug('going to update user: ' + this.selectedUser.attuid + ' with app roles: ' + JSON.stringify(this.adminAppsRoles));\r
175                                 applicationsService.saveUserAppsRoles(UserAppRolesRequest).then(res => {\r
176                                          app.isUpdating = false;\r
177                                      $scope.closeThisDialog(true);\r
178                                 }).catch(err => {\r
179                                     $log.error('NewAdminModalCtrl.updateAdminAppsRoles:: Failed - ' + err);\r
180                                 }).finally(()=> {\r
181                                     this.isSaving = false;\r
182                                 })\r
183                         }\r
184                 });\r
185                                 }else{\r
186                                         this.isSaving = false;\r
187                                 }\r
188                     \r
189 \r
190            \r
191                 });\r
192                 \r
193             };\r
194 \r
195             /**\r
196              * Navigate between dialog screens using step number: 1,2,...\r
197              */\r
198             this.navigateBack = () => {\r
199                 if (this.dialogState === 1) {\r
200                     //back from 1st screen?\r
201                 }\r
202                 if (this.dialogState === 3) {\r
203                     this.dialogState = 1;\r
204                 }\r
205             };\r
206 \r
207             init();\r
208 \r
209             $scope.$on('$stateChangeStart', e => {\r
210                 //Disable navigation when modal is opened\r
211                 //**Nabil - note: this will cause the history back state to be replaced with current state\r
212                 e.preventDefault();\r
213             });\r
214         }\r
215     }\r
216     NewCatalogModalCtrl.$inject = ['$scope', '$log', 'usersService', 'catalogService', 'applicationsService', 'confirmBoxService'];\r
217     angular.module('ecompApp').controller('NewCatalogModalCtrl', NewCatalogModalCtrl);\r
218 })();\r