forked from ScoDoc/ScoDoc
Misc fixes. Suppr. validations BUT.
This commit is contained in:
parent
83ddd2bf03
commit
c9aa55979b
@ -650,7 +650,7 @@ class ResultatsSemestre(ResultatsCache):
|
||||
elif nb_ues_validables < len(ues_sans_bonus):
|
||||
row["_ues_validables_class"] += " moy_inf"
|
||||
row["_ues_validables_order"] = nb_ues_validables # pour tri
|
||||
if mode_jury:
|
||||
if mode_jury and self.validations:
|
||||
dec_sem = self.validations.decisions_jury.get(etudid)
|
||||
jury_code_sem = dec_sem["code"] if dec_sem else ""
|
||||
idx = add_cell(
|
||||
|
@ -43,6 +43,7 @@ class ApcValidationRCUE(db.Model):
|
||||
formsemestre_id = db.Column(
|
||||
db.Integer, db.ForeignKey("notes_formsemestre.id"), index=True, nullable=True
|
||||
)
|
||||
"formsemestre pair du RCUE"
|
||||
# Les deux UE associées à ce niveau:
|
||||
ue1_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), nullable=False)
|
||||
ue2_id = db.Column(db.Integer, db.ForeignKey("notes_ue.id"), nullable=False)
|
||||
|
@ -58,7 +58,6 @@ from app.scodoc import sco_formations
|
||||
from app.scodoc import sco_formsemestre
|
||||
from app.scodoc import sco_groups
|
||||
from app.scodoc import sco_permissions_check
|
||||
from app.scodoc import sco_photos
|
||||
from app.scodoc import sco_preferences
|
||||
from app.scodoc import sco_pvjury
|
||||
from app.scodoc import sco_users
|
||||
@ -66,15 +65,6 @@ import app.scodoc.sco_utils as scu
|
||||
from app.scodoc.sco_utils import ModuleType, fmt_note
|
||||
import app.scodoc.notesdb as ndb
|
||||
|
||||
# ----- CLASSES DE BULLETINS DE NOTES
|
||||
from app.scodoc import sco_bulletins_standard
|
||||
from app.scodoc import sco_bulletins_legacy
|
||||
|
||||
# import sco_bulletins_example # format exemple (à désactiver en production)
|
||||
|
||||
# ... ajouter ici vos modules ...
|
||||
from app.scodoc import sco_bulletins_ucac # format expérimental UCAC Cameroun
|
||||
|
||||
|
||||
def get_formsemestre_bulletin_etud_json(
|
||||
formsemestre: FormSemestre,
|
||||
|
@ -35,13 +35,17 @@ from app.models.etudiants import Identite
|
||||
|
||||
import app.scodoc.notesdb as ndb
|
||||
import app.scodoc.sco_utils as scu
|
||||
from app import log
|
||||
from app import db, log
|
||||
|
||||
from app.comp import res_sem
|
||||
from app.comp.res_compat import NotesTableCompat
|
||||
from app.models import FormSemestre
|
||||
from app.models.notes import etud_has_notes_attente
|
||||
|
||||
from app.models.validations import (
|
||||
ScolarAutorisationInscription,
|
||||
ScolarFormSemestreValidation,
|
||||
)
|
||||
from app.models.but_validations import ApcValidationRCUE, ApcValidationAnnee
|
||||
from app.scodoc.sco_exceptions import ScoValueError
|
||||
from app.scodoc.scolog import logdb
|
||||
from app.scodoc.sco_codes_parcours import *
|
||||
@ -989,28 +993,32 @@ def do_formsemestre_validation_auto(formsemestre_id):
|
||||
|
||||
|
||||
def formsemestre_validation_suppress_etud(formsemestre_id, etudid):
|
||||
"""Suppression des decisions de jury pour un etudiant."""
|
||||
log("formsemestre_validation_suppress_etud( %s, %s)" % (formsemestre_id, etudid))
|
||||
cnx = ndb.GetDBConnexion()
|
||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||
args = {"formsemestre_id": formsemestre_id, "etudid": etudid}
|
||||
try:
|
||||
# -- Validation du semestre et des UEs
|
||||
cursor.execute(
|
||||
"""delete from scolar_formsemestre_validation
|
||||
where etudid = %(etudid)s and formsemestre_id=%(formsemestre_id)s""",
|
||||
args,
|
||||
)
|
||||
# -- Autorisations d'inscription
|
||||
cursor.execute(
|
||||
"""delete from scolar_autorisation_inscription
|
||||
where etudid = %(etudid)s and origin_formsemestre_id=%(formsemestre_id)s""",
|
||||
args,
|
||||
)
|
||||
cnx.commit()
|
||||
except:
|
||||
cnx.rollback()
|
||||
raise
|
||||
"""Suppression des décisions de jury pour un étudiant/formsemestre.
|
||||
Efface toutes les décisions enregistrées concernant ce formsemestre et cet étudiant:
|
||||
code semestre, UEs, autorisations d'inscription
|
||||
"""
|
||||
log(f"formsemestre_validation_suppress_etud( {formsemestre_id}, {etudid})")
|
||||
|
||||
# Validations jury classiques (semestres, UEs, autorisations)
|
||||
for v in ScolarFormSemestreValidation.query.filter_by(
|
||||
etudid=etudid, formsemestre_id=formsemestre_id
|
||||
):
|
||||
db.session.delete(v)
|
||||
for v in ScolarAutorisationInscription.query.filter_by(
|
||||
etudid=etudid, origin_formsemestre_id=formsemestre_id
|
||||
):
|
||||
db.session.delete(v)
|
||||
# Validations jury spécifiques BUT
|
||||
for v in ApcValidationRCUE.query.filter_by(
|
||||
etudid=etudid, formsemestre_id=formsemestre_id
|
||||
):
|
||||
db.session.delete(v)
|
||||
for v in ApcValidationAnnee.query.filter_by(
|
||||
etudid=etudid, formsemestre_id=formsemestre_id
|
||||
):
|
||||
db.session.delete(v)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||
_invalidate_etud_formation_caches(
|
||||
|
@ -258,7 +258,7 @@
|
||||
<li><a href="https://www.enseignementsup-recherche.gouv.fr/fr/bo/21/Special4/ESRS2114777A.htm">Bulletin
|
||||
officiel spécial n°4 du 17 juin 2021</a></li>
|
||||
<li><a
|
||||
href="https://cache.media.enseignementsup-recherche.gouv.fr//file/SPE4-MESRI-17-6-2021/19/4/SP4_ESR_17_6_2021_1413194.pdf">version
|
||||
href="https://cache.media.enseignementsup-recherche.gouv.fr//file/SPE4-MESRI-17-6-2021/19/4/SP4_ESR_17_6_2021_1413194.pdf">Version
|
||||
pdf complète</a></li>
|
||||
</ul>
|
||||
|
||||
|
@ -57,7 +57,7 @@ from app.models.ues import UniteEns
|
||||
from app import api
|
||||
from app import db
|
||||
from app import models
|
||||
from app.models import ScolarNews
|
||||
from app.models import ScolarNews, but_validations
|
||||
from app.auth.models import User
|
||||
from app.but import apc_edit_ue, jury_but_recap
|
||||
from app.decorators import (
|
||||
@ -71,7 +71,7 @@ from app.views import notes_bp as bp
|
||||
|
||||
# ---------------
|
||||
|
||||
from app.scodoc import sco_utils as scu
|
||||
from app.scodoc import sco_bulletins_json, sco_utils as scu
|
||||
from app.scodoc import notesdb as ndb
|
||||
from app import log, send_scodoc_alarm
|
||||
|
||||
@ -2515,51 +2515,68 @@ def do_formsemestre_validation_auto(formsemestre_id):
|
||||
def formsemestre_validation_suppress_etud(
|
||||
formsemestre_id, etudid, dialog_confirmed=False
|
||||
):
|
||||
"""Suppression des decisions de jury pour un etudiant."""
|
||||
"""Suppression des décisions de jury pour un étudiant."""
|
||||
if not sco_permissions_check.can_validate_sem(formsemestre_id):
|
||||
return scu.confirm_dialog(
|
||||
message="<p>Opération non autorisée pour %s</h2>" % current_user,
|
||||
dest_url=scu.ScoURL(),
|
||||
)
|
||||
if not dialog_confirmed:
|
||||
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]
|
||||
etud = Identite.query.get_or_404(etudid)
|
||||
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||
sem = formsemestre.to_dict()
|
||||
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
|
||||
decision_jury = nt.get_etud_decision_sem(etudid)
|
||||
if decision_jury:
|
||||
existing = (
|
||||
"<p>Décision existante: %(code)s du %(event_date)s</p>" % decision_jury
|
||||
if formsemestre.formation.is_apc():
|
||||
next_url = url_for(
|
||||
"scolar.ficheEtud",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
etudid=etudid,
|
||||
)
|
||||
else:
|
||||
existing = ""
|
||||
return scu.confirm_dialog(
|
||||
"""<h2>Confirmer la suppression des décisions du semestre %s (%s - %s) pour %s ?</h2>%s
|
||||
<p>Cette opération est irréversible.
|
||||
</p>
|
||||
next_url = url_for(
|
||||
"notes.formsemestre_validation_etud_form",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
formsemestre_id=formsemestre_id,
|
||||
etudid=etudid,
|
||||
)
|
||||
if not dialog_confirmed:
|
||||
d = sco_bulletins_json.dict_decision_jury(
|
||||
etudid, formsemestre_id, with_decisions=True
|
||||
)
|
||||
d.update(but_validations.dict_decision_jury(etud, formsemestre))
|
||||
|
||||
descr_ues = [f"{u['acronyme']}: {u['code']}" for u in d.get("decision_ue", [])]
|
||||
dec_annee = d.get("decision_annee")
|
||||
if dec_annee:
|
||||
descr_annee = dec_annee.get("code", "-")
|
||||
else:
|
||||
descr_annee = "-"
|
||||
|
||||
existing = f"""
|
||||
<ul>
|
||||
<li>Semestre : {d.get("decision", {"code":"-"})['code'] or "-"}</li>
|
||||
<li>Année BUT: {descr_annee}</li>
|
||||
<li>UEs : {", ".join(descr_ues)}</li>
|
||||
<li>RCUEs: {len(d.get("decision_rcue", []))} décisions</li>
|
||||
</ul>
|
||||
"""
|
||||
% (
|
||||
sem["titre_num"],
|
||||
sem["date_debut"],
|
||||
sem["date_fin"],
|
||||
etud["nomprenom"],
|
||||
existing,
|
||||
),
|
||||
return scu.confirm_dialog(
|
||||
f"""<h2>Confirmer la suppression des décisions du semestre
|
||||
{formsemestre.titre_mois()} pour {etud.nomprenom}
|
||||
</h2>
|
||||
<p>Cette opération est irréversible.</p>
|
||||
<div>
|
||||
{existing}
|
||||
</div>
|
||||
""",
|
||||
OK="Supprimer",
|
||||
dest_url="",
|
||||
cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
|
||||
% (formsemestre_id, etudid),
|
||||
cancel_url=next_url,
|
||||
parameters={"etudid": etudid, "formsemestre_id": formsemestre_id},
|
||||
)
|
||||
|
||||
sco_formsemestre_validation.formsemestre_validation_suppress_etud(
|
||||
formsemestre_id, etudid
|
||||
)
|
||||
return flask.redirect(
|
||||
scu.ScoURL()
|
||||
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
|
||||
% (formsemestre_id, etudid)
|
||||
)
|
||||
flash("Décisions supprimées")
|
||||
return flask.redirect(next_url)
|
||||
|
||||
|
||||
# ------------- PV de JURY et archives
|
||||
|
@ -33,7 +33,7 @@ except NameError:
|
||||
|
||||
load_dotenv(os.path.join(BASEDIR, ".env"))
|
||||
CHK_CERT = bool(int(os.environ.get("CHECK_CERTIFICATE", False)))
|
||||
SCODOC_URL = os.environ["SCODOC_URL"] or "http://localhost:5000"
|
||||
SCODOC_URL = os.environ.get("SCODOC_URL") or "http://localhost:5000"
|
||||
API_URL = SCODOC_URL + "/ScoDoc/api"
|
||||
SCODOC_USER = os.environ["SCODOC_USER"]
|
||||
SCODOC_PASSWORD = os.environ["SCODOC_PASSWORD"]
|
||||
@ -85,13 +85,13 @@ if r.status_code != 200:
|
||||
print(f"{len(r.json())} étudiants courants")
|
||||
|
||||
# Bulletin d'un BUT
|
||||
formsemestre_id = 1052 # A adapter
|
||||
etudid = 16400
|
||||
formsemestre_id = 1063 # A adapter
|
||||
etudid = 16450
|
||||
bul = GET(f"/etudiant/etudid/{etudid}/formsemestre/{formsemestre_id}/bulletin")
|
||||
|
||||
# d'un DUT
|
||||
formsemestre_id = 1028 # A adapter
|
||||
etudid = 14721
|
||||
formsemestre_id = 1062 # A adapter
|
||||
etudid = 16309
|
||||
bul_dut = GET(f"/etudiant/etudid/{etudid}/formsemestre/{formsemestre_id}/bulletin")
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user