[scodoc-devel] [SVN] Scolar : [1741] Ameliore affichage 1/ 2 journee absence sur formulaire saisie note

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Sam 23 Déc 15:43:42 CET 2017


Une pièce jointe HTML a été nettoyée...
URL: https://listes.univ-paris13.fr/pipermail/scodoc-devel/attachments/20171223/fef5d21e/attachment.htm 
-------------- section suivante --------------
Modified: branches/ScoDoc7/ZAbsences.py
===================================================================
--- branches/ScoDoc7/ZAbsences.py	2017-12-22 20:14:31 UTC (rev 1740)
+++ branches/ScoDoc7/ZAbsences.py	2017-12-23 14:43:42 UTC (rev 1741)
@@ -441,7 +441,9 @@
 
     security.declareProtected(ScoView, 'CountAbs')
     def CountAbs(self, etudid, debut, fin, matin=None, moduleimpl_id=None):
-        "CountAbs"
+        """CountAbs
+        matin= 1 ou 0.
+        """
         if matin != None:
             matin = _toboolean(matin)
             ismatin = ' AND A.MATIN = %(matin)s '

Modified: branches/ScoDoc7/ZNotes.py
===================================================================
--- branches/ScoDoc7/ZNotes.py	2017-12-22 20:14:31 UTC (rev 1740)
+++ branches/ScoDoc7/ZNotes.py	2017-12-23 14:43:42 UTC (rev 1741)
@@ -1774,15 +1774,13 @@
          'evaluation_type', 'numero' ),
          sortkey = 'numero desc, jour desc, heure_debut desc', # plus recente d'abord
          output_formators = { 'jour' : DateISOtoDMY,
-                             'heure_debut' : TimefromISO8601,
-                             'heure_fin'   : TimefromISO8601,
                              'visibulletin': str,
                              'publish_incomplete' : str,
                              'numero' : int_null_is_zero,
                              },
         input_formators  = { 'jour' : DateDMYtoISO,
-                             'heure_debut' : TimetoISO8601,
-                             'heure_fin'   : TimetoISO8601,
+                             'heure_debut' : TimetoISO8601, # converti par do_evaluation_list
+                             'heure_fin'   : TimetoISO8601, # converti par do_evaluation_list
                              'visibulletin': int,
                              'publish_incomplete' : int,
                              }
@@ -1942,11 +1940,22 @@
 
     security.declareProtected(ScoView, 'do_evaluation_list')
     def do_evaluation_list(self, args, sortkey=None ):
-        "List evaluations, sorted by numero (or most recent date first)."
+        """List evaluations, sorted by numero (or most recent date first).
+
+        Ajoute les champs:
+        'duree' : '2h30'
+        'matin' : 1 (commence avant 12:00) ou 0
+        'apresmidi' : 1 (termine après 12:00) ou 0
+        'descrheure' : ' de 15h00 à 16h30'
+        """
         cnx = self.GetDBConnexion()
         evals = self._evaluationEditor.list(cnx, args, sortkey=sortkey)
-        # calcule duree (chaine de car.) de chaque evaluation et ajoute jouriso
+        # calcule duree (chaine de car.) de chaque evaluation et ajoute jouriso, matin, apresmidi
         for e in evals:
+            heure_debut_dt = e['heure_debut']
+            heure_fin_dt = e['heure_fin']
+            e['heure_debut'] = TimefromISO8601(e['heure_debut'])
+            e['heure_fin'] = TimefromISO8601(e['heure_fin'])
             e['jouriso'] = DateDMYtoISO(e['jour'])
             heure_debut, heure_fin = e['heure_debut'], e['heure_fin']
             d = TimeDuration(heure_debut, heure_fin)
@@ -1963,6 +1972,15 @@
                 e['descrheure'] = ' de %s à %s' % (heure_debut, heure_fin)
             else:
                 e['descrheure'] = ''
+            # matin, apresmidi: utile pour se referer aux absences:
+            if heure_debut_dt < datetime.time(12,00):
+                e['matin'] = 1
+            else:
+                e['matin'] = 0
+            if heure_fin_dt > datetime.time(12,00):
+                e['apresmidi'] = 1
+            else:
+                e['apresmidi'] = 0
         
         return evals
 

Modified: branches/ScoDoc7/misc/createtables.sql
===================================================================
--- branches/ScoDoc7/misc/createtables.sql	2017-12-22 20:14:31 UTC (rev 1740)
+++ branches/ScoDoc7/misc/createtables.sql	2017-12-23 14:43:42 UTC (rev 1741)
@@ -522,10 +522,10 @@
 	description text,
 	note_max real,
 	coefficient real,
-    visibulletin integer default 1,
+	visibulletin integer default 1,
 	publish_incomplete integer default 0, -- prise en compte meme si incomplete
 	evaluation_type integer default 0, -- type d'evaluation: 0 normale, 1 rattrapage
