forked from ScoDoc/ScoDoc
Assiduité : correction bug cache
This commit is contained in:
parent
958cf435c8
commit
0332553587
@ -393,7 +393,7 @@ class BulletinBUT:
|
|||||||
else:
|
else:
|
||||||
etud_ues_ids = res.etud_ues_ids(etud.id)
|
etud_ues_ids = res.etud_ues_ids(etud.id)
|
||||||
|
|
||||||
nbabs, nbabsjust = formsemestre.get_abs_count(etud.id)
|
nbabsnj, nbabsjust, nbabs = formsemestre.get_abs_count(etud.id)
|
||||||
etud_groups = sco_groups.get_etud_formsemestre_groups(
|
etud_groups = sco_groups.get_etud_formsemestre_groups(
|
||||||
etud, formsemestre, only_to_show=True
|
etud, formsemestre, only_to_show=True
|
||||||
)
|
)
|
||||||
@ -408,7 +408,7 @@ class BulletinBUT:
|
|||||||
}
|
}
|
||||||
if self.prefs["bul_show_abs"]:
|
if self.prefs["bul_show_abs"]:
|
||||||
semestre_infos["absences"] = {
|
semestre_infos["absences"] = {
|
||||||
"injustifie": nbabs - nbabsjust,
|
"injustifie": nbabsnj,
|
||||||
"total": nbabs,
|
"total": nbabs,
|
||||||
"metrique": {
|
"metrique": {
|
||||||
"H.": "Heure(s)",
|
"H.": "Heure(s)",
|
||||||
@ -525,7 +525,7 @@ class BulletinBUT:
|
|||||||
d["demission"] = ""
|
d["demission"] = ""
|
||||||
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
d["nbabs"], d["nbabsjust"] = self.res.formsemestre.get_abs_count(etud.id)
|
_, d["nbabsjust"], d["nbabs"] = self.res.formsemestre.get_abs_count(etud.id)
|
||||||
|
|
||||||
# --- Decision Jury
|
# --- Decision Jury
|
||||||
infos, _ = sco_bulletins.etud_descr_situation_semestre(
|
infos, _ = sco_bulletins.etud_descr_situation_semestre(
|
||||||
@ -540,9 +540,9 @@ class BulletinBUT:
|
|||||||
|
|
||||||
d.update(infos)
|
d.update(infos)
|
||||||
# --- Rangs
|
# --- Rangs
|
||||||
d["rang_nt"] = (
|
d[
|
||||||
f"{d['semestre']['rang']['value']} / {d['semestre']['rang']['total']}"
|
"rang_nt"
|
||||||
)
|
] = f"{d['semestre']['rang']['value']} / {d['semestre']['rang']['total']}"
|
||||||
d["rang_txt"] = "Rang " + d["rang_nt"]
|
d["rang_txt"] = "Rang " + d["rang_nt"]
|
||||||
|
|
||||||
d.update(sco_bulletins.make_context_dict(self.res.formsemestre, d["etud"]))
|
d.update(sco_bulletins.make_context_dict(self.res.formsemestre, d["etud"]))
|
||||||
|
@ -241,7 +241,7 @@ def bulletin_but_xml_compat(
|
|||||||
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
||||||
nbabs, nbabsjust = formsemestre.get_abs_count(etud.id)
|
_, nbabsjust, nbabs = formsemestre.get_abs_count(etud.id)
|
||||||
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
||||||
|
|
||||||
# -------- LA SUITE EST COPIEE SANS MODIF DE sco_bulletins_xml.py ---------
|
# -------- LA SUITE EST COPIEE SANS MODIF DE sco_bulletins_xml.py ---------
|
||||||
|
@ -875,7 +875,7 @@ class FormSemestre(db.Model):
|
|||||||
|
|
||||||
def get_abs_count(self, etudid):
|
def get_abs_count(self, etudid):
|
||||||
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
||||||
tuple (nb abs, nb abs justifiées)
|
tuple (nb abs non just, nb abs justifiées, nb abs total)
|
||||||
Utilise un cache.
|
Utilise un cache.
|
||||||
"""
|
"""
|
||||||
from app.scodoc import sco_assiduites
|
from app.scodoc import sco_assiduites
|
||||||
|
@ -175,10 +175,9 @@ def sidebar(etudid: int = None):
|
|||||||
inscription = etud.inscription_courante()
|
inscription = etud.inscription_courante()
|
||||||
if inscription:
|
if inscription:
|
||||||
formsemestre = inscription.formsemestre
|
formsemestre = inscription.formsemestre
|
||||||
nbabs, nbabsjust = sco_assiduites.formsemestre_get_assiduites_count(
|
nbabsnj, nbabsjust, _ = sco_assiduites.formsemestre_get_assiduites_count(
|
||||||
etudid, formsemestre
|
etudid, formsemestre
|
||||||
)
|
)
|
||||||
nbabsnj = nbabs - nbabsjust
|
|
||||||
H.append(
|
H.append(
|
||||||
f"""<span title="absences du {
|
f"""<span title="absences du {
|
||||||
formsemestre.date_debut.strftime("%d/%m/%Y")
|
formsemestre.date_debut.strftime("%d/%m/%Y")
|
||||||
|
@ -67,7 +67,7 @@ def abs_notify(etudid: int, date: str | datetime.datetime):
|
|||||||
if not formsemestre:
|
if not formsemestre:
|
||||||
return # non inscrit a la date, pas de notification
|
return # non inscrit a la date, pas de notification
|
||||||
|
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count_in_interval(
|
_, nbabsjust, nbabs = sco_assiduites.get_assiduites_count_in_interval(
|
||||||
etudid,
|
etudid,
|
||||||
metrique=scu.translate_assiduites_metric(
|
metrique=scu.translate_assiduites_metric(
|
||||||
sco_preferences.get_preference(
|
sco_preferences.get_preference(
|
||||||
|
@ -671,7 +671,7 @@ def create_absence_billet(
|
|||||||
# Gestion du cache
|
# Gestion du cache
|
||||||
def get_assiduites_count(etudid: int, sem: dict) -> tuple[int, int]:
|
def get_assiduites_count(etudid: int, sem: dict) -> tuple[int, int]:
|
||||||
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
||||||
tuple (nb abs non justifiées, nb abs justifiées)
|
tuple (nb abs non justifiées, nb abs justifiées, nb abs total)
|
||||||
Utilise un cache.
|
Utilise un cache.
|
||||||
"""
|
"""
|
||||||
metrique = sco_preferences.get_preference("assi_metrique", sem["formsemestre_id"])
|
metrique = sco_preferences.get_preference("assi_metrique", sem["formsemestre_id"])
|
||||||
@ -687,17 +687,17 @@ def formsemestre_get_assiduites_count(
|
|||||||
etudid: int, formsemestre: FormSemestre, moduleimpl_id: int = None
|
etudid: int, formsemestre: FormSemestre, moduleimpl_id: int = None
|
||||||
) -> tuple[int, int]:
|
) -> tuple[int, int]:
|
||||||
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
"""Les comptes d'absences de cet étudiant dans ce semestre:
|
||||||
tuple (nb abs non justifiées, nb abs justifiées)
|
tuple (nb abs non justifiées, nb abs justifiées, nb abs total)
|
||||||
Utilise un cache.
|
Utilise un cache.
|
||||||
"""
|
"""
|
||||||
metrique = sco_preferences.get_preference("assi_metrique", formsemestre.id)
|
metrique = sco_preferences.get_preference("assi_metrique", formsemestre.id)
|
||||||
return get_assiduites_count_in_interval(
|
return get_assiduites_count_in_interval(
|
||||||
etudid,
|
etudid,
|
||||||
date_debut=scu.localize_datetime(
|
date_debut=scu.localize_datetime(
|
||||||
datetime.combine(formsemestre.date_debut, time(8, 0))
|
datetime.combine(formsemestre.date_debut, time(0, 0))
|
||||||
),
|
),
|
||||||
date_fin=scu.localize_datetime(
|
date_fin=scu.localize_datetime(
|
||||||
datetime.combine(formsemestre.date_fin, time(18, 0))
|
datetime.combine(formsemestre.date_fin, time(23, 0))
|
||||||
),
|
),
|
||||||
metrique=scu.translate_assiduites_metric(metrique),
|
metrique=scu.translate_assiduites_metric(metrique),
|
||||||
moduleimpl_id=moduleimpl_id,
|
moduleimpl_id=moduleimpl_id,
|
||||||
@ -714,12 +714,12 @@ def get_assiduites_count_in_interval(
|
|||||||
moduleimpl_id: int = None,
|
moduleimpl_id: int = None,
|
||||||
):
|
):
|
||||||
"""Les comptes d'absences de cet étudiant entre ces deux dates, incluses:
|
"""Les comptes d'absences de cet étudiant entre ces deux dates, incluses:
|
||||||
tuple (nb abs, nb abs justifiées)
|
tuple (nb abs non justifiées, nb abs justifiées, nb abs total)
|
||||||
On peut spécifier les dates comme datetime ou iso.
|
On peut spécifier les dates comme datetime ou iso.
|
||||||
Utilise un cache.
|
Utilise un cache.
|
||||||
"""
|
"""
|
||||||
date_debut_iso = date_debut_iso or date_debut.isoformat()
|
date_debut_iso = date_debut_iso or date_debut.strftime("%Y-%m-%d")
|
||||||
date_fin_iso = date_fin_iso or date_fin.isoformat()
|
date_fin_iso = date_fin_iso or date_fin.strftime("%Y-%m-%d")
|
||||||
key = f"{etudid}_{date_debut_iso}_{date_fin_iso}_assiduites"
|
key = f"{etudid}_{date_debut_iso}_{date_fin_iso}_assiduites"
|
||||||
|
|
||||||
r = sco_cache.AbsSemEtudCache.get(key)
|
r = sco_cache.AbsSemEtudCache.get(key)
|
||||||
@ -744,9 +744,10 @@ def get_assiduites_count_in_interval(
|
|||||||
if not ans:
|
if not ans:
|
||||||
log("warning: get_assiduites_count failed to cache")
|
log("warning: get_assiduites_count failed to cache")
|
||||||
|
|
||||||
nb_abs: dict = r["absent"][metrique]
|
nb_abs: int = r["absent"][metrique]
|
||||||
nb_abs_just: dict = r["absent_just"][metrique]
|
nb_abs_nj: int = r["absent_non_just"][metrique]
|
||||||
return (nb_abs, nb_abs_just)
|
nb_abs_just: int = r["absent_just"][metrique]
|
||||||
|
return (nb_abs_nj, nb_abs_just, nb_abs)
|
||||||
|
|
||||||
|
|
||||||
def invalidate_assiduites_count(etudid: int, sem: dict):
|
def invalidate_assiduites_count(etudid: int, sem: dict):
|
||||||
|
@ -196,7 +196,7 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
|
|||||||
pid = partition["partition_id"]
|
pid = partition["partition_id"]
|
||||||
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(pid)
|
partitions_etud_groups[pid] = sco_groups.get_etud_groups_in_partition(pid)
|
||||||
# --- Absences
|
# --- Absences
|
||||||
I["nbabs"], I["nbabsjust"] = sco_assiduites.get_assiduites_count(etudid, nt.sem)
|
_, I["nbabsjust"], I["nbabs"] = sco_assiduites.get_assiduites_count(etudid, nt.sem)
|
||||||
|
|
||||||
# --- Decision Jury
|
# --- Decision Jury
|
||||||
infos, dpv = etud_descr_situation_semestre(
|
infos, dpv = etud_descr_situation_semestre(
|
||||||
@ -471,7 +471,7 @@ def _ue_mod_bulletin(
|
|||||||
) # peut etre 'NI'
|
) # peut etre 'NI'
|
||||||
is_malus = mod["module"]["module_type"] == ModuleType.MALUS
|
is_malus = mod["module"]["module_type"] == ModuleType.MALUS
|
||||||
if bul_show_abs_modules:
|
if bul_show_abs_modules:
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, sem)
|
_, nbabsjust, nbabs = sco_assiduites.get_assiduites_count(etudid, sem)
|
||||||
mod_abs = [nbabs, nbabsjust]
|
mod_abs = [nbabs, nbabsjust]
|
||||||
mod["mod_abs_txt"] = scu.fmt_abs(mod_abs)
|
mod["mod_abs_txt"] = scu.fmt_abs(mod_abs)
|
||||||
else:
|
else:
|
||||||
|
@ -296,7 +296,7 @@ def formsemestre_bulletinetud_published_dict(
|
|||||||
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
if prefs["bul_show_abs"]:
|
if prefs["bul_show_abs"]:
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, sem)
|
_, nbabsjust, nbabs = sco_assiduites.get_assiduites_count(etudid, sem)
|
||||||
d["absences"] = dict(nbabs=nbabs, nbabsjust=nbabsjust)
|
d["absences"] = dict(nbabs=nbabs, nbabsjust=nbabsjust)
|
||||||
|
|
||||||
# --- Décision Jury
|
# --- Décision Jury
|
||||||
|
@ -260,7 +260,7 @@ def make_xml_formsemestre_bulletinetud(
|
|||||||
numero=str(mod["numero"]),
|
numero=str(mod["numero"]),
|
||||||
titre=quote_xml_attr(mod["titre"]),
|
titre=quote_xml_attr(mod["titre"]),
|
||||||
abbrev=quote_xml_attr(mod["abbrev"]),
|
abbrev=quote_xml_attr(mod["abbrev"]),
|
||||||
code_apogee=quote_xml_attr(mod["code_apogee"])
|
code_apogee=quote_xml_attr(mod["code_apogee"]),
|
||||||
# ects=ects ects des modules maintenant inutilisés
|
# ects=ects ects des modules maintenant inutilisés
|
||||||
)
|
)
|
||||||
x_ue.append(x_mod)
|
x_ue.append(x_mod)
|
||||||
@ -347,7 +347,7 @@ def make_xml_formsemestre_bulletinetud(
|
|||||||
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, sem)
|
_, nbabsjust, nbabs = sco_assiduites.get_assiduites_count(etudid, sem)
|
||||||
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
||||||
# --- Decision Jury
|
# --- Decision Jury
|
||||||
if (
|
if (
|
||||||
|
@ -722,8 +722,8 @@ def formsemestre_recap_parcours_table(
|
|||||||
f"""<td class="rcp_moy">{scu.fmt_note(nt.get_etud_moy_gen(etudid))}</td>"""
|
f"""<td class="rcp_moy">{scu.fmt_note(nt.get_etud_moy_gen(etudid))}</td>"""
|
||||||
)
|
)
|
||||||
# Absences (nb d'abs non just. dans ce semestre)
|
# Absences (nb d'abs non just. dans ce semestre)
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, sem)
|
nbabsnj = sco_assiduites.get_assiduites_count(etudid, sem)[0]
|
||||||
H.append(f"""<td class="rcp_abs">{nbabs - nbabsjust}</td>""")
|
H.append(f"""<td class="rcp_abs">{nbabsnj}</td>""")
|
||||||
|
|
||||||
# UEs
|
# UEs
|
||||||
for ue in ues:
|
for ue in ues:
|
||||||
|
@ -105,7 +105,9 @@ def etud_get_poursuite_info(sem: dict, etud: dict) -> dict:
|
|||||||
rangs.append(["rang_" + code_module, rang_module])
|
rangs.append(["rang_" + code_module, rang_module])
|
||||||
|
|
||||||
# Absences
|
# Absences
|
||||||
nbabs, nbabsjust = sco_assiduites.get_assiduites_count(etudid, nt.sem)
|
nbabsnj, nbabsjust, _ = sco_assiduites.get_assiduites_count(
|
||||||
|
etudid, nt.sem
|
||||||
|
)
|
||||||
# En BUT, prend tout, sinon ne prend que les semestre validés par le jury
|
# En BUT, prend tout, sinon ne prend que les semestre validés par le jury
|
||||||
if nt.is_apc or (
|
if nt.is_apc or (
|
||||||
dec
|
dec
|
||||||
@ -125,7 +127,7 @@ def etud_get_poursuite_info(sem: dict, etud: dict) -> dict:
|
|||||||
("date_debut", s["date_debut"]),
|
("date_debut", s["date_debut"]),
|
||||||
("date_fin", s["date_fin"]),
|
("date_fin", s["date_fin"]),
|
||||||
("periode", "%s - %s" % (s["mois_debut"], s["mois_fin"])),
|
("periode", "%s - %s" % (s["mois_debut"], s["mois_fin"])),
|
||||||
("AbsNonJust", nbabs - nbabsjust),
|
("AbsNonJust", nbabsnj),
|
||||||
("AbsJust", nbabsjust),
|
("AbsJust", nbabsjust),
|
||||||
]
|
]
|
||||||
# ajout des 2 champs notes des modules et classement dans chaque module
|
# ajout des 2 champs notes des modules et classement dans chaque module
|
||||||
|
@ -620,7 +620,7 @@ class RowRecap(tb.Row):
|
|||||||
def add_abs(self):
|
def add_abs(self):
|
||||||
"Ajoute les colonnes absences"
|
"Ajoute les colonnes absences"
|
||||||
# Absences (nb d'abs non just. dans ce semestre)
|
# Absences (nb d'abs non just. dans ce semestre)
|
||||||
nbabs, nbabsjust = self.table.res.formsemestre.get_abs_count(self.etud.id)
|
_, nbabsjust, nbabs = self.table.res.formsemestre.get_abs_count(self.etud.id)
|
||||||
self.add_cell("nbabs", "Abs", f"{nbabs:1.0f}", "abs", raw_content=nbabs)
|
self.add_cell("nbabs", "Abs", f"{nbabs:1.0f}", "abs", raw_content=nbabs)
|
||||||
self.add_cell(
|
self.add_cell(
|
||||||
"nbabsjust", "Just.", f"{nbabsjust:1.0f}", "abs", raw_content=nbabsjust
|
"nbabsjust", "Just.", f"{nbabsjust:1.0f}", "abs", raw_content=nbabsjust
|
||||||
@ -691,9 +691,9 @@ class RowRecap(tb.Row):
|
|||||||
self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"])
|
self.add_ue_modimpls_cols(ue, ue_status["is_capitalized"])
|
||||||
|
|
||||||
self.nb_ues_etud_parcours = len(res.etud_parcours_ues_ids(etud.id))
|
self.nb_ues_etud_parcours = len(res.etud_parcours_ues_ids(etud.id))
|
||||||
ue_valid_txt = ue_valid_txt_html = (
|
ue_valid_txt = (
|
||||||
f"{self.nb_ues_validables}/{self.nb_ues_etud_parcours}"
|
ue_valid_txt_html
|
||||||
)
|
) = f"{self.nb_ues_validables}/{self.nb_ues_etud_parcours}"
|
||||||
if self.nb_ues_warning:
|
if self.nb_ues_warning:
|
||||||
ue_valid_txt_html += " " + scu.EMO_WARNING
|
ue_valid_txt_html += " " + scu.EMO_WARNING
|
||||||
cell_class = ""
|
cell_class = ""
|
||||||
@ -717,9 +717,9 @@ class RowRecap(tb.Row):
|
|||||||
# sous-classé par JuryRow pour ajouter les codes
|
# sous-classé par JuryRow pour ajouter les codes
|
||||||
table: TableRecap = self.table
|
table: TableRecap = self.table
|
||||||
formsemestre: FormSemestre = table.res.formsemestre
|
formsemestre: FormSemestre = table.res.formsemestre
|
||||||
table.group_titles["col_ue"] = (
|
table.group_titles[
|
||||||
f"UEs du S{formsemestre.semestre_id} {formsemestre.annee_scolaire()}"
|
"col_ue"
|
||||||
)
|
] = f"UEs du S{formsemestre.semestre_id} {formsemestre.annee_scolaire()}"
|
||||||
col_id = f"moy_ue_{ue.id}"
|
col_id = f"moy_ue_{ue.id}"
|
||||||
val = (
|
val = (
|
||||||
ue_status["moy"]
|
ue_status["moy"]
|
||||||
|
@ -74,8 +74,9 @@ class ScoData:
|
|||||||
if ins:
|
if ins:
|
||||||
self.etud_cur_sem = ins.formsemestre
|
self.etud_cur_sem = ins.formsemestre
|
||||||
(
|
(
|
||||||
self.nbabs,
|
self.nbabsnj,
|
||||||
self.nbabsjust,
|
self.nbabsjust,
|
||||||
|
self.nbabs,
|
||||||
) = sco_assiduites.get_assiduites_count_in_interval(
|
) = sco_assiduites.get_assiduites_count_in_interval(
|
||||||
etud.id,
|
etud.id,
|
||||||
self.etud_cur_sem.date_debut.isoformat(),
|
self.etud_cur_sem.date_debut.isoformat(),
|
||||||
@ -84,7 +85,6 @@ class ScoData:
|
|||||||
sco_preferences.get_preference("assi_metrique")
|
sco_preferences.get_preference("assi_metrique")
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
self.nbabsnj = self.nbabs - self.nbabsjust
|
|
||||||
else:
|
else:
|
||||||
self.etud_cur_sem = None
|
self.etud_cur_sem = None
|
||||||
else:
|
else:
|
||||||
|
@ -1187,14 +1187,18 @@ def view_module_abs(moduleimpl_id, fmt="html"):
|
|||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
for etud in inscrits:
|
for etud in inscrits:
|
||||||
nb_abs, nb_abs_just = sco_assiduites.formsemestre_get_assiduites_count(
|
(
|
||||||
|
nb_abs_nj,
|
||||||
|
nb_abs_just,
|
||||||
|
nb_abs,
|
||||||
|
) = sco_assiduites.formsemestre_get_assiduites_count(
|
||||||
etud.id, modimpl.formsemestre, moduleimpl_id=modimpl.id
|
etud.id, modimpl.formsemestre, moduleimpl_id=modimpl.id
|
||||||
)
|
)
|
||||||
rows.append(
|
rows.append(
|
||||||
{
|
{
|
||||||
"nomprenom": etud.nomprenom,
|
"nomprenom": etud.nomprenom,
|
||||||
"just": nb_abs_just,
|
"just": nb_abs_just,
|
||||||
"nojust": nb_abs - nb_abs_just,
|
"nojust": nb_abs_nj,
|
||||||
"total": nb_abs,
|
"total": nb_abs,
|
||||||
"_nomprenom_target": url_for(
|
"_nomprenom_target": url_for(
|
||||||
"scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id
|
"scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id
|
||||||
|
Loading…
Reference in New Issue
Block a user