From bdf47d92406a7944ba02ab0d51557ce18f8e351f Mon Sep 17 00:00:00 2001
From: ilona
Date: Mon, 21 Oct 2024 12:35:24 +0200
Subject: [PATCH 1/2] =?UTF-8?q?Fix=20regressions:=20=C3=A9dition=20formati?=
=?UTF-8?q?on.=20+=20am=C3=A9liore=20pr=C3=A9sentation.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/scodoc/gen_tables.py | 4 +-
app/scodoc/sco_edit_apc.py | 51 +++++++++++-----------
app/static/css/gt_table.css | 5 +++
app/static/css/scodoc.css | 25 +++--------
app/templates/pn/form_ues.j2 | 2 +-
app/views/notes.py | 83 ++++++++++++++++++++++--------------
6 files changed, 89 insertions(+), 81 deletions(-)
diff --git a/app/scodoc/gen_tables.py b/app/scodoc/gen_tables.py
index b5ce3e6d..5820d20a 100644
--- a/app/scodoc/gen_tables.py
+++ b/app/scodoc/gen_tables.py
@@ -494,7 +494,7 @@ class GenTable:
caption = self.html_caption or self.caption
if caption or self.base_url:
- H.append('')
+ H.append('
')
if caption:
H.append(caption)
if self.base_url:
@@ -512,7 +512,7 @@ class GenTable:
}">{scu.ICON_PDF}"""
)
H.append("")
- H.append("")
+ H.append("
")
H.append(self.html_next_section)
return "\n".join(H)
diff --git a/app/scodoc/sco_edit_apc.py b/app/scodoc/sco_edit_apc.py
index 8943b234..ab5e2d7e 100644
--- a/app/scodoc/sco_edit_apc.py
+++ b/app/scodoc/sco_edit_apc.py
@@ -71,19 +71,17 @@ def html_edit_formation_apc(
ues_by_sem = {}
ects_by_sem = {}
- for semestre_idx in semestre_ids:
- ues_by_sem[semestre_idx] = formation.ues.filter_by(
- semestre_idx=semestre_idx
- ).order_by(UniteEns.semestre_idx, UniteEns.numero, UniteEns.acronyme)
- ects = [
- ue.ects
- for ue in ues_by_sem[semestre_idx]
- if ue.type != codes_cursus.UE_SPORT
- ]
+ for s_idx in semestre_ids:
+ ues_by_sem[s_idx] = (
+ formation.ues.filter_by(semestre_idx=s_idx)
+ .order_by(UniteEns.semestre_idx, UniteEns.numero, UniteEns.acronyme)
+ .all()
+ )
+ ects = [ue.ects for ue in ues_by_sem[s_idx] if ue.type != codes_cursus.UE_SPORT]
if None in ects:
- ects_by_sem[semestre_idx] = 'manquant'
+ ects_by_sem[s_idx] = 'manquant'
else:
- ects_by_sem[semestre_idx] = f"{sum(ects):g}"
+ ects_by_sem[s_idx] = f"{sum(ects):g}"
arrow_up, arrow_down, arrow_none = sco_groups.get_arrow_icons_tags()
@@ -124,14 +122,14 @@ def html_edit_formation_apc(
ues_by_sem=ues_by_sem,
),
]
- for semestre_idx in semestre_ids:
- ressources_in_sem = ressources.filter_by(semestre_id=semestre_idx)
- saes_in_sem = saes.filter_by(semestre_id=semestre_idx)
- other_modules_in_sem = other_modules.filter_by(semestre_id=semestre_idx)
+ for s_idx in semestre_ids:
+ ressources_in_sem = ressources.filter_by(semestre_id=s_idx)
+ saes_in_sem = saes.filter_by(semestre_id=s_idx)
+ other_modules_in_sem = other_modules.filter_by(semestre_id=s_idx)
matiere_parent = Matiere.query.filter(
Matiere.ue_id == UniteEns.id,
UniteEns.formation_id == formation.id,
- UniteEns.semestre_idx == semestre_idx,
+ UniteEns.semestre_idx == s_idx,
UniteEns.type != codes_cursus.UE_SPORT,
).first()
H += [
@@ -139,7 +137,7 @@ def html_edit_formation_apc(
render_template(
"pn/form_mods.j2",
formation=formation,
- titre=f"Ressources du S{semestre_idx}",
+ titre=f"Ressources du S{s_idx}",
create_element_msg="créer une nouvelle ressource",
# matiere_parent=matiere_parent,
modules=ressources_in_sem,
@@ -148,16 +146,16 @@ def html_edit_formation_apc(
tag_editable=tag_editable,
icons=icons,
scu=scu,
- semestre_id=semestre_idx,
+ semestre_id=s_idx,
)
- if ues_by_sem[semestre_idx].count() > 0
+ if len(ues_by_sem[s_idx]) > 0
else ""
),
(
render_template(
"pn/form_mods.j2",
formation=formation,
- titre=f"Situations d'Apprentissage et d'Évaluation (SAÉs) S{semestre_idx}",
+ titre=f"Situations d'Apprentissage et d'Évaluation (SAÉs) S{s_idx}",
create_element_msg="créer une nouvelle SAÉ",
# matiere_parent=matiere_parent,
modules=saes_in_sem,
@@ -166,16 +164,16 @@ def html_edit_formation_apc(
tag_editable=tag_editable,
icons=icons,
scu=scu,
- semestre_id=semestre_idx,
+ semestre_id=s_idx,
)
- if ues_by_sem[semestre_idx].count() > 0
+ if len(ues_by_sem[s_idx]) > 0
else ""
),
(
render_template(
"pn/form_mods.j2",
formation=formation,
- titre=f"Autres modules (non BUT) du S{semestre_idx}",
+ titre=f"Autres modules (non BUT) du S{s_idx}",
create_element_msg="créer un nouveau module",
modules=other_modules_in_sem,
module_type=ModuleType.STANDARD,
@@ -183,10 +181,11 @@ def html_edit_formation_apc(
tag_editable=tag_editable,
icons=icons,
scu=scu,
- semestre_id=semestre_idx,
+ semestre_id=s_idx,
)
- if ues_by_sem[semestre_idx].count() > 0
- else """créer une UE pour pouvoir ajouter des modules"""
+ if len(ues_by_sem[s_idx]) > 0
+ else """créer une UE pour pouvoir ajouter des
+ modules"""
),
]
diff --git a/app/static/css/gt_table.css b/app/static/css/gt_table.css
index 2e8253e6..0e57dd25 100644
--- a/app/static/css/gt_table.css
+++ b/app/static/css/gt_table.css
@@ -56,4 +56,9 @@ div.dt-container div.dt-search {
div.dt-container div.dt-search input {
margin-left: 0.5em;
+}
+
+div.gt_caption {
+ margin-top: 4px;
+ margin-bottom: 16px;
}
\ No newline at end of file
diff --git a/app/static/css/scodoc.css b/app/static/css/scodoc.css
index 06234400..19fb7645 100644
--- a/app/static/css/scodoc.css
+++ b/app/static/css/scodoc.css
@@ -131,6 +131,11 @@ div.scobox-etud {
background-color: var(--sco-color-background);
}
+
+ul.sco-links li {
+ margin-bottom: 8px;
+}
+
/* customization of multiselect style */
.multiselect-container.dropdown-menu {
background-color: #e9e9e9;
@@ -4091,26 +4096,6 @@ div.scobox.update_warning>div:nth-child(2) {
padding-left: 8ex;
}
-/*
- Titres des tabs:
- .nav-tabs li a {
- font-variant: small-caps;
- font-size: 13pt;
- }
-
- #group-tabs {
- clear: both;
- }
-
- #group-tabs ul {
- display: inline;
- }
-
- #group-tabs ul li {
- display: inline;
- }
-*/
-
/* Page accueil */
#scodoc_attribution p {
font-size: 75%;
diff --git a/app/templates/pn/form_ues.j2 b/app/templates/pn/form_ues.j2
index 255605af..9369b132 100644
--- a/app/templates/pn/form_ues.j2
+++ b/app/templates/pn/form_ues.j2
@@ -118,7 +118,7 @@
{% if editable %}
+
+
+
Une "formation" est un programme pédagogique structuré
+ en UE, matières et modules.
+ Chaque semestre se réfère à une formation.
+ La modification d'une formation affecte tous les semestres qui s'y
+ réfèrent.
+
+
+
+
-
- Référentiels de compétences
-
+
+
Référentiels de compétences
+
+
+ Les formations par compétences de type BUT doivent être associées à un référentiel
+ de compétences définissant leur structure en blocs de compétences.
+ Le référentiel doit être chargé avant la définition de la formation s'y référant.
+
+
+
"""
)
From 1f0a280dcf3bb3e1590115e37410e3a970dbd824 Mon Sep 17 00:00:00 2001
From: ilona
Date: Mon, 21 Oct 2024 13:03:07 +0200
Subject: [PATCH 2/2] =?UTF-8?q?Cr=C3=A9ation=20semestre=20ext=C3=A9rieur:?=
=?UTF-8?q?=20corrige=20et=20modernise.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/scodoc/sco_formsemestre_exterieurs.py | 47 +++++++++++------------
1 file changed, 23 insertions(+), 24 deletions(-)
diff --git a/app/scodoc/sco_formsemestre_exterieurs.py b/app/scodoc/sco_formsemestre_exterieurs.py
index 6ad279ff..da71ee64 100644
--- a/app/scodoc/sco_formsemestre_exterieurs.py
+++ b/app/scodoc/sco_formsemestre_exterieurs.py
@@ -56,34 +56,34 @@ from app.scodoc import sco_formsemestre_validation
from app.scodoc.codes_cursus import UE_SPORT
-def formsemestre_ext_create(etudid, sem_params):
+def formsemestre_ext_create(etud: Identite | None, sem_params: dict) -> FormSemestre:
"""Crée un formsemestre exterieur et y inscrit l'étudiant.
sem_params: dict nécessaire à la création du formsemestre
"""
# Check args
_ = Formation.query.get_or_404(sem_params["formation_id"])
- if etudid:
- _ = Identite.get_etud(etudid)
# Create formsemestre
sem_params["modalite"] = "EXT"
sem_params["etapes"] = None
sem_params["responsables"] = [current_user.id]
- formsemestre_id = sco_formsemestre.do_formsemestre_create(sem_params, silent=True)
+ formsemestre = FormSemestre.create_formsemestre(sem_params, silent=True)
# nota: le semestre est créé vide: pas de modules
# Inscription au semestre
- sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules(
- formsemestre_id,
- etudid,
- method="formsemestre_ext_create",
- )
- return formsemestre_id
+ if etud:
+ sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules(
+ formsemestre.id,
+ etud.id,
+ method="formsemestre_ext_create",
+ )
+ return formsemestre
def formsemestre_ext_create_form(etudid, formsemestre_id):
"""Formulaire création/inscription à un semestre extérieur"""
etud = Identite.get_etud(etudid)
+ formsemestre = FormSemestre.get_formsemestre(formsemestre_id)
H = [
f"""Enregistrement d'une inscription antérieure dans un autre
établissement
@@ -96,27 +96,26 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
Notez que si un semestre extérieur similaire a déjà été créé pour un autre
étudiant, il est préférable d'utiliser la fonction
"
+ scodoc_dept=g.scodoc_dept, etudid=etud.id, only_ext=1) }">
inscrire à un autre semestre"
""",
]
- orig_sem = sco_formsemestre.get_formsemestre(formsemestre_id)
# Ne propose que des semestres de semestre_id strictement inférieur
# au semestre courant
# et seulement si pas inscrit au même semestre_id d'un semestre ordinaire ScoDoc.
# Les autres situations (eg redoublements en changeant d'établissement)
# doivent être gérées par les validations de semestres "antérieurs"
insem = sco_formsemestre_inscriptions.do_formsemestre_inscription_list(
- args={"etudid": etudid, "etat": scu.INSCRIT}
+ args={"etudid": etud.id, "etat": scu.INSCRIT}
)
semlist = [sco_formsemestre.get_formsemestre(i["formsemestre_id"]) for i in insem]
existing_semestre_ids = {s["semestre_id"] for s in semlist}
min_semestre_id = 1
- max_semestre_id = orig_sem["semestre_id"]
+ max_semestre_id = formsemestre.semestre_id
semestre_ids = set(range(min_semestre_id, max_semestre_id)) - existing_semestre_ids
H.append(
f"""L'étudiant est déjà inscrit dans des semestres ScoDoc de rangs:
@@ -203,22 +202,22 @@ def formsemestre_ext_create_form(etudid, formsemestre_id):
"""
)
return render_template("sco_page.j2", content="\n".join(H) + "\n" + tf[1])
- elif tf[0] == -1:
+ if tf[0] == -1:
return flask.redirect(
url_for(
"notes.formsemestre_bulletinetud",
scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,
- etudid=etudid,
+ etudid=etud.id,
)
)
- else:
- # Le semestre extérieur est créé dans la même formation que le semestre courant
- tf[2]["formation_id"] = orig_sem["formation_id"]
- formsemestre_ext_create(etudid, tf[2])
- return flask.redirect(
- url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etudid)
- )
+
+ # Le semestre extérieur est créé dans la même formation que le semestre courant
+ tf[2]["formation_id"] = formsemestre.formation_id
+ formsemestre_ext_create(etud, tf[2])
+ return flask.redirect(
+ url_for("scolar.fiche_etud", scodoc_dept=g.scodoc_dept, etudid=etud.id)
+ )
def formsemestre_ext_edit_ue_validations(formsemestre_id, etudid):