forked from ScoDoc/ScoDoc
Jury BUT: complète logs étudiants. + cosmetic
This commit is contained in:
parent
acc1ecf906
commit
ec632dd43c
@ -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()
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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]
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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).
|
||||||
|
Loading…
Reference in New Issue
Block a user