ré-écriture ue_sharing_code avec SQLAlchemy

This commit is contained in:
Emmanuel Viennet 2021-09-26 11:28:13 +02:00
parent ce31d3148d
commit 18d6324488
4 changed files with 35 additions and 31 deletions

View File

@ -3,16 +3,12 @@
(c) Emmanuel Viennet 1999 - 2021 (voir LICENCE.txt) (c) Emmanuel Viennet 1999 - 2021 (voir LICENCE.txt)
VERSION EXPERIMENTALE - NE PAS DEPLOYER - TESTS EN COURS
Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian11> Installation: voir instructions à jour sur <https://scodoc.org/GuideInstallDebian11>
Documentation utilisateur: <https://scodoc.org> Documentation utilisateur: <https://scodoc.org>
## Version ScoDoc 9 ## Version ScoDoc 9
N'utiliser que pour les développements et tests.
La version ScoDoc 9 est basée sur Flask (au lieu de Zope) et sur La version ScoDoc 9 est basée sur Flask (au lieu de Zope) et sur
**python 3.9+**. **python 3.9+**.
@ -22,13 +18,13 @@ Flask, SQLAlchemy, au lien de Python2/Zope dans les versions précédentes).
### État actuel (27 août 21) ### État actuel (26 sept 21)
- Tests en cours, notamment système d'installation et de migration. - 9.0 reproduit l'ensemble des fonctions de ScoDoc 7 (donc pas de BUT), sauf:
**Fonctionnalités non intégrées:** **Fonctionnalités non intégrées:**
- feuille "placement" (en cours) - génération LaTeX des avis de poursuite d'études
- ancien module "Entreprises" (obsolete) - ancien module "Entreprises" (obsolete)

View File

@ -44,3 +44,6 @@ class Departement(db.Model):
"date_creation": self.date_creation, "date_creation": self.date_creation,
} }
return data return data
def __repr__(self):
return f"<{self.__class__.__name__}(id={self.id}, acronym='{self.acronym}')>"

View File

@ -30,8 +30,12 @@ class NotesFormation(db.Model):
type_parcours = db.Column(db.Integer, default=0, server_default="0") type_parcours = db.Column(db.Integer, default=0, server_default="0")
code_specialite = db.Column(db.String(SHORT_STR_LEN)) code_specialite = db.Column(db.String(SHORT_STR_LEN))
ues = db.relationship("NotesUE", backref="formation", lazy="dynamic")
formsemestres = db.relationship("FormSemestre", lazy="dynamic", backref="formation") formsemestres = db.relationship("FormSemestre", lazy="dynamic", backref="formation")
def __repr__(self):
return f"<{self.__class__.__name__}(id={self.id}, dept_id={self.dept_id}, acronyme='{self.acronyme}')>"
class NotesUE(db.Model): class NotesUE(db.Model):
"""Unité d'Enseignement""" """Unité d'Enseignement"""
@ -61,6 +65,9 @@ class NotesUE(db.Model):
# coef UE, utilise seulement si l'option use_ue_coefs est activée: # coef UE, utilise seulement si l'option use_ue_coefs est activée:
coefficient = db.Column(db.Float) coefficient = db.Column(db.Float)
def __repr__(self):
return f"<{self.__class__.__name__}(id={self.id}, formation_id={self.formation_id}, acronyme='{self.acronyme}')>"
class NotesMatiere(db.Model): class NotesMatiere(db.Model):
"""Matières: regroupe les modules d'une UE """Matières: regroupe les modules d'une UE

View File

@ -32,6 +32,7 @@ import flask
from flask import g, url_for, request from flask import g, url_for, request
from flask_login import current_user from flask_login import current_user
from app.models.formations import NotesUE
import app.scodoc.notesdb as ndb import app.scodoc.notesdb as ndb
import app.scodoc.sco_utils as scu import app.scodoc.sco_utils as scu
from app import log from app import log
@ -851,24 +852,26 @@ def ue_sharing_code(ue_code=None, ue_id=None, hide_ue_id=None):
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0] F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
formation_code = F["formation_code"] formation_code = F["formation_code"]
ue_list_all = do_ue_list(args={"ue_code": ue_code})
if ue_id: if ue_id:
# retire les UE d'autres formations: # UE du même code, code formation et departement
# log('checking ucode %s formation %s' % (ue_code, formation_code)) q_ues = (
ue_list = [] NotesUE.query.filter_by(ue_code=ue_code)
for ue in ue_list_all: .join(NotesUE.formation, aliased=True)
F = sco_formations.formation_list( .filter_by(dept_id=F["dept_id"], formation_code=formation_code)
args={"formation_id": ue["formation_id"]} )
)[0]
if formation_code == F["formation_code"]:
ue_list.append(ue)
else: else:
ue_list = ue_list_all # Toutes les UE du departement avec ce code
q_ues = (
NotesUE.query.filter_by(ue_code=ue_code)
.join(NotesUE.formation, aliased=True)
.filter_by(dept_id=F["dept_id"])
)
if hide_ue_id: # enlève l'ue de depart if hide_ue_id: # enlève l'ue de depart
ue_list = [ue for ue in ue_list if ue["ue_id"] != hide_ue_id] q_ues = q_ues.filter(NotesUE.id != hide_ue_id)
if not ue_list: ues = q_ues.all()
if not ues:
if ue_id: if ue_id:
return """<span class="ue_share">Seule UE avec code %s</span>""" % ue_code return """<span class="ue_share">Seule UE avec code %s</span>""" % ue_code
else: else:
@ -879,18 +882,13 @@ def ue_sharing_code(ue_code=None, ue_id=None, hide_ue_id=None):
else: else:
H.append('<span class="ue_share">UE avec le code %s:</span>' % ue_code) H.append('<span class="ue_share">UE avec le code %s:</span>' % ue_code)
H.append("<ul>") H.append("<ul>")
for ue in ue_list: for ue in ues:
F = sco_formations.formation_list(args={"formation_id": ue["formation_id"]})[0]
H.append( H.append(
'<li>%s (%s) dans <a class="stdlink" href="ue_list?formation_id=%s">%s (%s)</a>, version %s</li>' f"""<li>{ue.acronyme} ({ue.titre}) dans <a class="stdlink"
% ( href="{url_for("notes.ue_list", scodoc_dept=g.scodoc_dept, formation_id=ue.formation.id)}"
ue["acronyme"], >{ue.formation.acronyme} ({ue.formation.titre})</a>, version {ue.formation.version}
ue["titre"], </li>
F["formation_id"], """
F["acronyme"],
F["titre"],
F["version"],
)
) )
H.append("</ul>") H.append("</ul>")
return "\n".join(H) return "\n".join(H)