forked from ScoDoc/ScoDoc
Fix: anciens bulletins XML du BUT des démissionnaires
This commit is contained in:
parent
9172282451
commit
68dec8e1f8
@ -68,11 +68,12 @@ def bulletin_but_xml_compat(
|
|||||||
"bulletin_but_xml_compat( formsemestre_id=%s, etudid=%s )"
|
"bulletin_but_xml_compat( formsemestre_id=%s, etudid=%s )"
|
||||||
% (formsemestre_id, etudid)
|
% (formsemestre_id, etudid)
|
||||||
)
|
)
|
||||||
sem = FormSemestre.query.get_or_404(formsemestre_id)
|
formsemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
etud = Identite.query.get_or_404(etudid)
|
etud = Identite.query.get_or_404(etudid)
|
||||||
results = bulletin_but.ResultatsSemestreBUT(sem)
|
results = bulletin_but.ResultatsSemestreBUT(formsemestre)
|
||||||
nb_inscrits = len(results.etuds)
|
nb_inscrits = len(results.etuds)
|
||||||
if (not sem.bul_hide_xml) or force_publishing:
|
etat_inscription = etud.etat_inscription(formsemestre.id)
|
||||||
|
if (not formsemestre.bul_hide_xml) or force_publishing:
|
||||||
published = 1
|
published = 1
|
||||||
else:
|
else:
|
||||||
published = 0
|
published = 0
|
||||||
@ -86,10 +87,10 @@ def bulletin_but_xml_compat(
|
|||||||
"date": docdate,
|
"date": docdate,
|
||||||
"publie": str(published),
|
"publie": str(published),
|
||||||
}
|
}
|
||||||
if sem.etapes:
|
if formsemestre.etapes:
|
||||||
el["etape_apo"] = sem.etapes[0].etape_apo or ""
|
el["etape_apo"] = formsemestre.etapes[0].etape_apo or ""
|
||||||
n = 2
|
n = 2
|
||||||
for et in sem.etapes[1:]:
|
for et in formsemestre.etapes[1:]:
|
||||||
el["etape_apo" + str(n)] = et.etape_apo or ""
|
el["etape_apo" + str(n)] = et.etape_apo or ""
|
||||||
n += 1
|
n += 1
|
||||||
x = Element("bulletinetud", **el)
|
x = Element("bulletinetud", **el)
|
||||||
@ -120,117 +121,121 @@ def bulletin_but_xml_compat(
|
|||||||
return sco_xml.XML_HEADER + ElementTree.tostring(doc).decode(
|
return sco_xml.XML_HEADER + ElementTree.tostring(doc).decode(
|
||||||
scu.SCO_ENCODING
|
scu.SCO_ENCODING
|
||||||
) # stop !
|
) # stop !
|
||||||
# Moyenne générale:
|
|
||||||
doc.append(
|
if etat_inscription == scu.INSCRIT:
|
||||||
Element(
|
# Moyenne générale:
|
||||||
"note",
|
doc.append(
|
||||||
value=scu.fmt_note(results.etud_moy_gen[etud.id]),
|
|
||||||
min=scu.fmt_note(results.etud_moy_gen.min()),
|
|
||||||
max=scu.fmt_note(results.etud_moy_gen.max()),
|
|
||||||
moy=scu.fmt_note(results.etud_moy_gen.mean()), # moyenne des moy. gen.
|
|
||||||
)
|
|
||||||
)
|
|
||||||
rang = 0 # XXX TODO rang de l'étduiant selon la moy gen indicative
|
|
||||||
bonus = 0 # XXX TODO valeur du bonus sport
|
|
||||||
doc.append(Element("rang", value=str(rang), ninscrits=str(nb_inscrits)))
|
|
||||||
# XXX TODO: ajouter "rang_group" : rangs dans les partitions
|
|
||||||
doc.append(Element("note_max", value="20")) # notes toujours sur 20
|
|
||||||
doc.append(Element("bonus_sport_culture", value=str(bonus)))
|
|
||||||
# Liste les UE / modules /evals
|
|
||||||
for ue in results.ues:
|
|
||||||
rang_ue = 0 # XXX TODO rang de l'étudiant dans cette UE
|
|
||||||
nb_inscrits_ue = (
|
|
||||||
nb_inscrits # approx: compliqué de définir le "nb d'inscrit à une UE"
|
|
||||||
)
|
|
||||||
x_ue = Element(
|
|
||||||
"ue",
|
|
||||||
id=str(ue.id),
|
|
||||||
numero=scu.quote_xml_attr(ue.numero),
|
|
||||||
acronyme=scu.quote_xml_attr(ue.acronyme or ""),
|
|
||||||
titre=scu.quote_xml_attr(ue.titre or ""),
|
|
||||||
code_apogee=scu.quote_xml_attr(ue.code_apogee or ""),
|
|
||||||
)
|
|
||||||
doc.append(x_ue)
|
|
||||||
if ue.type != sco_codes_parcours.UE_SPORT:
|
|
||||||
v = results.etud_moy_ue[ue.id][etud.id]
|
|
||||||
else:
|
|
||||||
v = 0 # XXX TODO valeur bonus sport pour cet étudiant
|
|
||||||
x_ue.append(
|
|
||||||
Element(
|
Element(
|
||||||
"note",
|
"note",
|
||||||
value=scu.fmt_note(v),
|
value=scu.fmt_note(results.etud_moy_gen[etud.id]),
|
||||||
min=scu.fmt_note(results.etud_moy_ue[ue.id].min()),
|
min=scu.fmt_note(results.etud_moy_gen.min()),
|
||||||
max=scu.fmt_note(results.etud_moy_ue[ue.id].max()),
|
max=scu.fmt_note(results.etud_moy_gen.max()),
|
||||||
|
moy=scu.fmt_note(results.etud_moy_gen.mean()), # moyenne des moy. gen.
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
x_ue.append(Element("ects", value=str(ue.ects if ue.ects else 0)))
|
rang = 0 # XXX TODO rang de l'étduiant selon la moy gen indicative
|
||||||
x_ue.append(Element("rang", value=str(rang_ue)))
|
bonus = 0 # XXX TODO valeur du bonus sport
|
||||||
x_ue.append(Element("effectif", value=str(nb_inscrits_ue)))
|
doc.append(Element("rang", value=str(rang), ninscrits=str(nb_inscrits)))
|
||||||
# Liste les modules rattachés à cette UE
|
# XXX TODO: ajouter "rang_group" : rangs dans les partitions
|
||||||
for modimpl in results.modimpls:
|
doc.append(Element("note_max", value="20")) # notes toujours sur 20
|
||||||
# Liste ici uniquement les modules rattachés à cette UE
|
doc.append(Element("bonus_sport_culture", value=str(bonus)))
|
||||||
if modimpl.module.ue.id == ue.id:
|
# Liste les UE / modules /evals
|
||||||
mod_moy = scu.fmt_note(results.etud_moy_ue[ue.id][etud.id])
|
for ue in results.ues:
|
||||||
coef = results.modimpl_coefs_df[modimpl.id][ue.id]
|
rang_ue = 0 # XXX TODO rang de l'étudiant dans cette UE
|
||||||
x_mod = Element(
|
nb_inscrits_ue = (
|
||||||
"module",
|
nb_inscrits # approx: compliqué de définir le "nb d'inscrit à une UE"
|
||||||
id=str(modimpl.id),
|
)
|
||||||
code=str(modimpl.module.code or ""),
|
x_ue = Element(
|
||||||
coefficient=str(coef),
|
"ue",
|
||||||
numero=str(modimpl.module.numero or 0),
|
id=str(ue.id),
|
||||||
titre=scu.quote_xml_attr(modimpl.module.titre or ""),
|
numero=scu.quote_xml_attr(ue.numero),
|
||||||
abbrev=scu.quote_xml_attr(modimpl.module.abbrev or ""),
|
acronyme=scu.quote_xml_attr(ue.acronyme or ""),
|
||||||
code_apogee=scu.quote_xml_attr(modimpl.module.code_apogee or ""),
|
titre=scu.quote_xml_attr(ue.titre or ""),
|
||||||
|
code_apogee=scu.quote_xml_attr(ue.code_apogee or ""),
|
||||||
|
)
|
||||||
|
doc.append(x_ue)
|
||||||
|
if ue.type != sco_codes_parcours.UE_SPORT:
|
||||||
|
v = results.etud_moy_ue[ue.id][etud.id]
|
||||||
|
else:
|
||||||
|
v = 0 # XXX TODO valeur bonus sport pour cet étudiant
|
||||||
|
x_ue.append(
|
||||||
|
Element(
|
||||||
|
"note",
|
||||||
|
value=scu.fmt_note(v),
|
||||||
|
min=scu.fmt_note(results.etud_moy_ue[ue.id].min()),
|
||||||
|
max=scu.fmt_note(results.etud_moy_ue[ue.id].max()),
|
||||||
)
|
)
|
||||||
x_ue.append(x_mod)
|
)
|
||||||
x_mod.append(
|
x_ue.append(Element("ects", value=str(ue.ects if ue.ects else 0)))
|
||||||
Element(
|
x_ue.append(Element("rang", value=str(rang_ue)))
|
||||||
"note",
|
x_ue.append(Element("effectif", value=str(nb_inscrits_ue)))
|
||||||
value=mod_moy,
|
# Liste les modules rattachés à cette UE
|
||||||
min=scu.fmt_note(results.etud_moy_ue[ue.id].min()),
|
for modimpl in results.modimpls:
|
||||||
max=scu.fmt_note(results.etud_moy_ue[ue.id].max()),
|
# Liste ici uniquement les modules rattachés à cette UE
|
||||||
moy=scu.fmt_note(results.etud_moy_ue[ue.id].mean()),
|
if modimpl.module.ue.id == ue.id:
|
||||||
|
mod_moy = scu.fmt_note(results.etud_moy_ue[ue.id][etud.id])
|
||||||
|
coef = results.modimpl_coefs_df[modimpl.id][ue.id]
|
||||||
|
x_mod = Element(
|
||||||
|
"module",
|
||||||
|
id=str(modimpl.id),
|
||||||
|
code=str(modimpl.module.code or ""),
|
||||||
|
coefficient=str(coef),
|
||||||
|
numero=str(modimpl.module.numero or 0),
|
||||||
|
titre=scu.quote_xml_attr(modimpl.module.titre or ""),
|
||||||
|
abbrev=scu.quote_xml_attr(modimpl.module.abbrev or ""),
|
||||||
|
code_apogee=scu.quote_xml_attr(
|
||||||
|
modimpl.module.code_apogee or ""
|
||||||
|
),
|
||||||
)
|
)
|
||||||
)
|
x_ue.append(x_mod)
|
||||||
# XXX TODO rangs et effectifs
|
x_mod.append(
|
||||||
# --- notes de chaque eval:
|
Element(
|
||||||
if version != "short":
|
"note",
|
||||||
for e in modimpl.evaluations:
|
value=mod_moy,
|
||||||
if e.visibulletin or version == "long":
|
min=scu.fmt_note(results.etud_moy_ue[ue.id].min()),
|
||||||
x_eval = Element(
|
max=scu.fmt_note(results.etud_moy_ue[ue.id].max()),
|
||||||
"evaluation",
|
moy=scu.fmt_note(results.etud_moy_ue[ue.id].mean()),
|
||||||
jour=e.jour.isoformat() if e.jour else "",
|
)
|
||||||
heure_debut=e.heure_debut.isoformat()
|
)
|
||||||
if e.heure_debut
|
# XXX TODO rangs et effectifs
|
||||||
else "",
|
# --- notes de chaque eval:
|
||||||
heure_fin=e.heure_fin.isoformat()
|
if version != "short":
|
||||||
if e.heure_debut
|
for e in modimpl.evaluations:
|
||||||
else "",
|
if e.visibulletin or version == "long":
|
||||||
coefficient=str(e.coefficient),
|
x_eval = Element(
|
||||||
# pas les poids en XML compat
|
"evaluation",
|
||||||
evaluation_type=str(e.evaluation_type),
|
jour=e.jour.isoformat() if e.jour else "",
|
||||||
description=scu.quote_xml_attr(e.description),
|
heure_debut=e.heure_debut.isoformat()
|
||||||
# notes envoyées sur 20, ceci juste pour garder trace:
|
if e.heure_debut
|
||||||
note_max_origin=str(e.note_max),
|
else "",
|
||||||
)
|
heure_fin=e.heure_fin.isoformat()
|
||||||
x_mod.append(x_eval)
|
if e.heure_debut
|
||||||
x_eval.append(
|
else "",
|
||||||
Element(
|
coefficient=str(e.coefficient),
|
||||||
"note",
|
# pas les poids en XML compat
|
||||||
value=scu.fmt_note(
|
evaluation_type=str(e.evaluation_type),
|
||||||
results.modimpls_evals_notes[e.moduleimpl_id][
|
description=scu.quote_xml_attr(e.description),
|
||||||
e.id
|
# notes envoyées sur 20, ceci juste pour garder trace:
|
||||||
][etud.id],
|
note_max_origin=str(e.note_max),
|
||||||
note_max=e.note_max,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
)
|
x_mod.append(x_eval)
|
||||||
# XXX TODO: Evaluations incomplètes ou futures: XXX
|
x_eval.append(
|
||||||
# XXX TODO UE capitalisee (listee seulement si meilleure que l'UE courante)
|
Element(
|
||||||
|
"note",
|
||||||
|
value=scu.fmt_note(
|
||||||
|
results.modimpls_evals_notes[
|
||||||
|
e.moduleimpl_id
|
||||||
|
][e.id][etud.id],
|
||||||
|
note_max=e.note_max,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# XXX TODO: Evaluations incomplètes ou futures: XXX
|
||||||
|
# XXX TODO UE capitalisee (listee seulement si meilleure que l'UE courante)
|
||||||
|
|
||||||
# --- Absences
|
# --- Absences
|
||||||
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
if sco_preferences.get_preference("bul_show_abs", formsemestre_id):
|
||||||
nbabs, nbabsjust = sem.get_abs_count(etud.id)
|
nbabs, nbabsjust = formsemestre.get_abs_count(etud.id)
|
||||||
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
doc.append(Element("absences", nbabs=str(nbabs), nbabsjust=str(nbabsjust)))
|
||||||
|
|
||||||
# -------- LA SUITE EST COPIEE SANS MODIF DE sco_bulletins_xml.py ---------
|
# -------- LA SUITE EST COPIEE SANS MODIF DE sco_bulletins_xml.py ---------
|
||||||
|
Loading…
Reference in New Issue
Block a user