[FR] affiche le total des entrées sorties sur la page de mouvement des comptes
// ==UserScript==
// @name Boursorama - compte/mouvements - ajoute bilan entrees/sorties
// @version 1.2
// @namespace nil
// @author nil
// @grant none
// @description [FR] affiche le total des entrées sorties sur la page de mouvement des comptes
// @include https://clients.boursorama.com/compte/cav/*/mouvements
// @include https://clients.boursorama.com/compte/cav/*/mouvements?*
// @include https://clients.boursorama.com/budget/mouvements*
// ==/UserScript==
function init_showInAndOut() {
var ul = null, ul_cp, collection;
collection = document.getElementsByClassName("list__movement__line--amount");
if (0 === collection.length) {
console.log("Warn1: Userscript showInAndOut probably needs to be updated");
// let's try again in 1 sec
window.setTimeout(init_showInAndOut, 1000);
return;
}
collection = document.getElementsByClassName("summary__numbers");
for (var elt, i=0; elt = collection.item(i); i++) {
if ('UL' !== elt.nodeName)
continue;
ul = elt;
break;
}
if (null === ul) {
alert("Err2: ul.summary__numbers not found\n\n"+str_movements);
return;
}
var ul_cp = ul.cloneNode(false);
ul_cp.id = "showInAndOut";
ul.parentNode.insertBefore(ul_cp, ul.nextSibling);
function formatNumberToPrettyDecimal(num) {
// at least 3 characters (pad with 0)
num_str = num.toString().replace(/^[+-]?/, '$&000');
// make it decimal (:100), and remove unnecessary leading zero
num_str = num_str.replace(/\d\d$/, ',$&').replace(/^([+-]?)0{1,3}([^,])/, '$1$2');
// space it a little bit
num_str = num_str.replace(/(\d)(\d\d\d),/, '$1 $2,');
// prefix it with a + if not negative
num_str = num_str.replace(/^[^-]/, '+$&');
return num_str;
}
function refresh_showInAndOut() {
var str_movements, fromDate, toDate, period;
var collection, resulting_movement, resulting_movement_str;
var totalIN = 0, totalOUT = 0, nbIN = 0, nbOUT = 0;
var totalIN, totalOUT, totalIN_str, totalOUT_str;
var ul = document.getElementById("showInAndOut"), ul_innerHTML;
if (!ul) {
console.log("#showInAndOut not found")
return;
}
var collection = document.getElementsByClassName("list__movement__line--amount");
var re = /\blist__movement__line--amount__split\b/
for (var elt, i=0; elt = collection.item(i); i++) {
// skip details for split operations
if (null !== elt.className.match(re)){
continue;
}
// remove coma (like doing * 100)
amount = parseFloat(elt.textContent.replace(/\s+€?/g, '').replace(',', ''));
if(amount >= 0) {
totalIN += amount;
nbIN++;
} else {
totalOUT += amount;
nbOUT++;
}
}
str_movements = "in: " + totalIN + " €, out: " + totalOUT + " €";
fromDate = document.getElementById("movementSearch_fromDate").value;
toDate = document.getElementById("movementSearch_toDate").value;
if (0 < fromDate.length)
period = "sur la période<br> du " + fromDate + " au " + toDate;
else
period = "sur un mois glissant";
resulting_movement = totalIN + totalOUT;
resulting_movement_str = formatNumberToPrettyDecimal(resulting_movement);
totalIN_str = formatNumberToPrettyDecimal(totalIN);
totalOUT_str = formatNumberToPrettyDecimal(totalOUT);
ul_innerHTML = "<li class='summary__number " + (resulting_movement >= 0.0 ? "positive" : "negative") + "'>";
ul_innerHTML += "<h4 class='summary__title'>Mouvement résultant " + period + "</h4><h3 class='summary__value'>"+ resulting_movement_str + " <sup>€</sup></h3></li>";
ul_innerHTML += "<li class='summary__number positive'><h4 class='summary__title'>Total des " + nbIN + " entrées</h4><h3 class='summary__value'>" + totalIN_str + " <sup>€</sup></h3></li>";
ul_innerHTML += "<li class='summary__number negative'><h4 class='summary__title'>Total des " + nbOUT + " sorties</h4><h3 class='summary__value'>" + totalOUT_str + " <sup>€</sup></h3></li>";
ul.innerHTML = ul_innerHTML;
}
refresh_showInAndOut();
// force refresh on click
ul_cp.addEventListener('click', refresh_showInAndOut, false);
window.setInterval(refresh_showInAndOut, 30000);
}
window.addEventListener('load', init_showInAndOut);