class releveBUT extends HTMLElement {
constructor(){
super();
this.shadow = this.attachShadow({mode: 'open'});
/* Config par defaut */
this.config = {
showURL: true
};
/* Template du module */
this.shadow.innerHTML = this.template();
/* Style du module */
const styles = document.createElement('link');
styles.setAttribute('rel', 'stylesheet');
styles.setAttribute('href', '/ScoDoc/static/css/releve-but.css');
this.shadow.appendChild(styles);
this.shadow.querySelectorAll(".CTA_Liste").forEach(e => {
e.addEventListener("click", this.listeOnOff)
})
}
listeOnOff() {
this.parentElement.parentElement.classList.toggle("listeOff")
}
set setConfig(config){
this.config.showURL = config.showURL ?? this.config.showURL;
}
set showData(data) {
this.showInformations(data);
this.showSemestre(data);
this.showSynthese(data);
this.showEvaluations(data);
this.setOptions(data.options);
this.shadow.children[0].classList.add("ready");
}
template(){
return `
Semestre
Inscrit le
Les moyennes servent à situer l'étudiant dans la promotion et ne correspondent pas à des validations de
compétences ou d'UE.
Synthèse
La moyenne des ressources dans une UE dépend des poids donnés aux évaluations.
`;
}
/********************************/
/* Informations sur l'étudiant */
/********************************/
showInformations(data) {
this.shadow.querySelector(".studentPic").src = data.etudiant.photo_url || "default_Student.svg";
let output = `
${this.civilite(data.etudiant.civilite)}
${data.etudiant.nom}
${data.etudiant.prenom}`;
if (data.etudiant.date_naissance) {
output += ` né${(data.etudiant.civilite == "F") ? "e" : ""} le ${this.ISOToDate(data.etudiant.date_naissance)}`;
}
output += `
Numéro étudiant : ${data.etudiant.code_nip} -
Code INE : ${data.etudiant.code_ine}
${data.formation.titre}
`;
this.shadow.querySelector(".infoEtudiant").innerHTML = output;
}
/*******************************/
/* Information sur le semestre */
/*******************************/
showSemestre(data) {
this.shadow.querySelector("h2").innerHTML += data.semestre.numero;
this.shadow.querySelector(".dateInscription").innerHTML += this.ISOToDate(data.semestre.inscription);
let output = `
Moyenne
${data.semestre.notes.value}
Rang :
${data.semestre.rang.value} / ${data.semestre.rang.total}
Max. promo. :
${data.semestre.notes.max}
Moy. promo. :
${data.semestre.notes.moy}
Min. promo. :
${data.semestre.notes.min}
${data.semestre.groupes.map(groupe => {
return `
Groupe
${groupe.nom}
Rang :
${groupe.rang.value} / ${groupe.rang.total}
Max. groupe :
${groupe.notes.max}
Moy. groupe :
${groupe.notes.min}
Min. groupe :
${groupe.notes.min}
`;
}).join("")
}
`;
this.shadow.querySelector(".infoSemestre").innerHTML = output;
}
/*******************************/
/* Synthèse */
/*******************************/
showSynthese(data) {
let output = ``;
Object.entries(data.ues).forEach(([ue, dataUE]) => {
output += `
${(dataUE.competence) ? dataUE.competence + " - " : ""}${ue}
Moyenne : ${dataUE.moyenne?.value || "-"}
Bonus : ${dataUE.bonus || 0} -
Malus : ${dataUE.malus || 0}
-
ECTS : ${dataUE.ECTS.acquis} / ${dataUE.ECTS.total}
Abs N.J.
${dataUE.absences?.injustifie || 0}
Total
${dataUE.absences?.total || 0}
${this.synthese(data, dataUE.ressources)}
${this.synthese(data, dataUE.saes)}
`;
});
this.shadow.querySelector(".synthese").innerHTML = output;
}
synthese(data, modules) {
let output = "";
Object.entries(modules).forEach(([module, dataModule]) => {
let titre = data.ressources[module]?.titre || data.saes[module]?.titre;
let url = data.ressources[module]?.url || data.saes[module]?.url;
output += `
${this.URL(url, `${module} - ${titre}`)}
${dataModule.moyenne}
Coef. ${dataModule.coef}
`;
})
return output;
}
/*******************************/
/* Evaluations */
/*******************************/
showEvaluations(data) {
this.shadow.querySelector(".evaluations").innerHTML = this.module(data.ressources);
this.shadow.querySelector(".sae").innerHTML += this.module(data.saes);
}
module(module) {
let output = "";
Object.entries(module).forEach(([numero, content]) => {
output += `
${this.URL(content.url, `${numero} - ${content.titre}`)}
Moyenne indicative : ${content.moyenne.value}
Classe : ${content.moyenne.moy} -
Max : ${content.moyenne.max} -
Min : ${content.moyenne.min}
Abs inj.
${content.absences?.injustifie || 0}
Total
${content.absences?.total || 0}
${this.evaluation(content.evaluations)}
`;
})
return output;
}
evaluation(evaluations) {
let output = "";
evaluations.forEach((evaluation) => {
output += `
${this.URL(evaluation.url, evaluation.description)}
${evaluation.note.value}
Coef. ${evaluation.coef}
Coef
${evaluation.coef}
Max. promo.
${evaluation.note.max}
Moy. promo.
${evaluation.note.moy}
Min. promo.
${evaluation.note.min}
${Object.entries(evaluation.poids).map(([UE, poids]) => {
return `
Poids ${UE}
${poids}
`;
}).join("")}
`;
})
return output;
}
/********************/
/* Options */
/********************/
setOptions(options) {
Object.entries(options).forEach(([option, value]) => {
if (value === false) {
document.body.classList.add(option.replace("show", "hide"))
}
})
}
/********************/
/* Fonctions d'aide */
/********************/
URL(href, content){
if(this.config.showURL){
return `${content}`;
} else {
return content;
}
}
civilite(txt) {
switch (txt) {
case "M": return "M.";
case "F": return "Mme";
default: return "";
}
}
ISOToDate(ISO) {
return ISO.split("-").reverse().join("/");
}
}
customElements.define('releve-but', releveBUT);