-    numero int -- ordre de presentation (le plus petit numero est normalement la plus ancienne eval)
+	numero int -- ordre de presentation (le plus petit numero est normalement la plus ancienne eval)
 ) WITH OIDS;
 
 -- Les notes...

Modified: branches/ScoDoc7/sco_evaluations.py
===================================================================
--- branches/ScoDoc7/sco_evaluations.py	2017-12-22 20:14:31 UTC (rev 1740)
+++ branches/ScoDoc7/sco_evaluations.py	2017-12-23 14:43:42 UTC (rev 1741)
@@ -260,8 +260,8 @@
     Exemple:
     [ {
     'coefficient': 1.0,
- 'description': 'QCM et cas pratiques',
- 'etat': {'evalattente': False,
+    'description': 'QCM et cas pratiques',
+    'etat': {'evalattente': False,
           'evalcomplete': True,
           'evaluation_id': 'GEAEVAL82883',
           'gr_incomplets': [],
@@ -276,7 +276,8 @@
           'groups': {'GEAG266762': {'etudid': 'GEAEID80603',
                                     'group_id': 'GEAG266762',
                                     'group_name': None,
-                                    'partition_id': 'GEAP266761'}},
+                                    'partition_id': 'GEAP266761'}
+           },
           'last_modif': datetime.datetime(2015, 12, 3, 15, 15, 16),
           'median': '12.00',
           'moy': '11.84',
@@ -285,7 +286,8 @@
           'nb_inscrits': 166,
           'nb_neutre': 0,
           'nb_notes': 168,
-          'nb_notes_total': 169},
+          'nb_notes_total': 169
+  },
  'evaluation_id': 'GEAEVAL82883',
  'evaluation_type': 0,
  'heure_debut': datetime.time(8, 0),
@@ -306,7 +308,7 @@
     # etat de chaque evaluation:
     for r in res:
         r['jour'] = r['jour'] or datetime.date( 1900, 1, 1 ) # pour les comparaisons
-        r['etat'] = do_evaluation_etat(context, r['evaluation_id'])
+        r['etat'] = do_evaluation_etat(context, r['evaluation_id'])        
     
     return res
 

Modified: branches/ScoDoc7/sco_saisie_notes.py
===================================================================
--- branches/ScoDoc7/sco_saisie_notes.py	2017-12-22 20:14:31 UTC (rev 1740)
+++ branches/ScoDoc7/sco_saisie_notes.py	2017-12-23 14:43:42 UTC (rev 1741)
@@ -720,16 +720,29 @@
             {'etudid':etudid, 'formsemestre_id' : formsemestre_id})[0]
         # Groupes auxquels appartient cet étudiant:
         e['groups'] = sco_groups.get_etud_groups(context, etudid, sem)
-        # Information sur absence (ne tient pas compte de la demi-journée)
+        
+        # Information sur absence (tenant compte de la demi-journée)
         jour_iso = DateDMYtoISO(E['jour'])
-        nbabs = context.Absences.CountAbs(etudid, jour_iso, jour_iso)
-        nbabsjust = context.Absences.CountAbsJust(etudid, jour_iso, jour_iso)
-        e['absinfo'] = ''
-        if nbabs:
-            if nbabsjust:
-                e['absinfo'] = '<span class="sn_abs">absent justifié ce jour !</span>  '
-            else:
-                e['absinfo'] = '<span class="sn_abs">absent ce jour !</span>  '
+        warn_abs_lst = []
+        if E['matin']:
+            nbabs = context.Absences.CountAbs(etudid, jour_iso, jour_iso, matin=1)
+            nbabsjust = context.Absences.CountAbsJust(etudid, jour_iso, jour_iso, matin=1)
+            if nbabs:
+                if nbabsjust:
+                    warn_abs_lst.append( "absent justifié le matin !" )
+                else:
+                    warn_abs_lst.append( "absent le matin !" )
+        if E['apresmidi']:
+            nbabs = context.Absences.CountAbs(etudid, jour_iso, jour_iso, matin=0)
+            nbabsjust = context.Absences.CountAbsJust(etudid, jour_iso, jour_iso, matin=0)
+            if nbabs:
+                if nbabsjust:
+                    warn_abs_lst.append( "absent justifié l'après-midi !" )
+                else:
+                    warn_abs_lst.append( "absent l'après-midi !" )
+        
+        e['absinfo'] = '<span class="sn_abs">' + ' '.join(warn_abs_lst) + '</span>  '
+        
         # Note actuelle de l'étudiant:
         if NotesDB.has_key(etudid):
             e['val'] = _displayNote(NotesDB[etudid]['value'])


Plus d'informations sur la liste de diffusion scodoc-devel