4 window._w.valuationview = {
12 highestOfferId: false,
15 firstTimeCheckYear: true,
16 onValuationViewTemplateReady: function (template, event, eventData)
18 _w.valuationview.itemData = null;
19 _w.valuationview.ti = _t[template];
20 _w.valuationview.firstTimeCheck = true;
21 _w.valuationview.firstTimeCheckYear = true;
22 _w.valuationview.limited = ('limitedvaluationview' == template)
25 _w.valuationview.itemId = App.Util.getUrlParam('id');
26 if (0 == _w.valuationview.itemId || null == _w.valuationview.itemId)
28 _w.valuationview.newItem = true;
29 _w.valuationview.itemData = {stock: {}};
30 _w.valuationview.firstTimeCheck = false;
31 _w.valuationview.firstTimeCheckYear = false;
34 App.DataStore.setData('departments', [{"value": "New", "label": "New"}, {"value": "Used", "label": "Used"}]);
35 App.DataStore.setData('sparekeys', [{"value": "1", "label": "Yes"}, {"value": "0", "label": "No"}]);
36 App.DataStore.setData('yesno', [{"value": "1", "label": "Yes"}, {"value": "0", "label": "No"}]);
40 /*_w.valuationview.setValuationViewFormMeta();
41 _w.valuationview.ti.hydrate(_w.valuationview.formMeta);*/
44 onValuationViewPublished: function (template, event, eventData)
46 _w.valuationview.ti = _t[template];
47 _w.valuationview.limited = ('limitedvaluationview' == template)
50 _w.valuationview.setValuationViewFormMeta();
51 _w.valuationview.ti.hydrate(_w.valuationview.formMeta);
53 if (_w.valuationview.newItem)
55 _w.valuationview._setupValidation();
56 $('#btnSaveAsSales').show();
57 $('#btnSaveAsPending').show();
58 $('#optSendToSales').show();
59 $('#optSendToPg').show();
60 $('#btnSendToStock').show();
61 $('#btnUpdate').prop('disabled', false);
62 $('#printValuationPdf').hide();
65 //HPI Report Hide on New
66 $('#requestHPIreport').hide();
67 $('#requestHPIAccidentReport').hide();
68 $('.hpiReport').hide();
73 true == App.permissions.valuationCreateSales ? $('#sectionSelectValuator').show() : $('#sectionSelectValuator').hide();
74 true == App.permissions.valuationCreatePriceguide ? $('#optSendToPg').show() : $('#optSendToPg').hide();
75 true == App.permissions.valuationCreateComplete ? $('#optSendToSales').show() : $('#optSendToSales').hide();
76 true == App.permissions.valuationCreateNew ? $('#btnUpdate').show() : $('#btnUpdate').hide();
77 true == App.permissions.valuationCreateStock ? $('#btnSendToStock').show() : $('#btnSendToStock').hide();
78 true == App.permissions.valuationCreatePending ? $('#btnSaveAsPending').show() : $('#btnSaveAsPending').hide();
80 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_overAllowance').show() : $('#' + _w.valuationview.ti.tid + '_overAllowance').hide();
81 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_standInValue').show() : $('#' + _w.valuationview.ti.tid + '_standInValue').hide();
82 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_projectedRetail').show() : $('#' + _w.valuationview.ti.tid + '_projectedRetail').hide();
83 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_plannedMargin').show() : $('#' + _w.valuationview.ti.tid + '_plannedMargin').hide();
85 if (!App.permissions.valuationUpdateDamages)
87 $('.damages-form').hide();
91 $('.damages-form').show();
93 if (!App.permissions.valuationUpdateCoverReceived)
95 $('.cover-received-form').hide();
99 $('.cover-received-form').show();
102 if (!App.permissions.valuationUploadPhotos)
104 $('.photos-form').html(' ');
110 $('#btnRequestHPI').click(function () {
112 if ('' == $('#HPIusername').val() || '' == $('#HPIpin').val())
114 alert('Please enter a valid username and password.');
118 $('#HPIdropConfirm').slideToggle();
119 $('#HPIresponse').html('');
122 $('#btnRequestHPIAccident').click(function () {
124 if ('' == $('#HPIAccidentUsername').val() || '' == $('#HPIAccidentPin').val())
126 alert('Please enter a valid username and password.');
130 $('#HPIAccidentDropConfirm').slideToggle();
131 $('#HPIAccidentResponse').html('');
135 App.Util.updateCheckboxStyle($('#acceptHPIdisclaimer'));
136 $('#HPIbtnConfirm').click(function () {
137 if ($('#engineNumber').val() == '') {
138 alert('Please update the Vehicle Engine Number and try again');
141 if ($('#vinNumber').val() == '' && $('#registrationNumber').val() == '') {
142 alert('Please update the Vin Number or the Registration Number and and try again');
145 if (!$('#acceptHPIdisclaimer').is(':checked'))
147 alert('Please accept the conditions before sending.');
150 if (!$('#frmValuationView').valid())
154 $('#HPIbtnConfirm').prop('disabled', true);
156 var data = _w.valuationview._prepValuationUpdateData();
158 'updateValuation:' + _w.valuationview.itemId, data, {},
161 var task = _w.valuationview.limited
162 ? 'Valuation.LimitedUpdate'
163 : 'Valuation.Update';
165 'updateValuation:' + _w.valuationview.itemId, 'Valuation', task, _w.valuationview.itemId,
167 }, _w.taskContractError
169 var user = $('#HPIusername').val();
170 var pass = $('#HPIpin').val();
173 'TransUnionForHPI', 'Stock', 'Utility.TransUnionForHPI', null,
174 {'Filter': {'username': user, 'pass': pass, 'stock': _w.stock.Id}},
177 'TransUnionForHPI', {}, {},
180 $('#HPIdropConfirm').hide();
181 if ('Success' == data.Status)
183 $('#HPIresponse').html('Success on HPI Report');
184 alert('Success on HPI Report');
185 App.DataStore.loadSelectListData(
186 'tuhpi', false, 'Stock', 'Tuhpi.List', null, {
189 "stock": _w.valuationview.itemData.stock.id,
190 "company": App.companyData.id
195 var tuHpiData = App.DataStore.getData('tuhpi');
198 _w.valuationview._loadHpiReportData(tuHpiData);
200 //for (var i = 0; i < tuHpiData.length; i++)
202 // var tuHpiId = tuHpiData[i].id;
203 // var tuHpiCreated = tuHpiData[i].created;
204 // var tuHpiType = tuHpiData[i].hpi_type;
207 // $('#tuhpiDate').html(tuHpiCreated);
208 // $('#tuhpiType').html(tuHpiType);
209 // $('#downloadTuhpi').show();
210 // $('#HPIbtnConfirm').prop('disabled', true);
215 // $('#tuhpiDate').html('Not Requested Yet');
216 // $('#tuhpiType').html('Not Requested Yet');
217 // $('#downloadTuhpi').hide();
218 // $('#HPIbtnConfirm').prop('disabled', false);
225 $('#HPIresponse').html('API call to remote host failed. No data could be retrieved from remote service.');
226 $('#HPIbtnConfirm').prop('disabled', false);
228 }, function (response)
231 undefined != response.StatusReason
232 ? response.StatusReason
233 : 'API call to remote host failed. No data could be retrieved from remote service.'
235 $('#HPIbtnConfirm').prop('disabled', false);
239 , _w.taskContractError
248 App.Util.updateCheckboxStyle($('#acceptHPIAccidentDisclaimer'));
249 $('#HPIAccidentBtnConfirm').click(function () {
250 if ($('#engineNumber').val() == '') {
251 alert('Please update the Vehicle Engine Number and try again');
254 if ($('#vinNumber').val() == '' && $('#registrationNumber').val() == '') {
255 alert('Please update the Vin Number or the Registration Number and and try again');
258 if (!$('#acceptHPIAccidentDisclaimer').is(':checked'))
260 alert('Please accept the conditions before sending.');
263 if (!$('#frmValuationView').valid())
267 $('#HPIAccidentBtnConfirm').prop('disabled', true);
269 var data = _w.valuationview._prepValuationUpdateData();
271 'updateValuation:' + _w.valuationview.itemId, data, {},
274 var task = _w.valuationview.limited
275 ? 'Valuation.LimitedUpdate'
276 : 'Valuation.Update';
278 'updateValuation:' + _w.valuationview.itemId, 'Valuation', task, _w.valuationview.itemId,
280 }, _w.taskContractError
282 var user = $('#HPIAccidentUsername').val();
283 var pass = $('#HPIAccidentPin').val();
286 'TransUnionForHPIAccident', 'Stock', 'Utility.TransUnionForHPIAccident', null,
287 {'Filter': {'username': user, 'pass': pass, 'stock': _w.stock.Id}},
290 'TransUnionForHPIAccident', {}, {},
293 $('#HPIAccidentDropConfirm').hide();
294 if ('Success' == data.Status)
296 $('#HPIresponse').html('Success on HPI Report');
297 alert('Success on HPI Report');
298 App.DataStore.loadSelectListData(
299 'tuhpi', false, 'Stock', 'Tuhpi.List', null, {
302 "stock": _w.valuationview.itemData.stock.id,
303 "company": App.companyData.id
308 var tuHpiData = App.DataStore.getData('tuhpi');
310 _w.valuationview._loadHpiReportData(tuHpiData);
312 //for (var i = 0; i < tuHpiData.length; i++)
314 // var tuHpiId = tuHpiData[i].id;
315 // var tuHpiCreated = tuHpiData[i].created;
316 // var tuHpiType = tuHpiData[i].hpi_type;
319 // $('#tuhpiDate').html(tuHpiCreated);
320 // $('#tuhpiType').html(tuHpiType);
321 // $('#downloadTuhpi').show();
322 // $('#HPIAccidentBtnConfirm').prop('disabled', true);
327 // $('#tuhpiDate').html('Not Requested Yet');
328 // $('#tuhpiType').html('Not Requested Yet');
329 // $('#downloadTuhpi').hide();
330 // $('#HPIAccidentBtnConfirm').prop('disabled', false);
337 $('#HPIAccidentResponse').html('API call to remote host failed. No data could be retrieved from remote service.');
338 $('#HPIAccidentBtnConfirm').prop('disabled', false);
340 }, function (response)
343 undefined != response.StatusReason
344 ? response.StatusReason
345 : 'API call to remote host failed. No data could be retrieved from remote service.'
347 $('#HPIAccidentBtnConfirm').prop('disabled', false);
351 , _w.taskContractError
358 if (false != _w.valuationview.newItem)
360 $('#pricinghistory').hide();
366 if (false == _w.valuationview.newItem)
368 _w.valuationview.ti.hydrate({
369 'gridPricingHistoryColumnHeaders': {
370 constructor: 'GridColumnHeader',
373 id: 'gridPricingHistoryColumn_Date',
377 id: 'gridPricingHistoryColumn_Trade',
381 id: 'gridPricingHistoryColumn_totalRecon',
382 title: 'Total Recon',
385 id: 'gridPricingHistoryColumn_km',
389 id: 'gridPricingHistoryColumn_pricegOffer',
390 title: 'Priceguide Offer',
393 id: 'gridPricingHistoryColumn_auctionWinningBid',
394 title: 'Auction Winning Bid',
398 'gridPricingHistoryRowRepeater': {}
403 $('#btnUpdate').prop('disabled', true);
404 $('#btnFetchTu').click(function () {
405 if (!$('#vehicleYear').val()
406 || !$('#vehicleType').val())
408 alert('Vehicle year and type is required to fetch Trade and Retail pricing.');
411 $('#btnFetchTu').prop('disabled', true);
413 'TransUnionFromMmCode', 'Stock', 'Utility.TransUnionFromMmCode', null,
414 {}, _w.valuationview._onTuReady, _w.taskContractError
417 $('#btnSendToDealDone').click(function () {
418 var stockNo = $('#stockNumberDD').val();
419 if (null == stockNo || '' == stockNo)
421 alert('Please enter a stock number.');
424 if (!$('#frmValuationView').valid())
428 if (!$('#acceptStockDDHPIdisclaimer').is(':checked'))
430 alert('Please accept the conditions before sending.');
433 if ('' == $('#mainImage').val())
435 alert('The main image is mandatory for moving a vehicle to Deal Done.');
436 $('#img_mainImage').addClass('error');
437 $('#img_mainImage').removeClass('valid');
442 $('#img_mainImage').removeClass('error');
443 $('#img_mainImage').addClass('valid');
445 if ('' == $('#vinNumber').val())
447 alert('The VIN and Engine number is mandatory for moving a vehicle to Deal Done.');
448 $('#vinNumber').addClass('error');
449 $('#vinNumber').removeClass('valid');
454 $('#vinNumber').removeClass('error');
455 $('#vinNumber').addClass('valid');
457 if ('' == $('#engineNumber').val())
459 alert('The VIN and Engine number is mandatory for moving a vehicle to Deal Done.');
460 $('#engineNumber').addClass('error');
461 $('#engineNumber').removeClass('valid');
466 $('#engineNumber').removeClass('error');
467 $('#engineNumber').addClass('valid');
469 $('#btnUpdate').prop('disabled', true);
470 $('#btnSendToDealDone').prop('disabled', true);
471 $('#btnSendToDealNotDone').prop('disabled', true);
472 var data = _w.valuationview._prepValuationUpdateData();
474 data.Valuation.sendToStockFrom = "1";
477 'updateValuation:' + _w.valuationview.itemId, data, {},
480 'dealDoneOnValuation:' + _w.valuationview.itemId,
481 'Valuation', 'Valuation.MoveToDealDone', _w.valuationview.itemId, {},
482 _w.valuationview._onValuationUpdated, _w.taskExecError
487 $('#btnSendToDealNotDone').click(function () {
488 if (!$('#frmValuationView').valid())
493 if(7 == $('#dealNotDoneSelection').val() && '' == $('#dealNotDoneReason').val())
495 alert('Please supply a reason for marking this deal as not done.');
499 $('#btnUpdate').prop('disabled', true);
500 $('#btnSendToDealDone').prop('disabled', true);
501 $('#doSendToDealDone').prop('disabled', true);
502 $('#doSendToDealNotDone').prop('disabled', true);
503 var data = _w.valuationview._prepValuationUpdateData();
505 'updateValuation:' + _w.valuationview.itemId, data, {},
508 'dealNotDoneOnValuation:' + _w.valuationview.itemId,
509 'Valuation', 'Valuation.MoveToDealNotDone', _w.valuationview.itemId, {},
510 _w.valuationview._onValuationUpdated, _w.taskExecError
515 $('#doAcceptOffer').click(function () {
516 if (!$('#frmValuationView').valid())
520 $('#btnUpdate').prop('disabled', true);
521 $('#btnAcceptOffer').prop('disabled', true);
522 $('#btnKeepForStock').prop('disabled', true);
523 var data = _w.valuationview._prepValuationUpdateData();
525 'updateValuation:' + _w.valuationview.itemId, data, {},
528 'offerAcceptedOnValuation:' + _w.valuationview.itemId,
529 'Valuation', 'Valuation.MoveToOfferAccepted', _w.valuationview.itemId, {},
530 _w.valuationview._onValuationUpdated, _w.taskExecError
535 $('#btnKeepForStock').click(function () {
536 if (!$('#frmValuationView').valid())
540 $('#btnUpdate').prop('disabled', true);
541 $('#btnAcceptOffer').prop('disabled', true);
542 $('#btnKeepForStock').prop('disabled', true);
543 var data = _w.valuationview._prepValuationUpdateData();
545 'updateValuation:' + _w.valuationview.itemId, data, {},
548 'keepForStockOnValuation:' + _w.valuationview.itemId,
549 'Valuation', 'Valuation.MoveToKeepForStock', _w.valuationview.itemId, {},
550 _w.valuationview._onValuationUpdated, _w.taskExecError
555 $('#btnArchive').click(function () {
557 'archiveValuation:' + _w.valuationview.itemId,
558 'Valuation', 'Valuation.MoveToArchive', _w.valuationview.itemId, {},
559 _w.valuationview._onValuationUpdated, _w.taskExecError
562 $('#btnUnarchive').click(function () {
564 'unarchiveValuation:' + _w.valuationview.itemId,
565 'Valuation', 'Valuation.UnArchive', _w.valuationview.itemId, {},
566 _w.valuationview._onValuationUpdated, _w.taskExecError
569 $('#btnSaveAsPending').click(function () {
570 if (!$('#frmValuationView').valid())
574 $('#btnUpdate').prop('disabled', true);
575 $('#btnSendToSales').prop('disabled', true);
576 $('#btnSaveAsPending').prop('disabled', true);
577 $('#doSendToStock').prop('disabled', true);
578 $('#btnSendToPg').prop('disabled', true);
579 if (_w.valuationview.newItem)
581 _w.valuationview._updatePrice(function () {
582 var data = _w.valuationview._prepValuationUpdateData();
584 'createValuationPending', 'Valuation', 'Valuation.CreatePending',
585 null, {}, $.proxy(function (data) {
587 'createValuationPending', data, {},
588 _w.valuationview._onValuationUpdated, _w.taskExecError
590 }, this, data), _w.taskContractError
596 _w.valuationview._routeToPending();
599 $('#btnSaveAsSales').click(function () {
600 var valuators = $('#valuators').val();
601 if (null == valuators)
603 alert('Please select at least one valuator.');
606 if (!$('#frmValuationView').valid())
611 $('#btnSaveAsSales').prop('disabled', true);
612 $('#btnUpdate').prop('disabled', true);
613 $('#btnSendToSales').prop('disabled', true);
614 $('#btnSaveAsPending').prop('disabled', true);
615 $('#doSendToStock').prop('disabled', true);
616 $('#btnSendToPg').prop('disabled', true);
617 if (_w.valuationview.newItem)
619 _w.valuationview._updatePrice(function () {
620 var data = _w.valuationview._prepValuationUpdateData();
621 var valuators = $('#valuators').val();
622 data.Valuation.valuators = [];
623 for (var i = 0; i < valuators.length; i++)
625 data.Valuation.valuators.push({id: valuators[i]});
628 'createValuationNew', 'Valuation', 'Valuation.CreateNew',
629 null, {}, $.proxy(function (data) {
631 'createValuationNew', data, {},
632 _w.valuationview._onValuationUpdated, _w.taskExecError
634 }, this, data), _w.taskContractError
640 var data = _w.valuationview._prepValuationUpdateData();
641 var valuators = $('#valuators').val();
642 data.Valuation.valuators = [];
643 for (var i = 0; i < valuators.length; i++)
645 data.Valuation.valuators.push({id: valuators[i]});
648 'updateValuation:' + _w.valuationview.itemId, data, {},
649 _w.valuationview._onValuationUpdated, _w.taskExecError
653 $('#btnSendToSales').click(function () {
654 var profile = $('#salesProfile').val();
655 var amount = $('#salesAmountOffered').val();
656 if (null == profile || '' == amount)
658 alert('Please select Sales person and enter an Amount.');
661 if (!$('#frmValuationView').valid())
665 $('#btnUpdate').prop('disabled', true);
666 $('#btnSendToSales').prop('disabled', true);
667 $('#btnSaveAsPending').prop('disabled', true);
668 $('#doSendToStock').prop('disabled', true);
669 $('#btnSendToPg').prop('disabled', true);
670 if (_w.valuationview.newItem)
672 _w.valuationview._updatePrice(function () {
673 var data = _w.valuationview._prepValuationUpdateData();
674 data.Valuation.amountOffered = amount;
676 'createValuationComplete', 'Valuation', 'Valuation.CreateComplete',
677 null, {}, $.proxy(function (data) {
679 'createValuationComplete', data, {},
680 _w.valuationview._onValuationUpdated, _w.taskExecError
682 }, this, data), _w.taskContractError
688 if ('Price Guide' == _w.valuationview.itemData.jobState)
691 'sendToSalesFull:' + _w.valuationview.itemId, 'Valuation', 'Valuation.SendToSalesFull', _w.valuationview.itemId,
693 var data = _w.valuationview._prepValuationUpdateData();
694 data.Valuation.amountOffered = $('#salesAmountOffered').val();
696 'sendToSalesFull:' + _w.valuationview.itemId, data, {},
697 _w.valuationview._onValuationUpdated, _w.taskExecError
699 }, _w.taskContractError
704 _w.valuationview._routeToComplete();
709 $('#btnSendToCustomer').click(function () {
710 var amount = $('#customerAmountOffered').val();
713 alert('Please enter an Amount.');
716 if (!$('#frmValuationView').valid())
720 $('#btnUpdate').prop('disabled', true);
721 $('#btnSendToSales').prop('disabled', true);
722 $('#btnSaveAsPending').prop('disabled', true);
723 $('#doSendToStock').prop('disabled', true);
724 $('#btnSendToPg').prop('disabled', true);
725 if (_w.valuationview.newItem)
728 _w.valuationview._updatePrice(function () {
729 var data = _w.valuationview._prepValuationUpdateData();
730 data.Valuation.amountOffered = amount;
732 'createCustomerValuationComplete', 'Valuation', 'Valuation.CreateCompleteSendToCustomer',
733 null, {}, $.proxy(function (data) {
735 'createCustomerValuationComplete', data, {},
736 _w.valuationview._onValuationUpdated, _w.taskExecError
738 }, this, data), _w.taskContractError
744 if ('Price Guide' == _w.valuationview.itemData.jobState)
747 'sendToCustomerFull:' + _w.valuationview.itemId, 'Valuation', 'Valuation.SendToCustomerFull', _w.valuationview.itemId,
749 var data = _w.valuationview._prepValuationUpdateData();
750 data.Valuation.amountOffered = $('#salesAmountOffered').val();
752 'sendToCustomerFull:' + _w.valuationview.itemId, data, {},
753 _w.valuationview._onValuationUpdated, _w.taskExecError
755 }, _w.taskContractError
760 _w.valuationview._routeToCompleteCustomer();
766 App.Util.updateCheckboxStyle($('#acceptStockHPIdisclaimer'));
767 App.Util.updateCheckboxStyle($('#acceptStockDDHPIdisclaimer'));
768 $('#doSendToStock').click(function () {
769 var stockNo = $('#stockNumber').val();
770 if (null == stockNo || '' == stockNo)
772 alert('Please enter a stock number.');
775 if (!$('#frmValuationView').valid())
779 if (!$('#acceptStockHPIdisclaimer').is(':checked'))
781 alert('Please accept the conditions before sending.');
785 if ('' == $('#mainImage').val())
787 alert('The main image is mandatory for moving a vehicle to stock.');
788 $('#img_mainImage').addClass('error');
789 $('#img_mainImage').removeClass('valid');
794 $('#img_mainImage').removeClass('error');
795 $('#img_mainImage').addClass('valid');
797 if ('' == $('#registrationNumber').val())
799 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to stock.');
800 $('#registrationNumber').addClass('error');
801 $('#registrationNumber').removeClass('valid');
806 $('#registrationNumber').removeClass('error');
807 $('#registrationNumber').addClass('valid');
809 if ('' == $('#vinNumber').val())
811 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to stock.');
812 $('#vinNumber').addClass('error');
813 $('#vinNumber').removeClass('valid');
818 $('#vinNumber').removeClass('error');
819 $('#vinNumber').addClass('valid');
821 if ('' == $('#engineNumber').val())
823 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to stock.');
824 $('#engineNumber').addClass('error');
825 $('#engineNumber').removeClass('valid');
830 $('#engineNumber').removeClass('error');
831 $('#engineNumber').addClass('valid');
833 $('#btnUpdate').prop('disabled', true);
834 $('#btnSendToSales').prop('disabled', true);
835 $('#btnSaveAsPending').prop('disabled', true);
836 $('#doSendToStock').prop('disabled', true);
837 $('#btnSendToPg').prop('disabled', true);
839 if (_w.valuationview.newItem)
841 _w.valuationview._updatePrice(function () {
842 var data = _w.valuationview._prepValuationUpdateData();
844 data.Valuation.sendToStockFrom = "2";
847 'createValuationStock', 'Valuation', 'Valuation.CreateStock',
848 null, {}, $.proxy(function (data) {
850 'createValuationStock', data, {},
851 _w.valuationview._onValuationUpdated, _w.taskExecError
853 }, this, data), _w.taskContractError
861 var data = _w.valuationview._prepValuationUpdateData();
862 data.Valuation.sendToStockFrom = "2";
865 'updateValuation:' + _w.valuationview.itemId, data, {},
868 _w.valuationview._routeToStock();
870 //App.API.directRoute(
871 // 'sendToStockValuation:' + _w.valuationview.itemId,
872 // 'Valuation', 'Valuation.SendToStock', _w.valuationview.itemId, {},
873 // _w.valuationview._onValuationUpdated, _w.taskExecError
879 // 'updateValuation:' + _w.valuationview.itemId, data, {},
880 // _w.valuationview._onValuationUpdated, _w.taskExecError
883 //_w.valuationview._routeToStock();
886 App.Util.updateCheckboxStyle($('#acceptPgHPIdisclaimer'));
887 $('#btnSendToPg').click(function () {
888 var clubs = $('#clubs').val();
891 alert('Please select at least one club.');
894 if (!$('#acceptPgHPIdisclaimer').is(':checked'))
896 alert('Please accept the conditions before sending.');
899 if ('' == $('#registrationNumber').val())
901 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
902 $('#registrationNumber').addClass('error');
903 $('#registrationNumber').removeClass('valid');
908 $('#registrationNumber').removeClass('error');
909 $('#registrationNumber').addClass('valid');
911 if ('' == $('#vinNumber').val())
913 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
914 $('#vinNumber').addClass('error');
915 $('#vinNumber').removeClass('valid');
920 $('#vinNumber').removeClass('error');
921 $('#vinNumber').addClass('valid');
923 if ('' == $('#engineNumber').val())
925 alert('The Registration, VIN and Engine number is mandatory for moving a vehicle to price guide.');
926 $('#engineNumber').addClass('error');
927 $('#engineNumber').removeClass('valid');
932 $('#engineNumber').removeClass('error');
933 $('#engineNumber').addClass('valid');
935 if (!$('#frmValuationView').valid())
939 $('#btnUpdate').prop('disabled', true);
940 $('#btnSendToSales').prop('disabled', true);
941 $('#btnSaveAsPending').prop('disabled', true);
942 $('#doSendToStock').prop('disabled', true);
943 $('#btnSendToPg').prop('disabled', true);
944 if (_w.valuationview.newItem)
946 _w.valuationview._updatePrice(function () {
947 var data = _w.valuationview._prepValuationUpdateData();
948 data.Context = {clubs: []};
949 var clubList = $('#clubs').val();
950 for (var i = 0; i < clubList.length; i++)
952 data.Context.clubs.push({id: clubList[i]});
955 'createValuationPriceGuide', 'Valuation', 'Valuation.CreatePriceGuide',
956 null, {}, $.proxy(function (data) {
958 'createValuationPriceGuide', data, {},
959 _w.valuationview._onValuationUpdated, _w.taskExecError
961 }, this, data), _w.taskContractError
967 _w.valuationview._routeToPg();
971 $('.back-btn').on('click', function () {
972 window.history.back();
975 _w.valuationview.itemId = App.Util.getUrlParam('id');
976 if (0 == _w.valuationview.itemId || null == _w.valuationview.itemId)
978 _w.valuationview.newItem = true;
979 _w.valuationview.itemData = {stock: {}};
981 App.DataStore.loadSelectListData(
982 'years', false, 'Stock', 'Year.SelectList', null,
985 App.DataStore.loadSelectListData(
986 'categories', false, 'Stock', 'Category.SelectList', null,
990 App.DataStore.loadSelectListData(
991 'fuelTypes', false, 'Stock', 'FuelType.SelectList', null,
994 App.DataStore.loadSelectListData(
995 'transmissionTypes', false, 'Stock', 'TransmissionType.SelectList', null,
998 App.DataStore.loadSelectListData(
999 'damages', false, 'Stock', 'Damage.SelectList', null,
1002 App.DataStore.loadSelectListData(
1003 'accessories', false, 'Stock', 'Accessory.SelectList', null,
1007 App.DataStore.loadSelectListGroup([
1008 //{dataId: 'years', isStatic: true, workspace: 'Stock', task: 'Year.SelectList'},
1009 //{dataId: 'categories', isStatic: true, workspace: 'Stock', task: 'Category.SelectList'},
1010 {dataId: 'conditions', isStatic: true, workspace: 'Stock', task: 'Condition.SelectList'},
1011 {dataId: 'exteriorColours', isStatic: true, workspace: 'Stock', task: 'ExteriorColour.SelectList'},
1012 {dataId: 'interiorColours', isStatic: true, workspace: 'Stock', task: 'InteriorColour.SelectList'},
1013 {dataId: 'upholsteries', isStatic: true, workspace: 'Stock', task: 'Upholstery.SelectList'},
1014 {dataId: 'papers', isStatic: true, workspace: 'Stock', task: 'Paper.SelectList'},
1015 {dataId: 'natis', isStatic: true, workspace: 'Stock', task: 'Natis.SelectList'},
1016 {dataId: 'fsh', isStatic: true, workspace: 'Stock', task: 'FullServiceHistory.SelectList'},
1017 //{dataId: 'fuelTypes', isStatic: true, workspace: 'Stock', task: 'FuelType.SelectList'},
1018 //{dataId: 'transmissionTypes', isStatic: true, workspace: 'Stock', task: 'TransmissionType.SelectList'},
1019 //{dataId: 'damages', isStatic: true, workspace: 'Stock', task: 'Damage.SelectList'},
1020 //{dataId: 'accessories', isStatic: true, workspace: 'Stock', task: 'Accessory.SelectList'},
1021 {dataId: 'clubs', isStatic: true, workspace: 'PriceGuide', task: 'Club.SelectList'},
1022 {dataId: 'valuators', isStatic: true, workspace: 'User', task: 'Profile.ValuatorList'},
1023 //{dataId: 'sales', isStatic: true, workspace: 'User', task: 'Profile.SalesList'},
1024 {dataId: 'regions', isStatic: true, workspace: 'Location', task: 'Region.SelectList'},
1026 App.DataStore.loadSelectListData(
1027 'sales', false, 'User', 'Profile.SalesList', null, {}
1029 App.DataStore.loadSelectListData(
1030 'dealNotDoneSelections', false, 'Valuation', 'Valuation.DealNotDoneSelection', null,
1038 _w.valuationview.newItem = false;
1039 var task = _w.valuationview.limited
1040 ? 'Valuation.LimitedUpdate'
1041 : 'Valuation.Update';
1043 'updateValuation:' + _w.valuationview.itemId, 'Valuation', task, _w.valuationview.itemId,
1044 {}, $.proxy(_w.valuationview._onValuationViewDataReceived, _w.valuationview), _w.taskContractError
1046 setTimeout(function () {
1047 if (null == _w.valuationview.itemData)
1049 var task = _w.valuationview.limited
1050 ? 'Valuation.LimitedUpdate'
1051 : 'Valuation.Update';
1053 'updateValuation:' + _w.valuationview.itemId, 'Valuation', task, _w.valuationview.itemId,
1054 {}, $.proxy(_w.valuationview._onValuationViewDataReceived, _w.valuationview), _w.taskContractError
1058 App.DataStore.loadSelectListData(
1059 'dealNotDoneSelections', false, 'Valuation', 'Valuation.DealNotDoneSelection', null,
1064 loadHistoricalGrid: function (contract, data, options)
1066 if (_w.valuationview.itemData != null)
1068 if (null != App.API.taskContract('gridStockHistory'))
1071 'gridStockHistory', {Grid: {Filter: {"PricingHistory.stockId": _w.valuationview.itemData.stock.id}}}, options,
1072 _w.valuationview._onHistoryGridDataReceived, function () {
1078 _onHistoryGridDataReceived: function (response)
1080 _w.valuationview.gridStatus = 'Active';
1081 _w.valuationview.ti.hydrateParam('gridPricingHistoryRowRepeater', {});
1084 if (_w.valuationview.itemData == null || response.Data.DataSet == undefined || response.Data.DataSet.length == 0 )
1086 $('#pricing_history_none_found').show();
1087 $('#PHColumnHeaders').hide();
1091 $('#pricing_history_none_found').hide();
1092 $('#PHColumnHeaders').show();
1095 if(response.Data.DataSet != undefined)
1097 for (var i = 0; i < response.Data.DataSet.length; i++)
1099 var row = response.Data.DataSet[i];
1105 PriceguideOffer: 'R ',
1106 AuctionWinningBid: 'R '
1113 PriceguideOffer: '',
1114 AuctionWinningBid: '',
1119 'TotalRecon': row.totalRecon,
1121 'PriceguideOffer': row.pricegOffer,
1122 'AuctionWinningBid': row.auctionWinningBid,
1127 _w.valuationview.ti.hydrateParam('gridPricingHistoryRowRepeater', {
1128 constructor: 'GridDataRow',
1131 response.Data.Meta.bind = _w.valuationview.pageStockGrid;
1136 _routeToPg: function ()
1139 'sendToPg:' + _w.valuationview.itemId, 'Valuation', 'Valuation.SendToPriceGuide', _w.valuationview.itemId,
1141 var data = _w.valuationview._prepValuationUpdateData();
1142 data.Context = {clubs: []};
1143 var clubList = $('#clubs').val();
1144 for (var i = 0; i < clubList.length; i++)
1146 data.Context.clubs.push({id: clubList[i]});
1149 'sendToPg:' + _w.valuationview.itemId, data, {},
1150 _w.valuationview._onValuationUpdated, _w.taskExecError
1152 }, _w.taskContractError
1155 _routeToPending: function ()
1158 'sendToPending:' + _w.valuationview.itemId, 'Valuation', 'Valuation.MoveToPending', _w.valuationview.itemId,
1160 var data = _w.valuationview._prepValuationUpdateData();
1162 'sendToPending:' + _w.valuationview.itemId, data, {},
1163 _w.valuationview._onValuationUpdated, _w.taskExecError
1165 }, _w.taskContractError
1168 _routeToComplete: function ()
1171 'sendToComplete:' + _w.valuationview.itemId, 'Valuation', 'Valuation.MoveToComplete', _w.valuationview.itemId,
1173 var data = _w.valuationview._prepValuationUpdateData();
1176 //if('' != $('#customerAmountOffered').val() && 0 == $('#salesAmountOffered').val())
1178 // data.Valuation.amountOffered = $('#customerAmountOffered').val();
1180 //if('' != $('#salesAmountOffered').val() && 0 == $('#customerAmountOffered').val())
1182 // data.Valuation.amountOffered = $('#salesAmountOffered').val();
1185 if(0 != $('#customerAmountOffered').val() && 0 == $('#salesAmountOffered').val())
1187 data.Valuation.amountOffered = $('#customerAmountOffered').val();
1191 data.Valuation.amountOffered = $('#salesAmountOffered').val();
1194 //data.Valuation.amountOffered = $('#salesAmountOffered').val();
1196 'sendToComplete:' + _w.valuationview.itemId, data, {},
1197 _w.valuationview._onValuationUpdated, _w.taskExecError
1199 }, _w.taskContractError
1203 _routeToCompleteCustomer: function ()
1206 'sendToCompleteCustomer:' + _w.valuationview.itemId, 'Valuation', 'Valuation.MoveToCustomerComplete', _w.valuationview.itemId,
1208 var data = _w.valuationview._prepValuationUpdateData();
1211 //if(0 != $('#customerAmountOffered').val() && 0 == $('#salesAmountOffered').val())
1213 // data.Valuation.amountOffered = $('#customerAmountOffered').val();
1215 //if(0 != $('#salesAmountOffered').val() && 0 == $('#customerAmountOffered').val())
1217 // data.Valuation.amountOffered = $('#salesAmountOffered').val();
1220 if(0 != $('#customerAmountOffered').val() && 0 == $('#salesAmountOffered').val())
1222 data.Valuation.amountOffered = $('#customerAmountOffered').val();
1226 data.Valuation.amountOffered = $('#salesAmountOffered').val();
1229 //data.Valuation.amountOffered = $('#salesAmountOffered').val();
1231 'sendToCompleteCustomer:' + _w.valuationview.itemId, data, {},
1232 _w.valuationview._onValuationUpdated, _w.taskExecError
1234 }, _w.taskContractError
1237 _routeToStock: function ()
1240 'sendToStock:' + _w.valuationview.itemId, 'Valuation', 'Valuation.SendToStock', _w.valuationview.itemId,
1242 var data = _w.valuationview._prepValuationUpdateData();
1245 'sendToStock:' + _w.valuationview.itemId, data, {},
1246 _w.valuationview._onValuationUpdated, _w.taskExecError
1248 }, _w.taskContractError
1251 setValuationViewFormMeta: function (data)
1255 var newtitle = 'Amount offered';
1258 if ('Dealership Sales' == App.permissions.name)
1260 newtitle = "Manager's offer";
1263 if (undefined != data && undefined != data.stock)
1266 //console.log("data.stock.id", data.stock.id);
1268 _w.stock.Id = data.stock.id;
1270 for (var i = 0; i < data.stock.damages.length; i++)
1272 damages['d' + data.stock.damages[i].damage] = data.stock.damages[i].amount;
1277 data = {"stock": {}};
1280 _w.valuationview.formMeta = {
1285 dataStoreId: 'years',
1286 value: data.stock.vehicleYear ? data.stock.vehicleYear : '',
1287 onChange: function () {
1288 if (_w.valuationview.firstTimeCheckYear != true) {
1289 _w.valuationview._listMakesModelsTypes(false, function () {
1293 _w.valuationview.firstTimeCheckYear = false;
1298 id: 'vehicleCategory',
1300 dataStoreId: 'categories',
1301 value: data.stock.type ? data.stock.type.category.id : '',
1302 onChange: function () {
1303 if ($(this).val() == 8) {
1304 $('#retailPrice').val('');
1305 $('#tradePrice').val('');
1306 $('#listPrice').val('');
1307 _w.valuationview.ti.hydrateParam('infRetailPrice', 'R ' + +'.00');
1308 _w.valuationview.ti.hydrateParam('infTradePrice', 'R ' + +'.00');
1309 _w.valuationview.ti.hydrateParam('infListPrice', 'R ' + +'.00');
1313 if ($(this).val() == 8 && _w.valuationview.itemId == 0) {
1314 $('#mmCode').html("Other");
1316 if (!App.DataStore.getItem('BuildSelect:vehicleCategory', false)) {
1317 if (_w.valuationview.itemData) {
1320 //_w.valuationview.itemData.stock.type.category.id = $('#vehicleCategory').val();
1321 if (undefined != _w.valuationview.itemData.stock && undefined != _w.valuationview.itemData.stock.type && undefined != _w.valuationview.itemData.stock.type.category) {
1322 _w.valuationview.itemData.stock.type.category.id = $('#vehicleCategory').val();
1324 _w.valuationview._listMakesModelsTypes();
1327 $('#' + _w.valuationview.ti.tid + '_makeManual').hide();
1328 $('#' + _w.valuationview.ti.tid + '_modelManual').hide();
1329 $('#' + _w.valuationview.ti.tid + '_typeManual').hide();
1330 $('#makeManual').val('');
1331 $('#modelManual').val('');
1332 $('#typeManual').val('');
1333 $('#' + _w.valuationview.ti.tid + '_make').show();
1334 $('#' + _w.valuationview.ti.tid + '_model').show();
1335 $('#' + _w.valuationview.ti.tid + '_type').show();
1341 title: 'Vehicle Make',
1342 dataStoreId: 'makes',
1343 value: data.stock.type ? data.stock.type.model.make.id : '',
1344 onChange: function () {
1345 if (!App.DataStore.getItem('BuildSelect:vehicleMake', false)) {
1347 $('#vehicleMakeManual').val('');
1348 $('#vehicleModelManual').val('');
1349 $('#vehicleTypeManual').val('');
1350 if (-1 == $('#vehicleMake').val()) {
1351 $('#' + _w.valuationview.ti.tid + '_make').hide();
1352 $('#' + _w.valuationview.ti.tid + '_model').hide();
1353 $('#' + _w.valuationview.ti.tid + '_type').hide();
1354 $('#' + _w.valuationview.ti.tid + '_makeManual').show();
1355 $('#' + _w.valuationview.ti.tid + '_modelManual').show();
1356 $('#' + _w.valuationview.ti.tid + '_typeManual').show();
1357 //$('#makeManual').val(''); vehicleMakeManual
1358 //$('#modelManual').val('');
1359 //$('#typeManual').val('');
1362 $('#' + _w.valuationview.ti.tid + '_makeManual').hide();
1363 $('#' + _w.valuationview.ti.tid + '_modelManual').hide();
1364 $('#' + _w.valuationview.ti.tid + '_typeManual').hide();
1365 $('#' + _w.valuationview.ti.tid + '_make').show();
1366 $('#' + _w.valuationview.ti.tid + '_model').show();
1367 $('#' + _w.valuationview.ti.tid + '_type').show();
1368 if (_w.valuationview.itemData) {
1371 if (undefined != _w.valuationview.itemData.stock && undefined != _w.valuationview.itemData.stock.type && undefined != _w.valuationview.itemData.stock.type.model) {
1372 //console.log("_w.valuationview.itemData", _w.valuationview.itemData);
1373 _w.valuationview.itemData.stock.type.model.make.id = $('#vehicleMake').val();
1376 _w.valuationview._listMakesModelsTypes();
1386 title: 'Vehicle Model',
1387 dataStoreId: 'models',
1388 value: data.stock.type ? data.stock.type.model.id : '',
1389 onChange: function () {
1390 if (!App.DataStore.getItem('BuildSelect:vehicleModel', false)) {
1392 $('#vehicleModelManual').val('');
1393 $('#vehicleTypeManual').val('');
1394 if (-1 == $('#vehicleModel').val()) {
1395 $('#' + _w.valuationview.ti.tid + '_model').hide();
1396 $('#' + _w.valuationview.ti.tid + '_type').hide();
1397 $('#' + _w.valuationview.ti.tid + '_modelManual').show();
1398 $('#' + _w.valuationview.ti.tid + '_typeManual').show();
1401 $('#' + _w.valuationview.ti.tid + '_modelManual').hide();
1402 $('#' + _w.valuationview.ti.tid + '_typeManual').hide();
1403 $('#' + _w.valuationview.ti.tid + '_model').show();
1404 $('#' + _w.valuationview.ti.tid + '_type').show();
1406 if (_w.valuationview.itemData) {
1407 if (undefined != _w.valuationview.itemData.stock && undefined != _w.valuationview.itemData.stock.type && undefined != _w.valuationview.itemData.stock.type.model) {
1408 _w.valuationview.itemData.stock.type.model.id = $('#vehicleModel').val();
1410 _w.valuationview._listMakesModelsTypes();
1419 title: 'Vehicle Type',
1420 dataStoreId: 'types',
1421 value: data.stock.type ? data.stock.type.id : '',
1422 onChange: function (data) {
1424 $('#vehicleTypeManual').val('');
1425 if (-1 == $('#vehicleType').val()) {
1426 $('#' + _w.valuationview.ti.tid + '_type').hide();
1427 $('#' + _w.valuationview.ti.tid + '_typeManual').show();
1430 $('#' + _w.valuationview.ti.tid + '_typeManual').hide();
1431 $('#' + _w.valuationview.ti.tid + '_type').show();
1434 if (_w.valuationview.firstTimeCheck != true) {
1435 if (_w.valuationview.newItem) {
1436 _w.valuationview._updatePrice(null, false);
1439 _w.valuationview._updatePrice();
1443 _w.valuationview.firstTimeCheck = false;
1453 id: 'vehicleMakeManual',
1454 title: 'Vehicle Make',
1455 //dataStoreId : 'makes',
1456 value: data.stock.type ? data.stock.type.model.make.id : '',
1460 id: 'vehicleModelManual',
1461 title: 'Vehicle Model',
1462 //dataStoreId : 'models',
1463 value: data.stock.type ? data.stock.type.model.id : '',
1467 id: 'vehicleTypeManual',
1468 title: 'Vehicle Type',
1469 //dataStoreId : 'types',
1470 value: data.stock.type ? data.stock.type.id : '',
1477 setAttrib: 'readonly',
1478 value: data.stock.type ? data.stock.type.mmCode : ''
1482 id: 'vehicleFuelType',
1484 dataStoreId: 'fuelTypes',
1485 value: data.stock.fuelType ? data.stock.fuelType : ''
1487 'transmissionType': {
1489 id: 'vehicleTransmissionType',
1490 title: 'Transmission Type',
1491 dataStoreId: 'transmissionTypes',
1492 value: data.stock.transmissionType ? data.stock.transmissionType : ''
1494 'registrationNumber': {
1496 id: 'registrationNumber',
1497 title: 'Registration no',
1498 value: data.stock.registrationNumber ? data.stock.registrationNumber : '',
1505 value: data.stock.vinNumber ? data.stock.vinNumber : '',
1512 value: data.stock.engineNumber ? data.stock.engineNumber : '',
1519 dataStoreId: 'yesno',
1520 value: undefined != data.sighted && null != data.sighted
1521 ? (data.sighted == true ? "1" : "0")
1524 'licenseDiscExpired': {
1526 id: 'licenseDiscExpired',
1527 title: 'License Disc Expired',
1528 dataStoreId: 'yesno',
1529 value: undefined != data.licenseDiscExpired && null != data.licenseDiscExpired
1530 ? (data.licenseDiscExpired == true ? "1" : "0")
1537 value: data.stock.km ? data.stock.km : ''
1541 id: 'vehicleCondition',
1543 dataStoreId: 'conditions',
1544 value: data.stock.condition ? data.stock.condition : ''
1548 id: 'exteriorColour',
1549 title: 'Main ext. colour',
1550 dataStoreId: 'exteriorColours',
1551 value: data.stock.exteriorColour ? data.stock.exteriorColour : ''
1555 id: 'interiorColour',
1556 title: 'Main int. colour',
1557 dataStoreId: 'interiorColours',
1558 value: data.stock.interiorColour ? data.stock.interiorColour : ''
1562 id: 'vehicleUpholstery',
1563 title: 'Upholstery',
1564 dataStoreId: 'upholsteries',
1565 value: data.stock.upholstery ? data.stock.upholstery : ''
1569 id: 'vehiclePapers',
1571 dataStoreId: 'papers',
1572 value: data.stock.papers ? data.stock.papers : ''
1578 dataStoreId: 'natis',
1579 value: data.stock.natis ? data.stock.natis : ''
1584 title: 'Spare keys',
1585 dataStoreId: 'sparekeys',
1586 value: undefined != data.stock.spareKeys && null != data.stock.spareKeys
1587 ? (data.stock.spareKeys == true ? "1" : "0")
1590 'fullServiceHistory': {
1592 id: 'fullServiceHistory',
1593 title: 'Full service history',
1595 value: data.stock.fullServiceHistory ? data.stock.fullServiceHistory : ''
1598 type: 'textarea-small',
1601 value: data.stock.fshNotes ? data.stock.fshNotes : ''
1604 type: 'damageDetails',
1605 disabled: !App.permissions.valuationUpdateDamages,
1607 dataStoreId: 'damages',
1608 data: data.stock.damages ? data.stock.damages : {}
1610 'damageTotal': 'R 0.00',
1612 type: 'textarea-styled',
1613 disabled: !App.permissions.valuationUpdateDamages,
1615 title: 'Damages comments',
1616 style: 'damages-comments',
1617 value: data.stock.damageNotes ? data.stock.damageNotes : ''
1619 'previousRepairsNoted': {
1621 id: 'previousRepairsNoted',
1622 title: 'Previous repairs',
1623 style: 'damages-comments',
1624 value: data.stock.previousRepairsNoted ? data.stock.previousRepairsNoted : false
1626 'previousRepairsNotes': {
1627 type: 'textarea-styled',
1628 disabled: !App.permissions.valuationUpdateDamages,
1629 id: 'previousRepairsNotes',
1630 title: 'Previous repairs notes',
1631 style: 'damages-comments',
1632 value: data.stock.previousRepairsNotes ? data.stock.previousRepairsNotes : '',
1633 onChange: function () {
1634 var haveData = ('' != $(this).val() ? true : false);
1635 $('#previousRepairsNoted').prop('checked', haveData);
1639 type: 'textarea-styled',
1640 disabled: !App.permissions.valuationUpdateCoverReceived,
1641 id: 'coverReceived',
1642 title: 'Cover Received',
1643 style: 'cover-received',
1644 value: data.stock.coverReceived ? data.stock.coverReceived : ''
1649 dataStoreId: 'accessories',
1650 itemName: 'accessory',
1651 data: data.stock.accessories ? data.stock.accessories : {}
1654 type: 'textarea-styled',
1655 id: 'accessoryNotes',
1657 style: 'comment mobile-comment',
1658 areaStyle: 'comment-text-box',
1659 value: data.stock.accessoryNotes ? data.stock.accessoryNotes : ''
1664 baseImage: 'main_img_car.jpg',
1665 view: !App.permissions.valuationUploadPhotos,
1666 value: data.stock.mainImage ? data.stock.mainImage : ''
1671 baseImage: 'front_car.jpg',
1672 view: !App.permissions.valuationUploadPhotos,
1673 value: data.stock.frontImage ? data.stock.frontImage : ''
1678 baseImage: 'left_car.jpg',
1679 view: !App.permissions.valuationUploadPhotos,
1680 value: data.stock.leftImage ? data.stock.leftImage : ''
1685 baseImage: 'right_car.jpg',
1686 view: !App.permissions.valuationUploadPhotos,
1687 value: data.stock.rightImage ? data.stock.rightImage : ''
1692 baseImage: 'back_car.jpg',
1693 view: !App.permissions.valuationUploadPhotos,
1694 value: data.stock.backImage ? data.stock.backImage : ''
1698 id: 'interiorImage',
1699 baseImage: 'interior_car.jpg',
1700 view: !App.permissions.valuationUploadPhotos,
1701 value: data.stock.interiorImage ? data.stock.interiorImage : ''
1706 baseImage: 'engine_car.jpg',
1707 view: !App.permissions.valuationUploadPhotos,
1708 value: data.stock.engineImage ? data.stock.engineImage : ''
1713 baseImage: 'copy_of_natis_car.jpg',
1714 view: !App.permissions.valuationUploadPhotos,
1715 value: data.stock.natisImage ? data.stock.natisImage : ''
1720 title: 'Select clubs',
1721 dataStoreId: 'clubs',
1726 constructor: 'Button',
1727 items: ('New Valuation' == data.jobState
1728 && 'Dealership Valuator' != App.permissions.name
1729 && 'Dealership Sales' != App.permissions.name)
1733 id: 'printValuationPdf',
1734 handler: _w.valuationview.printValuationPdf
1738 id: 'printValuationPdfTC',
1739 handler: _w.valuationview.printValuationPdfTC
1745 id: 'printValuationPdf',
1746 handler: _w.valuationview.printValuationPdf
1750 'infCreated': data.created ? ((data.created).split(' '))[0] : '',
1751 'infValuationNumber': data.valuationNumber ? data.valuationNumber : '',
1752 'infReferenceNumber': data.stock.referenceNumber ? data.stock.referenceNumber : '',
1753 'infStatus': data.jobState ? data.jobState : '',
1754 'infCreatedBy': data.createdBy && data.createdBy.firstName
1755 ? data.createdBy.firstName + ' ' + data.createdBy.familyName
1757 'infValuator': data.valuatedBy && data.valuatedBy.firstName
1758 ? data.valuatedBy.firstName + ' ' + data.valuatedBy.familyName
1760 'infSalesUser': data.salesProfile && data.salesProfile.firstName
1761 ? data.salesProfile.firstName + ' ' + data.salesProfile.familyName
1763 'infLoadedOnPriceGuide': data.stock.loadedOnPriceGuide
1764 ? ((data.stock.loadedOnPriceGuide).split(' '))[0] : '',
1765 'infTradePrice': data.stock.tradePrice ? 'R ' + data.stock.tradePrice : '0.00',
1766 'infRetailPrice': data.stock.retailPrice ? 'R ' + data.stock.retailPrice : '0.00',
1767 'infListPrice': data.stock.listPrice ? 'R ' + data.stock.listPrice : '0.00',
1771 title: 'Customer name',
1772 value: data.firstName ? data.firstName : ''
1777 title: 'Customer surname',
1778 value: data.familyName ? data.familyName : ''
1784 value: data.idNumber ? data.idNumber : ''
1790 value: data.mobile ? data.mobile : ''
1796 value: data.email ? data.email : ''
1801 title: 'Department',
1802 dataStoreId: 'departments',
1803 value: data.department ? data.department : ''
1809 dataStoreId: 'regions',
1810 value: data.region && data.region.id ? data.region.id : '',
1811 onChange: function () {
1812 if (!App.DataStore.getItem('BuildSelect:region', false)) {
1813 App.DataStore.loadSelectListData(
1814 'cities', false, 'Location', 'Town.SelectList', null,
1817 "region": $(this).val()
1828 dataStoreId : 'cities',
1829 value : data.city && data.city.id ? data.city.id : '',
1831 minimumInputLength: 3
1838 value : data.street ? data.street : '',
1843 style: 'rand-input',
1844 id: 'requiredPrice',
1845 title: 'Required price',
1846 value: data.requiredPrice ? data.requiredPrice : ''
1851 style: 'rand-input',
1852 id: 'amountOffered',
1854 value: data.amountOffered ? data.amountOffered : ''
1859 style: 'rand-input',
1860 id: 'bankSettlement',
1861 title: 'Bank Settlement',
1862 value: data.bankSettlement ? data.bankSettlement : ''
1866 style: 'rand-input',
1867 id: 'overAllowance',
1869 value: data.overAllowance ? data.overAllowance : '',
1870 onChange: function () {
1872 //var totalOfferVal = (parseInt(document.getElementById('amountOffered').value)).toFixed(2) + (parseInt(document.getElementById('overAllowance').value)).toFixed(2);
1874 if (isNaN(parseInt(document.getElementById('overAllowance').value))) {
1876 //var totalOfferVal = (parseInt(document.getElementById('amountOffered').value)).toFixed(2) + val((0.00).toFixed(2));
1877 $('#standInValue').val((parseInt(document.getElementById('amountOffered').value)).toFixed(2));
1880 $('#standInValue').val((Number((parseInt(document.getElementById('amountOffered').value))) + Number((parseInt(document.getElementById('overAllowance').value)))).toFixed(2)); //andreb // need to change the value on change -> do sum -> populate previousRepairsNoted
1888 style: 'rand-input',
1890 title: 'Total offer',
1891 value: (parseInt(data.overAllowance) + parseInt(data.amountOffered)).toFixed(2)
1892 ? (parseInt(data.overAllowance) + parseInt(data.amountOffered)).toFixed(2) : ''
1895 'projectedRetail': {
1897 style: 'rand-input',
1898 id: 'projectedRetail',
1899 title: 'Projected retail',
1900 value: data.projectedRetail ? data.projectedRetail : ''
1904 style: 'rand-input',
1905 id: 'plannedMargin',
1906 title: 'Planned margin',
1907 value: data.plannedMargin ? data.plannedMargin : ''
1912 title: 'Select valuator',
1913 dataStoreId: 'valuators',
1915 value: data.valuators ? data.valuators : []
1920 title: 'Sales person',
1921 dataStoreId: 'sales',
1924 'salesAmountOffered': {
1926 style: 'rand-inputs',
1927 id: 'salesAmountOffered',
1929 value: data.amountOffered ? data.amountOffered : '0.00',
1930 onFocus: function () {
1931 var $_this = $(this),
1932 value = $_this.val();
1934 if (value == '0.00') {
1938 onBlur: function () {
1939 var $_this = $(this),
1940 value = $_this.val();
1948 type: 'textarea-styled',
1949 id: 'salesComments',
1952 areaStyle: 'comment-text-box',
1953 value: data.salesComments ? data.salesComments : ''
1956 'customerAmountOffered': {
1958 style: 'rand-inputs',
1959 id: 'customerAmountOffered',
1961 value: data.amountOffered ? data.amountOffered : '0.00',
1962 onFocus: function () {
1963 var $_this = $(this),
1964 value = $_this.val();
1966 if (value == '0.00') {
1970 onBlur: function () {
1971 var $_this = $(this),
1972 value = $_this.val();
1979 'customerComments': {
1980 type: 'textarea-styled',
1981 id: 'customerComments',
1984 areaStyle: 'comment-text-box',
1985 value: data.salesComments ? data.salesComments : ''
1991 title: 'Stock number',
1992 value: data.stock.stockNumber ? data.stock.stockNumber : ''
1996 id: 'stockNumberDD',
1997 title: 'Stock number',
1998 value: data.stock.stockNumber ? data.stock.stockNumber : ''
2000 'dealNotDoneSelection': {
2002 id: 'dealNotDoneSelection',
2004 dataStoreId: 'dealNotDoneSelections',
2005 value: data.dealNotDoneSelection ? data.dealNotDoneSelection : ''
2008 'dealNotDoneReason': {
2009 type: 'textarea-styled',
2010 id: 'dealNotDoneReason',
2011 title: 'Description',
2013 areaStyle: 'comment-text-box',
2014 value: data.dealNotDoneReason ? data.dealNotDoneReason : ''
2018 printValuationPdf: function ()
2020 var task = 'Pdf.Print003';
2021 if ('New Valuation' == _w.valuationview.itemData.jobState
2022 && ('Dealership Valuator' == App.permissions.name
2023 || 'Dealership Sales' == App.permissions.name))
2026 task = 'Pdf.Print001';
2028 else if ('Dealership Valuator' == App.permissions.name
2029 || 'Dealership Sales' == App.permissions.name)
2031 task = 'Pdf.Print002';
2034 'printValuation:' + _w.valuationview.itemData.stock.id,
2035 'Valuation', task, _w.valuationview.itemId,
2038 'printValuation:' + _w.valuationview.itemData.stock.id, {}, {},
2039 _w.valuationview._onExportReceived, _w.taskExecError,
2042 }, _w.taskContractError
2045 printValuationPdfTC: function ()
2047 // Consider the T&C requirement.
2048 var task = 'Pdf.Print001';
2050 'printValuation:' + _w.valuationview.itemData.stock.id,
2051 'Valuation', task, _w.valuationview.itemId,
2054 'printValuation:' + _w.valuationview.itemData.stock.id, {}, {},
2055 _w.valuationview._onExportReceived, _w.taskExecError,
2058 }, _w.taskContractError
2061 _listMakesModelsTypes: function (fromItemData, callback)
2065 var year = _w.valuationview.itemData.stock.vehicleYear;
2066 var category = _w.valuationview.itemData.stock.type.category.id;
2067 var make = _w.valuationview.itemData.stock.type.model.make.id;
2068 var model = _w.valuationview.itemData.stock.type.model.id;
2069 var type = _w.valuationview.itemData.stock.type.id;
2070 var mmcode = _w.valuationview.itemData.stock.type.mmcode;
2074 var year = $('#vehicleYear').val();
2075 var category = $('#vehicleCategory').val();
2076 var make = $('#vehicleMake').val();
2077 var model = $('#vehicleModel').val();
2078 var type = $('#vehicleType').val();
2079 var mmcode = $('#mmCode').val();
2081 if (year && category)
2083 App.DataStore.loadSelectListData(
2084 'makes', false, 'Stock', 'Utility.ListMakes', null,
2086 "category": category,
2088 }}, {}, $.proxy(function (categoryId)
2090 if (8 == categoryId)
2092 var data = App.DataStore.getData('makes');
2097 App.DataStore.setData('makes', data);
2102 if (make && year && category)
2104 App.DataStore.loadSelectListData(
2105 'models', false, 'Stock', 'Utility.ListModels', null,
2108 "category": category,
2110 }}, {}, $.proxy(function (categoryId)
2112 if (8 == categoryId)
2114 var data = App.DataStore.getData('models');
2119 App.DataStore.setData('models', data);
2124 if (model && year && category)
2126 App.DataStore.loadSelectListData(
2127 'types', false, 'Stock', 'Utility.ListTypes', null,
2130 "category": category,
2132 }}, {}, $.proxy(function (categoryId, callback)
2134 if (8 == categoryId)
2136 var data = App.DataStore.getData('types');
2141 App.DataStore.setData('types', data);
2147 }, this, category, callback)
2151 _onDataAndTemplate: function ()
2153 App.DataStore.loadSelectListData(
2154 'tuhpi', false, 'Stock', 'Tuhpi.List', null, {
2157 "stock": _w.valuationview.itemData.stock.id,
2158 "company": App.companyData.id
2163 // data is retrieved
2164 var tuHpiData = App.DataStore.getData('tuhpi');
2166 _w.valuationview._loadHpiReportData(tuHpiData);
2175 if (null == App.API.taskContract('gridStockHistory'))
2178 'gridStockHistory', 'Stock', 'PricingHistory.Grid', null,
2179 {}, _w.valuationview.loadHistoricalGrid, _w.taskContractError
2184 _w.valuationview.loadHistoricalGrid(null, {}, {});
2187 $.each($.find('.damage-input'), function (i, input) {
2188 total += parseFloat($(input).val());
2190 $('#' + _w.valuationview.ti.tid + '_damageTotal').html('R ' + total);
2191 $('#doAcceptOffer').prop('disabled', true);
2192 $('#doRemoveAccept').prop('disabled', true);
2195 $('#doRemoveAcceptSlider').click(function () {
2196 $('#dropStock').insertAfter( '#btnKeepForStock'); //moved the div to reuse the code
2197 $('#dropStock').slideDown();
2198 $('#doSendToStock').hide();
2199 $('#stockNumber').prop('disabled', false);
2200 $('#stockNumberDD').prop('disabled', false);
2201 $('#doRemoveAcceptSlider').prop('disabled', true);
2202 $('#doRemoveAccept').prop('disabled', false);
2203 $('#doRemoveAccept').show();
2204 $('#btnFetchTu').prop('disabled', true);
2207 $('#doRemoveAccept').click(function () {
2209 var stockNo = $('#stockNumber').val();
2210 if (null == stockNo || '' == stockNo)
2212 //show the stock number field
2214 alert('Please enter a stock number.');
2217 if (!$('#frmValuationView').valid())
2221 if (!$('#acceptStockHPIdisclaimer').is(':checked'))
2223 alert('Please accept the conditions before sending.');
2226 $('#btnUpdate').prop('disabled', true);
2227 $('#btnRemoveAccept').prop('disabled', true);
2228 $('#btnRemove').prop('disabled', true);
2229 $('#btnAcceptOffer').prop('disabled', true);
2230 $('#btnKeepForStock').prop('disabled', true);
2232 var data = _w.valuationview._prepValuationUpdateData();
2234 /*var data = _w.valuationview._prepValuationUpdateData();
2236 'createValuationStock', 'Valuation', 'Valuation.UpdateStock',
2237 null, {}, $.proxy(function (data) {
2239 'createValuationStock', data, {},
2240 _w.valuationview._onValuationUpdated, _w.taskExecError
2242 }, this, data), _w.taskContractError
2244 //Move valuation to stock, to try out the 2nd function in order to not Repeat Oneself
2245 // var data = _w.valuationview._prepValuationUpdateData();
2246 /* App.API.execTask(
2247 'updateValuation:' + _w.valuationview.itemId, data, {},
2249 App.API.directRoute(
2250 'keepForStockOnValuation:' + _w.valuationview.itemId,
2251 'Valuation', 'Valuation.MoveToKeepForStock', _w.valuationview.itemId, {},
2252 _w.valuationview._onValuationUpdated, _w.taskExecError
2258 'PriceGuideRemove' + _w.valuationview.itemData.stock.priceGuide, 'PriceGuide', 'PriceGuide.Remove',
2259 _w.valuationview.itemData.stock.priceGuide,
2262 'PriceGuideRemove' + _w.valuationview.itemData.stock.priceGuide, data, {},
2264 App.API.directRoute(
2265 'offerAcceptedOnValuation:' + _w.valuationview.itemId,
2266 'Valuation', 'Valuation.MoveToOfferAccepted', _w.valuationview.itemId, {},
2267 _w.valuationview._onValuationUpdated, _w.taskExecError
2271 }, _w.taskContractError
2277 'sendToStock:' + _w.valuationview.itemId, 'Valuation', 'Valuation.SendToStock', _w.valuationview.itemId,
2279 var data = _w.valuationview._prepValuationUpdateData();
2281 'sendToStock:' + _w.valuationview.itemId, data, {},
2282 _w.valuationview._onValuationUpdated, _w.taskExecError
2284 }, _w.taskContractError
2293 $('#btnRemove').click(function () {
2294 if (!$('#frmValuationView').valid())
2298 $('#btnUpdate').prop('disabled', true);
2299 $('#btnRemoveAccept').prop('disabled', true);
2300 $('#btnRemove').prop('disabled', true);
2301 $('#btnAcceptOffer').prop('disabled', true);
2302 $('#btnKeepForStock').prop('disabled', true);
2303 var data = _w.valuationview._prepValuationUpdateData();
2305 'PriceGuideRemove' + _w.valuationview.itemData.stock.priceGuide, 'PriceGuide', 'PriceGuide.Remove',
2306 _w.valuationview.itemData.stock.priceGuide,
2309 'PriceGuideRemove' + _w.valuationview.itemData.stock.priceGuide, data, {},
2311 App.API.directRoute(
2312 'keepForStockOnValuation:' + _w.valuationview.itemId,
2313 'Valuation', 'Valuation.MoveToKeepForStock', _w.valuationview.itemId, {},
2314 _w.valuationview._onValuationUpdated, _w.taskExecError
2318 }, _w.taskContractError
2322 if (_w.valuationview.itemData
2323 && _w.valuationview.itemData.region
2324 && _w.valuationview.itemData.region.id)
2326 App.DataStore.loadSelectListData(
2327 'cities', false, 'Location', 'Town.SelectList', null,
2329 "region": _w.valuationview.itemData.region.id
2333 if (null != _w.valuationview.itemData.stock.priceGuide
2334 && 0 < _w.valuationview.itemData.stock.highestOffer)
2336 _w.valuationview.priceGuideId = _w.valuationview.itemData.stock.priceGuide;
2338 'offerList', 'PriceGuide', 'Offer.List',
2339 _w.valuationview.itemData.stock.priceGuide, {}, function () {
2341 'offerList', {}, {},
2344 var offers = response.Data;
2351 for (var x in offers)
2353 if ('Valid Offer' != offers[x].status
2354 && 'Updateable Offer' != offers[x].status)
2359 var dateInt = parseInt(
2360 offers[x].created.split(' ')[0].split('-').join('')
2361 + offers[x].created.split(' ')[1].split(':').join('')
2363 if ((parseInt(offers[x].amount) == highest && dateInt < lowestDate)
2364 || parseInt(offers[x].amount) > highest)
2366 highest = parseInt(offers[x].amount);
2368 lowestDate = dateInt;
2373 var modalbody = '<div style="font-weight:bold;color:#9B2022;">There are no valid offers!</div>';
2374 $('#dealDoneOfferList').html(modalbody);
2375 $('#doAcceptOffer').prop('disabled', true);
2376 $('#doRemoveAccept').prop('disabled', true);
2379 _w.valuationview.highestOfferId = highestId;
2380 var modalbody = '<table class="table table-bordered table-condensed table-striped">';
2381 modalbody += '<tr class="table-header-red"><td>Company</td><td>Date Offered</td><td>Amount</td></tr>';
2382 for (var x in offers)
2384 if ('Valid Offer' != offers[x].status
2385 && 'Updateable Offer' != offers[x].status)
2389 var isOwn = highestId == x
2393 '<tr class="modalrow ' + (isOwn ? 'red' : 'black') + '">'
2394 + '<td class="date">' + offers[x].company.name + '</td>'
2395 + '<td class="date">' + offers[x].created.split(' ')[0] + '</td>'
2396 + '<td class="wide">R' + offers[x].amount.split('.')[0] + '</td>'
2399 modalbody += '</table>';
2400 $('#doAcceptOffer').prop('disabled', false);
2401 $('#doRemoveAccept').prop('disabled', false);
2405 var modalbody = '<div style="font-weight:bold;color:#9B2022;">There are no valid offers!</div>';
2407 $('#dealDoneOfferList').html(modalbody);
2410 }, _w.taskContractError
2414 $('#HPIhide').show();
2415 if (_w.valuationview.limited)
2417 $('input').prop('disabled', true);
2418 $('button').prop('disabled', true);
2419 $('checkbox').prop('disabled', true);
2420 $('textarea').prop('disabled', true);
2422 $('#downloadTuhpi').prop('disabled', false);
2423 $('#overAllowance').prop('disabled', false);
2424 $('#standInValue').prop('disabled', true);
2425 $('#btnUnarchive').prop('disabled', false);
2426 $('#printValuationPdf').prop('disabled', false);
2427 $('#optSendToSales').prop('disabled', false);
2428 $('#salesProfile').prop('disabled', false);
2429 $('button[data-id="salesProfile"]').prop('disabled', false);
2430 $('#salesAmountOffered').prop('disabled', false);
2431 $('#salesComments').prop('disabled', false);
2432 $('#btnSendToSales').prop('disabled', false);
2433 $('#printValuationPdf').prop('disabled', false);
2434 $('#btnSendToPg').prop('disabled', false);
2435 $('#acceptStockHPIdisclaimer').prop('disabled', false);
2436 $('#acceptStockDDHPIdisclaimer').prop('disabled', false);
2437 $('button[data-id="clubs"]').prop('disabled', false);
2439 $('#optSendToCustomer').prop('disabled', false);
2440 $('#customerAmountOffered').prop('disabled', false);
2441 $('#customerComments').prop('disabled', false);
2444 $('#mobiAuctionBtn').prop('disabled', false);
2445 $('#mobiPriceGuideBtn').prop('disabled', false);
2446 $('#mobiValuationsBtn').prop('disabled', false);
2448 if (App.permissions.settingsHpiReport == false)
2450 $('#requestHPIreport').hide();
2451 $('#requestHPIAccidentReport').hide();
2454 $('#sectionSelectValuator').hide();
2455 if (!_w.valuationview.newItem)
2457 if (App.permissions.settingsHpiReport
2458 && 'New Valuation' != _w.valuationview.itemData.jobState)
2460 $('#requestHPIreport').show();
2461 $('#requestHPIAccidentReport').show();
2463 $('#retailPrice').val(_w.valuationview.itemData.stock.retailPrice);
2464 $('#tradePrice').val(_w.valuationview.itemData.stock.tradePrice);
2465 $('#listPrice').val(_w.valuationview.itemData.stock.listPrice);
2467 //console.log('_w.valuationview.itemData',_w.valuationview.itemData);
2469 switch (_w.valuationview.itemData.jobState)
2471 case 'New Valuation':
2473 //console.log('_w.valuationview.itemData.isPublicCustomer',_w.valuationview.itemData.isPublicCustomer);
2475 if(_w.valuationview.itemData.isPublicCustomer)
2477 $('#optSendToCustomer').show();
2479 $('#btnSaveAsSales').show();
2480 $('#btnSaveAsPending').show();
2481 $('#optSendToPg').show();
2482 $('#btnSendToStock').show();
2483 $('#btnArchive').show();
2484 true == App.permissions.valuationCreateSales
2485 ? $('#sectionSelectValuator').show()
2486 : $('#sectionSelectValuator').hide();
2487 if (!App.permissions.valuationUpdateDamages)
2489 $('.damages-form').hide();
2493 $('.damages-form').show();
2495 if (!App.permissions.valuationUploadPhotos)
2497 $('.photos-form').html(' ');
2500 case 'Pending Valuation':
2501 if(_w.valuationview.itemData.isPublicCustomer)
2503 $('#optSendToCustomer').show();
2505 $('#optSendToSales').show();
2506 $('#optSendToPg').show();
2507 $('#btnSendToStock').show();
2508 $('#btnArchive').show();
2510 if (null != _w.valuationview.itemData.stock.priceGuide
2511 && 0 < _w.valuationview.itemData.stock.highestOffer)
2513 $('#btnAcceptOffer').show();
2514 $('#doAcceptOffer').show();
2515 $('#btnKeepForStock').show();
2516 $('#btnSendToDealNotDone').show();
2517 $('#doSendToDealNotDone').show();
2521 $('#btnSendToDealDone').show();
2522 $('#doSendToDealDone').show();
2523 $('#doSendToDealNotDone').show();
2525 if (!App.permissions.valuationUpdateDamages)
2527 $('.damages-form').hide();
2531 $('.damages-form').show();
2533 if (!App.permissions.valuationUploadPhotos)
2535 $('.photos-form').html(' ');
2538 case 'Complete Valuation':
2540 $('#optSendToSales').show();
2541 $('#optSendToPg').show();
2542 $('#btnSendToStock').show();
2543 $('#btnArchive').show();
2544 if (null != _w.valuationview.itemData.stock.priceGuide
2545 && 0 < _w.valuationview.itemData.stock.highestOffer)
2550 if (_w.valuationview.itemData.previousState == 'Offer Accepted')
2552 //console.log("previousState", _w.valuationview.itemData);
2553 $('#btnAcceptOffer').hide;
2556 $('#btnAcceptOffer').show();
2560 $('#doAcceptOffer').show();
2561 $('#btnKeepForStock').show();
2562 $('#btnSendToDealNotDone').show();
2566 $('#btnSendToDealDone').show();
2567 $('#doSendToDealDone').show();
2568 $('#doSendToDealNotDone').show();
2571 case 'Offer Accepted':
2572 $('#optSendToPg').show();
2573 $('#optSendToSales').show();
2574 $('#btnSendToStock').show();
2575 $('#btnSendToStock').prop('disabled', false);
2576 $('#btnKeepForStock').hide();
2577 $('#stockNumber').prop('disabled', false);
2578 $('#doSendToStock').prop('disabled', false);
2579 $('#btnArchive').show();
2580 $('#btnArchive').prop('disabled', false);
2584 $('#btnSendToStock').show();
2585 $('#btnSendToStock').prop('disabled', false);
2586 $('#stockNumber').prop('disabled', false);
2587 $('#doSendToStock').prop('disabled', false);
2588 $('#doRemoveAcceptSlider').prop('disabled', false);
2589 $('#btnArchive').show();
2590 $('#btnArchive').prop('disabled', false);
2592 case 'Deal Not Done':
2593 $('#btnArchive').show();
2596 $('#btnUnarchive').show();
2599 $('#doRemoveAcceptSlider').prop('disabled', false);
2600 $('#optSendToSales').show();
2601 $('#btnSendToDealNotDone').show();
2602 if (null != _w.valuationview.itemData.stock.priceGuide
2603 && 0 < _w.valuationview.itemData.stock.highestOffer)
2605 $('#btnRemoveAccept').show();
2606 $('#doRemoveAccept').show();
2607 $('#btnRemove').show();
2614 $('#requestHPIreport').hide();
2615 $('#requestHPIAccidentReport').hide();
2621 $('#optSendToPg').prop('disabled', true == App.permissions.valuationRoutePriceguide ? false : true);
2622 $('#optSendToSales').prop('disabled', true == App.permissions.valuationRouteComplete ? false : true);
2623 $('#btnUpdate').prop('disabled', true == App.permissions.valuationUpdate ? false : true);
2624 $('#btnSendToStock').prop('disabled', true == App.permissions.valuationRouteStock ? false : true);
2625 $('#btnSaveAsPending').prop('disabled', true == App.permissions.valuationRoutePending ? false : true);
2626 $('#btnAcceptOffer').prop('disabled', true == App.permissions.valuationRouteDealDone ? false : true);
2627 $('#doSendToDealNotDone').prop('disabled', true == App.permissions.valuationRouteDealDone ? false : true);
2628 $('#doSendToDealDone').prop('disabled', true == App.permissions.valuationRouteDealDone ? false : true);
2629 $('#btnRemoveAccept').prop('disabled', true == App.permissions.valuationRouteDealDone ? false : true);
2630 $('#btnKeepForStock').prop('disabled', true == App.permissions.valuationRouteDealNotDone ? false : true);
2631 $('#btnSendToDealNotDone').prop('disabled', true == App.permissions.valuationRouteDealNotDone ? false : true);
2632 $('#btnRemove').prop('disabled', true == App.permissions.valuationRouteDealNotDone ? false : true);
2633 $('#btnExpire').prop('disabled', true == App.permissions.valuationRouteDealNotDone ? false : true);
2634 if ('Dealership Sales' == App.permissions.name && !_w.valuationview.newItem)
2636 $('#btnSaveAsPending').hide();
2639 $('#btnArchive').prop('disabled', true == App.permissions.valuationArchive ? false : true);
2640 $('#printValuationPdf').prop('disabled', true == App.permissions.valuationPrint ? false : true);
2641 $('#btnB4cAccidentReport').prop('disabled', true == App.permissions.valuationB4cReport ? false : true);
2642 $('#btnBwmAccidentReport').prop('disabled', true == App.permissions.valuationBmw ? false : true);
2646 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_overAllowance').show() : $('#' + _w.valuationview.ti.tid + '_overAllowance').hide();
2647 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_standInValue').show() : $('#' + _w.valuationview.ti.tid + '_standInValue').hide();
2648 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_projectedRetail').show() : $('#' + _w.valuationview.ti.tid + '_projectedRetail').hide();
2649 true == App.permissions.valuationPricingDetails ? $('#' + _w.valuationview.ti.tid + '_plannedMargin').show() : $('#' + _w.valuationview.ti.tid + '_plannedMargin').hide();
2652 _w.valuationview._setupValidation();
2654 _onValuationViewDataReceived: function (response)
2656 _w.valuationview.itemId = response.Data.id;
2657 _w.valuationview.itemData = response.Data;
2658 _w.valuationview._listMakesModelsTypes(true);
2659 _w.valuationview.setValuationViewFormMeta(response.Data);
2660 _w.valuationview.ti.hydrate(_w.valuationview.formMeta);
2661 _w.valuationview.ti.onPublish(_w.valuationview._onDataAndTemplate);
2664 App.DataStore.loadSelectListData(
2665 'years', false, 'Stock', 'Year.SelectList', null,
2668 App.DataStore.loadSelectListData(
2669 'categories', false, 'Stock', 'Category.SelectList', null,
2673 App.DataStore.loadSelectListData(
2674 'fuelTypes', false, 'Stock', 'FuelType.SelectList', null,
2677 App.DataStore.loadSelectListData(
2678 'transmissionTypes', false, 'Stock', 'TransmissionType.SelectList', null,
2681 App.DataStore.loadSelectListData(
2682 'damages', false, 'Stock', 'Damage.SelectList', null,
2685 App.DataStore.loadSelectListData(
2686 'accessories', false, 'Stock', 'Accessory.SelectList', null,
2690 App.DataStore.loadSelectListGroup([
2691 {dataId: 'conditions', isStatic: true, workspace: 'Stock', task: 'Condition.SelectList'},
2692 {dataId: 'exteriorColours', isStatic: true, workspace: 'Stock', task: 'ExteriorColour.SelectList'},
2693 {dataId: 'interiorColours', isStatic: true, workspace: 'Stock', task: 'InteriorColour.SelectList'},
2694 {dataId: 'upholsteries', isStatic: true, workspace: 'Stock', task: 'Upholstery.SelectList'},
2695 {dataId: 'papers', isStatic: true, workspace: 'Stock', task: 'Paper.SelectList'},
2696 {dataId: 'natis', isStatic: true, workspace: 'Stock', task: 'Natis.SelectList'},
2697 {dataId: 'fsh', isStatic: true, workspace: 'Stock', task: 'FullServiceHistory.SelectList'},
2698 //{dataId: 'fuelTypes', isStatic: true, workspace: 'Stock', task: 'FuelType.SelectList'},
2699 //{dataId: 'transmissionTypes', isStatic: true, workspace: 'Stock', task: 'TransmissionType.SelectList'},
2700 //{dataId: 'damages', isStatic: true, workspace: 'Stock', task: 'Damage.SelectList'},
2701 //{dataId: 'accessories', isStatic: true, workspace: 'Stock', task: 'Accessory.SelectList'},
2702 {dataId: 'clubs', isStatic: true, workspace: 'PriceGuide', task: 'Club.SelectList'},
2703 {dataId: 'valuators', isStatic: true, workspace: 'User', task: 'Profile.ValuatorList'},
2704 {dataId: 'sales', isStatic: true, workspace: 'User', task: 'Profile.SalesList'},
2705 {dataId: 'regions', isStatic: true, workspace: 'Location', task: 'Region.SelectList'},
2706 {dataId: 'dealNotDoneSelections', isStatic: true, workspace: 'Valuation', task: 'Valuation.DealNotDoneSelection'},
2709 _setupValidation: function ()
2711 App.DataStore.listen('regValidation', 'damages', function (id, damages) {
2713 firstName: {required: true, minlength: 3},
2714 familyName: {required: true, minlength: 3},
2715 idNumber: {required: false, minlength: 13, maxlength: 13, digits: true},
2716 mobile: {required: true, mobile: true},
2717 salesAmountOffered: {number: true},
2718 customerAmountOffered: {number: true},
2719 bankSettlement: {number: true},
2720 overAllowance: {number: true},
2721 standInValue: {number: true},
2722 projectedRetail: {number: true},
2723 plannedMargin: {number: true},
2724 vehicleYear: "required",
2725 vehicleCategory: "required",
2726 vehicleMake: {required: function () {
2727 return $('#vehicleMake').parent().css('display') != 'none';
2729 vehicleModel: {required: function () {
2730 return $('#vehicleModel').parent().css('display') != 'none';
2732 vehicleType: {required: function () {
2733 return $('#vehicleType').parent().css('display') != 'none';
2735 vehicleMakeManual: {required: function () {
2736 return $('#vehicleMakeManual').parent().parent().css('display') != 'none';
2738 vehicleModelManual: {required: function () {
2739 return $('#vehicleModelManual').parent().parent().css('display') != 'none';
2741 vehicleTypeManual: {required: function () {
2742 return $('#vehicleTypeManual').parent().parent().css('display') != 'none';
2744 vehicleFuelType: "required",
2745 vehicleTransmissionType: "required",
2746 registrationNumber: "required",
2747 km: {required: true, digits: true}
2749 for (var i = 0; i < damages.length; i++)
2751 rules['damage' + damages[i].value + 'Amount'] = {number: true};
2753 $('#frmValuationView').validate({
2757 minlength: "This field is required."
2760 minlength: "This field is required."
2763 minlength: "Must be 13 digits.",
2764 maxlength: "Must be 13 digits."
2766 vehicleYear: "This field is required.",
2767 vehicleCategory: "This field is required.",
2768 vehicleMake: "This field is required.",
2769 vehicleModel: "This field is required.",
2770 vehicleType: "This field is required.",
2771 vehicleMakeManual: "This field is required.",
2772 vehicleModelManual: "This field is required.",
2773 vehicleTypeManual: "This field is required.",
2774 vehicleFuelType: "This field is required.",
2775 vehicleTransmissionType: "This field is required.",
2776 registrationNumber: "This field is required.",
2777 km: {required: "This field is required."}
2779 invalidHandler: function (event, validator) {
2780 var errors = validator.numberOfInvalids();
2781 if (0 < _w.valuationview.validations && errors) {
2782 var message = errors == 1
2783 ? 'You missed 1 field. It has been highlighted'
2784 : 'You missed ' + errors + ' fields. They have been highlighted';
2787 _w.valuationview.validations++;
2789 submitHandler: function (form) {
2790 $('#btnUpdate').prop('disabled', true);
2791 var data = _w.valuationview._prepValuationUpdateData();
2794 'updateValuation:' + _w.valuationview.itemId, data, {},
2795 _w.valuationview._onValuationUpdated, _w.taskExecError
2800 _w.valuationview.validations = 0;
2801 $('#frmValuationView').valid();
2804 $('label.error').remove();
2805 $('.valid').removeClass('valid');
2808 _onTuReady: function (response, callback)
2810 // Do a check here to see if we have cat other if so return else do
2811 if (_w.valuationview.itemData.stock.category != 8)
2815 'TransUnionFromMmCode', {
2817 vehicleYear: parseInt($('#vehicleYear').val()),
2818 type: parseInt($('#vehicleType').val())
2820 }, {}, function (data) {
2821 _w.valuationview._onTuReceived(data);
2828 alert('There were no trade and retail from TransUnion');
2846 _onTuReceived: function (response)
2848 $('#btnFetchTu').prop('disabled', false);
2849 if ('Success' != response.Data.Status)
2851 alert(response.Data.Status);
2853 if ('No Results From TransUnion' == response.Data.Status || 'No Values From TransUnion' == response.Data.Status) {
2854 //write zero values for transunion failed
2856 $('#retailPrice').val(vals);
2857 $('#tradePrice').val(vals);
2858 $('#listPrice').val(vals);
2859 _w.valuationview.ti.hydrateParam('infRetailPrice', 'R ' + vals);
2860 _w.valuationview.ti.hydrateParam('infTradePrice', 'R ' + vals);
2861 _w.valuationview.ti.hydrateParam('infListPrice', 'R ' + vals);
2865 var vals = response.Data.VehicleDetails[0].Value;
2866 $('#retailPrice').val(vals.RetailPrice);
2867 $('#tradePrice').val(vals.TradePrice);
2868 $('#listPrice').val(vals.NewPrice);
2869 $('#MmCode').val(vals.MmCode);
2870 _w.valuationview.ti.hydrateParam('infRetailPrice', 'R ' + vals.RetailPrice);
2871 _w.valuationview.ti.hydrateParam('infTradePrice', 'R ' + vals.TradePrice);
2872 _w.valuationview.ti.hydrateParam('infListPrice', 'R ' + vals.NewPrice);
2873 _w.valuationview.ti.hydrateParam('infMmCode', ' ' + vals.MmCode);
2877 _updatePrice: function (callback, apicall)
2880 if ('' != $('#vehicleType').val() && null != $('#vehicleType').val())
2883 'GetMmCode' + $('#vehicleType').val(), 'Stock', 'Type.GetMmCode', null,
2884 {id: $('#vehicleType').val()},
2885 function (response) {
2887 $('#mmCode').html(response.Data.mmCode);
2888 if (apicall !== false)
2890 if ($('#vehicleYear').val()
2891 && $('#vehicleType').val())
2894 'TransUnionFromMmCode', 'Stock', 'Utility.TransUnionFromMmCode', null,
2895 {}, function (response) {
2896 _w.valuationview._onTuReady(response, callback);
2897 }, _w.taskContractError);
2908 }, _w.taskContractError);
2912 $('#mmCode').html('');
2919 _prepValuationUpdateData: function ()
2921 function isValidEmailAddress(emailAddress) {
2922 var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
2923 return pattern.test(emailAddress);
2927 var data = _w.valuationview.ti.harvest();
2928 data.km = '' == data.km
2930 : parseInt(data.km);
2931 var retailPrice = $('#retailPrice').val();
2932 var tradePrice = $('#tradePrice').val();
2933 var listPrice = $('#listPrice').val();
2934 var mmCode = $('#MmCode').val();
2936 data.retailPrice = ('' == retailPrice)
2938 : parseFloat(retailPrice);
2939 data.tradePrice = ('' == tradePrice)
2941 : parseFloat(tradePrice);
2942 data.listPrice = ('' == listPrice)
2944 : parseFloat(listPrice);
2945 delete data.damageTotal;
2947 if (-1 == data.make)
2953 if (-1 == data.model)
2958 if (-1 == data.type)
2963 delete data.amountOffered;
2964 // if ('' == data.overAllowance)
2966 // delete data.overAllowance;
2969 if ('' == data.overAllowance)
2971 delete data.overAllowance;
2975 data.overAllowance = parseFloat(data.overAllowance);
2978 if ('' == data.standInValue)
2980 delete data.standInValue;
2984 data.standInValue = parseFloat(data.standInValue);
2987 if ('' == data.projectedRetail)
2989 delete data.projectedRetail;
2993 data.projectedRetail = parseFloat(data.projectedRetail);
2996 if ('' == data.plannedMargin)
2998 delete data.plannedMargin;
3002 data.plannedMargin = parseFloat(data.plannedMargin);
3005 if ('' == data.bankSettlement)
3007 data.bankSettlement = 0.0;
3011 data.bankSettlement = parseFloat(data.bankSettlement);
3014 if ('' == data.requiredPrice)
3016 data.requiredPrice = 0.0;
3020 data.requiredPrice = parseFloat(data.requiredPrice);
3023 if ('' == data.mainImage)
3025 delete data.mainImage;
3027 if ('' == data.leftImage)
3029 delete data.leftImage;
3031 if ('' == data.backImage)
3033 delete data.backImage;
3035 if ('' == data.engineImage)
3037 delete data.engineImage;
3039 if ('' == data.frontImage)
3041 delete data.frontImage;
3043 if ('' == data.rightImage)
3045 delete data.rightImage;
3047 if ('' == data.interiorImage)
3049 delete data.interiorImage;
3051 if ('' == data.natisImage)
3053 delete data.natisImage;
3058 var postData = {Stock: {}, Valuation: {}};
3059 var valuationFields = [
3060 "firstName", "familyName", "idNumber", "mobile",
3061 "email", "department", "amountOffered", "bankSettlement", "overAllowance",
3062 "standInValue", "projectedRetail", "plannedMargin",
3063 "salesProfile", "amountOffered", "salesComments", "customerComments",
3064 "region", "city", "street", "requiredPrice", "sighted", "licenseDiscExpired",
3065 "dealNotDoneSelection", "dealNotDoneReason"
3067 for (var field in data)
3069 if (-1 == valuationFields.indexOf(field))
3071 postData.Stock[field] = data[field];
3075 postData.Valuation[field] = data[field];
3078 if ('' == postData.Valuation.idNumber)
3080 delete postData.Valuation.idNumber;
3084 if (!isValidEmailAddress(postData.Valuation.email))
3086 testEmail = postData.Valuation.email;
3087 postData.Valuation.email = null;
3091 if ('' == postData.Valuation.email)
3093 postData.Valuation.email = null; //postData.Valuation.email;
3096 var stockNum = $('#stockNumberDD').val();
3097 if ('' == postData.Stock.stockNumber
3098 && '' != postData.Stock.stockNumberDD)
3100 postData.Stock.stockNumber = postData.Stock.stockNumberDD;
3102 if (undefined != postData.Stock.stockNumberDD)
3104 delete postData.Stock.stockNumberDD;
3111 _onHpiDownloadButtonClick: function (event)
3113 var hpiType = event.currentTarget.dataset.value;
3114 var hpiId = event.currentTarget.dataset.id;
3116 if('ACC' == hpiType)
3119 'printTuhpi:' + _w.stock.Id, 'Stock', 'Tuhpi.PrintAccident', _w.stock.Id,
3120 {'PdfTemplate':{'recordId':hpiId}}, function () {
3122 'printTuhpi:' + _w.stock.Id, {}, {},
3124 }, _w.taskExecError,
3127 }, _w.taskContractError
3133 'printTuhpi:' + _w.stock.Id, 'Stock', 'Tuhpi.Print', _w.stock.Id,
3134 {'PdfTemplate':{'recordId':hpiId}}, function () {
3136 'printTuhpi:' + _w.stock.Id, {}, {},
3138 }, _w.taskExecError,
3141 }, _w.taskContractError
3146 _loadHpiReportData: function (hpiData)
3148 var tuHpiData = hpiData;
3150 if(0 < tuHpiData.length)
3152 $('#HPIreportData').html('');
3154 var tuHpiCreated = '';
3156 var tuHpiButtonType = '';
3159 for (var i = 0; i < tuHpiData.length; i++)
3164 tuHpiId = tuHpiData[i].id;
3165 tuHpiCreated = tuHpiData[i].created;
3166 tuHpiType = tuHpiData[i].hpi_type;
3167 tuHpiButtonType = tuHpiData[i].hpi_type;
3169 var hpiDataHtml = '<div class="control-group mobile-control-group row-fluid" style="display: block;border:1px solid #d3d3d3;" id="' + i + '">'
3170 +'<div class="control-group mobile-control-group span4" style="padding-left:10px; padding-top:13px;">Last date requested:</div>'
3171 +'<div class="control-group mobile-control-group span4" style="padding-left:10px;border-left:1px solid #d3d3d3; padding-top:13px;">'
3172 +'<div id="tuhpiDate_' + i + '" class="span9">Not requested yet.</div>'
3174 +'<div class="control-group mobile-control-group span4" style="padding-left:10px;border-left:1px solid #d3d3d3; padding-top:13px;">'
3175 +'<div id="tuhpiType_' + i + '" class="span8">Not requested yet.</div>'
3176 +'<div class="span4">'
3177 +'<button id="downloadTuhpi_' + tuHpiId + '" class="btn pull-right span12" data-id="' + tuHpiId + '" data-value="' + tuHpiButtonType + '" type="button" style="margin:-5px 0 0 0;" >view</button>'
3182 $('#HPIreportData').append(hpiDataHtml);
3186 $('#tuhpiDate_' + i).html(tuHpiCreated);
3187 $('#tuhpiType_' + i).html(tuHpiType);
3188 $('#downloadTuhpi').show();
3189 $('#HPIbtnConfirm').prop('disabled', false);
3193 $('#tuhpiDate_' + i).html('Not Requested Yet');
3194 $('#tuhpiType_' + i).html('Not Requested Yet');
3195 $('#downloadTuhpi').hide();
3199 $('#downloadTuhpi_' + tuHpiId).click(function(event)
3201 _w.valuationview._onHpiDownloadButtonClick(event);
3209 _onValuationUpdated : function( response )
3211 window.location.hash = '/valuations';