Compare commits

...

8 Commits

4 changed files with 64 additions and 8 deletions

View File

@ -110,7 +110,7 @@ def liste_etudiants(dept: str, *args, sem_id): # XXX TODO A REVOIR
return error_response(501, message="Not implemented")
@bp.route("/departements/<string:dept>/semestres_actifs", methods=["GET"])
@bp.route("/departements/<string:dept>/semestres_courant", methods=["GET"])
@token_auth.login_required
def liste_semestres_courant(dept: str):
"""
@ -126,6 +126,7 @@ def liste_semestres_courant(dept: str):
return jsonify(data)
@bp.route(
"/departements/<string:dept>/formations/<int:formation_id>/referentiel_competences",
methods=["GET"],
@ -191,6 +192,7 @@ def etudiants_courant():
return jsonify(data)
# return error_response(501, message="Not implemented")
@bp.route("/etudiant/etudid/<int:etudid>", methods=["GET"])
@bp.route("/etudiant/nip/<int:nip>", methods=["GET"])
@bp.route("/etudiant/ine/<int:ine>", methods=["GET"])
@ -210,6 +212,7 @@ def etudiant(etudid=None, nip=None, ine=None):
return jsonify(data)
@bp.route("/etudiant/etudid/<int:etudid>/formsemestres")
@bp.route("/etudiant/nip/<int:nip>/formsemestres")
@bp.route("/etudiant/ine/<int:ine>/formsemestres")
@ -303,6 +306,7 @@ def etudiant_groups(formsemestre_id: int, etudid=None, nip=None, ine=None):
return jsonify(data)
##############################################" Formations ############################################################
@ -490,7 +494,7 @@ def set_groups(
return error_response(409, message="La requête ne peut être traitée en létat actuel")
################################################### Evaluations #######################################################
############################################### Evaluations ###########################################################
@bp.route("/evaluations/<int:moduleimpl_id>", methods=["GET"])
@ -530,6 +534,47 @@ def evaluation_set_notes(eval_id: int, etudid: int, note: float):
return error_response(501, message="Not implemented")
#################################################### Jury #############################################################
@bp.route("/jury/formsemestre/<int:formsemestre_id>/preparation_jury", methods=["GET"])
def jury_preparation(formsemestre_id: int):
"""
Feuille de préparation du jury
"""
return error_response(501, message="Not implemented")
@bp.route("/jury/formsemestre/<int:formsemestre_id>/decisions_jury", methods=["GET"])
def jury_decisions(formsemestre_id: int):
"""
Retourne les décisions du jury suivant un formsemestre donné
"""
return error_response(501, message="Not implemented")
@bp.route("/jury/set_decision/etudid?etudid=<int:etudid>&formsemestre_id=<int:formesemestre_id>&jury=<string"
":decision_jury>&devenir=<string:devenir_jury>&assiduite=<bool>", methods=["POST"])
@bp.route("/jury/set_decision/nip?etudid=<int:etudid>&formsemestre_id=<int:formesemestre_id>&jury=<string:decision_jury"
">&devenir=<string:devenir_jury>&assiduite=<bool>", methods=["POST"])
@bp.route("/jury/set_decision/ine?etudid=<int:etudid>&formsemestre_id=<int:formesemestre_id>&jury=<string:decision_jury"
">&devenir=<string:devenir_jury>&assiduite=<bool>", methods=["POST"])
def set_decision_jury(formsemestre_id: int, decision_jury: str, devenir_jury: str, assiduite: bool, etudid=None,
nip=None, ine=None):
"""
Attribuer la décision du jury et le devenir à un etudiant
"""
return error_response(501, message="Not implemented")
@bp.route("/jury/etudid/<int:etudid>/formsemestre/<int:formsemestre_id>/annule_decision", methods=["DELETE"])
@bp.route("/jury/nip/<int:nip>/formsemestre/<int:formsemestre_id>/annule_decision", methods=["DELETE"])
@bp.route("/jury/ine/<int:ine>/formsemestre/<int:formsemestre_id>/annule_decision", methods=["DELETE"])
def annule_decision_jury(formsemestre_id: int, etudid=None, nip=None, ine=None):
"""
Supprime la déciosion du jury pour un étudiant donné
"""
return error_response(501, message="Not implemented")
#################################################### Absences #########################################################

View File

@ -53,7 +53,7 @@ class BonusSport:
etud_moy_gen et etud_moy_ue ne sont PAS modifiés (mais utilisés par certains bonus non additifs).
"""
# En classique, active un bonus sur les UEs: (dans ce cas bonus_moy_gen reste None)
# En classique, active un bonus sur les UEs: (dans ce cas bonus_moy_gen est ajusté pour le prendre en compte)
classic_use_bonus_ues = False
# Attributs virtuels:

View File

@ -60,7 +60,7 @@ class ResultatsSemestreClassic(NotesTableCompat):
)
self.modimpl_inscr_df = inscr_mod.df_load_modimpl_inscr(self.formsemestre)
self.modimpl_coefs = np.array(
[m.module.coefficient for m in self.formsemestre.modimpls_sorted]
[m.module.coefficient or 0.0 for m in self.formsemestre.modimpls_sorted]
)
self.modimpl_idx = {
m.id: i for i, m in enumerate(self.formsemestre.modimpls_sorted)
@ -113,11 +113,20 @@ class ResultatsSemestreClassic(NotesTableCompat):
self.etud_moy_ue += self.bonus_ues # somme les dataframes
self.etud_moy_ue.clip(lower=0.0, upper=20.0, inplace=True)
bonus_mg = bonus.get_bonus_moy_gen()
if bonus_mg is not None:
if bonus_mg is None and self.bonus_ues is not None:
# pas de bonus explicite sur la moyenne générale
# on l'ajuste pour refléter les modifs d'UE, à l'aide des coefs d'UE.
bonus_mg = (self.etud_coef_ue_df * self.bonus_ues).sum(
axis=1
) / self.etud_coef_ue_df.sum(axis=1)
self.etud_moy_gen += bonus_mg
self.etud_moy_gen.clip(lower=0.0, upper=20.0, inplace=True)
# compat nt, utilisé pour l'afficher sur les bulletins:
self.bonus = bonus_mg
elif bonus_mg is not None:
# Applique le bonus moyenne générale renvoyé
self.etud_moy_gen += bonus_mg
self.etud_moy_gen.clip(lower=0.0, upper=20.0, inplace=True)
# compat nt, utilisé pour l'afficher sur les bulletins:
self.bonus = bonus_mg
# --- UE capitalisées
self.apply_capitalisation()

View File

@ -315,6 +315,8 @@ def formsemestre_bulletinetud_dict(formsemestre_id, etudid, version="long"):
u["cur_moy_ue_txt"] = "bonus appliqué sur les UEs"
else:
u["cur_moy_ue_txt"] = "bonus de %.3g points" % x
if nt.bonus_ues is not None:
u["cur_moy_ue_txt"] += " (+ues)"
u["moy_ue_txt"] = scu.fmt_note(ue_status["moy"])
if ue_status["coef_ue"] != None:
u["coef_ue_txt"] = scu.fmt_coef(ue_status["coef_ue"])