Jury BUT: complète logs étudiants. + cosmetic

This commit is contained in:
Emmanuel Viennet 2022-12-24 21:35:18 -03:00 committed by iziram
parent acc1ecf906
commit ec632dd43c
7 changed files with 46 additions and 20 deletions

View File

@ -356,9 +356,9 @@ class DecisionsProposeesAnnee(DecisionsProposees):
dec_ue.compute_codes() dec_ue.compute_codes()
# Reste à attribuer ADM, ADJ, PASD, PAS1NCI, RED, NAR # Reste à attribuer ADM, ADJ, PASD, PAS1NCI, RED, NAR
expl_rcues = ( plural = self.nb_validables > 1
f"{self.nb_validables} niveau validable(s) sur {self.nb_competences}" expl_rcues = f"""{self.nb_validables} niveau{"x" if plural else ""} validable{
) "s" if plural else ""} sur {self.nb_competences}"""
if self.admis: if self.admis:
self.codes = [sco_codes.ADM] + self.codes self.codes = [sco_codes.ADM] + self.codes
self.explanation = expl_rcues self.explanation = expl_rcues
@ -778,6 +778,11 @@ class DecisionsProposeesAnnee(DecisionsProposees):
ordre=self.annee_but, ordre=self.annee_but,
) )
for validation in validations: for validation in validations:
Scolog.logdb(
"jury_but",
etudid=self.etud.id,
msg=f"Validation année BUT{self.annee_but}: effacée",
)
db.session.delete(validation) db.session.delete(validation)
db.session.flush() db.session.flush()
self.invalidate_formsemestre_cache() self.invalidate_formsemestre_cache()
@ -933,7 +938,7 @@ class DecisionsProposeesRCUE(DecisionsProposees):
Scolog.logdb( Scolog.logdb(
method="jury_but", method="jury_but",
etudid=self.etud.id, etudid=self.etud.id,
msg=f"Validation RCUE {repr(self.rcue)}", msg=f"Validation {self.rcue}: {code}",
) )
db.session.add(self.validation) db.session.add(self.validation)
if self.rcue.formsemestre_1 is not None: if self.rcue.formsemestre_1 is not None:
@ -1088,6 +1093,11 @@ class DecisionsProposeesUE(DecisionsProposees):
self.erase() self.erase()
if code is None: if code is None:
self.validation = None self.validation = None
Scolog.logdb(
method="jury_but",
etudid=self.etud.id,
msg=f"Validation UE {self.ue.id} {self.ue.acronyme}: effacée",
)
else: else:
self.validation = ScolarFormSemestreValidation( self.validation = ScolarFormSemestreValidation(
etudid=self.etud.id, etudid=self.etud.id,
@ -1099,7 +1109,7 @@ class DecisionsProposeesUE(DecisionsProposees):
Scolog.logdb( Scolog.logdb(
method="jury_but", method="jury_but",
etudid=self.etud.id, etudid=self.etud.id,
msg=f"Validation UE {self.ue.id}", msg=f"Validation UE {self.ue.id} {self.ue.acronyme}({self.moy_ue}): {code}",
) )
db.session.add(self.validation) db.session.add(self.validation)
log(f"DecisionsProposeesUE: recording {self.validation}") log(f"DecisionsProposeesUE: recording {self.validation}")
@ -1115,6 +1125,11 @@ class DecisionsProposeesUE(DecisionsProposees):
) )
for validation in validations: for validation in validations:
log(f"DecisionsProposeesUE: deleting {validation}") log(f"DecisionsProposeesUE: deleting {validation}")
Scolog.logdb(
method="jury_but",
etudid=self.etud.id,
msg=f"Validation UE {validation.ue.id} {validation.ue.acronyme}: effacée",
)
db.session.delete(validation) db.session.delete(validation)
db.session.flush() db.session.flush()

View File

