SGW Lister Postings/Sales Filterer

Filters the lister postings screen to one's own listings.

当前为 2017-09-07 提交的版本,查看 最新版本

// ==UserScript==
// @name        SGW Lister Postings/Sales Filterer
// @namespace   greasyfork.org
// @version     2.3.4
// @grant       none
// @require     http://code.jquery.com/jquery-2.1.3.js
// @require     https://greasyfork.org/scripts/23450-sgw-fixer-users/code/SGW%20Fixer%20-%20Users.js?upDate=2017_09_07
// @include     https://sellers.shopgoodwill.com/sellers/listerpostings.asp*
// @include     https://sellers.shopgoodwill.com/sellers/listersales.asp*
// @description Filters the lister postings screen to one's own listings.
// ==/UserScript==

//var posters = JSON.parse();
//console.dir(posters);
//console.log($('#posterData').html());
var userNames = {};

var userInfoByUsername = {};
$.each(posters, function(name, info){
  var userName = info['username'].toUpperCase();
  userInfoByUsername[userName] = Object.assign({}, info);
  userNames[userName] = info['name'].toLowerCase();
});

console.dir(userNames);

var thisPoster = "";
var posterDelay = 0;

var url = document.URL;
var vars = [], hash;
var q = document.URL.split('?')[1];
if(q != undefined){
  q = q.split('&');
  for(var i = 0; i < q.length; i++){
    hash = q[i].split('=');
    vars.push(hash[1]);
    vars[hash[0]] = hash[1];
  }
}

var page = '';

if (url.indexOf('listerSales') >= 0) {
  page = 'listerSales';
  $('th:contains("Order")').parent().parent().parent().append('<tr class=""><td colspan="7">&nbsp;</td></tr><tr class="grandTotals collectibles jewelry" bgcolor="#c0c0c0"><td colspan="2">Grand Total Sales</td><td id="totalSales"></td><td>Total Items</td><td id="totalItems"></td><td>PPI</td><td id="PPI"></td></tr>');
  function calculateGrandTotal(){
    var totals = $('td:contains("Lister Total"):visible');
    var totalSales = 0;
    var totalItems = 0;
    var PPI = 0;
    $.each(totals, function(){
      numbers = $(this).html().match(/(\d{1}[\d|\.]*)/g);
      totalSales += Math.ceil(numbers[0]*100)/100;
      totalItems += Math.ceil(numbers[1]*100)/100;
    });
    totalSales = totalSales.toFixed(2)
    if (totalItems > 0) {
      PPI = (totalSales / totalItems).toFixed(2);
    } else {
      PPI = 0;
    }
    $('#totalSales').html('$'+totalSales);
    $('#totalItems').html(totalItems);
    $('#PPI').html('$'+PPI);
  }
  calculateGrandTotal();
} else {
  page = 'listerPostings';
  $('td:contains("Grand Total=")').addClass('jewelry collectibles');
}

var myInfo = {};

$.each(posters, function(name, info) { //working 10/27
  userName = name.toLowerCase().replace('(','\\(').replace(')','\\)');
  re = new RegExp(userName,"gi");
  if(re.exec($(".smtext").html().toLowerCase())) {
    myInfo = Object.assign({}, info);
//      thisPoster = name.replace(/ /gi,"");
//      console.log(thisPoster);
  }
});

$("tbody:contains('Item Title')").children().addClass("hideable");
$("tbody:contains('Item Title') > tr").first().removeClass('hideable');

