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
4 changed files with 20 additions and 13 deletions
Showing only changes of commit ba1089e8a9 - Show all commits

View File

@ -307,7 +307,7 @@ class ResultatsSemestreBUT(NotesTableCompat):
return ues_ids return ues_ids
def etud_has_decision(self, etudid) -> bool: def etud_has_decision(self, etudid, include_rcues=True) -> bool:
"""True s'il y a une décision (quelconque) de jury """True s'il y a une décision (quelconque) de jury
émanant de ce formsemestre pour cet étudiant. émanant de ce formsemestre pour cet étudiant.
prend aussi en compte les autorisations de passage. prend aussi en compte les autorisations de passage.
@ -318,9 +318,12 @@ class ResultatsSemestreBUT(NotesTableCompat):
or ApcValidationAnnee.query.filter_by( or ApcValidationAnnee.query.filter_by(
formsemestre_id=self.formsemestre.id, etudid=etudid formsemestre_id=self.formsemestre.id, etudid=etudid
).count() ).count()
or ApcValidationRCUE.query.filter_by( or (
formsemestre_id=self.formsemestre.id, etudid=etudid include_rcues
).count() and ApcValidationRCUE.query.filter_by(
formsemestre_id=self.formsemestre.id, etudid=etudid
).count()
)
) )
def get_validations_annee(self) -> dict[int, ApcValidationAnnee]: def get_validations_annee(self) -> dict[int, ApcValidationAnnee]:

View File

@ -290,9 +290,10 @@ class NotesTableCompat(ResultatsSemestre):
] ]
return etudids return etudids
def etud_has_decision(self, etudid) -> bool: def etud_has_decision(self, etudid, include_rcues=True) -> bool:
"""True s'il y a une décision de jury pour cet étudiant émanant de ce formsemestre. """True s'il y a une décision de jury pour cet étudiant émanant de ce formsemestre.
prend aussi en compte les autorisations de passage. prend aussi en compte les autorisations de passage.
Si include_rcues, prend en compte les validation d'RCUEs en BUT (pas d'effet en classic).
Sous-classée en BUT pour les RCUEs et années. Sous-classée en BUT pour les RCUEs et années.
""" """
return bool( return bool(

View File

@ -7,7 +7,6 @@ from app import db
from app.models import CODE_STR_LEN from app.models import CODE_STR_LEN
from app.models.but_refcomp import ApcNiveau from app.models.but_refcomp import ApcNiveau
from app.models.etudiants import Identite from app.models.etudiants import Identite
from app.models.formations import Formation
from app.models.formsemestre import FormSemestre from app.models.formsemestre import FormSemestre
from app.models.ues import UniteEns from app.models.ues import UniteEns

View File

@ -294,7 +294,7 @@ def do_evaluation_upload_xls():
len(absents)} absents, {nb_suppress} note supprimées) len(absents)} absents, {nb_suppress} note supprimées)
</p>""" </p>"""
if etudids_with_decisions: if etudids_with_decisions:
msg += """<p class="warning">Important: il y avait déjà des décisions de jury msg += """<p class="warning">Important: il y avait déjà des décisions de jury
enregistrées, qui sont peut-être à revoir suite à cette modification !</p> enregistrées, qui sont peut-être à revoir suite à cette modification !</p>
""" """
return 1, msg return 1, msg
@ -642,7 +642,7 @@ def notes_add(
) )
cursor.execute( cursor.execute(
"""DELETE FROM notes_notes """DELETE FROM notes_notes
WHERE etudid = %(etudid)s WHERE etudid = %(etudid)s
AND evaluation_id = %(evaluation_id)s AND evaluation_id = %(evaluation_id)s
""", """,
args, args,
@ -660,7 +660,7 @@ def notes_add(
nb_suppress += 1 nb_suppress += 1
if changed: if changed:
etudids_changed.append(etudid) etudids_changed.append(etudid)
if res.etud_has_decision(etudid): if res.etud_has_decision(etudid, include_rcues=False):
etudids_with_decision.append(etudid) etudids_with_decision.append(etudid)
except Exception as exc: except Exception as exc:
log("*** exception in notes_add") log("*** exception in notes_add")
@ -691,7 +691,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()):
avez l'autorisation d'effectuer cette opération) avez l'autorisation d'effectuer cette opération)
</p> </p>
<p><a class="stdlink" href="{ <p><a class="stdlink" href="{
url_for("notes.moduleimpl_status", scodoc_dept=g.scodoc_dept, url_for("notes.moduleimpl_status", scodoc_dept=g.scodoc_dept,
moduleimpl_id=moduleimpl_id) moduleimpl_id=moduleimpl_id)
}">Continuer</a></p> }">Continuer</a></p>
""" """
@ -740,7 +740,7 @@ def saisie_notes_tableur(evaluation_id, group_ids=()):
</ul> </ul>
</div> </div>
<form> <form>
<input type="hidden" name="evaluation_id" id="formnotes_evaluation_id" <input type="hidden" name="evaluation_id" id="formnotes_evaluation_id"
value="{evaluation_id}"/> value="{evaluation_id}"/>
</form> </form>
""" """
@ -1168,7 +1168,11 @@ def _form_saisie_notes(
return '<div class="ue_warning"><span>Aucun étudiant sélectionné !</span></div>' return '<div class="ue_warning"><span>Aucun étudiant sélectionné !</span></div>'
# Décisions de jury existantes ? # Décisions de jury existantes ?
decisions_jury = {etudid: res.etud_has_decision(etudid) for etudid in etudids} # en BUT on ne considère pas les RCUEs car ils peuvenut avoir été validés depuis
# d'autres semestres (les validations de RCUE n'indiquent pas si elles sont "externes")
decisions_jury = {
etudid: res.etud_has_decision(etudid, include_rcues=False) for etudid in etudids
}
# Nb de décisions de jury (pour les inscrits à l'évaluation): # Nb de décisions de jury (pour les inscrits à l'évaluation):
nb_decisions = sum(decisions_jury.values()) nb_decisions = sum(decisions_jury.values())
@ -1308,7 +1312,7 @@ def _form_saisie_notes(
) )
H.append(tf.getform()) # check and init H.append(tf.getform()) # check and init
H.append( H.append(
f"""<a href="{url_for("notes.moduleimpl_status", scodoc_dept=g.scodoc_dept, f"""<a href="{url_for("notes.moduleimpl_status", scodoc_dept=g.scodoc_dept,
moduleimpl_id=modimpl.id) moduleimpl_id=modimpl.id)
}" class="btn btn-primary">Terminer</a> }" class="btn btn-primary">Terminer</a>
""" """