Fix: creation groupe default

This commit is contained in:
Emmanuel Viennet 2022-09-03 10:07:34 +02:00
parent d3fd164768
commit 71a15fed2f
3 changed files with 37 additions and 29 deletions

View File

@ -138,14 +138,15 @@ class GroupDescr(db.Model):
@classmethod @classmethod
def check_name( def check_name(
cls, partition: "Partition", group_name: str, existing=False cls, partition: "Partition", group_name: str, existing=False, default=False
) -> bool: ) -> bool:
"""check if a group named 'group_name' can be created in the given partition. """check if a group named 'group_name' can be created in the given partition.
If existing is True, allow a group_name already existing in the partition. If existing is True, allow a group_name already existing in the partition.
If default, name must be empty and default group must not yet exists.
""" """
if not isinstance(group_name, str): if not isinstance(group_name, str):
return False return False
if not len(group_name.strip()) > 0: if not default and not len(group_name.strip()) > 0:
return False return False
if (not existing) and (group_name in [g.group_name for g in partition.groups]): if (not existing) and (group_name in [g.group_name for g in partition.groups]):
return False return False

View File

@ -83,32 +83,33 @@ def formsemestre_ext_create(etudid, sem_params):
def formsemestre_ext_create_form(etudid, formsemestre_id): def formsemestre_ext_create_form(etudid, formsemestre_id):
"""Formulaire creation/inscription à un semestre extérieur""" """Formulaire création/inscription à un semestre extérieur"""
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
H = [ H = [
html_sco_header.sco_header(), html_sco_header.sco_header(),
"""<h2>Enregistrement d'une inscription antérieure dans un autre établissement</h2> f"""<h2>Enregistrement d'une inscription antérieure dans un autre
établissement</h2>
<p class="help"> <p class="help">
Cette opération créé un semestre extérieur ("ancien") et y inscrit juste cet étudiant. Cette opération crée un semestre extérieur ("ancien") et y inscrit
La décision de jury peut ensuite y être saisie. juste cet étudiant.
La décision de jury peut ensuite y être saisie.
</p> </p>
<p class="help"> <p class="help">
Notez que si un semestre extérieur similaire a déjà été créé pour un autre étudiant, Notez que si un semestre extérieur similaire a déjà été créé pour un autre
il est préférable d'utiliser la fonction étudiant, il est préférable d'utiliser la fonction
"<a href="formsemestre_inscription_with_modules_form?etudid=%s&only_ext=1"> "<a href="{ url_for('notes.formsemestre_inscription_with_modules_form',
scodoc_dept=g.scodoc_dept, etudid=etudid, only_ext=1) }">
inscrire à un autre semestre</a>" inscrire à un autre semestre</a>"
</p> </p>
""" <h3><a href="{ url_for('scolar.ficheEtud',
% (etudid,), scodoc_dept=g.scodoc_dept, etudid=etudid)
"""<h3><a href="%s" class="stdlink">Etudiant %s</a></h3>""" }" class="stdlink">Étudiant {etud["nomprenom"]}</a></h3>
% ( """,
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid),
etud["nomprenom"],
),
] ]
F = html_sco_header.sco_footer() F = html_sco_header.sco_footer()
orig_sem = sco_formsemestre.get_formsemestre(formsemestre_id) orig_sem = sco_formsemestre.get_formsemestre(formsemestre_id)
# Ne propose que des semestres de semestre_id strictement inférieur au semestre courant # Ne propose que des semestres de semestre_id strictement inférieur
# au semestre courant
# et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc. # et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc.
# Les autres situations (eg redoublements en changeant d'établissement) # Les autres situations (eg redoublements en changeant d'établissement)
# doivent être gérées par les validations de semestres "antérieurs" # doivent être gérées par les validations de semestres "antérieurs"
@ -116,15 +117,15 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
args={"etudid": etudid, "etat": "I"} args={"etudid": etudid, "etat": "I"}
) )
semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem] semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem]
existing_semestre_ids = set([s["semestre_id"] for s in semlist]) existing_semestre_ids = {s["semestre_id"] for s in semlist}
min_semestre_id = 1 min_semestre_id = 1
max_semestre_id = orig_sem["semestre_id"] max_semestre_id = orig_sem["semestre_id"]
semestre_ids = set(range(min_semestre_id, max_semestre_id)) - existing_semestre_ids semestre_ids = set(range(min_semestre_id, max_semestre_id)) - existing_semestre_ids
H.append( H.append(
"""<p>L'étudiant est déjà inscrit dans des semestres ScoDoc de rangs: f"""<p>L'étudiant est déjà inscrit dans des semestres ScoDoc de rangs:
%s { sorted(list(existing_semestre_ids)) }
</p>""" </p>
% sorted(list(existing_semestre_ids)) """
) )
if not semestre_ids: if not semestre_ids:
H.append("""<p class="warning">pas de semestres extérieurs possibles</p>""") H.append("""<p class="warning">pas de semestres extérieurs possibles</p>""")
@ -176,7 +177,7 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
( (
"elt_help_ue", "elt_help_ue",
{ {
"title": """Les notes et coefficients des UE "title": """Les notes et coefficients des UE
capitalisées seront saisis ensuite""", capitalisées seront saisis ensuite""",
"input_type": "separator", "input_type": "separator",
}, },
@ -195,15 +196,19 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
) )
if tf[0] == 0: if tf[0] == 0:
H.append( H.append(
"""<p>Ce formulaire sert à enregistrer un semestre antérieur dans la formation """<p>Ce formulaire sert à enregistrer un semestre antérieur dans
effectué dans un autre établissement. la formation effectué dans un autre établissement.
</p>""" </p>"""
) )
return "\n".join(H) + "\n" + tf[1] + F return "\n".join(H) + "\n" + tf[1] + F
elif tf[0] == -1: elif tf[0] == -1:
return flask.redirect( return flask.redirect(
"%s/formsemestre_bulletinetud?formsemestre_id==%s&etudid=%s" url_for(
% (scu.ScoURL(), formsemestre_id, etudid) "notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
etudid=etudid,
)
) )
else: else:
tf[2]["formation_id"] = orig_sem["formation_id"] tf[2]["formation_id"] = orig_sem["formation_id"]

View File

@ -831,7 +831,9 @@ def setGroups(
def create_group(partition_id, group_name="", default=False) -> GroupDescr: def create_group(partition_id, group_name="", default=False) -> GroupDescr:
"""Create a new group in this partition""" """Create a new group in this partition.
If default, create default partition (with no name)
"""
partition = Partition.query.get_or_404(partition_id) partition = Partition.query.get_or_404(partition_id)
if not sco_permissions_check.can_change_groups(partition.formsemestre_id): if not sco_permissions_check.can_change_groups(partition.formsemestre_id):
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
@ -841,7 +843,7 @@ def create_group(partition_id, group_name="", default=False) -> GroupDescr:
if not group_name and not default: if not group_name and not default:
raise ValueError("invalid group name: ()") raise ValueError("invalid group name: ()")
if not GroupDescr.check_name(partition, group_name): if not GroupDescr.check_name(partition, group_name, default=default):
raise ScoValueError(f"Le groupe {group_name} existe déjà dans cette partition") raise ScoValueError(f"Le groupe {group_name} existe déjà dans cette partition")
numeros = [g.numero if g.numero is not None else 0 for g in partition.groups] numeros = [g.numero if g.numero is not None else 0 for g in partition.groups]