diff --git a/app/but/bulletin_but.py b/app/but/bulletin_but.py index b5cf3be88..8695cb541 100644 --- a/app/but/bulletin_but.py +++ b/app/but/bulletin_but.py @@ -141,7 +141,7 @@ class BulletinBUT: def etud_ues_capitalisees(self, etud: Identite) -> dict: """dict avec les UE capitalisees. la clé est l'acronyme d'UE, qui ne peut donc être capitalisée qu'une seule fois (on prend la meilleure)""" - if not etud.id in self.res.validations.ue_capitalisees: + if not etud.id in self.res.validations.ue_capitalisees.index: return {} # aucune capitalisation d = {} for _, ue_capitalisee in self.res.validations.ue_capitalisees.loc[ @@ -162,11 +162,24 @@ class BulletinBUT: "numero": ue.numero, "type": ue.type, "color": ue.color, - "moyenne": ue_capitalisee.moy_ue, + "moyenne": fmt_note(ue_capitalisee.moy_ue), "is_external": ue_capitalisee.is_external, "date_capitalisation": ue_capitalisee.event_date, "formsemestre_id": ue_capitalisee.formsemestre_id, + "bul_orig_url": url_for( + "notes.formsemestre_bulletinetud", + scodoc_dept=g.scodoc_dept, + etudid=etud.id, + formsemestre_id=ue_capitalisee.formsemestre_id, + ) + if ue_capitalisee.formsemestre_id + else None, } + if self.prefs["bul_show_ects"]: + d[ue.acronyme]["ECTS"] = { + "acquis": ue.ects or 0.0, # toujours validée ici + "total": ue.ects or 0.0, # float même si non renseigné + } return d def etud_mods_results(self, etud, modimpls, version="long") -> dict: diff --git a/app/static/css/releve-but.css b/app/static/css/releve-but.css index 3a9abe5fa..f3ea9c8a2 100644 --- a/app/static/css/releve-but.css +++ b/app/static/css/releve-but.css @@ -20,6 +20,7 @@ main { --couleurPrincipale: rgb(240, 250, 255); --couleurFondTitresUE: #b6ebff; + --couleurFondTitresUECapitalisee: #96cf93; --couleurFondTitresRes: #f8c844; --couleurFondTitresSAE: #c6ffab; --couleurSecondaire: #fec; @@ -256,6 +257,11 @@ section>div:nth-child(1) { background: var(--couleurFondTitresUE); } +.synthese .ue_capitalisee, +.synthese .ue_capitalisee h3 { + background: var(--couleurFondTitresUECapitalisee); +} + .synthese .ue>div { text-align: right; } diff --git a/app/static/js/releve-but.js b/app/static/js/releve-but.js index 085b8638e..f38650bc6 100644 --- a/app/static/js/releve-but.js +++ b/app/static/js/releve-but.js @@ -225,13 +225,13 @@ class releveBUT extends HTMLElement {
${data.semestre.absences?.injustifie ?? "-"}
Total
${data.semestre.absences?.total ?? "-"}
`; - if(data.semestre.decision_rcue?.length){ + if (data.semestre.decision_rcue?.length) { output += `
RCUE
- ${(()=>{ + ${(() => { let output = ""; - data.semestre.decision_rcue.forEach(competence=>{ + data.semestre.decision_rcue.forEach(competence => { output += `
${competence.niveau.competence.titre}
${competence.code}
`; }) return output; @@ -239,13 +239,13 @@ class releveBUT extends HTMLElement {
` } - if(data.semestre.decision_ue?.length){ + if (data.semestre.decision_ue?.length) { output += `
UE
- ${(()=>{ + ${(() => { let output = ""; - data.semestre.decision_ue.forEach(ue=>{ + data.semestre.decision_ue.forEach(ue => { output += `
${ue.acronyme}
${ue.code}
`; }) return output; @@ -253,7 +253,7 @@ class releveBUT extends HTMLElement {
` } - + output += ` photo de l'étudiant @@ -271,12 +271,12 @@ class releveBUT extends HTMLElement { }).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 || ""); @@ -328,10 +328,47 @@ class releveBUT extends HTMLElement { ${this.synthese(data, dataUE.saes)} `; + /* UE capitalisées */ + if (ue in data.ues_capitalisees) { + output += this.show_ue_capitalisee(ue, data.ues_capitalisees[ue]); + delete data.ues_capitalisees[ue]; + } } }); + /* UE capitalisées seulement (non déjà vues) */ + Object.entries(data.ues_capitalisees).forEach(([ue, ue_cap]) => { + output += this.show_ue_capitalisee(ue, data.ues_capitalisees[ue]); + }); this.shadow.querySelector(".synthese").innerHTML = output; } + + show_ue_capitalisee(ue, ue_cap) { + let date_capitalisation = new Date(ue_cap.date_capitalisation).toLocaleString("fr-FR"); + let link_sem = ""; + if (ue_cap.bul_orig_url != null) { + link_sem = `dans ce semestre`; + } + return ` +
+
+

+ Capitalisée : ${ue}${(ue_cap.titre) ? " - " + ue_cap.titre : ""} +

+
+
Moyenne : ${ue_cap.moyenne ?? "-"}
+ +
+ le ${date_capitalisation} ${link_sem} +   + ECTS : ${ue_cap.ECTS?.acquis ?? "-"} / ${ue_cap.ECTS?.total ?? "-"} + +
+
+
+
`; + } + + synthese(data, modules) { let output = ""; Object.entries(modules).forEach(([module, dataModule]) => {