diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index 57b4f8105..2317d8b4c 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -129,235 +129,6 @@ def module_create( semestre_id=semestre_id, formation_id=formation_id, ) - if matiere_id: - matiere = Matiere.query.get_or_404(matiere_id) - ue = matiere.ue - formation = ue.formation - else: - formation = Formation.query.get_or_404(formation_id) - parcours = formation.get_parcours() - is_apc = parcours.APC_SAE - ues = formation.ues.order_by( - UniteEns.semestre_idx, UniteEns.numero, UniteEns.acronyme - ).all() - # cherche le numero adéquat (pour placer le module en fin de liste) - modules = formation.modules.all() - if modules: - default_num = max([m.numero or 0 for m in modules]) + 10 - else: - default_num = 10 - - if is_apc and module_type is not None: - object_name = scu.MODULE_TYPE_NAMES[module_type] - else: - object_name = "Module" - H = [ - html_sco_header.sco_header(page_title=f"Création {object_name}"), - ] - if not matiere_id: - H += [ - f"""

Création {object_name} dans la formation {formation.acronyme} -

- """ - ] - else: - H += [ - f"""

Création {object_name} dans la matière {matiere.titre}, - (UE {ue.acronyme}), semestre {ue.semestre_idx}

- """ - ] - - H += [ - render_template( - "scodoc/help/modules.html", - is_apc=is_apc, - semestre_id=semestre_id, - ) - ] - - descr = [ - ( - "code", - { - "size": 10, - "explanation": "code du module, ressource ou SAÉ. Exemple M1203, R2.01, ou SAÉ 3.4. Ce code doit être unique dans la formation.", - "allow_null": False, - "validator": lambda val, field, formation_id=formation_id: check_module_code_unicity( - val, field, formation_id - ), - }, - ), - ( - "titre", - { - "size": 30, - "explanation": "nom du module. Exemple: Introduction à la démarche ergonomique", - }, - ), - ( - "abbrev", - { - "size": 20, - "explanation": "nom abrégé (pour les bulletins). Exemple: Intro. à l'ergonomie", - }, - ), - ] - - if is_apc: - module_types = scu.ModuleType # tous les types - else: - # ne propose pas SAE et Ressources: - module_types = set(scu.ModuleType) - { - scu.ModuleType.RESSOURCE, - scu.ModuleType.SAE, - } - - descr += [ - ( - "module_type", - { - "input_type": "menu", - "title": "Type", - "explanation": "", - "labels": [x.name.capitalize() for x in module_types], - "allowed_values": [str(int(x)) for x in module_types], - }, - ), - ( - "heures_cours", - { - "title": "Heures de cours", - "size": 4, - "type": "float", - "explanation": "nombre d'heures de cours (optionnel)", - }, - ), - ( - "heures_td", - { - "title": "Heures de TD", - "size": 4, - "type": "float", - "explanation": "nombre d'heures de Travaux Dirigés (optionnel)", - }, - ), - ( - "heures_tp", - { - "title": "Heures de TP", - "size": 4, - "type": "float", - "explanation": "nombre d'heures de Travaux Pratiques (optionnel)", - }, - ), - ] - if is_apc: - descr += [ - ( - "sep_ue_coefs", - { - "input_type": "separator", - "title": """ -
(les coefficients vers les UE se fixent sur la page dédiée) -
""", - }, - ), - ] - else: - descr += [ - ( - "coefficient", - { - "size": 4, - "type": "float", - "explanation": "coefficient dans la formation (PPN)", - "allow_null": False, - }, - ), - ] - - if matiere_id: - descr += [ - ("ue_id", {"default": ue.id, "input_type": "hidden"}), - ("matiere_id", {"default": matiere_id, "input_type": "hidden"}), - ] - else: - # choix de l'UE de rattachement - descr += [ - ( - "ue_id", - { - "input_type": "menu", - "type": "int", - "title": "UE de rattachement", - "explanation": "utilisée notamment pour les malus", - "labels": [ - f"S{u.semestre_idx if u.semestre_idx is not None else '.'} / {u.acronyme} {u.titre}" - for u in ues - ], - "allowed_values": [u.id for u in ues], - }, - ), - ] - - descr += [ - # ('ects', { 'size' : 4, 'type' : 'float', 'title' : 'ECTS', 'explanation' : 'nombre de crédits ECTS (inutilisés: les crédits sont associés aux UE)' }), - ("formation_id", {"default": formation.id, "input_type": "hidden"}), - ( - "code_apogee", - { - "title": "Code Apogée", - "size": 25, - "explanation": "(optionnel) code élément pédagogique Apogée ou liste de codes ELP séparés par des virgules", - "validator": lambda val, _: len(val) < APO_CODE_STR_LEN, - }, - ), - ( - "numero", - { - "size": 2, - "explanation": "numéro (1,2,3,4...) pour ordre d'affichage", - "type": "int", - "default": default_num, - }, - ), - ] - args = scu.get_request_args() - tf = TrivialFormulator( - request.base_url, - args, - descr, - submitlabel="Créer ce module", - ) - if tf[0] == 0: - return "\n".join(H) + tf[1] + html_sco_header.sco_footer() - else: - if not matiere_id: - # formulaire avec choix UE de rattachement - ue = UniteEns.query.get(tf[2]["ue_id"]) - if ue is None: - raise ValueError("UE invalide") - matiere = ue.matieres.first() - if matiere: - tf[2]["matiere_id"] = matiere.id - else: - matiere_id = sco_edit_matiere.do_matiere_create( - {"ue_id": ue.id, "titre": ue.titre, "numero": 1}, - ) - tf[2]["matiere_id"] = matiere_id - - tf[2]["semestre_id"] = ue.semestre_idx - - _ = do_module_create(tf[2]) - - return flask.redirect( - url_for( - "notes.ue_table", - scodoc_dept=g.scodoc_dept, - formation_id=formation.id, - semestre_idx=tf[2]["semestre_id"], - ) - ) def can_delete_module(module): @@ -367,8 +138,6 @@ def can_delete_module(module): def do_module_delete(oid): "delete module" - from app.scodoc import sco_formations - module = Module.query.get_or_404(oid) mod = module_list({"module_id": oid})[0] # sco7 if module_is_locked(module.id): @@ -388,9 +157,14 @@ def do_module_delete(oid): # S'il y a des moduleimpls, on ne peut pas detruire le module ! mods = sco_moduleimpl.moduleimpl_list(module_id=oid) if mods: - err_page = f"""

