Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
5 changed files with 49 additions and 23 deletions
Showing only changes of commit 7712de19a2 - Show all commits

View File

@ -902,6 +902,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
Efface même si étudiant DEM ou DEF. Efface même si étudiant DEM ou DEF.
Si à cheval ou only_one_sem, n'efface que les décisions UE et les Si à cheval ou only_one_sem, n'efface que les décisions UE et les
autorisations de passage du semestre d'origine du deca. autorisations de passage du semestre d'origine du deca.
Dans tous les cas, efface les validations de l'année en cours.
(commite la session.) (commite la session.)
""" """
if only_one_sem or self.a_cheval: if only_one_sem or self.a_cheval:
@ -916,8 +918,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
else: else:
for dec_ue in self.decisions_ues.values(): for dec_ue in self.decisions_ues.values():
dec_ue.erase() dec_ue.erase()
for dec_rcue in self.decisions_rcue_by_niveau.values():
dec_rcue.erase()
if self.formsemestre_impair: if self.formsemestre_impair:
ScolarAutorisationInscription.delete_autorisation_etud( ScolarAutorisationInscription.delete_autorisation_etud(
self.etud.id, self.formsemestre_impair.id self.etud.id, self.formsemestre_impair.id
@ -926,21 +927,27 @@ class DecisionsProposeesAnnee(DecisionsProposees):
ScolarAutorisationInscription.delete_autorisation_etud( ScolarAutorisationInscription.delete_autorisation_etud(
self.etud.id, self.formsemestre_pair.id self.etud.id, self.formsemestre_pair.id
) )
validations = ApcValidationAnnee.query.filter_by( # Efface les RCUEs
for dec_rcue in self.decisions_rcue_by_niveau.values():
dec_rcue.erase()
# Efface les validations concernant l'année BUT
# de ce semestre
validations = (
ApcValidationAnnee.query.filter_by(
etudid=self.etud.id, etudid=self.etud.id,
# XXX efface les validations émise depuis ce semestre
# et pas toutes celles concernant cette l'année...
# (utiliser formation_id pour changer cette politique)
formsemestre_id=self.formsemestre.id,
ordre=self.annee_but, ordre=self.annee_but,
) )
for validation in validations: .join(Formation)
db.session.delete(validation) .filter_by(formation_code=self.formsemestre.formation.formation_code)
Scolog.logdb( )
"jury_but", for validation in validations:
etudid=self.etud.id, db.session.delete(validation)
msg=f"Validation année BUT{self.annee_but}: effacée", Scolog.logdb(
) "jury_but",
etudid=self.etud.id,
msg=f"Validation année BUT{self.annee_but}: effacée",
)
# Efface éventuelles validations de semestre # Efface éventuelles validations de semestre
# (en principe inutilisées en BUT) # (en principe inutilisées en BUT)

View File

@ -79,17 +79,23 @@ class ScolarFormSemestreValidation(db.Model):
def html(self, detail=False) -> str: def html(self, detail=False) -> str:
"Affichage html" "Affichage html"
if self.ue_id is not None: if self.ue_id is not None:
return f"""Validation de l'UE {self.ue.acronyme} de {self.ue.formation.acronyme} return f"""Validation de l'UE <b>{self.ue.acronyme}</b>
{('parcours <span class="parcours">'
+ ", ".join([p.code for p in self.ue.parcours]))
+ "</span>"
if self.ue.parcours else ""}
de {self.ue.formation.acronyme}
{("émise par " + self.formsemestre.html_link_status()) {("émise par " + self.formsemestre.html_link_status())
if self.formsemestre else ""} if self.formsemestre else ""}
:<b>{self.code}</b> : <b>{self.code}</b>
le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")} le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")}
""" """
else: else:
return f"""Validation du semestre S{ return f"""Validation du semestre S{
self.formsemestre.semestre_id if self.formsemestre else "?"} self.formsemestre.semestre_id if self.formsemestre else "?"}
(<b>{self.code}</b> {self.formsemestre.html_link_status() if self.formsemestre else ""}
le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")}) : <b>{self.code}</b>
le {self.event_date.strftime("%d/%m/%Y")} à {self.event_date.strftime("%Hh%M")}
""" """

View File

@ -6,4 +6,8 @@ div.jury_decisions_list div {
div.jury_decisions_list form { div.jury_decisions_list form {
display: inline-block; display: inline-block;
} }
span.parcours {
color:blueviolet;
}

View File

@ -26,9 +26,13 @@
En conséquence, saisir ensuite <b>manuellement les décisions manquantes</b>, En conséquence, saisir ensuite <b>manuellement les décisions manquantes</b>,
notamment sur les UEs en dessous de 10. notamment sur les UEs en dessous de 10.
</p> </p>
<p class="warning"> <div class="warning">
Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure ! <ul>
</p> <li>Ne jamais lancer ce calcul avant que toutes les notes ne soient saisies !
(verrouiller le semestre ensuite)
</li>
<li>Il est nécessaire de relire soigneusement les décisions à l'issue de cette procédure !</li>
</div>
<div class="row"> <div class="row">

View File

@ -2898,7 +2898,12 @@ def formsemestre_jury_but_erase(formsemestre_id: int, etudid: int = None):
) )
+ """ + """
<p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p> <p>Les décisions des années scolaires précédentes ne seront pas modifiées.</p>
<div class="warning">Cette opération est irréversible !</div> <p>Efface aussi toutes les validations concernant l'année BUT de ce semestre,
même si elles ont été acquises ailleurs.
</p>
<div class="warning">Cette opération est irréversible !
A n'utiliser que dans des cas exceptionnels, vérifiez bien tous les étudiants ensuite.
</div>
""", """,
cancel_url=dest_url, cancel_url=dest_url,
) )