diff --git a/ZAbsences.py b/ZAbsences.py index 94b3b2c85..6ebf844e0 100644 --- a/ZAbsences.py +++ b/ZAbsences.py @@ -936,7 +936,7 @@ class ZAbsences( moduleimpl_id = None 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: return ( diff --git a/ZScolar.py b/ZScolar.py index 133a827c9..7a6355700 100644 --- a/ZScolar.py +++ b/ZScolar.py @@ -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 ins = self.Notes.do_formsemestre_inscription_list({"etudid": etudid}) etud["ins"] = ins - now = time.strftime("%Y-%m-%d") sems = [] cursem = None # semestre "courant" ou il est inscrit for i in ins: sem = sco_formsemestre.get_formsemestre(self, i["formsemestre_id"]) - debut = DateDMYtoISO(sem["date_debut"]) - fin = DateDMYtoISO(sem["date_fin"]) - if debut <= now and now <= fin: + if sco_formsemestre.sem_est_courant(self, sem): cursem = sem curi = i sem["ins"] = i diff --git a/sco_formsemestre.py b/sco_formsemestre.py index 217c2a465..e4c574f87 100644 --- a/sco_formsemestre.py +++ b/sco_formsemestre.py @@ -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 pivot de saison au 1er décembre XXX TODO: la période (ici appelée "saison" devrait être éditable - manuellement dans le formsemestre_edit afin de couvrir els cas particulier - comme un semestre S2 qui commecerait en décembre... voire novembre. + manuellement dans le formsemestre_edit afin de couvrir les cas particulier + comme un semestre S2 qui commencerait en décembre... voire novembre. ) """ if not year: @@ -429,6 +429,14 @@ def sem_une_annee(context, sem): 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): """Liste de tous les semestres non verrouillés de tous les départements""" depts = context.list_depts() diff --git a/sco_groups_view.py b/sco_groups_view.py index bc17d8eec..1ae5387d6 100644 --- a/sco_groups_view.py +++ b/sco_groups_view.py @@ -298,6 +298,7 @@ class DisplayedGroupsInfos: formsemestre_id=None, etat=None, select_all_when_unspecified=False, + moduleimpl_id=None, # used to find formsemestre when unspecified REQUEST=None, ): # log('DisplayedGroupsInfos %s' % group_ids) @@ -306,10 +307,15 @@ class DisplayedGroupsInfos: group_ids = [group_ids] # cas ou un seul parametre, pas de liste else: 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 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: group_ids = [sco_groups.get_default_group(context, formsemestre_id)] 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) -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.""" authuser = REQUEST.AUTHENTICATED_USER 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(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( diff --git a/sco_moduleimpl_status.py b/sco_moduleimpl_status.py index e60c642fb..99f1f8627 100644 --- a/sco_moduleimpl_status.py +++ b/sco_moduleimpl_status.py @@ -43,7 +43,7 @@ import sco_formsemestre import sco_formsemestre_status from sco_formsemestre_status import makeMenu import sco_compute_moy - +import ZAbsences # 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>") else: - t0, t1 = "<em>règle de calcul standard</em>", "" H.append( '<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( - '<tr><td colspan="2"><a class="stdlink" href="view_module_abs?moduleimpl_id=%s">Absences</a> ' + '<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 ) - 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: H.append( @@ -478,7 +488,11 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No % etat ) 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( + """ (<a href="evaluation_listenotes?evaluation_id=%s">afficher</a>)""" + % (eval["evaluation_id"],) + ) else: H.append( """<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: H.append("""<tr class="%s"><td colspan="8"> """ % tr_class) - # XXX H.append("""</td></tr>""") else: # il y a deja des notes saisies 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: H.append("%(gr_moy)s" % gr_moyenne) H.append( - """ (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s</a> notes""" + """ (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s notes</a>""" % ( eval["evaluation_id"], gr_moyenne["group_id"], diff --git a/static/css/scodoc.css b/static/css/scodoc.css index 875361b1c..7eebc65f8 100644 --- a/static/css/scodoc.css +++ b/static/css/scodoc.css @@ -1223,7 +1223,7 @@ ul.ue_inscr_list li.etud { } #grouplists table { - //border: 1px solid black; + /*border: 1px solid black;*/ border-spacing: 1px; } @@ -1236,7 +1236,9 @@ div.moduleimpl_tableaubord { padding: 7px; border: 2px solid gray; } - +span.moduleimpl_abs_link { + padding-right: 2em; +} .moduleimpl_evaluations_top_links { font-size: 80%; margin-bottom: 3px;