forked from ScoDoc/ScoDoc
Ré-écriture fonction ajout modules de malus à toutes les UE
This commit is contained in:
parent
1676fba5ab
commit
3f15ff099d
@ -33,7 +33,7 @@ from flask import url_for, render_template
|
|||||||
from flask import g, request
|
from flask import g, request
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
|
|
||||||
from app import log
|
from app import db, log
|
||||||
from app import models
|
from app import models
|
||||||
from app.models import APO_CODE_STR_LEN
|
from app.models import APO_CODE_STR_LEN
|
||||||
from app.models import Formation, Matiere, Module, UniteEns
|
from app.models import Formation, Matiere, Module, UniteEns
|
||||||
@ -421,7 +421,7 @@ def module_delete(module_id=None):
|
|||||||
|
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(page_title="Suppression d'un module"),
|
html_sco_header.sco_header(page_title="Suppression d'un module"),
|
||||||
f"""<h2>Suppression du module {module.titre} ({module.code})</h2>""",
|
f"""<h2>Suppression du module {module.titre or "<em>sans titre</em>"} ({module.code})</h2>""",
|
||||||
]
|
]
|
||||||
|
|
||||||
dest_url = url_for(
|
dest_url = url_for(
|
||||||
@ -848,21 +848,13 @@ def module_count_moduleimpls(module_id):
|
|||||||
|
|
||||||
def formation_add_malus_modules(formation_id, titre=None, redirect=True):
|
def formation_add_malus_modules(formation_id, titre=None, redirect=True):
|
||||||
"""Création d'un module de "malus" dans chaque UE d'une formation"""
|
"""Création d'un module de "malus" dans chaque UE d'une formation"""
|
||||||
from app.scodoc import sco_edit_ue
|
|
||||||
|
|
||||||
ues = sco_edit_ue.ue_list(args={"formation_id": formation_id})
|
formation = Formation.query.get_or_404(formation_id)
|
||||||
|
|
||||||
for ue in ues:
|
for ue in formation.ues:
|
||||||
# Un seul module de malus par UE:
|
ue_add_malus_module(ue, titre=titre)
|
||||||
nb_mod_malus = len(
|
|
||||||
[
|
formation.invalidate_cached_sems()
|
||||||
mod
|
|
||||||
for mod in module_list(args={"ue_id": ue["ue_id"]})
|
|
||||||
if mod["module_type"] == scu.ModuleType.MALUS
|
|
||||||
]
|
|
||||||
)
|
|
||||||
if nb_mod_malus == 0:
|
|
||||||
ue_add_malus_module(ue["ue_id"], titre=titre)
|
|
||||||
|
|
||||||
if redirect:
|
if redirect:
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
@ -872,46 +864,58 @@ def formation_add_malus_modules(formation_id, titre=None, redirect=True):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def ue_add_malus_module(ue_id, titre=None, code=None):
|
def ue_add_malus_module(ue: UniteEns, titre=None, code=None) -> int:
|
||||||
"""Add a malus module in this ue"""
|
"""Add a malus module in this ue.
|
||||||
from app.scodoc import sco_edit_ue
|
If already exists, do nothing.
|
||||||
|
Returns id of malus module.
|
||||||
|
"""
|
||||||
|
modules_malus = [m for m in ue.modules if m.module_type == scu.ModuleType.MALUS]
|
||||||
|
if len(modules_malus) > 0:
|
||||||
|
return modules_malus[0].id # déjà existant
|
||||||
|
|
||||||
ue = sco_edit_ue.ue_list(args={"ue_id": ue_id})[0]
|
titre = titre or ""
|
||||||
|
code = code or f"MALUS{ue.numero}"
|
||||||
if titre is None:
|
|
||||||
titre = ""
|
|
||||||
if code is None:
|
|
||||||
code = "MALUS%d" % ue["numero"]
|
|
||||||
|
|
||||||
# Tout module doit avoir un semestre_id (indice 1, 2, ...)
|
# Tout module doit avoir un semestre_id (indice 1, 2, ...)
|
||||||
semestre_ids = sco_edit_ue.ue_list_semestre_ids(ue)
|
if ue.semestre_idx is None:
|
||||||
if semestre_ids:
|
semestre_ids = sorted(list(set([m.semestre_id for m in ue.modules])))
|
||||||
semestre_id = semestre_ids[0]
|
if len(semestre_ids) > 0:
|
||||||
|
semestre_id = semestre_ids[0]
|
||||||
|
else:
|
||||||
|
# c'est ennuyeux: dans ce cas, on pourrait demander à indiquer explicitement
|
||||||
|
# le semestre ? ou affecter le malus au semestre 1 ???
|
||||||
|
raise ScoValueError(
|
||||||
|
"Impossible d'ajouter un malus s'il n'y a pas d'autres modules"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
# c'est ennuyeux: dans ce cas, on pourrait demander à indiquer explicitement
|
semestre_id = ue.semestre_idx
|
||||||
# le semestre ? ou affecter le malus au semestre 1 ???
|
|
||||||
raise ScoValueError(
|
|
||||||
"Impossible d'ajouter un malus s'il n'y a pas d'autres modules"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Matiere pour placer le module malus
|
# Matiere pour placer le module malus
|
||||||
Matlist = sco_edit_matiere.matiere_list(args={"ue_id": ue_id})
|
titre_matiere_malus = "Malus"
|
||||||
numero = max([mat["numero"] for mat in Matlist]) + 10
|
|
||||||
matiere_id = sco_edit_matiere.do_matiere_create(
|
|
||||||
{"ue_id": ue_id, "titre": "Malus", "numero": numero}
|
|
||||||
)
|
|
||||||
|
|
||||||
module_id = do_module_create(
|
matieres_malus = [mat for mat in ue.matieres if mat.titre == titre_matiere_malus]
|
||||||
{
|
if len(matieres_malus) > 0:
|
||||||
"titre": titre,
|
# matière Malus déjà existante, l'utilise
|
||||||
"code": code,
|
matiere = matieres_malus[0]
|
||||||
"coefficient": 0.0, # unused
|
else:
|
||||||
"ue_id": ue_id,
|
if ue.matieres.count() > 0:
|
||||||
"matiere_id": matiere_id,
|
numero = max([mat.numero for mat in ue.matieres]) + 10
|
||||||
"formation_id": ue["formation_id"],
|
else:
|
||||||
"semestre_id": semestre_id,
|
numero = 0
|
||||||
"module_type": scu.ModuleType.MALUS,
|
matiere = Matiere(ue_id=ue.id, titre=titre_matiere_malus, numero=numero)
|
||||||
},
|
db.session.add(matiere)
|
||||||
)
|
|
||||||
|
|
||||||
return module_id
|
module = Module(
|
||||||
|
titre=titre,
|
||||||
|
code=code,
|
||||||
|
coefficient=0.0,
|
||||||
|
ue=ue,
|
||||||
|
matiere=matiere,
|
||||||
|
formation=ue.formation,
|
||||||
|
semestre_id=semestre_id,
|
||||||
|
module_type=scu.ModuleType.MALUS,
|
||||||
|
)
|
||||||
|
db.session.add(module)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
return module.id
|
||||||
|
Loading…
Reference in New Issue
Block a user