Affichage des UE capitalisées sur bulletins HTML BUT

This commit is contained in:
Emmanuel Viennet 2022-09-04 22:45:34 +02:00
parent 939c2ccf36
commit 9ffb07ccce
3 changed files with 67 additions and 11 deletions

View File

@ -141,7 +141,7 @@ class BulletinBUT:
def etud_ues_capitalisees(self, etud: Identite) -> dict: def etud_ues_capitalisees(self, etud: Identite) -> dict:
"""dict avec les UE capitalisees. la clé est l'acronyme d'UE, qui ne """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)""" 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 return {} # aucune capitalisation
d = {} d = {}
for _, ue_capitalisee in self.res.validations.ue_capitalisees.loc[ for _, ue_capitalisee in self.res.validations.ue_capitalisees.loc[
@ -162,11 +162,24 @@ class BulletinBUT:
"numero": ue.numero, "numero": ue.numero,
"type": ue.type, "type": ue.type,
"color": ue.color, "color": ue.color,
"moyenne": ue_capitalisee.moy_ue, "moyenne": fmt_note(ue_capitalisee.moy_ue),
"is_external": ue_capitalisee.is_external, "is_external": ue_capitalisee.is_external,
"date_capitalisation": ue_capitalisee.event_date, "date_capitalisation": ue_capitalisee.event_date,
"formsemestre_id": ue_capitalisee.formsemestre_id, "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 return d
def etud_mods_results(self, etud, modimpls, version="long") -> dict: def etud_mods_results(self, etud, modimpls, version="long") -> dict:

View File

@ -20,6 +20,7 @@
main { main {
--couleurPrincipale: rgb(240, 250, 255); --couleurPrincipale: rgb(240, 250, 255);
--couleurFondTitresUE: #b6ebff; --couleurFondTitresUE: #b6ebff;
--couleurFondTitresUECapitalisee: #96cf93;
--couleurFondTitresRes: #f8c844; --couleurFondTitresRes: #f8c844;
--couleurFondTitresSAE: #c6ffab; --couleurFondTitresSAE: #c6ffab;
--couleurSecondaire: #fec; --couleurSecondaire: #fec;
@ -256,6 +257,11 @@ section>div:nth-child(1) {
background: var(--couleurFondTitresUE); background: var(--couleurFondTitresUE);
} }
.synthese .ue_capitalisee,
.synthese .ue_capitalisee h3 {
background: var(--couleurFondTitresUECapitalisee);
}
.synthese .ue>div { .synthese .ue>div {
text-align: right; text-align: right;
} }

View File

@ -225,13 +225,13 @@ class releveBUT extends HTMLElement {
<div>${data.semestre.absences?.injustifie ?? "-"}</div> <div>${data.semestre.absences?.injustifie ?? "-"}</div>
<div class=abs>Total</div><div>${data.semestre.absences?.total ?? "-"}</div> <div class=abs>Total</div><div>${data.semestre.absences?.total ?? "-"}</div>
</div>`; </div>`;
if(data.semestre.decision_rcue?.length){ if (data.semestre.decision_rcue?.length) {
output += ` output += `
<div> <div>
<div class=enteteSemestre>RCUE</div><div></div> <div class=enteteSemestre>RCUE</div><div></div>
${(()=>{ ${(() => {
let output = ""; let output = "";
data.semestre.decision_rcue.forEach(competence=>{ data.semestre.decision_rcue.forEach(competence => {
output += `<div class=competence>${competence.niveau.competence.titre}</div><div>${competence.code}</div>`; output += `<div class=competence>${competence.niveau.competence.titre}</div><div>${competence.code}</div>`;
}) })
return output; return output;
@ -239,13 +239,13 @@ class releveBUT extends HTMLElement {
</div> </div>
</div>` </div>`
} }
if(data.semestre.decision_ue?.length){ if (data.semestre.decision_ue?.length) {
output += ` output += `
<div> <div>
<div class=enteteSemestre>UE</div><div></div> <div class=enteteSemestre>UE</div><div></div>
${(()=>{ ${(() => {
let output = ""; let output = "";
data.semestre.decision_ue.forEach(ue=>{ data.semestre.decision_ue.forEach(ue => {
output += `<div class=competence>${ue.acronyme}</div><div>${ue.code}</div>`; output += `<div class=competence>${ue.acronyme}</div><div>${ue.code}</div>`;
}) })
return output; return output;
@ -253,7 +253,7 @@ class releveBUT extends HTMLElement {
</div> </div>
</div>` </div>`
} }
output += ` output += `
<a class=photo href="${data.etudiant.fiche_url}"> <a class=photo href="${data.etudiant.fiche_url}">
<img src="${data.etudiant.photo_url || "default_Student.svg"}" alt="photo de l'étudiant" title="fiche de l'étudiant" height="120" border="0"> <img src="${data.etudiant.photo_url || "default_Student.svg"}" alt="photo de l'étudiant" title="fiche de l'étudiant" height="120" border="0">
@ -271,12 +271,12 @@ class releveBUT extends HTMLElement {
}).join("") }).join("")
}*/ }*/
this.shadow.querySelector(".infoSemestre").innerHTML = output; this.shadow.querySelector(".infoSemestre").innerHTML = output;
/*if(data.semestre.decision_annee?.code){ /*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_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 || ""; this.shadow.querySelector(".decision").innerHTML = data.semestre.situation || "";
/*if (data.semestre.decision?.code) { /*if (data.semestre.decision?.code) {
this.shadow.querySelector(".decision").innerHTML = "Décision jury: " + (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)} ${this.synthese(data, dataUE.saes)}
</div> </div>
`; `;
/* 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; 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 = `<a href="${ue_cap.bul_orig_url}">dans ce semestre</a>`;
}
return `
<div>
<div class="ue ue_capitalisee">
<h3>
Capitalisée : ${ue}${(ue_cap.titre) ? " - " + ue_cap.titre : ""}
</h3>
<div>
<div class=moyenne>Moyenne&nbsp;:&nbsp;${ue_cap.moyenne ?? "-"}</div>
<div class=info>
le ${date_capitalisation} ${link_sem}
<span class=ects>&nbsp;
ECTS&nbsp;:&nbsp;${ue_cap.ECTS?.acquis ?? "-"}&nbsp;/&nbsp;${ue_cap.ECTS?.total ?? "-"}
</span>
</div>
</div>
</div>
</div>`;
}
synthese(data, modules) { synthese(data, modules) {
let output = ""; let output = "";
Object.entries(modules).forEach(([module, dataModule]) => { Object.entries(modules).forEach(([module, dataModule]) => {