forked from ScoDoc/ScoDoc
Ajout colonne autorisations passage dans table recap jury
This commit is contained in:
parent
462db3f9ef
commit
12ce1d16f2
@ -7,7 +7,7 @@
|
|||||||
"""Résultats semestre: méthodes communes aux formations classiques et APC
|
"""Résultats semestre: méthodes communes aux formations classiques et APC
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from collections import Counter
|
from collections import Counter, defaultdict
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -22,11 +22,11 @@ from app.comp.moy_mod import ModuleImplResults
|
|||||||
from app.models import FormSemestre, FormSemestreUECoef
|
from app.models import FormSemestre, FormSemestreUECoef
|
||||||
from app.models import Identite
|
from app.models import Identite
|
||||||
from app.models import ModuleImpl, ModuleImplInscription
|
from app.models import ModuleImpl, ModuleImplInscription
|
||||||
|
from app.models import ScolarAutorisationInscription
|
||||||
from app.models.ues import UniteEns
|
from app.models.ues import UniteEns
|
||||||
from app.scodoc.sco_cache import ResultatsSemestreCache
|
from app.scodoc.sco_cache import ResultatsSemestreCache
|
||||||
from app.scodoc.sco_codes_parcours import UE_SPORT
|
from app.scodoc.sco_codes_parcours import UE_SPORT
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
from app.scodoc import sco_groups
|
|
||||||
from app.scodoc import sco_utils as scu
|
from app.scodoc import sco_utils as scu
|
||||||
|
|
||||||
# Il faut bien distinguer
|
# Il faut bien distinguer
|
||||||
@ -84,6 +84,7 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
"""Coefs APC: rows = UEs (sans bonus), columns = modimpl, value = coef."""
|
"""Coefs APC: rows = UEs (sans bonus), columns = modimpl, value = coef."""
|
||||||
|
|
||||||
self.validations = None
|
self.validations = None
|
||||||
|
self.autorisations_inscription = None
|
||||||
self.moyennes_matieres = {}
|
self.moyennes_matieres = {}
|
||||||
"""Moyennes de matières, si calculées. { matiere_id : Series, index etudid }"""
|
"""Moyennes de matières, si calculées. { matiere_id : Series, index etudid }"""
|
||||||
|
|
||||||
@ -179,12 +180,28 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# --- JURY...
|
# --- JURY...
|
||||||
def load_validations(self) -> ValidationsSemestre:
|
def get_formsemestre_validations(self) -> ValidationsSemestre:
|
||||||
"""Load validations, set attribute and return value"""
|
"""Load validations if not already stored, set attribute and return value"""
|
||||||
if not self.validations:
|
if not self.validations:
|
||||||
self.validations = res_sem.load_formsemestre_validations(self.formsemestre)
|
self.validations = res_sem.load_formsemestre_validations(self.formsemestre)
|
||||||
return self.validations
|
return self.validations
|
||||||
|
|
||||||
|
def get_autorisations_inscription(self) -> dict[int : list[int]]:
|
||||||
|
"""Les autorisations d'inscription venant de ce formsemestre.
|
||||||
|
Lit en base et cache le résultat.
|
||||||
|
Resultat: { etudid : [ indices de semestres ]}
|
||||||
|
Note: les etudids peuvent ne plus être inscrits ici.
|
||||||
|
Seuls ceux avec des autorisations enregistrées sont présents dans le résultat.
|
||||||
|
"""
|
||||||
|
if not self.autorisations_inscription:
|
||||||
|
autorisations = ScolarAutorisationInscription.query.filter_by(
|
||||||
|
origin_formsemestre_id=self.formsemestre.id
|
||||||
|
)
|
||||||
|
self.autorisations_inscription = defaultdict(list)
|
||||||
|
for aut in autorisations:
|
||||||
|
self.autorisations_inscription[aut.etudid].append(aut.semestre_id)
|
||||||
|
return self.autorisations_inscription
|
||||||
|
|
||||||
def get_etud_ue_validables(self, etudid: int) -> list[UniteEns]:
|
def get_etud_ue_validables(self, etudid: int) -> list[UniteEns]:
|
||||||
"""Liste des UEs du semestre qui doivent être validées
|
"""Liste des UEs du semestre qui doivent être validées
|
||||||
|
|
||||||
@ -242,8 +259,8 @@ class ResultatsSemestre(ResultatsCache):
|
|||||||
UE capitalisées.
|
UE capitalisées.
|
||||||
"""
|
"""
|
||||||
# Supposant qu'il y a peu d'UE capitalisées,
|
# Supposant qu'il y a peu d'UE capitalisées,
|
||||||
# on recalcule les moyennes gen des etuds ayant des UE capitalisée.
|
# on recalcule les moyennes gen des etuds ayant des UEs capitalisées.
|
||||||
self.load_validations()
|
self.get_formsemestre_validations()
|
||||||
ue_capitalisees = self.validations.ue_capitalisees
|
ue_capitalisees = self.validations.ue_capitalisees
|
||||||
for etudid in ue_capitalisees.index:
|
for etudid in ue_capitalisees.index:
|
||||||
recompute_mg = False
|
recompute_mg = False
|
||||||
|
@ -282,7 +282,7 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
if self.get_etud_etat(etudid) == DEF:
|
if self.get_etud_etat(etudid) == DEF:
|
||||||
return {}
|
return {}
|
||||||
else:
|
else:
|
||||||
validations = self.load_validations()
|
validations = self.get_formsemestre_validations()
|
||||||
return validations.decisions_jury_ues.get(etudid, None)
|
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) -> 0:
|
||||||
@ -309,7 +309,7 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
"compense_formsemestre_id": None,
|
"compense_formsemestre_id": None,
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
validations = self.load_validations()
|
validations = self.get_formsemestre_validations()
|
||||||
return validations.decisions_jury.get(etudid, None)
|
return validations.decisions_jury.get(etudid, None)
|
||||||
|
|
||||||
def get_etud_mat_moy(self, matiere_id: int, etudid: int) -> str:
|
def get_etud_mat_moy(self, matiere_id: int, etudid: int) -> str:
|
||||||
|
@ -88,7 +88,7 @@ class TableJury(TableRecap):
|
|||||||
que pour les formations classiques, ce code n'est pas utilisé en BUT.
|
que pour les formations classiques, ce code n'est pas utilisé en BUT.
|
||||||
"""
|
"""
|
||||||
res = self.res
|
res = self.res
|
||||||
|
autorisations = res.get_autorisations_inscription()
|
||||||
for row in self.rows:
|
for row in self.rows:
|
||||||
etud = row.etud
|
etud = row.etud
|
||||||
if not res.is_apc:
|
if not res.is_apc:
|
||||||
@ -108,7 +108,17 @@ class TableJury(TableRecap):
|
|||||||
self.foot_title_row.cells["jury_code_sem"].target_attrs[
|
self.foot_title_row.cells["jury_code_sem"].target_attrs[
|
||||||
"title"
|
"title"
|
||||||
] = """Code jury sur le semestre"""
|
] = """Code jury sur le semestre"""
|
||||||
|
# Autorisations inscription
|
||||||
|
row.add_cell(
|
||||||
|
"autorisations_inscription",
|
||||||
|
"Passage",
|
||||||
|
", ".join("S" + str(i) for i in sorted(autorisations[etud.id]))
|
||||||
|
if etud.id in autorisations
|
||||||
|
else "",
|
||||||
|
group="jury_code_sem",
|
||||||
|
classes=["recorded_code"],
|
||||||
|
)
|
||||||
|
# Lien saisie ou visu jury
|
||||||
a_saisir = (not res.validations) or (not res.validations.has_decision(etud))
|
a_saisir = (not res.validations) or (not res.validations.has_decision(etud))
|
||||||
row.add_cell(
|
row.add_cell(
|
||||||
"jury_link",
|
"jury_link",
|
||||||
|
@ -365,11 +365,7 @@ class Row(Element):
|
|||||||
group: groupe de colonnes
|
group: groupe de colonnes
|
||||||
classes is a list of css class names
|
classes is a list of css class names
|
||||||
"""
|
"""
|
||||||
if (classes is None) or (group not in classes):
|
classes = classes.copy() if classes else []
|
||||||
# ajoute le nom de groupe aux classes
|
|
||||||
classes = [group or ""] + (classes or [])
|
|
||||||
else:
|
|
||||||
classes = classes.copy()
|
|
||||||
if group:
|
if group:
|
||||||
self.table.column_classes[col_id].add(group)
|
self.table.column_classes[col_id].add(group)
|
||||||
if column_classes:
|
if column_classes:
|
||||||
|
Loading…
Reference in New Issue
Block a user