diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index f1e60163..1195c575 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -93,8 +93,9 @@ def formsemestre_createwithmodules(): def formsemestre_editwithmodules(formsemestre_id): """Page modification semestre""" - # portage from dtml - sem = sco_formsemestre.get_formsemestre(formsemestre_id) + formsemestre: FormSemestre = FormSemestre.query.filter_by( + id=formsemestre_id, dept_id=g.scodoc_dept_id + ).first_or_404() H = [ html_sco_header.html_sem_header( "Modification du semestre", @@ -103,14 +104,14 @@ def formsemestre_editwithmodules(formsemestre_id): bodyOnLoad="init_tf_form('')", ) ] - if not sem["etat"]: + if not formsemestre.etat: H.append( f"""

{scu.icontag( "lock_img", border="0", title="Semestre verrouillé") }Ce semestre est verrouillé.

""" ) else: - r = do_formsemestre_createwithmodules(edit=1) + r = do_formsemestre_createwithmodules(edit=True, formsemestre=formsemestre) if isinstance(r, str): H.append(r) else: @@ -133,7 +134,7 @@ def formsemestre_editwithmodules(formsemestre_id): return "\n".join(H) + html_sco_header.sco_footer() -def can_edit_sem(formsemestre_id="", sem=None): +def can_edit_sem(formsemestre_id: int = None, sem=None): """Return sem if user can edit it, False otherwise""" sem = sem or sco_formsemestre.get_formsemestre(formsemestre_id) if not current_user.has_permission(Permission.ScoImplement): # pas chef @@ -150,20 +151,18 @@ resp_fields = [ ] -def do_formsemestre_createwithmodules(edit=False): - "Form choix modules / responsables et creation formsemestre" - # Fonction accessible à tous, controle acces à la main: +def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = None): + "Form choix modules / responsables et création formsemestre" vals = scu.get_request_args() - if edit: - formsemestre_id = int(vals["formsemestre_id"]) - sem = sco_formsemestre.get_formsemestre(formsemestre_id) - formsemestre = FormSemestre.query.get_or_404(formsemestre_id) + # Fonction accessible à tous, contrôle d'acces à la main: if not current_user.has_permission(Permission.ScoImplement): if not edit: # il faut ScoImplement pour créer un semestre raise AccessDenied("vous n'avez pas le droit d'effectuer cette opération") else: - if not sem["resp_can_edit"] or current_user.id not in sem["responsables"]: + if not formsemestre.resp_can_edit or current_user.id not in ( + u.id for u in formsemestre.responsables + ): raise AccessDenied( "vous n'avez pas le droit d'effectuer cette opération" ) @@ -189,8 +188,8 @@ def do_formsemestre_createwithmodules(edit=False): module_ids_set = set() else: # setup form init values - initvalues = sem - semestre_id = initvalues["semestre_id"] + initvalues = formsemestre.to_dict() + semestre_id = formsemestre.semestre_id # add associated modules to tf-checked: module_ids_existing = [modimpl.module.id for modimpl in formsemestre.modimpls] module_ids_set = set(module_ids_existing) @@ -200,23 +199,23 @@ def do_formsemestre_createwithmodules(edit=False): modimpl.responsable_id, f"inconnu numéro {modimpl.responsable_id} resp. de {modimpl.id} !", ) - for index, resp in enumerate(sem["responsables"]): - initvalues[resp_fields[index]] = uid2display.get(resp) + for index, resp in enumerate(formsemestre.responsables): + initvalues[resp_fields[index]] = uid2display.get(resp.id) # Liste des ID de semestres if formation.type_parcours is not None: parcours = sco_codes_parcours.get_parcours_from_code(formation.type_parcours) - NB_SEM = parcours.NB_SEM + nb_sem = parcours.NB_SEM else: - NB_SEM = 10 # fallback, max 10 semestres - if NB_SEM == 1: + nb_sem = 10 # fallback, max 10 semestres + if nb_sem == 1: semestre_id_list = [-1] else: if edit and is_apc: # en APC, ne permet pas de changer de semestre semestre_id_list = [formsemestre.semestre_id] else: - semestre_id_list = list(range(1, NB_SEM + 1)) + semestre_id_list = list(range(1, nb_sem + 1)) if not is_apc: # propose "pas de semestre" seulement en classique semestre_id_list.insert(0, -1) @@ -345,7 +344,7 @@ def do_formsemestre_createwithmodules(edit=False): # et ajoute les étapes du semestre qui ne sont pas dans la liste (soit la liste a changé, soit l'étape a été ajoutée manuellement) etapes_set = {et[0] for et in etapes} if edit: - for etape_vdi in sem["etapes"]: + for etape_vdi in formsemestre.etapes_apo_vdi(): if etape_vdi.etape not in etapes_set: etapes.append((etape_vdi.etape, "inconnue")) modform.append( @@ -415,7 +414,7 @@ def do_formsemestre_createwithmodules(edit=False): "allow_null": not sco_preferences.get_preference( "always_require_apo_sem_codes" ) - or formsemestre.modalite == "EXT", + or (formsemestre and formsemestre.modalite == "EXT"), }, ) ) @@ -429,20 +428,23 @@ def do_formsemestre_createwithmodules(edit=False): "allow_null": not sco_preferences.get_preference( "always_require_apo_sem_codes" ) - or formsemestre.modalite == "EXT", + or (formsemestre and formsemestre.modalite == "EXT"), }, ) ) if edit: formtit = f""" -

Modifier les coefficients des UE capitalisées

+

Modifier les coefficients des UE capitalisées +

Sélectionner les modules, leurs responsables et les étudiants à inscrire:

""" else: formtit = """

Sélectionner les modules et leurs responsables

-

Si vous avez des parcours (options), dans un premier +

+ Si vous avez des parcours (options), dans un premier temps ne sélectionnez que les modules du tronc commun, puis après inscriptions, revenez ajouter les modules de parcours en sélectionnant les groupes d'étudiants à y inscrire. @@ -548,7 +550,9 @@ def do_formsemestre_createwithmodules(edit=False): ) ] if edit: - sem["parcours"] = [str(parcour.id) for parcour in formsemestre.parcours] + initvalues["parcours"] = [ + str(parcour.id) for parcour in formsemestre.parcours + ] else: modform += [ ( @@ -624,7 +628,7 @@ def do_formsemestre_createwithmodules(edit=False): else: disabled = "" fcg = f'