Ajout lien saisie absence sur tableau bord module, et lien affichage notes tous

This commit is contained in:
viennet 2021-01-02 22:07:38 +01:00
parent 44dde2e678
commit e9e9e1c6e1
6 changed files with 50 additions and 19 deletions

View File

@ -936,7 +936,7 @@ class ZAbsences(
moduleimpl_id = None moduleimpl_id = None
groups_infos = sco_groups_view.DisplayedGroupsInfos( groups_infos = sco_groups_view.DisplayedGroupsInfos(
self, group_ids, REQUEST=REQUEST self, group_ids, moduleimpl_id=moduleimpl_id, REQUEST=REQUEST
) )
if not groups_infos.members: if not groups_infos.members:
return ( return (

View File

@ -764,14 +764,11 @@ UE11 Découverte métiers <span class="ue_code">(code UCOD46, 16 ECTS, Apo <span
# Semestres dans lesquel il est inscrit # Semestres dans lesquel il est inscrit
ins = self.Notes.do_formsemestre_inscription_list({"etudid": etudid}) ins = self.Notes.do_formsemestre_inscription_list({"etudid": etudid})
etud["ins"] = ins etud["ins"] = ins
now = time.strftime("%Y-%m-%d")
sems = [] sems = []
cursem = None # semestre "courant" ou il est inscrit cursem = None # semestre "courant" ou il est inscrit
for i in ins: for i in ins:
sem = sco_formsemestre.get_formsemestre(self, i["formsemestre_id"]) sem = sco_formsemestre.get_formsemestre(self, i["formsemestre_id"])
debut = DateDMYtoISO(sem["date_debut"]) if sco_formsemestre.sem_est_courant(self, sem):
fin = DateDMYtoISO(sem["date_fin"])
if debut <= now and now <= fin:
cursem = sem cursem = sem
curi = i curi = i
sem["ins"] = i sem["ins"] = i

View File

@ -374,8 +374,8 @@ def sem_in_semestre_scolaire(context, sem, year=False, saison=0, REQUEST=None):
si saison non spécifiée: année complète si saison non spécifiée: année complète
pivot de saison au 1er décembre pivot de saison au 1er décembre
XXX TODO: la période (ici appelée "saison" devrait être éditable XXX TODO: la période (ici appelée "saison" devrait être éditable
manuellement dans le formsemestre_edit afin de couvrir els cas particulier manuellement dans le formsemestre_edit afin de couvrir les cas particulier
comme un semestre S2 qui commecerait en décembre... voire novembre. comme un semestre S2 qui commencerait en décembre... voire novembre.
) )
""" """
if not year: if not year:
@ -429,6 +429,14 @@ def sem_une_annee(context, sem):
return debut == fin return debut == fin
def sem_est_courant(context, sem):
"""Vrai si la date actuelle (now) est dans le semestre (les dates de début et fin sont incluses)"""
now = time.strftime("%Y-%m-%d")
debut = DateDMYtoISO(sem["date_debut"])
fin = DateDMYtoISO(sem["date_fin"])
return (debut <= now) and (now <= fin)
def scodoc_get_all_unlocked_sems(context): def scodoc_get_all_unlocked_sems(context):
"""Liste de tous les semestres non verrouillés de tous les départements""" """Liste de tous les semestres non verrouillés de tous les départements"""
depts = context.list_depts() depts = context.list_depts()

View File

@ -298,6 +298,7 @@ class DisplayedGroupsInfos:
formsemestre_id=None, formsemestre_id=None,
etat=None, etat=None,
select_all_when_unspecified=False, select_all_when_unspecified=False,
moduleimpl_id=None, # used to find formsemestre when unspecified
REQUEST=None, REQUEST=None,
): ):
# log('DisplayedGroupsInfos %s' % group_ids) # log('DisplayedGroupsInfos %s' % group_ids)
@ -306,10 +307,15 @@ class DisplayedGroupsInfos:
group_ids = [group_ids] # cas ou un seul parametre, pas de liste group_ids = [group_ids] # cas ou un seul parametre, pas de liste
else: else:
group_ids = [] group_ids = []
if not formsemestre_id and moduleimpl_id:
mods = context.Notes.do_moduleimpl_list(moduleimpl_id=moduleimpl_id)
if len(mods) != 1:
raise ValueError("invalid moduleimpl_id")
formsemestre_id = mods[0]["formsemestre_id"]
if not group_ids: # appel sans groupe (eg page accueil) if not group_ids: # appel sans groupe (eg page accueil)
if not formsemestre_id: if not formsemestre_id:
raise Exception("missing parameter") # formsemestre_id or group_ids raise Exception("missing parameter formsemestre_id or group_ids")
if select_all_when_unspecified: if select_all_when_unspecified:
group_ids = [sco_groups.get_default_group(context, formsemestre_id)] group_ids = [sco_groups.get_default_group(context, formsemestre_id)]
else: else:
@ -856,7 +862,9 @@ def tab_photos_html(context, groups_infos, etat=None, REQUEST=None):
return sco_trombino.trombino_html(context, groups_infos, REQUEST=REQUEST) return sco_trombino.trombino_html(context, groups_infos, REQUEST=REQUEST)
def form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=None): def form_choix_jour_saisie_hebdo(
context, groups_infos, moduleimpl_id=None, REQUEST=None
):
"""Formulaire choix jour semaine pour saisie.""" """Formulaire choix jour semaine pour saisie."""
authuser = REQUEST.AUTHENTICATED_USER authuser = REQUEST.AUTHENTICATED_USER
if not authuser.has_permission(ScoAbsChange, context): if not authuser.has_permission(ScoAbsChange, context):
@ -871,7 +879,10 @@ def form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=None):
) )
FA.append('<input type="hidden" name="datefin" value="%(date_fin)s"/>' % sem) FA.append('<input type="hidden" name="datefin" value="%(date_fin)s"/>' % sem)
FA.append(groups_infos.get_form_elem()) FA.append(groups_infos.get_form_elem())
if moduleimpl_id:
FA.append(
'<input type="hidden" name="moduleimpl_id" value="%s"/>' % moduleimpl_id
)
FA.append('<input type="hidden" name="destination" value=""/>') FA.append('<input type="hidden" name="destination" value=""/>')
FA.append( FA.append(

View File

@ -43,7 +43,7 @@ import sco_formsemestre
import sco_formsemestre_status import sco_formsemestre_status
from sco_formsemestre_status import makeMenu from sco_formsemestre_status import makeMenu
import sco_compute_moy import sco_compute_moy
import ZAbsences
# ported from old DTML code in oct 2009 # ported from old DTML code in oct 2009
@ -224,7 +224,6 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
) )
H.append("</td></tr>") H.append("</td></tr>")
else: else:
t0, t1 = "<em>règle de calcul standard</em>", ""
H.append( H.append(
'<tr><td colspan="4"><em title="mode de calcul de la moyenne du module">règle de calcul standard</em>' '<tr><td colspan="4"><em title="mode de calcul de la moyenne du module">règle de calcul standard</em>'
) )
@ -235,10 +234,21 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
) )
H.append("</td></tr>") H.append("</td></tr>")
H.append( H.append(
'<tr><td colspan="2"><a class="stdlink" href="view_module_abs?moduleimpl_id=%s">Absences</a>&nbsp;' '<tr><td colspan="4"><span class="moduleimpl_abs_link"><a class="stdlink" href="view_module_abs?moduleimpl_id=%s">Absences dans ce module</a></span>'
% moduleimpl_id % moduleimpl_id
) )
H.append("</table>") # Adapté à partir d'une suggestion de DS (Le Havre)
# Liens saisies absences seulement si permission et date courante dans le semestre
if authuser.has_permission(
ScoAbsChange, context
) and sco_formsemestre.sem_est_courant(context, sem):
datelundi = ZAbsences.ddmmyyyy(time.strftime("%d/%m/%Y")).prev_monday()
H.append(
'<span class="moduleimpl_abs_link"><a class="stdlink" href="Absences/SignaleAbsenceGrHebdo?formsemestre_id=%s&moduleimpl_id=%s&datelundi=%s">Saisie Absences hebdo.</a></span>'
% (formsemestre_id, moduleimpl_id, datelundi)
)
H.append("</td></tr></table>")
# #
if has_expression and nt.expr_diagnostics: if has_expression and nt.expr_diagnostics:
H.append( H.append(
@ -478,7 +488,11 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
% etat % etat
) )
if etat["moy"]: if etat["moy"]:
H.append("%s / %g" % (etat["moy"], eval["note_max"])) H.append("<b>%s / %g</b>" % (etat["moy"], eval["note_max"]))
H.append(
"""&nbsp; (<a href="evaluation_listenotes?evaluation_id=%s">afficher</a>)"""
% (eval["evaluation_id"],)
)
else: else:
H.append( H.append(
"""<a class="redlink" href="saisie_notes?evaluation_id=%s">saisir notes</a>""" """<a class="redlink" href="saisie_notes?evaluation_id=%s">saisir notes</a>"""
@ -488,7 +502,6 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
# #
if etat["nb_notes"] == 0: if etat["nb_notes"] == 0:
H.append("""<tr class="%s"><td colspan="8">&nbsp;""" % tr_class) H.append("""<tr class="%s"><td colspan="8">&nbsp;""" % tr_class)
# XXX
H.append("""</td></tr>""") H.append("""</td></tr>""")
else: # il y a deja des notes saisies else: # il y a deja des notes saisies
gr_moyennes = etat["gr_moyennes"] gr_moyennes = etat["gr_moyennes"]
@ -505,7 +518,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
if gr_moyenne["gr_nb_notes"] > 0: if gr_moyenne["gr_nb_notes"] > 0:
H.append("%(gr_moy)s" % gr_moyenne) H.append("%(gr_moy)s" % gr_moyenne)
H.append( H.append(
"""&nbsp; (<a href="evaluation_listenotes?tf-submitted=1&amp;evaluation_id=%s&amp;group_ids%%3Alist=%s">%s</a> notes""" """&nbsp; (<a href="evaluation_listenotes?tf-submitted=1&amp;evaluation_id=%s&amp;group_ids%%3Alist=%s">%s notes</a>"""
% ( % (
eval["evaluation_id"], eval["evaluation_id"],
gr_moyenne["group_id"], gr_moyenne["group_id"],

View File

@ -1223,7 +1223,7 @@ ul.ue_inscr_list li.etud {
} }
#grouplists table { #grouplists table {
//border: 1px solid black; /*border: 1px solid black;*/
border-spacing: 1px; border-spacing: 1px;
} }
@ -1236,7 +1236,9 @@ div.moduleimpl_tableaubord {
padding: 7px; padding: 7px;
border: 2px solid gray; border: 2px solid gray;
} }
span.moduleimpl_abs_link {
padding-right: 2em;
}
.moduleimpl_evaluations_top_links { .moduleimpl_evaluations_top_links {
font-size: 80%; font-size: 80%;
margin-bottom: 3px; margin-bottom: 3px;