BmdOnline/Teleinfo — pull request #11 by DarkAnakin (2014-06-01 17:43:31+00:00)
Title: Histogramme separé pour les abonnement avec options tarifaires

Bonjour, encore bravo pour votre travail ( je mets de la pommade, cela peut toujours servir).

C'est certainement déjà en cours d'éleboration car j'ai vu quelque variable sur votre code qui me le fait penser.
Une image vaut mieux qu'un long discours:
![graph](https://cloud.githubusercontent.com/assets/7100439/3142227/2647818a-e9b2-11e3-89bf-8e2bfe8b5395.png)
On arrive plus facilement avoir les évolutions.

```php
function init_chart2(data) {
"use strict";

// Préparation des séries de données
var graphSeries = [];

var max_size = 0;
$.each(data.series, function (serie_name,serie_title) {
max_size = Math.max(max_size,data[serie_name+"_data"].length);
});
var total_courant = new Array(max_size);
for(var i=0;i 0) { $('#chart2_legende').show(); }
$("#chart2_legende").html(data.subtitle);
}
this.debut = data.debut;
init_chart2_navigation(data.duree, data.periode);
}
},
ignoreHiddenSeries: false
},
title: {
text : data.title
},
subtitle: {
text: 'Construit en...'
},
plotOptions: {
column: {
stacking: true, // 'normal',
// When 3D and spline, don't do stacking
//stacking: data.show3D ? (data.PREC_type === "column") : (data.PREC_type === "spline"),
depth: 50,
grouping: true,
groupZPadding: 20
}
/*spline: {
stacking: true, // 'normal',
depth: 50,
}*/
},
xAxis: [{
labels: {
formatter: function () {
//if (this.axis.categories[this.values] === null) {
if (this.axis.categories.indexOf(this.value) === -1) {
return "";
}
return this.value;
}
},
categories: data.categories
}],
yAxis: {
opposite: false,
title: {
text: 'kWh'
},
labels: {
formatter: function () {
return this.value; // + ' kWh';
}
}
},
tooltip: {
useHTML: true,
formatter: function () {
var tooltip;

var thisSerieName = this.series.name;
var thisPtX = this.point.x;
var thisPtY = this.point.y;
var trouve = false;

$.each(data.PREC_data_detail, function (PREC_data_name) {
if (thisSerieName == PREC_data_name+" precedente")
trouve= (trouve || true);
else
trouve = (trouve || false);
});
if(thisSerieName == "Total "+data.PREC_name)
trouve = (trouve || true);

if(!trouve) { // Période courante
// Date & Consommation
tooltip = 'Détails de la période
';
tooltip += '' + data.optarif[Object.keys(data.optarif)[0]] + '
';
tooltip += '' + this.key + ' ~ Total : ' + Highcharts.numberFormat(this.point.stackTotal, 2) + ' kWh
';

// Abonnement
tooltip += 'Abonnement : ' + Highcharts.numberFormat(data.prix.ABONNEMENTS[thisPtX], 2) + ' Euro
';

// Taxes
tooltip += 'Taxes :
';
$.each(data.prix.TAXES, function (serie_name, serie_data) {
tooltip += serie_name + ' : ' + Highcharts.numberFormat(data.prix.TAXES[serie_name][thisPtX], 2) + ' Euro
';
});

// Coût détaillé
tooltip += 'Consommé :
';
$.each(data.series, function (serie_name, serie_title) {
// Ici, on est hors de porté du "this" de la fonction formatter.
// On utilise donc les variables nécessaire (thisPtX...)
if (data.prix.TARIFS[serie_name][thisPtX] !== 0) {
tooltip += '';
if ((serie_title === thisSerieName) && (Object.keys(data.series).length > 1)) {
tooltip += "* ";
}
tooltip += serie_name + ' : ' + Highcharts.numberFormat(data.prix.TARIFS[serie_name][thisPtX], 2) + ' Euro';
tooltip += ' (' + data[serie_name + "_data"][thisPtX] + ' kWh)
';
tooltip += '';
}
});

// Coût total
tooltip += 'Total : ' + Highcharts.numberFormat(data.prix.TOTAL[thisPtX], 2) + ' Euro';
} else { // Période Précédente
// Date & Consommation
tooltip = 'Détails de la période précédente
';
tooltip += '' + data.optarif[Object.keys(data.optarif)[0]] + '
';
tooltip += '' + this.key + ' ~ Total : ' + Highcharts.numberFormat(this.y, 2) + ' kWh
';

// Abonnement
tooltip += 'Abonnement : ' + Highcharts.numberFormat(data.PREC_prix.ABONNEMENTS[thisPtX], 2) + ' Euro
';

// Taxes
tooltip += 'Taxes :
';
$.each(data.PREC_prix.TAXES, function (serie_name, serie_data) {
tooltip += serie_name + ' : ' + Highcharts.numberFormat(data.PREC_prix.TAXES[serie_name][thisPtX], 2) + ' Euro
';
});

// Coût détaillé
tooltip += 'Consommé :
';
$.each(data.series, function (serie_name, serie_title) {
// Ici, on est hors de porté du "this" de la fonction formatter.
// On utilise donc les variables nécessaire (thisPtX...)
if (data.PREC_prix.TARIFS[serie_name][thisPtX] !== 0) {
tooltip += '';
if ((serie_title === thisSerieName) && (Object.keys(data.series).length > 1)) {
tooltip += "* ";
}
tooltip += serie_name + ' : ' + Highcharts.numberFormat(data.PREC_prix.TARIFS[serie_name][thisPtX], 2) + ' Euro';
tooltip += ' (' + data.PREC_data_detail[serie_name][thisPtX] + ' kWh)
';
tooltip += '';
}
});

// Coût total
tooltip += 'Total : ' + Highcharts.numberFormat(data.PREC_prix.TOTAL[thisPtX], 2) + ' Euro';
}
return tooltip;
}
},
series: graphSeries,
legend: {
enabled: true
}
};
}

```

J'ai essayé d'être le moins "destructeur" possible sur votre code pour que vous puissiez debugger facilement.
Sur ma version avec la version 4.2dev j'utilise xcolor.opacity pour calculer la couleur des versions précédentes mais sur celui si cela ne semble pas marcher et j'ai pas trop cherché non plus (je deteste debugger).

Pour le "recalculPuissance" la valeur retournée pourrait être arrondi (round) car sinon on a des valeurs avec chiffres après la virgule.