forked from ScoDoc/DocScoDoc
greffe APC sur tableau recap.
This commit is contained in:
parent
fea2078201
commit
f94d40d316
@ -32,6 +32,8 @@ from operator import itemgetter
|
|||||||
|
|
||||||
from flask import g, url_for
|
from flask import g, url_for
|
||||||
|
|
||||||
|
from app.but import bulletin_but
|
||||||
|
from app.models import FormSemestre, Identite
|
||||||
from app.models import ScoDocSiteConfig
|
from app.models import ScoDocSiteConfig
|
||||||
import app.scodoc.sco_utils as scu
|
import app.scodoc.sco_utils as scu
|
||||||
from app.scodoc.sco_utils import ModuleType
|
from app.scodoc.sco_utils import ModuleType
|
||||||
@ -245,6 +247,14 @@ class NotesTable(object):
|
|||||||
self.formation["type_parcours"]
|
self.formation["type_parcours"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# En APC, il faut avoir toutes les UE du semestre
|
||||||
|
# (elles n'ont pas nécessairement un module rattaché):
|
||||||
|
if self.parcours.APC_SAE:
|
||||||
|
formsemestre = FormSemestre.query.get(formsemestre_id)
|
||||||
|
for ue in formsemestre.query_ues():
|
||||||
|
if ue.id not in self.uedict:
|
||||||
|
self.uedict[ue.id] = ue.to_dict()
|
||||||
|
|
||||||
# Decisions jury et UE capitalisées
|
# Decisions jury et UE capitalisées
|
||||||
self.comp_decisions_jury()
|
self.comp_decisions_jury()
|
||||||
self.comp_ue_capitalisees()
|
self.comp_ue_capitalisees()
|
||||||
@ -294,7 +304,7 @@ class NotesTable(object):
|
|||||||
t.append(val)
|
t.append(val)
|
||||||
#
|
#
|
||||||
t.append(etudid)
|
t.append(etudid)
|
||||||
T.append(tuple(t))
|
T.append(t)
|
||||||
# tri par moyennes décroissantes,
|
# tri par moyennes décroissantes,
|
||||||
# en laissant les demissionnaires a la fin, par ordre alphabetique
|
# en laissant les demissionnaires a la fin, par ordre alphabetique
|
||||||
def row_key(x):
|
def row_key(x):
|
||||||
@ -1326,3 +1336,22 @@ class NotesTable(object):
|
|||||||
for e in self.get_evaluations_etats()
|
for e in self.get_evaluations_etats()
|
||||||
if e["moduleimpl_id"] == moduleimpl_id
|
if e["moduleimpl_id"] == moduleimpl_id
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def apc_recompute_moyennes(self):
|
||||||
|
"""recalule les moyennes en APC (BUT)
|
||||||
|
et modifie en place le tableau T.
|
||||||
|
XXX Raccord provisoire avant refonte de cette classe.
|
||||||
|
"""
|
||||||
|
assert self.parcours.APC_SAE
|
||||||
|
formsemestre = FormSemestre.query.get(self.formsemestre_id)
|
||||||
|
results = bulletin_but.ResultatsSemestreBUT(formsemestre)
|
||||||
|
|
||||||
|
# Rappel des épisodes précédents: T est une liste de liste
|
||||||
|
# Colonnes: 0 moy_gen, moy_ue1, ..., moy_ue_n, moy_mod1, ..., moy_mod_n, etudid
|
||||||
|
ues = self.get_ues() # incluant le(s) UE de sport
|
||||||
|
for t in self.T:
|
||||||
|
etudid = t[-1]
|
||||||
|
t[0] = results.etud_moy_gen[etudid]
|
||||||
|
for i, ue in enumerate(ues, start=1):
|
||||||
|
if ue["type"] != UE_SPORT:
|
||||||
|
t[i] = results.etud_moy_ue[ue["id"]][etudid]
|
||||||
|
@ -81,7 +81,7 @@ def make_xml_formsemestre_bulletinetud(
|
|||||||
|
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
if formsemestre.formation.is_apc:
|
if formsemestre.formation.is_apc():
|
||||||
return bulletin_but_xml_compat(
|
return bulletin_but_xml_compat(
|
||||||
formsemestre_id,
|
formsemestre_id,
|
||||||
etudid,
|
etudid,
|
||||||
|
@ -316,15 +316,14 @@ def module_create(matiere_id=None, module_type=None, semestre_id=None):
|
|||||||
raise ValueError("UE invalide")
|
raise ValueError("UE invalide")
|
||||||
tf[2]["semestre_id"] = selected_ue.semestre_idx
|
tf[2]["semestre_id"] = selected_ue.semestre_idx
|
||||||
|
|
||||||
module_id = do_module_create(tf[2])
|
_ = do_module_create(tf[2])
|
||||||
|
|
||||||
mod = Module.query.get(module_id)
|
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"notes.ue_table",
|
"notes.ue_table",
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formation_id=ue.formation_id,
|
formation_id=ue.formation_id,
|
||||||
semestre_idx=mod.semestre_id,
|
semestre_idx=tf[2]["semestre_id"],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -645,17 +644,20 @@ def module_edit(module_id=None):
|
|||||||
else:
|
else:
|
||||||
# l'UE peut changer
|
# l'UE peut changer
|
||||||
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
|
tf[2]["ue_id"], tf[2]["matiere_id"] = tf[2]["ue_matiere_id"].split("!")
|
||||||
|
# En APC, force le semestre égal à celui de l'UE
|
||||||
|
if is_apc:
|
||||||
|
selected_ue = UniteEns.query.get(tf[2]["ue_id"])
|
||||||
|
if selected_ue is None:
|
||||||
|
raise ValueError("UE invalide")
|
||||||
|
tf[2]["semestre_id"] = selected_ue.semestre_idx
|
||||||
# Check unicité code module dans la formation
|
# Check unicité code module dans la formation
|
||||||
do_module_edit(tf[2])
|
do_module_edit(tf[2])
|
||||||
# recharge au cas où le semestre ait changé:
|
|
||||||
mod = Module.query.get(module_id)
|
|
||||||
|
|
||||||
return flask.redirect(
|
return flask.redirect(
|
||||||
url_for(
|
url_for(
|
||||||
"notes.ue_table",
|
"notes.ue_table",
|
||||||
scodoc_dept=g.scodoc_dept,
|
scodoc_dept=g.scodoc_dept,
|
||||||
formation_id=formation_id,
|
formation_id=formation_id,
|
||||||
semestre_idx=mod.semestre_id,
|
semestre_idx=tf[2]["semestre_id"],
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -35,8 +35,11 @@ from xml.etree import ElementTree
|
|||||||
from flask import request
|
from flask import request
|
||||||
from flask import make_response
|
from flask import make_response
|
||||||
|
|
||||||
import app.scodoc.sco_utils as scu
|
|
||||||
from app import log
|
from app import log
|
||||||
|
from app.but import bulletin_but
|
||||||
|
from app.models import FormSemestre, UniteEns, Module, ModuleImpl
|
||||||
|
|
||||||
|
import app.scodoc.sco_utils as scu
|
||||||
from app.scodoc import html_sco_header
|
from app.scodoc import html_sco_header
|
||||||
from app.scodoc import sco_bac
|
from app.scodoc import sco_bac
|
||||||
from app.scodoc import sco_bulletins_json
|
from app.scodoc import sco_bulletins_json
|
||||||
@ -78,6 +81,10 @@ def formsemestre_recapcomplet(
|
|||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0]
|
||||||
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
parcours = sco_codes_parcours.get_parcours_from_code(F["type_parcours"])
|
||||||
|
# Options pour APC BUT: cache les modules par défaut car moyenne n'a pas de sens
|
||||||
|
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
|
if formsemestre.formation.is_apc():
|
||||||
|
hidemodules = True
|
||||||
# traduit du DTML
|
# traduit du DTML
|
||||||
modejury = int(modejury)
|
modejury = int(modejury)
|
||||||
hidemodules = (
|
hidemodules = (
|
||||||
@ -289,6 +296,8 @@ def make_formsemestre_recapcomplet(
|
|||||||
"apb_classement_gr",
|
"apb_classement_gr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
|
# A ré-écrire XXX
|
||||||
sem = sco_formsemestre.do_formsemestre_list(
|
sem = sco_formsemestre.do_formsemestre_list(
|
||||||
args={"formsemestre_id": formsemestre_id}
|
args={"formsemestre_id": formsemestre_id}
|
||||||
)[0]
|
)[0]
|
||||||
@ -298,6 +307,9 @@ def make_formsemestre_recapcomplet(
|
|||||||
modimpls = nt.get_modimpls()
|
modimpls = nt.get_modimpls()
|
||||||
ues = nt.get_ues() # incluant le(s) UE de sport
|
ues = nt.get_ues() # incluant le(s) UE de sport
|
||||||
#
|
#
|
||||||
|
if formsemestre.formation.is_apc():
|
||||||
|
nt.apc_recompute_moyennes()
|
||||||
|
#
|
||||||
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
partitions, partitions_etud_groups = sco_groups.get_formsemestre_groups(
|
||||||
formsemestre_id
|
formsemestre_id
|
||||||
)
|
)
|
||||||
@ -433,7 +445,8 @@ def make_formsemestre_recapcomplet(
|
|||||||
else:
|
else:
|
||||||
l.append(gr_name) # groupe
|
l.append(gr_name) # groupe
|
||||||
|
|
||||||
l.append(fmtnum(scu.fmt_note(t[0], keep_numeric=keep_numeric))) # moy_gen
|
# Moyenne générale
|
||||||
|
l.append(fmtnum(scu.fmt_note(t[0], keep_numeric=keep_numeric)))
|
||||||
# Ajoute rangs dans groupes seulement si CSV ou XLS
|
# Ajoute rangs dans groupes seulement si CSV ou XLS
|
||||||
if format[:3] == "xls" or format == "csv":
|
if format[:3] == "xls" or format == "csv":
|
||||||
rang_gr, _, gr_name = sco_bulletins.get_etud_rangs_groups(
|
rang_gr, _, gr_name = sco_bulletins.get_etud_rangs_groups(
|
||||||
@ -442,9 +455,8 @@ def make_formsemestre_recapcomplet(
|
|||||||
|
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
l.append(rang_gr[partition["partition_id"]])
|
l.append(rang_gr[partition["partition_id"]])
|
||||||
i = 0
|
|
||||||
for ue in ues:
|
for i, ue in enumerate(ues, start=1):
|
||||||
i += 1
|
|
||||||
if ue["type"] != UE_SPORT:
|
if ue["type"] != UE_SPORT:
|
||||||
l.append(
|
l.append(
|
||||||
fmtnum(scu.fmt_note(t[i], keep_numeric=keep_numeric))
|
fmtnum(scu.fmt_note(t[i], keep_numeric=keep_numeric))
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
{% if editable %}
|
{% if editable %}
|
||||||
<a class="discretelink" title="Modifier le module {{mod.code}},
|
<a class="discretelink" title="Modifier le module {{mod.code}},
|
||||||
utilisé par {{mod.modimpls.count()}} sessions"
|
utilisé par {{mod.modimpls.count()}} sessions ({{mod.ue.acronyme}})"
|
||||||
href="{{ url_for('notes.module_edit',
|
href="{{ url_for('notes.module_edit',
|
||||||
scodoc_dept=g.scodoc_dept, module_id=mod.id)
|
scodoc_dept=g.scodoc_dept, module_id=mod.id)
|
||||||
}}">
|
}}">
|
||||||
|
Loading…
Reference in New Issue
Block a user