forked from ScoDoc/ScoDoc
EDT: édition des edt_id du groupe tous et des groupes de parcours
This commit is contained in:
parent
78d72d2d54
commit
46288cd52d
@ -631,7 +631,7 @@ class FormSemestre(db.Model):
|
||||
|
||||
def can_change_groups(self, user: User = None) -> bool:
|
||||
"""Vrai si l'utilisateur (par def. current) peut changer les groupes dans
|
||||
ce semestre: vérifie permission et verrouillage.
|
||||
ce semestre: vérifie permission et verrouillage (mais pas si la partition est éditable).
|
||||
"""
|
||||
if not self.etat:
|
||||
return False # semestre verrouillé
|
||||
|
@ -282,18 +282,18 @@ class GroupDescr(db.Model):
|
||||
return False
|
||||
return True
|
||||
|
||||
def set_name(
|
||||
self, group_name: str, edt_id: str | bool = False, dest_url: str = None
|
||||
):
|
||||
def set_name(self, group_name: str, dest_url: str = None):
|
||||
"""Set group name, and optionally edt_id.
|
||||
Check permission and invalidate caches. Commit session.
|
||||
Check permission (partition must be groups_editable)
|
||||
and invalidate caches. Commit session.
|
||||
dest_url is used for error messages.
|
||||
"""
|
||||
if not self.partition.formsemestre.can_change_groups():
|
||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||
if self.group_name is None:
|
||||
raise ValueError("can't set a name to default group")
|
||||
|
||||
if not self.partition.groups_editable:
|
||||
raise AccessDenied("Partition non éditable")
|
||||
if group_name:
|
||||
group_name = group_name.strip()
|
||||
if not group_name:
|
||||
@ -306,16 +306,22 @@ class GroupDescr(db.Model):
|
||||
)
|
||||
|
||||
self.group_name = group_name
|
||||
if edt_id is not False:
|
||||
if isinstance(edt_id, str):
|
||||
edt_id = edt_id.strip() or None
|
||||
self.edt_id = edt_id
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
sco_cache.invalidate_formsemestre(
|
||||
formsemestre_id=self.partition.formsemestre_id
|
||||
)
|
||||
|
||||
def set_edt_id(self, edt_id: str):
|
||||
"Set edt_id. Check permission. Commit session."
|
||||
if not self.partition.formsemestre.can_change_groups():
|
||||
raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !")
|
||||
if isinstance(edt_id, str):
|
||||
edt_id = edt_id.strip() or None
|
||||
self.edt_id = edt_id
|
||||
db.session.add(self)
|
||||
db.session.commit()
|
||||
|
||||
def remove_etud(self, etud: "Identite"):
|
||||
"Enlève l'étudiant de ce groupe s'il en fait partie (ne fait rien sinon)"
|
||||
if etud in self.etuds:
|
||||
|
@ -214,6 +214,9 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
|
||||
)
|
||||
for index, resp in enumerate(formsemestre.responsables):
|
||||
initvalues[resp_fields[index]] = uid2display.get(resp.id)
|
||||
group_tous = formsemestre.get_default_group()
|
||||
if group_tous:
|
||||
initvalues["edt_promo_id"] = group_tous.edt_id or ""
|
||||
|
||||
# Liste des ID de semestres
|
||||
if formation.type_parcours is not None:
|
||||
@ -458,6 +461,18 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
|
||||
},
|
||||
)
|
||||
)
|
||||
modform.append(
|
||||
(
|
||||
"edt_promo_id",
|
||||
{
|
||||
"size": 32,
|
||||
"title": "Identifiant EDT promo",
|
||||
"explanation": """optionnel, identifiant du groupe "tous"
|
||||
(promotion complète) dans l'emploi du temps.""",
|
||||
"allow_null": True,
|
||||
},
|
||||
)
|
||||
)
|
||||
if edit:
|
||||
formtit = f"""
|
||||
<p><a class="stdlink" href="{url_for("notes.formsemestre_edit_uecoefs",
|
||||
@ -970,8 +985,15 @@ def do_formsemestre_createwithmodules(edit=False, formsemestre: FormSemestre = N
|
||||
db.session.get(ApcParcours, int(parcour_id_str))
|
||||
for parcour_id_str in tf[2]["parcours"]
|
||||
]
|
||||
# --- Id edt du groupe par défault
|
||||
group_tous = formsemestre.get_default_group()
|
||||
if group_tous:
|
||||
group_tous.edt_id = tf[2]["edt_promo_id"]
|
||||
db.session.add(group_tous)
|
||||
|
||||
db.session.add(formsemestre)
|
||||
db.session.commit()
|
||||
|
||||
# --- Crée ou met à jour les groupes de parcours BUT
|
||||
formsemestre.setup_parcours_groups()
|
||||
# peut être nécessaire dans certains cas:
|
||||
|
@ -86,7 +86,10 @@ def group_rename(group_id):
|
||||
"size": 12,
|
||||
"allow_null": False,
|
||||
"validator": lambda val, _: len(val) < GROUPNAME_STR_LEN,
|
||||
"explanation": "doit être unique dans cette partition",
|
||||
"explanation": "doit être unique dans cette partition"
|
||||
if group.partition.groups_editable
|
||||
else "groupes non modifiables dans cette partition",
|
||||
"enabled": group.partition.groups_editable,
|
||||
},
|
||||
),
|
||||
(
|
||||
@ -97,7 +100,7 @@ def group_rename(group_id):
|
||||
"size": 12,
|
||||
"allow_null": True,
|
||||
"explanation": """optionnel : identifiant du groupe dans le logiciel
|
||||
d'emploi du temps, pour le cas où les noms de gropupes ne seraient pas
|
||||
d'emploi du temps, pour le cas où les noms de groupes ne seraient pas
|
||||
les mêmes dans ScoDoc et dans l'emploi du temps.""",
|
||||
},
|
||||
),
|
||||
@ -123,6 +126,9 @@ def group_rename(group_id):
|
||||
return flask.redirect(dest_url)
|
||||
else:
|
||||
# form submission
|
||||
group.set_name(tf[2]["group_name"], edt_id=tf[2]["edt_id"], dest_url=dest_url)
|
||||
# Si la partition n'est pas editable, on ne peut changer que l'edt_id
|
||||
group.set_edt_id(tf[2]["edt_id"])
|
||||
if group.partition.groups_editable:
|
||||
group.set_name(tf[2]["group_name"], dest_url=dest_url)
|
||||
flash("groupe modifié")
|
||||
return flask.redirect(dest_url)
|
||||
|
@ -91,6 +91,10 @@ body:not(.editionActivated) .editing {
|
||||
.nonEditable .editing {
|
||||
display: none;
|
||||
}
|
||||
.nonEditable .editing.rename {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
|
||||
.editionActivated #zoneChoix,
|
||||
.editionActivated #zoneGroupes {
|
||||
|
@ -251,7 +251,7 @@
|
||||
div.innerHTML = `
|
||||
<span class="editing move">||</span>
|
||||
<span>${groupe.group_name} ${edt_id_str}</span>
|
||||
<span class="editing"><a href="/ScoDoc/{{formsemestre.departement.acronym}}/Scolarite/group_rename?group_id=${groupe.id}">✏️</a></span>
|
||||
<span class="editing rename"><a href="/ScoDoc/{{formsemestre.departement.acronym}}/Scolarite/group_rename?group_id=${groupe.id}">✏️</a></span>
|
||||
<span class="editing suppr">❌</span>`;
|
||||
|
||||
div.addEventListener("click", filtre);
|
||||
|
Loading…
Reference in New Issue
Block a user