forked from ScoDoc/ScoDoc
Some code cleaning
This commit is contained in:
parent
1e5ef96f8f
commit
ae0baf8c1a
@ -21,7 +21,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
self.infos est le dict issu de BulletinBUT.bulletin_etud_complet()
|
self.infos est le dict issu de BulletinBUT.bulletin_etud_complet()
|
||||||
"""
|
"""
|
||||||
|
|
||||||
list_in_menu = False # spécialisation du BulletinGeneratorStandard, ne pas présenter à l'utilisateur
|
# spécialisation du BulletinGeneratorStandard, ne pas présenter à l'utilisateur:
|
||||||
|
list_in_menu = False
|
||||||
scale_table_in_page = False # pas de mise à l'échelle pleine page auto
|
scale_table_in_page = False # pas de mise à l'échelle pleine page auto
|
||||||
multi_pages = True # plusieurs pages par bulletins
|
multi_pages = True # plusieurs pages par bulletins
|
||||||
small_fontsize = "8"
|
small_fontsize = "8"
|
||||||
@ -78,7 +79,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
"coef": 2 * cm,
|
"coef": 2 * cm,
|
||||||
}
|
}
|
||||||
title_bg = tuple(x / 255.0 for x in title_bg)
|
title_bg = tuple(x / 255.0 for x in title_bg)
|
||||||
nota_bene = "La moyenne des ressources et SAÉs dans une UE dépend des poids donnés aux évaluations."
|
nota_bene = """La moyenne des ressources et SAÉs dans une UE
|
||||||
|
dépend des poids donnés aux évaluations."""
|
||||||
# elems pour générer table avec gen_table (liste de dicts)
|
# elems pour générer table avec gen_table (liste de dicts)
|
||||||
rows = [
|
rows = [
|
||||||
# Ligne de titres
|
# Ligne de titres
|
||||||
@ -130,7 +132,9 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
t = {
|
t = {
|
||||||
"titre": f"{ue_acronym} - {ue['titre']}",
|
"titre": f"{ue_acronym} - {ue['titre']}",
|
||||||
"moyenne": Paragraph(
|
"moyenne": Paragraph(
|
||||||
f"""<para align=right><b>{moy_ue.get("value", "-") if moy_ue is not None else "-"}</b></para>"""
|
f"""<para align=right><b>{moy_ue.get("value", "-")
|
||||||
|
if moy_ue is not None else "-"
|
||||||
|
}</b></para>"""
|
||||||
),
|
),
|
||||||
"_css_row_class": "note_bold",
|
"_css_row_class": "note_bold",
|
||||||
"_pdf_row_markup": ["b"],
|
"_pdf_row_markup": ["b"],
|
||||||
@ -331,7 +335,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
|
|||||||
col_idx = 1 # 1ere col. poids
|
col_idx = 1 # 1ere col. poids
|
||||||
for ue_acro in ue_acros:
|
for ue_acro in ue_acros:
|
||||||
t[ue_acro] = Paragraph(
|
t[ue_acro] = Paragraph(
|
||||||
f"""<para align=right fontSize={self.small_fontsize}><i>{e["poids"].get(ue_acro, "") or ""}</i></para>"""
|
f"""<para align=right fontSize={self.small_fontsize}><i>{
|
||||||
|
e["poids"].get(ue_acro, "") or ""}</i></para>"""
|
||||||
)
|
)
|
||||||
t["_pdf_style"].append(
|
t["_pdf_style"].append(
|
||||||
(
|
(
|
||||||
|
@ -3,11 +3,9 @@
|
|||||||
|
|
||||||
"""Matrices d'inscription aux modules d'un semestre
|
"""Matrices d'inscription aux modules d'un semestre
|
||||||
"""
|
"""
|
||||||
import numpy as np
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
from app import models
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Le chargement des inscriptions est long: matrice nb_module x nb_etuds
|
# Le chargement des inscriptions est long: matrice nb_module x nb_etuds
|
||||||
|
@ -16,7 +16,7 @@ from app.scodoc import sco_codes_parcours
|
|||||||
|
|
||||||
|
|
||||||
class ValidationsSemestre(ResultatsCache):
|
class ValidationsSemestre(ResultatsCache):
|
||||||
""" """
|
"""Les décisions de jury pour un semestre"""
|
||||||
|
|
||||||
_cached_attrs = (
|
_cached_attrs = (
|
||||||
"decisions_jury",
|
"decisions_jury",
|
||||||
|
@ -19,7 +19,6 @@ from app.models.moduleimpls import ModuleImpl
|
|||||||
from app.models.ues import UniteEns
|
from app.models.ues import UniteEns
|
||||||
from app.scodoc.sco_codes_parcours import UE_SPORT
|
from app.scodoc.sco_codes_parcours import UE_SPORT
|
||||||
from app.scodoc import sco_preferences
|
from app.scodoc import sco_preferences
|
||||||
import app.scodoc.sco_utils as scu
|
|
||||||
|
|
||||||
|
|
||||||
class ResultatsSemestreBUT(NotesTableCompat):
|
class ResultatsSemestreBUT(NotesTableCompat):
|
||||||
|
@ -11,6 +11,14 @@ from app.models import FormSemestre
|
|||||||
|
|
||||||
|
|
||||||
class ResultatsCache:
|
class ResultatsCache:
|
||||||
|
"""Résultats cachés (via redis)
|
||||||
|
L'attribut _cached_attrs donne la liste des noms des attributs à cacher
|
||||||
|
(doivent être sérialisables facilement, se limiter à des types simples)
|
||||||
|
|
||||||
|
store() enregistre les attributs dans le cache, et
|
||||||
|
load_cached() les recharge.
|
||||||
|
"""
|
||||||
|
|
||||||
_cached_attrs = () # virtual
|
_cached_attrs = () # virtual
|
||||||
|
|
||||||
def __init__(self, formsemestre: FormSemestre, cache_class=None):
|
def __init__(self, formsemestre: FormSemestre, cache_class=None):
|
||||||
|
@ -131,8 +131,9 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
Markup(
|
Markup(
|
||||||
f"""Calcul moyenne générale impossible: ECTS des UE manquants !<br>
|
f"""Calcul moyenne générale impossible: ECTS des UE manquants !<br>
|
||||||
(dans {' ,'.join([ue.acronyme for ue in ue_sans_ects])}
|
(dans {' ,'.join([ue.acronyme for ue in ue_sans_ects])}
|
||||||
de la formation: <a href="{url_for("notes.ue_table",
|
de la formation: <a href="{url_for("notes.ue_table",
|
||||||
scodoc_dept=g.scodoc_dept, formation_id=formation.id)}">{formation.get_titre_version()}</a>)
|
scodoc_dept=g.scodoc_dept, formation_id=formation.id)
|
||||||
|
}">{formation.get_titre_version()}</a>)
|
||||||
)
|
)
|
||||||
"""
|
"""
|
||||||
),
|
),
|
||||||
@ -146,7 +147,7 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
"""
|
"""
|
||||||
modimpls_dict = []
|
modimpls_dict = []
|
||||||
for modimpl in self.formsemestre.modimpls_sorted:
|
for modimpl in self.formsemestre.modimpls_sorted:
|
||||||
if ue_id == None or modimpl.module.ue.id == ue_id:
|
if (ue_id is None) or (modimpl.module.ue.id == ue_id):
|
||||||
d = modimpl.to_dict()
|
d = modimpl.to_dict()
|
||||||
# compat ScoDoc < 9.2: ajoute matières
|
# compat ScoDoc < 9.2: ajoute matières
|
||||||
d["mat"] = modimpl.module.matiere.to_dict()
|
d["mat"] = modimpl.module.matiere.to_dict()
|
||||||
@ -285,7 +286,8 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
def get_etud_ects_pot(self, etudid: int) -> dict:
|
def get_etud_ects_pot(self, etudid: int) -> dict:
|
||||||
"""
|
"""
|
||||||
Un dict avec les champs
|
Un dict avec les champs
|
||||||
ects_pot : (float) nb de crédits ECTS qui seraient validés (sous réserve de validation par le jury)
|
ects_pot : (float) nb de crédits ECTS qui seraient validés
|
||||||
|
(sous réserve de validation par le jury)
|
||||||
ects_pot_fond: (float) nb d'ECTS issus d'UE fondamentales (non électives)
|
ects_pot_fond: (float) nb d'ECTS issus d'UE fondamentales (non électives)
|
||||||
|
|
||||||
Ce sont les ECTS des UE au dessus de la barre (10/20 en principe), avant le jury (donc non
|
Ce sont les ECTS des UE au dessus de la barre (10/20 en principe), avant le jury (donc non
|
||||||
@ -307,7 +309,10 @@ class NotesTableCompat(ResultatsSemestre):
|
|||||||
"ects_pot_fond": 0.0, # not implemented (anciennemment pour école ingé)
|
"ects_pot_fond": 0.0, # not implemented (anciennemment pour école ingé)
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_etud_rang(self, etudid: int):
|
def get_etud_rang(self, etudid: int) -> str:
|
||||||
|
"""Le rang (classement) de l'étudiant dans le semestre.
|
||||||
|
Result: "13" ou "12 ex"
|
||||||
|
"""
|
||||||
return self.etud_moy_gen_ranks.get(etudid, 99999)
|
return self.etud_moy_gen_ranks.get(etudid, 99999)
|
||||||
|
|
||||||
def get_etud_rang_group(self, etudid: int, group_id: int):
|
def get_etud_rang_group(self, etudid: int, group_id: int):
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
# -*- coding: UTF-8 -*
|
# -*- coding: UTF-8 -*
|
||||||
"""Decorators for permissions, roles and ScoDoc7 Zope compatibility
|
"""Decorators for permissions, roles and ScoDoc7 Zope compatibility
|
||||||
"""
|
"""
|
||||||
import functools
|
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import inspect
|
import inspect
|
||||||
import types
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import werkzeug
|
import werkzeug
|
||||||
from werkzeug.exceptions import BadRequest
|
|
||||||
import flask
|
import flask
|
||||||
from flask import g, current_app, request
|
from flask import g, current_app, request
|
||||||
from flask import abort, url_for, redirect
|
from flask import abort, url_for, redirect
|
||||||
|
@ -15,6 +15,7 @@ from app.scodoc import sco_preferences
|
|||||||
|
|
||||||
|
|
||||||
def send_async_email(app, msg):
|
def send_async_email(app, msg):
|
||||||
|
"Send an email, async"
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
mail.send(msg)
|
mail.send(msg)
|
||||||
|
|
||||||
|
@ -29,17 +29,13 @@
|
|||||||
Formulaires configuration Exports Apogée (codes)
|
Formulaires configuration Exports Apogée (codes)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from flask import flash, url_for, redirect, render_template
|
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import SubmitField, validators
|
from wtforms import SubmitField, validators
|
||||||
from wtforms.fields.simple import StringField
|
from wtforms.fields.simple import StringField
|
||||||
|
|
||||||
from app import models
|
|
||||||
from app.models import ScoDocSiteConfig
|
|
||||||
from app.models import SHORT_STR_LEN
|
from app.models import SHORT_STR_LEN
|
||||||
|
|
||||||
from app.scodoc import sco_codes_parcours
|
from app.scodoc import sco_codes_parcours
|
||||||
from app.scodoc import sco_utils as scu
|
|
||||||
|
|
||||||
|
|
||||||
def _build_code_field(code):
|
def _build_code_field(code):
|
||||||
@ -61,6 +57,7 @@ def _build_code_field(code):
|
|||||||
|
|
||||||
|
|
||||||
class CodesDecisionsForm(FlaskForm):
|
class CodesDecisionsForm(FlaskForm):
|
||||||
|
"Formulaire code décisions Apogée"
|
||||||
ADC = _build_code_field("ADC")
|
ADC = _build_code_field("ADC")
|
||||||
ADJ = _build_code_field("ADJ")
|
ADJ = _build_code_field("ADJ")
|
||||||
ADM = _build_code_field("ADM")
|
ADM = _build_code_field("ADM")
|
||||||
|
@ -47,8 +47,6 @@ from app.scodoc.sco_config_actions import (
|
|||||||
LogoInsert,
|
LogoInsert,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
from app.scodoc import sco_utils as scu
|
|
||||||
from app.scodoc.sco_logos import find_logo
|
from app.scodoc.sco_logos import find_logo
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
Formulaires création département
|
Formulaires création département
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from flask import flash, url_for, redirect, render_template
|
|
||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import SubmitField, validators
|
from wtforms import SubmitField, validators
|
||||||
from wtforms.fields.simple import StringField, BooleanField
|
from wtforms.fields.simple import StringField, BooleanField
|
||||||
|
@ -51,27 +51,34 @@ from app.pe import pe_avislatex
|
|||||||
def _pe_view_sem_recap_form(formsemestre_id):
|
def _pe_view_sem_recap_form(formsemestre_id):
|
||||||
H = [
|
H = [
|
||||||
html_sco_header.sco_header(page_title="Avis de poursuite d'études"),
|
html_sco_header.sco_header(page_title="Avis de poursuite d'études"),
|
||||||
"""<h2 class="formsemestre">Génération des avis de poursuites d'études</h2>
|
f"""<h2 class="formsemestre">Génération des avis de poursuites d'études</h2>
|
||||||
<p class="help">
|
<p class="help">
|
||||||
Cette fonction génère un ensemble de fichiers permettant d'éditer des avis de poursuites d'études.
|
Cette fonction génère un ensemble de fichiers permettant d'éditer des avis de
|
||||||
|
poursuites d'études.
|
||||||
<br/>
|
<br/>
|
||||||
De nombreux aspects sont paramétrables:
|
De nombreux aspects sont paramétrables:
|
||||||
<a href="https://scodoc.org/AvisPoursuiteEtudes" target="_blank" rel="noopener noreferrer">
|
<a href="https://scodoc.org/AvisPoursuiteEtudes" target="_blank" rel="noopener">
|
||||||
voir la documentation</a>.
|
voir la documentation</a>.
|
||||||
</p>
|
</p>
|
||||||
<form method="post" action="pe_view_sem_recap" id="pe_view_sem_recap_form" enctype="multipart/form-data">
|
<form method="post" action="pe_view_sem_recap" id="pe_view_sem_recap_form"
|
||||||
|
enctype="multipart/form-data">
|
||||||
<div class="pe_template_up">
|
<div class="pe_template_up">
|
||||||
Les templates sont généralement installés sur le serveur ou dans le paramétrage de ScoDoc.<br/>
|
Les templates sont généralement installés sur le serveur ou dans le
|
||||||
Au besoin, vous pouvez spécifier ici votre propre fichier de template (<tt>un_avis.tex</tt>):
|
paramétrage de ScoDoc.
|
||||||
<div class="pe_template_upb">Template: <input type="file" size="30" name="avis_tmpl_file"/></div>
|
<br/>
|
||||||
<div class="pe_template_upb">Pied de page: <input type="file" size="30" name="footer_tmpl_file"/></div>
|
Au besoin, vous pouvez spécifier ici votre propre fichier de template
|
||||||
|
(<tt>un_avis.tex</tt>):
|
||||||
|
<div class="pe_template_upb">Template:
|
||||||
|
<input type="file" size="30" name="avis_tmpl_file"/>
|
||||||
|
</div>
|
||||||
|
<div class="pe_template_upb">Pied de page:
|
||||||
|
<input type="file" size="30" name="footer_tmpl_file"/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input type="submit" value="Générer les documents"/>
|
<input type="submit" value="Générer les documents"/>
|
||||||
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}">
|
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}">
|
||||||
</form>
|
</form>
|
||||||
""".format(
|
""",
|
||||||
formsemestre_id=formsemestre_id
|
|
||||||
),
|
|
||||||
]
|
]
|
||||||
return "\n".join(H) + html_sco_header.sco_footer()
|
return "\n".join(H) + html_sco_header.sco_footer()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user