1
0
forked from ScoDoc/ScoDoc

Liste décisions sur page démission. Closes #499

This commit is contained in:
Emmanuel Viennet 2022-10-01 10:39:46 +02:00
parent 2731a4728b
commit 0c5e338970
7 changed files with 76 additions and 6 deletions

View File

@ -59,7 +59,11 @@ class ApcValidationRCUE(db.Model):
parcour = db.relationship("ApcParcours")
def __repr__(self):
return f"<{self.__class__.__name__} {self.id} {self.etud} {self.ue1}/{self.ue2}:{self.code!r}>"
return f"""<{self.__class__.__name__} {self.id} {self.etud} {
self.ue1}/{self.ue2}:{self.code!r}>"""
def __str__(self):
return f"""décision sur RCUE {self.ue1.acronyme}/{self.ue2.acronyme}: {self.code}"""
def niveau(self) -> ApcNiveau:
"""Le niveau de compétence associé à cet RCUE."""
@ -301,6 +305,9 @@ class ApcValidationAnnee(db.Model):
def __repr__(self):
return f"<{self.__class__.__name__} {self.id} {self.etud} BUT{self.ordre}/{self.annee_scolaire}:{self.code!r}>"
def __str__(self):
return f"""décision sur année BUT{self.ordre} {self.annee_scolaire} : {self.code}"""
def to_dict_bul(self) -> dict:
"dict pour bulletins"
return {

View File

@ -13,7 +13,6 @@ from app import email
from app import log
from app.auth.models import User
from app.models import SHORT_STR_LEN
from app.models.formsemestre import FormSemestre
from app.models.moduleimpls import ModuleImpl
import app.scodoc.sco_utils as scu
from app.scodoc import sco_preferences
@ -170,10 +169,12 @@ class ScolarNews(db.Model):
log(f"news: {news}")
news.notify_by_mail()
def get_news_formsemestre(self) -> FormSemestre:
def get_news_formsemestre(self) -> "FormSemestre":
"""formsemestre concerné par la nouvelle
None si inexistant
"""
from app.models.formsemestre import FormSemestre
formsemestre_id = None
if self.type == self.NEWS_INSCR:
formsemestre_id = self.object

View File

@ -31,9 +31,11 @@ from app.models.groups import GroupDescr, Partition
import app.scodoc.sco_utils as scu
from app.models.but_refcomp import parcours_formsemestre
from app.models.etudiants import Identite
from app.models.formations import Formation
from app.models.modules import Module
from app.models.moduleimpls import ModuleImpl
from app.models.ues import UniteEns
from app.models.validations import ScolarFormSemestreValidation
from app.scodoc import sco_codes_parcours
from app.scodoc import sco_preferences
@ -648,6 +650,46 @@ class FormSemestre(db.Model):
)
db.session.commit()
def etud_validations_description_html(self, etudid: int) -> str:
"""Description textuelle des validations de jury de cet étudiant dans ce semestre"""
from app.models.but_validations import ApcValidationRCUE, ApcValidationAnnee
vals_sem = ScolarFormSemestreValidation.query.filter_by(
etudid=etudid, formsemestre_id=self.id, ue_id=None
).all()
vals_ues = (
ScolarFormSemestreValidation.query.filter_by(
etudid=etudid, formsemestre_id=self.id
)
.join(UniteEns)
.order_by(UniteEns.numero)
.all()
)
# Validations BUT:
vals_rcues = (
ApcValidationRCUE.query.filter_by(etudid=etudid, formsemestre_id=self.id)
.join(UniteEns, ApcValidationRCUE.ue1)
.order_by(UniteEns.numero)
.all()
)
vals_annee = (
ApcValidationAnnee.query.filter_by(
etudid=etudid,
annee_scolaire=self.annee_scolaire(),
)
.join(ApcValidationAnnee.formsemestre)
.join(FormSemestre.formation)
.filter(Formation.formation_code == self.formation.formation_code)
.all()
)
H = []
for vals in (vals_sem, vals_ues, vals_rcues, vals_annee):
if vals:
H.append(
f"""<ul><li>{"</li><li>".join(str(x) for x in vals)}</li></ul>"""
)
return "\n".join(H)
# Association id des utilisateurs responsables (aka directeurs des etudes) du semestre
notes_formsemestre_responsables = db.Table(

View File

@ -53,11 +53,20 @@ class ScolarFormSemestreValidation(db.Model):
)
ue = db.relationship("UniteEns", lazy="select", uselist=False)
formsemestre = db.relationship(
"FormSemestre", lazy="select", uselist=False, foreign_keys=[formsemestre_id]
)
def __repr__(self):
return f"{self.__class__.__name__}({self.formsemestre_id}, {self.etudid}, code={self.code}, ue={self.ue}, moy_ue={self.moy_ue})"
def __str__(self):
if self.ue_id:
return f"""décision sur UE {self.ue.acronyme}: {self.code}"""
return f"""décision sur semestre {self.formsemestre.titre_mois()} du {self.event_date.strftime("%d/%m/%Y")}"""
def to_dict(self) -> dict:
"as a dict"
d = dict(self.__dict__)
d.pop("_sa_instance_state", None)
return d
@ -84,6 +93,7 @@ class ScolarAutorisationInscription(db.Model):
)
def to_dict(self) -> dict:
"as a dict"
d = dict(self.__dict__)
d.pop("_sa_instance_state", None)
return d

View File

@ -2270,11 +2270,11 @@ def formsemestre_validation_but(
return (
"\n".join(H)
+ f"""<div class="warning">Impossible de statuer sur cet étudiant:
il est démissionnaire ou défaillant (voir <a href="{
il est démissionnaire ou défaillant (voir <a class="stdlink" href="{
url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid)
}">sa fiche</a>)
</div>
<div><a href="{url_for(
<div><a class="stdlink" href="{url_for(
"notes.formsemestre_saisie_jury", scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id, selected_etudid=etud.id
)}">retour à la liste</a></div>

View File

@ -1106,6 +1106,7 @@ def _form_dem_of_def(
header = html_sco_header.sco_header(
page_title=f"""{operation_name} de {etud.nomprenom} (du semestre {formsemestre.titre_mois()})"""
)
validations_descr = formsemestre.etud_validations_description_html(etudid)
return f"""
{header}
<h2><font color="#FF0000">{operation_name} de</font> {etud.nomprenom} ({formsemestre.titre_mois()})</h2>
@ -1118,6 +1119,15 @@ def _form_dem_of_def(
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}">
<div class="vertical_spacing_but"><input type="submit" value="Confirmer"></div>
</form>
<div class="rappel_decisions">
{'<p class="warning">Attention: il y a des décisions de jury déjà prises !</p>' if validations_descr else ""}
{validations_descr}
{('<p><a class="stdlink" href="'
+ url_for("notes.formsemestre_validation_but", scodoc_dept=g.scodoc_dept,
formsemestre_id=formsemestre_id,etudid=etudid)
+ '">modifier ces décisions</a></p>') if validations_descr else ""}
</div>
{html_sco_header.sco_footer()}
"""

View File

@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
SCOVERSION = "9.3.48"
SCOVERSION = "9.3.49"
SCONAME = "ScoDoc"