ajout-Bilan-Entrees-Sorties

[FR] affiche le total des entrées sorties sur la page de mouvement des comptes(fonctionne avec la nouvelle interface 01/2016)

目前为 2016-01-26 提交的版本,查看 最新版本

// ==UserScript==
// @name           ajout-Bilan-Entrees-Sorties
// @version        0.3
// @namespace      nil
// @author         nil
// @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");
    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).replace(/^\+/, '');
  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);