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