diff --git a/app/but/jury_export.py b/app/but/jury_export.py index fd1e67fa7..a403151cb 100644 --- a/app/but/jury_export.py +++ b/app/but/jury_export.py @@ -11,6 +11,7 @@ import datetime from flask import render_template, url_for import app +from app import Departement from app.models import FormSemestre, FormSemestreInscription from app.views import ScoData @@ -19,10 +20,14 @@ def feuille_preparation_jury_but(formsemestre_id: int): formsemestre: FormSemestre = FormSemestre.query.filter_by( id=formsemestre_id ).first_or_404() + departement: Departement = Departement.query.filter_by( + id=formsemestre.dept_id + ).first_or_404() breakpoint() return render_template( "but/jury_export.j2", datetime=datetime, formsemestre=formsemestre, + dept = departement.acronym, sco=ScoData(formsemestre=formsemestre), ) diff --git a/app/static/js/releve-but.js b/app/static/js/releve-but.js index d76ec5359..f7872dc05 100644 --- a/app/static/js/releve-but.js +++ b/app/static/js/releve-but.js @@ -1,556 +1,578 @@ /* Module par Seb. L. */ -class releveBUT extends HTMLElement { - constructor() { - super(); - this.shadow = this.attachShadow({ mode: "open" }); +// 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 : " + +// (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} +// 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) { +// 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); - /* Config par defaut */ - this.config = { - showURL: true, - }; + \ No newline at end of file diff --git a/app/templates/but/jury_export.j2 b/app/templates/but/jury_export.j2 index 631146a8f..78a960c18 100644 --- a/app/templates/but/jury_export.j2 +++ b/app/templates/but/jury_export.j2 @@ -23,23 +23,28 @@