Ameliore gestion groupes de parcours

This commit is contained in:
Emmanuel Viennet 2022-12-17 09:43:47 -03:00
parent 6d6ea9f94a
commit 5448c63c49
3 changed files with 39 additions and 19 deletions

View File

@ -245,6 +245,15 @@ class FormSemestre(db.Model):
d["etapes_apo_str"] = self.etapes_apo_str() d["etapes_apo_str"] = self.etapes_apo_str()
return d return d
def get_parcours_apc(self) -> list[ApcParcours]:
"""Liste des parcours proposés par ce semestre.
Si aucun n'est coché et qu'il y a un référentiel, tous ceux du référentiel.
"""
return self.parcours or (
self.formation.referentiel_competence
and self.formation.referentiel_competence.parcours
)
def query_ues(self, with_sport=False) -> flask_sqlalchemy.BaseQuery: def query_ues(self, with_sport=False) -> flask_sqlalchemy.BaseQuery:
"""UE des modules de ce semestre, triées par numéro. """UE des modules de ce semestre, triées par numéro.
- Formations classiques: les UEs auxquelles appartiennent - Formations classiques: les UEs auxquelles appartiennent
@ -670,8 +679,12 @@ class FormSemestre(db.Model):
db.session.add(partition) db.session.add(partition)
db.session.flush() # pour avoir un id db.session.flush() # pour avoir un id
flash("Partition Parcours créée.") flash("Partition Parcours créée.")
elif partition.groups_editable:
# Il ne faut jamais laisser éditer cette partition de parcours
partition.groups_editable = False
db.session.add(partition)
for parcour in self.parcours: for parcour in self.get_parcours_apc():
if parcour.code: if parcour.code:
group = GroupDescr.query.filter_by( group = GroupDescr.query.filter_by(
partition_id=partition.id, group_name=parcour.code partition_id=partition.id, group_name=parcour.code
@ -680,21 +693,28 @@ class FormSemestre(db.Model):
partition.groups.append(GroupDescr(group_name=parcour.code)) partition.groups.append(GroupDescr(group_name=parcour.code))
db.session.flush() db.session.flush()
# S'il reste des groupes de parcours qui ne sont plus dans le semestre # S'il reste des groupes de parcours qui ne sont plus dans le semestre
# et qui n'ont pas d'inscrits, supprime-les. # - s'ils n'ont pas d'inscrits, supprime-les.
# - s'ils ont des inscrits: avertissement
for group in GroupDescr.query.filter_by(partition_id=partition.id): for group in GroupDescr.query.filter_by(partition_id=partition.id):
if (group.group_name not in (p.code for p in self.parcours)) and ( if group.group_name not in (p.code for p in self.parcours):
len( if (
[ len(
inscr [
for inscr in self.inscriptions inscr
if (inscr.parcour is not None) for inscr in self.inscriptions
and inscr.parcour.code == group.group_name if (inscr.parcour is not None)
] and inscr.parcour.code == group.group_name
) ]
== 0 )
): == 0
flash(f"suppression du groupe de parcours {group.group_name}") ):
db.session.delete(group) flash(f"Suppression du groupe de parcours vide {group.group_name}")
db.session.delete(group)
else:
flash(
f"""Attention: groupe de parcours {group.group_name} non vide:
réaffectez ses étudiants dans des parcours du semestre"""
)
db.session.commit() db.session.commit()

View File

@ -998,10 +998,7 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None
H.append("</td></tr>") H.append("</td></tr>")
if formation.is_apc(): if formation.is_apc():
# Affiche les parcours BUT cochés. Si aucun, tous ceux du référentiel. # Affiche les parcours BUT cochés. Si aucun, tous ceux du référentiel.
sem_parcours = sem.parcours or ( sem_parcours = sem.get_parcours_apc()
formation.referentiel_competence
and formation.referentiel_competence.parcours
)
H.append( H.append(
f""" f"""
<tr><td class="fichetitre2">Parcours: </td> <tr><td class="fichetitre2">Parcours: </td>
@ -1051,6 +1048,8 @@ def formsemestre_status(formsemestre_id=None):
"formsemestre_bulletinetud: formsemestre_id must be an integer !" "formsemestre_bulletinetud: formsemestre_id must be an integer !"
) )
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
# S'assure que les groupes de parcours sont à jour:
formsemestre.setup_parcours_groups()
modimpls = sco_moduleimpl.moduleimpl_withmodule_list( modimpls = sco_moduleimpl.moduleimpl_withmodule_list(
formsemestre_id=formsemestre_id formsemestre_id=formsemestre_id
) )

View File

@ -902,6 +902,7 @@ sco_publish(
@scodoc7func @scodoc7func
def partition_editor(formsemestre_id: int): def partition_editor(formsemestre_id: int):
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
formsemestre.setup_parcours_groups()
H = [ H = [
html_sco_header.sco_header( html_sco_header.sco_header(
cssstyles=["css/partition_editor.css"], cssstyles=["css/partition_editor.css"],