forked from ScoDoc/ScoDoc
Ameliore gestion groupes de parcours
This commit is contained in:
parent
e59fce5f6b
commit
e995228ca7
@ -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()
|
||||||
|
|
||||||
|
@ -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
|
||||||
)
|
)
|
||||||
|
@ -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"],
|
||||||
|
Loading…
Reference in New Issue
Block a user