// ==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"> </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;'> </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(" ");
$('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>");