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