diff --git a/sco_evaluations.py b/sco_evaluations.py index 0c5bdc769d..82667bb580 100644 --- a/sco_evaluations.py +++ b/sco_evaluations.py @@ -235,13 +235,16 @@ def do_evaluation_etat( else: complete = True if ( - TotalNbAtt > 0 + TotalNbMissing > 0 and (TotalNbMissing == TotalNbAtt or E["publish_incomplete"] != "0") and not is_malus ): evalattente = True else: evalattente = False + # mais ne met pas en attente les evals immediates sans aucune notes: + if E["publish_incomplete"] != "0" and nb_notes == 0: + evalattente = False # Calcul moyenne dans chaque groupe de TD gr_moyennes = [] # group : {moy,median, nb_notes} @@ -265,11 +268,6 @@ def do_evaluation_etat( } ) gr_moyennes.sort(key=operator.itemgetter("group_name")) - # log('gr_moyennes=%s' % gr_moyennes) - # _DEE_TOT += (time.time() - t0) - # log('%s\t_DEE_TOT=%f' % (evaluation_id, _DEE_TOT)) - # if evaluation_id == 'GEAEVAL82883': - # logCallStack() # retourne mapping return { diff --git a/scotests/test_basic.py b/scotests/test_basic.py index d16941e3fd..8cfbd31c2b 100644 --- a/scotests/test_basic.py +++ b/scotests/test_basic.py @@ -19,6 +19,8 @@ import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error import sco_utils import sco_abs import sco_abs_views +import sco_bulletins +import sco_evaluations G = sco_fake_gen.ScoFake(context.Notes) G.verbose = False @@ -65,12 +67,65 @@ e = G.create_evaluation( coefficient=1.0, ) -# --- Saisie notes +# --- Saisie toutes les notes de l'évaluation for etud in etuds: nb_changed, nb_suppress, existing_decisions = G.create_note( evaluation=e, etud=etud, note=float(random.randint(0, 20)) ) +# --- Vérifie que les notes sont prises en compte: +b = sco_bulletins.formsemestre_bulletinetud_dict( + context.Notes, sem["formsemestre_id"], etud["etudid"], REQUEST=REQUEST +) +# Toute les notes sont saisies, donc eval complète +etat = sco_evaluations.do_evaluation_etat(context.Notes, e["evaluation_id"]) +assert etat["evalcomplete"] +# Un seul module, donc moy gen == note module +assert b["ues"][0]["cur_moy_ue_txt"] == b["ues"][0]["modules"][0]["mod_moy_txt"] +# Note au module égale à celle de l'éval +assert ( + b["ues"][0]["modules"][0]["mod_moy_txt"] + == b["ues"][0]["modules"][0]["evaluations"][0]["note_txt"] +) + + +# --- Une autre évaluation +e2 = G.create_evaluation( + moduleimpl_id=mi["moduleimpl_id"], + jour="02/01/2020", + description="evaluation test 2", + coefficient=1.0, +) +# Saisie les notes des 5 premiers étudiants: +for etud in etuds[:5]: + nb_changed, nb_suppress, existing_decisions = G.create_note( + evaluation=e2, etud=etud, note=float(random.randint(0, 20)) + ) +# Cette éval n'est pas complète +etat = sco_evaluations.do_evaluation_etat(context.Notes, e2["evaluation_id"]) +assert etat["evalcomplete"] == False +# la première éval est toujours complète: +etat = sco_evaluations.do_evaluation_etat(context.Notes, e["evaluation_id"]) +assert etat["evalcomplete"] + +# Modifie l'évaluation 2 pour "prise en compte immédiate" +e2["publish_incomplete"] = "1" +context.Notes.do_evaluation_edit(REQUEST, e2) +etat = sco_evaluations.do_evaluation_etat(context.Notes, e2["evaluation_id"]) +assert etat["evalcomplete"] == False +assert etat["nb_att"] == 0 # il n'y a pas de notes (explicitement) en attente +assert etat["evalattente"] # mais l'eval est en attente (prise en compte immédiate) + +# Saisie des notes qui manquent: +for etud in etuds[5:]: + nb_changed, nb_suppress, existing_decisions = G.create_note( + evaluation=e2, etud=etud, note=float(random.randint(0, 20)) + ) +etat = sco_evaluations.do_evaluation_etat(context.Notes, e2["evaluation_id"]) +assert etat["evalcomplete"] +assert etat["nb_att"] == 0 +assert not etat["evalattente"] # toutes les notes sont présentes + # --- Saisie absences etudid = etuds[0]["etudid"]