forked from ScoDoc/ScoDoc
Table jury BUT: affichage optionnel des codes enregistrés
This commit is contained in:
parent
5335e5cfae
commit
be3d692202
@ -246,6 +246,8 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
"liste des niveaux de compétences associés à cette année"
|
"liste des niveaux de compétences associés à cette année"
|
||||||
self.decisions_rcue_by_niveau = self.compute_decisions_niveaux()
|
self.decisions_rcue_by_niveau = self.compute_decisions_niveaux()
|
||||||
"les décisions rcue associées aux niveau_id"
|
"les décisions rcue associées aux niveau_id"
|
||||||
|
self.dec_rcue_by_ue = self._dec_rcue_by_ue()
|
||||||
|
"{ ue_id : DecisionsProposeesRCUE }"
|
||||||
self.nb_competences = len(self.niveaux_competences)
|
self.nb_competences = len(self.niveaux_competences)
|
||||||
"le nombre de niveaux de compétences à valider cette année"
|
"le nombre de niveaux de compétences à valider cette année"
|
||||||
self.nb_validables = len(
|
self.nb_validables = len(
|
||||||
@ -357,6 +359,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
if res.etuds_parcour_id[etudid] is None:
|
if res.etuds_parcour_id[etudid] is None:
|
||||||
# pas de parcour: prend toutes les UEs (non bonus)
|
# pas de parcour: prend toutes les UEs (non bonus)
|
||||||
ues = [ue for ue in res.etud_ues(etudid) if ue.type == UE_STANDARD]
|
ues = [ue for ue in res.etud_ues(etudid) if ue.type == UE_STANDARD]
|
||||||
|
ues.sort(key=lambda u: u.numero)
|
||||||
else:
|
else:
|
||||||
parcour = ApcParcours.query.get(res.etuds_parcour_id[etudid])
|
parcour = ApcParcours.query.get(res.etuds_parcour_id[etudid])
|
||||||
if parcour is not None:
|
if parcour is not None:
|
||||||
@ -364,6 +367,7 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
ues = (
|
ues = (
|
||||||
formation.query_ues_parcour(parcour)
|
formation.query_ues_parcour(parcour)
|
||||||
.filter_by(semestre_idx=formsemestre.semestre_id)
|
.filter_by(semestre_idx=formsemestre.semestre_id)
|
||||||
|
.order_by(UniteEns.numero)
|
||||||
.all()
|
.all()
|
||||||
)
|
)
|
||||||
ues_sems.append(ues)
|
ues_sems.append(ues)
|
||||||
@ -418,9 +422,10 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
return rcues_annee
|
return rcues_annee
|
||||||
|
|
||||||
def compute_decisions_niveaux(self) -> dict[int, "DecisionsProposeesRCUE"]:
|
def compute_decisions_niveaux(self) -> dict[int, "DecisionsProposeesRCUE"]:
|
||||||
"""Pour chaque niveau de compétence de cette année, donne le DecisionsProposeesRCUE
|
"""Pour chaque niveau de compétence de cette année, construit
|
||||||
ou None s'il n'y en a pas (ne devrait pas arriver car
|
le DecisionsProposeesRCUE,
|
||||||
compute_rcues_annee vérifie déjà cela).
|
ou None s'il n'y en a pas
|
||||||
|
(ne devrait pas arriver car compute_rcues_annee vérifie déjà cela).
|
||||||
Return: { niveau_id : DecisionsProposeesRCUE }
|
Return: { niveau_id : DecisionsProposeesRCUE }
|
||||||
"""
|
"""
|
||||||
# Retrouve le RCUE associé à chaque niveau
|
# Retrouve le RCUE associé à chaque niveau
|
||||||
@ -442,6 +447,15 @@ class DecisionsProposeesAnnee(DecisionsProposees):
|
|||||||
decisions_rcue_by_niveau = {x[1]: x[0] for x in rc_niveaux}
|
decisions_rcue_by_niveau = {x[1]: x[0] for x in rc_niveaux}
|
||||||
return decisions_rcue_by_niveau
|
return decisions_rcue_by_niveau
|
||||||
|
|
||||||
|
def _dec_rcue_by_ue(self) -> dict[int, "DecisionsProposeesRCUE"]:
|
||||||
|
"""construit dict { ue_id : DecisionsProposeesRCUE }
|
||||||
|
à partir de self.decisions_rcue_by_niveau"""
|
||||||
|
d = {}
|
||||||
|
for dec_rcue in self.decisions_rcue_by_niveau.values():
|
||||||
|
d[dec_rcue.rcue.ue_1.id] = dec_rcue
|
||||||
|
d[dec_rcue.rcue.ue_2.id] = dec_rcue
|
||||||
|
return d
|
||||||
|
|
||||||
# def lookup_ue(self, ue_id: int) -> UniteEns:
|
# def lookup_ue(self, ue_id: int) -> UniteEns:
|
||||||
# "check that ue_id belongs to our UE, if not returns None"
|
# "check that ue_id belongs to our UE, if not returns None"
|
||||||
# ues = [ue for ue in self.ues_impair + self.ues_pair if ue.id == ue_id]
|
# ues = [ue for ue in self.ues_impair + self.ues_pair if ue.id == ue_id]
|
||||||
|
@ -11,7 +11,11 @@ import time
|
|||||||
from flask import g, url_for
|
from flask import g, url_for
|
||||||
|
|
||||||
from app.but import jury_but
|
from app.but import jury_but
|
||||||
from app.but.jury_but import DecisionsProposeesAnnee
|
from app.but.jury_but import (
|
||||||
|
DecisionsProposeesAnnee,
|
||||||
|
DecisionsProposeesRCUE,
|
||||||
|
DecisionsProposeesUE,
|
||||||
|
)
|
||||||
from app.comp.res_but import ResultatsSemestreBUT
|
from app.comp.res_but import ResultatsSemestreBUT
|
||||||
from app.comp import res_sem
|
from app.comp import res_sem
|
||||||
from app.models.but_validations import RegroupementCoherentUE
|
from app.models.but_validations import RegroupementCoherentUE
|
||||||
@ -179,10 +183,11 @@ class RowCollector:
|
|||||||
self["_nom_disp_target_attrs"] = self["_nom_short_target_attrs"]
|
self["_nom_disp_target_attrs"] = self["_nom_short_target_attrs"]
|
||||||
self.last_etud_cell_idx = self.idx
|
self.last_etud_cell_idx = self.idx
|
||||||
|
|
||||||
def add_ue_cell(self, ue: UniteEns, val):
|
def add_ue_cells(self, dec_ue: DecisionsProposeesUE):
|
||||||
"cell de moyenne d'UE"
|
"cell de moyenne d'UE"
|
||||||
col_id = f"moy_ue_{ue.id}"
|
col_id = f"moy_ue_{dec_ue.ue.id}"
|
||||||
note_class = ""
|
note_class = ""
|
||||||
|
val = dec_ue.moy_ue
|
||||||
if isinstance(val, float):
|
if isinstance(val, float):
|
||||||
if val < BUT_BARRE_UE:
|
if val < BUT_BARRE_UE:
|
||||||
note_class = " moy_inf"
|
note_class = " moy_inf"
|
||||||
@ -190,10 +195,19 @@ class RowCollector:
|
|||||||
note_class = " moy_ue_valid"
|
note_class = " moy_ue_valid"
|
||||||
if val < BUT_BARRE_UE8:
|
if val < BUT_BARRE_UE8:
|
||||||
note_class = " moy_ue_warning" # notes très basses
|
note_class = " moy_ue_warning" # notes très basses
|
||||||
self.add_cell(col_id, ue.acronyme, self.fmt_note(val), "col_ue" + note_class)
|
self.add_cell(
|
||||||
|
col_id, dec_ue.ue.acronyme, self.fmt_note(val), "col_ue" + note_class
|
||||||
|
)
|
||||||
|
self.add_cell(
|
||||||
|
col_id + "_code",
|
||||||
|
dec_ue.ue.acronyme,
|
||||||
|
dec_ue.code_valide or "",
|
||||||
|
"col_ue_code recorded_code",
|
||||||
|
)
|
||||||
|
|
||||||
def add_rcue_cell(self, rcue: RegroupementCoherentUE):
|
def add_rcue_cells(self, dec_rcue: DecisionsProposeesRCUE):
|
||||||
"cell de moyenne d'UE"
|
"2 cells: moyenne du RCUE, code enregistré"
|
||||||
|
rcue = dec_rcue.rcue
|
||||||
col_id = f"moy_rcue_{rcue.ue_1.niveau_competence_id}" # le niveau_id
|
col_id = f"moy_rcue_{rcue.ue_1.niveau_competence_id}" # le niveau_id
|
||||||
note_class = ""
|
note_class = ""
|
||||||
val = rcue.moy_rcue
|
val = rcue.moy_rcue
|
||||||
@ -210,6 +224,12 @@ class RowCollector:
|
|||||||
self.fmt_note(val),
|
self.fmt_note(val),
|
||||||
"col_rcue" + note_class,
|
"col_rcue" + note_class,
|
||||||
)
|
)
|
||||||
|
self.add_cell(
|
||||||
|
col_id + "_code",
|
||||||
|
f"<div>{rcue.ue_1.acronyme}</div><div>{rcue.ue_2.acronyme}</div>",
|
||||||
|
dec_rcue.code_valide or "",
|
||||||
|
"col_rcue_code recorded_code",
|
||||||
|
)
|
||||||
|
|
||||||
def add_nb_rcues_cell(self, deca: DecisionsProposeesAnnee):
|
def add_nb_rcues_cell(self, deca: DecisionsProposeesAnnee):
|
||||||
"cell avec nb niveaux validables / total"
|
"cell avec nb niveaux validables / total"
|
||||||
@ -259,9 +279,10 @@ def get_table_jury_but(
|
|||||||
row.add_nb_rcues_cell(deca)
|
row.add_nb_rcues_cell(deca)
|
||||||
# --- Les RCUEs
|
# --- Les RCUEs
|
||||||
for rcue in deca.rcues_annee:
|
for rcue in deca.rcues_annee:
|
||||||
row.add_ue_cell(rcue.ue_1, rcue.moy_ue_1)
|
dec_rcue = deca.dec_rcue_by_ue[rcue.ue_1.id]
|
||||||
row.add_ue_cell(rcue.ue_2, rcue.moy_ue_2)
|
row.add_ue_cells(deca.decisions_ues[rcue.ue_1.id])
|
||||||
row.add_rcue_cell(rcue)
|
row.add_ue_cells(deca.decisions_ues[rcue.ue_2.id])
|
||||||
|
row.add_rcue_cells(dec_rcue)
|
||||||
# --- Le code annuel existant
|
# --- Le code annuel existant
|
||||||
row.add_cell(
|
row.add_cell(
|
||||||
"code_annee",
|
"code_annee",
|
||||||
|
@ -188,7 +188,7 @@ CODES_SEM_ATTENTES = {ATT: True, ATB: True, ATJ: True} # semestre en attente
|
|||||||
|
|
||||||
CODES_SEM_REO = {NAR: 1} # reorientation
|
CODES_SEM_REO = {NAR: 1} # reorientation
|
||||||
|
|
||||||
CODES_UE_VALIDES = {ADM: True, CMP: True} # UE validée
|
CODES_UE_VALIDES = {ADM: True, CMP: True, ADJ: True} # UE validée
|
||||||
|
|
||||||
# Pour le BUT:
|
# Pour le BUT:
|
||||||
CODES_ANNEE_ARRET = {DEF, DEM, ABAN, ABL}
|
CODES_ANNEE_ARRET = {DEF, DEM, ABAN, ABL}
|
||||||
|
@ -35,6 +35,18 @@ $(function () {
|
|||||||
dt.buttons('toggle_partitions_rangs:name').text(rangs_visible ? "Rangs groupes" : "Cacher rangs groupes");
|
dt.buttons('toggle_partitions_rangs:name').text(rangs_visible ? "Rangs groupes" : "Cacher rangs groupes");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
// table jury BUT: avec ou sans codes enregistrés
|
||||||
|
buttons.push(
|
||||||
|
{
|
||||||
|
name: "toggle_recorded_code",
|
||||||
|
text: "Code jury enregistrés",
|
||||||
|
action: function (e, dt, node, config) {
|
||||||
|
let visible = dt.columns(".recorded_code").visible()[0];
|
||||||
|
dt.columns(".recorded_code").visible(!visible);
|
||||||
|
dt.buttons('toggle_recorded_code:name').text(visible ? "Code jury enregistrés" : "Cacher codes jury");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$('table.table_recap').hasClass("jury")) {
|
if (!$('table.table_recap').hasClass("jury")) {
|
||||||
@ -113,7 +125,7 @@ $(function () {
|
|||||||
"columnDefs": [
|
"columnDefs": [
|
||||||
{
|
{
|
||||||
// cache les codes, le détail de l'identité, les groupes, les colonnes admission et les vides
|
// cache les codes, le détail de l'identité, les groupes, les colonnes admission et les vides
|
||||||
targets: ["codes", "identite_detail", "partition_aux", "partition_rangs", "admission", "col_empty"],
|
targets: ["codes", "identite_detail", "partition_aux", "partition_rangs", "admission", "col_empty", "recorded_code"],
|
||||||
visible: false,
|
visible: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user