if ($('select[name="startMonth"]').val() == $('select[name="endMonth"]').val() && $('select[name="startDay"]').val() == $('select[name="endDay"]').val() && $('select[name="startYear"]').val() == $('select[name="endYear"]').val()) {
  vars['inhOneDay'] = 1;
} else {
  vars['inhOneDay'] = 0;
}
$('#form1').append("<input type='hidden' name='inhOneDay' id='inhOneDay' value='" + vars['inhOneDay'] + "'>");
$('td:contains("From Date")').attr("id", "fromTd");
$('td:contains("To Date")').attr("id", "toID");
$('#fromTD, #toTD').parent().addClass("dontMove");
$('#toID').parent().css({
  "position" : "absolute",
  "top" : "165px",
  "left" : "26px",
});
$('input[name="submit"]').before("<div style='height:25px;'>&nbsp;</div>");
$('body').append("<div id='toolsContainer'><div><input type='checkbox' id='oneDay'> Single day</div></div>");
$('#toolsContainer').css({
	'text-align' : 'left',
	'position' : 'absolute',
	'left' : '250px',
	'top' : '120px',
});
$('#fromTd').css("width","70px");
$('#oneDay').bind("change", function(){
  if ($('#oneDay:checked').length > 0) {
    $('#fromTd').html("Date");
    $('#toID').parent().children().each(function(){
      $(this).contents().hide();
    });
    $('#toID').html("&nbsp;");

    $('select[name="endMonth"]').val( $('select[name="startMonth"]').val());
    $('select[name="endDay"]').val( $('select[name="startDay"]').val());
    $('select[name="endYear"]').val( $('select[name="startYear"]').val());
    $('select[name="startMonth"]').bind("change",function(){
      $('select[name="endMonth"]').val( $('select[name="startMonth"]').val());
    });
    $('select[name="startDay"]').bind("change",function(){
      $('select[name="endDay"]').val( $('select[name="startDay"]').val());
    });
    $('select[name="startYear"]').bind("change",function(){
      $('select[name="endYear"]').val( $('select[name="startYear"]').val());
    });
    $('#inhOneDay').val(1);
  } else {
    $('#fromTd').html("From Date");
    $('#toID').parent().children().each(function(){
      $(this).contents().show();
    });
    $('#toID').html("To Date");

    $('select[name="startMonth"]').unbind("change");
    $('select[name="startDay"]').unbind("change");
    $('select[name="startYear"]').unbind("change");
    $('#inhOneDay').val(0);
  }
});
if ($('#inhOneDay').val()=="1") {
  $('#oneDay').trigger("click");
}

$('#toolsContainer').append("<div style='' id='filterSpan'> <input type='checkbox' id='doFilter'> Just my posts</div>");
$('#doFilter').bind("click", function(){
  $('#doFilterDept, #doFilterUser').prop('checked', false);
  var myWelcome = $("td.smtext:contains('Welcome')").html().toLowerCase();
//  console.log(myWelcome);
//  var res = myWelcome.match(/([^elcome ])(\S*)/gi);
//  userName = userNames[res[0].toLowerCase()]+' ';
//  console.dir(res);
  $.each(userNames, function(userName, fullName) {
//    console.log(myWelcome + ' contains ' + fullName + '?', myWelcome.indexOf(fullName));
    if(myWelcome.indexOf(fullName) >= 0) {
      $(".hideable:contains('" + userName + "')").prev().nextUntil(".hideable:contains('Lister ')").removeClass("hideable").addClass("showable");
      console.log()
    }
  });
  
  var myTotal = $("tr.showable").length - 1;
/*
  foo = $("td:contains('Grand Total=')").html();
  var ress = foo.match(/(Grand Total=)(.*)/g);
  totalTotal = ress[0];
  */
  $(".hideable").show();
  $('#doFilterDept').prop('checked', false);
  if ($('#doFilter:checked').length > 0) {
    $(".hideable").hide();
    $('th:contains("Posting Date")').parent().show();
    $(".showable").last().after("<tr class='showable filterTotals' bgcolor='#ababab'><td colspan=3>Your total: " + myTotal + "</td></tr><br><br>");
    $(".showable").last().after("<tr class='showable filterTotals' bgcolor='#ababab'><td colspan=3> " + totalTotal + "</td></tr><br><br>"); 
  } else {
    $('.filterTotals').remove();
  }
});