@ -61,11 +61,12 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
<span>({'non ' if deca.code_valide is None else ''}enregistrée)</span> <span>({'non ' if deca.code_valide is None else ''}enregistrée)</span>
<span>{erase_span}</span> <span>{erase_span}</span>
</div> </div>
<div class="but_explanation">{deca.explanation}</div>
""" """
) )
div_explanation = f"""<div class="but_explanation">{deca.explanation}</div>"""
else: else:
H.append("""<div><em>Pas de décision annuelle (sem. impair).</em></div>""") H.append("""<div><em>Pas de décision annuelle (sem. impair).</em></div>""")
div_explanation = ""
H.append("""</div>""") H.append("""</div>""")
formsemestre_1 = deca.formsemestre_impair formsemestre_1 = deca.formsemestre_impair
@ -80,8 +81,10 @@ def show_etud(deca: DecisionsProposeesAnnee, read_only: bool = True) -> str:
formsemestre_1, formsemestre_2 = formsemestre_2, formsemestre_1 formsemestre_1, formsemestre_2 = formsemestre_2, formsemestre_1
H.append( H.append(
f""" f"""
<div class="titre_niveaux"><b>Niveaux de compétences et unités d'enseignement du BUT{ <div class="titre_niveaux">
deca.annee_but}</b></div> <b>Niveaux de compétences et unités d'enseignement du BUT{deca.annee_but}</b>
</div>
{div_explanation}
<div class="but_annee"> <div class="but_annee">
<div class="titre"></div> <div class="titre"></div>
<div class="titre">{"S" +str(formsemestre_1.semestre_id) <div class="titre">{"S" +str(formsemestre_1.semestre_id)

View File

@ -145,6 +145,11 @@ class RegroupementCoherentUE:
self.ue_1.acronyme}({self.moy_ue_1}) { self.ue_1.acronyme}({self.moy_ue_1}) {
self.ue_2.acronyme}({self.moy_ue_2})>""" self.ue_2.acronyme}({self.moy_ue_2})>"""
def __str__(self) -> str:
return f"""RCUE {
self.ue_1.acronyme}({self.moy_ue_1}) + {
self.ue_2.acronyme}({self.moy_ue_2})"""
def query_validations( def query_validations(
self, self,
) -> flask_sqlalchemy.BaseQuery: # list[ApcValidationRCUE] ) -> flask_sqlalchemy.BaseQuery: # list[ApcValidationRCUE]

View File

@ -116,7 +116,9 @@ class ScolarAutorisationInscription(db.Model):
semestre_id=semestre_id, semestre_id=semestre_id,
) )
db.session.add(autorisation) db.session.add(autorisation)
Scolog.logdb("autorise_etud", etudid=etudid, msg=f"passage vers S{semestre_id}") Scolog.logdb(
"autorise_etud", etudid=etudid, msg=f"Passage vers S{semestre_id}: autorisé"
)
@classmethod @classmethod
def delete_autorisation_etud( def delete_autorisation_etud(
@ -133,7 +135,7 @@ class ScolarAutorisationInscription(db.Model):
Scolog.logdb( Scolog.logdb(
"autorise_etud", "autorise_etud",
etudid=etudid, etudid=etudid,
msg=f"annule passage vers S{autorisation.semestre_id}", msg=f"Passage vers S{autorisation.semestre_id}: effacé",
) )
db.session.flush() db.session.flush()

View File

@ -39,7 +39,7 @@ from app import db, log
from app.comp import res_sem from app.comp import res_sem
from app.comp.res_compat import NotesTableCompat from app.comp.res_compat import NotesTableCompat
from app.models import FormSemestre from app.models import FormSemestre, UniteEns
from app.models.notes import etud_has_notes_attente from app.models.notes import etud_has_notes_attente
from app.models.validations import ( from app.models.validations import (
ScolarAutorisationInscription, ScolarAutorisationInscription,
@ -1171,8 +1171,8 @@ def do_formsemestre_validate_previous_ue(
""" """
formsemestre = FormSemestre.query.get_or_404(formsemestre_id) formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre) nt: NotesTableCompat = res_sem.load_formsemestre_results(formsemestre)
ue: UniteEns = UniteEns.query.get_or_404(ue_id)
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()
if ue_coefficient != None: if ue_coefficient != None:
sco_formsemestre.do_formsemestre_uecoef_edit_or_create( sco_formsemestre.do_formsemestre_uecoef_edit_or_create(
@ -1197,10 +1197,10 @@ def do_formsemestre_validate_previous_ue(
cnx, cnx,
method="formsemestre_validate_previous_ue", method="formsemestre_validate_previous_ue",
etudid=etudid, etudid=etudid,
msg="Validation UE %s" % ue_id, msg=f"Validation UE prec. {ue_id} {ue.acronyme}: {code}",
commit=False, commit=False,
) )
_invalidate_etud_formation_caches(etudid, sem["formation_id"]) _invalidate_etud_formation_caches(etudid, formsemestre.formation_id)
cnx.commit() cnx.commit()

View File

@ -1,18 +1,17 @@
/* Saisie décision de jury BUT */ /* Saisie décision de jury BUT */
.jury_but form { .jury_but {
font-family: Verdana, Geneva, Tahoma, sans-serif; font-family: Verdana, Geneva, Tahoma, sans-serif;
} }
.jury_but .titre_parcours { .jury_but .titre_parcours,
.jury_but .nom_etud {
font-size: 130%; font-size: 130%;
padding-bottom: 12px; padding-bottom: 12px;
} }
.jury_but .nom_etud { .jury_but .nom_etud {
font-size: 100%;
font-weight: bold; font-weight: bold;
padding-bottom: 12px;
} }
.but_annee { .but_annee {
@ -111,7 +110,9 @@ div.but_settings {
.but_explanation { .but_explanation {
color: blueviolet; color: blueviolet;
font-style: italic; font-style: italic;
padding-top: 12px; padding-top: 4px;
padding-bottom: 12px;
;
} }
select:disabled { select:disabled {

View File

@ -2,7 +2,7 @@
<p><em>Ci-dessous la signification de chaque code est expliquée, <p><em>Ci-dessous la signification de chaque code est expliquée,
ainsi que la correspondance avec certains codes préconisés par ainsi que la correspondance avec certains codes préconisés par
l'AMUE et l'ADIUT pour Apogée. l'AMUE et l'ADIUT pour Apogée.
</em> </em><br />
On distingue les codes ScoDoc (utilisés ci-dessus et dans les différentes On distingue les codes ScoDoc (utilisés ci-dessus et dans les différentes
tables générées par ScoDoc) et leur transcription vers Apogée lors des exports tables générées par ScoDoc) et leur transcription vers Apogée lors des exports
(transcription paramétrable par votre administrateur ScoDoc). (transcription paramétrable par votre administrateur ScoDoc).