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:
|
def can_change_groups(self, user: User = None) -> bool:
|
||||||
"""Vrai si l'utilisateur (par def. current) peut changer les groupes dans
|
"""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:
|
if not self.etat:
|
||||||
return False # semestre verrouillé
|
return False # semestre verrouillé
|
||||||
|
@ -282,18 +282,18 @@ class GroupDescr(db.Model):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_name(
|
def set_name(self, group_name: str, dest_url: str = None):
|
||||||
self, group_name: str, edt_id: str | bool = False, dest_url: str = None
|
|
||||||
):
|
|
||||||
"""Set group name, and optionally edt_id.
|
"""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.
|
dest_url is used for error messages.
|
||||||
"""
|
"""
|
||||||
if not self.partition.formsemestre.can_change_groups():
|
if not self.partition.formsemestre.can_change_groups():
|
||||||
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 !")
|
||||||
if self.group_name is None:
|
if self.group_name is None:
|
||||||
raise ValueError("can't set a name to default group")
|
raise ValueError("can't set a name to default group")
|
||||||
|
if not self.partition.groups_editable:
|
||||||
|
raise AccessDenied("Partition non éditable")
|
||||||
if group_name:
|
if group_name:
|
||||||
group_name = group_name.strip()
|
group_name = group_name.strip()
|
||||||
if not group_name:
|
if not group_name:
|
||||||
@ -306,16 +306,22 @@ class GroupDescr(db.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.group_name = group_name
|
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.add(self)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
sco_cache.invalidate_formsemestre(
|
sco_cache.invalidate_formsemestre(
|
||||||
formsemestre_id=self.partition.formsemestre_id
|
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"):
|
def remove_etud(self, etud: "Identite"):
|
||||||
"Enlève l'étudiant de ce groupe s'il en fait partie (ne fait rien sinon)"
|
"Enlève l'étudiant de ce groupe s'il en fait partie (ne fait rien sinon)"
|
||||||
if etud in self.etuds:
|
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):
|
for index, resp in enumerate(formsemestre.responsables):
|
||||||
initvalues[resp_fields[index]] = uid2display.get(resp.id)
|
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
|
# Liste des ID de semestres
|
||||||
if formation.type_parcours is not None:
|
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:
|
if edit:
|
||||||
formtit = f"""
|
formtit = f"""
|
||||||
<p><a class="stdlink" href="{url_for("notes.formsemestre_edit_uecoefs",
|
<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))
|
db.session.get(ApcParcours, int(parcour_id_str))
|
||||||
for parcour_id_str in tf[2]["parcours"]
|
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.add(formsemestre)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
# --- Crée ou met à jour les groupes de parcours BUT
|
# --- Crée ou met à jour les groupes de parcours BUT
|
||||||
formsemestre.setup_parcours_groups()
|
formsemestre.setup_parcours_groups()
|
||||||
# peut être nécessaire dans certains cas:
|
# peut être nécessaire dans certains cas:
|
||||||
|
@ -86,7 +86,10 @@ def group_rename(group_id):
|
|||||||
"size": 12,
|
"size": 12,
|
||||||
"allow_null": False,
|
"allow_null": False,
|
||||||
"validator": lambda val, _: len(val) < GROUPNAME_STR_LEN,
|
"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,
|
"size": 12,
|
||||||
"allow_null": True,
|
"allow_null": True,
|
||||||
"explanation": """optionnel : identifiant du groupe dans le logiciel
|
"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.""",
|
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)
|
return flask.redirect(dest_url)
|
||||||
else:
|
else:
|
||||||
# form submission
|
# 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é")
|
flash("groupe modifié")
|
||||||
return flask.redirect(dest_url)
|
return flask.redirect(dest_url)
|
||||||
|
@ -91,6 +91,10 @@ body:not(.editionActivated) .editing {
|
|||||||
.nonEditable .editing {
|
.nonEditable .editing {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.nonEditable .editing.rename {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.editionActivated #zoneChoix,
|
.editionActivated #zoneChoix,
|
||||||
.editionActivated #zoneGroupes {
|
.editionActivated #zoneGroupes {
|
||||||
|
@ -251,7 +251,7 @@
|
|||||||
div.innerHTML = `
|
div.innerHTML = `
|
||||||
<span class="editing move">||</span>
|
<span class="editing move">||</span>
|
||||||
<span>${groupe.group_name} ${edt_id_str}</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>`;
|
<span class="editing suppr">❌</span>`;
|
||||||
|
|
||||||
div.addEventListener("click", filtre);
|
div.addEventListener("click", filtre);
|
||||||
|
Loading…
Reference in New Issue
Block a user