forked from ScoDoc/ScoDoc
Code cleaning
This commit is contained in:
parent
c11fccab02
commit
f537cd2e48
@ -129,235 +129,6 @@ def module_create(
|
|||||||
semestre_id=semestre_id,
|
semestre_id=semestre_id,
|
||||||
formation_id=formation_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"""<h2>Création {object_name} dans la formation {formation.acronyme}
|
|
||||||
</h2>
|
|
||||||
"""
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
H += [
|
|
||||||
f"""<h2>Création {object_name} dans la matière {matiere.titre},
|
|
||||||
(UE {ue.acronyme}), semestre {ue.semestre_idx}</h2>
|
|
||||||
"""
|
|
||||||
]
|
|
||||||
|
|
||||||
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: <em>Introduction à la démarche ergonomique</em>",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"abbrev",
|
|
||||||
{
|
|
||||||
"size": 20,
|
|
||||||
"explanation": "nom abrégé (pour les bulletins). Exemple: <em>Intro. à l'ergonomie</em>",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
||||||
|
|
||||||
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": """
|
|
||||||
<div>(<em>les coefficients vers les UE se fixent sur la page dédiée</em>)
|
|
||||||
</div>""",
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]
|
|
||||||
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):
|
def can_delete_module(module):
|
||||||
@ -367,8 +138,6 @@ def can_delete_module(module):
|
|||||||
|
|
||||||
def do_module_delete(oid):
|
def do_module_delete(oid):
|
||||||
"delete module"
|
"delete module"
|
||||||
from app.scodoc import sco_formations
|
|
||||||
|
|
||||||
module = Module.query.get_or_404(oid)
|
module = Module.query.get_or_404(oid)
|
||||||
mod = module_list({"module_id": oid})[0] # sco7
|
mod = module_list({"module_id": oid})[0] # sco7
|
||||||
if module_is_locked(module.id):
|
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 !
|
# S'il y a des moduleimpls, on ne peut pas detruire le module !
|
||||||
mods = sco_moduleimpl.moduleimpl_list(module_id=oid)
|
mods = sco_moduleimpl.moduleimpl_list(module_id=oid)
|
||||||
if mods:
|
if mods:
|
||||||
err_page = f"""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>
|
err_page = f"""
|
||||||
<p class="help">Il faut d'abord supprimer le semestre (ou en retirer ce module). Mais il est peut être préférable de
|
<h3>Destruction du module impossible car il est utilisé dans des
|
||||||
laisser ce programme intact et d'en créer une nouvelle version pour la modifier sans affecter les semestres déjà en place.
|
semestres existants !</h3>
|
||||||
|
<p class="help">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.
|
||||||
</p>
|
</p>
|
||||||
<a href="{url_for('notes.ue_table', scodoc_dept=g.scodoc_dept,
|
<a href="{url_for('notes.ue_table', scodoc_dept=g.scodoc_dept,
|
||||||
formation_id=mod["formation_id"])}">reprendre</a>
|
formation_id=mod["formation_id"])}">reprendre</a>
|
||||||
@ -473,11 +247,11 @@ def do_module_edit(vals: dict) -> None:
|
|||||||
|
|
||||||
def check_module_code_unicity(code, field, formation_id, module_id=None):
|
def check_module_code_unicity(code, field, formation_id, module_id=None):
|
||||||
"true si code module unique dans la formation"
|
"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
|
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(
|
def module_edit(
|
||||||
@ -607,7 +381,8 @@ def module_edit(
|
|||||||
]
|
]
|
||||||
if not unlocked:
|
if not unlocked:
|
||||||
H.append(
|
H.append(
|
||||||
"""<div class="ue_warning"><span>Formation verrouillée, seuls certains éléments peuvent être modifiés</span></div>"""
|
"""<div class="ue_warning"><span>Formation verrouillée, seuls
|
||||||
|
certains éléments peuvent être modifiés</span></div>"""
|
||||||
)
|
)
|
||||||
if is_apc:
|
if is_apc:
|
||||||
module_types = scu.ModuleType # tous les types
|
module_types = scu.ModuleType # tous les types
|
||||||
@ -639,7 +414,8 @@ def module_edit(
|
|||||||
"code",
|
"code",
|
||||||
{
|
{
|
||||||
"size": 10,
|
"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,
|
"allow_null": False,
|
||||||
"validator": lambda val, field, formation_id=formation.id: check_module_code_unicity(
|
"validator": lambda val, field, formation_id=formation.id: check_module_code_unicity(
|
||||||
val, field, formation_id, module_id=module.id if module else None
|
val, field, formation_id, module_id=module.id if module else None
|
||||||
@ -717,7 +493,8 @@ def module_edit(
|
|||||||
"readonly": True,
|
"readonly": True,
|
||||||
"title": "Coefficients vers les UE ",
|
"title": "Coefficients vers les UE ",
|
||||||
"default": coefs_descr_txt,
|
"default": coefs_descr_txt,
|
||||||
"explanation": " <br>(passer par la page d'édition de la formation pour modifier les coefficients)",
|
"explanation": """ <br>(passer par la page d'édition de la
|
||||||
|
formation pour modifier les coefficients)""",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user