diff --git a/app/api/formsemestres.py b/app/api/formsemestres.py index 9c8d99ea0..3923a4e17 100644 --- a/app/api/formsemestres.py +++ b/app/api/formsemestres.py @@ -289,7 +289,7 @@ def formsemestre_programme(formsemestre_id: int): def formsemestre_etudiants( formsemestre_id: int, with_query: bool = False, long: bool = False ): - """Etudiants d'un formsemestre.""" + """Étudiants d'un formsemestre.""" query = FormSemestre.query.filter_by(id=formsemestre_id) if g.scodoc_dept: query = query.filter_by(dept_id=g.scodoc_dept_id) diff --git a/app/api/partitions.py b/app/api/partitions.py index aa080f48b..a6283f481 100644 --- a/app/api/partitions.py +++ b/app/api/partitions.py @@ -134,7 +134,7 @@ def etud_in_group(group_id: int): @scodoc @permission_required(Permission.ScoView) def etud_in_group_query(group_id: int): - """Etudiants du groupe, filtrés par état""" + """Étudiants du groupe, filtrés par état""" etat = request.args.get("etat") if etat not in {None, scu.INSCRIT, scu.DEMISSION, scu.DEF}: return json_error(404, "etat: valeur invalide") diff --git a/app/models/etudiants.py b/app/models/etudiants.py index 1361fee2e..44879c64f 100644 --- a/app/models/etudiants.py +++ b/app/models/etudiants.py @@ -66,7 +66,7 @@ class Identite(db.Model): @classmethod def from_request(cls, etudid=None, code_nip=None): - """Etudiant à partir de l'etudid ou du code_nip, soit + """Étudiant à partir de l'etudid ou du code_nip, soit passés en argument soit retrouvés directement dans la requête web. Erreur 404 si inexistant. """ diff --git a/app/scodoc/sco_apogee_csv.py b/app/scodoc/sco_apogee_csv.py index d36d8e9c3..cbcf36783 100644 --- a/app/scodoc/sco_apogee_csv.py +++ b/app/scodoc/sco_apogee_csv.py @@ -241,7 +241,7 @@ VOID_APO_RES = dict(N="", B="", J="", R="", M="") class ApoEtud(dict): - """Etudiant Apogee:""" + """Étudiant Apogee:""" def __init__( self, diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index c4bff4743..ba7618b7b 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -143,7 +143,7 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"): formsemestre = FormSemestre.query.get_or_404(formsemestre_id) nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) if not nt.get_etud_etat(etudid): - raise ScoValueError("Etudiant non inscrit à ce semestre") + raise ScoValueError("Étudiant non inscrit à ce semestre") I = scu.DictDefault(defaultvalue="") I["etudid"] = etudid I["formsemestre_id"] = formsemestre_id diff --git a/app/scodoc/sco_etape_apogee_view.py b/app/scodoc/sco_etape_apogee_view.py index 1aa353136..36322c5c4 100644 --- a/app/scodoc/sco_etape_apogee_view.py +++ b/app/scodoc/sco_etape_apogee_view.py @@ -191,7 +191,7 @@ def apo_semset_maq_status( "notes.view_scodoc_etuds", scodoc_dept=g.scodoc_dept, semset_id=semset_id, - title="Etudiants ScoDoc non listés dans les maquettes Apogée chargées", + title="Étudiants ScoDoc non listés dans les maquettes Apogée chargées", nip_list=",".join(nips_no_apo), ) H.append( @@ -204,7 +204,7 @@ def apo_semset_maq_status( "notes.view_apo_etuds", scodoc_dept=g.scodoc_dept, semset_id=semset_id, - title="Etudiants présents dans maquettes Apogée mais pas dans les semestres ScoDoc", + title="Étudiants présents dans maquettes Apogée mais pas dans les semestres ScoDoc", nip_list=",".join(nips_no_sco), ) H.append( @@ -747,7 +747,7 @@ def view_apo_csv(etape_apo="", semset_id="", format="html"): base_url="%s?etape_apo=%s&semset_id=%s" % (request.base_url, etape_apo, semset_id), filename="students_" + etape_apo, - caption="Etudiants Apogée en " + etape_apo, + caption="Étudiants Apogée en " + etape_apo, preferences=sco_preferences.SemPreferences(), ) diff --git a/app/scodoc/sco_etud.py b/app/scodoc/sco_etud.py index b3095c5be..96dd0bad2 100644 --- a/app/scodoc/sco_etud.py +++ b/app/scodoc/sco_etud.py @@ -211,7 +211,7 @@ def etud_sort_key(etud: dict) -> tuple: """ return ( scu.sanitize_string( - etud["nom_usuel"] or etud["nom"] or "", remove_spaces=False + etud.get("nom_usuel") or etud["nom"] or "", remove_spaces=False ).lower(), scu.sanitize_string(etud["prenom"] or "", remove_spaces=False).lower(), ) diff --git a/app/scodoc/sco_find_etud.py b/app/scodoc/sco_find_etud.py index 30d40fc93..403716431 100644 --- a/app/scodoc/sco_find_etud.py +++ b/app/scodoc/sco_find_etud.py @@ -185,7 +185,7 @@ def search_etud_in_dept(expnom=""): tab = GenTable( columns_ids=("nomprenom", "code_nip", "inscription", "groupes"), titles={ - "nomprenom": "Etudiant", + "nomprenom": "Étudiant", "code_nip": "NIP", "inscription": "Inscription", "groupes": "Groupes", @@ -335,7 +335,7 @@ def table_etud_in_accessible_depts(expnom=None): e["_nomprenom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"]) tab = GenTable( - titles={"nomprenom": "Etudiants en " + dept_id}, + titles={"nomprenom": "Étudiants en " + dept_id}, columns_ids=("nomprenom",), rows=etuds, html_sortable=True, diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index c77e64e7e..49599ce5f 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -741,7 +741,7 @@ def do_formsemestre_createwithmodules(edit=False): if ndb.DateDMYtoISO(tf[2]["date_debut"]) > ndb.DateDMYtoISO(tf[2]["date_fin"]): msg = '
- Cette opération crée un semestre extérieur ("ancien") et y inscrit - juste cet étudiant. + Cette opération crée un semestre extérieur ("ancien") de la même + formation que le semestre courant, et y inscrit juste cet étudiant. La décision de jury peut ensuite y être saisie.
@@ -128,7 +128,11 @@ def formsemestre_ext_create_form(etudid, formsemestre_id): """ ) if not semestre_ids: - H.append("""
pas de semestres extérieurs possibles
""") + H.append( + f"""pas de semestres extérieurs possibles + (indices entre {min_semestre_id} et {max_semestre_id}, semestre courant.) +
""" + ) return "\n".join(H) + F # Formulaire semestre_ids_list = sorted(semestre_ids) @@ -150,8 +154,9 @@ def formsemestre_ext_create_form(etudid, formsemestre_id): { "size": 40, "title": "Nom de ce semestre extérieur", - "explanation": """par exemple: établissement. N'indiquez pas les dates, ni le semestre, ni la modalité dans - le titre: ils seront automatiquement ajoutés""", + "explanation": """par exemple: établissement. + N'indiquez pas les dates, ni le semestre, ni la modalité dans + le titre: ils seront automatiquement ajoutés""", }, ), ( @@ -211,6 +216,7 @@ def formsemestre_ext_create_form(etudid, formsemestre_id): ) ) else: + # Le semestre extérieur est créé dans la même formation que le semestre courant tf[2]["formation_id"] = orig_sem["formation_id"] formsemestre_ext_create(etudid, tf[2]) return flask.redirect( diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index ff755faee..3f32de8ef 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -30,12 +30,13 @@ import time import flask -from flask import url_for, g, request +from flask import flash, url_for, g, request from app.comp import res_sem from app.comp.res_compat import NotesTableCompat from app.models import FormSemestre -from app.models.groups import GroupDescr, Partition +from app.models.etudiants import Identite +from app.models.groups import GroupDescr import app.scodoc.sco_utils as scu from app import log from app.scodoc.scolog import logdb @@ -85,12 +86,12 @@ def do_formsemestre_inscription_listinscrits(formsemestre_id): def do_formsemestre_inscription_create(args, method=None): "create a formsemestre_inscription (and sco event)" cnx = ndb.GetDBConnexion() - log("do_formsemestre_inscription_create: args=%s" % str(args)) + log(f"do_formsemestre_inscription_create: args={args}") sems = sco_formsemestre.do_formsemestre_list( {"formsemestre_id": args["formsemestre_id"]} ) if len(sems) != 1: - raise ScoValueError("code de semestre invalide: %s" % args["formsemestre_id"]) + raise ScoValueError(f"code de semestre invalide: {args['formsemestre_id']}") sem = sems[0] # check lock if not sem["etat"]: @@ -112,13 +113,11 @@ def do_formsemestre_inscription_create(args, method=None): cnx, method=method, etudid=args["etudid"], - msg="inscription en semestre %s" % args["formsemestre_id"], + msg=f"inscription en semestre {args['formsemestre_id']}", commit=False, ) # - sco_cache.invalidate_formsemestre( - formsemestre_id=args["formsemestre_id"] - ) # > inscription au semestre + sco_cache.invalidate_formsemestre(formsemestre_id=args["formsemestre_id"]) return r @@ -127,9 +126,7 @@ def do_formsemestre_inscription_delete(oid, formsemestre_id=None): cnx = ndb.GetDBConnexion() _formsemestre_inscriptionEditor.delete(cnx, oid) - sco_cache.invalidate_formsemestre( - formsemestre_id=formsemestre_id - ) # > desinscription du semestre + sco_cache.invalidate_formsemestre(formsemestre_id=formsemestre_id) def do_formsemestre_demission( @@ -183,33 +180,34 @@ def do_formsemestre_desinscription(etudid, formsemestre_id): """ from app.scodoc import sco_formsemestre_edit - sem = sco_formsemestre.get_formsemestre(formsemestre_id) - # -- check lock - if not sem["etat"]: - raise ScoValueError("desinscription impossible: semestre verrouille") - - # -- Si decisions de jury, desinscription interdite formsemestre = FormSemestre.query.get_or_404(formsemestre_id) + etud = Identite.query.get_or_404(etudid) + # -- check lock + if not formsemestre.etat: + raise ScoValueError("désinscription impossible: semestre verrouille") + + # -- Si decisions de jury, désinscription interdite nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) if nt.etud_has_decision(etudid): raise ScoValueError( - "desinscription impossible: l'étudiant a une décision de jury (la supprimer avant si nécessaire)" + """désinscription impossible: l'étudiant {etud.nomprenom} a + une décision de jury (la supprimer avant si nécessaire)""" ) insem = do_formsemestre_inscription_list( args={"formsemestre_id": formsemestre_id, "etudid": etudid} ) if not insem: - raise ScoValueError("%s n'est pas inscrit au semestre !" % etudid) + raise ScoValueError(f"{etud.nomprenom} n'est pas inscrit au semestre !") insem = insem[0] # -- desinscription de tous les modules cnx = ndb.GetDBConnexion() cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) cursor.execute( """SELECT Im.id AS moduleimpl_inscription_id - FROM notes_moduleimpl_inscription Im, notes_moduleimpl M - WHERE Im.etudid=%(etudid)s + FROM notes_moduleimpl_inscription Im, notes_moduleimpl M + WHERE Im.etudid=%(etudid)s and Im.moduleimpl_id = M.id and M.formsemestre_id = %(formsemestre_id)s """, @@ -221,21 +219,22 @@ def do_formsemestre_desinscription(etudid, formsemestre_id): sco_moduleimpl.do_moduleimpl_inscription_delete( moduleimpl_inscription_id, formsemestre_id=formsemestre_id ) - # -- desincription du semestre + # -- désincription du semestre do_formsemestre_inscription_delete( insem["formsemestre_inscription_id"], formsemestre_id=formsemestre_id ) # --- Semestre extérieur - if sem["modalite"] == "EXT": + if formsemestre.modalite == "EXT": inscrits = do_formsemestre_inscription_list( args={"formsemestre_id": formsemestre_id} ) nbinscrits = len(inscrits) if nbinscrits == 0: log( - "do_formsemestre_desinscription: suppression du semestre extérieur %s" - % formsemestre_id + f"""do_formsemestre_desinscription: + suppression du semestre extérieur {formsemestre}""" ) + flash("Semestre exterieur supprimé") sco_formsemestre_edit.do_formsemestre_delete(formsemestre_id) logdb( diff --git a/app/scodoc/sco_formsemestre_validation.py b/app/scodoc/sco_formsemestre_validation.py index cd21bd995..177b97581 100644 --- a/app/scodoc/sco_formsemestre_validation.py +++ b/app/scodoc/sco_formsemestre_validation.py @@ -322,7 +322,7 @@ def formsemestre_validation_etud_form( # Décisions possibles rows_assidu = decisions_possible_rows( - Se, True, subtitle="Etudiant assidu:", trclass="sfv_ass" + Se, True, subtitle="Étudiant assidu:", trclass="sfv_ass" ) rows_non_assidu = decisions_possible_rows( Se, False, subtitle="Si problème d'assiduité:", trclass="sfv_pbass" diff --git a/app/scodoc/sco_import_etuds.py b/app/scodoc/sco_import_etuds.py index fcad66228..4453c8a18 100644 --- a/app/scodoc/sco_import_etuds.py +++ b/app/scodoc/sco_import_etuds.py @@ -213,7 +213,7 @@ def sco_import_generate_excel_sample( else: lines = [[]] # empty content, titles only return sco_excel.excel_simple_table( - titles=titles, titles_styles=titles_styles, sheet_name="Etudiants", lines=lines + titles=titles, titles_styles=titles_styles, sheet_name="Étudiants", lines=lines ) diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index 4f0146c1e..6ab1baf10 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -115,7 +115,7 @@ def list_authorized_etuds_by_sem(sem, delai=274, ignore_jury=False): def list_inscrits(formsemestre_id, with_dems=False): - """Etudiants déjà inscrits à ce semestre + """Étudiants déjà inscrits à ce semestre { etudid : etud } """ if not with_dems: diff --git a/app/scodoc/sco_moduleimpl_inscriptions.py b/app/scodoc/sco_moduleimpl_inscriptions.py index d9f2a9989..44978ba7d 100644 --- a/app/scodoc/sco_moduleimpl_inscriptions.py +++ b/app/scodoc/sco_moduleimpl_inscriptions.py @@ -46,11 +46,11 @@ from app.scodoc import htmlutils from app.scodoc import sco_cache from app.scodoc import sco_edit_module from app.scodoc import sco_edit_ue +from app.scodoc import sco_etud from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre_inscriptions from app.scodoc import sco_groups from app.scodoc import sco_moduleimpl -from app.scodoc import sco_etud from app.scodoc.sco_exceptions import ScoValueError from app.scodoc.sco_permissions import Permission @@ -106,14 +106,13 @@ def moduleimpl_inscriptions_edit(moduleimpl_id, etuds=[], submitted=False): etuds_info = sco_etud.get_etud_info(etudid=ins["etudid"], filled=1) if not etuds_info: log( - "moduleimpl_inscriptions_edit: incoherency for etudid=%s !" - % ins["etudid"] + f"""moduleimpl_inscriptions_edit: inconsistency for etudid={ins['etudid']} !""" ) raise ScoValueError( - "Etudiant %s inscrit mais inconnu dans la base !!!!!" % ins["etudid"] + f"""Étudiant {ins['etudid']} inscrit mais inconnu dans la base !""" ) ins["etud"] = etuds_info[0] - inscrits.sort(key=lambda x: x["etud"]["nom"]) + inscrits.sort(key=lambda inscr: sco_etud.etud_sort_key(inscr["etud"])) in_m = sco_moduleimpl.do_moduleimpl_inscription_list( moduleimpl_id=M["moduleimpl_id"] ) @@ -144,24 +143,20 @@ def moduleimpl_inscriptions_edit(moduleimpl_id, etuds=[], submitted=False): """ ) - H.append("""