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 += `
@@ -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]) => {