forked from ScoDoc/ScoDoc
[WIP] Assiduité : corrections saisie_assiduites_hebdo
This commit is contained in:
parent
eb88a8ca83
commit
f94998f66b
@ -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");
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user