initial commit
[namibia] / public / js / app / admin-workspace / systemauctions.js
1 ;(function(){
2
3     window._w.systemauctions = {
4
5         ti       : null,
6         gridData : {},
7
8         onTemplateReady : function( template, event, eventData )
9         {
10             _w.systemauctions.ti = _t[template];
11             App.DataStore.setData('auctionstatuses',
12                 [
13                     {"value":"Active", "label":"Active"},
14                     {"value":"Sold", "label":"Sold"},
15                     {"value":"Relist", "label":"Relist"},
16                     {"value":"Undone", "label":"Undone"},
17                 ]
18             );
19             _w.systemauctions.ti.hydrate({
20                 'gridTitle': 'Auction',
21                 'gridTitleSubtext': 'Please use the filters below to narrow down the view',
22                 'gridTitleButtons': {
23                     constructor: 'Button',
24                     items: {
25                         Export: {
26                             preset: 'GridExport',
27                             id: 'exportAuctionGrid',
28                             handler: _w.systemauctions.exportAuctionGrid
29                         }
30                     }
31                 },
32                 'gridContextFilter': {
33                     constructor: 'GridContextFilter',
34                     items: {
35                         RegNum: {
36                             title: 'Search here:',
37                             style: 'filter-input-wrapper',
38                             id: 'gridAuctionContext_RegNo',
39                             placeholder: 'Registration number',
40                             context: 'gridAuctionContext'
41                         },
42                         Buttons: {
43                             actions: true,
44                             searchId: 'searchAuctionGrid',
45                             bindSearch: _w.systemauctions.searchAuctionGrid,
46                             clearId: 'clearAuctionGridContext',
47                             bindClear: _w.systemauctions.clearAuctionGridContext
48                         }
49                     }
50                 },
51                 'gridColumnHeaders': {
52                     constructor: 'GridColumnHeader',
53                     items: {
54                         ID: {
55                             id: 'gridAuctionColumn_ID',
56                             title: 'ID',
57                             orderAsc: {
58                                 id: 'gridAuctionOrder_IDAsc',
59                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'auction.id', 'ASC')
60                             },
61                             orderDesc: {
62                                 id: 'gridAuctionOrder_IDDesc',
63                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'auction.id', 'DESC')
64                             }
65                         },
66                         Make: {
67                             id: 'gridAuctionColumn_Make',
68                             title: 'MAKE',
69                             orderAsc: {
70                                 id: 'gridAuctionOrder_MakeAsc',
71                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'make.name', 'ASC')
72                             },
73                             orderDesc: {
74                                 id: 'gridAuctionOrder_MakeDesc',
75                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'make.name', 'DESC')
76                             }
77                         },
78                         Model: {
79                             id: 'gridAuctionColumn_Model',
80                             title: 'MODEL',
81                             orderAsc: {
82                                 id: 'gridAuctionOrder_ModelAsc',
83                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'model.name', 'ASC')
84                             },
85                             orderDesc: {
86                                 id: 'gridAuctionOrder_ModelDesc',
87                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'model.name', 'DESC')
88                             }
89                         },
90                         Type: {
91                             id: 'gridAuctionColumn_Type',
92                             title: 'TYPE',
93                             orderAsc: {
94                                 id: 'gridAuctionOrder_TypeAsc',
95                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'type.name', 'ASC')
96                             },
97                             orderDesc: {
98                                 id: 'gridAuctionOrder_TypeDesc',
99                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'type.name', 'DESC')
100                             },
101                             style: 'type'
102                         },
103                         Year: {
104                             id: 'gridAuctionColumn_Year',
105                             title: 'YEAR',
106                             orderAsc: {
107                                 id: 'gridAuctionOrder_YearAsc',
108                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'vehicleYear.name', 'ASC')
109                             },
110                             orderDesc: {
111                                 id: 'gridAuctionOrder_YearDesc',
112                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'vehicleYear.name', 'DESC')
113                             },
114                             style: 'year'
115                         },
116                         KM: {
117                             id: 'gridAuctionColumn_KM',
118                             title: 'KM'S',
119                             orderAsc: {
120                                 id: 'gridAuctionOrder_KMAsc',
121                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.km', 'ASC')
122                             },
123                             orderDesc: {
124                                 id: 'gridAuctionOrder_KMDesc',
125                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.km', 'DESC')
126                             },
127                             style: 'kms'
128                         },
129                         Trade: {
130                             id: 'gridAuctionColumn_Trade',
131                             title: 'TRADE',
132                             orderAsc: {
133                                 id: 'gridAuctionOrder_TradeAsc',
134                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.tradePrice', 'ASC')
135                             },
136                             orderDesc: {
137                                 id: 'gridAuctionOrder_TradeDesc',
138                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.tradePrice', 'DESC')
139                             }
140                         },
141                         Retail: {
142                             id: 'gridAuctionColumn_Retail',
143                             title: 'RETAIL',
144                             orderAsc: {
145                                 id: 'gridAuctionOrder_RetailAsc',
146                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.retailPrice', 'ASC')
147                             },
148                             orderDesc: {
149                                 id: 'gridAuctionOrder_RetailDesc',
150                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.retailPrice', 'DESC')
151                             }
152                         },
153                         List: {
154                             id: 'gridAuctionColumn_List',
155                             title: 'NEW LIST PRICE',
156                             orderAsc: {
157                                 id: 'gridAuctionOrder_ListAsc',
158                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.listPrice', 'ASC')
159                             },
160                             orderDesc: {
161                                 id: 'gridAuctionOrder_ListDesc',
162                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'stock.listPrice', 'DESC')
163                             }
164                         },
165                         Company: {
166                             id: 'gridAuctionFilter_Company',
167                             title: 'DEALERSHIP',
168                             orderAsc: {
169                                 id: 'gridAuctionOrder_CompanyAsc',
170                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'company.name', 'ASC')
171                             },
172                             orderDesc: {
173                                 id: 'gridAuctionOrder_CompanyDesc',
174                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'company.name', 'DESC')
175                             }
176                         },
177                         Region: {
178                             id: 'gridAuctionFilter_Region',
179                             title: 'REGION',
180                             orderAsc: {
181                                 id: 'gridAuctionOrder_RegionAsc',
182                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'region.name', 'ASC')
183                             },
184                             orderDesc: {
185                                 id: 'gridAuctionOrder_RegionDesc',
186                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'region.name', 'DESC')
187                             }
188                         },
189                         Bid: {
190                             id: 'gridAuctionColumn_Bid',
191                             title: 'HIGHEST BID',
192                             orderAsc: {
193                                 id: 'gridAuctionOrder_BidAsc',
194                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'currentBid.amount', 'ASC')
195                             },
196                             orderDesc: {
197                                 id: 'gridAuctionOrder_BidDesc',
198                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'currentBid.amount', 'DESC')
199                             },
200                             style: 'offer-submitted'
201                         },
202                         Time: {
203                             id: 'gridAuctionColumn_Time',
204                             title: 'TIME REMAINING'
205                         },
206                         Status: {
207                             id: 'gridAuctionColumn_Status',
208                             title: 'STATUS',
209                             orderAsc: {
210                                 id: 'gridAuctionOrder_StatusAsc',
211                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'auction.jobState', 'ASC')
212                             },
213                             orderDesc: {
214                                 id: 'gridAuctionOrder_StatusDesc',
215                                 bind: $.proxy(_w.systemauctions.orderAuctionGrid, this, 'auction.jobState', 'DESC')
216                             }
217                         },
218                     }
219                 },
220                 'gridColumnFilters': {
221                     constructor: 'GridColumnFilter',
222                     items: {
223                         ID: {
224                             id: 'gridAuctionFilter_ID',
225                             context: 'gridAuctionFilter'
226                         },
227                         Make: {
228                             id: 'gridAuctionFilter_Make',
229                             context: 'gridAuctionFilter'
230                         },
231                         Model: {
232                             id: 'gridAuctionFilter_Model',
233                             context: 'gridAuctionFilter'
234                         },
235                         Type: {
236                             id: 'gridAuctionFilter_Type',
237                             context: 'gridAuctionFilter'
238                         },
239                         Year: {
240                             id: 'gridAuctionFilter_Year',
241                             context: 'gridAuctionFilter'
242                         },
243                         KM: {
244                             id: 'gridAuctionFilter_KM',
245                             context: 'gridAuctionFilter'
246                         },
247                         Trade: {
248                             id: 'gridAuctionFilter_Trade',
249                             context: 'gridAuctionFilter'
250                         },
251                         Retail: {
252                             id: 'gridAuctionFilter_Retail',
253                             context: 'gridAuctionFilter'
254                         },
255                         List: {
256                             id: 'gridAuctionColumn_List',
257                             context: 'gridAuctionFilter'
258                         },
259                         Company: {
260                             id: 'gridAuctionFilter_Company',
261                             context: 'gridAuctionFilter'
262                         },
263                         Region: {
264                             id: 'gridAuctionFilter_Region',
265                             context: 'gridAuctionFilter'
266                         },
267
268                         Bid: {
269                             id: 'gridAuctionFilter_Bid',
270                             context: 'gridAuctionFilter'
271                         },
272                         Time: {},
273                         Status: {
274                             id: 'gridAuctionFilter_Status',
275                             context: 'gridAuctionFilter',
276                             dataStoreId : 'auctionstatuses',
277                             selectEmpty : 'All'
278                         },
279                     }
280                 },
281                 'gridRowRepeater': {},
282                 'gridPager': {}
283             });
284
285             // Retrieve initial grid data.
286             if (null == App.API.taskContract('gridAuction'))
287             {
288                 App.API.getTask(
289                     'gridAdminAuction', 'Auction', 'Auction.AdminGrid', null,
290                     {}, _w.systemauctions.loadAuctionGrid, _w.taskContractError
291                 );
292             }
293             else
294             {
295                 _w.systemauctions.loadAuctionGrid( null, {}, {} );
296             }
297         },
298
299         onTemplatePublished : function()
300         {
301             $(".gridAuctionFilter").keypress(function (evt) {
302                 var charCode = evt.charCode || evt.keyCode;
303                 if (charCode  == 13) { //Enter key's keycode
304                     $('#btnSearch').click();
305                 }
306             });
307
308             $('#exportAuctionGrid').prop('disabled', !App.permissions.pgGridExport);
309             //$('#btnClearSearch').click(_w.systemauctions.clearAuctionGridContext);
310             //$('#btnSearch').click(_w.systemauctions.searchAuctionGrid);
311
312             var setTableFormWidth = function()
313             {
314                 $('.table-form').css({
315                     width : $(window).width() * 0.96
316                 });
317             };
318
319             $(window).on('resize', setTableFormWidth );
320             setTableFormWidth();
321
322             setTimeout(_w.systemauctions.refreshGrid, 30000);
323         },
324
325         refreshGrid : function()
326         {
327             if ('systemauctions' != App.activePage)
328             {
329                 return;
330             }
331             _w.systemauctions.loadAuctionGrid( null, {}, {} );
332             setTimeout(_w.systemauctions.refreshGrid, 30000);
333         },
334
335         pageAuctionGrid : function( page )
336         {
337             _w.systemauctions.loadAuctionGrid( {}, {"Grid":{"Page":page}} );
338         },
339
340         loadAuctionGrid : function( contract, data, options )
341         {
342             App.API.execTask(
343                 'gridAdminAuction', data, options,
344                 _w.systemauctions._onAuctionGridDataReceived, _w.taskExecError
345             );
346         },
347
348         _buildGrid : function()
349         {
350             _w.systemauctions.ti.hydrateParam('gridRowRepeater', {
351                 constructor : 'GridDataRow',
352                 items       : _w.systemauctions.gridData
353             });
354         },
355
356         _onAuctionGridDataReceived : function( response )
357         {
358             _w.systemauctions.ti.hydrateParam('gridRowRepeater', {});
359             _w.populateFilters(response.Data.Meta.Filters, {
360                 'id': 'gridAuctionFilter_ID',
361                 'make.name': 'gridAuctionFilter_Make',
362                 'model.name': 'gridAuctionFilter_Model',
363                 'type.name': 'gridAuctionFilter_Type',
364                 'vehicleYear.name': 'gridAuctionFilter_Year',
365                 'stock.km': 'gridAuctionFilter_KM',
366                 'stock.tradePrice': 'gridAuctionFilter_Trade',
367                 'stock.retailPrice': 'gridAuctionFilter_Retail',
368                 'stock.listPrice': 'gridAuctionFilter_List',
369                 'company.name': 'gridAuctionFilter_Company',
370                 'region.name': 'gridAuctionFilter_Region',
371                 'currentBid.amount': 'gridAuctionFilter_Bid',
372                 'auction.jobState': 'gridAuctionFilter_Status'
373             });
374             $('select.gridAuctionFilter').each(function(i, elem) {
375                 $(elem).selectpicker('refresh');
376             });
377             _w.systemauctions.gridData = {};
378             for (var i = 0; i < response.Data.DataSet.length; i++)
379             {
380                 var row = response.Data.DataSet[i];
381                 _w.systemauctions.gridData['i' + row.id] = {
382                     url: 'systembidview',
383                     prepend: {
384                         Trade  : 'R ',
385                         Retail : 'R ',
386                         Bid    : 'R '
387                     },
388                     style: {},
389                     items: {
390                         'id'      : row.id,
391                         'ID'      : row.id,
392                         'Make'    : row.stock.type.model.make.name,
393                         'Model'   : row.stock.type.model.name,
394                         'Type'    : row.stock.type.name,
395                         'Year'    : row.stock.vehicleYear.name,
396                         'KM'      : row.stock.km,
397                         'Trade'   : row.stock.tradePrice,
398                         'Retail'  : row.stock.retailPrice,
399                         'List'    : row.stock.listPrice,
400                         'Company' : row.company.name,
401                         'Region'  : row.company.city.region.name,
402                         'Bid'     : row.currentBid ? row.currentBid.amount : row.reservePrice,
403                         'Time'    : App.Util.calculateTimeLeft(row.created, null, row.endDate),
404                         'Status'  : row.jobState
405                     }
406                 };
407             }
408             _w.systemauctions._buildGrid();
409             response.Data.Meta.itemName = 'stockPager';
410             response.Data.Meta.bind = _w.systemauctions.pageAuctionGrid;
411             _w.systemauctions.ti.hydrateParam('gridPager', {
412                 constructor : 'GridPager',
413                 items       : [response.Data.Meta]
414             });
415         },
416
417         exportAuctionGrid : function()
418         {
419             App.API.execTask(
420                 'gridAdminAuction', {}, {'ExportToExcel': true},
421                 _w.systemauctions._onExportReceived, _w.taskExecError,
422                 'EXPORT', true
423             );
424         },
425
426         _onExportReceived : function( response )
427         {
428             var win = window.open();
429             win.document.write(response);
430         },
431
432         clearAuctionGridContext : function()
433         {
434             try
435             {
436                 $('select.gridAuctionFilter').each(function(i, elem) {
437                     $(elem).selectpicker('val', '');
438                     $(elem).selectpicker('refresh');
439                 });
440             }
441             catch (err) { console.log(err); }
442             $('.gridAuctionContext').val('');
443             $('.gridAuctionFilter').val('');
444             _w.systemauctions.searchAuctionGrid(true);
445         },
446
447         searchAuctionGrid : function(resetOrder)
448         {
449             var filter = {
450                 count: 0,
451                 filters: {}
452             };
453             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_ID', 'id');
454             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Make', 'make.name');
455             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Model', 'model.name');
456             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Type', 'type.name');
457             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Year', 'vehicleYear.name');
458             filter = _w.filterIfnotEmpty(filter, 'gridAuctionContext_RegNo', 'stock.registrationNumber');
459             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_KM', 'stock.km');
460             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Trade', 'stock.tradePrice');
461             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Retail', 'stock.retailPrice');
462             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_List', 'stock.listPrice');
463             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Company', 'company.name');
464             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Region', 'region.name');
465             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Bid', 'currentBid.amount');
466             filter = _w.filterIfnotEmpty(filter, 'gridAuctionFilter_Status', 'auction.jobState');
467             var request = {"Grid":{
468                 "Page": 1,
469                 "Filter": filter.filters
470             }};
471             if (resetOrder)
472             {
473                 request.Grid.OrderBy = {'auction.created': 'DESC'};
474             }
475
476             _w.systemauctions.loadAuctionGrid( null, request, {} );
477         },
478
479         orderAuctionGrid : function(field, direction)
480         {
481             var order = {};
482             order[field] = direction;
483             _w.systemauctions.loadAuctionGrid( {}, {"Grid":{"Page": 1, "OrderBy": order}} );
484         }
485     };
486
487 })();