forked from ScoDoc/ScoDoc
Assiduité: amélioration fonction import excel: feuille_abs_formsemestre
This commit is contained in:
parent
3c5117c2d0
commit
0406bba322
@ -188,7 +188,8 @@ class RowAssi(tb.Row):
|
||||
self.add_cell(
|
||||
"lien_ajout",
|
||||
"",
|
||||
f"""<a href='{ajout_url}' class="stdlink">signaler</a>""",
|
||||
"signaler",
|
||||
target=ajout_url,
|
||||
no_excel=True,
|
||||
column_classes={"col_lien_ajout"},
|
||||
)
|
||||
@ -201,9 +202,12 @@ class RowAssi(tb.Row):
|
||||
|
||||
Returns :
|
||||
{
|
||||
"<etat>" : [<Etat version lisible>, <nb total etat>, <nb just etat>]
|
||||
"<etat>" : [<Etat version lisible>, <nb_total_etat>, <nb_just_etat>]
|
||||
}
|
||||
|
||||
nb_total_etat = nb d'assiduité de la catégorie (dans la métrique)
|
||||
nb_just_etat = nb d'assiduité justifiées de la catégorie (dans la métrique)
|
||||
|
||||
"""
|
||||
|
||||
# Préparation du retour
|
||||
|
@ -5,10 +5,6 @@
|
||||
<style>
|
||||
#excel-content {
|
||||
margin: 4px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
.hint {
|
||||
@ -48,12 +44,11 @@
|
||||
<p class="hint">Le fichier importé doit respecter le format suivant</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
colonne A : Identifiant de l'étudiant
|
||||
</li>
|
||||
<li class="star">colonne B : Date de début</li>
|
||||
<li class="star">colonne C : Date de fin</li>
|
||||
<li class="opt">colonne D : État (ABS, RET, PRE), considéré ABSent si vide</li>
|
||||
<li>colonne A : identifiant de l'étudiant (voir type ci-dessous)</li>
|
||||
<li class="star">colonne B : date de début</li>
|
||||
<li class="star">colonne C : date de fin</li>
|
||||
<li class="opt">colonne D : état: ABS (absent), ABSJUST (absent justifié),
|
||||
RET (retard), PRE (présent), considéré ABSent si vide</li>
|
||||
<li class="opt">colonne E : code du module</li>
|
||||
</ul>
|
||||
|
||||
@ -88,9 +83,15 @@
|
||||
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />
|
||||
</div>
|
||||
<div class="space-before-18">
|
||||
<button type="submit">Importer</button>
|
||||
<button type="submit"><b>Importer</b></button>
|
||||
</div>
|
||||
</form>
|
||||
<div class="vspaced">
|
||||
<a class="stdlink" href="{{
|
||||
url_for('notes.formsemestre_status',
|
||||
scodoc_dept=g.scodoc_dept, formsemestre_id=sco.formsemestre.id)
|
||||
}}">retour au tableau de bord</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -2562,13 +2562,15 @@ def _import_excel_assiduites_list(
|
||||
erreurs: list[tuple[str, list]] = []
|
||||
for num, ligne in enumerate(data):
|
||||
if not ligne or len(ligne) < 5:
|
||||
raise ScoValueError("Format de fichier tableau non reconnu")
|
||||
raise ScoValueError(
|
||||
"Format de fichier tableau non reconnu (nb de colonnes)"
|
||||
)
|
||||
identifiant_etud = ligne[0] # etudid/nip/ine
|
||||
date_debut_str = ligne[1] # iso / fra / excel
|
||||
date_fin_str = ligne[2] # iso / fra / excel
|
||||
etat = ligne[3].strip().upper() # etat abs par défaut, sinon RET ou PRE
|
||||
etat = etat or "ABS"
|
||||
module = ligne[4] or None # code du module
|
||||
module = ligne[4].strip() or None # code du module
|
||||
moduleimpl: ModuleImpl | None = None
|
||||
try:
|
||||
# On récupère l'étudiant
|
||||
@ -2578,7 +2580,9 @@ def _import_excel_assiduites_list(
|
||||
f"Étudiant ({safehtml.html_to_safe_html(identifiant_etud)}) non trouvé"
|
||||
)
|
||||
# On vérifie que l'étudiant appartient au semestre
|
||||
if formsemestre not in etud.get_formsemestres():
|
||||
if formsemestre.id not in {
|
||||
ins.formsemestre_id for ins in etud.formsemestre_inscriptions
|
||||
}:
|
||||
raise ScoValueError("Étudiant non inscrit dans le semestre")
|
||||
|
||||
# On transforme les dates
|
||||
@ -2590,14 +2594,14 @@ def _import_excel_assiduites_list(
|
||||
date_fin = scu.TIME_ZONE.localize(date_fin)
|
||||
|
||||
# Vérification de l'état
|
||||
if etat not in ["ABS", "RET", "PRE"]:
|
||||
if etat not in ["ABS", "RET", "PRE", "ABSJUST"]:
|
||||
raise ScoValueError(f"État invalide => {etat}")
|
||||
|
||||
etat: scu.EtatAssiduite = {
|
||||
etat_assiduite: scu.EtatAssiduite = {
|
||||
"ABS": scu.EtatAssiduite.ABSENT,
|
||||
"RET": scu.EtatAssiduite.RETARD,
|
||||
"PRE": scu.EtatAssiduite.PRESENT,
|
||||
}.get(etat, scu.EtatAssiduite.ABSENT)
|
||||
}.get(etat[:3], scu.EtatAssiduite.ABSENT)
|
||||
|
||||
# On récupère le moduleimpl à partir du code du module et du formsemestre
|
||||
if module:
|
||||
@ -2607,8 +2611,10 @@ def _import_excel_assiduites_list(
|
||||
etud=etud,
|
||||
date_debut=date_debut,
|
||||
date_fin=date_fin,
|
||||
etat=etat,
|
||||
etat=etat_assiduite,
|
||||
moduleimpl=moduleimpl,
|
||||
est_just="JUST" in etat,
|
||||
user_id=current_user.id,
|
||||
)
|
||||
db.session.add(assiduite)
|
||||
scass.simple_invalidate_cache(assiduite.to_dict())
|
||||
|
Loading…
x
Reference in New Issue
Block a user