initial commit
[namibia] / public / js / app / admin-workspace / systembidview.js
1 ;(function(){
2
3         window._w.systembidview = {
4
5                 itemId        : null,
6                 itemData      : null,
7                 formMeta      : null,
8                 bidId         : null,
9                 bidData       : null,
10                 ti            : null,
11                 limited       : false,
12                 newItem       : false,
13                 nextBid       : false,
14                 bidType       : null,
15                 gridData      : {},
16
17                 onTemplateReady : function( template, event, eventData )
18                 {
19
20                         _w.systembidview.ti = _t[template];
21                         _w.systembidview.limited = ('limitedbidview' == template)
22                                 ? true
23                                 : false;
24
25                         _w.systembidview.setStockViewFormMeta();
26                         _w.systembidview.ti.hydrate(_w.systembidview.formMeta);
27
28                         // Retrieve initial view data.
29                         _w.systembidview.itemId = App.Util.getUrlParam('id');
30                         _w.systembidview.bidId   = null;
31
32                         // Stock data
33                         var task = 'Auction.View';
34                         App.API.getTask(
35                                 'viewAuction:' + _w.systembidview.itemId, 'Auction', task, _w.systembidview.itemId,
36                                 {}, $.proxy( _w.systembidview._onStockViewDataReceived, this ), _w.taskContractError
37                         );
38
39                         // Bid history
40                         App.API.getTask(
41                                         'gridBid' + _w.systembidview.itemId, 'Auction', 'Bid.Grid', _w.systembidview.itemId,
42                                         {}, _w.systembidview.loadGrid, _w.taskContractError
43                                         );
44                 },
45
46                 onTemplatePublished : function( template, event, eventData )
47                 {
48
49                         $('.mobile-header-bottom .bottom-heading').text('BID DETAILS');
50
51                         /*
52                          * Permissions
53                          */
54
55                         if (null != _w.systembidview.itemData)
56                         {
57                                 _w.systembidview._onStockDataAndTemplate();
58                         }
59                         $('#btnRemove').click(function(){
60                                 App.API.getTask(
61                                                 'removeAuction:' + _w.systembidview.itemId, 'Auction', 'Auction.Remove', _w.systembidview.itemId,
62                                                 {}, function(){
63                                                         App.API.execTask(
64                                                                         'removeAuction:' + _w.systembidview.itemId, {}, {},
65                                                                         function(){
66                                                                                 alert('Item removed from auction');
67                                                                                 window.location.hash = '/systemauctions';
68                                                                         }, _w.taskExecError
69                                                                         );
70                                                 }, _w.taskContractError
71                                         );
72                         });
73       
74       $('#btnUndo').click(function(){
75                                 App.API.getTask(
76                                                 'undoAuction:' + _w.systembidview.itemId, 'Auction', 'Auction.Undo', _w.systembidview.itemId,
77                                                 {}, function(){
78                                                         App.API.execTask(
79                                                                         'undoAuction:' + _w.systembidview.itemId, {}, {},
80                                                                         function(){
81                                                                                 alert('Auction Undone');
82                                                                                 window.location.hash = '/systemauctions';
83                                                                         }, _w.taskExecError
84                                                                         );
85                                                 }, _w.taskContractError
86                                         );
87                         });
88                         setTimeout(_w.systembidview.refreshGrid, 30000);
89                 },
90
91                 refreshGrid : function()
92                 {
93                         if ('systembidview' != App.activePage)
94                         {
95                                 return;
96                         }
97                         _w.systembidview.loadGrid( null, {}, {} );
98                         setTimeout(_w.systembidview.refreshGrid, 30000);
99                 },
100
101                 loadGrid : function( contract, data, options )
102                 {
103                         App.API.execTask(
104                                         'gridBid' + _w.systembidview.itemId, data, options,
105                                         _w.systembidview._onGridDataReceived, _w.taskExecError
106                                         );
107                 },
108
109                 _onGridDataReceived : function( response )
110                 {
111                         _w.systembidview.ti.hydrateParam('gridRowRepeater', {});
112                         _w.systembidview.gridData = {};
113                         for (var i = 0; i < response.Data.DataSet.length; i++)
114                         {
115                                 var row = response.Data.DataSet[i];
116                                 _w.systembidview.gridData['i' + row.id] = {
117                                         url: false,
118                                         prepend: {
119                                                 Bid    : 'R '
120                                         },
121                                         style: {},
122                                         items: {
123                                                 'id'      : row.id,
124                                                 'Company' : row.company.name,
125                                                 'Profile' : row.profile.firstName + ' ' + row.profile.familyName,
126                                                 'Bid'     : row.amount,
127                                                 'Created' : row.created,
128                                                 'Status'  : row.status
129                                         }
130                                 };
131                         }
132                         _w.systembidview._buildGrid();
133                 },
134
135                 _buildGrid : function()
136                 {
137                         _w.systembidview.ti.hydrateParam('gridRowRepeater', {
138                                 constructor : 'GridDataRow',
139                                 items       : _w.systembidview.gridData
140                         });
141                 },
142
143                 setStockViewFormMeta : function( data )
144                 {
145                         data = (undefined == data)
146                                 ? {"stock":{}}
147                                 : data;
148                         var damagesHtml = '';
149                         var accessoriesHtml = '';
150                         if (undefined != data && undefined != data.stock && undefined != data.stock.damages)
151                         {
152                                 for (var i = 0; i < data.stock.damages.length; i++)
153                                 {
154                                         damagesHtml += '<div class="control-group">';
155                                         damagesHtml += '<label class="control-label valuation-line">' + data.stock.damages[i].damage.name + ':</label>';
156                                         damagesHtml += '<div class="controls">';
157                                         damagesHtml += '<p class="information-lines">R ' + data.stock.damages[i].amount + '</p>';
158                                         damagesHtml += '</div>';
159                                         damagesHtml += '</div>';
160                                 }
161                         }
162                         if (undefined != data && undefined != data.stock && undefined != data.stock.accessories)
163                         {
164                                 for (var i = 0; i < data.stock.accessories.length; i+=2)
165                                 {
166                                         var acc1 = data.stock.accessories[i]
167                                                 ? data.stock.accessories[i].accessory.name
168                                                 : '&nbsp;';
169                                         var acc2 = data.stock.accessories[i+1]
170                                                 ? data.stock.accessories[i+1].accessory.name
171                                                 : '&nbsp;';
172                                         accessoriesHtml += '<div class="row-fluid">';
173                                         accessoriesHtml += '<div class="span6 textshow">' + acc1 + '</div>';
174                                         accessoriesHtml += '<div class="span6 textshow">' + acc2 + '</div>';
175                                         accessoriesHtml += '</div>';
176                                 }
177                         }
178                         if (data.currentBidPrice)
179                         {
180                                 _w.systembidview.nextBid = 0.0 == data.currentBidPrice
181                                         ? parseFloat(data.reservePrice) + parseFloat(data.bidIncrement)
182                                         : parseFloat(data.currentBidPrice) + parseFloat(data.bidIncrement);
183                         }
184                         else
185                         {
186                                 _w.systembidview.nextBid = 0.0;
187                         }
188                         _w.systembidview.formMeta = {
189                                 'gridTitle': 'Bid History',
190                                 'gridColumnHeaders': {
191                                         constructor: 'GridColumnHeader',
192                                         items: {
193                                                 Company: {
194                                                         id: 'gridBidColumn_Company',
195                                                         title: 'DEALERSHIP'
196                                                 },
197                                                 Profile: {
198                                                         id: 'gridBidColumn_Profile',
199                                                         title: 'USER'
200                                                 },
201                                                 Bid: {
202                                                         id: 'gridBidColumn_Bid',
203                                                         title: 'BID AMOUNT',
204                                                         style: 'offer-submitted'
205                                                 },
206                                                 Created: {
207                                                         id: 'gridBidColumn_Created',
208                                                         title: 'CREATED'
209                                                 },
210                                                 Status: {
211                                                         id: 'gridBidColumn_Status',
212                                                         title: 'STATUS'
213                                                 }
214                                         }
215                                 },
216                                 'gridRowRepeater': {},
217                                 'vehicle' : data.stock.type
218                                         ? data.stock.type.model.make.name + ', '
219                                                         + data.stock.type.model.name + ', '
220                                                         + data.stock.type.name
221                                         : '',
222                                 'vehicleYear' : {
223                                         title       : 'Year',
224                                         value       : data.stock.vehicleYear ? data.stock.vehicleYear.name : ''
225                                 },
226                                 'category' : {
227                                         title       : 'Category',
228                                         value       : data.stock.type ? data.stock.type.category.name : ''
229                                 },
230                                 'make' : {
231                                         title       : 'Vehicle Make',
232                                         value       : data.stock.type ? data.stock.type.model.make.name : ''
233                                 },
234                                 'model' : {
235                                         id          : 'vehicleModel',
236                                         title       : 'Vehicle Model',
237                                         value       : data.stock.type ? data.stock.type.model.name : ''
238                                 },
239                                 'type' : {
240                                         title       : 'Vehicle Type',
241                                         value       : data.stock.type ? data.stock.type.name : ''
242                                 },
243                                 'fuelType' : {
244                                         title       : 'Fuel Type',
245                                         value       : data.stock.fuelType ? data.stock.fuelType.name : ''
246                                 },
247                                 'transmissionType' : {
248                                         title       : 'Transmission Type',
249                                         value       : data.stock.transmissionType ? data.stock.transmissionType.name : ''
250                                 },
251                                 'condition' : {
252                                         title       : 'Condition',
253                                         value       : data.stock.condition ? data.stock.condition.name : ''
254                                 },
255                                 'exteriorColour' : {
256                                         title       : 'Main ext. colour',
257                                         value       : data.stock.exteriorColour ? data.stock.exteriorColour.name : ''
258                                 },
259                                 'interiorColour' : {
260                                         title : 'Main int. colour',
261                                         value : data.stock.interiorColour ? data.stock.interiorColour.name : ''
262                                 },
263                                 'upholstery' : {
264                                         title       : 'Upholstery',
265                                         value       : data.stock.upholstery ? data.stock.upholstery.name : ''
266                                 },
267                                 'papers' : {
268                                         title       : 'Papers',
269                                         value       : data.stock.papers ? data.stock.papers.name : ''
270                                 },
271                                 'natis' : {
272                                         title       : 'Natis',
273                                         value       : data.stock.natis ? data.stock.natis.name : ''
274                                 },
275                                 'spareKeys' : {
276                                         title       : 'Spare keys',
277                                         value       : undefined == data.stock.spareKeys
278                                                                         ? ''
279                                                                         : (data.stock.spareKeys ? 'Yes' : 'No')
280                                 },
281                                 'fullServiceHistory' : {
282                                         title       : 'Full service history',
283                                         value       : undefined == data.stock.fullServiceHistory
284                                                                         ? ''
285                                                                         : data.stock.fullServiceHistory.name
286                                 },
287                                 'registrationNumber' : {
288                                         title : 'Registration no',
289                                         value : data.stock.registrationNumber ? data.stock.registrationNumber : ''
290                                 },
291                                 'vinNumber' : {
292                                         title : 'Vin no',
293                                         value : data.stock.vinNumber ? data.stock.vinNumber : ''
294                                 },
295                                 'engineNumber' : {
296                                         title : 'Engine no',
297                                         value : data.stock.engineNumber ? data.stock.engineNumber : ''
298                                 },
299                                 'km' : {
300                                         title : 'Kms',
301                                         value : data.stock.km ? data.stock.km : ''
302                                 },
303                                 'fshNotes' : {
304                                         title : 'FSH notes',
305                                         value : data.stock.fshNotes ? data.stock.fshNotes : ''
306                                 },
307                                 'damages' : damagesHtml,
308                                 'damageTotal' : {
309                                         title : 'Total estimated repair price',
310                                         value : 'R ' + (data.stock ? data.stock.damageTotal : '0.00')
311                                 },
312                                 'damageNotes' : {
313                                         title : 'Damages comments',
314                                         value : data.stock.damageNotes ? data.stock.damageNotes : ''
315                                 },
316                                 'previousRepairsNoted' : {
317                                         title : 'Previous repairs noted',
318                                         value : data.stock.previousRepairsNoted ? 'Yes' : 'No'
319                                 },
320                                 'previousRepairsNotes' : {
321                                         title : 'Previous repairs comments',
322                                         value : data.stock.previousRepairsNotes ? data.stock.previousRepairsNotes : ''
323                                 },
324                                 'accessories' : accessoriesHtml,
325                                 'accessoryNotes' : {
326                                         title     : 'Comments',
327                                         value     : data.stock.accessoryNotes ? data.stock.accessoryNotes : ''
328                                 },
329                                 'mainImage' : {
330                                         type  : 'image',
331                                         view  : true,
332                                         id    : 'mainImage',
333                                         baseImage : 'main_img_car.jpg',
334                                         value : data.stock.mainImage ? data.stock.mainImage : ''
335                                 },
336                                 'frontImage' : {
337                                         type  : 'image',
338                                         view  : true,
339                                         id    : 'frontImage',
340                                         baseImage : 'front_car.jpg',
341                                         value : data.stock.frontImage ? data.stock.frontImage : ''
342                                 },
343                                 'leftImage' : {
344                                         type  : 'image',
345                                         view  : true,
346                                         id    : 'leftImage',
347                                         baseImage : 'left_car.jpg',
348                                         value : data.stock.leftImage ? data.stock.leftImage : ''
349                                 },
350                                 'rightImage' : {
351                                         type  : 'image',
352                                         view  : true,
353                                         id    : 'rightImage',
354                                         baseImage : 'right_car.jpg',
355                                         value : data.stock.rightImage ? data.stock.rightImage : ''
356                                 },
357                                 'backImage' : {
358                                         type  : 'image',
359                                         view  : true,
360                                         id    : 'backImage',
361                                         baseImage : 'back_car.jpg',
362                                         value : data.stock.backImage ? data.stock.backImage : ''
363                                 },
364                                 'interiorImage' : {
365                                         type  : 'image',
366                                         view  : true,
367                                         id    : 'interiorImage',
368                                         baseImage : 'interior_car.jpg',
369                                         value : data.stock.interiorImage ? data.stock.interiorImage : ''
370                                 },
371                                 'engineImage' : {
372                                         type  : 'image',
373                                         view  : true,
374                                         id    : 'engineImage',
375                                         baseImage : 'engine_car.jpg',
376                                         value : data.stock.engineImage ? data.stock.engineImage : ''
377                                 },
378                                 'natisImage' : {
379                                         type  : 'image',
380                                         view  : true,
381                                         id    : 'natisImage',
382                                         baseImage : 'copy_of_natis_car.jpg',
383                                         value : data.stock.natisImage ? data.stock.natisImage : ''
384                                 },
385
386                                 'infCreated': data.created ? ((data.created).split(' '))[0] : '',
387                                 'infLoadedOnAuction': data.stock.loadedOnAuction
388                                         ? ((data.stock.loadedOnAuction).split(' '))[0] : '',
389                                 'infTradePrice': {
390                                         title : 'Trade',
391                                         value : data.stock.tradePrice ? 'R ' + data.stock.tradePrice : '0.00'
392                                 },
393                                 'infRetailPrice': {
394                                         title : 'Retail',
395                                         value : data.stock.retailPrice ? 'R ' + data.stock.retailPrice : '0.00'
396                                 },
397                 'infListPrice': {
398                     title : 'New list price',
399                     value : data.stock.listPrice ? 'R ' + data.stock.listPrice : '0.00'
400                 },
401
402                                 'companyName' : {
403                                         title : 'Dealership name',
404                                         value : data.company ? data.company.name : ''
405                                 },
406                                 'companyContact' : {
407                                         title : 'Name and surname',
408                                         value : data.company && data.company.contact
409                                                                 ? data.company.contact.firstName + ' ' + data.company.contact.familyName
410                                                                 : ''
411                                 },
412                                 'companyMobile' : {
413                                         title : 'Mobile',
414                                         value : data.company && data.company.contact
415                                                                 ? data.company.contact.mobile
416                                                                 : ''
417                                 },
418                                 'companyEmail' : {
419                                         title : 'Email',
420                                         value : data.company && data.company.contact
421                                                                 ? data.company.contact.email
422                                                                 : ''
423                                 },
424                                 'amount' : {
425                                         type  : 'input',
426                                         id    : 'amount',
427                                         title : 'Amount',
428                                         value : _w.systembidview.nextBid,
429                                         disabled: true
430                                 },
431                                 'autoamount' : {
432                                         type  : 'input',
433                                         id    : 'autoamount',
434                                         title : 'Amount',
435                                         //value : parseFloat(_w.systembidview.nextBid) + parseFloat(data.bidIncrement)
436                                         value : parseFloat(_w.systembidview.nextBid).toPrecision(2) + parseFloat(data.bidIncrement).toPrecision(2)
437
438                                 },
439                                 'infAmount' : _w.systembidview.nextBid,
440                                 'myAutoBid' : {
441                                         title : 'Active auto-bid',
442                                         value : data.currentBid && data.currentBid.autoBid
443
444                                                                 ? '<b>R ' + data.currentBid.autoBid.amount + '</b>'
445                                                                 : '<b>no current auto-bid.</b>'
446                                 },
447                                 'nextBid' : {
448                                         title : 'Next bid',
449                                         value : '<b>R ' + _w.systembidview.nextBid + '</b>'
450                                 },
451                                 'winningBid' : {
452                                         title : 'Winning bid',
453                                         value : data.currentBid ? '<b>R ' + data.currentBid.amount + '</b>' : '<b>R 0.00</b>'
454                                 },
455                                 'status' : {
456                                         title : 'Status',
457                                         value : '<b>' + data.jobState + '</b>'
458                                 },
459                                 'print': {
460                                         constructor: 'Button',
461                                         items: {
462                                                 Export: {
463                                                         preset: 'Print',
464                                                         id: 'printAuctionPdf',
465                                                         handler: _w.systembidview.printAuctionPdf
466                                                 }
467                                         }
468                                 }
469                         };
470                 },
471
472                 printAuctionPdf : function()
473                 {
474                         App.API.getTask(
475                                         'printAuctionPdf:' + _w.systembidview.itemId, 'Auction', 'Pdf.Print', _w.systembidview.itemId,
476                                         {}, function() {
477                                                 App.API.execTask(
478                                                                 'printAuctionPdf:' + _w.systembidview.itemId, {}, {},
479                                                                 function () {}, _w.systembidview,
480                                                                 'EXPORT', true
481                                                 );
482                                         }, _w.taskContractError
483                         );
484                 },
485
486                 _onBidDataAndTemplate : function ()
487                 {     
488                         if ('Archived' == _w.systembidview.bidData.status)
489                         {
490                                 true == App.permissions.pgUnArchive ? $('#btnUnarchive').show() : $('#btnUnarchive').hide();
491                                 $('#btnArchive').hide();
492                                 $('#optMakeBid').hide();
493                         }
494                         else
495                         {
496                                 true == App.permissions.pgArchive ? $('#btnArchive').show() : $('#btnArchive').hide();
497                                 $('#btnUnarchive').hide();
498                         }
499                 },
500
501                 _onStockDataAndTemplate : function ()
502                 {
503                         if ('Active' != _w.systembidview.itemData.jobState)
504                         {
505                 $('#btnRemove').hide();
506             }
507             else
508             {
509                 $('#btnRemove').show();
510             }
511
512             if ('Sold' != _w.systembidview.itemData.jobState)
513                     {
514                 $('#btnUndo').hide();
515             }
516             else
517             {
518                 $('#btnUndo').show();
519             }
520
521             if ('Active' != _w.systembidview.itemData.jobState)
522                         {
523                                 $('#optMakeBid').hide();
524                         }
525                         else
526                         {
527                                 App.API.getTask(
528                                                 'createBid', 'Auction', 'Bid.Create',
529                                                 _w.systembidview.itemId, {}, function(){}, _w.taskContractError
530                                         );
531                                 App.API.getTask(
532                                                 'createAutoBid', 'Auction', 'AutoBid.Create',
533                                                 _w.systembidview.itemId, {}, function(){}, _w.taskContractError
534                                 );
535                         }
536                         $('div.table-header-wrapper').hide();
537                 },
538
539                 _onStockViewDataReceived : function( response )
540                 {
541                         _w.systembidview.itemId = response.Data.id;
542                         _w.systembidview.itemData = response.Data;
543                         _w.systembidview.setStockViewFormMeta(response.Data);
544                         _w.systembidview.ti.hydrate(_w.systembidview.formMeta);
545                         if (response.Data.currentBid)
546                         {
547                                 console.log(response.Data.currentBid);
548                                 _w.systembidview.bidId = response.Data.currentBid.id;
549                                 _w.systembidview.bidData = response.Data.currentBid;
550                                 if (_w.systembidview.bidData.company.id != App.companyData.id)
551                                 {
552                                         $('#bidSection').show();
553                                 }
554                                 else
555                                 {
556                                         $('#winningBid').show();
557                                 }
558                         }
559                         else
560                         {
561                                 $('#bidSection').show();
562                                 _w.systembidview.newItem = true;
563                                 _w.systembidview.bidData = {};
564                         }
565                         if (_w.systembidview.ti.published)
566                         {
567                                 _w.systembidview._onStockDataAndTemplate();
568                         }
569                 },
570
571                 _onBidUpdated : function( response )
572                 {
573                         window.location.hash = '/auction';
574                 }
575
576         };
577
578 })();