if (vars['filter'] == "justMe" || vars['filter'] == "totals") {
  $('#form1').append("<input type='hidden' name='filter' value='" + vars['filter'] + "'>");
 
}

if (url.search("listerpostings") && vars['filter']=="justMe") {
  $('#doFilter').trigger("click");
} else if (url.search("listerpostings") && vars['filter']=="totals") {
  $('#form1').attr("action", "listerpostings.asp?filter=totals&relist=");
  $('#form1').append("<input type='hidden' name='filter' value='totals'>");
  $('a').each(function(){
      if ($(this).attr("href").indexOf("zoomItem") > 0) {
          $(this).parent().parent().hide();
      }
  }); 
}
console.dir(myInfo);
if (myInfo['sup'] == true && myInfo['dept'] != 'all') {
 
  if (page == 'listerSales') {
    var d = '$';
  } else {
    var d = '';
  }
  
  var totalSales = {
    'collectibles' : 0,
    'jewelry' : 0,
  }
  
  var userSales = {
    'collectibles' : {},
    'jewelry' : {},
  }
  
  var grandTotalSales = 0;
  if ($('tr:contains("Lister:")').length > 0){
    $('body').append('<table id="totalsTable"></table>');

    $('#totalsTable').append("<thead><tr><th colspan=5>Totals</th></tr></thead>");
  //  $('#totalsTable').append("<tr><td>Collectibles<td id='collectiblesTotalCell'></td></tr>");
  //  $('#totalsTable').append("<tr><td>Jewelry<td id='jewelryTotalCell'></td></tr>");
    $('#totalsTable').append("<tr id='collectiblesGroupHeading' ><td class='groupHeading' colspan=5>Collectibles</td></tr>");
    $('#totalsTable').append("<tr id='jewelryGroupHeading'><td class='groupHeading' colspan=5>Jewelry</td></tr>");
    $('#totalsTable').append("<tr><td class='groupHeading' colspan=5>Overall</td></tr>");
    $('#totalsTable').append("<tr class='stripeRow'><td>Grand total</td><td id='totalAllCell'></td></tr>");
  }

  
  $('#filterSpan').after('<span id="filterDeptSpan"> <input id="doFilterDept" type="checkbox"> Filter to my department</span>');
  $('#filterDeptSpan').after("<div id='filterUserDiv'><input id='doFilterUser' type='checkbox'> Filter to user: <select id='selectUser'></select></div>");
  $('#filterUserDiv').after("<div id='filterGalleryDiv'><input id='doFilterFeatured' type='checkbox'> Gallery/featured only</div>");
  $('b:contains("Lister:")').each(function(){
    var thisUser = $(this).html().replace("Lister: ", "");
    var dept = userInfoByUsername[thisUser]['dept'];
    $(this).parent().parent().nextUntil('tr:contains("Lister:")').addClass(dept).attr('username', thisUser);
    $(this).parent().parent().addClass(dept).attr('username', thisUser);
    $('#selectUser').append("<option value='"+thisUser+"'>"+userInfoByUsername[thisUser]['name']+"</select>");
  });
  
  $('td:contains("Lister Total=")').each(function(){
    var myText = $(this).text().replace("Lister Total=", "").replace(" ", "");
    if (page == 'listerSales') {
      var sales = ($(this).text().match(/\d*\.?\d{1}?\d{1}?/)[0]*1);
    } else {
      var match = myText.match(/\d*/);
      var sales = (myText.match(/\d*/)[0]*1);
    }
    var thisUser = $(this).parent().attr('username');
    var dept = userInfoByUsername[thisUser]['dept'];
    userSales[dept][thisUser] = sales;
    totalSales[dept] += sales;
    grandTotalSales += sales;
  });
  

  
  $('#collectiblesGroupHeading').after("<tr id='collectiblesGroupFoot' class='stripeRow'><td class='totalLabel'>Total:</td><td class='deptTotal'>"+d+totalSales['collectibles'].toLocaleString()+"</td></tr>");
  $('#jewelryGroupHeading').after("<tr id='jewelryGroupFoot' class='stripeRow'><td class='totalLabel'>Total:</td><td class='deptTotal'>"+d+totalSales['jewelry'].toLocaleString()+"</td></tr>");
  $.each(userSales, function(department, usersObject) {
    $.each(usersObject, function(userName, sales){
      var section = '#' + department + "GroupFoot";
      $(section).before("<tr class='stripeRow'><td class='userLabel'>"+userInfoByUsername[userName]['name']+"</td><td class='userSales'>"+d+sales.toLocaleString()+"</td></tr>");
    });
  });

  $('#totalAllCell').html(d+grandTotalSales.toLocaleString());
  
  var totalsLeftAmount = ($('table:contains("Lister:")').width()+20);
  if (vars['filter']=="totals") {
    totalsLeftAmount += 150; 
  }

  $('#totalsTable').css({
    "position" : "absolute",
    "left" : totalsLeftAmount+"px",
    "top" : "110px",
    "border" : " 2px solid #ccc",
    "padding" : "5px",
    "width" : "200px",
  });
  
  $('#totalsTable th').css({
    'font-size' : '24px',
  });
  
  $('.groupHeading').css({
    'text-align' : 'center',
    'font-weight' : 'bold',
  })
  
  var stripeCounter = 0;
  $('tr').each(function(){
    if ($(this).is('.stripeRow')){ // each section resets
      stripeCounter++;
      if (stripeCounter%2){
        $(this).css({
          'background-color' : '#eee',
        });
      }
    } else {
      stripeCounter = 0;
    }
  });
  
  $('#doFilterFeatured').bind('click', function(){
    $('.hideable').show();
    var myTable = $('td:contains("Lister")').parent().parent();
    if ($('#doFilterFeatured:checked').length > 0) {
      myTable.children().filter(function(){
        if (($(this).find('b:contains("Gallery")').length <= 0 &&  $(this).find('b:contains("Featured")').length <= 0)) {
          return true;
        } else {
          return false;
        }
      }).addClass('hideable').hide();
      $('#totalsTable').addClass('hideable').hide();
    }
    

  });
  
  $('#doFilterDept').bind('click', function(){
    $('.hideable').show();
    $('#doFilter, #doFilterUser').prop('checked', false);
    if ($('#doFilterDept:checked').length > 0) {
      $('.hideable').not('.'+myInfo['dept']).hide();
    }
    
    var grandTotal = 0;
    $('td:contains("Lister Total="):visible').each(function(){
      myTotal = $(this).html();
      myTotal = myTotal.replace(/\D/g, "");
      myTotal = Math.ceil(myTotal);
      grandTotal += myTotal;
    });
    $('td:contains("Grand Total=")').html("Grand Total="+grandTotal);
    $('td:contains("Grand Total=")').parent().show();
    if (url.indexOf('listerSales') >= 0) {
      calculateGrandTotal();
    }
  });
  
  function filterByUser() {
    $('.collectibles, .jewelry').hide();
    $('#doFilter, #doFilterDept').prop('checked', false);
    if ($('#doFilterUser:checked').length > 0) {
      $('.collectibles, .jewelry').each(function(){
        if ($(this).attr('username') == $('#selectUser').val()) {
          $(this).show();
        }
      });
    } else {
      $('.collectibles, .jewelry, .hideable, .showable').show();
    }
  }
  
  $('#doFilterUser').bind('click', function(){
    filterByUser();
  });
  $('#selectUser').bind('change', function(){
    filterByUser();
  });
}

$('th:contains("Item Title")').parent().parent().before("<br>").before($('td:contains("Grand Total")').parent().clone()).before("<br>");