[WIP] Assiduité : corrections saisie_assiduites_hebdo

This commit is contained in:
Iziram 2024-05-27 22:33:01 +02:00
parent eb88a8ca83
commit f94998f66b
2 changed files with 35 additions and 52 deletions

View File

@ -57,14 +57,10 @@
text-align: center; text-align: center;
} }
#tableau-periode {
overflow-x: auto;
max-width: 100%;
}
table { table {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
max-width: 1600px;
position: relative; position: relative;
} }
@ -99,7 +95,7 @@
z-index: 1; z-index: 1;
} }
td.active>.rbtn:not(:checked)::before { .rbtn:not(:checked)::before {
opacity: 0.5; opacity: 0.5;
} }
@ -128,13 +124,6 @@
input.checked = false; input.checked = false;
} }
}); });
if(!target.checked && parent.classList.contains("active")){
parent.classList.remove("active");
}else{
parent.classList.add("active");
}
}); });
}); });

View File

@ -1989,82 +1989,75 @@ def traitement_justificatifs():
@bp.route("signal_assiduites_hebdo") @bp.route("signal_assiduites_hebdo")
@scodoc @scodoc
@permission_required(Permission.AbsChange) @permission_required(Permission.ScoView)
def signal_assiduites_hebdo(): def signal_assiduites_hebdo():
""" """
signal_assiduites_hebdo signal_assiduites_hebdo
paramètres obligatoires : paramètres obligatoires :
- formsemestre_id : id du formsemestre - formsemestre_id : id du formsemestre
- semaine : date semaine (iso 8601 -> 20XX-WXX) - week : date semaine (iso 8601 -> 20XX-WXX)
- groups_id : id des groupes (séparés par des virgules -> 1,2,3) - groups_id : id des groupes (séparés par des virgules -> 1,2,3)
paramètres optionnels : paramètres optionnels :
- moduleimpl_id : id du moduleimpl (par défaut None) - moduleimpl_id : id du moduleimpl (par défaut None)
Permissions :
- ScoView -> page en lecture seule
- AbsChange -> page en lecture/écriture
""" """
# Récupération des paramètres # Récupération des paramètres
moduleimpl_id: int = request.args.get("moduleimpl_id", None) moduleimpl_id: int = request.args.get("moduleimpl_id", None)
semaine: str = request.args.get("semaine", None) week: str = request.args.get("week", None)
group_ids: list[int] = request.args.get("group_ids", None) group_ids: str = request.args.get("group_ids", "") # ex: "1,2,3"
formsemestre_id: int = request.args.get("formsemestre_id", -1) formsemestre_id: int = request.args.get("formsemestre_id", -1)
# Vérification des paramètres # Vérification des paramètres
if semaine is None or group_ids is None or formsemestre_id is None: if week is None or group_ids == "" or formsemestre_id == -1:
raise ScoValueError("Paramètres manquants", dest_url=request.referrer) raise ScoValueError("Paramètres manquants", dest_url=request.referrer)
# Récupération du moduleimpl # Récupération du moduleimpl
moduleimpl: ModuleImpl | None = ModuleImpl.query.get(moduleimpl_id) try:
module_text: str = "Non spécifié" moduleimpl_id: int = int(moduleimpl_id)
if moduleimpl is not None: except (ValueError, TypeError):
module_text = f"{moduleimpl.code} {moduleimpl.titre}" moduleimpl_id: str | None = None if moduleimpl_id != "autre" else moduleimpl_id
else:
if moduleimpl_id == "autre":
module_text = "Autre module (pas dans la liste)"
moduleimpl_id = None if moduleimpl_id != "autre" else moduleimpl_id
# Récupération du formsemestre # Récupération du formsemestre
formsemestre: FormSemestre = FormSemestre.get_formsemestre(formsemestre_id) formsemestre: FormSemestre = FormSemestre.get_formsemestre(formsemestre_id)
# vérification semaine dans format iso 8601 et formsemestre # Vérification semaine dans format iso 8601 et formsemestre
try: regex_iso8601 = r"^\d{4}-W\d{2}$"
lundi_semaine = datetime.datetime.strptime(semaine + "-1", "%G-W%V-%u") if not re.match(regex_iso8601, week):
if ( raise ScoValueError("Semaine invalide", dest_url=request.referrer)
lundi_semaine.date() < formsemestre.date_debut
or lundi_semaine.date() > formsemestre.date_fin
):
raise ScoValueError(
"Semaine en dehors du semestre", dest_url=request.referrer
)
except (ValueError, TypeError) as exc: fs_deb_iso8601 = formsemestre.date_debut.strftime("%Y-W%W")
raise ScoValueError("Semaine invalide", dest_url=request.referrer) from exc fs_fin_iso8601 = formsemestre.date_fin.strftime("%Y-W%W")
except ScoValueError as exc:
raise exc
etudiants: list[Identite] = [] # Utilisation de la propriété de la norme iso 8601
# les chaines sont triables par ordre alphanumérique croissant
# et produiront le même ordre que les dates par ordre chronologique croissant
if week < fs_deb_iso8601 or week > fs_fin_iso8601:
raise ScoValueError("Semaine hors du semestre", dest_url=request.referrer)
# Vérification des groupes # Vérification des groupes
if group_ids is None: group_ids = group_ids.split(",") if group_ids != "" else []
group_ids = []
else:
group_ids = group_ids.split(",")
map(str, group_ids)
groups_infos = sco_groups_view.DisplayedGroupsInfos( groups_infos = sco_groups_view.DisplayedGroupsInfos(
group_ids, formsemestre_id=formsemestre.id, select_all_when_unspecified=True group_ids, formsemestre_id=formsemestre.id, select_all_when_unspecified=True
) )
if not groups_infos.members: if not groups_infos.members:
return ( return (
html_sco_header.sco_header(page_title="Assiduité: saisie hébdomadaire") html_sco_header.sco_header(page_title="Assiduité: saisie hebdomadaire")
+ "<h3>Aucun étudiant ! </h3>" + "<h3>Aucun étudiant ! </h3>"
+ html_sco_header.sco_footer() + html_sco_header.sco_footer()
) )
# Récupération des étudiants # Récupération des étudiants
etudiants.extend( etudiants: list[Identite] = [
[Identite.get_etud(etudid=m["etudid"]) for m in groups_infos.members] Identite.get_etud(etudid=m["etudid"]) for m in groups_infos.members
) ]
etudiants = list(sorted(etudiants, key=lambda etud: etud.sort_key))
if groups_infos.tous_les_etuds_du_sem: if groups_infos.tous_les_etuds_du_sem:
gr_tit = "en" gr_tit = "en"
@ -2077,10 +2070,11 @@ def signal_assiduites_hebdo():
grp + ' <span class="fontred">' + groups_infos.groups_titles + "</span>" grp + ' <span class="fontred">' + groups_infos.groups_titles + "</span>"
) )
# TODO vérif perm AbsChange -> readonly
return render_template( return render_template(
"assiduites/pages/signal_assiduites_hebdo.j2", "assiduites/pages/signal_assiduites_hebdo.j2",
gr=gr_tit, gr=gr_tit,
module=module_text,
etudiants=etudiants, etudiants=etudiants,
moduleimpl_select=_module_selector( moduleimpl_select=_module_selector(
formsemestre=formsemestre, moduleimpl_id=moduleimpl_id formsemestre=formsemestre, moduleimpl_id=moduleimpl_id