forked from ScoDoc/ScoDoc
Diplome BUT: PV et lettre indiv. #929
This commit is contained in:
parent
6224f37e4a
commit
070c9ea36f
@ -29,7 +29,7 @@ from app.models.but_refcomp import (
|
|||||||
ApcReferentielCompetences,
|
ApcReferentielCompetences,
|
||||||
)
|
)
|
||||||
from app.models.ues import UEParcours
|
from app.models.ues import UEParcours
|
||||||
from app.models.but_validations import ApcValidationRCUE
|
from app.models.but_validations import ApcValidationAnnee, ApcValidationRCUE
|
||||||
from app.models.etudiants import Identite
|
from app.models.etudiants import Identite
|
||||||
from app.models.formations import Formation
|
from app.models.formations import Formation
|
||||||
from app.models.formsemestre import FormSemestre
|
from app.models.formsemestre import FormSemestre
|
||||||
@ -42,7 +42,7 @@ from app.scodoc import sco_cursus_dut
|
|||||||
|
|
||||||
|
|
||||||
class SituationEtudCursusBUT(sco_cursus_dut.SituationEtudCursusClassic):
|
class SituationEtudCursusBUT(sco_cursus_dut.SituationEtudCursusClassic):
|
||||||
"""Pour compat ScoDoc 7: à revoir pour le BUT"""
|
"""Pour compat ScoDoc 7"""
|
||||||
|
|
||||||
def __init__(self, etud: Identite, formsemestre_id: int, res: ResultatsSemestreBUT):
|
def __init__(self, etud: Identite, formsemestre_id: int, res: ResultatsSemestreBUT):
|
||||||
super().__init__(etud, formsemestre_id, res)
|
super().__init__(etud, formsemestre_id, res)
|
||||||
@ -54,8 +54,16 @@ class SituationEtudCursusBUT(sco_cursus_dut.SituationEtudCursusClassic):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def parcours_validated(self):
|
def parcours_validated(self):
|
||||||
"True si le parcours est validé"
|
"True si le parcours (ici diplôme BUT) est validé"
|
||||||
return False # XXX TODO
|
# Si année 3 validée, ok
|
||||||
|
return any(
|
||||||
|
sco_codes.code_annee_validant(v.code)
|
||||||
|
for v in ApcValidationAnnee.query.filter_by(
|
||||||
|
etudid=self.etud.id,
|
||||||
|
ordre=3,
|
||||||
|
referentiel_competence_id=self.cur_sem.formation.referentiel_competence_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class EtudCursusBUT:
|
class EtudCursusBUT:
|
||||||
@ -287,81 +295,81 @@ class FormSemestreCursusBUT:
|
|||||||
)
|
)
|
||||||
return niveaux_by_annee
|
return niveaux_by_annee
|
||||||
|
|
||||||
def get_etud_validation_par_competence_et_annee(self, etud: Identite):
|
# def get_etud_validation_par_competence_et_annee(self, etud: Identite):
|
||||||
"""{ competence_id : { 'BUT1' : validation_rcue (la "meilleure"), ... } }"""
|
# """{ competence_id : { 'BUT1' : validation_rcue (la "meilleure"), ... } }"""
|
||||||
validation_par_competence_et_annee = {}
|
# validation_par_competence_et_annee = {}
|
||||||
for validation_rcue in ApcValidationRCUE.query.filter_by(etud=etud):
|
# for validation_rcue in ApcValidationRCUE.query.filter_by(etud=etud):
|
||||||
# On s'assurer qu'elle concerne notre cursus !
|
# # On s'assurer qu'elle concerne notre cursus !
|
||||||
ue = validation_rcue.ue2
|
# ue = validation_rcue.ue2
|
||||||
if ue.id not in self.ue_ids:
|
# if ue.id not in self.ue_ids:
|
||||||
if (
|
# if (
|
||||||
ue.formation.referentiel_competences_id
|
# ue.formation.referentiel_competences_id
|
||||||
== self.referentiel_competences_id
|
# == self.referentiel_competences_id
|
||||||
):
|
# ):
|
||||||
self.ue_ids = ue.id
|
# self.ue_ids = ue.id
|
||||||
else:
|
# else:
|
||||||
continue # skip this validation
|
# continue # skip this validation
|
||||||
niveau = validation_rcue.niveau()
|
# niveau = validation_rcue.niveau()
|
||||||
if not niveau.competence.id in validation_par_competence_et_annee:
|
# if not niveau.competence.id in validation_par_competence_et_annee:
|
||||||
validation_par_competence_et_annee[niveau.competence.id] = {}
|
# validation_par_competence_et_annee[niveau.competence.id] = {}
|
||||||
previous_validation = validation_par_competence_et_annee.get(
|
# previous_validation = validation_par_competence_et_annee.get(
|
||||||
niveau.competence.id
|
# niveau.competence.id
|
||||||
).get(validation_rcue.annee())
|
# ).get(validation_rcue.annee())
|
||||||
# prend la "meilleure" validation
|
# # prend la "meilleure" validation
|
||||||
if (not previous_validation) or (
|
# if (not previous_validation) or (
|
||||||
sco_codes.BUT_CODES_ORDER[validation_rcue.code]
|
# sco_codes.BUT_CODES_ORDER[validation_rcue.code]
|
||||||
> sco_codes.BUT_CODES_ORDER[previous_validation["code"]]
|
# > sco_codes.BUT_CODES_ORDER[previous_validation["code"]]
|
||||||
):
|
# ):
|
||||||
self.validation_par_competence_et_annee[niveau.competence.id][
|
# self.validation_par_competence_et_annee[niveau.competence.id][
|
||||||
niveau.annee
|
# niveau.annee
|
||||||
] = validation_rcue
|
# ] = validation_rcue
|
||||||
return validation_par_competence_et_annee
|
# return validation_par_competence_et_annee
|
||||||
|
|
||||||
def list_etud_inscriptions(self, etud: Identite):
|
# def list_etud_inscriptions(self, etud: Identite):
|
||||||
"Le parcours à valider: celui du DERNIER semestre suivi (peut être None)"
|
# "Le parcours à valider: celui du DERNIER semestre suivi (peut être None)"
|
||||||
self.niveaux_by_annee = {}
|
# self.niveaux_by_annee = {}
|
||||||
"{ annee : liste des niveaux à valider }"
|
# "{ annee : liste des niveaux à valider }"
|
||||||
self.niveaux: dict[int, ApcNiveau] = {}
|
# self.niveaux: dict[int, ApcNiveau] = {}
|
||||||
"cache les niveaux"
|
# "cache les niveaux"
|
||||||
for annee in (1, 2, 3):
|
# for annee in (1, 2, 3):
|
||||||
niveaux_d = formation.referentiel_competence.get_niveaux_by_parcours(
|
# niveaux_d = formation.referentiel_competence.get_niveaux_by_parcours(
|
||||||
annee, [self.parcour] if self.parcour else None # XXX WIP
|
# annee, [self.parcour] if self.parcour else None # XXX WIP
|
||||||
)[1]
|
# )[1]
|
||||||
# groupe les niveaux de tronc commun et ceux spécifiques au parcour
|
# # groupe les niveaux de tronc commun et ceux spécifiques au parcour
|
||||||
self.niveaux_by_annee[annee] = niveaux_d["TC"] + (
|
# self.niveaux_by_annee[annee] = niveaux_d["TC"] + (
|
||||||
niveaux_d[self.parcour.id] if self.parcour else []
|
# niveaux_d[self.parcour.id] if self.parcour else []
|
||||||
)
|
# )
|
||||||
self.niveaux.update(
|
# self.niveaux.update(
|
||||||
{niveau.id: niveau for niveau in self.niveaux_by_annee[annee]}
|
# {niveau.id: niveau for niveau in self.niveaux_by_annee[annee]}
|
||||||
)
|
# )
|
||||||
|
|
||||||
self.validation_par_competence_et_annee = {}
|
# self.validation_par_competence_et_annee = {}
|
||||||
"""{ competence_id : { 'BUT1' : validation_rcue (la "meilleure"), ... } }"""
|
# """{ competence_id : { 'BUT1' : validation_rcue (la "meilleure"), ... } }"""
|
||||||
for validation_rcue in ApcValidationRCUE.query.filter_by(etud=etud):
|
# for validation_rcue in ApcValidationRCUE.query.filter_by(etud=etud):
|
||||||
niveau = validation_rcue.niveau()
|
# niveau = validation_rcue.niveau()
|
||||||
if not niveau.competence.id in self.validation_par_competence_et_annee:
|
# if not niveau.competence.id in self.validation_par_competence_et_annee:
|
||||||
self.validation_par_competence_et_annee[niveau.competence.id] = {}
|
# self.validation_par_competence_et_annee[niveau.competence.id] = {}
|
||||||
previous_validation = self.validation_par_competence_et_annee.get(
|
# previous_validation = self.validation_par_competence_et_annee.get(
|
||||||
niveau.competence.id
|
# niveau.competence.id
|
||||||
).get(validation_rcue.annee())
|
# ).get(validation_rcue.annee())
|
||||||
# prend la "meilleure" validation
|
# # prend la "meilleure" validation
|
||||||
if (not previous_validation) or (
|
# if (not previous_validation) or (
|
||||||
sco_codes.BUT_CODES_ORDER[validation_rcue.code]
|
# sco_codes.BUT_CODES_ORDER[validation_rcue.code]
|
||||||
> sco_codes.BUT_CODES_ORDER[previous_validation["code"]]
|
# > sco_codes.BUT_CODES_ORDER[previous_validation["code"]]
|
||||||
):
|
# ):
|
||||||
self.validation_par_competence_et_annee[niveau.competence.id][
|
# self.validation_par_competence_et_annee[niveau.competence.id][
|
||||||
niveau.annee
|
# niveau.annee
|
||||||
] = validation_rcue
|
# ] = validation_rcue
|
||||||
|
|
||||||
self.competences = {
|
# self.competences = {
|
||||||
competence.id: competence
|
# competence.id: competence
|
||||||
for competence in (
|
# for competence in (
|
||||||
self.parcour.query_competences()
|
# self.parcour.query_competences()
|
||||||
if self.parcour
|
# if self.parcour
|
||||||
else self.formation.referentiel_competence.get_competences_tronc_commun()
|
# else self.formation.referentiel_competence.get_competences_tronc_commun()
|
||||||
)
|
# )
|
||||||
}
|
# }
|
||||||
"cache { competence_id : competence }"
|
# "cache { competence_id : competence }"
|
||||||
|
|
||||||
|
|
||||||
def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> float:
|
def but_ects_valides(etud: Identite, referentiel_competence_id: int) -> float:
|
||||||
|
@ -1034,8 +1034,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
return messages
|
return messages
|
||||||
|
|
||||||
def valide_diplome(self) -> bool:
|
def valide_diplome(self) -> bool:
|
||||||
"Vrai si l'étudiant à validé son diplôme"
|
"Vrai si l'étudiant a validé son diplôme (décision enregistrée)"
|
||||||
return False # TODO XXX
|
return self.annee_but == 3 and sco_codes.code_annee_validant(self.code_valide)
|
||||||
|
|
||||||
|
|
||||||
def list_ue_parcour_etud(
|
def list_ue_parcour_etud(
|
||||||
|
@ -155,6 +155,7 @@ def pvjury_table_but(
|
|||||||
deca = None
|
deca = None
|
||||||
|
|
||||||
ects_but_valides = but_ects_valides(etud, referentiel_competence_id)
|
ects_but_valides = but_ects_valides(etud, referentiel_competence_id)
|
||||||
|
has_diplome = deca.valide_diplome()
|
||||||
row = {
|
row = {
|
||||||
"nom_pv": (
|
"nom_pv": (
|
||||||
etud.code_ine or etud.code_nip or etud.id
|
etud.code_ine or etud.code_nip or etud.id
|
||||||
@ -181,10 +182,15 @@ def pvjury_table_but(
|
|||||||
),
|
),
|
||||||
"decision_but": deca.code_valide if deca else "",
|
"decision_but": deca.code_valide if deca else "",
|
||||||
"devenir": (
|
"devenir": (
|
||||||
|
"Diplôme obtenu"
|
||||||
|
if has_diplome
|
||||||
|
else (
|
||||||
", ".join([f"S{i}" for i in deca.get_autorisations_passage()])
|
", ".join([f"S{i}" for i in deca.get_autorisations_passage()])
|
||||||
if deca
|
if deca
|
||||||
else ""
|
else ""
|
||||||
|
)
|
||||||
),
|
),
|
||||||
|
"diplome": "ADM" if has_diplome else "",
|
||||||
# pour exports excel seulement:
|
# pour exports excel seulement:
|
||||||
"civilite": etud.civilite_etat_civil_str,
|
"civilite": etud.civilite_etat_civil_str,
|
||||||
"nom": etud.nom,
|
"nom": etud.nom,
|
||||||
|
@ -219,6 +219,7 @@ def dict_decision_jury(etud: Identite, formsemestre: FormSemestre) -> dict:
|
|||||||
dec_rcue["code"]}"""
|
dec_rcue["code"]}"""
|
||||||
)
|
)
|
||||||
decisions["descr_decisions_rcue"] = ", ".join(titres_rcues)
|
decisions["descr_decisions_rcue"] = ", ".join(titres_rcues)
|
||||||
|
decisions["descr_decisions_rcue_list"] = titres_rcues
|
||||||
decisions["descr_decisions_niveaux"] = (
|
decisions["descr_decisions_niveaux"] = (
|
||||||
"Niveaux de compétences: " + decisions["descr_decisions_rcue"]
|
"Niveaux de compétences: " + decisions["descr_decisions_rcue"]
|
||||||
)
|
)
|
||||||
|
@ -257,7 +257,9 @@ def pdf_lettre_individuelle(sem, decision, etud: Identite, params, signature=Non
|
|||||||
else:
|
else:
|
||||||
params["autorisations_txt"] = ""
|
params["autorisations_txt"] = ""
|
||||||
|
|
||||||
if decision["decision_sem"] and situation_etud.parcours_validated():
|
if (
|
||||||
|
formsemestre.formation.is_apc() or decision["decision_sem"]
|
||||||
|
) and situation_etud.parcours_validated():
|
||||||
params["diplome_txt"] = (
|
params["diplome_txt"] = (
|
||||||
"""Vous avez donc obtenu le diplôme : <b>%(titre_formation)s</b>""" % params
|
"""Vous avez donc obtenu le diplôme : <b>%(titre_formation)s</b>""" % params
|
||||||
)
|
)
|
||||||
@ -357,5 +359,8 @@ def add_apc_infos(formsemestre: FormSemestre, params: dict, decision: dict):
|
|||||||
params[
|
params[
|
||||||
"decision_ue_txt"
|
"decision_ue_txt"
|
||||||
] = f"""{params["decision_ue_txt"]}<br/>
|
] = f"""{params["decision_ue_txt"]}<br/>
|
||||||
<b>Niveaux de compétences:</b><br/> {decision.get("descr_decisions_rcue") or ""}
|
<b>Niveaux de compétences:</b>
|
||||||
|
<br/> - {
|
||||||
|
'<br/> - '.join( decision.get("descr_decisions_rcue_list", []) )
|
||||||
|
}
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user