Advertisement
Guest User

RDM 4 Hard / script.js

a guest
Feb 14th, 2022
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Simple reference solution for RDM-4 Hard
  2. // Utilizing PapaParse and JQuery
  3. // (cheat a little bit and hardcode the scoresheets)
  4. /*
  5. Codes,P1,P2,P3,P4,P5
  6. Points,10,8,6,4,2
  7. Payment Amount,10,8,6,4,2
  8. */
  9. const scoring1 = {
  10.     labels : ["P1","P2","P3","P4","P5"],
  11.     points : {
  12.         "P1":10,
  13.         "P2":8,
  14.         "P3":6,
  15.         "P4":4,
  16.         "P5":2
  17.     },
  18.     payments : {
  19.         "P1":10,
  20.         "P2":8,
  21.         "P3":6,
  22.         "P4":4,
  23.         "P5":2
  24.     }
  25. };
  26.  
  27. var resJson=[];
  28. /*
  29. Codes,Functional,UI/UX
  30. Points,10,5
  31. Payment Amount,5,3
  32. */
  33. const scoring2 = {
  34.     labels : ["Functional","UI/UX"],
  35.     points : {
  36.         "Functional":10,
  37.         "UI/UX":5
  38.     },
  39.     payments : {
  40.         "Functional":5,
  41.         "UI/UX":3
  42.     }
  43. };
  44.  
  45. var scoring = scoring1;
  46.  
  47. function processTickets(ticketsJson,scoringSheet){
  48.     var results = [];
  49.     var n = ticketsJson.length;
  50.     var nScore = scoringSheet.labels.length;
  51.     for(var i = 0;i<n;i++){
  52.         var ticket = ticketsJson[i];
  53.         var author = ticket['Author Username'];
  54.         if (author === '' || author === null) continue;
  55.         if (ticket['Issue ID'] === '' || ticket['Issue ID'] === null) continue;
  56.         if (author != '')
  57.         if (author in results) {
  58.             results[author]['Number of Tickets']++;
  59.             if (ticket['Labels'].toLowerCase().includes("invalid")) results[author]['Invalid Tickets']++;
  60.             else if (ticket['Labels'].toLowerCase().includes("valid")) results[author]['Valid Tickets']++;
  61.             else if (ticket['Labels'].toLowerCase().includes("duplicate")) results[author]['Duplicate Tickets']++;
  62.             for(var j = 0; j < nScore; j++){
  63.                 if (ticket['Labels'].includes(scoringSheet.labels[j])) {
  64.                     var lbl = scoringSheet.labels[j];
  65.                     if (ticket['Labels'].toLowerCase().includes("valid") && !ticket['Labels'].toLowerCase().includes("invalid")) results[author]['Total Points'] += scoringSheet.points[lbl];
  66.                     if (ticket['Labels'].toLowerCase().includes("valid") && !ticket['Labels'].toLowerCase().includes("invalid")) results[author][lbl]++;
  67.                 }
  68.             }
  69.         } else {
  70.             var newRow = {};
  71.             newRow['Author Username']=author;
  72.             newRow['Number of Tickets']=1;
  73.             var points = 0;
  74.             if (ticket['Labels'].toLowerCase().includes("valid") && !ticket['Labels'].toLowerCase().includes("invalid")) newRow['Valid Tickets']=1; else newRow['Valid Tickets']=0;
  75.             if (ticket['Labels'].toLowerCase().includes("invalid")) newRow['Invalid Tickets']=1; else newRow['Invalid Tickets']=0;
  76.             if (ticket['Labels'].toLowerCase().includes("duplicate")) newRow['Duplicate Tickets']=1; else newRow['Duplicate Tickets']=0;
  77.             for(var j = 0; j < nScore; j++){
  78.                 var lbl = scoringSheet.labels[j];
  79.                 newRow[lbl] = 0;
  80.                 if (ticket['Labels'].includes(scoringSheet.labels[j])) {
  81.                     if (ticket['Labels'].toLowerCase().includes("valid") && !ticket['Labels'].toLowerCase().includes("invalid")) points += scoringSheet.points[lbl];
  82.                     if (ticket['Labels'].toLowerCase().includes("valid") && !ticket['Labels'].toLowerCase().includes("invalid")) newRow[lbl] = 1;
  83.                 }
  84.             }
  85.             newRow['Total Points'] = points;
  86.             results[author] = newRow;
  87.         }
  88.     }
  89.     var resArr = Object.keys(results).map(function(key) {
  90.       return [key, results[key]];
  91.     });
  92.     resArr.sort(function(f,s){
  93.       return s[1]['Total Points'] - f[1]['Total Points'];
  94.     });
  95.     var topAuthor = resArr[0][0];
  96.     var secAuthor = resArr[1][0];
  97.     for(var i = 0;i<n;i++){
  98.         var ticket = ticketsJson[i];
  99.         var author = ticket['Author Username'];
  100.         if (author === topAuthor || author === secAuthor){
  101.             if (!ticket['Labels'].toLowerCase().includes("invalid") && !ticket['Labels'].toLowerCase().includes("duplicate")) {
  102.                 var ath = author === topAuthor ? 0 : 1;
  103.                 var coef = 1;
  104.                 var labels = ticket['Labels'].split(',');
  105.                 for(var j in labels){
  106.                     console.log(labels);
  107.                     if (!Number.isNaN(parseInt(labels[j]))) {coef = parseInt(labels[j]);
  108.                     console.log(coef);
  109.                     break;}
  110.                 }
  111.                 for(var j = 0; j < nScore; j++){
  112.                     if (ticket['Labels'].includes(scoringSheet.labels[j])) {
  113.                         var lbl = scoringSheet.labels[j];
  114.                         resArr[ath][1]['Total Points'] += scoringSheet.points[lbl] * coef;
  115.                     }
  116.                 }
  117.             }
  118.         }
  119.     }
  120.     return resArr;
  121. }
  122.  
  123. function writeTable(results,scoringSheet){
  124.     var tbl = $('#resultsTable');
  125.     tbl.css('display','inline-block');
  126.     var n = results.length;
  127.     var header = '<thead id="results-header">';
  128.     var headerRow = '<tr>'
  129.     headerRow += ('<th>'+"S.No"+'</th>');
  130.     headerRow += ('<th>'+"Author Username"+'</th>');
  131.     headerRow += ('<th>'+"Number of Tickets"+'</th>');
  132.     headerRow += ('<th>'+"Valid Tickets"+'</th>');
  133.     headerRow += ('<th>'+"Invalid Tickets"+'</th>');
  134.     headerRow += ('<th>'+"Duplicate Tickets"+'</th>');
  135.     for(var i = 0;i<scoringSheet.labels.length;i++){
  136.         headerRow += '<th>'+scoringSheet.labels[i] + '</th>';
  137.     }
  138.     headerRow += ('<th>'+"Total Points"+'</th>');
  139.     headerRow += '</tr>';
  140.     header += headerRow;
  141.     header += '</thead>';
  142.     $('#resultsTable').append(header);
  143.     var tbd ='<tbody id="results-data">';
  144.     for(var i = 0;i<n;++i){
  145.         var row ='<tr>';
  146.         row+='<td>'+(i+1)+'</td>';
  147.         row+='<td>'+results[i][1]['Author Username']+'</td>';
  148.         row+='<td>'+results[i][1]['Number of Tickets']+'</td>';
  149.         row+='<td>'+results[i][1]['Valid Tickets']+'</td>';
  150.         row+='<td>'+results[i][1]['Invalid Tickets']+'</td>';
  151.         row+='<td>'+results[i][1]['Duplicate Tickets']+'</td>';
  152.         for(var j = 0;j<scoringSheet.labels.length;j++){
  153.             row += '<td>'+ results[i][1][scoringSheet.labels[j]] + '</td>';
  154.         }
  155.         row+='<td>'+results[i][1]['Total Points']+'</td>';
  156.         row+='</tr>';
  157.         tbd+=row;
  158.     }
  159.     tbd+='</tbody>';
  160.     $('#resultsTable').append(tbd);
  161. }
  162.  
  163. function readFiles() {
  164.     var csv = $("#ticketFile").prop('files')[0];
  165.     console.log(csv);
  166.     var inputData;
  167.     var outData;
  168.     Papa.parse(csv ,{
  169.      header:true,
  170.       dynamicTyping: false,
  171.       complete: function(results) {
  172.         resJson=[];
  173.             inputData = results.data;
  174.             outData = processTickets(inputData,scoring)
  175.         writeTable(outData,scoring);
  176.         for(var i in outData){
  177.             resJson[i] = outData[i][1];
  178.         }      
  179.       }
  180.     });
  181. };
  182.  
  183. function getFileName() {
  184.     document.getElementById("pointsFile").value="csvfiles\\"+document.getElementById("challengeType").value;
  185.     if (document.getElementById("challengeType").value==="Scoringsheet-1.csv") scoring = scoring1;
  186.     if (document.getElementById("challengeType").value==="Scoringsheet-2.csv") scoring = scoring2;
  187. }
  188.  
  189. function saveResult(){
  190.     var hidden = document.createElement('a');
  191.     hidden.href = 'data:text/csv;charset=utf-8,'+encodeURI(Papa.unparse(resJson));
  192.     hidden.target = '_blank';
  193.     hidden.download = "results.csv";
  194.     hidden.click();
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement