initial commit
[namibia] / public / js / app / portal-workspace / tcstockview.js
1 ;(function(){
2
3         window._w.tcstockview = {
4
5                 itemId      : null,
6                 itemData    : null,
7                 formMeta    : null,
8                 ti          : null,
9                 limited     : false,
10                 newItem     : false,
11                 validations : 0,
12                 dates       : [],
13
14                 onStockViewTemplateReady : function( template, event, eventData )
15                 {
16                         _w.tcstockview.ti = _t[template];
17                         var phData = App.DataStore.getData('publicHolidays');
18                         for (var i = 0; i < phData.length; i++)
19                         {
20                                 var dateParts = phData[i].holiday.split('-').map(function(part){
21                                                 return parseInt(part, 10);
22                                         });
23                                 var holiday = new Date(dateParts[0], dateParts[1]-1, dateParts[2]);
24                                 _w.tcstockview.dates.push(holiday.toDateString());
25                         }
26
27                         _w.tcstockview.limited = ('limitedstockview' == template || 'limitedtcstockview' == template)
28                                 ? true
29                                 : false;
30                         App.DataStore.setData('sparekeys', [{"value":"1", "label":"Yes"}, {"value":"0", "label":"No"}]);
31                         App.DataStore.loadSelectListData('years', true, 'Stock', 'Year.SelectList');
32                         App.DataStore.loadSelectListData('categories', true, 'Stock', 'Category.SelectList');
33                         App.DataStore.loadSelectListData('conditions', true, 'Stock', 'Condition.SelectList');
34                         App.DataStore.loadSelectListData('exteriorColours', true, 'Stock', 'ExteriorColour.SelectList');
35                         App.DataStore.loadSelectListData('interiorColours', true, 'Stock', 'InteriorColour.SelectList');
36                         App.DataStore.loadSelectListData('upholsteries', true, 'Stock', 'Upholstery.SelectList');
37                         App.DataStore.loadSelectListData('papers', true, 'Stock', 'Paper.SelectList');
38                         App.DataStore.loadSelectListData('natis', true, 'Stock', 'Natis.SelectList');
39                         App.DataStore.loadSelectListData('fsh', true, 'Stock', 'FullServiceHistory.SelectList');
40                         App.DataStore.loadSelectListData('fuelTypes', true, 'Stock', 'FuelType.SelectList');
41                         App.DataStore.loadSelectListData('transmissionTypes', true, 'Stock', 'TransmissionType.SelectList');
42                         App.DataStore.loadSelectListData('damages', true, 'Stock', 'Damage.SelectList');
43                         App.DataStore.loadSelectListData('accessories', true, 'Stock', 'Accessory.SelectList');
44                         App.DataStore.loadSelectListData('clubs', true, 'PriceGuide', 'Club.SelectList');
45
46                         _w.tcstockview.setStockViewFormMeta();
47                         _w.tcstockview.ti.hydrate(_w.tcstockview.formMeta);
48                         // Retrieve initial view data.
49                         _w.tcstockview.itemId = App.Util.getUrlParam('id');
50
51                         if (0 == _w.tcstockview.itemId || null == _w.tcstockview.itemId)
52                         {
53                                 _w.tcstockview.newItem = true;
54                                 _w.tcstockview.itemData = {
55                                                 stock       : {},
56                                                 vehicleYear : null,
57                                                 type        : {
58                                                         category    : {
59                                                                 id : null
60                                                         },
61                                                         model       : {
62                                                                 id   : null,
63                                                                 make : {
64                                                                         id : null
65                                                                 }
66                                                         }
67                                                 }
68                                 };
69                                 App.API.getTask(
70                                         'createStock', 'Stock', 'Stock.Create',
71                                         null, {}, function(){}, _w.taskContractError
72                                 );
73                                 App.API.getTask(
74                                         'createStockAuction', 'Stock', 'Stock.CreateAuction',
75                                         null, {}, function(){}, _w.taskContractError
76                                 );
77                         }
78                         else
79                         {
80                                 _w.tcstockview.newItem = false;
81                                 var task = _w.tcstockview.limited
82                                         ? 'Stock.LimitedUpdate'
83                                         : 'Stock.Update';
84                                 App.API.getTask(
85                                                 'updateStock:' + _w.tcstockview.itemId, 'Stock', task, _w.tcstockview.itemId,
86                                                 {}, $.proxy( _w.tcstockview._onStockViewDataReceived, this ), _w.taskContractError
87                                         );
88                         }
89                 },
90
91                 onStockViewPublished : function( template, event, eventData )
92                 {
93                         _w.tcstockview.limited = ('limitedstockview' == template)
94                                 ? true
95                                 : false;
96
97                         $('#btn_mainImage').change(function () {
98                                 if ('' == $('#mainImage').val())
99                                 {
100                                         $('#img_mainImage').addClass('error');
101                                         $('#img_mainImage').removeClass('valid');
102                                 }
103                                 else
104                                 {
105                                         $('#img_mainImage').removeClass('error');
106                                         $('#img_mainImage').addClass('valid');
107                                 }
108                         });
109
110                         $('#btnFetchTu').click(function () {
111                                 if (!$('#vehicleYear').val()
112                                         || !$('#vehicleType').val())
113                                 {
114                                         alert('Vehicle year and type is required to fetch Trade and Retail pricing.');
115                                         return;
116                                 }
117                                 App.API.getTask(
118                                                 'TransUnionFromMmCode', 'Stock', 'Utility.TransUnionFromMmCode', null,
119                                                 {}, _w.tcstockview._onTuReady, _w.taskContractError
120                                 );
121                         });
122                         $('#btnUpdate').prop('disabled', true);
123                         $('#btnArchive').click(function () {
124                                 App.API.directRoute(
125                                                 'archiveStock:' + _w.tcstockview.itemId,
126                                                 'Stock', 'Stock.MoveToArchive', _w.tcstockview.itemId, {},
127                                                 _w.tcstockview._onStockUpdated, _w.taskExecError
128                                                 );
129                         });
130                         $('#btnUnarchive').click(function () {
131                                 App.API.directRoute(
132                                                 'unarchiveStock:' + _w.tcstockview.itemId,
133                                                 'Stock', 'Stock.MoveToStock', _w.tcstockview.itemId, {},
134                                                 _w.tcstockview._onStockUpdated, _w.taskExecError
135                                                 );
136                         });
137                         App.Util.updateCheckboxStyle($('#acceptPgHPIdisclaimer'));
138                         $('#btnSendToPg').click(function () {
139                                 var clubs = $('#clubs').val();
140                                 if (null == clubs)
141                                 {
142                                         alert('Please select at least one club.');
143                                         return;
144                                 }
145                                 if (!$('#acceptPgHPIdisclaimer').is(':checked'))
146                                 {
147                                         alert('Please accept the conditions before sending.');
148                                         return;
149                                 }
150                                 if ('' == $('#registrationNumber').val())
151                                 {
152                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
153                                         $('#registrationNumber').addClass('error');
154                                         $('#registrationNumber').removeClass('valid');
155                                         return;
156                                 }
157                                 else
158                                 {
159                                         $('#registrationNumber').removeClass('error');
160                                         $('#registrationNumber').addClass('valid');
161                                 }
162                                 if ('' == $('#vinNumber').val())
163                                 {
164                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
165                                         $('#vinNumber').addClass('error');
166                                         $('#vinNumber').removeClass('valid');
167                                         return;
168                                 }
169                                 else
170                                 {
171                                         $('#vinNumber').removeClass('error');
172                                         $('#vinNumber').addClass('valid');
173                                 }
174                                 if ('' == $('#engineNumber').val())
175                                 {
176                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
177                                         $('#engineNumber').addClass('error');
178                                         $('#engineNumber').removeClass('valid');
179                                         return;
180                                 }
181                                 else
182                                 {
183                                         $('#engineNumber').removeClass('error');
184                                         $('#engineNumber').addClass('valid');
185                                 }
186                                 if (!$('#frmStockView').valid())
187                                 {
188                                         return;
189                                 }
190                                 $('#btnSendToPg').prop('disabled', true);
191                                 App.API.execTask(
192                                         'updateStock:' + _w.tcstockview.itemId, {"Stock":_w.tcstockview._prepStockUpdateData()}, {},
193                                         function () {
194                                                 App.API.getRoute(
195                                                                 'sendToPg:' + _w.tcstockview.itemId, 'Stock', 'Stock.SendToPriceGuide', _w.tcstockview.itemId,
196                                                                 {}, function() {
197                                                                         var clubList = $('#clubs').val();
198                                                                         var clubs = [];
199                                                                         for (var i = 0; i < clubList.length; i++)
200                                                                         {
201                                                                                 clubs.push({id: clubList[i]});
202                                                                         }
203                                                                         App.API.execRoute(
204                                                                                         'sendToPg:' + _w.tcstockview.itemId, {Context: {clubs: clubs}}, {},
205                                                                                         _w.tcstockview._onStockUpdated, _w.taskExecError
206                                                                         );
207                                                                 }, _w.taskContractError
208                                                 );
209                                         }, _w.taskExecError
210                                 );
211                         });
212                         $('#btnSendToDealer').click(function () {
213                                 if (!$('#frmStockView').valid())
214                                 {
215                                         return;
216                                 }
217                                 $('#btnSendToDealer').prop('disabled', true);
218                                 App.API.execTask(
219                                                 'updateStock:' + _w.tcstockview.itemId, {"Stock":_w.tcstockview._prepStockUpdateData()}, {},
220                                                 function () {
221                                                         App.API.directRoute(
222                                                                         'tcStock:' + _w.tcstockview.itemId,
223                                                                         'Stock', 'Stock.SendToDealer', _w.tcstockview.itemId, {},
224                                                                         _w.tcstockview._onStockUpdated, _w.taskExecError
225                                                                         );
226                                                 }, _w.taskExecError
227                                 );
228                         });
229                         App.Util.updateCheckboxStyle($('#acceptAuctionHPIdisclaimer'));
230                         $('#btnSendToAuction').click(function () {
231                                 var endDate = $('#endDate').val();
232                                 var reservePrice = $('#reservePrice').val();
233                                 if ('' == endDate || '' == reservePrice || isNaN(reservePrice))
234                                 {
235                                         alert('Please provide end date and reserve price.');
236                                         return;
237                                 }
238
239                                 if (!$('#frmStockView').valid())
240                                 {
241                                         return;
242                                 }
243                                 if (!$('#acceptAuctionHPIdisclaimer').is(':checked'))
244                                 {
245                                         alert('Please accept the conditions before sending.');
246                                         return;
247                                 }
248
249                                 if ('' == $('#mainImage').val())
250                                 {
251                                         alert('The main image is mandatory for moving a vehicle to auction.');
252                                         $('#img_mainImage').addClass('error');
253                                         $('#img_mainImage').removeClass('valid');
254                                         return;
255                                 }
256                                 else
257                                 {
258                                         $('#img_mainImage').removeClass('error');
259                                         $('#img_mainImage').addClass('valid');
260                                 }
261                                 if ('' == $('#registrationNumber').val())
262                                 {
263                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to auction.');
264                                         $('#registrationNumber').addClass('error');
265                                         $('#registrationNumber').removeClass('valid');
266                                         return;
267                                 }
268                                 else
269                                 {
270                                         $('#registrationNumber').removeClass('error');
271                                         $('#registrationNumber').addClass('valid');
272                                 }
273                                 if ('' == $('#vinNumber').val())
274                                 {
275                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to auction.');
276                                         $('#vinNumber').addClass('error');
277                                         $('#vinNumber').removeClass('valid');
278                                         return;
279                                 }
280                                 else
281                                 {
282                                         $('#vinNumber').removeClass('error');
283                                         $('#vinNumber').addClass('valid');
284                                 }
285                                 if ('' == $('#engineNumber').val())
286                                 {
287                                         alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to auction.');
288                                         $('#engineNumber').addClass('error');
289                                         $('#engineNumber').removeClass('valid');
290                                         return;
291                                 }
292                                 else
293                                 {
294                                         $('#engineNumber').removeClass('error');
295                                         $('#engineNumber').addClass('valid');
296                                 }
297
298
299                                 $('#btnSendToAuction').prop('disabled', true);
300                                 if (_w.tcstockview.newItem)
301                                 {
302                                         var data = {};
303                                         data.Stock = _w.tcstockview._prepStockUpdateData();
304                                         data.Context = {endDate: endDate, reservePrice: reservePrice};
305                                         App.API.execTask(
306                                                 'createStockAuction', data, {},
307                                                 _w.tcstockview._onStockUpdated, _w.taskExecError
308                                         );
309                                 }
310                                 else
311                                 {
312                                         App.API.execTask(
313                                                         'updateStock:' + _w.tcstockview.itemId, {"Stock":_w.tcstockview._prepStockUpdateData()}, {},
314                                                         function () {
315                                                                 App.API.getRoute(
316                                                                                 'sendToAuction:' + _w.tcstockview.itemId, 'Stock', 'Stock.SendToAuction', _w.tcstockview.itemId,
317                                                                                 {}, function() {
318                                                                                         var endDate = $('#endDate').val();
319                                                                                         var reservePrice = $('#reservePrice').val();
320                                                                                         App.API.execRoute(
321                                                                                                         'sendToAuction:' + _w.tcstockview.itemId, {Context: {endDate: endDate, reservePrice: reservePrice}}, {},
322                                                                                                         _w.tcstockview._onStockUpdated, _w.taskExecError
323                                                                                         );
324                                                                                 }, _w.taskContractError
325                                                                 );
326                                                         }, _w.taskExecError
327                                         );
328                                 }
329                         });
330
331             $('.back-btn').on('click', function(){
332                 window.history.back();
333             });
334
335                         if (null != _w.tcstockview.itemData)
336                         {
337                                 _w.tcstockview._onDataAndTemplate();
338                         }
339                 },
340
341                 setStockViewFormMeta : function( data )
342                 {
343                         var damages = {};
344                         if (undefined != data)
345                         {
346                                 for (var i = 0; i < data.damages.length; i++)
347                                 {
348                                         damages['d' + data.damages[i].damage] = data.damages[i].amount;
349                                 }
350                         }
351                         else
352                         {
353                                 data = {};
354                         }
355                         _w.tcstockview.formMeta = {
356                                 'vehicleYear' : {
357                                         type        : 'select',
358                                         id          : 'vehicleYear',
359                                         title       : 'Year',
360                                         dataStoreId : 'years',
361                                         value       : data.vehicleYear ? data.vehicleYear : '',
362                                         onChange    : function () {
363                                                 if (!App.DataStore.getItem('BuildSelect:vehicleYear', false))
364                                                 {
365                                                         if (_w.tcstockview.itemData)
366                                                         {
367                                                                 _w.tcstockview.itemData.vehicleYear = $('#vehicleYear').val();
368                                                                 _w.tcstockview._listMakesModelsTypes(function () {
369                                                                         if ($('#vehicleYear').val() && $('#vehicleType').val())
370                                                                         {
371                                                                                 App.API.getTask(
372                                                                                                 'TransUnionFromMmCode', 'Stock', 'Utility.TransUnionFromMmCode', null,
373                                                                                                 {}, _w.tcstockview._onTuReady, _w.taskContractError
374                                                                                 );
375                                                                         }
376                                                                 });
377                                                         }
378                                                 }
379                                         }
380                                 },
381                                 'category' : {
382                                         type        : 'select',
383                                         id          : 'vehicleCategory',
384                                         title       : 'Category',
385                                         dataStoreId : 'categories',
386                                         value       : data.type ? data.type.category.id : '',
387                                         onChange    : function () {
388                                                 if (!App.DataStore.getItem('BuildSelect:vehicleCategory', false))
389                                                 {
390                                                         if (_w.tcstockview.itemData)
391                                                         {
392                                                                 _w.tcstockview.itemData.type.category.id = $('#vehicleCategory').val();
393                                                                 _w.tcstockview._listMakesModelsTypes();
394                                                         }
395                                                 }
396                                         }
397                                 },
398                                 'make' : {
399                                         type        : 'select',
400                                         id          : 'vehicleMake',
401                                         title       : 'Vehicle Make',
402                                         dataStoreId : 'makes',
403                                         value       : data.type ? data.type.model.make.id : '',
404                                         onChange    : function () {
405                                                 if (!App.DataStore.getItem('BuildSelect:vehicleMake', false))
406                                                 {
407                                                         if (_w.tcstockview.itemData)
408                                                         {
409                                                                 _w.tcstockview.itemData.type.model.make.id = $('#vehicleMake').val();
410                                                                 _w.tcstockview._listMakesModelsTypes();
411                                                         }
412                                                 }
413                                         }
414                                 },
415                                 'model' : {
416                                         type        : 'select',
417                                         id          : 'vehicleModel',
418                                         title       : 'Vehicle Model',
419                                         dataStoreId : 'models',
420                                         value       : data.type ? data.type.model.id : '',
421                                         onChange    : function () {
422                                                 if (!App.DataStore.getItem('BuildSelect:vehicleModel', false))
423                                                 {
424                                                         if (_w.tcstockview.itemData)
425                                                         {
426                                                                 _w.tcstockview.itemData.type.model.id = $('#vehicleModel').val();
427                                                                 _w.tcstockview._listMakesModelsTypes();
428                                                         }
429                                                 }
430                                         }
431                                 },
432                                 'type' : {
433                                         type        : 'select',
434                                         id          : 'vehicleType',
435                                         title       : 'Vehicle Type',
436                                         dataStoreId : 'types',
437                                         value       : data.type ? data.type.id : '',
438                                         onChange    : function () {
439                                                 if ('' != $(this).val() && null != $(this).val())
440                                                 {
441                                                         App.API.getTask(
442                                                                         'GetMmCode' + $(this).val(), 'Stock', 'Type.GetMmCode', null,
443                                                                         {id:$(this).val()}, function(response){
444                                                                                 $('#mmCode').html(response.Data.mmCode);
445                                                                         }, _w.taskContractError
446                                                         );
447                                                 }
448                                                 else
449                                                 {
450                                                         $('#mmCode').html('');
451                                                 }
452                                                 if (!App.DataStore.getItem('BuildSelect:vehicleType', false)
453                                                         && $('#vehicleYear').val()
454                                                         && $('#vehicleType').val())
455                                                 {
456                                                         App.API.getTask(
457                                                                         'TransUnionFromMmCode', 'Stock', 'Utility.TransUnionFromMmCode', null,
458                                                                         {}, _w.tcstockview._onTuReady, _w.taskContractError
459                                                         );
460                                                 }
461                                         }
462                                 },
463                                 'mmCode' : {
464                                         type        : 'input',
465                                         id          : 'mmCode',
466                                         title       : 'MM Code',
467                                         style           : 'disable',
468                                         setAttrib       : 'readonly',
469                                         value       : data.type ? data.type.mmCode : ''
470                                 },
471                                 'stockNumber' : {
472                                         type            : 'input',
473                                         id              : 'stockNumber',
474                                         title           : 'Stock number',
475                                         value           : data.stockNumber ? data.stockNumber : ''
476                                 },
477                                 'fuelType' : {
478                                         type        : 'select',
479                                         id          : 'vehicleFuelType',
480                                         title       : 'Fuel Type',
481                                         dataStoreId : 'fuelTypes',
482                                         value       : data.fuelType ? data.fuelType : ''
483                                 },
484                                 'transmissionType' : {
485                                         type        : 'select',
486                                         id          : 'vehicleTransmissionType',
487                                         title       : 'Transmission Type',
488                                         dataStoreId : 'transmissionTypes',
489                                         value       : data.transmissionType ? data.transmissionType : ''
490                                 },
491                                 'condition' : {
492                                         type        : 'select',
493                                         id          : 'vehicleCondition',
494                                         title       : 'Condition',
495                                         dataStoreId : 'conditions',
496                                         value       : data.condition ? data.condition : ''
497                                 },
498                                 'exteriorColour' : {
499                                         type        : 'select',
500                                         id          : 'exteriorColour',
501                                         title       : 'Main ext. colour',
502                                         dataStoreId : 'exteriorColours',
503                                         value       : data.exteriorColour ? data.exteriorColour : ''
504                                 },
505                                 'interiorColour' : {
506                                         type  : 'select',
507                                         id    : 'interiorColour',
508                                         title : 'Main int. colour',
509                                         dataStoreId : 'interiorColours',
510                                         value : data.interiorColour ? data.interiorColour : ''
511                                 },
512                                 'upholstery' : {
513                                         type        : 'select',
514                                         id          : 'vehicleUpholstery',
515                                         title       : 'Upholstery',
516                                         dataStoreId : 'upholsteries',
517                                         value       : data.upholstery ? data.upholstery : ''
518                                 },
519                                 'papers' : {
520                                         type        : 'select',
521                                         id          : 'vehiclePapers',
522                                         title       : 'Papers',
523                                         dataStoreId : 'papers',
524                                         value       : data.papers ? data.papers : ''
525                                 },
526                                 'natis' : {
527                                         type        : 'select',
528                                         id          : 'vehicleNatis',
529                                         title       : 'Natis',
530                                         dataStoreId : 'natis',
531                                         value       : data.natis ? data.natis : ''
532                                 },
533                                 'spareKeys' : {
534                                         type        : 'select',
535                                         id          : 'spareKeys',
536                                         title       : 'Spare keys',
537                                         dataStoreId : 'sparekeys',
538                                         value       : undefined != data.spareKeys && null != data.spareKeys
539                                                                         ? (data.spareKeys == true ? "1" : "0")
540                                                                         : null
541                                 },
542                                 'fullServiceHistory' : {
543                                         type        : 'select',
544                                         id          : 'fullServiceHistory',
545                                         title       : 'Full service history',
546                                         dataStoreId : 'fsh',
547                                         value       : data.fullServiceHistory ? data.fullServiceHistory : ''
548                                 },
549                                 'registrationNumber' : {
550                                         type  : 'input',
551                                         id    : 'registrationNumber',
552                                         title : 'Registration no',
553                                         value : data.registrationNumber ? data.registrationNumber : ''
554                                 },
555                                 'vinNumber' : {
556                                         type  : 'input',
557                                         id    : 'vinNumber',
558                                         title : 'Vin no',
559                                         value : data.vinNumber ? data.vinNumber : ''
560                                 },
561                                 'engineNumber' : {
562                                         type  : 'input',
563                                         id    : 'engineNumber',
564                                         title : 'Eng. no',
565                                         value : data.engineNumber ? data.engineNumber : ''
566                                 },
567                                 'km' : {
568                                         type  : 'input',
569                                         id    : 'km',
570                                         title : 'Kms',
571                                         value : data.km ? data.km : ''
572                                 },
573                                 'fshNotes' : {
574                                         type  : 'textarea-small',
575                                         id    : 'fshNotes',
576                                         title : 'FSH notes',
577                                         value : data.fshNotes ? data.fshNotes : ''
578                                 },
579                                 'damages' : {
580                                         type        : 'damageDetails',
581                                         disabled        : !App.permissions.stockUpdateDamages,
582                                         id          : 'damages',
583                                         dataStoreId : 'damages',
584                                         data        : data.damages ? data.damages : {}
585                                 },
586                                 'damageTotal' : 'R 0.00',
587                                 'damageNotes' : {
588                                         type  : 'textarea-styled',
589                                         disabled        : !App.permissions.stockUpdateDamages,
590                                         id    : 'damageNotes',
591                                         title : 'Damages comments',
592                                         style : 'damages-comments',
593                                         value : data.damageNotes ? data.damageNotes : ''
594                                 },
595                                 'coverReceived' : {
596                                         type  : 'textarea-styled',
597                                         disabled        : !App.permissions.stockUpdateCoverReceived,
598                                         id    : 'coverReceived',
599                                         title : 'Cover Received',
600                                         style : 'cover-received',
601                                         value : data.coverReceived ? data.coverReceived : ''
602                                 },
603                 'previousRepairsNoted': {
604                     type: 'checkbox',
605                     id: 'previousRepairsNoted',
606                     title: 'Previous repairs',
607                     style: 'damages-comments',
608                     value: data.previousRepairsNoted ? data.previousRepairsNoted : false
609                 },
610                                 'previousRepairsNotes' : {
611                                         type  : 'textarea-styled',
612                                         disabled        : !App.permissions.stockUpdateDamages,
613                                         id    : 'previousRepairsNotes',
614                                         title : 'Previous repairs noted',
615                                         style : 'damages-comments',
616                                         value : data.previousRepairsNotes ? data.previousRepairsNotes : ''
617                                 },
618                                 'accessories' : {
619                                         type        : 'checkGroup',
620                                         id          : 'accessories',
621                                         dataStoreId : 'accessories',
622                                         itemName    : 'accessory',
623                                         data        : data.accessories ? data.accessories : {}
624                                 },
625                                 'accessoryNotes' : {
626                                         type      : 'textarea-styled',
627                                         id        : 'accessoryNotes',
628                                         title     : 'Comments',
629                                         style     : 'comment',
630                                         areaStyle : 'comment-text-box',
631                                         value     : data.accessoryNotes ? data.accessoryNotes : ''
632                                 },
633                                 'mainImage' : {
634                                         type  : 'image',
635                                         id    : 'mainImage',
636                                         baseImage : 'main_img_car.jpg',
637                                         view  : !App.permissions.stockUploadPhotos,
638                                         value : data.mainImage ? data.mainImage : ''
639                                 },
640                                 'frontImage' : {
641                                         type  : 'image',
642                                         id    : 'frontImage',
643                                         baseImage : 'front_car.jpg',
644                                         view  : !App.permissions.stockUploadPhotos,
645                                         value : data.frontImage ? data.frontImage : ''
646                                 },
647                                 'leftImage' : {
648                                         type  : 'image',
649                                         id    : 'leftImage',
650                                         baseImage : 'left_car.jpg',
651                                         view  : !App.permissions.stockUploadPhotos,
652                                         value : data.leftImage ? data.leftImage : ''
653                                 },
654                                 'rightImage' : {
655                                         type  : 'image',
656                                         id    : 'rightImage',
657                                         baseImage : 'right_car.jpg',
658                                         view  : !App.permissions.stockUploadPhotos,
659                                         value : data.rightImage ? data.rightImage : ''
660                                 },
661                                 'backImage' : {
662                                         type  : 'image',
663                                         id    : 'backImage',
664                                         baseImage : 'back_car.jpg',
665                                         view  : !App.permissions.stockUploadPhotos,
666                                         value : data.backImage ? data.backImage : ''
667                                 },
668                                 'interiorImage' : {
669                                         type  : 'image',
670                                         id    : 'interiorImage',
671                                         baseImage : 'interior_car.jpg',
672                                         view  : !App.permissions.stockUploadPhotos,
673                                         value : data.interiorImage ? data.interiorImage : ''
674                                 },
675                                 'engineImage' : {
676                                         type  : 'image',
677                                         id    : 'engineImage',
678                                         baseImage : 'engine_car.jpg',
679                                         view  : !App.permissions.stockUploadPhotos,
680                                         value : data.engineImage ? data.engineImage : ''
681                                 },
682                                 'natisImage' : {
683                                         type  : 'image',
684                                         id    : 'natisImage',
685                                         baseImage : 'copy_of_natis_car.jpg',
686                                         view  : !App.permissions.stockUploadPhotos,
687                                         value : data.natisImage ? data.natisImage : ''
688                                 },
689                                 'clubs' : {
690                                         type        : 'select',
691                                         id          : 'clubs',
692                                         title       : 'Select clubs',
693                                         dataStoreId : 'clubs',
694                                         multiple    : true,
695                                         value       : ''
696                                 },
697                                 'endDate' : {
698                                         type  : 'date',
699                                         id    : 'endDate',
700                                         title : 'Auction end date',
701                                         dtopt : {startDate: "+1d", endDate:"+" + App.serverConfig.auctionMaxDays + "d", daysOfWeekDisabled: [0], beforeShowDay: function(date) {
702                                                 if (date.getDay() == 6 && !App.openDays[App.Util.formatDate(date, 'yyyy-mm-dd')])
703                                                 {
704                                                         return false;
705                                                 }
706                                                 for (var i = 0; i < _w.tcstockview.dates.length; i++)
707                                                 {
708                                                         if (_w.tcstockview.dates[i] == date.toDateString())
709                                                         {
710                                                                 return false;
711                                                         }
712                                                 }
713                                                 return true;
714                                         }},
715                                         value : ''
716                                 },
717                                 'reservePrice' : {
718                                         type  : 'input',
719                                         id    : 'reservePrice',
720                                         title : 'Reserve price',
721                                         value : ''
722                                 },
723                                 'retailAmountRequired' : {
724                                         type  : 'input',
725                                         id    : 'retailAmountRequired',
726                                         title : 'Minimum retail price',
727                                         value : data.retailAmountRequired ? data.retailAmountRequired : ''
728                                 },
729                                 'print': {
730                                         constructor: 'Button',
731                                         items: {
732                                                 Export: {
733                                                         preset: 'Print',
734                                                         id: 'printStockPdf',
735                                                         handler: _w.tcstockview.printStockPdf
736                                                 }
737                                         }
738                                 },
739                 'printAuction': {
740                     constructor: 'Button',
741                     items: {
742                         Export: {
743                             preset: 'Print',
744                             id: 'printStockAuctionPdf',
745                             handler: _w.tcstockview.printStockAuctionPdf
746                         }
747                     }
748                 },
749                                 'complaint' : {
750                                         type  : 'textarea-styled',
751                                         id    : 'complaint',
752                                         title : 'Complaint',
753                                         value : '',
754                                         areaStyle : 'span12',
755                                         style : 'span10'
756                                 },
757                                 'loadedOnPriceGuide': data.loadedOnPriceGuide,
758                                 'numberOfOffers': data.numberOfOffers,
759                                 'highestOffer': 'R ' + data.highestOffer,
760                                 'timesListed': data.timesListed,
761                                 'highestBid': 'R ' + data.highestBid,
762                                 'referenceNumber': data.referenceNumber,
763                                 'jobState': data.auction
764                                 && (
765                                         data.auction.jobState == 'Undone'
766                                         || data.auction.jobState == 'Relist'
767                                 )
768                                         ? 'Relist'
769                                         : data.jobState,
770                                 'tradePrice': data.tradePrice ? 'R ' + data.tradePrice : 'R 0.00',
771                                 'retailPrice': data.retailPrice ? 'R ' + data.retailPrice : 'R 0.00',
772                 'listPrice': data.listPrice ? 'R ' + data.listPrice : 'R 0.00'
773                         };
774                 },
775
776                 printStockPdf : function()
777                 {
778                         App.API.getTask(
779                                         'printStock:' + _w.tcstockview.itemId, 'Stock', 'Pdf.Print', _w.tcstockview.itemId,
780                                         {}, function() {
781                                                 App.API.execTask(
782                                                                 'printStock:' + _w.tcstockview.itemId, {}, {},
783                                                                 function () {}, _w.taskExecError,
784                                                                 'EXPORT', true
785                                                 );
786                                         }, _w.taskContractError
787                         );
788                 },
789         printStockAuctionPdf : function()
790         {
791             App.API.getTask(
792                 'printStock:' + _w.tcstockview.itemId, 'Auction', 'Pdf.PrintPortal', _w.tcstockview.itemData.auction.id,
793                 {}, function() {
794                     App.API.execTask(
795                         'printStock:' + _w.tcstockview.itemId, {}, {},
796                         function () {}, _w.taskExecError,
797                         'EXPORT', true
798                     );
799                 }, _w.taskContractError
800             );
801         },
802                 _listMakesModelsTypes : function( callback )
803                 {
804                         if (!_w.tcstockview.itemData.vehicleYear)
805                         {
806                                 return;
807                         }
808                         if (_w.tcstockview.itemData.type
809                                         && _w.tcstockview.itemData.type.category
810                                         && _w.tcstockview.itemData.type.category.id)
811                         {
812                                 App.DataStore.loadSelectListData(
813                                                 'makes', false, 'Stock', 'Utility.ListMakes', null,
814                                                 {"Filter": {
815                                                         "category" : _w.tcstockview.itemData.type.category.id,
816                                                         "year" : _w.tcstockview.itemData.vehicleYear
817                                                         }}
818                                                 );
819                                 if (_w.tcstockview.itemData.type
820                                                 && _w.tcstockview.itemData.type.model
821                                                 && _w.tcstockview.itemData.type.model.make
822                                                 && _w.tcstockview.itemData.type.model.make.id)
823                                 {
824                                         App.DataStore.loadSelectListData(
825                                                         'models', false, 'Stock', 'Utility.ListModels', null,
826                                                         {"Filter": {
827                                                                 "make" : _w.tcstockview.itemData.type.model.make.id,
828                                                                 "category" : _w.tcstockview.itemData.type.category.id,
829                                                                 "year" : _w.tcstockview.itemData.vehicleYear
830                                                                 }}
831                                                         );
832                                         if (_w.tcstockview.itemData.type.model.id)
833                                         {
834                                                 App.DataStore.loadSelectListData(
835                                                                 'types', false, 'Stock', 'Utility.ListTypes', null,
836                                                                 {"Filter": {
837                                                                         "model" : _w.tcstockview.itemData.type.model.id,
838                                                                         "category" : _w.tcstockview.itemData.type.category.id,
839                                                                         "year" : _w.tcstockview.itemData.vehicleYear
840                                                                         }}, {}, callback
841                                                                 );
842                                         }
843                                 }
844                         }
845                 },
846
847                 _onDataAndTemplate : function ()
848                 {
849                         _w.tcstockview.relistReservePrice = _w.tcstockview.itemData.auction
850                                                                                                 && _w.tcstockview.itemData.auction.reservePrice
851                                 ? _w.tcstockview.itemData.auction.reservePrice
852                                 : '';
853                         $('#reservePrice').val(_w.tcstockview.relistReservePrice);
854                         var total = 0.00;
855                         $.each($.find('.rand-input'), function(i, input) {
856                                 total += parseFloat($(input).val());
857                         });
858                         $('#' + _w.tcstockview.ti.tid + '_damageTotal').html('R ' + total);
859                         $('#retailPrice').val(_w.tcstockview.itemData.retailPrice);
860                         $('#tradePrice').val(_w.tcstockview.itemData.tradePrice);
861             $('#listPrice').val(_w.tcstockview.itemData.listPrice);
862                         if ('Archived' == _w.tcstockview.itemData.jobState)
863                         {
864                                 true == App.permissions.stockUnarchive ? $('#btnUnarchive').show() : $('#btnUnarchive').hide();
865                         }
866                         if ('Retail' == _w.tcstockview.itemData.jobState)
867                         {
868                                 console.log('in status RETAIL');
869                                 console.log(App.permissions.stockReclaimRetail);
870                                 true == App.permissions.stockReclaimRetail ? $('#btnReclaimFromRetail').show() : $('#btnReclaimFromRetail').hide();
871                         }
872                         console.log(_w.tcstockview.itemData);
873                         if ('Sold' == _w.tcstockview.itemData.jobState
874                                 && true == _w.tcstockview.itemData.auction.Within30DaysOfEnd
875                                 && App.companyData.id == _w.tcstockview.itemData.auction.company)
876                         {
877                                 $('#btnDispute').show();
878                                 $('#btnLogDispute').click(function() {
879                                         var comp = $('#complaint').val();
880                                         if ('' == comp)
881                                         {
882                                                 alert('Please specify the complaint.');
883                                                 return;
884                                         }
885                                         var data = {
886                                                         Dispute : {
887                                                                 againstCompany : _w.tcstockview.itemData.auction.soldToCompany,
888                                                                 auction        : _w.tcstockview.itemData.auction.id,
889                                                                 complaint      : comp
890                                                         }
891                                         };
892                                         App.API.getTask(
893                                                         'createDispute', 'Dispute', 'Dispute.Create',
894                                                         null, {}, function(){
895                                                                 App.API.execTask(
896                                                                                 'createDispute', data, {},
897                                                                                 function() {
898                                                                                         alert('Dispute logged.');
899                                                                                         $('#dropDsp').slideToggle();
900                                                                                 }, function() {}
901                                                                 );
902                                                         }, _w.taskContractError
903                                                 );
904                                 });
905                         }
906
907                         /*
908                          * Permissions
909                          */
910                         if ('Trade Center' == _w.tcstockview.itemData.jobState || _w.tcstockview.newItem)
911                         {
912                                 if (true == App.permissions.stockRouteAuction)
913                                 {
914                                         $('#optSendToAction').show();
915                                 }
916                                 else
917                                 {
918                                         $('#optSendToAction').hide();
919                                 }
920                                 $('#btnSendToDealer').show();
921                                 true == App.permissions.stockUpdate ? $('#btnUpdate').show() : $('#btnUpdate').hide();
922                         }
923                         true == App.permissions.stockPrint ? $('#printStockPdf').show() : $('#printStockPdf').hide();
924                         true == App.permissions.stockB4cReport ? $('#btnB4cAccidentReport').show() : $('#btnB4cAccidentReport').hide();
925                         true == App.permissions.stockBmw ? $('#btnBwmAccidentReport').show() : $('#btnBwmAccidentReport').hide();
926
927                         if (!App.permissions.pgPage && !App.permissions.auctionPage)
928                         {
929                                 $('.pg-a-data-wrapper').hide();
930                         }
931                         if (true == App.permissions.pgPage) { $('.price-guide-info').show(); };
932                         if (true == App.permissions.auctionPage) { $('.auction-info').show(); };
933                         if (_w.tcstockview.newItem)
934                         {
935                                 $('.info-block').hide();
936                                 $('#optSendToPg').hide();
937                                 $('#printStockPdf').hide();
938                                 $('#btnArchive').hide();
939                         }
940
941             if ('Sold' == _w.tcstockview.itemData.jobState)
942             {
943                 $('.printStockPdf').addClass('hide');
944                 $('.printStockAuctionPdf').removeClass('hide');
945             }
946
947                         _w.tcstockview._setupValidation();
948                 },
949
950                 _onStockViewDataReceived : function( response )
951                 {
952                         _w.tcstockview.itemId = response.Data.id;
953                         _w.tcstockview.itemData = response.Data;
954                         _w.tcstockview._listMakesModelsTypes();
955                         _w.tcstockview.setStockViewFormMeta(response.Data);
956                         _w.tcstockview.ti.hydrate(_w.tcstockview.formMeta);
957                         if (_w.tcstockview.ti.published)
958                         {
959                                 _w.tcstockview._onDataAndTemplate();
960                         }
961                 },
962
963                 _setupValidation : function ()
964                 {
965                         App.DataStore.listen('regValidation', 'damages', function(id, damages) {
966                                 var rules = {
967                                         mainImage: "required",
968                                         vehicleYear: "required",
969                                         vehicleCategory: "required",
970                                         vehicleMake: "required",
971                                         vehicleModel: "required",
972                                         vehicleType: "required",
973                                         vehicleFuelType: "required",
974                                         vehicleTransmissionType: "required",
975                                         registrationNumber: "required",
976                                         km: { required: true, digits: true }
977                                 };
978                                 for (var i = 0; i < damages.length; i++)
979                                 {
980                                         rules['damage' + damages[i].value + 'Amount'] = {number: true};
981                                 }
982
983                                 $('#frmStockView').validate({
984                                         "rules": rules,
985                                         messages: {
986                                                 mainImage : "This field is required.",
987                                                 vehicleYear : "This field is required.",
988                                                 vehicleCategory : "This field is required.",
989                                                 vehicleMake : "This field is required.",
990                                                 vehicleModel : "This field is required.",
991                                                 vehicleType : "This field is required.",
992                                                 vehicleFuelType : "This field is required.",
993                                                 vehicleTransmissionType : "This field is required.",
994                                                 registrationNumber : "This field is required.",
995                                                 km : {required: "This field is required."}
996                                         },
997                                         invalidHandler: function(event, validator) {
998                                             var errors = validator.numberOfInvalids();
999                                             if (0 < _w.tcstockview.validations && errors)
1000                                             {
1001                                                       var message = errors == 1
1002                                                         ? 'You missed 1 field. It has been highlighted'
1003                                                         : 'You missed ' + errors + ' fields. They have been highlighted';
1004                                                       alert(message);
1005                                                 }
1006                                             _w.tcstockview.validations++;
1007                                         },
1008                                         submitHandler: function( form ) {
1009                                                 $('#btnUpdate').prop('disabled', true);
1010                                                 var data = _w.tcstockview._prepStockUpdateData();
1011                                                 if (_w.tcstockview.newItem)
1012                                                 {
1013                                                         App.API.execTask(
1014                                                                         'createStock', {"Stock":data}, {},
1015                                                                         _w.tcstockview._onStockUpdated, _w.taskExecError
1016                                                                         );
1017                                                 }
1018                                                 else
1019                                                 {
1020                                                         App.API.execTask(
1021                                                                         'updateStock:' + _w.tcstockview.itemId, {"Stock":data}, {},
1022                                                                         _w.tcstockview._onStockUpdated, _w.taskExecError
1023                                                                         );
1024                                                 }
1025                                         }
1026                                 });
1027                                 $('#btnUpdate').prop('disabled', false);
1028                                 try {
1029                                         _w.tcstockview.validations = 0;
1030                                         $('#frmStockView').valid();
1031                                 } catch(err) {}
1032                                 $('label.error').remove();
1033                                 $('.valid').removeClass('valid');
1034                         });
1035                 },
1036
1037                 _onTuReady : function ()
1038                 {
1039                         App.API.execTask(
1040                                         'TransUnionFromMmCode', {
1041                                                 Filter : {
1042                                                         vehicleYear : parseInt($('#vehicleYear').val()),
1043                                                         type : parseInt($('#vehicleType').val())
1044                                                 }
1045                                 }, {},
1046                                 _w.tcstockview._onTuReceived, function(){alert('There were no trade and retail from TransUnion');}
1047                         );
1048                 },
1049
1050                 _onTuReceived : function ( response )
1051                 {
1052                         if ('Success' != response.Data.Status)
1053                         {
1054                                 alert(response.Data.Status);
1055                                 return;
1056                         }
1057                         var vals = response.Data.VehicleDetails[0].Value;
1058       $('#retailPrice').val(vals.RetailPrice + '.00');
1059                         $('#tradePrice').val(vals.TradePrice + '.00');
1060             $('#listPrice').val(vals.ListPrice + '.00');
1061                         $('#' + _w.tcstockview.ti.tid + '_retailPrice').html('R ' + vals.RetailPrice + '.00');
1062                         $('#' + _w.tcstockview.ti.tid + '_tradePrice').html('R ' + vals.TradePrice + '.00');
1063             $('#' + _w.tcstockview.ti.tid + '_listPrice').html('R ' + vals.ListPrice + '.00');
1064                 },
1065
1066                 _prepStockUpdateData : function()
1067                 {
1068                         var data = _w.tcstockview.ti.harvest();
1069                         data.km = '' == data.km
1070                                 ? 0
1071                                 : parseInt(data.km);
1072                         var retailPrice = $('#retailPrice').val();
1073                         var tradePrice  = $('#tradePrice').val();
1074             var listPrice  = $('#listPrice').val();
1075                         var retailAmountRequired  = $('#retailAmountRequired').val();
1076                         data.retailPrice = ('' == retailPrice)
1077                                 ? 0.00
1078                                 : parseFloat(retailPrice);
1079                         data.tradePrice = ('' == tradePrice)
1080                                 ? 0.00
1081                                 : parseFloat(tradePrice);
1082             data.listPrice = ('' == listPrice)
1083                 ? 0.00
1084                 : parseFloat(listPrice);
1085                         data.retailAmountRequired = ('' == retailAmountRequired)
1086                                 ? 0.00
1087                                 : parseFloat(retailAmountRequired);
1088                         delete data.damageTotal;
1089                         if ('' == data.mainImage)
1090                         {
1091                                 delete data.mainImage;
1092                         }
1093                         if ('' == data.leftImage)
1094                         {
1095                                 delete data.leftImage;
1096                         }
1097                         if ('' == data.backImage)
1098                         {
1099                                 delete data.backImage;
1100                         }
1101                         if ('' == data.engineImage)
1102                         {
1103                                 delete data.engineImage;
1104                         }
1105                         if ('' == data.frontImage)
1106                         {
1107                                 delete data.frontImage;
1108                         }
1109                         if ('' == data.rightImage)
1110                         {
1111                                 delete data.rightImage;
1112                         }
1113                         if ('' == data.interiorImage)
1114                         {
1115                                 delete data.interiorImage;
1116                         }
1117                         if ('' == data.natisImage)
1118                         {
1119                                 delete data.natisImage;
1120                         }
1121                         delete data.clubs;
1122                         return data;
1123                 },
1124
1125                 _onStockUpdated : function( response )
1126                 {
1127                         window.location.hash = '/tcstock';
1128                 }
1129
1130         };
1131
1132 })();