WIP: misc bonus sport

This commit is contained in:
Emmanuel Viennet 2022-01-09 21:02:07 +01:00
parent 4daa9e8945
commit 4e1811e609
5 changed files with 26 additions and 9 deletions

View File

@ -35,7 +35,7 @@ class ResultatsSemestre:
) )
def __init__(self, formsemestre: FormSemestre): def __init__(self, formsemestre: FormSemestre):
self.formsemestre = formsemestre self.formsemestre: FormSemestre = formsemestre
# BUT ou standard ? (apc == "approche par compétences") # BUT ou standard ? (apc == "approche par compétences")
self.is_apc = formsemestre.formation.is_apc() self.is_apc = formsemestre.formation.is_apc()
# Attributs "virtuels", définis dans les sous-classes # Attributs "virtuels", définis dans les sous-classes
@ -79,10 +79,17 @@ class ResultatsSemestre:
"dict { etudid : indice dans les inscrits }" "dict { etudid : indice dans les inscrits }"
return {e.id: idx for idx, e in enumerate(self.etuds)} return {e.id: idx for idx, e in enumerate(self.etuds)}
@cached_property
def etuds_dict(self):
"dict { etudid : Identite } inscrits au semestre, sans les démissionnaires"
return {etud.id: etud for etud in self.etuds}
@cached_property @cached_property
def ues(self) -> list: def ues(self) -> list:
"Liste des UE du semestre" """Liste des UEs du semestre
return self.formsemestre.query_ues().all() (indices des DataFrames)
"""
return self.formsemestre.query_ues(with_sport=True).all()
@cached_property @cached_property
def modimpls(self): def modimpls(self):
@ -191,9 +198,7 @@ class NotesTableCompat(ResultatsSemestre):
Résultat: liste de dicts { champs UE U stats moyenne UE } Résultat: liste de dicts { champs UE U stats moyenne UE }
""" """
ues = [] ues = []
for ue in self.ues: for ue in self.formsemestre.query_ues(with_sport=not filter_sport):
if filter_sport and ue.type == UE_SPORT:
continue
d = ue.to_dict() d = ue.to_dict()
d.update(StatsMoyenne(self.etud_moy_ue[ue.id]).to_dict()) d.update(StatsMoyenne(self.etud_moy_ue[ue.id]).to_dict())
ues.append(d) ues.append(d)

View File

@ -12,6 +12,7 @@ from app import db
from app import models from app import models
from app.scodoc import notesdb as ndb from app.scodoc import notesdb as ndb
from app.scodoc.sco_bac import Baccalaureat
class Identite(db.Model): class Identite(db.Model):
@ -50,6 +51,8 @@ class Identite(db.Model):
# #
adresses = db.relationship("Adresse", lazy="dynamic", backref="etud") adresses = db.relationship("Adresse", lazy="dynamic", backref="etud")
billets = db.relationship("BilletAbsence", backref="etudiant", lazy="dynamic") billets = db.relationship("BilletAbsence", backref="etudiant", lazy="dynamic")
# one-to-one relation:
admission = db.relationship("Admission", backref="identite", lazy="dynamic")
def __repr__(self): def __repr__(self):
return f"<Etud {self.id} {self.nom} {self.prenom}>" return f"<Etud {self.id} {self.nom} {self.prenom}>"
@ -294,6 +297,10 @@ class Admission(db.Model):
# classement (1..Ngr) par le jury dans le groupe APB # classement (1..Ngr) par le jury dans le groupe APB
apb_classement_gr = db.Column(db.Integer) apb_classement_gr = db.Column(db.Integer)
def get_bac(self) -> Baccalaureat:
"Le bac. utiliser bac.abbrev() pour avoir une chaine de caractères."
return Baccalaureat(self.bac, specialite=self.specialite)
# Suivi scolarité / débouchés # Suivi scolarité / débouchés
class ItemSuivi(db.Model): class ItemSuivi(db.Model):

View File

@ -130,7 +130,7 @@ BACS_SSP = {(t[0], t[1]): t[2:] for t in _BACS}
BACS_S = {t[0]: t[2:] for t in _BACS} BACS_S = {t[0]: t[2:] for t in _BACS}
class Baccalaureat(object): class Baccalaureat:
def __init__(self, bac, specialite=""): def __init__(self, bac, specialite=""):
self.bac = bac self.bac = bac
self.specialite = specialite self.specialite = specialite

View File

@ -295,7 +295,7 @@ div.logo-logo img {
margin-top: -10px; margin-top: -10px;
width: 128px; width: 128px;
padding-right: 5px; padding-right: 5px;
margin-left: -30px; margin-left: -75px;
} }
div.sidebar-bottom { div.sidebar-bottom {
margin-top: 10px; margin-top: 10px;
@ -1671,7 +1671,10 @@ li.notes_ue_list {
margin-top: 9px; margin-top: 9px;
list-style-type: none; list-style-type: none;
} }
span.ue_type_1 {
color: green;
font-weight: bold;
}
span.ue_code { span.ue_code {
font-family: Courier, monospace; font-family: Courier, monospace;
font-weight: normal; font-weight: normal;

View File

@ -29,9 +29,11 @@
scodoc_dept=g.scodoc_dept, ue_id=ue.id) scodoc_dept=g.scodoc_dept, ue_id=ue.id)
}}">{% if editable and not ue.modules.count() %}{{icons.delete|safe}}{% else %}{{icons.delete_disabled|safe}}{% endif %}</a> }}">{% if editable and not ue.modules.count() %}{{icons.delete|safe}}{% else %}{{icons.delete_disabled|safe}}{% endif %}</a>
<span class="ue_type_{{ue.type}}">
<b>{{ue.acronyme}}</b> <a class="discretelink" href="{{ <b>{{ue.acronyme}}</b> <a class="discretelink" href="{{
url_for('notes.ue_infos', scodoc_dept=g.scodoc_dept, ue_id=ue.id)}}" url_for('notes.ue_infos', scodoc_dept=g.scodoc_dept, ue_id=ue.id)}}"
>{{ue.titre}}</a> >{{ue.titre}}</a>
</span>
{% if editable and not ue.is_locked() %} {% if editable and not ue.is_locked() %}
<a class="stdlink" href="{{ url_for('notes.ue_edit', <a class="stdlink" href="{{ url_for('notes.ue_edit',