· 6 years ago · May 20, 2019, 08:58 AM
1
2
3//Intercept Fetch APis ajax calls and call our custom functions.
4const constantMock = window.fetch;
5
6window.fetch = function () {
7
8
9 return new Promise((resolve, reject) => {
10
11 constantMock.apply(this, arguments)
12 .then((response) => {
13
14 if (response.url.indexOf("/log/?explode=events&dashboard_id") > -1 && response.type != "cors") {
15 //URL specific activities can we write here
16 }
17
18 resolve(response);
19 applyCustomFeatures(); //calling all the custom functions.
20 })
21 .catch((error) => {
22 reject(error);
23 });
24 });
25
26
27}
28
29
30
31function applyCustomFeatures() {
32
33
34 // $("#TABS-nKw7NW43cP-tab-1").click(function(){
35 // var myVar = setInterval(function(){ insertLegend();clearInterval(myVar) }, 3000);
36 // });
37 //select tab based on the URL parameter
38 selectTab();
39 insertLegend();
40 //show info link on top of each graph
41 createInfoLink();
42
43 //Enable drill down option
44 createDrillDown();
45
46 //show hidden month labels on the X axis of the graphs
47 showMonthLabels();
48
49 //highlight current page hyperlink
50 formatTabHyperlinks();
51
52 //for drilldown data page
53 searchWithMonth();
54
55 toShowBackButton();
56
57 adjustFilterGrid();
58
59}
60
61function adjustFilterGrid() {
62 $('.slice_container').each(function () {
63 var title = $(this).parent().parent().parent().find("input").val(); //Find title of the graph
64 var dashboardSlug = convertToSlug(title);
65 console.log(dashboardSlug)
66 if (dashboardSlug == "choose-filter") {
67 $(this).find(".m-b-5").addClass("col-md-3 col-sm-3");
68 $(this).find(".space-1").removeClass("row space-1").addClass("m-b-5 m-t-10 col-md-3 col-sm-3");
69 }
70 })
71}
72
73
74// displaying hidden scale and ainsertion of legend
75function insertLegend() {
76
77 $('.bullet').each(function () {
78 var parentOfBullet = $(this).parent().parent() //Find title of the graph
79 $(this).children('div').first().css("height", "75px");
80 $("<div id='legend' style='position: absolute;right: 130px;top: 17px;width:50%;text-align: right;'><span style='height: 10px;width: 10px;background-color: rgb(31, 119, 180);border-radius: 50%;display: inline-block;'></span><span style='padding: 5px;'>current</span></div>").insertBefore(parentOfBullet);
81 });
82
83}
84
85//Go through each of the graph placed on the dashboard and add info lnk
86function createInfoLink() {
87 //restrict info link only for home page dashboard. So for identifying that we are checking whether it has three tabs
88 if ($('ul.nav.nav-tabs li a').children().find("input").length == 4) {
89
90 $('.slice_container').each(function () {
91 var title = $(this).parent().parent().parent().find("input").val(); //Find title of the graph
92 dashboardSlug = convertToSlug(title);
93 // selectedChartId = ($(this).parent().parent().parent().find("button").attr('id').replace("slice_","")).replace("-controls","")
94 var dashboardURL = "/superset/dashboard/" + dashboardSlug + "/" //Create dashboard URL
95 if (dashboardSlug.indexOf("date-interval") != -1) {
96 return true;
97 }
98 var selectedChartId = ($(this).parent().parent().parent().find("button").attr('id').replace("slice_", "")).replace("-controls", "")
99
100 let downloadCsvUrl = "http://10.10.10.151:8088/superset/explore_json/?form_data=%7b%22slice_id%22%3A" + selectedChartId + "%7D&csv=true"
101 $(this).parent().parent().parent().parent().prepend("<a class='customHoverIcon' style='color: #dcd8d8; height: 25px;border: none; width: 25px;padding: 0px;z-index: 99; top: 20px; right: 89px;position: absolute;' href='" + downloadCsvUrl + "'><i class='fa fa-download fa-lg'></i></a>");
102 $(this).parent().parent().parent().parent().prepend("<a href='" + dashboardURL + "' class='external-link customHoverIcon'><i class='fa fa-external-link'></i></a>");
103 $(this).parent().parent().parent().parent().prepend("<button class='customHoverIcon' style='color: #dcd8d8;background: white; height: 25px;border: none; width: 25px;padding: 0px;z-index: 99; right: 66px;position: absolute;top: 13px;' id='settingsButton' onclick='goalSettingsButtonPressed(\"" + dashboardSlug.replace(/-/g, " ") + "\",\"" + selectedChartId + "\")'><i class='fa fa-cogs fa-lg'></i></button>");//Place generated hyperlink on the graph
104 $(".customHoverIcon").hover(
105 function () {
106 $(this).css('color', '#484848')
107 }, function () {
108 $(this).css('color', '#dcd8d8')
109 });
110 });
111 }
112}
113
114function closePopUp() {
115 $('#modalgrid').modal('hide');
116}
117
118
119var popUpGridOptions
120var noGoalDataAvailable;
121var dataDic
122var rowData
123function goalSettingsButtonPressed(clickedChartTitle, selectedChartId) {
124 console.log(clickedChartTitle, selectedChartId)
125 var loader = $("<div id='loading' style='width: 100%;height: 100%;display: block;opacity: 0.7;background-color: #0000;-index: 99;text-align: center;'><img id='loading-image' src='https://lupient-demo.fixedops.cc/static/assets/images/loading.gif' style='position: absolute;top: 100px;z-index: 100;' alt='Loading...'/></div>");
126 if ($("#myGrid").length == 0) {
127 $("<div id='modalgrid' class='modal' style='z-index:999999;width: 79%;height: 296px;margin: auto;padding: 25px;padding-top: 0px;'><div id='popUPheader' style='font-size: 15px;font-weight: bold;background: #4a4c4c;color: white;width: 100%;padding: 7px;text-align: center;height: 35px;border: none;'>" + capitalizeFirstLetter(clickedChartTitle.replace(/-/g, " ")) + " : Set goal values</div><div id='myGrid' style='padding: 25px;height: 170px;' class='ag-theme-balham'></div><div style=' padding-bottom: 10px;background: white;margin: auto;text-align: center;'><p style='text-align: right; margin: 0px;margin-right: 25px;'>Double click on the cell to edit</p><button onclick='closePopUp()' style='background: #4a4c4c ;margin-right: 10px;color: white;width: 15%;height: 35px;'>CANCEL</button><button onclick='goalUpdateButtonPressed(\"" + selectedChartId + "\")' style='background: #4a4c4c;color: white;width: 15%; margin-left: 10px;height: 35px;'>UPDATE</button></div></div>").modal('show');
128
129 } else {
130 $("#modalgrid").remove()
131 $("<div id='modalgrid' class='modal' style='z-index:999999;width: 79%;height: 296px;margin: auto;padding: 25px;padding-top: 0px;'><div style='font-size: 15px;font-weight: bold;background: #4a4c4c;color: white;width: 100%;padding: 7px;text-align: center;height: 35px;border: none;'>" + capitalizeFirstLetter(clickedChartTitle.replace(/-/g, " ")) + " : Set goal values</div><div id='myGrid' style='padding: 25px;height: 170px;' class='ag-theme-balham'></div><div style=' padding-bottom: 10px;background: white;margin: auto;text-align: center;'><p style='text-align: right; margin: 0px;margin-right: 25px;'>Double click on the cell to edit</p><button onclick='closePopUp()' style='background: #4a4c4c ;margin-right: 10px;color: white;width: 15%;height: 35px;'>CANCEL</button><button onclick='goalUpdateButtonPressed(\"" + selectedChartId + "\")' style='background: #4a4c4c;color: white;width: 15%; margin-left: 10px;height: 35px;'>UPDATE</button></div></div>").modal('show');
132
133 // $("<div id='modalgrid' class='modal' style='width: 79%;height: 266px;margin: auto;padding: 25px;padding-top: 0px;'><div style='font-size: 15px;font-weight: bold;background: #00a699;color: white;width: 100%;padding: 7px;text-align: center;height: 35px;border: none;'>"+capitalizeFirstLetter(clickedChartTitle.replace(/-/g, " "))+" : Goal values</div><div id='myGrid' style='padding: 25px;height: 170px;' class='ag-theme-balham'></div><button onclick='closePopUp()' style='font-size: 15px;font-weight: bold;background: #00a699;color: white;width: 50%;height: 35px;'>CANCEL</button><button onclick='goalUpdateButtonPressed()' style='font-size: 15px;font-weight: bold;background: #00a699;color: white;width: 50%;height: 35px;'>UPDATE</button></div>").modal('show');
134
135 }
136 loader.insertAfter("#myGrid")
137
138 var columnDefs = [{
139 headerName: "", field: "none"
140 , pinned: 'left', width: 300, cellStyle: { 'font-weight': 'bold' }
141 },
142 {
143 // , cellRenderer: function (params) {
144 // return "<input value=" + params.value + "></input>"
145 // }
146 headerName: "Jan", field: "jan"
147 },
148 {
149 headerName: "Feb", field: "feb"
150 },
151 {
152 headerName: "Mar", field: "mar"
153 },
154 {
155 headerName: "Apr", field: "apr"
156 },
157 {
158 headerName: "May", field: "may"
159 },
160 {
161 headerName: "Jun", field: "jun"
162 },
163 {
164 headerName: "Jul", field: "jul"
165 },
166 {
167 headerName: "Aug", field: "aug"
168 },
169 {
170 headerName: "Sep", field: "sep"
171 },
172 {
173 headerName: "Oct", field: "oct"
174 },
175 {
176 headerName: "Nov", field: "nov"
177 },
178 {
179 headerName: "Dec", field: "dec"
180 },
181
182 ];
183
184 rowData = [
185 { none: "Repair", jan: 0, feb: 0, mar: 0, apr: 0, may: 0, jun: 0, jul: 0, aug: 0, sep: 0, oct: 0, nov: 0, dec: 0 },
186 { none: "Maintenance", jan: 0, feb: 0, mar: 0, apr: 0, may: 0, jun: 0, jul: 0, aug: 0, sep: 0, oct: 0, nov: 0, dec: 0 },
187 { none: "Competitive", jan: 0, feb: 0, mar: 0, apr: 0, may: 0, jun: 0, jul: 0, aug: 0, sep: 0, oct: 0, nov: 0, dec: 0 },
188
189 ];
190
191 popUpGridOptions = {
192 defaultColDef: {
193 editable: true,
194 resizable: true
195 },
196 columnDefs: columnDefs,
197 rowData: null
198 };
199 var date = new Date()
200 const query = '{"query":"{\n lupient_vw_ux_goal_settings' + '(where: {year: {_eq: \\"' + date.getFullYear() + '\\"}, chart_id: {_eq:' + selectedChartId + '}})' + '{\n goal_id\n datemonth\n goal_value\n opcode_category\n adviser_id\n chart_id\n }\n}","variables":null}'
201
202 $.ajax({
203 url: "http://10.10.10.169:8080/v1alpha1/graphql",
204 contentType: "application/json",
205 dataType: 'json',
206 type: 'POST',
207 beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
208 data: query,
209 success: function (result) {
210 var resultData = JSON.parse(JSON.stringify(result));
211 dataDic = resultData["data"]["lupient_vw_ux_goal_settings"]
212 console.log(dataDic)
213 if (dataDic.length == 0) {
214 console.log("no data")
215 noGoalDataAvailable = true
216 } else {
217 noGoalDataAvailable = false
218 const monthNames = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
219
220 for (i = 0; i < dataDic.length; i++) {
221 // if (i == 2){
222 console.log(dataDic[i])
223 console.log(monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()])
224 console.log(new Date([dataDic[i]["datemonth"]]))
225
226 // }
227 if (dataDic[i]["opcode_category"] == "REPAIR") {
228 rowData[0][monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] = dataDic[i]["goal_value"]
229 } else if (dataDic[i]["opcode_category"] == "MAINTENANCE") {
230 rowData[1][monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] = dataDic[i]["goal_value"]
231 } else {
232 rowData[2][monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] = dataDic[i]["goal_value"]
233 }
234
235 }
236
237 }
238 $('#loading').hide();
239 var gridDiv = document.querySelector('#myGrid');
240 new agGrid.Grid(gridDiv, popUpGridOptions);
241 popUpGridOptions.api.setRowData(rowData);
242 popUpGridOptions.api.sizeColumnsToFit();
243
244
245
246 }
247
248 });
249
250}
251function goalUpdateButtonPressed(selectedChartId) {
252
253
254 popUpGridOptions.api.stopEditing()
255 const monthNames = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
256
257 var count = popUpGridOptions.api.getDisplayedRowCount();
258 console.log('## printAllDisplayedRows');
259 var datDict = []
260 for (var i = 0; i < count; i++) {
261 var rowNode = popUpGridOptions.api.getDisplayedRowAtIndex(i);
262 var opcat = ["REPAIR", "MAINTENANCE", "COMPETITIVE"]
263 for (var k = 0; k < monthNames.length; k++) {
264 let value = '{\n \n adviser_id:' + 1 + ', \n goal_date: \\"2019-' + parseInt(parseInt(k) + parseInt(1)) + '-01\\", \n goal_value:' + rowNode.data[monthNames[k]] + ', \n chart_id:' + selectedChartId + ', \n opcode_category:\\"' + opcat[i] + '\\"}'
265 datDict.push(value)
266 }
267
268 }
269 if (noGoalDataAvailable == true) {
270 //first time insertion
271 sendGoalToDB(datDict)
272 } else {
273 console.log("updating...")
274 getChangedRows()
275 }
276
277}
278function getChangedRows() {
279 const monthNames = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
280 var rowNode = popUpGridOptions.api.getDisplayedRowAtIndex(0);
281 console.log(dataDic)
282 console.log(rowNode.data)
283
284 for (i = 0; i < dataDic.length; i++) {
285 if (dataDic[i]["opcode_category"] == "REPAIR") {
286 var rowNode = popUpGridOptions.api.getDisplayedRowAtIndex(0);
287 console.log(rowNode.data)
288 console.log(dataDic[i])
289 if (rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] === dataDic[i]["goal_value"]) {
290 console.log("no Value change")
291 } else {
292 console.log("value has changed")
293 updateChangedGoalToDb(dataDic[i]["goal_id"], rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]])
294 }
295 } else if (dataDic[i]["opcode_category"] == "MAINTENANCE") {
296 var rowNode = popUpGridOptions.api.getDisplayedRowAtIndex(1);
297 if (rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] === dataDic[i]["goal_value"]) {
298 console.log("no Value change")
299 } else {
300 console.log("value has changed")
301 updateChangedGoalToDb(dataDic[i]["goal_id"], rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]])
302 }
303 } else {
304 var rowNode = popUpGridOptions.api.getDisplayedRowAtIndex(2);
305 if (rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]] === dataDic[i]["goal_value"]) {
306 console.log("no Value change")
307 } else {
308 console.log("value has changed")
309 updateChangedGoalToDb(dataDic[i]["goal_id"], rowNode.data[monthNames[(new Date([dataDic[i]["datemonth"]])).getMonth()]])
310 }
311 }
312
313 }
314}
315
316function updateChangedGoalToDb(goalId, goalValue) {
317 var query = '{"query":"mutation update_goal_settings {\n update_lupient_goal_settings(\n where: {goal_id: {_eq: ' + goalId + '}},\n _set: {\n goal_value: ' + goalValue + '\n \n }\n ) {\n affected_rows\n returning {\n goal_id\n }\n }\n}","variables":null,"operationName":"update_goal_settings"}'
318 console.log(query)
319 ajax_request = $.ajax({
320 url: "http://10.10.10.169:8080/v1alpha1/graphql",
321 contentType: "application/json",
322 dataType: 'json',
323 type: 'POST',
324 beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
325 data: query,
326 success: function (result) {
327 console.log("success")
328 console.log(result)
329 $('#modalgrid').modal('hide');
330 }
331 })
332
333}
334function sendGoalToDB(dict) {
335 var query = ' {"query":"mutation insert_goal_settings {\n insert_lupient_goal_settings(\n objects: [\n ' + dict + '\n ]\n ) {\n returning {\n \n goal_id\n }\n }\n}\n","variables":null,"operationName":"insert_goal_settings"}'
336 console.log(query)
337 ajax_request = $.ajax({
338 url: "http://10.10.10.169:8080/v1alpha1/graphql",
339 contentType: "application/json",
340 dataType: 'json',
341 type: 'POST',
342 beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
343 data: query,
344 success: function (result) {
345 console.log("success")
346 console.log(result)
347 $('#modalgrid').modal('hide');
348
349 }
350 })
351}
352//Make slices clickable and enable drilldown option.
353function createDrillDown() {
354
355 //console.log("LENGTH = "+$(".nv-bar,.nv-point,.nv-measure").length);
356
357 // restirct below code on drilldown pages
358 const urlParams = new URLSearchParams(window.location.search);
359 const myParam = urlParams.get('month');
360 if (myParam == null) {
361
362 if ($(".nv-bar,.nv-point,.nv-measure").length < 25) {
363 //console.log("TIMEOUT");
364 setTimeout(function () { createDrillDown(); }, 3000);
365 }
366 }
367 //
368
369 //add mouse point events on the following events. By default it is disabled by Superset.
370 d3.selectAll(".nv-distx, .nv-disty, .nv-noninteractive, .nvd3 .nv-axis, .nvd3.nv-pie .nv-label, .nvd3.nv-sparklineplus g.nv-hoverValue").each(function () {
371
372 $(this).css("pointer-events", "all");
373 });
374
375
376 const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"];
377
378 //add hand cursor on Chart's data points
379 d3.selectAll(".nv-bar, .nv-slice, .nv-point, .nv-measure, .vx-area").each(function () {
380
381 $(this).css("cursor", "pointer");
382 });
383
384 d3.selectAll(".nv-bar").on('click',
385 function (e) {
386
387 var date = new Date(e.x);
388 var month = monthNames[date.getMonth()]
389 var classOfParent = $(this).parents().eq(12)
390 // console.log(classOfParent)
391 // var ClassName = classOfParent.replace(' ', '.');
392 var title = $(this).parents().eq(12).find("input").val();
393 console.log(title)
394 var titleSlug = getDrillDownURL(title);
395 const parameter = month + ' ' + date.getFullYear()
396 window.location.href = '/superset/dashboard/drill-down-data/?table=' + titleSlug + '&month=' + parameter;
397
398 });
399
400
401 d3.selectAll(".nv-slice").on('click',
402 function (e) {
403 // var idOfParent = $(this).parents().eq(8).attr('id');
404 // var title = $('#' + idOfParent).parent().parent().parent().parent().find("input").val();
405 $(this).parents().eq(11).find("input").val();
406 var titleSlug = getDrillDownURL(title);
407 const parameter = e.data.x
408 window.location.href = '/superset/dashboard/drill-down-data/?table=' + titleSlug + '&month=' + parameter;
409
410 });
411
412 d3.selectAll(".nv-point").style("pointer-events", "all").on("mouseover", function (e) {
413 $(this).css("cursor", "pointer");
414 });
415
416 d3.selectAll(".nv-point").style("pointer-events", "all").on("click", function (e) {
417 //console.log( JSON.stringify( e ) );
418
419 var date = new Date(e[0].x);
420 var month = monthNames[date.getMonth()]
421 // var classOfParent = $(this).parents().eq(13).attr('class');
422 // var ClassName = classOfParent.replace(' ', '.');
423 // var title = $('.' + ClassName).parent().parent().parent().parent().find("input").val();
424 var title = $(this).parents().eq(16).find("input").val();
425 var titleSlug = getDrillDownURL(title);
426 const parameter = month + ' ' + date.getFullYear()
427 window.location.href = '/superset/dashboard/drill-down-data/?table=' + titleSlug + '&month=' + parameter;
428
429
430
431 });
432
433 //for bullet graph
434 d3.selectAll(".nv-measure").on('click',
435 function (e) {
436 var title = $(this).parents().eq(11).find("input").val();
437 var titleSlug = getDrillDownURL(title);
438 console.log(titleSlug)
439 window.location.href = '/superset/dashboard/drill-down-data/?table=' + titleSlug + '&month=all';
440
441 });
442
443
444 //for trend graph
445 d3.selectAll(".vx-area").on('click',
446 function (e) {
447
448 var idOfParent = $(this).parents().eq(7).attr('id');
449 var title = $('#' + idOfParent).parent().parent().parent().parent().find("input").val();
450 var titleSlug = getDrillDownURL(title);
451 window.location.href = '/superset/dashboard/' + titleSlug + '/?month=all';
452 });
453
454 //format numbers
455 formatBigNumbers();
456
457
458
459}//function
460
461
462
463//This function is used to search with month on Drill down data page.
464function searchWithMonth() {
465
466 const urlParams = new URLSearchParams(window.location.search);
467 const myParam = urlParams.get('month');
468 if (myParam != null) {
469
470 $('.dataTables_filter').children().each(function () {
471 $(this).children('input').attr('id', 'serach_field_input');
472
473 $('#serach_field_input').val(myParam)
474 $("#serach_field_input").focus();
475
476 var e = $.Event("keyup", { keyCode: 13 });
477 $("#serach_field_input").trigger(e);
478
479 });
480
481 $(".editable-title").not(":even").hide();
482 $(".external-link").remove();
483
484
485
486 showHyperlinkOnDrillDownData(); //Add hyperlink and bind click event on RO ID coloumn of drill down data table.
487
488 showDrillDownSum()//show sum values on the bottom areas of drill down data
489
490 }
491}
492
493function showHyperlinkOnDrillDownData() {
494
495 $(".table tr").each(function () {
496
497 var roData = $(this).find("td:first").text();
498 var myLink = "<a href='#' class='popup'>" + roData + "</a>";
499 var roData = $(this).find("td:first").html(myLink);
500
501 });
502
503
504 $('.popup').click(function () {
505
506 var roNumber = $(this).text();
507 getROData(roNumber);
508
509 });
510}
511
512//show back button on inner pages
513function toShowBackButton() {
514
515 //not show on the home dashboard
516 if (window.location.href.indexOf("/fixedops-command-center") > -1) {
517 return false;
518 }
519 //check whether the backbutton already exists
520 if ($('#my_back_button').length) {
521 return false;
522 }
523
524 $(".button-container:first").prepend('<span id="my_back_button" style="margin-top: 2px;text-decoration: underline;font-size: 17px;"><a title="Go back" href="/superset/dashboard/fixedops-command-center">Go back</a></span>');
525
526}
527
528
529function convertToSlug(Text) {
530 return Text.toLowerCase().replace(/ +/g, '-');
531
532 // return Text.toLowerCase().replace(/[^\w ]+/g, '').replace(/ +/g, '-');
533}
534
535function showMonthLabels() {
536
537 $("text").css("opacity", "1");
538
539 $("text").text(function () {
540 return $(this).text().replace("2018", "January");
541 });
542}
543
544
545
546//This function is used to highlight the hyperlinks of Tab feature
547function formatTabHyperlinks() {
548
549 if (window.location.href.indexOf("kpi") > -1) {
550 $('h1 a:not(:contains("KPI"))').css('color', '#73d6ce');
551 } else if (window.location.href.indexOf("sales") > -1) {
552 $('h1 a:not(:contains("Sales"))').css('color', '#73d6ce');
553 } else {
554 $('h1 a:not(:contains("Overview"))').css('color', '#73d6ce');
555 }
556
557}
558
559//This function is used to create drill down pages URL based on the current page URL
560function getDrillDownURL(title) {
561 if (!title) return false;
562 var slugString = convertToSlug(title);
563 return slugString;
564}
565
566//Select specific tab based on the URL parameter
567//Mainly this works when the user comming from a drilldown or detail page.
568function selectTab() {
569
570
571 var objParam = new URLSearchParams(window.location.search);
572 var tabParam = objParam.get('tab');
573 var tabName = "";
574
575 if (!tabParam) return false;
576
577 if (tabParam == "o") {
578 tabName = "Overview";
579 } else if (tabParam == "k") {
580 tabName = "KPI";
581 } else if (tabParam == "s") {
582 tabName = "Sales";
583 }
584
585 $('ul.nav.nav-tabs li a').children().find("input").each(function () {
586
587 if ($(this).val() == tabName) {
588
589 $(this).trigger("click");
590
591 window.history.pushState("object or string", "Title", "/superset/dashboard/fixedops-command-center");
592 }
593
594 });
595
596
597
598}
599
600function formatBigNumbers() {
601 $(".big_number").children().find("span").each(function () {
602
603 var myVal = $(this).text()
604
605 if ($(this).text().indexOf('.') != -1) {
606 if ($(this).text().split(".")[1].length > 2) {
607 var firstPart = $(this).text().split(".")[0];
608 var secondPart = $(this).text().split(".")[1].substr(0, 2);
609 myVal = firstPart + "." + secondPart;
610 }
611 }
612
613 myVal = myVal + "/month";
614 $(this).text(myVal);
615 $(this).css("font-size", "45px");
616
617 });
618}
619
620
621
622
623
624
625function showDrillDownSum() {
626
627 $("<table style='width: 100%; font-size:12px; padding:5px;'><tr> <th padding: 5px;' id='totalRowCount' ></th><th style=' padding: 5px;' ></th> <th padding: 5px;' id='totalLaborRevenue'></th><th style='padding: 5px;' id='totalPartsRevenue'></th> <th style='padding: 5px;'></th></tr> </table>").insertAfter("#DataTables_Table_0_wrapper");
628
629 $("th").css("width", "20%");
630 var partsRevenuetitle = $('table').find('th').eq(3).html()
631 if (partsRevenuetitle === "parts_revenue") {
632 var totalPartsRevenue = $('#DataTables_Table_0').DataTable().column(3, { page: 'current' }).data().reduce(function (a, b) {
633 return parseFloat(a) + parseFloat(b);
634 });
635 $('#totalPartsRevenue').text('Total Parts Revenue : ' + parseInt(totalPartsRevenue));
636
637 }
638
639
640 var laborRevenuetitle = $('table').find('th').eq(2).html()
641 if (laborRevenuetitle === "labor_revenue") {
642 var totalLaborRevenue = $('#DataTables_Table_0').DataTable().column(2, { page: 'current' }).data().reduce(function (a, b) {
643 return parseFloat(a) + parseFloat(b);
644 });
645 $('#totalLaborRevenue').text('Total Labour Revenue: ' + parseInt(totalLaborRevenue));
646
647 }
648 var rowCount = $('#DataTables_Table_0').DataTable().column(3, { page: 'current' }).data().length;
649 $('#totalRowCount').text('Row Count : ' + rowCount);
650
651
652}
653
654
655
656var ajaxLoopCount = 0;
657var gridOptionsTop
658function addDrillDownData(params) {
659
660 console.log(params)
661 var columnDefs = [];
662 var botomColumnDef = []
663 var BottomGrid = {};
664
665 var i;
666 for (i = 0; i < params.columnsNeeded.length; i++) {
667 if (i == 0) {
668 var value = { headerName: params.columnHeader[i], field: params.columnsNeeded[i], cellStyle: { color: 'blue', 'text-decoration': 'underline' } }
669 columnDefs.push(value)
670
671 } else if (params.columnsNeeded[i] === "ro_date") {
672 var value = {
673 headerName: params.columnHeader[i], field: params.columnsNeeded[i], cellRenderer: function (result) {
674 return (new Date(result.data["ro_date"])).toLocaleDateString("en-US")
675 }
676 }
677 columnDefs.push(value)
678 BottomGrid[params.columnsNeeded[i]] = ''
679
680 } else {
681 var value = { headerName: params.columnHeader[i], field: params.columnsNeeded[i] }
682 columnDefs.push(value)
683 BottomGrid[params.columnsNeeded[i]] = ''
684
685 }
686 botomColumnDef.push({ headerName: params.columnsNeeded[i], field: params.columnsNeeded[i], cellStyle: { 'color': '#000000ad', 'font-weight': 'bold' } })
687
688 }
689
690 var dataForBottomGrid = [BottomGrid];
691
692 // this is the grid options for the top grid
693 gridOptionsTop = {
694 defaultColDef: {
695 sortable: true,
696 resizable: true
697 },
698 columnDefs: columnDefs,
699 rowData: null,
700 debug: true,
701 suppressHorizontalScroll: true,
702 alignedGrids: [], rowSelection: 'single',
703 onSelectionChanged: onDrillDownRowSelected
704 };
705
706 // this is the grid options for the bottom grid
707 var gridOptionsBottom = {
708 defaultColDef: {
709 resizable: true
710 },
711 columnDefs: botomColumnDef,
712 rowData: null,
713 debug: true,
714 rowClass: 'bold-row',
715 headerHeight: 0,
716 alignedGrids: []
717 };
718
719 gridOptionsTop.alignedGrids.push(gridOptionsBottom);
720 gridOptionsBottom.alignedGrids.push(gridOptionsTop);
721
722 if (ajaxLoopCount == 0) {
723 ajaxLoopCount = ajaxLoopCount + 1
724 var j;
725
726 //////////////////
727
728var monthParam ='';
729if(params.month !== 'all' && params.lbrType ==null ){
730
731monthParam = '(where: {mon_year: {_eq: \\"' + params.month + '\\"}})';
732}
733else
734if(params.lbrType !=null & params.month !== 'all' ){
735
736monthParam = '(where: {mon_year: {_eq: \\"' + params.month + '\\"}, lbrlabortype: {_eq: '+params.lbrType+'}})';
737}
738if(params.lbrType & params.month === 'all' ){
739monthParam = '(where: { lbrlabortype: {_eq: '+params.lbrType+'}})';
740}else
741
742if(params.lbrType ==null & params.month === 'all' ){
743monthParam = "";
744}
745
746
747 //////////////////////////////
748
749 var lbrParam='';
750 var query = ''
751
752 query = '{"query":"{\n' + params.tableName + monthParam + '{'
753
754 for (j = 0; j < params.columnsNeeded.length; j++) {
755 if (j == params.columnsNeeded.length - 1) {
756 query = query + '\n' + params.columnsNeeded[j] + '\n }\n}\n","variables":null}'
757 } else {
758 query = query + '\n' + params.columnsNeeded[j]
759 }
760 }
761
762
763 ajax_request = $.ajax({
764 url: "http://10.10.10.169:8080/v1alpha1/graphql",
765 contentType: "application/json",
766 dataType: 'json',
767 type: 'POST',
768 beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
769 data: query,
770 success: function (result) {
771 var roData = JSON.parse(JSON.stringify(result));
772 console.log(roData)
773 var gridDivTop = document.querySelector('#myGridTop');
774 new agGrid.Grid(gridDivTop, gridOptionsTop);
775 var gridDivBottom = document.querySelector('#myGridBottom');
776 new agGrid.Grid(gridDivBottom, gridOptionsBottom);
777 gridOptionsTop.api.sizeColumnsToFit();
778 $('#loading').hide();
779 gridOptionsTop.api.setRowData(roData["data"][params.tableName]);
780 var k;
781 var titleArray = ["labor_revenue", "parts_revenue", "labor_cost", "parts_cost"]
782 var m;
783 for (m = 0; m < params.columnsNeeded.length; m++) {
784 var isIncluded = titleArray.includes(params.columnsNeeded[m]);
785 var sum = 0
786 if (isIncluded == true) {
787 BottomGrid[params.columnsNeeded[0]] = 'TOTAL'
788
789 for (k = 0; k < roData["data"][params.tableName].length; k++) {
790 sum = sum + parseFloat(roData["data"][params.tableName][k][params.columnsNeeded[m]])
791 }
792 console.log("sum=" + sum)
793 BottomGrid[params.columnsNeeded[m]] = parseInt(sum)
794
795 } else {
796
797 }
798
799 }
800
801 var dataForBottomGrid = [BottomGrid];
802 gridOptionsBottom.api.setRowData(dataForBottomGrid);
803
804 }
805
806 });
807 } else {
808 console.log("request already in process")
809 }
810
811}
812
813function onDrillDownRowSelected() {
814 var selectedRows = gridOptionsTop.api.getSelectedRows();
815 var selectedRowsString = '';
816 selectedRows.forEach(function (selectedRow, index) {
817 if (index !== 0) {
818 selectedRowsString += ', ';
819 }
820 selectedRowsString += selectedRow.ronumber;
821 });
822 console.log(selectedRowsString);
823 getROData(selectedRowsString);
824}
825
826
827$(document).ready(function () {
828
829 if (window.location.href.indexOf("drill-down-data") > -1) {
830 toShowBackButton();
831 if ($("#myGridTop").length == 0) {
832 $("body").append("<div id='loading' style='width: 100%;height: 100%;top: 0;left: 0;position: fixed;display: block;opacity: 0.7;background-color: #0000;-index: 99;text-align: center;'><img id='loading-image' src='https://lupient-demo.fixedops.cc/static/assets/images/loading.gif' style='position: absolute;top: 100px;z-index: 100;' alt='Loading...'/></div>");
833 $("body").append("<div id='myGridTop' class='ag-theme-balham' style='font-size:14px; height:630px; margin: 0 10px 0 10px;'></div><div id='myGridBottom' class='ag-theme-balham' style='font-size:14px;height: 40px;margin: 0 10px 0 10px;'></div>");
834 createDataTable()
835 } else {
836 console.log("already exist")
837 }
838
839
840
841 }
842
843});
844
845
846function createDataTable() {
847 const urlParams = new URLSearchParams(window.location.search);
848 const paramMonth = urlParams.get('month');
849
850 const paramTable = urlParams.get('table');
851 $(':input[value="Drill down data"]').val(capitalizeFirstLetter(paramTable.replace(/-/g, " ")));
852 $(".favstar").remove()
853 var params = getParms(paramTable, paramMonth);
854 addDrillDownData(params);
855}
856
857// function getROData(roNumber) {
858// roNumber = parseInt(roNumber);
859
860// $.ajax({
861// url: "http://10.10.10.169:8080/v1alpha1/graphql",
862// contentType: "application/json",
863// dataType: 'json',
864// type: 'POST',
865// beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
866// data: '{"query":"\n{\n lupient_xml_vw_ux_repair_order_basic_details(where: {ro_number: {_eq: ' + roNumber + ' }}) {\n address\n book_date\n city_state_zip\n closed_date\n contact_phone_number\n cust_no\n host_item_id\n last_service_date\n make_desc\n mileage\n mileage_last_visit\n mileage_out\n model\n open_date\n remark\n ro_comments\n ro_number\n ro_vin\n tagno\n veh_color\n veh_id\n veh_name\n }\n}\n","variables":null}',
867// success: function (result) {
868// var roData = JSON.parse(JSON.stringify(result));
869// var roObj = roData.data.lupient_xml_vw_ux_repair_order_basic_details[0];
870// var str = "";
871// str += "Ro Number: " + roObj.ro_number + "</br>";
872// str += "Book Date: " + roObj.book_date + "</br>";
873// str += "Start Date: " + roObj.start_date + "</br>";
874// str += "Closed Date: " + roObj.closed_date + "</br>";
875// str += "Vehicle Name: " + roObj.veh_name + "</br>";
876// str += "Vehicle ID: " + roObj.veh_id + "</br>";
877// str += "VIN : " + roObj.ro_vin + "</br>";
878// str += "Color: " + roObj.veh_color + "</br>";
879// str += "Remarks: " + roObj.remark + "</br>";
880// str += "Customer Number: " + roObj.cust_no + "</br>";
881// str += "Contact Number: " + roObj.contact_phone_number + "</br>";
882// str += "Address: " + roObj.address + "</br>";
883// str += "Citry/State/Zip: " + roObj.city_state_zip + "</br>";
884// console.log(str)
885// $(".modal-body").html(str);
886// $('#myModal').modal('show');
887// }
888
889// })
890// }
891
892
893class Params {
894 constructor(tableName, columnsNeeded, columnHeader, month,lbrType) {
895 this.tableName = tableName;
896 this.columnsNeeded = columnsNeeded;
897 this.columnHeader = columnHeader;
898 this.lbrType = lbrType;
899 this.month = month
900 }
901}
902
903//Capitalize first letter
904function capitalizeFirstLetter(string) {
905 return string.charAt(0).toUpperCase() + string.slice(1);
906}
907
908
909function getParms(paramTable, paramMonth) {
910 var params = new Params
911
912 if (paramTable == 'labor-and-parts-revenue') {
913 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale"], ["RO Number", "Adviser", "Opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue"], paramMonth,"")
914
915 }
916 else if (paramTable == 'labor-and-parts-revenue-customer-pay') {
917 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale"], ["RO Number", "Adviser", "Opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue"], paramMonth,"C")
918
919 }
920 else if (paramTable == 'labor-and-parts-revenue-warranty') {
921 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale"], ["RO Number", "Adviser", "Opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue"], paramMonth,"W")
922
923 }
924 else if (paramTable == 'labor-and-parts-revenue-internal') {
925 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale"], ["RO Number", "Adviser", "Opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue"], paramMonth,"I")
926
927 }
928
929
930
931 // effective-labor-rate
932 else if (paramTable == 'effective-labor-rate') {
933 return params = new Params("lupient_vw_ux_effective_labor_rate", ["ronumber", "adviser", "opcode", "ro_date"], ["RO Number", "Adviser", "Opcode", "RO Date"], paramMonth)
934 } else if (paramTable == 'effective-labor-rate-customer-pay') {
935 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
936
937 }
938 else if (paramTable == 'effective-labor-rate-warranty') {
939 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
940
941 } else if (paramTable == 'effective-labor-rate-internal') {
942 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
943
944 }
945
946
947 //repair-order-count
948 else if (paramTable == 'repair-order-count') {
949 return params = new Params("lupient_vw_ux_repair_order_count", ["ronumber", "ro_date", "adviser"], ["RO Number", "RO Date", "Adviser"], paramMonth)
950
951 }
952 else if (paramTable == 'repair-order-count-customer-pay') {
953 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
954
955 }
956 else if (paramTable == 'repair-order-count-warranty') {
957 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
958
959 }
960 else if (paramTable == 'repair-order-count-internal') {
961 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
962
963 }
964
965
966
967 // labor-and-parts-revenue-per-repair-order
968 else if (paramTable == 'labor-revenue-per-repair-order') {
969 return params = new Params("lupient_vw_ux_labor_revenue_per_repair_order", ["ronumber", "adviser", "lbrsale", "ro_date"], ["RO Number", "Adviser", "Labor Revenue", "RO Date"], paramMonth)
970
971 } else if (paramTable == 'labor-revenue-per-repair-order-customer-pay') {
972 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labor Type"], paramMonth)
973
974 }
975 else if (paramTable == 'labor-revenue-per-repair-order-warranty') {
976 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labor Type"], paramMonth)
977
978 }
979 else if (paramTable == 'labor-revenue-per-repair-order-internal') {
980 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labor Type"], paramMonth)
981
982 }
983
984
985
986
987
988 //labor-gross-profit-percent
989 else if (paramTable == 'labor-gross-profit-percent') {
990 return params = new Params("lupient_vw_ux_labor_gross_profit", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date"], paramMonth)
991
992 } else if (paramTable == 'labor-gross-profit-customer-pay') {
993 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
994
995 }
996 else if (paramTable == 'labor-gross-profit-warranty') {
997 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
998
999 } else if (paramTable == 'labor-gross-profit-internal') {
1000 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
1001
1002 }
1003 //hours-per-repair-order
1004 else if (paramTable == 'hours-per-repair-order') {
1005 return params = new Params("lupient_vw_ux_hours_per_repair_order", ["ronumber", "adviser", "ro_date", "soldhrs"], ["RO Number", "Adviser", "Ro Date", "Sold Hours"], paramMonth)
1006
1007 } else if (paramTable == 'hours-per-repair-order-customer-pay') {
1008 return params = new Params("lupient_vw_ux_hours_per_reapair_order_detail", ["ronumber", "adviser", "ro_date", "soldhrs"], ["RO Number", "Adviser", "Ro Date", "Sold Hours"], paramMonth)
1009
1010 }
1011 else if (paramTable == 'hours-per-repair-order-warranty') {
1012 return params = new Params("lupient_vw_ux_hours_per_reapair_order_detail", ["ronumber", "adviser", "ro_date", "soldhrs"], ["RO Number", "Adviser", "Ro Date", "Sold Hours"], paramMonth)
1013 } else if (paramTable == 'hours-per-repair-order-internal') {
1014 return params = new Params("lupient_vw_ux_hours_per_reapair_order_detail", ["ronumber", "adviser", "ro_date", "soldhrs"], ["RO Number", "Adviser", "Ro Date", "Sold Hours"], paramMonth)
1015
1016 }
1017
1018
1019 //Sales
1020
1021 //menu-sales-percentage
1022 else if (paramTable == 'menu-sales-percentage') {
1023 return params = new Params("lupient_vw_ux_menu_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1024
1025 }
1026 else if (paramTable == 'menu-sales-percentage-customer-pay') {
1027 return params = new Params("lupient_vw_ux_menu_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1028
1029 }
1030 else if (paramTable == 'menu-sales-percentage-warranty') {
1031 return params = new Params("lupient_vw_ux_menu_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1032
1033 }
1034 else if (paramTable == 'menu-sales-percentage-internal') {
1035 return params = new Params("lupient_vw_ux_menu_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1036
1037 }
1038
1039 //primary-sales-percentage
1040
1041 else if (paramTable == 'primary-sales-percentage') {
1042 return params = new Params("lupient_vw_ux_primary_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1043
1044 }
1045 else if (paramTable == 'primary-sales-percentage-customer-pay') {
1046 return params = new Params("lupient_vw_ux_primary_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1047
1048 }
1049 else if (paramTable == 'primary-sales-percentage-warranty') {
1050 return params = new Params("lupient_vw_ux_primary_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1051
1052 }
1053 else if (paramTable == 'primary-sales-percentage-internal') {
1054 return params = new Params("lupient_vw_ux_primary_sales", ["ronumber", "adviser", "opcode", "partno", "lbrlabortype", "lbrsale", "prtsale", "ro_date"], ["RO Number", "Adviser", "Opcode", "Partno", "Labor Type", "Labor Revenue", "Part Revenue", "RO Date"], paramMonth)
1055
1056 }
1057
1058
1059
1060 //labor-and-parts-revenue-sales
1061 if (paramTable == 'labor-and-parts-revenue-sales') {
1062 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale", "goal_value"], ["RO Number", "Adviser", "opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue", "Goal"], paramMonth)
1063
1064 }
1065 else if (paramTable == 'labor-and-parts-revenue-sales-customer-pay') {
1066 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale", "goal_value"], ["RO Number", "Adviser", "opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue", "Goal"], paramMonth)
1067 }
1068 else if (paramTable == 'labor-and-parts-revenue-sales-warranty') {
1069 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale", "goal_value"], ["RO Number", "Adviser", "opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue", "Goal"], paramMonth)
1070
1071 }
1072 else if (paramTable == 'labor-and-parts-revenue-sales-internal') {
1073 return params = new Params("lupient_vw_ux_labor_parts_revenue", ["ronumber", "adviser", "opcode", "ro_date", "partno", "lbrlabortype", "lbrsale", "prtsale", "goal_value"], ["RO Number", "Adviser", "opcode", "RO Date", "Part No", "Labortype", "Labor Revenue", "Part Revenue", "Goal"], paramMonth)
1074
1075 }
1076
1077 //repair-order-count-sales
1078
1079 else if (paramTable == 'repair-order-count-sales') {
1080 return params = new Params("lupient_vw_ux_repair_order_count", ["ronumber", "ro_date", "adviser", "goal"], ["RO Number", "RO Date", "Adviser", "ROC Goal"], paramMonth)
1081
1082 }
1083 else if (paramTable == 'repair-order-count-sales-customer-pay') {
1084 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
1085
1086 }
1087 else if (paramTable == 'repair-order-count-sales-warranty') {
1088 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
1089 }
1090 else if (paramTable == 'repair-order-count-sales-internal') {
1091 return params = new Params("lupient_vw_ux_repair_order_count_detail", ["ronumber", "ro_date", "adviser", "lbrlabortype"], ["RO Number", "RO Date", "Adviser", "Labor type"], paramMonth)
1092
1093
1094 }
1095
1096 //KPI
1097
1098 //labor-gross-profit-percentage
1099
1100 else if (paramTable == 'labor-gross-profit-percentage') {
1101 return params = new Params("lupient_vw_ux_labor_gross_profit", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date"], paramMonth)
1102
1103 } else if (paramTable == 'labor-gross-profit-percentage-customer-pay') {
1104 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
1105
1106 }
1107 else if (paramTable == 'labor-gross-profit-percentage-warranty') {
1108 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
1109
1110 } else if (paramTable == 'labor-gross-profit-percentage-internal') {
1111 return params = new Params("lupient_vw_ux_labor_gross_profit_detail", ["ronumber", "adviser", "opcode", "lbrsale", "lbrcost", "ro_date", "lbrlabortype"], ["RO Number", "Adviser", "Opcode", "Labor Revenue", "Labor Cost", "Ro Date", "Labor Type"], paramMonth)
1112
1113 }
1114
1115
1116
1117
1118
1119 //labor-revenue-per-ro
1120
1121 else if (paramTable == 'labor-revenue-per-ro') {
1122 return params = new Params("lupient_vw_ux_labor_revenue_per_repair_order", ["ronumber", "adviser", "lbrsale", "ro_date"], ["RO Number", "Adviser", "Labor Revenue", "RO Date"], paramMonth)
1123
1124 }
1125 else if (paramTable == 'labor-revenue-per-ro-customer-pay') {
1126 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "adviser", "lbrsale", "ro_date"], ["RO Number", "Adviser", "Labor Revenue", "RO Date"], paramMonth)
1127
1128 }
1129 else if (paramTable == 'labor-revenue-per-ro-warranty') {
1130 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "adviser", "lbrsale", "ro_date"], ["RO Number", "Adviser", "Labor Revenue", "RO Date"], paramMonth)
1131
1132 }
1133 else if (paramTable == 'labor-revenue-per-ro-internal') {
1134 return params = new Params("lupient_vw_ux_labor_parts_revenue_per_repair_order_detail", ["ronumber", "adviser", "lbrsale", "ro_date"], ["RO Number", "Adviser", "Labor Revenue", "RO Date"], paramMonth)
1135
1136 }
1137
1138
1139
1140
1141 // effective-labor-rate-KPI
1142 else if (paramTable == 'effective-labor-rate-kpi') {
1143 return params = new Params("lupient_vw_ux_effective_labor_rate", ["ronumber", "adviser", "opcode", "ro_date"], ["RO Number", "Adviser", "Opcode", "RO Date"], paramMonth)
1144 } else if (paramTable == 'effective-labor-rate-kpi-customer-pay') {
1145 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
1146
1147 }
1148 else if (paramTable == 'effective-labor-rate-kpi-warranty') {
1149 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
1150
1151 } else if (paramTable == 'effective-labor-rate-kpi-internal') {
1152 return params = new Params("lupient_vw_ux_effective_labor_rate_detail", ["ronumber", "ro_date", "adviser", "lbrsale", "lbrlabortype", "lbrhours"], ["RO Number", "RO Date", "Adviser", "Labor Revenue", "Labortype", "Labor Hours"], paramMonth)
1153
1154 }
1155
1156
1157
1158
1159 // parts-gross-profit-percentage
1160 else if (paramTable == 'parts-gross-profit-percentage') {
1161 return params = new Params("lupient_vw_ux_parts_gross_profit_percentage", ["ronumber", "adviser", "opcode", "prtsale", "prtcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Parts Revenue", "Parts Cost", "Ro Date"], paramMonth)
1162
1163 } else if (paramTable == 'parts-gross-profit-percentage-customer-pay') {
1164 return params = new Params("lupient_vw_ux_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "prtsale", "prtcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Parts Revenue", "Parts Cost", "Ro Date"], paramMonth)
1165
1166 } else if (paramTable == 'parts-gross-profit-percentage-warranty') {
1167 return params = new Params("lupient_vw_ux_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "prtsale", "prtcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Parts Revenue", "Parts Cost", "Ro Date"], paramMonth)
1168
1169 } else if (paramTable == 'parts-gross-profit-percentage-internal') {
1170 return params = new Params("lupient_vw_ux_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "prtsale", "prtcost", "ro_date"], ["RO Number", "Adviser", "Opcode", "Parts Revenue", "Parts Cost", "Ro Date"], paramMonth)
1171
1172 }
1173
1174 //parts-and-labor-gross-profit-percentage
1175 else if (paramTable == 'parts-and-labor-gross-profit-percentage') {
1176 return params = new Params("lupient_vw_ux_labor_parts_gross_profit_percentage", ["ronumber", "adviser", "opcode", "partno", "ro_date", "prtsale", "prtcost", "lbrsale", "lbrcost"], ["RO Number", "Adviser", "Opcode", "Partno", "RO Date", "Parts Sale", "Parts Cost", "Labor Revenue", "Labor Cost"], paramMonth)
1177
1178 } else if (paramTable == 'parts-and-labor-gross-profit-percentage-customer-pay') {
1179 return params = new Params("lupient_vw_ux_labor_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "partno", "ro_date", "prtsale", "prtcost", "lbrsale", "lbrcost"], ["RO Number", "Adviser", "Opcode", "Partno", "RO Date", "Parts Sale", "Parts Cost", "Labor Revenue", "Labor Cost"], paramMonth)
1180
1181 } else if (paramTable == 'parts-and-labor-gross-profit-percentage-warranty') {
1182 return params = new Params("lupient_vw_ux_labor_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "partno", "ro_date", "prtsale", "prtcost", "lbrsale", "lbrcost"], ["RO Number", "Adviser", "Opcode", "Partno", "RO Date", "Parts Sale", "Parts Cost", "Labor Revenue", "Labor Cost"], paramMonth)
1183
1184 } else if (paramTable == 'parts-and-labor-gross-profit-percentage-internal') {
1185 return params = new Params("lupient_vw_ux_labor_parts_gross_profit_percentage_detail", ["ronumber", "adviser", "opcode", "partno", "ro_date", "prtsale", "prtcost", "lbrsale", "lbrcost"], ["RO Number", "Adviser", "Opcode", "Partno", "RO Date", "Parts Sale", "Parts Cost", "Labor Revenue", "Labor Cost"], paramMonth)
1186
1187 }
1188
1189 //one line repair-order
1190
1191 else if (paramTable == 'one-line-repair-order-count') {
1192 return params = new Params("lupient_vw_ux_one_line_repair_order", ["ronumber", "adviser", "ro_date", "joblinecnt"], ["RO number", "Adviser", "RO Date", "One line job"], paramMonth)
1193
1194 }
1195
1196 //effective-labor-rate-maintenance-opcode
1197 else if (paramTable == 'effective-labor-rate-maintenance-opcode') {
1198 return params = new Params("lupient_vw_ux_effective_labor_rate_maintenance_opcode", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1199
1200 } else if (paramTable == 'effective-labor-rate-maintenance-opcode-customer-pay') {
1201 return params = new Params("lupient_vw_ux_effective_labor_rate_maintenance_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1202
1203 } else if (paramTable == 'effective-labor-rate-maintenance-opcode-warranty') {
1204 return params = new Params("lupient_vw_ux_effective_labor_rate_maintenance_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1205
1206 } else if (paramTable == 'effective-labor-rate-maintenance-opcode-internal') {
1207 return params = new Params("lupient_vw_ux_effective_labor_rate_maintenance_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1208
1209 }
1210
1211
1212 //effective-labor-rate-repair-opcode
1213 else if (paramTable == 'effective-labor-rate-repair-opcode') {
1214 return params = new Params("lupient_vw_ux_effective_labor_rate_repair_opcode", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1215
1216 } else if (paramTable == 'effective-labor-rate-repair-opcode-customer-pay') {
1217 return params = new Params("lupient_vw_ux_effective_labor_rate_repair_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1218
1219 } else if (paramTable == 'effective-labor-rate-repair-opcode-warranty') {
1220 return params = new Params("lupient_vw_ux_effective_labor_rate_repair_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1221
1222 } else if (paramTable == 'effective-labor-rate-repair-opcode-internal') {
1223 return params = new Params("lupient_vw_ux_effective_labor_rate_repair_opcode_detail", ["ronumber", "adviser", "opcode", "ro_date", "lbrsale", "lbrhours"], ["RO Number", "Adviser", "Opcode", "RO Date", "Labor Revenue", "Labor Hours"], paramMonth)
1224
1225 }
1226
1227}
1228function getJobDetails(jsonObj) {
1229 var arr = [];
1230 $.each(jsonObj, function (key, value) {
1231
1232 arr[value.linlinecode] = value.linservicerequest;
1233 });
1234
1235 return arr;
1236
1237}
1238
1239
1240
1241
1242
1243///////////////////////////////////////////////////////////////////////////
1244
1245var jsonObj, roObj;
1246
1247function getJOBData(arrVal, jsonObj, roObj) {
1248
1249
1250 jobDetailsArr = [];
1251 var i = 0;
1252 for (var key in arrVal) {
1253 var linecode = key;
1254
1255 laborDetailsArray = [];
1256 $.each(jsonObj, function (index, value) {
1257 if (linecode == value.linlinecode) {
1258 var laborDetails = { linlineCode: value.linlinecode, lbrOpCode: value.lbropcode, lbropcodedesc: value.lbropcodedesc, labor_sale: value.labor_sale_value, labor_cost: value.labor_cost_value };
1259
1260 if (laborDetailsArray[value.lbrsequenceno] === undefined) {
1261 laborDetailsArray[value.lbrsequenceno] = laborDetails
1262 i++;
1263 }
1264 }
1265 });
1266 jobDetailsArr[linecode] = laborDetailsArray;
1267 }
1268 for (var key in jobDetailsArr) {
1269
1270 for (var keyVal in jobDetailsArr[key]) {
1271
1272 var partDetailArr = [];
1273 $.each(jsonObj, function (index, value) {
1274 if ((key == value.linlinecode) && (keyVal == value.lbrsequenceno)) {
1275 var partDetails = { prtpartno: value.prtpartno, prtcost: value.partcost, partsale: value.partsale };
1276
1277 if (partDetailArr[value.prtpartno] === undefined) {
1278 partDetailArr[value.prtpartno] = partDetails
1279
1280 }
1281 }
1282 });
1283
1284 jobDetailsArr[key][keyVal]['parts'] = partDetailArr;
1285 console.log(jobDetailsArr);
1286
1287 }
1288 }
1289 var str = "";
1290 str += "<table id='rotbl' border='1 black solid' cellpadding='10'>";
1291
1292 str += "<tr border: 1px solid><td > RO Number: " + roObj.ronumber + "</td>";
1293 str += "<td width: 25%> RO Date: " + roObj.ro_date + "</td>";
1294 str += "<td width='40%'> Customer No: " + roObj.custno + "</td></tr>";
1295
1296
1297 str += "<tr border: 1px solid><td > Book Date: " + roObj.bookeddate + "</td>";
1298 str += "<td width: 25%> Vehicle Model: " + roObj.model + "</td>";
1299 str += "<td width='40%'> VIN : " + roObj.vin + "</td></tr>";
1300
1301 for (var key in jobDetailsArr) {
1302
1303 str += "<tr height='40'><td colspan='4'> JOB: " + key + "</td></tr>";
1304 for (var laborseqno in jobDetailsArr[key]) {
1305
1306 str += "<tr height='30'><th>Labor Details</th>";
1307
1308 var laborData = jobDetailsArr[key][laborseqno];
1309 str += "<td colspan='2'> Opcode: " + laborData.lbrOpCode + "</td></tr>";
1310 str += " <tr><td colspan='3' width='33%'> Description: " + laborData.lbropcodedesc + "</td></tr>";
1311
1312 str += "<tr><td> Labor Sale: " + laborData.labor_sale + "</td>";
1313 str += "<td colspan='2'> Labor Cost: " + laborData.labor_cost + "</td></tr>";
1314 var i = 0;
1315
1316
1317 str += "<tr height='30' ><th colspan='3'>Parts Details</th></tr>";
1318
1319 for (var partNo in jobDetailsArr[key][laborseqno]['parts']) {
1320
1321 var partData = jobDetailsArr[key][laborseqno]['parts'][partNo];
1322 if (partData.prtpartno !== null) {
1323 i = 1;
1324 str += "<tr><td width='45%'> Part Number: " + partData.prtpartno + " </td>";
1325 str += "<td width='25%' > Part Cost: " + partData.prtcost + " </td>";
1326 str += "<td width='30%'> Part Sale: " + partData.partsale + " </td></tr>";
1327 }
1328 }
1329
1330 if (i == 0) {
1331 str += "<tr><td colspan='3'> No Parts details</td></tr>";
1332 }
1333
1334 }
1335 }
1336
1337 str += "</table>";
1338 $(".modal-body").html(str);
1339 $('#myModal').modal('show');
1340
1341}
1342
1343
1344
1345
1346//////////////////////////////////////////////////////////////////////////////////
1347function getROData(roNumber) {
1348 roNumber = parseInt(roNumber);
1349
1350 $.ajax({
1351 url: "http://10.10.10.169:8080/v1alpha1/graphql",
1352 contentType: "application/json",
1353 dataType: 'json',
1354 type: 'POST',
1355 beforeSend: function (xhr) { xhr.setRequestHeader('x-hasura-admin-secret', 'myadminsecretkey'); },
1356 data: '{"query":"{\n lupient_vw_ux_repair_order_details(where: {ronumber: {_eq: ' + roNumber + '}}) {\n custno\n contactphonenumber\n deliverydate\n ronumber\n opendate\n ro_date\n model\n lbrsequenceno\n linlinecode\n lbropcode\n labor_cost_value\n labor_sale_value\n prtpartno\n partcost\n partsale\n lbropcodedesc\n labor_sold_hours\n lbrlinecode\n bookeddate \n vin\n model\n \n prtlabortype\n quantity\n ro_month\n }\n}\n","variables":null}',
1357 success: function (result) {
1358 var roData = JSON.parse(JSON.stringify(result));
1359 jsonObj = roData.data.lupient_vw_ux_repair_order_details;
1360 roObj = roData.data.lupient_vw_ux_repair_order_details[0];
1361
1362 var arrVal = getJobDetails(jsonObj);
1363 getJOBData(arrVal, jsonObj, roObj);
1364 }
1365
1366 })
1367}