[FR] affiche le total des entrées sorties sur la page de mouvement des comptes(fonctionne avec la nouvelle interface 01/2016)
当前为
// ==UserScript==
// @name ajout-Bilan-Entrees-Sorties
// @version 0.6
// @namespace nil
// @author nil
// @grant none
// @description [FR] affiche le total des entrées sorties sur la page de mouvement des comptes(fonctionne avec la nouvelle interface 01/2016)
// @include https://clients.boursorama.com/compte/cav/*/mouvements
// @include https://clients.boursorama.com/compte/cav/*/mouvements?*
// ==/UserScript==
function showInAndOut() {
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;
}
var totalIN = 0, totalOUT = 0;
var nbIN = 0, nbOUT = 0;
var collection = document.getElementsByClassName("list__movement__line--amount");
if (0 === collection.length) {
//console.log("Err1: Userscript showInAndOut probably needs to be updated");
// let's try again in 1 sec
window.setTimeout(showInAndOut, 1000);
return;
}
for (var elt, i=0; elt = collection.item(i); i++) {
// remove coma (like doing * 100)
amount = parseFloat(elt.textContent.replace(/\s+€?/g, '').replace(',', ''));
if(amount >= 0) {
totalIN += amount;
nbIN++;
} else {
totalOUT += amount;
nbOUT++;
}
}
var str_movements = "in: " + totalIN + " €, out: " + totalOUT + " €";
var ul = null;
collection = document.getElementsByClassName("summary__numbers");
for (var elt, i=0; elt = collection.item(i); i++) {
if (elt.tagName.toLowerCase() !== "ul")
continue;
ul = elt;
break;
}
if (null === ul) {
alert("Err2: ul.summary__numbers not found\n\n"+str_movements);
return;
}
var fromDate = document.getElementById("movementSearch_fromDate").value;
var toDate = document.getElementById("movementSearch_toDate").value;
var period = fromDate + " au " + toDate;
var ul_cp = ul.cloneNode(false);
ul_cp.className += " showInAndOut";
var resulting_movement = totalIN + totalOUT;
var resulting_movement_str = formatNumberToPrettyDecimal(resulting_movement);
var totalIN_str = formatNumberToPrettyDecimal(totalIN);
var totalOUT_str = formatNumberToPrettyDecimal(totalOUT);
var ul_innerHTML = "<li class='summary__number " + (resulting_movement >= 0.0 ? "positive" : "negative") + "'>";
ul_innerHTML += "<h4 class='summary__title'>Mouvement résultant sur la période<br> du " + 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_cp.innerHTML = ul_innerHTML;
ul.parentNode.insertBefore(ul_cp, ul.nextSibling);
}
document.addEventListener('DOMContentLoaded', showInAndOut);