text changes to registration mail content
[namibia] / public / js / app / portal-workspace / clubview.js
1 ;(function(){
2
3         window._w.clubview = {
4
5                 itemId : null,
6                 itemData : null,
7                 formMeta : null,
8                 ti : null,
9                 newItem : false,
10
11                 onViewTemplateReady : function( template, event, eventData )
12                 {
13                         _w.clubview.ti = _t[template];
14                         _w.clubview.initGrid();
15
16                         _w.clubview.setClubViewFormMeta();
17                         _w.clubview.ti.hydratePartial(_w.clubview.formMeta);
18
19                         // Retrieve initial view data.
20                         _w.clubview.itemId = App.Util.getUrlParam('id');
21                         if (0 == _w.clubview.itemId || null == _w.clubview.itemId)
22                         {
23                                 _w.clubview.newItem = true;
24                                 _w.clubview.itemData = {};
25                                 App.API.getTask(
26                                         'createClub', 'PriceGuide', 'Club.Create',
27                                         null, {}, function(){}, _w.taskContractError
28                                 );
29
30                         }
31                         else
32                         {
33                                 _w.clubview.newItem = false;
34                                 App.DataStore.loadSelectListData('allowedInvites', false, 'Company', 'Company.InviteSelectList', null, {Filter:{club:_w.clubview.itemId}});
35                                 App.API.getTask(
36                                                 'inviteMember', 'PriceGuide', 'Member.Invite',
37                                                 null, {}, function(){}, _w.taskContractError
38                                         );
39                                 App.API.getTask(
40                                         'updateClub:' + _w.clubview.itemId, 'PriceGuide', 'Club.Update', null,
41                                         {'id':_w.clubview.itemId}, $.proxy( _w.clubview._onClubViewDataReceived, this ), _w.taskContractError
42                                 );
43                                 // Member Grid
44                                 if (null == App.API.taskContract('gridMember'))
45                                 {
46                                         App.API.getTask(
47                                                         'gridMember', 'PriceGuide', 'Member.Grid', null,
48                                                         {}, _w.clubview.loadMemberGrid, _w.taskContractError
49                                         );
50                                 }
51                                 else
52                                 {
53                                         _w.clubview.loadMemberGrid( null, {}, {} );
54                                 }
55                         }
56
57                 },
58
59                 onViewPublished : function( template, event, eventData )
60                 {
61                         $(".gridMemberFilter").keyup(function (evt) {
62                                 var charCode = evt.charCode || evt.keyCode;
63                                 if (charCode  == 13) { //Enter key's keycode
64                                         $('#btnMemberSearch').click();
65                                 }
66                         });
67
68                         if (_w.clubview.newItem)
69                         {
70                                 _w.clubview._setupValidation();
71                                 $('#invitesection').hide();
72                                 _w.clubview.setClubViewFormMeta();
73                                 _w.clubview.ti.hydratePartial(_w.clubview.formMeta);
74                         }
75                         else
76                         {
77                                 $('#btnInvite').click(function()
78                                 {
79                                         var members = $('#company').val();
80                                         if (null == members)
81                                         {
82                                                 alert('Please select at least 1 new member to invite.');
83                                                 return;
84                                         }
85                                         var data = [];
86                                         for (var i = 0; i < members.length; i++)
87                                         {
88                                                 data.push({
89                                                         Member :
90                                                         {
91                                                                 club    : _w.clubview.itemId,
92                                                                 company : members[i]
93                                                         }
94                                                 });
95                                         }
96                                         App.API.execTaskMulti(
97                                                         'inviteMember', data, {},
98                                                         _w.clubview._onMembersInvited, _w.taskExecError
99                                                 );
100                                 });
101
102                                 // Member Grid
103                     $('#btnMemberClearSearch').click(_w.clubview.clearMemberGridContext);
104                     $('#btnMemberSearch').click(_w.clubview.searchMemberGrid);
105                         }
106                         if (!_w.clubview.newItem && null != _w.clubview.itemData)
107                         {
108                                 _w.clubview._setupValidation();
109                         }
110                 },
111
112                 setClubViewFormMeta : function( data )
113                 {
114                         if (!data)
115                         {
116                                 data = {};
117                         }
118                         _w.clubview.formMeta = {
119                                 'name' : {
120                                         type  : 'input',
121                                         id    : 'name',
122                                         title : 'Name',
123                                         value : data.name ? data.name : ''
124                                 },
125                                 'useAsDefault' : {
126                                         type  : 'checkbox',
127                                         id    : 'useAsDefault',
128                                         title : 'Use as Send to Price Guide from app',
129                                         value : data.useAsDefault ? data.useAsDefault : false
130                                 },
131                                 'company' : {
132                                         type  : 'select',
133                                         id    : 'company',
134                                         title : 'Members',
135                                         dataStoreId : 'allowedInvites',
136                                         multiple    : true,
137                                         value : data.useAsDefault ? data.useAsDefault : false
138                                 }
139                         };
140                 },
141
142                 _onClubViewDataReceived : function( response )
143                 {
144                         _w.clubview.itemId = response.Data.id;
145                         _w.clubview.itemData = response.Data;
146                         _w.clubview.setClubViewFormMeta(response.Data);
147                         _w.clubview.ti.hydratePartial(_w.clubview.formMeta);
148                         if (_w.clubview.ti.published)
149                         {
150                                 _w.clubview._setupValidation();
151                         }
152                 },
153
154                 _setupValidation : function ()
155                 {
156                         $('#frmClubView').validate({
157                                 "rules": {
158                                         name: {required: true}
159                                 },
160                                 messages: {
161                                         name: {
162                                                 minlength: "This field is required."
163                                         }
164                                 },
165                                 submitHandler: function( form ) {
166                                         $('#btnUpdate').prop('disabled', true);
167                                         var data = _w.clubview._prepClubUpdateData();
168                                         if (_w.clubview.newItem)
169                                         {
170                                                 App.API.execTask(
171                                                                 'createClub', data, {},
172                                                                 _w.clubview._onClubUpdated, _w.taskExecError
173                                                         );
174                                         }
175                                         else
176                                         {
177                                                 App.API.execTask(
178                                                                 'updateClub:' + _w.clubview.itemId, data, {},
179                                                                 _w.clubview._onClubUpdated, _w.taskExecError
180                                                         );
181                                         }
182                                 }
183                         });
184                         $('#btnUpdate').prop('disabled', false);
185                 },
186
187                 _prepClubUpdateData : function()
188                 {
189                         return {Club:_w.clubview.ti.harvest()};
190                 },
191
192                 _onMembersInvited : function ( responses )
193                 {
194                         _w.clubview.loadMemberGrid();
195                 },
196
197                 _onClubUpdated : function( response )
198                 {
199                         window.location.hash = '/settings';
200                 },
201
202                 initGrid : function()
203                 {
204                         _w.clubview.ti.hydrate({
205                                 // Club membership grid
206                                 'gridMemberTitle': 'My club members',
207                                 'gridMemberColumnHeaders': {
208                                         constructor: 'GridColumnHeader',
209                                         items: {
210                                                 Dealer: {
211                                                         id: 'gridMemberColumn_Dealer',
212                                                         title: 'DEALERSHIP',
213                                                         orderAsc: {
214                                                                 id: 'gridMemberOrder_DealerAsc',
215                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'company.name', 'ASC')
216                                                         },
217                                                         orderDesc: {
218                                                                 id: 'gridMemberOrder_DealerDesc',
219                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'company.name', 'DESC')
220                                                         }
221                                                 },
222                                                 FirstName: {
223                                                         id: 'gridMemberColumn_FirstName',
224                                                         title: 'NAME',
225                                                         orderAsc: {
226                                                                 id: 'gridMemberOrder_FirstNameAsc',
227                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.firstName', 'ASC')
228                                                         },
229                                                         orderDesc: {
230                                                                 id: 'gridMemberOrder_FirstNameDesc',
231                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.firstName', 'DESC')
232                                                         }
233                                                 },
234                                                 FamilyName: {
235                                                         id: 'gridMemberColumn_FamilyName',
236                                                         title: 'SURNAME',
237                                                         orderAsc: {
238                                                                 id: 'gridMemberOrder_FamilyNameAsc',
239                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.familyName', 'ASC')
240                                                         },
241                                                         orderDesc: {
242                                                                 id: 'gridMemberOrder_FamilyNameDesc',
243                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.familyName', 'DESC')
244                                                         }
245                                                 },
246                                                 Email: {
247                                                         id: 'gridMemberColumn_Email',
248                                                         title: 'EMAIL',
249                                                         orderAsc: {
250                                                                 id: 'gridMemberOrder_EmailAsc',
251                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.email', 'ASC')
252                                                         },
253                                                         orderDesc: {
254                                                                 id: 'gridMemberOrder_EmailDesc',
255                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'contact.email', 'DESC')
256                                                         }
257                                                 },
258                                                 Status: {
259                                                         id: 'gridMemberColumn_Status',
260                                                         title: 'STATUS',
261                                                         orderAsc: {
262                                                                 id: 'gridMemberOrder_StatusAsc',
263                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'mmbr.status', 'ASC')
264                                                         },
265                                                         orderDesc: {
266                                                                 id: 'gridMemberOrder_StatusDesc',
267                                                                 bind: $.proxy(_w.clubview.orderMemberGrid, this, 'mmbr.status', 'DESC')
268                                                         }
269                                                 }
270                                         }
271                                 },
272                                 'gridMemberColumnFilters': {
273                                         constructor: 'GridColumnFilter',
274                                         items: {
275                                                 Dealer: {
276                                                         id: 'gridMemberFilter_Dealer',
277                                                         context: 'gridMemberFilter'
278                                                 },
279                                                 FirstName: {
280                                                         id: 'gridMemberFilter_FirstName',
281                                                         context: 'gridMemberFilter'
282                                                 },
283                                                 FamilyName: {
284                                                         id: 'gridMemberFilter_FamilyName',
285                                                         context: 'gridMemberFilter'
286                                                 },
287                                                 Email: {
288                                                         id: 'gridMemberFilter_Email',
289                                                         context: 'gridMemberFilter'
290                                                 },
291                                                 Status: {
292                                                         id: 'gridMemberFilter_Status',
293                                                         context: 'gridMemberFilter'
294                                                 }
295                                         }
296                                 },
297                                 'gridMemberRowRepeater': {},
298                                 'gridMemberPager': {}
299                         });
300
301                 },
302
303                 loadMemberGrid : function( contract, data, options )
304                 {
305                         data = !data
306                                 ? {Grid:{}}
307                                 : data;
308                         if (!data.Grid)
309                         {
310                                 data.Grid = {Filter:{}};
311                         }
312                         if (!data.Grid.Filter)
313                         {
314                                 data.Grid.Filter = {};
315                         }
316                         data.Grid.Filter['club.id'] = _w.clubview.itemId;
317
318                         App.API.execTask(
319                                         'gridMember', data, options,
320                                         _w.clubview._onMemberGridDataReceived, _w.taskExecError
321                                         );
322                 },
323
324                 pageMemberGrid : function( page )
325                 {
326                         _w.clubview.loadMemberGrid( {}, {"Grid":{"Page":page}} );
327                 },
328
329                 clearMemberGridContext : function()
330                 {
331                         $('.gridMemberContext').val('');
332                         $('.gridMemberFilter').val('');
333                         _w.clubview.searchMemberGrid();
334                 },
335
336                 searchMemberGrid : function()
337                 {
338                         var filter = {
339                                         count: 0,
340                                         filters: {}
341                         };
342                         filter = _w.filterIfnotEmpty(filter, 'gridMemberFilter_Dealer', 'allowedCompany.name');
343                         filter = _w.filterIfnotEmpty(filter, 'gridMemberFilter_FirstName', 'contact.firstName');
344                         filter = _w.filterIfnotEmpty(filter, 'gridMemberFilter_FamilyName', 'contact.familyName');
345                         filter = _w.filterIfnotEmpty(filter, 'gridMemberFilter_Email', 'contact.email');
346                         filter = _w.filterIfnotEmpty(filter, 'gridMemberFilter_Status', 'mmbr.status');
347
348                         var request = {"Grid":{
349                             "Page": 1,
350                             "Filter": filter.filters
351                           }};
352                         _w.clubview.loadMemberGrid( null, request, {} );
353                 },
354
355                 _onMemberGridDataReceived : function( response )
356                 {
357                         _w.clubview.ti.hydrateParam('gridMemberRowRepeater', {});
358
359                         var gridData = [];
360                         for (var i = 0; i < response.Data.DataSet.length; i++)
361                         {
362                                 var row = response.Data.DataSet[i];
363
364                                 gridData.push({
365                                         url: 'memberview',
366                                         prepend: {},
367                                         style: {},
368                                         items: {
369                                                 'id'         : {'id':row.id,'clubId':row.club.id},
370                                                 'Dealer'         : row.company.name,
371                                                 'FirstName'  : row.company.contact.firstName,
372                                                 'FamilyName' : row.company.contact.familyName,
373                                                 'Email'      : row.company.contact.email,
374                                                 'Status'     : row.status
375                                 }
376                                 });
377                         }
378                         _w.clubview.ti.hydrateParam('gridMemberRowRepeater', {
379                                 constructor : 'GridDataRow',
380                                 items       : gridData
381                         });
382                         response.Data.Meta.itemName = 'memberPager';
383                         response.Data.Meta.bind = _w.clubview.pageMemberGrid;
384                         _w.clubview.ti.hydrateParam('gridMemberPager', {
385                                 constructor : 'GridPager',
386                                 items       : [response.Data.Meta]
387                         });
388                 },
389
390                 orderMemberGrid : function(field, direction)
391                 {
392                         var order = {};
393                         order[field] = direction;
394                         _w.clubview.loadMemberGrid( {}, {"Grid":{"Page": 1, "OrderBy": order}} );
395                 }
396
397         };
398
399 })();