forked from ScoDoc/ScoDoc
Ajoute ECTS acquis sur TableJury et cursus_etud BUT
This commit is contained in:
parent
427672b396
commit
bf77b9112f
@ -207,6 +207,10 @@ class EtudCursusBUT:
|
||||
# slow, utile pour affichage fiche
|
||||
return annee in [n.annee for n in self.competences[competence_id].niveaux]
|
||||
|
||||
def get_ects_acquis(self) -> int:
|
||||
"Nombre d'ECTS validés par etud dans le BUT de ce référentiel"
|
||||
return but_ects_valides(self.etud, self.formation.referentiel_competence.id)
|
||||
|
||||
def load_validation_by_niveau(self) -> dict[int, list[ApcValidationRCUE]]:
|
||||
"""Cherche les validations de jury enregistrées pour chaque niveau
|
||||
Résultat: { niveau_id : [ ApcValidationRCUE ] }
|
||||
@ -378,7 +382,7 @@ class FormSemestreCursusBUT:
|
||||
# "cache { competence_id : competence }"
|
||||
|
||||
|
||||
def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> float:
|
||||
def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> int:
|
||||
"""Nombre d'ECTS validés par etud dans le BUT de référentiel indiqué.
|
||||
Ne prend que les UE associées à des niveaux de compétences,
|
||||
et ne les compte qu'une fois même en cas de redoublement avec re-validation.
|
||||
@ -398,7 +402,7 @@ def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> float:
|
||||
if v.code in CODES_UE_VALIDES:
|
||||
ects_dict[key] = v.ue.ects
|
||||
|
||||
return sum(ects_dict.values()) if ects_dict else 0.0
|
||||
return int(sum(ects_dict.values())) if ects_dict else 0
|
||||
|
||||
|
||||
def etud_ues_de_but1_non_validees(
|
||||
|
@ -322,7 +322,7 @@ class NotesTableCompat(ResultatsSemestre):
|
||||
validations = self.get_formsemestre_validations()
|
||||
return validations.decisions_jury_ues.get(etudid, None)
|
||||
|
||||
def get_etud_ects_valides(self, etudid: int, decisions_ues: dict = False) -> 0:
|
||||
def get_etud_ects_valides(self, etudid: int, decisions_ues: dict = False) -> int:
|
||||
"""Le total des ECTS validés (et enregistrés) par l'étudiant dans ce semestre.
|
||||
NB: avant jury, rien d'enregistré, donc zéro ECTS.
|
||||
Optimisation: si decisions_ues est passé, l'utilise, sinon appelle get_etud_decisions_ue()
|
||||
@ -330,8 +330,8 @@ class NotesTableCompat(ResultatsSemestre):
|
||||
if decisions_ues is False:
|
||||
decisions_ues = self.get_etud_decisions_ue(etudid)
|
||||
if not decisions_ues:
|
||||
return 0.0
|
||||
return sum([d.get("ects", 0.0) for d in decisions_ues.values()])
|
||||
return 0
|
||||
return int(sum(d.get("ects", 0) for d in decisions_ues.values()))
|
||||
|
||||
def get_etud_decision_sem(self, etudid: int) -> dict:
|
||||
"""Decision du jury semestre prise pour cet etudiant, ou None s'il n'y en pas eu.
|
||||
|
@ -247,10 +247,11 @@ def _build_decisions_rcue_list(decisions_rcue: dict) -> list[str]:
|
||||
# où validation est {'code': 'CMP', 'niveau': {'annee': 'BUT3', 'competence': {}, ... }
|
||||
validation_by_competence = defaultdict(list)
|
||||
for validation in decisions_rcue:
|
||||
competence_id = (
|
||||
validation.get("niveau", {}).get("competence", {}).get("id_orebut")
|
||||
)
|
||||
validation_by_competence[competence_id].append(validation)
|
||||
if validation:
|
||||
competence_id = (
|
||||
validation.get("niveau", {}).get("competence", {}).get("id_orebut")
|
||||
)
|
||||
validation_by_competence[competence_id].append(validation)
|
||||
# Tri des listes de validation par numéro de compétence
|
||||
validations_niveaux = sorted(
|
||||
validation_by_competence.values(),
|
||||
|
@ -8,9 +8,11 @@
|
||||
"""
|
||||
|
||||
import collections
|
||||
import time
|
||||
import numpy as np
|
||||
from flask import g, url_for
|
||||
|
||||
from app import log
|
||||
from app.but import cursus_but
|
||||
from app.but import jury_but
|
||||
from app.but.jury_but import DecisionsProposeesRCUE
|
||||
@ -33,10 +35,12 @@ class TableJury(TableRecap):
|
||||
- les RCUEs (moyenne et code décision)
|
||||
Pour toutes les formations:
|
||||
- les codes de décisions jury sur les UEs
|
||||
- les ECTS acquis dans le parcours
|
||||
- le lien de saisie ou modif de la décision de jury
|
||||
"""
|
||||
|
||||
def __init__(self, *args, row_class: str = None, read_only=True, **kwargs):
|
||||
t0 = time.time()
|
||||
super().__init__(
|
||||
*args, row_class=row_class or RowJury, finalize=False, **kwargs
|
||||
)
|
||||
@ -55,6 +59,7 @@ class TableJury(TableRecap):
|
||||
self.add_groups_header()
|
||||
# Termine la table
|
||||
self.finalize()
|
||||
log(f"Built TableJury for {self.res.formsemestre} in {time.time() - t0}s")
|
||||
|
||||
def add_rcues(self):
|
||||
"""Ajoute les colonnes indiquant le nb de RCUEs et chaque RCUE
|
||||
@ -75,7 +80,7 @@ class TableJury(TableRecap):
|
||||
self.freq_codes_annuels["total"] = len(self.rows)
|
||||
|
||||
def add_jury(self):
|
||||
"""Ajoute la colonne code jury et le lien.
|
||||
"""Ajoute la colonne code jury, ECTS et le lien.
|
||||
- Le code jury est celui du semestre: cette colonne n'est montrée
|
||||
que pour les formations classiques, ce code n'est pas utilisé en BUT.
|
||||
- En BUT, on donne la décision de jury annuelle.
|
||||
@ -138,6 +143,20 @@ class TableJury(TableRecap):
|
||||
group="jury_code_sem",
|
||||
classes=["recorded_code"],
|
||||
)
|
||||
# ECTS acquis en BUT
|
||||
if res.formsemestre.formation.referentiel_competence_id:
|
||||
row.add_cell(
|
||||
"ects_acquis",
|
||||
"ECTS",
|
||||
# res.get_etud_ects_valides(etud.id),
|
||||
# cette recherche augmente de 10% le temps de contsruction de la table
|
||||
cursus_but.but_ects_valides(
|
||||
etud, res.formsemestre.formation.referentiel_competence_id
|
||||
),
|
||||
group="jury_code_sem",
|
||||
classes=["recorded_code"],
|
||||
target_attrs={"title": "crédits validés en BUT"},
|
||||
)
|
||||
# Lien saisie ou visu jury
|
||||
a_saisir = (not res.validations) or (not res.validations.has_decision(etud))
|
||||
row.add_cell(
|
||||
|
@ -661,7 +661,7 @@ class RowRecap(tb.Row):
|
||||
# Ajoute bulle sur titre du pied de table:
|
||||
cell = table.foot_title_row.cells.get("moy_gen")
|
||||
if cell:
|
||||
table.foot_title_row.cells["moy_gen"].target_attrs["title"] = (
|
||||
cell.target_attrs["title"] = (
|
||||
"Moyenne générale indicative"
|
||||
if res.is_apc
|
||||
else "Moyenne générale du semestre"
|
||||
|
@ -1,7 +1,7 @@
|
||||
{# Affichage cursus BUT fiche étudiant #}
|
||||
|
||||
<div class="cursus_but">
|
||||
<div class="cb_head"></div>
|
||||
<div class="cb_head">{{cursus.get_ects_acquis()}} ECTS</div>
|
||||
<div class="cb_head">BUT 1</div>
|
||||
<div class="cb_head">BUT 2</div>
|
||||
<div class="cb_head">BUT 3</div>
|
||||
|
@ -1,7 +1,7 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "9.6.987"
|
||||
SCOVERSION = "9.6.988"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user