3 window._w.valuation = {
10 onPageDestruct : function()
12 App.Event.removeListener('valuationGridSuFilter', 'SuChange');
15 onValuationPageTemplateReady : function( template, event, eventData )
17 _w.valuation.allowedDifference = 4000;
18 _w.valuation.templateReadyTime = new Date().getTime();
19 var newtitle = 'RETAIL';
20 var newtitle2 = 'OFFER';
22 if ('Dealership Sales' == App.permissions.name) {
23 var newtitle = 'HIGEST PRICE GUIDE OFFER';
24 var newtitle2 = 'MANAGER\'s OFFER';
26 _w.valuation.ti = _t[template];
27 App.DataStore.loadSelectListData('filtermakes', true, 'Stock', 'Make.SelectList');
28 App.DataStore.loadSelectListData('sales', false, 'User', 'Profile.SalesList');
29 App.DataStore.loadSelectListData('managers', false, 'User', 'Profile.ManagerList');
30 App.DataStore.setData('valuationstatuses',
32 {"value":"New Valuation", "label":"New Valuation"},
33 {"value":"Pending Valuation", "label":"Pending Valuation"},
34 {"value":"Complete Valuation", "label":"Complete Valuation"},
35 {"value":"Offer Accepted", "label":"Offer Accepted"},
36 {"value":"Deal Done", "label":"Deal Done"},
37 {"value":"Deal Not Done", "label":"Deal Not Done"},
38 {"value":"Price Guide", "label":"Price Guide"},
39 {"value":"Archived", "label":"Archived"}
43 App.DataStore.setData('archivedStatuses',
45 {"value":"includingArchived", "label":"View all vehicles including archived"},
46 {"value":"excludingArchived", "label":"View all vehicles excluding archived"},
47 {"value":"onlyArchived", "label":"View only archived"}
51 _w.valuation.ti.hydrate({
52 'gridTitle': 'Valuations',
53 'gridTitleSubtext': 'Please use the filters below to narrow down the view',
55 constructor: 'Button',
58 permission: App.permissions.settingsReport,
59 preset: 'ValuationReport',
60 id: 'valuationReport',
61 handler: _w.valuation.valuationReport
65 id: 'exportValuationGrid',
66 handler: _w.valuation.exportValuationGrid
69 preset: 'NewValuation',
71 handler: _w.valuation.newValuation
75 'gridContextFilter': {
76 constructor: 'GridContextFilter',
79 title: 'Search here:',
80 style : 'filter-input-wrapper hidden-phone',
81 id: 'gridValuationContext_VIN',
82 placeholder: 'VIN number',
83 context: 'gridValuationContext'
86 style : 'filter-input-wrapper hidden-phone',
87 id: 'gridValuationContext_RefNo',
88 placeholder: 'Ref number',
89 context: 'gridValuationContext'
92 style : 'filter-input-wrapper hidden-phone',
93 id: 'gridValuationContext_RegNo',
94 placeholder: 'Registration number',
95 context: 'gridValuationContext'
98 style : 'filter-input-wrapper hidden-desktop',
99 id: 'gridValuationContext_RegNoMobi',
100 placeholder: 'Registration number',
101 context: 'gridValuationContext'
104 style : 'filter-input-wrapper hidden-phone',
105 id: 'gridValuationContext_Name',
106 placeholder: 'Customer Surname',
107 context: 'gridValuationContext'
110 style : 'input-append date filter-input-wrapper-date mobile-width12p dfrom hidden-phone',
111 title: 'Search date created here',
112 id: 'gridValuationContext_DateFrom',
114 context: 'gridValuationContext',
115 append: '<i class="icon-calendar"></i>',
118 $('#gridValuationContext_DateFrom').change(function() {
119 _w.valuation.dFrom = $(this).val();
124 style : 'input-append date filter-input-wrapper-date mobile-width12p dto hidden-phone',
125 id: 'gridValuationContext_DateTo',
127 context: 'gridValuationContext',
128 append: '<i class="icon-calendar"></i>',
131 $('#gridValuationContext_DateTo').change(function() {
132 _w.valuation.dTo = $(this).val();
137 style: 'filter-input-wrapper filter-input-select',
138 placeholder: 'Make Mobi',
139 id: 'gridPriceGuideContext_MakeMobi',
140 context: 'gridValuationContext',
141 dataStoreId : 'filtermakes',
142 selectEmpty : 'All Makes',
143 style: 'MakeMobi hidden-desktop ',
144 bind : function(meta){
145 $('#gridAuctionFilter_MakeMobi').change(function(){
146 $('#gridAuctionFilter_Make').selectpicker('val', $(this).val());
152 style: 'filter-input-wrapper filter-input-select ',
153 placeholder: 'status Mobi',
154 id: 'gridValuationContext_StatusMobi',
155 context: 'gridValuationContext',
156 dataStoreId : 'valuationstatuses',
158 style: 'StatusMobi hidden-desktop ',
159 bind : function(meta){
160 $('#gridValuationContext_StatusMobi').change(function()
162 $('#gridValuationFilter_Status').selectpicker('val', $(this).val());
167 ValuationNotArchived: {
168 style : 'filter-input-wrapper hidden',
169 id: 'gridValuationContext_notArchived',
170 placeholder: 'Valuation Not Archived',
171 context: 'gridValuationContext',
172 value: 'Archived,Stock'
176 style: 'filter-input-wrapper filter-input-select ',
177 placeholder: 'Archived ',
178 id: 'gridValuationContext_Archived',
179 context: 'gridValuationContext',
180 dataStoreId : 'archivedStatuses',
181 value: 'excludingArchived',
182 style: 'Archived hidden-phone hidden-tablet',
183 bind : function(meta){
184 $('#gridValuationContext_Archived').change(function(){
185 _w.valuationsArchiveDrop = $(this).val();
186 if ($(this).val() == 'includingArchived')
189 //remove the excludingArchived input value in hidden field
190 $('#gridValuationContext_notArchived').val('');
191 //set the grid filter status to All and show
192 if (!_w.valuation.statusMenuOverride)
194 $('#gridValuationFilter_Status').selectpicker('val', 'All');
196 $('[data-id="gridValuationFilter_Status"]').removeClass("hidden");
199 if ($(this).val() == 'excludingArchived')
201 $('[data-id="gridValuationFilter_Status"]').removeClass("hidden");
203 // The not Archive view all and trigger search
204 // Has operator in seach !(not) so search for Archive only
205 $('#gridValuationContext_notArchived').val('Archived,Stock');
206 if ('All' != $('#gridValuationFilter_Status').selectpicker('val'))
208 if (!_w.valuation.statusMenuOverride)
210 $('#gridValuationFilter_Status').selectpicker('val', 'All');
213 _w.valuation.searchValuationGrid();
215 if ($(this).val() == 'onlyArchived')
218 //remove the excludingArchived input value in hidden field
219 $('#gridValuationContext_notArchived').val('');
220 //set the grid filter status to Archived and hide
221 if (!_w.valuation.statusMenuOverride)
223 $('#gridValuationFilter_Status').selectpicker('val', 'Archived');
225 //data-id = gridValuationFilter_Status hide
226 $('[data-id="gridValuationFilter_Status"]').addClass("hidden");
228 _w.valuation.statusMenuOverride = false;
238 clearId: 'clearValuationGridContext',
239 bindClear: _w.valuation.clearValuationGridContext,
240 searchId: 'searchValuationGrid',
241 bindSearch: _w.valuation.searchValuationGrid
245 'gridColumnHeaders': {
246 constructor: 'GridColumnHeader',
249 id: 'gridValuationColumn_Make',
252 id: 'gridValuationOrder_MakeAsc',
253 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'make.name', 'ASC')
256 id: 'gridValuationOrder_MakeDesc',
257 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'make.name', 'DESC')
259 style: 'hidden-phone'
262 id: 'gridValuationColumn_Model',
265 id: 'gridValuationOrder_ModelAsc',
266 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'model.name', 'ASC')
269 id: 'gridValuationOrder_ModelDesc',
270 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'model.name', 'DESC')
272 style: 'hidden-phone'
275 id: 'gridValuationColumn_Type',
278 id: 'gridValuationOrder_TypeAsc',
279 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'type.name', 'ASC')
282 id: 'gridValuationOrder_TypeDesc',
283 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'type.name', 'DESC')
289 id: 'gridValuationColumn_Year',
292 id: 'gridValuationOrder_YearAsc',
293 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'vehicleYear.name', 'ASC')
296 id: 'gridValuationOrder_YearDesc',
297 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'vehicleYear.name', 'DESC')
302 id: 'gridValuationColumn_KM',
305 id: 'gridValuationOrder_KMAsc',
306 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.km', 'ASC')
309 id: 'gridValuationOrder_KMDesc',
310 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.km', 'DESC')
312 style : 'hidden-phone kms'
315 id: 'gridValuationColumn_Trade',
318 id: 'gridValuationOrder_TradeAsc',
319 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.tradePrice', 'ASC')
322 id: 'gridValuationOrder_TradeDesc',
323 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.tradePrice', 'DESC')
325 style : 'hidden-phone'
328 id: 'gridValuationColumn_Retail',
331 id: 'gridValuationOrder_RetailAsc',
332 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.retailPrice', 'ASC')
335 id: 'gridValuationOrder_RetailDesc',
336 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.retailPrice', 'DESC')
338 style: 'hidden-phone'
341 id: 'gridValuationColumn_List',
342 title: 'NEW LIST PRICE',
344 id: 'gridValuationOrder_ListAsc',
345 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.listPrice', 'ASC')
348 id: 'gridValuationOrder_ListDesc',
349 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.listPrice', 'DESC')
351 style : 'hidden-phone'
354 id: 'gridValuationColumn_Offer',
357 id: 'gridValuationOrder_OfferAsc',
358 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.highestOffer', 'ASC')
361 id: 'gridValuationOrder_OfferDesc',
362 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'stock.highestOffer', 'DESC')
367 id: 'gridValuationColumn_Sales',
370 id: 'gridValuationOrder_SalesAsc',
371 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'salesProfile.id', 'ASC')
374 id: 'gridValuationOrder_SalesDesc',
375 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'salesProfile.id', 'DESC')
377 style : 'hidden-phone'
380 id: 'gridValuationColumn_Manager',
383 id: 'gridValuationOrder_ManagerAsc',
384 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'managerProfile.id', 'ASC')
387 id: 'gridValuationOrder_ManagerDesc',
388 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'managerProfile.id', 'DESC')
390 style : 'hidden-phone'
393 id: 'gridValuationColumn_Status',
396 id: 'gridValuationOrder_StatusAsc',
397 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'valuation.jobState', 'ASC')
400 id: 'gridValuationOrder_StatusDesc',
401 bind: $.proxy(_w.valuation.orderValuationGrid, this, 'valuation.jobState', 'DESC')
407 'gridColumnFilters': {
408 constructor: 'GridColumnFilter',
411 id: 'gridValuationFilter_Make',
412 context: 'gridValuationFilter',
413 dataStoreId : 'filtermakes',
415 bind : function(meta){
416 _w.valuation.changes = 0;
417 $('#' + meta.id).change(function(e){
418 _w.valuation.changes++;
419 if (undefined == $(e.currentTarget).val() || 1 == _w.valuation.changes || 'Active' != _w.valuation.gridStatus)
423 _w.valuation.searchValuationGrid();
428 id: 'gridValuationFilter_Model',
429 context: 'gridValuationFilter'
432 id: 'gridValuationFilter_Type',
433 context: 'gridValuationFilter'
436 id: 'gridValuationFilter_Year',
437 context: 'gridValuationFilter'
440 id: 'gridValuationFilter_KM',
441 context: 'gridValuationFilter'
444 id: 'gridValuationFilter_Trade',
445 context: 'gridValuationFilter'
448 id: 'gridValuationFilter_Retail',
449 context: 'gridValuationFilter'
452 id: 'gridValuationFilter_Offer',
453 context: 'gridValuationFilter'
456 id: 'gridValuationFilter_Sales',
457 context: 'gridValuationFilter',
458 dataStoreId : 'sales',
460 bind : function(meta){
461 _w.valuation.changes = 0;
462 $('#' + meta.id).change(function(e)
464 if (_w.valuation.publishing || App.DataStore.getItem('BuildSelect:gridValuationFilter_Sales', false))
468 _w.valuation.searchValuationGrid();
473 id: 'gridValuationFilter_Manager',
474 context: 'gridValuationFilter',
475 dataStoreId : 'managers',
477 bind : function(meta){
478 _w.valuation.changes = 0;
479 $('#' + meta.id).change(function(e)
481 if (_w.valuation.publishing || App.DataStore.getItem('BuildSelect:gridValuationFilter_Manager', false))
485 _w.valuation.searchValuationGrid();
490 id: 'gridValuationFilter_Status',
491 context: 'gridValuationFilter',
492 dataStoreId : 'valuationstatuses',
494 bind : function(meta){
495 _w.valuation.changes = 0;
496 $('#' + meta.id).change(function(){
497 if (_w.valuation.publishing || App.DataStore.getItem('BuildSelect:gridValuationFilter_Status', false))
502 if (!_w.valuation.statusMenuOverride)
504 _w.valuation.searchValuationGrid();
507 if ($(this).val() == 'Archived')
509 _w.valuation.statusMenuOverride = true;
510 $('#gridValuationContext_Archived').selectpicker('val', 'onlyArchived');
518 'gridRowRepeater': {},
522 // Retrieve initial grid data.
523 _w.valuation.publishing = true;
524 if (null == App.API.taskContract('gridValuation'))
527 'gridValuation', 'Valuation', 'Valuation.Grid', null,
528 {}, $.proxy(_w.valuation.searchValuationGrid, this, null, {}, {}), _w.taskContractError
531 'gridValuation', 'Valuation', 'Valuation.Grid', null,
532 {}, _w.valuation.loadValuationGrid, _w.taskContractError
537 _w.valuation.loadValuationGrid();
541 onValuationsPublished : function()
544 // Show new menu Buttons for mobi only
545 var isMobile = 'none' == $('.header').css('display');
548 // show the mobi menu && hide old menu
549 $("#MobiAuctionPriceGuideMenu").show();
550 $("#MobiPortalMenu").hide();
552 // Check active state
553 $("#mobiAuctionBtn").removeClass("active");
554 $("#mobiPriceGuideBtn").removeClass("active");
555 $("#mobiValuationsBtn").addClass("active");
558 $("#mobiPriceGuideBtn").click(function() {
559 window.location.hash = '#/priceguide';
562 $("#mobiAuctionBtn").click(function() {
563 window.location.hash = '#/auction';
567 if (_w.valuationsArchiveDrop)
569 $('#gridValuationContext_Archived').selectpicker('val', _w.valuationsArchiveDrop);
573 $(".gridValuationFilter").keyup(function (evt) {
574 var charCode = evt.charCode || evt.keyCode;
575 if (charCode == 13) { //Enter key's keycode
576 $('#searchValuationGrid').click();
580 $(".gridValuationContext").keyup(function (evt) {
581 var charCode = evt.charCode || evt.keyCode;
582 if (charCode == 13) { //Enter key's keycode
583 $('#searchValuationGrid').click();
586 $('#gridValuationContext_notArchived').val('Archived,Stock');
588 var _p = App.permissions;
589 var _createValuationDisabled = (false == _p.valuationCreateNew && false == _p.valuationCreatePending
590 && false == _p.valuationCreatePriceguide && false == _p.valuationCreateSales
591 && false == _p.valuationCreateStock) ? true : false ;
593 $('#newValuation').prop('disabled', _createValuationDisabled);
594 $('#exportValuationGrid').prop('disabled', !App.permissions.valuationGridExport);
596 $('.dfrom').datepicker({format:"yyyy-mm-dd"});
597 $('.dto').datepicker({format:"yyyy-mm-dd"});
598 $('#gridValuationContext_DateFrom').val(_w.valuation.dFrom);
599 $('#gridValuationContext_DateTo').val(_w.valuation.dTo);
600 App.Event.listen('valuationGridSuFilter', 'SuChange', $.proxy(_w.valuation.clearValuationGridContext, this), 'Recurring');
602 _w.valuation.publishing = false;
603 setTimeout(_w.valuation.refreshGrid, 120000);
607 refreshGrid : function()
609 if ('valuations' != App.activePage)
613 _w.valuation.loadValuationGrid();
614 setTimeout(_w.valuation.refreshGrid, 120000);
617 pageValuationGrid : function( page )
619 _w.valuation.loadValuationGrid( {}, {"Grid":{"Page":page}} );
622 loadValuationGrid : function( contract, data, options )
624 //console.log('Filter value is', $('#gridValuationContext_Archived').val());
625 if ($('#gridValuationFilter_Status').val() == 'excludingArchived')
627 $('#gridValuationContext_notArchived').val('Archived,Stock');
628 if (undefined == data)
632 if (undefined == data.Grid)
636 if (undefined == data.Grid.Filter)
638 data.Grid.Filter = {};
640 data.Grid.Filter['valuation.jobState'] = 'NOT IN Archived,Stock';
642 //This comes back undefined if you are from a different page back to valuations
643 /* if ($('#gridValuationContext_Archived').val() == undefined)
645 data.Grid.Filter['valuation.jobState'] = 'NOT IN Archived,Stock';
650 'gridValuation', data, options,
651 _w.valuation._onValuationGridDataReceived, _w.taskExecError
656 _onValuationGridDataReceived : function( response )
660 console.log('Filter responses ',response.Data.Meta.Filters);
662 _w.valuation.gridStatus = 'Active';
663 _w.valuation.ti.hydrateParam('gridRowRepeater', {});
665 "New Valuation": true,
666 "Pending Valuation": true,
667 "Complete Valuation": true,
668 "Offer Accepted": true,
670 "Deal Not Done": true,
674 if (undefined != response.Data.Meta.Filters['valuation.jobState']
675 && undefined != statuses[response.Data.Meta.Filters['valuation.jobState']])
677 _w.populateFilters(response.Data.Meta.Filters, {
678 'stock.vinNumber': 'gridValuationContext_VIN',
679 'stock.registrationNumber': 'gridValuationContext_RegNo',
680 'stock.referenceNumber': 'gridValuationContext_RefNo',
681 'valuation.familyName': 'gridValuationContext_Name',
682 'make.id': 'gridValuationFilter_Make',
683 'model.name': 'gridValuationFilter_Model',
684 'type.name': 'gridValuationFilter_Type',
685 'vehicleYear.name': 'gridValuationFilter_Year',
686 'stock.km': 'gridValuationFilter_KM',
687 'stock.tradePrice': 'gridValuationFilter_Trade',
688 'stock.retailPrice': 'gridValuationFilter_Retail',
689 'stock.listPrice': 'gridValuationFilter_List',
690 'stock.highestOffer': 'gridValuationFilter_Offer',
691 'salesProfile.id': 'gridValuationFilter_Sales',
692 'managerProfile.id': 'gridValuationFilter_Manager',
693 'valuation.jobState': 'gridValuationFilter_Status'
698 _w.populateFilters(response.Data.Meta.Filters, {
699 'stock.vinNumber': 'gridValuationContext_VIN',
700 'stock.registrationNumber': 'gridValuationContext_RegNo',
701 'stock.referenceNumber': 'gridValuationContext_RefNo',
702 'valuation.familyName': 'gridValuationContext_Name',
703 'make.id': 'gridValuationFilter_Make',
704 'model.name': 'gridValuationFilter_Model',
705 'type.name': 'gridValuationFilter_Type',
706 'vehicleYear.name': 'gridValuationFilter_Year',
707 'stock.km': 'gridValuationFilter_KM',
708 'stock.tradePrice': 'gridValuationFilter_Trade',
709 'stock.retailPrice': 'gridValuationFilter_Retail',
710 'stock.listPrice': 'gridValuationFilter_List',
711 'stock.highestOffer': 'gridValuationFilter_Offer',
712 'salesProfile.id': 'gridValuationFilter_Sales',
713 'managerProfile.id': 'gridValuationFilter_Manager'
716 //valuation.jobState = "NOT IN Archived,Stock" >> excluding archived
717 //valuation.jobState = "Archived" >> only archived
718 /*if (undefined == response.Data.Meta.Filters['valuation.jobState'])
720 _w.valuation.statusMenuOverride = true;
721 $('#gridValuationContext_Archived').selectpicker('val', 'includingArchived');
723 else if ('NOT IN Archived,Stock' == response.Data.Meta.Filters['valuation.jobState'])
725 _w.valuation.statusMenuOverride = true;
726 $('#gridValuationContext_Archived').selectpicker('val', 'excludingArchived');
728 else if ('Archived' == response.Data.Meta.Filters['valuation.jobState'])
730 _w.valuation.statusMenuOverride = true;
731 $('#gridValuationContext_Archived').selectpicker('val', 'onlyArchived');
738 $('select.gridValuationFilter').each(function(i, elem) {
739 $(elem).selectpicker('refresh');
740 // Error: Resets status when status should be populated gridStockFilter
743 for (var i = 0; i < response.Data.DataSet.length; i++)
745 var row = response.Data.DataSet[i];
749 'New Valuation' == row.jobState
750 || 'Pending Valuation' == row.jobState
751 || 'Complete Valuation' == row.jobState
752 || 'Deal Not Done' == row.jobState
753 || ('Price Guide' == row.jobState
754 && row.stock.numberOfOffers == 0)
757 : 'limitedvaluationview',
764 pgId: row.stock.priceGuide.id,
765 offers: row.stock.priceGuide && row.stock.priceGuide.offers
766 ? row.stock.priceGuide.offers[0]
768 bind: function(meta) {
769 $('#row' + meta.rowId).click(function(e){
770 window.location='#/' + meta.surl + '?id=' + meta.rowId;
773 $('#ofr' + meta.rowId).click(function(e) {
779 var modalbody = '<div style="font-weight:bold;color:#9B2022;">There are no offers!</div>';
780 $('#modalbody').html(modalbody);
785 $('#modalbody').html('<center>Loading offers...</center>');
786 $('#myModal').modal('toggle');
789 'offerList', 'PriceGuide', 'Offer.List',
790 meta.pgId, {}, function(){
795 var offers = response.Data;
798 var modalbody = '<table class="table table-bordered table-condensed table-striped">';
799 modalbody += '<tr><td>Company</td><td>Date Offered</td><td>Amount</td></tr>';
800 for (var x in offers)
802 var isOwn = offers[x].company.id == App.companyData.id
806 '<tr class="modalrow ' + (isOwn ? 'red' : 'black') + '">'
807 + '<td class="date">' + offers[x].company.name + '</td>'
808 + '<td class="date">' + offers[x].created + '</td>'
809 + '<td class="wide">' + offers[x].amount + '</td>'
812 modalbody += '</table>';
816 var modalbody = '<div style="font-weight:bold;color:#9B2022;">There are no offers!</div>';
818 $('#modalbody').html(modalbody);
821 }, _w.taskContractError
826 Make : 'make hidden-phone',
827 Model : 'hidden-phone',
831 Trade : 'hidden-phone',
832 Retail : 'hidden-phone',
834 Sales : 'hidden-phone',
835 Manager : 'hidden-phone',
842 'Make' : row.stock.type.model.make.name,
843 'Model' : row.stock.type.model.name,
844 'Type' : row.stock.type.name,
845 'Year' : row.stock.vehicleYear.name,
847 'Trade' : row.stock.tradePrice,
848 'List' : row.stock.listPrice,
849 'Retail' : 'Dealership Sales' == App.permissions.name
850 ? row.stock.highestOffer
851 : row.stock.retailPrice,
852 'Offer' : 'Dealership Sales' == App.permissions.name
854 : (App.permissions.name == 'Dealership Manager (Used)' || App.permissions.name == 'Dealership Manager (New)'
855 ? row.amountOffered + ' '
856 : row.stock.highestOffer + ' ')
857 + '<a class="soda_pop " id="ofr' + row.id + '"><span>' + row.stock.numberOfOffers + '</span></a>',
858 'Sales' : row.salesProfile.firstName
859 ? row.salesProfile.firstName + ' ' + row.salesProfile.familyName
861 'Manager': row.managerProfile.firstName
862 ? row.managerProfile.firstName + ' ' + row.managerProfile.familyName
864 'Status' : row.jobState
869 _w.valuation.ti.hydrateParam('gridRowRepeater', {
870 constructor : 'GridDataRow',
873 response.Data.Meta.itemName = 'stockPager';
874 response.Data.Meta.bind = _w.valuation.pageValuationGrid;
875 _w.valuation.ti.hydrateParam('gridPager', {
876 constructor : 'GridPager',
877 items : [response.Data.Meta]
880 // todo: add pager hydration
883 valuationReport : function()
885 window.location.hash = '/valuationreport';
888 exportValuationGrid : function()
891 'gridValuation', {}, {'ExportToExcel': true},
892 _w.valuation._onExportReceived, _w.taskExecError,
897 newValuation : function()
899 window.location.hash = '/valuationview?id=0';
902 _onExportReceived : function( response )
904 var win = window.open();
905 win.document.write(response);
908 clearValuationGridContext : function()
910 _w.valuation.gridStatus = 'Inactive';
913 $('select.gridValuationFilter').each(function(i, elem) {
915 $(elem).selectpicker('refresh');
923 $('.gridValuationContext').val('');
924 $('.gridValuationFilter').val('');
925 $('#gridValuationContext_notArchived').val('Archived,Stock');
927 _w.valuation.dFrom = '';
928 _w.valuation.dTo = '';
929 _w.valuation.searchValuationGrid(true);
934 searchValuationGrid : function(resetOrder)
936 if ($('#gridValuationFilter_Status').val() == 'excludingArchived' ){
937 $('#gridValuationContext_notArchived').val('Archived,Stock');
939 _w.valuation.gridStatus = 'Inactive';
948 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_VIN', 'stock.vinNumber');
949 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_RegNo', 'stock.registrationNumber');
950 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_RefNo', 'stock.referenceNumber');
951 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_Name', 'valuation.familyName');
952 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_DateFrom', 'stock.created', '>=');
953 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_DateTo', 'stock.created', '<=', ' 23:59:59');
954 filter = _w.filterIfnotEmpty(filter, 'gridValuationContext_notArchived', 'valuation.jobState', 'NOT IN');
956 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Make', 'make.id');
957 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Model', 'model.name');
958 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Type', 'type.name');
959 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Year', 'vehicleYear.name');
960 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_KM', 'stock.km');
961 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Trade', 'stock.tradePrice');
962 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Retail', 'stock.retailPrice');
963 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_List', 'stock.listPrice');
964 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Offer', 'stock.highestOffer');
965 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Sales', 'salesProfile.id');
966 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Manager', 'managerProfile.id');
967 filter = _w.filterIfnotEmpty(filter, 'gridValuationFilter_Status', 'valuation.jobState');
969 var request = {"Grid":{
971 "Filter": filter.filters
975 request.Grid.OrderBy = {'stock.created': 'DESC'};
978 _w.valuation.loadValuationGrid( null, request, {} );
981 orderValuationGrid : function(field, direction)
984 order[field] = direction;
985 _w.valuation.loadValuationGrid( {}, {"Grid":{"Page": 1, "OrderBy": order}} );