1
0
Fork 0

Ameliore gestion groupes de parcours

This commit is contained in:
Emmanuel Viennet 2022-12-17 09:43:47 -03:00 committed by iziram
parent e59fce5f6b
commit e995228ca7
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()
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:
"""UE des modules de ce semestre, triées par numéro.
- Formations classiques: les UEs auxquelles appartiennent
@ -670,8 +679,12 @@ class FormSemestre(db.Model):
db.session.add(partition)
db.session.flush() # pour avoir un id
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:
group = GroupDescr.query.filter_by(
partition_id=partition.id, group_name=parcour.code
@ -680,21 +693,28 @@ class FormSemestre(db.Model):
partition.groups.append(GroupDescr(group_name=parcour.code))
db.session.flush()
# 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):
if (group.group_name not in (p.code for p in self.parcours)) and (
len(
[
inscr
for inscr in self.inscriptions
if (inscr.parcour is not None)
and inscr.parcour.code == group.group_name
]
)
== 0
):
flash(f"suppression du groupe de parcours {group.group_name}")
db.session.delete(group)
if group.group_name not in (p.code for p in self.parcours):
if (
len(
[
inscr
for inscr in self.inscriptions
if (inscr.parcour is not None)
and inscr.parcour.code == group.group_name
]
)
== 0
):
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()

View File

@ -998,10 +998,7 @@ def formsemestre_status_head(formsemestre_id: int = None, page_title: str = None
H.append("</td></tr>")
if formation.is_apc():
# Affiche les parcours BUT cochés. Si aucun, tous ceux du référentiel.
sem_parcours = sem.parcours or (
formation.referentiel_competence
and formation.referentiel_competence.parcours
)
sem_parcours = sem.get_parcours_apc()
H.append(
f"""
<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: 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(
formsemestre_id=formsemestre_id
)

View File

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