/* (1) Load statistics ---------------------------------------------------------*/ /* (1) Initialize list */ gstore.add('stats', null); gstore.add('dimensions', null); /* (2) Get statistics */ api.call('GET department/stats', {}, function(rs) { // {1} If error -> abort // if (rs.error !== 0) { return console.log('No formation found, error: ' + rs.error); } let maxValue = null; // plus haute valeur des stats let maxLabelLength = null; // plus longues chaîne de caractères pour les stats let data = {}; // ensemble des statistiques à transmettre à VueJS let map = { "potentiel" : "Heures potentielles", "sous_service" : "Heures en sous-services", "heures_comp" : "Heures comp.", "heures_vacataire" : "Heures vacataires", "heures_exterieur" : "Heures à l'extérieurs", "heures_ue_desactive" : "Heures UE annulées", "nbr_ue_desactive" : "Nombre d'UE annulées" }; for (let stat in rs.data) { // détection de la plus grande valeur statistique maxValue = rs.data[stat] > maxValue ? rs.data[stat] : maxValue; // détection du plus grand nom présent maxLabelLength = map[stat].length > maxLabelLength ? map[stat].length : maxLabelLength; data[map[stat]] = Math.round(rs.data[stat] * 100) / 100; } // légendes à afficher en plus de la valeur gstore.get.titles = {}; gstore.get.titles[map['heures_ue_desactive']] = `sur ${data[map['nbr_ue_desactive']]} UE annulées`; // statistiques à ne pas afficher delete data[map['nbr_ue_desactive']]; gstore.get.stats = data; gstore.get.dimensions = { padding: 5, text: { size: maxLabelLength * 8.5, alignH: 5, alignV: 20, }, bin: { count: Object.keys(gstore.get.stats).length, width: 30, spacing: 15, margin: 5 } }; if (maxValue != null) { let magnitude = Math.pow(10, maxValue.length-1)/2; // ordre de grandeur du nombre maxValue = Math.round( ((gstore.get.dimensions.bin.margin/100)+1) // on rajoute la marge afin qu'un "bin" ne dépasse jamais sur la droite * maxValue / magnitude ) * magnitude; } gstore.get.maxValue = maxValue; gstore.get.dimensions.axis = { height: (gstore.get.dimensions.bin.count*gstore.get.dimensions.bin.width) + ((gstore.get.dimensions.bin.count)*gstore.get.dimensions.bin.spacing), width: 500, precision: 4 }; gstore.get.viewBox = `0 0 ${gstore.get.dimensions.axis.width + gstore.get.dimensions.text.size + 50} ${gstore.get.dimensions.axis.height + 30}`; }); gstore.add('colors', ["blue", "yellow", "green", "red", "purple", "lightblue", "lightred", "lightyellow", "lightgreen", "lightpurple"]);