/* Module par Seb. L. */ 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"); if (location.href.includes("ScoDoc")) { styles.setAttribute( "href", removeLastTwoComponents(getCurrentScriptPath()) + "/css/releve-but.css" ); // Scodoc } else { styles.setAttribute("href", "/assets/styles/releve-but.css"); // Passerelle } this.shadow.appendChild(styles); } listeOnOff() { this.parentElement.parentElement.classList.toggle("listeOff"); this.parentElement.parentElement .querySelectorAll(".moduleOnOff") .forEach((e) => { e.classList.remove("moduleOnOff"); }); } moduleOnOff() { this.parentElement.classList.toggle("moduleOnOff"); } goTo() { let module = this.dataset.module; this.parentElement.parentElement.parentElement.parentElement .querySelector("#Module_" + module) .scrollIntoView(); } 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.showCustom(data); this.setOptions(data.options); this.shadow.querySelectorAll(".CTA_Liste").forEach((e) => { e.addEventListener("click", this.listeOnOff); }); this.shadow.querySelectorAll(".ue, .module").forEach((e) => { e.addEventListener("click", this.moduleOnOff); }); this.shadow .querySelectorAll(":not(.ueBonus)+.syntheseModule") .forEach((e) => { e.addEventListener("click", this.goTo); }); this.shadow.children[0].classList.add("ready"); } template() { return `

Inscrit le
Les moyennes ci-dessus servent à situer l'étudiant dans la promotion et ne correspondent pas à des validations de compétences ou d'UE.

Unités d'enseignement

La moyenne des ressources dans une UE dépend des poids donnés aux évaluations.
Liste

Ressources

Liste

Situations d'apprentissage et d'évaluation (SAÉ)

