text changes to registration mail content
[namibia] / public / js / app / portal-workspace / historicaldata.js
1 ;
2 (function () {
3
4     window._w.historicaldata = {
5
6         ti: null,
7         rawData: {},
8         gridData: {},
9         dfrom: '',
10         dto: '',
11         basketOnly: false,
12         gridStatus: null,
13
14         onPageDestruct: function ()
15         {
16             App.Event.removeListener('historicaldataGridSuFilter', 'SuChange');
17
18         },
19
20         onHistoricaldataPageTemplateReady: function (template, event, eventData)
21         {
22             _w.historicaldata.ti = _t[template];
23
24             App.DataStore.setData('filterhistoricmakes', []);
25             App.DataStore.setData('filterhistoricmodels', []);
26             App.DataStore.setData('filterhistorictypes', []);
27             App.DataStore.setData('filterhistoricyears', []);
28
29             App.DataStore.loadSelectListData('filterhistoricmakes', false, 'Auction', 'Auction.HistoricMakeSelectList');
30             App.DataStore.loadSelectListData('filterhistoricmodels', false, 'Auction', 'Auction.HistoricModelSelectList');
31             App.DataStore.loadSelectListData('filterhistorictypes', false, 'Auction', 'Auction.HistoricTypeSelectList');
32             App.DataStore.loadSelectListData('filterhistoricyears', false, 'Auction', 'Auction.HistoricYearSelectList');
33             _w.historicaldata.ti.hydrate({
34                 'gridTitle': 'Historical Data',
35                 'gridTitleSubtext': 'Please use the filters below to narrow down the view',
36                 'gridTitleButtons': {
37                     constructor: 'Button',
38                     items: {
39                         Export: {
40                             preset: 'GridExport',
41                             id: 'exportHistoricGrid',
42                             handler: _w.historicaldata.exportHistoricGrid,
43                             permission: App.permissions.historicalPage
44                         }
45                     }
46
47                 },
48                 'gridContextFilter': {
49                     constructor: 'GridContextFilter',
50                     items: {
51                         Buttons: {
52                             actions: true,
53                             searchId: 'btnSearch',
54                             bindSearch: _w.historicaldata.searchHistoricGrid,
55                             clearId: 'btnClearSearch',
56                             bindClear: _w.historicaldata.clearHistoricGridContext
57
58                         }
59                     }
60                 },
61                 'gridColumnHeaders': {
62                     constructor: 'GridColumnHeader',
63                     items: {
64                         Make: {
65                             id: 'gridHistoricalColumn_Make',
66                             title: 'MAKE',
67                             orderAsc: {
68                                 id: 'gridHistoricalOrder_MakeAsc',
69                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'make.name', 'ASC')
70                             },
71                             orderDesc: {
72                                 id: 'gridHistoricalOrder_MakeDesc',
73                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'make.name', 'DESC')
74                             },
75                             style: 'hidden-phone'
76                         },
77                         Model: {
78                             id: 'gridHistoricalColumn_Model',
79                             title: 'MODEL',
80                             orderAsc: {
81                                 id: 'gridHistoricalOrder_ModelAsc',
82                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'model.name', 'ASC')
83                             },
84                             orderDesc: {
85                                 id: 'gridHistoricalOrder_ModelDesc',
86                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'model.name', 'DESC')
87                             },
88                             style: 'hidden-phone'
89                         },
90                         Type: {
91                             id: 'gridHistoricalColumn_Type',
92                             title: 'TYPE',
93                             orderAsc: {
94                                 id: 'gridHistoricalOrder_TypeAsc',
95                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'type.name', 'ASC')
96                             },
97                             orderDesc: {
98                                 id: 'gridHistoricalOrder_TypeDesc',
99                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'type.name', 'DESC')
100                             }
101
102                         },
103                         MMCode: {
104                             id: 'gridHistoricalColumn_MMCode',
105                             title: 'MM CODE',
106                             orderAsc: {
107                                 id: 'gridHistoricalOrder_MMCodeAsc',
108                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'type.mmCode', 'ASC')
109                             },
110                             orderDesc: {
111                                 id: 'gridHistoricalOrder_MMCodeDesc',
112                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'type.mmCode', 'DESC')
113                             }
114
115                         },
116                         Year: {
117                             id: 'gridHistoricalColumn_Year',
118                             title: 'YEAR',
119                             orderAsc: {
120                                 id: 'gridHistoricalOrder_YearAsc',
121                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'vehicleYear.name', 'ASC')
122                             },
123                             orderDesc: {
124                                 id: 'gridHistoricalOrder_YearDesc',
125                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'vehicleYear.name', 'DESC')
126                             },
127                             style: 'year'
128                         },
129                         KM: {
130                             id: 'gridHistoricalColumn_KM',
131                             title: 'KM'S',
132                             orderAsc: {
133                                 id: 'gridHistoricalOrder_KMAsc',
134                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.km', 'ASC')
135                             },
136                             orderDesc: {
137                                 id: 'gridHistoricalOrder_KMDesc',
138                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.km', 'DESC')
139                             },
140                             style: 'kms hidden-phone'
141                         },
142                         TradePrice: {
143                             id: 'gridHistoricalColumn_TradePrice',
144                             title: 'TRADE PRICE',
145                             orderAsc: {
146                                 id: 'gridHistoricalOrder_TradePriceAsc',
147                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.tradePrice', 'ASC')
148                             },
149                             orderDesc: {
150                                 id: 'gridHistoricalOrder_TradePriceDesc',
151                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.tradePrice', 'DESC')
152                             },
153                             style: 'amount'
154                         },
155                         ReconCosts: {
156                             id: 'gridHistoricalColumn_ReconCosts',
157                             title: 'RECON COSTS',
158                             orderAsc: {
159                                 id: 'gridHistoricalOrder_ReconCostsAsc',
160                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.damageTotal', 'ASC')
161                             },
162                             orderDesc: {
163                                 id: 'gridHistoricalOrder_ReconCostsDesc',
164                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'stock.damageTotal', 'DESC')
165                             },
166                             style: 'amount'
167                         },
168                         HighestBid: {
169                             id: 'gridHistoricalColumn_HighestBid',
170                             title: 'HIGHEST BID',
171                             orderAsc: {
172                                 id: 'gridHistoricalOrder_HighestBidAsc',
173                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'currentBid.amount', 'ASC')
174                             },
175                             orderDesc: {
176                                 id: 'gridHistoricalOrder_HighestBidDesc',
177                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'currentBid.amount', 'DESC')
178                             },
179                             style: 'amount'
180                         },
181                         DateSold: {
182                             id: 'gridHistoricalColumn_DateSold',
183                             title: 'DATE SOLD',
184                             orderAsc: {
185                                 id: 'gridHistoricalOrder_DateSoldAsc',
186                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'auction.endDate', 'ASC')
187                             },
188                             orderDesc: {
189                                 id: 'gridHistoricalOrder_DateSoldDesc',
190                                 bind: $.proxy(_w.historicaldata.orderHistoricGrid, this, 'auction.endDate', 'DESC')
191                             },
192                             style: 'date'
193                         },
194                     }
195                 },
196
197                 'gridColumnFilters': {
198                     constructor: 'GridColumnFilter',
199                     items: {
200                         Make: {
201                             id: 'gridHistoricalFilter_Make',
202                             context: 'gridHistoricalFilter',
203                             dataStoreId: 'filterhistoricmakes',
204                             selectEmpty: 'All',
205                             bind: function (meta) {
206                                 _w.historicaldata.changes = 0;
207                                 $('#' + meta.id).unbind('change');
208                                 $('#' + meta.id).change(function () {
209                                     _w.historicaldata.changes++;
210                                     if (1 == _w.historicaldata.changes || 'Active' != _w.historicaldata.gridStatus)
211                                     {
212                                         return;
213                                     }
214                                     _w.historicaldata.searchHistoricGrid();
215                                 });
216                             }
217                         },
218                         Model: {
219                             id: 'gridHistoricalFilter_Model',
220                             context: 'gridHistoricalFilter',
221                             dataStoreId: 'filterhistoricmodels',
222                             selectEmpty: 'All',
223                         },
224                         Type: {
225                             id: 'gridHistoricalFilter_Type',
226                             context: 'gridHistoricalFilter',
227                             dataStoreId: 'filterhistorictypes',
228                             selectEmpty: 'All',
229                         },
230                         MMCode: {
231                             id: 'gridHistoricalFilter_MMCode',
232                             context: 'gridHistoricalFilter'
233                         },
234                         Year: {
235                             id: 'gridHistoricalFilter_Year',
236                             context: 'gridHistoricalFilter',
237                             dataStoreId: 'filterhistoricyears',
238                             selectEmpty: 'All',
239                         },
240                         KM: {
241                             id: 'gridHistoricalFilter_KM',
242                             context: 'gridHistoricalFilter'
243                         },
244                         TradePrice: {
245                             id: 'gridHistoricalFilter_TradePrice',
246                             context: 'gridHistoricalFilter'
247                         },
248                         ReconCosts: {
249                             id: 'gridHistoricalFilter_ReconCosts',
250                             context: 'gridHistoricalFilter'
251                         },
252                         HighestBid: {
253                             id: 'gridHistoricalFilter_HighestBid',
254                             context: 'gridHistoricalFilter'
255                         },
256                         DateSold: {
257                             id: false,
258                         },
259                     }
260                 },
261                 'gridRowRepeater': {},
262                 'gridPager': {}
263             });
264
265             // Retrieve initial grid data.
266             if (null == App.API.taskContract('gridHistorical'))
267             {
268                 App.API.getTask(
269                     'gridHistorical', 'Auction', 'Auction.HistoricGrid', null,
270                     {}, function () {
271                         request = {
272                             "Grid": {
273                                 "Page": 1,
274                                 "Filter": {
275                                     'auction.jobState': 'Sold'
276                                 }
277                             }
278                         };
279                     }, _w.taskContractError
280                 );
281             }
282         },
283
284         onHistoricGridPublished: function ()
285         {
286             $(".gridHistoricalFilter").keyup(function (evt) {
287                 var charCode = evt.charCode || evt.keyCode;
288                 if (charCode == 13)
289                 { //Enter key's keycode
290                     $('#btnSearch').click();
291                 }
292
293             });
294
295             $("body").on('click', 'div.gridHistoricalFilter li', function () {
296                 $('#btnSearch').click();
297             });
298
299             $(".gridHistoricalContext").keyup(function (evt) {
300                 var charCode = evt.charCode || evt.keyCode;
301                 if (charCode == 13)
302                 { //Enter key's keycode
303                     $('#btnSearch').click();
304                 }
305
306             });
307
308             var setTableFormWidth = function ()
309             {
310                 $('.table-form').css({
311                     width: $(window).width() * 0.98
312                 });
313             };
314
315             $(window).on('resize', setTableFormWidth);
316             setTableFormWidth();
317             App.Event.listen('historicaldataGridSuFilter', 'SuChange', $.proxy(_w.historicaldata.loadHistoricGrid, this), 'Recurring');
318             setTimeout(_w.historicaldata.refreshGrid, 1200000);
319         },
320
321         refreshGrid: function ()
322         {
323             if ('historicaldata' != App.activePage)
324             {
325                 return;
326             }
327             _w.historicaldata.loadHistoricGrid(null, {}, {});
328             setTimeout(_w.historicaldata.refreshGrid, 1200000);
329         },
330
331         pageHistoricGrid: function (page)
332         {
333             _w.historicaldata.loadHistoricGrid({}, {"Grid": {"Page": page}});
334         },
335
336         loadHistoricGrid: function (contract, data, options)
337         {
338             App.API.execTask(
339                 'gridHistorical', data, options,
340                 _w.historicaldata._onHistoricGridDataReceived, _w.taskExecError
341             );
342         },
343
344         _buildGrid: function ()
345         {
346             _w.historicaldata.gridData = {};
347             for (var i in _w.historicaldata.rawData.DataSet)
348             {
349                 var row = _w.historicaldata.rawData.DataSet[i];
350
351                 _w.historicaldata.gridData['i' + row.id] = {
352                     bind: function (meta) {
353                         $('#row' + meta.rowId).click(function (e) {
354                             window.location = '#/' + meta.surl + '?id=' + meta.rowId;
355                             console.log('#/' + meta.surl + '?id=' + meta.rowId);
356                         });
357                     },
358                     surl: 'historyview',
359                     prepend: {
360                         TradePrice: 'R ',
361                         ReconCosts: 'R ',
362                         HighestBid: 'R '
363                     },
364                     rowId: row.id,
365                     style: {
366                         Make: 'make hidden-phone',
367                         Model: 'hidden-phone',
368                         Type: 'type',
369                         MMCode: '',
370                         Year: 'year',
371                         KM: 'hidden-phone',
372                         TradePrice: 'amount',
373                         ReconCosts: 'amount',
374                         HighestBid: 'amount',
375                         DateSold: 'date'
376                     },
377                     items: {
378                         'id': row.id,
379                         'Make': row.stock.type.model.make.name,
380                         'Model': row.stock.type.model.name,
381                         'Type': row.stock.type.name,
382                         'MMCode': row.stock.type.mmCode,
383                         'Year': row.stock.vehicleYear.name,
384                         'KM': row.stock.km,
385                         'TradePrice': row.stock.tradePrice,
386                         'ReconCosts': row.stock.damageTotal,
387                         'HighestBid': row.currentBid.amount,
388                         'DateSold': row.endDate
389                     }
390                 };
391             }
392             _w.historicaldata.ti.hydrateParam('gridRowRepeater', {
393                 constructor: 'GridDataRow',
394                 items: _w.historicaldata.gridData
395             });
396         },
397
398         rebuildGrid: function ()
399         {
400             if ('historicaldata' != App.activePage)
401             {
402                 return;
403             }
404             _w.historicaldata._buildGrid();
405             setTimeout(_w.historicaldata.rebuildGrid, 5000);
406         },
407
408         _onHistoricGridDataReceived: function (response)
409         {
410             _w.historicaldata.gridStatus = 'Sold';
411             if (!_w.timeRebuilder)
412             {
413                 _w.timeRebuilder = true;
414                 setTimeout(_w.historicaldata.rebuildGrid, 5000);
415             }
416             _w.historicaldata.ti.hydrateParam('gridRowRepeater', {});
417             _w.historicaldata.currentFilters = response.Data.Meta.Filters;
418             _w.populateFilters(response.Data.Meta.Filters, {
419                 'make.id': 'gridHistoricalFilter_Make',
420                 'model.id': 'gridHistoricalFilter_Model',
421                 'type.id': 'gridHistoricalFilter_Type',
422                 'type.mmCode': 'gridHistoricalFilter_MMCode',
423                 'vehicleYear.id': 'gridHistoricalFilter_Year',
424                 'stock.km': 'gridHistoricalFilter_KM',
425                 'stock.tradePrice': 'gridHistoricalFilter_TradePrice',
426                 'stock.damageTotal': 'gridHistoricalFilter_ReconCosts',
427                 'currentBid.amount': 'gridHistoricalFilter_HighestBid',
428             });
429             $('select.gridHistoricalFilter').each(function (i, elem) {
430                 $(elem).selectpicker('refresh');
431             });
432             _w.historicaldata.rawData = {
433                 DataSet: {},
434                 Meta: response.Data.Meta
435             };
436             for (var i = 0; i < response.Data.DataSet.length; i++)
437             {
438                 _w.historicaldata.rawData.DataSet['a' + response.Data.DataSet[i]['id']] = response.Data.DataSet[i];
439             }
440
441
442             $('#placeholderLogo').hide();
443             _w.historicaldata._buildGrid();
444             _w.historicaldata.rawData.Meta.itemName = 'stockPager';
445             _w.historicaldata.rawData.Meta.bind = _w.historicaldata.pageHistoricGrid;
446             _w.historicaldata.ti.hydrateParam('gridPager', {
447                 constructor: 'GridPager',
448                 items: [_w.historicaldata.rawData.Meta]
449             });
450         },
451
452         exportHistoricGrid: function ()
453         {
454             App.API.execTask(
455                 'gridHistorical', {}, {'ExportToExcel': true},
456                 _w.historicaldata._onExportReceived, _w.taskExecError,
457                 'EXPORT', true
458             );
459         },
460
461         _onExportReceived: function (response)
462         {
463             var win = window.open();
464             win.document.write(response);
465         },
466
467         clearHistoricGridContext: function ()
468         {
469             _w.historicaldata.gridStatus = 'Inactive';
470             try
471             {
472                 $('select.gridHistoricalFilter').each(function (i, elem) {
473                     $(elem).selectpicker('val', '');
474                     $(elem).selectpicker('refresh');
475                 });
476             }
477             catch (err)
478             {
479                 console.log(err);
480             }
481             $('.gridHistoricalContext').val('');
482             $('.gridHistoricalFilter').val('');
483             $('#gridHistoricalFilter_Status').val('Sold');
484             _w.historicaldata.searchHistoricGrid(true);
485         },
486
487         searchHistoricGrid: function (resetOrder)
488         {
489             _w.historicaldata.gridStatus = 'Inactive';
490             var filter = {
491                 count: 0,
492                 filters: {}
493             };
494
495             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_Make', 'make.id');
496             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_Model', 'model.id');
497             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_Type', 'type.id');
498             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_MMCode', 'type.mmCode');
499             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_Year', 'vehicleYear.id');
500             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_KM', 'stock.km');
501             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_TradePrice', 'stock.tradePrice');
502             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_ReconCosts', 'stock.damageTotal');
503             filter = _w.filterIfnotEmpty(filter, 'gridHistoricalFilter_HighestBid', 'currentBid.amount');
504
505             var data = {
506                 "filter": {
507                     "Filters": filter.filters
508                 }
509             };
510
511             App.DataStore.loadSelectListData('filterhistoricmakes', false, 'Auction', 'Auction.HistoricMakeSelectList', null, data, undefined, function()
512             {
513                 if (undefined != _w.historicaldata.currentFilters['make.id'])
514                 {
515                     $('#gridHistoricalFilter_Make').val(_w.historicaldata.currentFilters['make.id']);
516                     $('#gridHistoricalFilter_Make').selectpicker('refresh');
517                 }
518             });
519             App.DataStore.loadSelectListData('filterhistoricmodels', false, 'Auction', 'Auction.HistoricModelSelectList', null, data, undefined, function()
520             {
521                 if (undefined != _w.historicaldata.currentFilters['model.id'])
522                 {
523                     $('#gridHistoricalFilter_Model').val(_w.historicaldata.currentFilters['model.id']);
524                     $('#gridHistoricalFilter_Model').selectpicker('refresh');
525                 }
526             });
527             App.DataStore.loadSelectListData('filterhistorictypes', false, 'Auction', 'Auction.HistoricTypeSelectList', null, data, undefined, function()
528             {
529                 if (undefined != _w.historicaldata.currentFilters['type.id'])
530                 {
531                     $('#gridHistoricalFilter_Type').val(_w.historicaldata.currentFilters['type.id']);
532                     $('#gridHistoricalFilter_Type').selectpicker('refresh');
533                 }
534             });
535             App.DataStore.loadSelectListData('filterhistoricyears', false, 'Auction', 'Auction.HistoricYearSelectList', null, data, undefined, function()
536             {
537                 if (undefined != _w.historicaldata.currentFilters['vehicleYear.id'])
538                 {
539                     $('#gridHistoricalFilter_Year').val(_w.historicaldata.currentFilters['vehicleYear.id']);
540                     $('#gridHistoricalFilter_Year').selectpicker('refresh');
541                 }
542             });
543
544
545             var request = {
546                 "Grid": {
547                     "Page": 1,
548                     "Filter": filter.filters
549                 }
550             };
551             if (resetOrder)
552             {
553                 request.Grid.OrderBy = {
554                     'make.name': 'ASC',
555                     'model.name': 'ASC',
556                     'auction.endDate': 'DESC'
557                 };
558             }
559             _w.historicaldata.loadHistoricGrid(null, request, {});
560         },
561
562         orderHistoricGrid: function (field, direction)
563         {
564             var order = {};
565             order[field] = direction;
566             _w.historicaldata.loadHistoricGrid({}, {"Grid": {"Page": 1, "OrderBy": order}});
567         }
568
569     };
570
571 })();