latest updates requested
[namibia] / public / js / app / admin-workspace / systemuserview.js
1 ;(function(){
2
3         window._w.systemuserview = {
4
5                 itemId : null,
6                 itemData : null,
7                 formMeta : null,
8                 ti : null,
9                 limited : false,
10                 newItem : false,
11                 ownAccount : false,
12
13                 onTemplateReady : function( template, event, eventData )
14                 {
15                         _w.systemuserview.ti = _t[template];
16                         _w.systemuserview.limited = ('limitedsystemuserview' == template)
17                                 ? true
18                                 : false;
19
20                         App.DataStore.loadSelectListData('companies', true, 'Company', 'Company.SelectList');
21                         App.DataStore.loadSelectListData('fullpermissions', true, 'User', 'Permissions.FullSelectList');
22
23
24
25                         _w.systemuserview.setUserViewFormMeta();
26                         _w.systemuserview.ti.hydrate(_w.systemuserview.formMeta);
27
28                         // Retrieve initial view data.
29                         _w.systemuserview.itemId = App.Util.getUrlParam('id');
30                         if (0 == _w.systemuserview.itemId || null == _w.systemuserview.itemId)
31                         {
32                                 _w.systemuserview.newItem = true;
33                                 _w.systemuserview.ownAccount = false;
34                                 _w.systemuserview.itemData = {};
35                                 App.API.getTask(
36                                         'createUser', 'User', 'Profile.Create',
37                                         null, {}, function(){}, _w.taskContractError
38                                 );
39
40                         }
41                         else
42                         {
43                                 _w.systemuserview.ownAccount = (App.userData.id == _w.systemuserview.itemId)
44                                         ? true
45                                         : false;
46                                 _w.systemuserview.newItem = false;
47                                 App.API.getTask(
48                                         'updateUser:' + _w.systemuserview.itemId, 'User', 'Profile.Update', _w.systemuserview.itemId,
49                                         {'id':_w.systemuserview.itemId}, $.proxy( _w.systemuserview._onUserViewDataReceived, this ), _w.taskContractError
50                                 );
51                         }
52
53                 },
54
55                 onTemplatePublished : function( template, event, eventData )
56                 {
57                         _w.systemuserview.ti = _t[template];
58                         if (_w.systemuserview.newItem)
59                         {
60                                 _w.systemuserview._setupValidation();
61                         }
62                         $('#btnResetPin').click(function() {
63                                 App.API.getTask(
64                                                 'PinReset:' + _w.systemuserview.itemId, 'User', 'Profile.ForgotPassword', null,
65                                                 {}, function () {
66                                                 //( id, data, options, callback, errorCallback, method, direct )
67                                                         App.API.execTask(
68                                                                         'PinReset:' + _w.systemuserview.itemId, {
69                                                                                 Reset : {
70                                                                                         email : _w.systemuserview.itemData.email,
71                                                                                         mobile : _w.systemuserview.itemData.mobile
72                                                                                 }
73                                                                 }, {},
74                                                                 function() {
75                                                                         alert('Pin reset successful.');
76                                                                 }, _w.taskExecError
77                                                         );
78                                                 }, _w.taskContractError
79                                 );
80                         });
81                         $('#btnSuspend').click(_w.systemuserview._routeToSuspended);
82                         $('#btnActivate').click(_w.systemuserview._routeToActive);
83                         $('#btnArchive').click(_w.systemuserview._routeToArchived);
84                         $('#btnUnarchive').click(_w.systemuserview._routeToActive);
85                         if (!_w.systemuserview.newItem)
86                         {
87                                 $('#btnPermissions').click(function() {
88                                         window.location.hash = '/override?id=' + _w.systemuserview.itemData.override;
89                                 });
90                         }
91                         else
92                         {
93                                 $('#btnPermissions').prop('disabled', true);
94                         }
95                 },
96
97                 _routeToActive : function()
98                 {
99                         App.API.directRoute(
100                                 'routeUserActive:' + _w.systemuserview.itemId, 'User', 'Workflow.MoveToActive',
101                                 _w.systemuserview.itemId, {}, _w.systemuserview._onUserUpdated, _w.taskExecError
102                         );
103                 },
104
105                 _routeToSuspended : function()
106                 {
107                         App.API.directRoute(
108                                 'routeUserSuspended:' + _w.systemuserview.itemId, 'User', 'Workflow.MoveToSuspended',
109                                 _w.systemuserview.itemId, {}, _w.systemuserview._onUserUpdated, _w.taskExecError
110                         );
111                 },
112
113                 _routeToArchived : function()
114                 {
115                         App.API.directRoute(
116                                 'routeUserArchive:' + _w.systemuserview.itemId, 'User', 'Workflow.MoveToArchive',
117                                 _w.systemuserview.itemId, {}, _w.systemuserview._onUserUpdated, _w.taskExecError
118                         );
119                 },
120
121                 setUserViewFormMeta : function( data )
122                 {
123                         if (!data)
124                         {
125                                 data = {};
126                         }
127                         _w.systemuserview.formMeta = {
128                                 'company' : {
129                                         type        : 'select',
130                                         id          : 'company',
131                                         title       : 'Dealership',
132                                         dataStoreId : 'companies',
133                                         value       : data.company ? data.company : '',
134                                         onChange    : function() {
135                                                 if (!App.DataStore.getItem('BuildSelect:company', false))
136                                                 {
137                                                         App.DataStore.loadSelectListData('cmpfltrdmanagers', false, 'User', 'Profile.AdminManagerList', null, {
138                                                                 Filter: {company: $(this).val()}
139                                                         });
140                                                 }
141                                         }
142                                 },
143                                 'firstName' : {
144                                         type  : 'input',
145                                         id    : 'firstName',
146                                         title : 'Name',
147                                         value : data.firstName ? data.firstName : '',
148                                         maxlength : 100
149                                 },
150                                 'familyName' : {
151                                         type  : 'input',
152                                         id    : 'familyName',
153                                         title : 'Surname',
154                                         value : data.familyName ? data.familyName : '',
155                                         maxlength : 100
156                                 },
157                                 //'idNumber' : {
158                                 //      type  : 'input',
159                                 //      id    : 'idNumber',
160                                 //      title : 'ID Number',
161                                 //      value : data.idNumber ? data.idNumber : '',
162                                 //      maxlength : 13,
163                                 //      onChange  : function() {
164                                 //              var dig = $(this).val().substring(0, 6);
165                                 //              $('#dateOfBirth').val(
166                                 //                              '19' + dig.substring(0, 2) +
167                                 //                              '-' + dig.substring(2, 4) +
168                                 //                              '-' + dig.substring(4, 6)
169                                 //                              );
170                                 //      }
171                                 //},
172                                 //'dateOfBirth' : {
173                                 //      type  : 'input',
174                                 //      id    : 'dateOfBirth',
175                                 //      title : 'Date of birth',
176                                 //      style : 'datepicker',
177                                 //      value : data.dateOfBirth ? data.dateOfBirth : ''
178                                 //},
179                                 'mobile' : {
180                                         type  : 'mobile',
181                                         id    : 'mobile',
182                                         title : 'Mobile',
183                                         value : data.mobile ? data.mobile : '',
184                                         maxlength : 20
185                                 },
186                                 'email' : {
187                                         type  : 'input',
188                                         id    : 'email',
189                                         title : 'Email',
190                                         value : data.email ? data.email : '',
191                                         maxlength : 255
192                                 },
193                                 'manager' : {
194                                         type        : 'select',
195                                         id          : 'manager',
196                                         title       : 'Assign to',
197                                         selectEmpty : 'Nobody',
198                                         dataStoreId : 'cmpfltrdmanagers',
199                                         value       : data.manager ? data.manager : ''
200                                 },
201                                 'permissions' : {
202                                         type        : 'select',
203                                         id          : 'permissions',
204                                         title       : 'User type',
205                                         dataStoreId : 'fullpermissions',
206                                         value       : data.permissions ? data.permissions : ''
207                                 },
208                                 
209                                 'mainMemberPublicCentre' : {
210                                         type  : 'checkbox',
211                                         id    : 'mainMemberPublicCentre',
212                                         title : 'Main Member of Public Centre',
213                                         value : data.mainMemberPublicCentre ? data.mainMemberPublicCentre : false
214                                 },
215
216                                 'subscribeNewsletter' : {
217                                         type  : 'checkbox',
218                                         id    : 'subscribeNewsletter',
219                                         title : 'Subscribe to newsletters',
220                                         value : data.subscribeNewsletter ? data.subscribeNewsletter : false
221                                 }
222                         };
223                 },
224
225                 _onUserViewDataReceived : function( response )
226                 {
227                         if (response.Data.company)
228                         {
229                                 App.DataStore.loadSelectListData('cmpfltrdmanagers', false, 'User', 'Profile.AdminManagerList', null, {
230                                         Filter: {company: response.Data.company}
231                                 });
232                         }
233                         else
234                         {
235                                 App.DataStore.setData('managers', []);
236                         }
237                         _w.systemuserview.itemId = response.Data.id;
238                         _w.systemuserview.itemData = response.Data;
239                         _w.systemuserview.setUserViewFormMeta(response.Data);
240                         _w.systemuserview.ti.hydrate(_w.systemuserview.formMeta);
241                         if (!_w.systemuserview.newItem)
242                         {
243                                 switch (response.Data.jobState)
244                                 {
245                                 case 'Active':
246                                         $('#btnResetPin').show();
247                                         $('#btnSuspend').show();
248                                         $('#btnArchive').show();
249                                         break;
250                                 case 'Suspended':
251                                         $('#btnActivate').show();
252                                         $('#btnArchive').show();
253                                         break;
254                                 case 'Archived':
255                                         $('#btnUnarchive').show();
256                                         break;
257                                 }
258                         }
259                         _w.systemuserview._setupValidation();
260                 },
261
262                 _setupValidation : function ()
263                 {
264                         $('#frmUserView').validate({
265                                 "rules": {
266                                         firstName: "required",
267                                         familyName: "required",
268                                         //idNumber: {required: true, minlength: 13, maxlength: 13, digits: true},
269                                         //dateOfBirth: {required: true, dateISO: true},
270                                         mobile: {required: true, mobile: true},
271                                         email: {
272                                                 required: true,
273                                                 email: true,
274                                                 remote: {
275                                                         url: "/workspace/validate-unique-field-direct",
276                                                         type: "post",
277                                                         data: {
278                                                                 Workspace       : 'User',
279                                                                 Group           : 'Profile',
280                                                                 Label           : 'Email',
281                                                                 Field           : 'email',
282                                                                 Value           : function() {
283                                                                         return $("#email").val();
284                                                                 },
285                                                                 Id                      : $.proxy(function() {
286                                                                         return _w.systemuserview.itemId;
287                                                                 }, this)
288                                                         }
289                                                 }
290                                         },
291                                         permissions: "required"
292                                 },
293                                 messages: {
294                                         firstName : "This field is required.",
295                                         familyName : "This field is required.",
296                                         email: {
297                                                 email: "Must be a valid email address."
298                                         },
299                                         //idNumber: {
300                                         //      minlength: "Must be 13 digits.",
301                                         //      maxlength: "Must be 13 digits."
302                                         //},
303                                         //dateOfBirth: {
304                                         //      dateISO: "Must be a valid date."
305                                         //},
306                                         permissions : "This field is required."
307                                 },
308                                 submitHandler: function( form ) {
309                                         $('#btnUpdate').prop('disabled', true);
310                                         var data = _w.systemuserview._prepUserUpdateData();
311                                         if (_w.systemuserview.newItem)
312                                         {
313                                                 App.API.execTask(
314                                                                 'createUser', data, {},
315                                                                 _w.systemuserview._onUserUpdated, _w.taskExecError
316                                                         );
317                                         }
318                                         else
319                                         {
320                                                 App.API.execTask(
321                                                                 'updateUser:' + _w.systemuserview.itemId, data, {},
322                                                                 _w.systemuserview._onUserUpdated, _w.taskExecError
323                                                         );
324                                         }
325                                 }
326                         });
327                         $('#btnUpdate').prop('disabled', false);
328                 },
329
330                 _prepUserUpdateData : function()
331                 {
332                         var data = {Profile:_w.systemuserview.ti.harvest()};
333                         if ('' == data.Profile.manager)
334                         {
335                                 data.Profile.manager = null;
336                         }
337                         return data;
338                 },
339
340                 _onUserUpdated : function( response )
341                 {
342                         if (_w.systemuserview.ownAccount)
343                         {
344                                 App.API.getTask(
345                                                 'updateOffer:' + _w.offerview.offerId, 'User', 'Profile.ActiveAccount', null,
346                                                 {}, function (response) {
347                                                         App.permissions = response.Data.permissions;
348                                                         delete response.Data.permissions;
349                                                         App.companyData = response.Data.company;
350                                                         delete response.Data.company;
351                                                         App.userData = response.Data;
352                                                         window.location.hash = '/systemusers';
353                                                 }, _w.onActiveAccountFailure
354                                         );
355                         }
356                         else
357                         {
358                                 window.location.hash = '/systemusers';
359                         }
360                 }
361
362         };
363
364 })();