Liste
`; } /********************************/ /* Informations sur l'étudiant */ /********************************/ showInformations(data) { this.shadow.querySelector(".studentPic").src = data.etudiant.photo_url || "default_Student.svg"; let output = ""; if (this.config.showURL) { output += ``; } else { output += `
`; } 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}
`; if (this.config.showURL) { output += `
`; } else { output += `
`; } this.shadow.querySelector(".infoEtudiant").innerHTML = output; } /*******************************/ /* Affichage local */ /*******************************/ showCustom(data) { this.shadow.querySelector(".custom").innerHTML = data.custom || ""; } /*******************************/ /* Information sur le semestre */ /*******************************/ showSemestre(data) { let correspondanceCodes = { ADM: "Admis", AJD: "Admis par décision de jury", PASD: "Passage de droit : tout n'est pas validé, mais d'après les règles du BUT, vous passez", PAS1NCI: "Vous passez par décision de jury mais attention, vous n'avez pas partout le niveau suffisant", RED: "Ajourné mais autorisé à redoubler", NAR: "Non admis et non autorisé à redoubler : réorientation", DEM: "Démission", ABAN: "Abandon constaté sans lettre de démission", RAT: "En attente d'un rattrapage", EXCLU: "Exclusion dans le cadre d'une décision disciplinaire", DEF: "Défaillance : non évalué par manque d'assiduité", ABL: "Année blanche", }; this.shadow.querySelector( "#identite_etudiant" ).innerHTML = ` ${data.etudiant.nomprenom} `; this.shadow.querySelector(".dateInscription").innerHTML += this.ISOToDate( data.semestre.inscription ); let output = ""; if (!data.options.block_moyenne_generale) { 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}
`; } output += ` ${(() => { if ( !data.semestre.rang.groupes || Object.keys(data.semestre.rang.groupes).length == 0 ) { return ""; } let output = ""; let [idGroupe, dataGroupe] = Object.entries( data.semestre.rang.groupes )[0]; output += `
${data.semestre.groupes[0]?.group_name}
Rang :
${dataGroupe.value} / ${dataGroupe.total}
`; //
Max. promo. :
${dataGroupe.max || "-"}
//
Moy. promo. :
${dataGroupe.moy || "-"}
//
Min. promo. :
${dataGroupe.min || "-"}
return output; })()}
Absences
${ data.semestre.absences?.metrique ?? "1/2 jour." }
Non justifiées
${data.semestre.absences?.injustifie ?? "-"}
Total
${data.semestre.absences?.total ?? "-"}
`; if (data.semestre.decision_rcue?.length) { output += `
RCUE
${(() => { let output = ""; data.semestre.decision_rcue.forEach((competence) => { output += `
${competence.niveau?.competence?.titre || '?'}
${competence.code}
`; }); return output; })()}
`; } if (data.semestre.decision_ue?.length) { output += `
UE
${(() => { let output = ""; data.semestre.decision_ue.forEach((ue) => { output += `
${ue.acronyme}
${ue.code}
`; }); return output; })()}
`; } output += ` photo de l'étudiant `; /*${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; /*if(data.semestre.decision_annee?.code){ this.shadow.querySelector(".decision_annee").innerHTML = "Décision année : " + data.semestre.decision_annee.code + " - " + correspondanceCodes[data.semestre.decision_annee.code]; }*/ this.shadow.querySelector(".decision").innerHTML = data.semestre.situation || ""; /*if (data.semestre.decision?.code) { this.shadow.querySelector(".decision").innerHTML = "Décision jury: " + (data.semestre.decision?.code || ""); }*/ this.shadow.querySelector("#ects_tot").innerHTML = "ECTS semestre : " + (data.semestre.ECTS?.acquis ?? "-") + " / " + (data.semestre.ECTS?.total ?? "-"); } /*******************************/ /* Synthèse */ /*******************************/ showSynthese(data) { let output = ``; /* Fusion et tri des UE et UE capitalisées */ let fusionUE = [ ...Object.entries(data.ues), ...Object.entries(data.ues_capitalisees), ].sort((a, b) => { return a[1].numero - b[1].numero; }); /* Affichage */ fusionUE.forEach(([ue, dataUE]) => { if (dataUE.type == 1) { // UE Sport / Bonus output += `

Bonus

${dataUE.bonus_description}
${this.ueSport(dataUE.modules)}
`; } else { output += `

${ue}${dataUE.titre ? " - " + dataUE.titre : ""}

Moyenne : ${ dataUE.moyenne?.value || dataUE.moyenne || "-" }
Rang : ${dataUE.moyenne?.rang} / ${ dataUE.moyenne?.total }
`; if (!dataUE.date_capitalisation) { output += ` Bonus : ${dataUE.bonus || 0} - `; if (dataUE.malus >= 0) { output += `Malus : ${dataUE.malus || 0}`; } else { output += `Bonus complémentaire : ${ -dataUE.malus || 0 }`; } } else { output += ` le ${this.ISOToDate( dataUE.date_capitalisation.split("T")[0] )} dans ce semestre`; } output += `  - ECTS : ${dataUE.ECTS?.acquis ?? "-"} / ${ dataUE.ECTS?.total ?? "-" }
`; /*
Abs N.J.
${dataUE.absences?.injustifie || 0}
Total
${dataUE.absences?.total || 0}
*/ output += "
"; if (!dataUE.date_capitalisation) { output += this.synthese(data, dataUE.ressources) + this.synthese(data, dataUE.saes); } output += "
"; } }); 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 += `
${module} - ${titre}
${dataModule.moyenne} Coef. ${dataModule.coef}
`; }); return output; } ueSport(modules) { let output = ""; Object.values(modules).forEach((module) => { Object.values(module.evaluations).forEach((evaluation) => { output += `
${module.titre} - ${evaluation.description || "Note"}
${evaluation.note.value ?? "-"} Coef. ${evaluation.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 || "Évaluation")}
${evaluation.note.value} ${evaluation.evaluation_type == 0 ? "Coef." : evaluation.evaluation_type == 3 ? "Bonus" : "" } ${evaluation.coef ?? ""}
${evaluation.evaluation_type == 0 ? "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) { this.shadow.children[0].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);