formsemestre_inscr_passage: mentionne DEM inscrits. Close #1038

This commit is contained in:
Emmanuel Viennet 2025-02-06 10:22:43 +01:00
parent 58784af94d
commit 431b0aa651
5 changed files with 41 additions and 22 deletions

View File

@ -1221,7 +1221,7 @@ class FormSemestre(models.ScoDocModel):
}
@property
def etuds_inscriptions(self) -> dict:
def etuds_inscriptions(self) -> dict[int, "FormSemestreInscription"]:
"""Map { etudid : inscription } (incluant DEM et DEF)"""
return {ins.etud.id: ins for ins in self.inscriptions}

View File

@ -50,22 +50,24 @@ from app.scodoc.sco_exceptions import ScoValueError
def _list_authorized_etuds_by_sem(
formsemestre: FormSemestre, ignore_jury=False
) -> tuple[dict[int, dict], list[dict], dict[int, Identite]]:
) -> tuple[dict[int, dict], dict[int, dict], dict[int, Identite]]:
"""Liste des etudiants autorisés à s'inscrire dans sem.
delai = nb de jours max entre la date de l'autorisation et celle de debut du semestre cible.
ignore_jury: si vrai, considère tous les étudiants comme autorisés, même
s'ils n'ont pas de décision de jury.
"""
src_sems = _list_source_sems(formsemestre)
inscrits = list_inscrits(formsemestre.id)
r = {}
inscriptions = formsemestre.etuds_inscriptions
auth_etuds_by_sem = {}
candidats = {} # etudid : etud (tous les etudiants candidats)
nb = 0 # debug
src_formsemestre: FormSemestre
for src_formsemestre in src_sems:
if ignore_jury:
# liste de tous les inscrits au semestre (sans dems)
etud_list = list_inscrits(src_formsemestre.id).values()
etud_list = list_inscrits_edict(
src_formsemestre.id, with_dems=False
).values()
else:
# liste des étudiants autorisés par le jury à s'inscrire ici
etud_list = _list_etuds_from_sem(src_formsemestre, formsemestre)
@ -81,7 +83,7 @@ def _list_authorized_etuds_by_sem(
candidats[e["etudid"]] = etud
liste_filtree.append(e)
nb += 1
r[src_formsemestre.id] = {
auth_etuds_by_sem[src_formsemestre.id] = {
"etuds": liste_filtree,
"infos": {
"id": src_formsemestre.id,
@ -94,15 +96,20 @@ def _list_authorized_etuds_by_sem(
"filename": "etud_autorises",
},
}
# ajoute attribut inscrit qui indique si l'étudiant est déjà inscrit dans le semestre dest.
for e in r[src_formsemestre.id]["etuds"]:
e["inscrit"] = e["etudid"] in inscrits
# ajoute attribut inscrit qui indique si l'étudiant est déjà inscrit dans le semestre cible
for e in auth_etuds_by_sem[src_formsemestre.id]["etuds"]:
e["inscrit"] = e["etudid"] in inscriptions
# Ajoute liste des etudiants actuellement inscrits
for e in inscrits.values():
# Ajoute étudiants actuellement inscrits dans le semestre cible
inscrits_by_id_edict = {
ins.etudid: ins.etud.to_dict_scodoc7() for ins in inscriptions.values()
}
# ajoute état inscription pour afficher démissionnaires avec style
for e in inscrits_by_id_edict.values():
e["inscrit"] = True
r[formsemestre.id] = {
"etuds": list(inscrits.values()),
e["etat"] = inscriptions[e["etudid"]].etat
auth_etuds_by_sem[formsemestre.id] = {
"etuds": list(inscrits_by_id_edict.values()),
"infos": {
"id": formsemestre.id,
"title": "Semestre cible: " + formsemestre.titre_annee(),
@ -112,16 +119,17 @@ def _list_authorized_etuds_by_sem(
formsemestre_id=formsemestre.id,
),
"comment": " actuellement inscrits dans ce semestre",
"help": "Ces étudiants sont actuellement inscrits dans ce semestre. Si vous les décochez, il seront désinscrits.",
"help": """Ces étudiants sont actuellement inscrits dans ce semestre.
Si vous les décochez, il seront désinscrits.""",
"filename": "etud_inscrits",
},
}
return r, inscrits, candidats
return auth_etuds_by_sem, inscrits_by_id_edict, candidats
def list_inscrits(formsemestre_id: int, with_dems=False) -> list[dict]:
"""Étudiants déjà inscrits à ce semestre
def list_inscrits_edict(formsemestre_id: int, with_dems=False) -> list[dict]:
"""Étudiants (as dict) déjà inscrits à ce semestre
{ etudid : etud }
"""
if not with_dems:
@ -663,9 +671,8 @@ def etuds_select_box(
if help_txt: # bubble
H.append(f'title="{help_txt}"')
H.append(
""">%(title)s</a></div>
<div class="pas_sembox_subtitle">(%(nbetuds)d étudiants%(comment)s)"""
% infos
f""">{infos['title']}</a></div>
<div class="pas_sembox_subtitle">({infos['nbetuds']} étudiants{infos['comment']})"""
)
if with_checkbox:
H.append(
@ -707,6 +714,9 @@ def etuds_select_box(
if is_inscrit
else ("inscrit-ailleurs" if etud["etudid"] in inscrits_ailleurs else "")
)
if etud.get("etat") == scu.DEMISSION:
extra_class += " etuddem"
H.append(
_etud_row(
etud,
@ -748,6 +758,8 @@ def _etud_row(
)
}">{nomprenom}</a>
"""
if etud.get("etat") == scu.DEMISSION:
elink += """<span class="etuddem">(DEM.)</span>"""
else:
# ce n'est pas un etudiant ScoDoc
elink = nomprenom

View File

@ -388,7 +388,9 @@ def _build_page(
def list_synch(sem, annee_apogee=None):
""""""
inscrits = sco_inscr_passage.list_inscrits(sem["formsemestre_id"], with_dems=True)
inscrits = sco_inscr_passage.list_inscrits_edict(
sem["formsemestre_id"], with_dems=True
)
# Tous les ensembles d'etudiants sont ici des ensembles de codes NIP (voir EKEY_SCO)
# (sauf inscrits_without_key)
inscrits_set = set()

View File

@ -3809,6 +3809,11 @@ span.sp_etape {
color: red !important;
}
.etuds-box .etuddem {
color: red !important;
font-style: italic;
}
div.etuds_select_boxes {
margin-bottom: 16px;
}

View File

@ -3,7 +3,7 @@
"Infos sur version ScoDoc"
SCOVERSION = "9.7.61"
SCOVERSION = "9.7.62"
SCONAME = "ScoDoc"