Destruction du module impossible car il est utilisé dans des semestres existants !

-

Il faut d'abord supprimer le semestre (ou en retirer ce module). Mais il est peut être préférable de - laisser ce programme intact et d'en créer une nouvelle version pour la modifier sans affecter les semestres déjà en place. + err_page = f""" +

Destruction du module impossible car il est utilisé dans des + semestres existants !

+

Il faut d'abord supprimer le semestre (ou en retirer + ce module). + Mais il est peut être préférable de laisser ce programme intact et + d'en créer une nouvelle version pour la modifier sans affecter + les semestres déjà en place.

reprendre @@ -473,11 +247,11 @@ def do_module_edit(vals: dict) -> None: def check_module_code_unicity(code, field, formation_id, module_id=None): "true si code module unique dans la formation" - Mods = module_list(args={"code": code, "formation_id": formation_id}) + modules = module_list(args={"code": code, "formation_id": formation_id}) if module_id: # edition: supprime le module en cours - Mods = [m for m in Mods if m["module_id"] != module_id] + modules = [m for m in modules if m["module_id"] != module_id] - return len(Mods) == 0 + return len(modules) == 0 def module_edit( @@ -607,7 +381,8 @@ def module_edit( ] if not unlocked: H.append( - """
Formation verrouillée, seuls certains éléments peuvent être modifiés
""" + """
Formation verrouillée, seuls + certains éléments peuvent être modifiés
""" ) if is_apc: module_types = scu.ModuleType # tous les types @@ -639,7 +414,8 @@ def module_edit( "code", { "size": 10, - "explanation": "code du module (issu du programme, exemple M1203, R2.01 , ou SAÉ 3.4. Doit être unique dans la formation)", + "explanation": """code du module (issu du programme, exemple M1203, + R2.01, ou SAÉ 3.4. Doit être unique dans la formation)""", "allow_null": False, "validator": lambda val, field, formation_id=formation.id: check_module_code_unicity( val, field, formation_id, module_id=module.id if module else None @@ -717,7 +493,8 @@ def module_edit( "readonly": True, "title": "Coefficients vers les UE ", "default": coefs_descr_txt, - "explanation": "
(passer par la page d'édition de la formation pour modifier les coefficients)", + "explanation": """
(passer par la page d'édition de la + formation pour modifier les coefficients)""", }, ) ]