initial commit
[namibia] / public / js / app / admin-workspace / divisions.js
1 ;(function(){
2
3         window._w.divisions = {
4
5                 ti : null,
6                 itemId : null,
7
8                 onTemplateReady : function( template, event, eventData )
9                 {
10                         _w.divisions.ti = _t[template];
11                         _w.divisions.initGrid();
12
13                         App.DataStore.loadSelectListData('groups', false, 'Company', 'Group.SelectList');
14
15                         // Division grid
16                         if (null == App.API.taskContract('gridDivision'))
17                         {
18                                 App.API.getTask(
19                                                 'gridDivision', 'Company', 'GroupDivision.List', null,
20                                                 {}, _w.divisions.loadDivisionGrid, _w.taskContractError
21                                                 );
22                         }
23                         else
24                         {
25                                 _w.divisions.loadDivisionGrid( null, {}, {} );
26                         }
27                         if (null == App.API.taskContract('addDivision'))
28                         {
29                                 App.API.getTask(
30                                                 'addDivision', 'Company', 'GroupDivision.Create', null,
31                                                 {}, function () {}, _w.taskContractError
32                                                 );
33                         }
34                 },
35
36                 onTemplatePublished : function( template, event, eventData )
37                 {
38                         _w.divisions.ti.hydrateParam('group', {
39                                 type  : 'select',
40                                 id    : 'group',
41                                 title : 'Group',
42                                 value : '',
43                                 dataStoreId : 'groups'
44                         });
45                         _w.divisions.ti.hydrateParam('name', {
46                                 type  : 'input',
47                                 id    : 'name',
48                                 title : 'Name',
49                                 value : ''
50                         });
51                         _w.divisions._setupValidation();
52                         $('#btnNew').click(function() {
53                                 _w.divisions.itemId = null;
54                                 $('#name').val('');
55                                 $('#group').selectpicker('val', '');
56                                 $('label.error').remove();
57                                 $('#btnSave').html(' Add ');
58                         });
59                         $('#btnNew').prop('disabled', false);
60                 },
61
62                 initGrid : function()
63                 {
64
65                         _w.divisions.ti.hydrate({
66                                 // Division grid
67                                 'gridDivisionTitle': 'Manage divisions',
68                                 'gridDivisionColumnHeaders': {
69                                         constructor: 'GridColumnHeader',
70                                         items: {
71                                                 group: {
72                                                         id: 'gridDivisionColumn_group',
73                                                         title: 'GROUP'
74                                                 },
75                                                 name: {
76                                                         id: 'gridDivisionColumn_name',
77                                                         title: 'NAME'
78                                                 }
79                                         }
80                                 },
81                                 'gridDivisionRowRepeater': {}
82                         });
83
84                 },
85
86                 loadDivisionGrid : function( contract, data, options )
87                 {
88                         App.API.execTask(
89                                         'gridDivision', data, options,
90                                         _w.divisions._onDivisionGridDataReceived, _w.taskExecError
91                                         );
92                 },
93
94                 _onDivisionGridDataReceived : function( response )
95                 {
96                         _w.divisions.gridData = {};
97                         _w.divisions.ti.hydrateParam('gridDivisionRowRepeater', {});
98                         var gridData = [];
99                         response.Data.sort(function(a, b)
100                         {
101                                 var aName = a.group.name.toLowerCase();
102                                 var bName = b.group.name.toLowerCase();
103                                 return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
104                         });
105                         for (var i = 0; i < response.Data.length; i++)
106                         {
107                                 var row = response.Data[i];
108                                 _w.divisions.gridData[row.group.name] = row.group.id;
109                                 gridData.push({
110                                         prepend: {
111                                                 Amount  : 'R '
112                                         },
113                                         rowId : row.id,
114                                         onClick : function(meta) {
115                                                 _w.divisions.itemId = meta.rowId;
116                                                 $('#name').val(meta.items.name);
117                                                 $('#group').selectpicker('val', _w.divisions.gridData[meta.items.group]);
118                                                 $('#btnSave').html(' Update ');
119                                         },
120                                         items: {
121                                                 'id'                    : row.id,
122                                                 'name'                  : row.name,
123                                                 'group'                 : row.group.name
124                                         }
125                                 });
126                         }
127                         _w.divisions.ti.hydrateParam('gridDivisionRowRepeater', {
128                                 constructor : 'GridDataRow',
129                                 items       : gridData
130                         });
131                 },
132
133                 _setupValidation : function ()
134                 {
135                         $('#frmDivisionView').validate({
136                                 "rules": {
137                                         name                    : "required",
138                                         group                   : "required"
139                                 },
140                                 messages: {
141                                         name            : "This field is required.",
142                                         group           : "This field is required."
143                                 },
144                                 submitHandler: function( form ) {
145                                         $('#btnSave').prop('disabled', true);
146                                         var data = {
147                                                         GroupDivision: {
148                                                                 name: $('#name').val(),
149                                                                 group: $('#group').val(),
150                                                         }
151                                         };
152                                         if (null == _w.divisions.itemId)
153                                         {
154                                                 App.API.execTask(
155                                                                 'addDivision', data, {},
156                                                                 function() {
157                                                                         $('#name').val('');
158                                                                         $('#group').selectpicker('val', '');
159                                                                         $('label.error').remove();
160                                                                         _w.divisions.loadDivisionGrid( null, {}, {} );
161                                                                         $('#btnSave').prop('disabled', false);
162                                                                         $('#btnSave').html(' Add ');
163                                                                 }, _w.taskExecError
164                                                         );
165                                         }
166                                         else
167                                         {
168                                                 App.API.getTask(
169                                                                 'updateDivision' + _w.divisions.itemId, 'Company', 'GroupDivision.Update', null,
170                                                                 {id: _w.divisions.itemId}, function () {
171                                                                         App.API.execTask(
172                                                                                         'updateDivision' + _w.divisions.itemId, data, {},
173                                                                                         function() {
174                                                                                                 $('#name').val('');
175                                                                                                 $('#group').selectpicker('val', '');
176                                                                                                 $('label.error').remove();
177                                                                                                 _w.divisions.loadDivisionGrid( null, {}, {} );
178                                                                                                 $('#btnSave').prop('disabled', false);
179                                                                                                 $('#btnSave').html(' Add ');
180                                                                                         }, _w.taskExecError
181                                                                                 );
182                                                                 }, _w.taskContractError
183                                                                 );
184                                         }
185                                 }
186                         });
187                         $('#btnSave').prop('disabled', false);
188                 }
189
190         };
191
192 })();