From 3325b41690888b7c2386bdc7b86b8e5a7d5968ad Mon Sep 17 00:00:00 2001
From: Emmanuel Viennet Utiliser cette page pour enregistrer une UE validée antérieurement,
+ Utiliser cette page pour enregistrer des UEs validées antérieurement,
dans un semestre hors ScoDoc. Les UE validées dans ScoDoc sont déjà
- automatiquement prises en compte. Cette page n'est utile que pour les étudiants ayant
- suivi un début de cursus dans un autre établissement, ou bien dans un semestre géré
- sans ScoDoc et qui redouble ce semestre
- (pour les semestres précédents gérés avec ScoDoc,
- passer par la page jury normale)).
+ Les UE validées dans ScoDoc sont
+ automatiquement prises en compte.
+ Cette page est surtout utile pour les étudiants ayant
+ suivi un début de cursus dans un autre établissement, ou qui
+ ont suivi une UE à l'étranger ou dans un semestre géré sans ScoDoc.
+ Pour les semestres précédents gérés avec ScoDoc, passer par la page jury normale.
+ Notez que l'UE est validée, avec enregistrement immédiat de la décision et
+ l'attribution des ECTS si le code jury est validant (ADM).
Notez que l'UE est validée (ADM), avec enregistrement immédiat de la décision et
- l'attribution des ECTS. On ne peut valider ici que les UEs du cursus {formation.titre}"""
+
"""
]
for validation in validations:
if validation.formsemestre_id is None:
@@ -1267,17 +1287,20 @@ def _get_etud_ue_cap_html(etud: Identite, formsemestre: FormSemestre) -> str:
origine = f", du semestre {formsemestre.html_link_status()}"
if validation.semestre_id is not None:
origine += f" (S{validation.semestre_id})"
- H.append(
- f"""
-
")
return "\n".join(H)
@@ -1300,7 +1323,7 @@ def do_formsemestre_validate_previous_ue(
ue: UniteEns = UniteEns.query.get_or_404(ue_id)
cnx = ndb.GetDBConnexion()
- if ue_coefficient != None:
+ if ue_coefficient is not None:
sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
cnx, formsemestre.id, ue_id, ue_coefficient
)
diff --git a/app/scodoc/sco_page_etud.py b/app/scodoc/sco_page_etud.py
index e2dbd1cbc..cbb26f08f 100644
--- a/app/scodoc/sco_page_etud.py
+++ b/app/scodoc/sco_page_etud.py
@@ -59,11 +59,13 @@ from app.scodoc.sco_formsemestre_validation import formsemestre_recap_parcours_t
from app.scodoc.sco_permissions import Permission
-def _menu_scolarite(authuser, sem: dict, etudid: int):
+def _menu_scolarite(
+ authuser, formsemestre: FormSemestre, etudid: int, etat_inscription: str
+):
"""HTML pour menu "scolarite" pour un etudiant dans un semestre.
Le contenu du menu depend des droits de l'utilisateur et de l'état de l'étudiant.
"""
- locked = not sem["etat"]
+ locked = not formsemestre.etat
if locked:
lockicon = scu.icontag("lock32_img", title="verrouillé", border="0")
return lockicon # no menu
@@ -71,10 +73,10 @@ def _menu_scolarite(authuser, sem: dict, etudid: int):
Permission.ScoEtudInscrit
) and not authuser.has_permission(Permission.ScoEtudChangeGroups):
return "" # no menu
- ins = sem["ins"]
- args = {"etudid": etudid, "formsemestre_id": ins["formsemestre_id"]}
- if ins["etat"] != "D":
+ args = {"etudid": etudid, "formsemestre_id": formsemestre.id}
+
+ if etat_inscription != scu.DEMISSION:
dem_title = "Démission"
dem_url = "scolar.form_dem"
else:
@@ -82,14 +84,14 @@ def _menu_scolarite(authuser, sem: dict, etudid: int):
dem_url = "scolar.do_cancel_dem"
# Note: seul un etudiant inscrit (I) peut devenir défaillant.
- if ins["etat"] != codes_cursus.DEF:
+ if etat_inscription != codes_cursus.DEF:
def_title = "Déclarer défaillance"
def_url = "scolar.form_def"
- elif ins["etat"] == codes_cursus.DEF:
+ elif etat_inscription == codes_cursus.DEF:
def_title = "Annuler la défaillance"
def_url = "scolar.do_cancel_def"
def_enabled = (
- (ins["etat"] != "D")
+ (etat_inscription != scu.DEMISSION)
and authuser.has_permission(Permission.ScoEtudInscrit)
and not locked
)
@@ -128,6 +130,12 @@ def _menu_scolarite(authuser, sem: dict, etudid: int):
"enabled": authuser.has_permission(Permission.ScoEtudInscrit)
and not locked,
},
+ {
+ "title": "Gérer les validations d'UEs antérieures",
+ "endpoint": "notes.formsemestre_validate_previous_ue",
+ "args": args,
+ "enabled": formsemestre.can_edit_jury(),
+ },
{
"title": "Inscrire à un autre semestre",
"endpoint": "notes.formsemestre_inscription_with_modules_form",
@@ -250,8 +258,8 @@ def ficheEtud(etudid=None):
info["last_formsemestre_id"] = ""
sem_info = {}
for sem in info["sems"]:
+ formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
if sem["ins"]["etat"] != scu.INSCRIT:
- formsemestre: FormSemestre = FormSemestre.query.get(sem["formsemestre_id"])
descr, _ = etud_descr_situation_semestre(
etudid,
formsemestre,
@@ -283,7 +291,7 @@ def ficheEtud(etudid=None):
)
grlink = ", ".join(grlinks)
# infos ajoutées au semestre dans le parcours (groupe, menu)
- menu = _menu_scolarite(authuser, sem, etudid)
+ menu = _menu_scolarite(authuser, formsemestre, etudid, sem["ins"]["etat"])
if menu:
sem_info[sem["formsemestre_id"]] = (
"
"
diff --git a/app/static/css/jury_delete_manual.css b/app/static/css/jury_delete_manual.css
index d41e4f802..eda3bc633 100644
--- a/app/static/css/jury_delete_manual.css
+++ b/app/static/css/jury_delete_manual.css
@@ -7,3 +7,7 @@ div.jury_decisions_list div {
span.parcours {
color:blueviolet;
}
+
+div.ue_list_etud_validations ul.liste_validations li {
+ margin-bottom: 8px;
+}
\ No newline at end of file
diff --git a/app/static/js/validate_previous_ue.js b/app/static/js/validate_previous_ue.js
index 22655f498..c2fe3c888 100644
--- a/app/static/js/validate_previous_ue.js
+++ b/app/static/js/validate_previous_ue.js
@@ -11,27 +11,30 @@ document.addEventListener("DOMContentLoaded", () => {
// Handle button click event here
event.preventDefault();
const etudid = event.target.dataset.etudid;
- const v_id = event.target.dataset.v_id;
+ const validation_id = event.target.dataset.v_id;
const validation_type = event.target.dataset.type;
if (confirm("Supprimer cette validation ?")) {
- fetch(
- `${SCO_URL}/../api/etudiant/${etudid}/jury/${validation_type}/${v_id}/delete`,
- {
- method: "POST",
- }
- ).then((response) => {
- // Handle the response
- if (response.ok) {
- location.reload();
- } else {
- throw new Error("Request failed");
- }
- });
+ delete_validation(etudid, validation_type, validation_id);
}
});
});
});
+async function delete_validation(etudid, validation_type, validation_id) {
+ const response = await fetch(
+ `${SCO_URL}/../api/etudiant/${etudid}/jury/${validation_type}/${validation_id}/delete`,
+ {
+ method: "POST",
+ }
+ );
+ if (response.ok) {
+ location.reload();
+ } else {
+ const data = await response.json();
+ sco_error_message("erreur: " + data.message);
+ }
+}
+
function update_ue_list() {
var ue_id = $("#tf_ue_id")[0].value;
if (ue_id) {
diff --git a/app/templates/jury/erase_decisions_annee_formation.j2 b/app/templates/jury/erase_decisions_annee_formation.j2
index 0c231b532..fc8fd0ce0 100644
--- a/app/templates/jury/erase_decisions_annee_formation.j2
+++ b/app/templates/jury/erase_decisions_annee_formation.j2
@@ -34,6 +34,32 @@ quelle que soit leur origine." + grlink + " " + menu + "