Convert Hermes manifest to CSV
// ==UserScript==
// @name ManifestCSV
// @description Convert Hermes manifest to CSV
// @include https://courierportal.hermescloud.co.uk/*
// @grant none
// @version 0.4
// @namespace https://greasyfork.org/users/2391
// ==/UserScript==
/* jshint esversion: 6 */
const AddCSV =
{
csvLines: [],
scrollY: -1,
scrollAttempts: 0,
overlay: null,
createOverlay: function()
{
AddCSV.overlay = document.createElement('div');
AddCSV.overlay.id = 'AddCSV_Overlay';
AddCSV.overlay.style.position = "fixed";
AddCSV.overlay.style.display = "block";
AddCSV.overlay.style.width = "100%";
AddCSV.overlay.style.height = "100%";
AddCSV.overlay.style.top = 0;
AddCSV.overlay.style.left = 0;
AddCSV.overlay.style.right = 0;
AddCSV.overlay.style.bottom = 0;
AddCSV.overlay.style.backgroundColor = "rgba(0,0,0,0.5)";
AddCSV.overlay.style.zIndex = 2;
AddCSV.overlay.innerHTML = '<p style="color: yellow; font-size: 64px">Loading manifest, please wait...</p>';
document.body.appendChild(AddCSV.overlay);
},
init: function()
{
if
(
(document.getElementById('manifest-summary-button') != null) &&
(document.getElementsByName('round-id').length != 0) &&
(document.getElementsByName('manifest').length != 0)
)
{
var tBtn = document.createElement('i');
tBtn.className = "btn btn-primary";
tBtn.id = "saveAsCSV";
tBtn.innerText = "Save as CSV";
document.getElementsByClassName('card__body')[0].append(tBtn);
tBtn.addEventListener("click", AddCSV.loadManifest);
}
else
{
window.setTimeout(AddCSV.init, 500);
}
},
loadManifest: function()
{
AddCSV.createOverlay();
AddCSV.scrollY = -1;
AddCSV.scrollAttempts = 0;
AddCSV.scrollToEnd();
return false;
},
scrollToEnd: function()
{
// Reset the scroll attempts counter if we were able to scroll further down the page last time around,
// OR if we're at the end but the "loading more data" wibbly dots are being displayed...
if((window.scrollY != AddCSV.scrollY) || (document.getElementsByClassName('loading-dots').length != 0))
{
AddCSV.scrollY = window.scrollY;
AddCSV.scrollAttempts = 0;
}
if(++AddCSV.scrollAttempts < 3)
{
window.scrollBy(0, 1000);
window.setTimeout(AddCSV.scrollToEnd, 100);
return;
}
window.scrollTo(0,0);
AddCSV.process();
},
getFormattedType: function(rawType)
{
var retval = '';
if(rawType == 'CL')
{
retval += 'COL, Collection';
}
else
{
retval += 'DEL, ';
if(rawType == '01') retval += 'Packet/C2C Small';
else if(rawType == '02') retval += 'Standard';
else if(rawType == '03') retval += 'Heavy/Large';
else if(rawType == '04') retval += 'Heavy';
else if(rawType == '05') retval += 'Hanging';
else if(rawType == '06') retval += 'Small';
else if(rawType == '07') retval += 'Medium';
else if(rawType == '08') retval += 'Postable';
else retval += 'Unknown';
}
retval += ' ('+rawType+')';
return retval;
},
saveToFile: function()
{
const a = document.createElement('a');
var outData = '';
var currentRoundIdx = document.getElementsByName('round-id')[0].selectedIndex;
var currentManifestIdx = document.getElementsByName('manifest')[0].selectedIndex;
var filename = 'manifest ';
filename += document.getElementsByName('round-id')[0].options[currentRoundIdx].innerText.trim();
filename += ' ';
filename += document.getElementsByName('manifest')[0].options[currentManifestIdx].innerText.trim();
filename += '.csv';
for(var i =0; i < AddCSV.csvLines.length; ++i)
{
outData += AddCSV.csvLines[i] + '\r\n';
}
const file = new Blob([outData], {type: 'text/plain'});
a.href= URL.createObjectURL(file);
a.download = filename;
a.click();
URL.revokeObjectURL(a.href);
},
process: function()
{
AddCSV.overlay.style.display = "none";
var entries = document.getElementsByClassName('data-row').length;
if(entries > 0)
{
AddCSV.csvLines = [];
var tLine = '';
for(var i = 0; i < entries; ++i)
{
var tRowObj = document.getElementsByClassName('data-row')[i];
var tRowBits = tRowObj.getElementsByTagName('li');
tLine = '\t';
// fix for the new "remanifested" barcode entries
var tBarcode = tRowBits[0].innerText;
tBarcode = tBarcode.split('\n');
tLine += tBarcode[1];
if(tBarcode[0].indexOf('Remanifested') != -1)
{
tLine += ' (R)';
}
tLine += ',';
tLine += tRowBits[1].getElementsByClassName('data-row-item__value')[0].innerText + ',';
tLine += tRowBits[2].getElementsByClassName('data-row-item__value')[0].innerText + ',';
var tService = tRowBits[3].getElementsByClassName('data-row-item__value')[0].innerText;
tService = tService.replace(',','/');
tLine += tService + ',';
var tType = tRowBits[4].getElementsByClassName('data-row-item__value')[0].innerText;
tLine += tType; //AddCSV.getFormattedType(tType);
AddCSV.csvLines.push(tLine);
}
AddCSV.saveToFile();
}
}
};
AddCSV.init();