Initial commit: banking statement download scripts
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
// =============================================================================
|
||||
// Westpac Statement Download Helper
|
||||
// =============================================================================
|
||||
// PASTE + ENTER, then click Download PDF buttons normally.
|
||||
// Instead of opening in a new tab, the PDF saves as a properly named file.
|
||||
//
|
||||
// TO STOP: just refresh the page (F5)
|
||||
// =============================================================================
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
let downloadCount = 0;
|
||||
|
||||
// Get the currently selected account name for the filename
|
||||
function getAccountName() {
|
||||
const select = document.getElementById('AccountGlobalId');
|
||||
if (!select) return 'Account';
|
||||
const text = select.options[select.selectedIndex].text.trim();
|
||||
// Extract just the account name (before the number/balance)
|
||||
// e.g., "Altitude Qantas Black Card xxxx xxxx xx77 8032 -$10,272.88"
|
||||
// → "Altitude-Qantas-Black-Card"
|
||||
// e.g., "Westpac Choice 733-501 714878 $0.00"
|
||||
// → "Westpac-Choice"
|
||||
const match = text.match(/^(.+?)\s{2,}/);
|
||||
if (match) {
|
||||
return match[1].trim().replace(/\s+/g, '-');
|
||||
}
|
||||
return text.split(/\s{2,}/)[0].trim().replace(/\s+/g, '-');
|
||||
}
|
||||
|
||||
// Parse date from the statement row
|
||||
function getDateFromRow(row) {
|
||||
const dateCell = row.querySelector('td.date span[data-bind*="FormattedDate"]');
|
||||
if (!dateCell) return null;
|
||||
const text = dateCell.textContent.trim(); // e.g., "22 Feb 2026"
|
||||
const match = text.match(/(\d{1,2})\s+(\w{3})\s+(\d{4})/);
|
||||
if (!match) return null;
|
||||
const [, day, monthShort, year] = match;
|
||||
const monthNum = new Date(`${monthShort} 1, 2000`).getMonth() + 1;
|
||||
const monthNames = ['', 'January', 'February', 'March', 'April', 'May', 'June',
|
||||
'July', 'August', 'September', 'October', 'November', 'December'];
|
||||
return {
|
||||
year,
|
||||
monthNum: String(monthNum).padStart(2, '0'),
|
||||
monthName: monthNames[monthNum]
|
||||
};
|
||||
}
|
||||
|
||||
// Intercept clicks on Download PDF links
|
||||
document.addEventListener('click', function (e) {
|
||||
const link = e.target.closest('td.tf-actions a.btn');
|
||||
if (!link) return;
|
||||
|
||||
const href = link.getAttribute('href');
|
||||
if (!href || !href.includes('getpdfstatement')) return;
|
||||
|
||||
// Prevent the default (opening in new tab)
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const row = link.closest('tr');
|
||||
const dateInfo = row ? getDateFromRow(row) : null;
|
||||
const accountName = getAccountName();
|
||||
|
||||
let filename;
|
||||
if (dateInfo) {
|
||||
filename = `Westpac-${accountName}-${dateInfo.year}-${dateInfo.monthNum}-${dateInfo.monthName}.pdf`;
|
||||
} else {
|
||||
filename = `Westpac-${accountName}-${Date.now()}.pdf`;
|
||||
}
|
||||
|
||||
console.log(`⏳ Downloading ${filename}...`);
|
||||
|
||||
// Fetch the PDF and save it
|
||||
fetch(href, { credentials: 'include' })
|
||||
.then(response => {
|
||||
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
||||
return response.blob();
|
||||
})
|
||||
.then(blob => {
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
setTimeout(() => URL.revokeObjectURL(url), 2000);
|
||||
downloadCount++;
|
||||
console.log(`✅ #${downloadCount} ${filename} (${(blob.size / 1024).toFixed(0)} KB)`);
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(`❌ Failed to download ${filename}:`, err);
|
||||
console.log(' Opening in new tab as fallback...');
|
||||
window.open(href, '_blank');
|
||||
});
|
||||
}, true);
|
||||
|
||||
console.log('');
|
||||
console.log('✅ Westpac download helper active!');
|
||||
console.log('👆 Click Download PDF buttons normally.');
|
||||
console.log(' Each click: PDF saves as a named file (no new tab).');
|
||||
console.log(' To stop: refresh (F5)');
|
||||
console.log('');
|
||||
})();
|
||||
Reference in New Issue
Block a user