[scodoc-devel] [SVN] Scolar : [1774] Table delai correction des evaluations

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mer 14 Mar 17:36:42 CET 2018


Une pièce jointe HTML a été nettoyée...
URL: https://listes.univ-paris13.fr/pipermail/scodoc-devel/attachments/20180314/104ef241/attachment.htm 
-------------- section suivante --------------
Modified: branches/ScoDoc7/ZNotes.py
===================================================================
--- branches/ScoDoc7/ZNotes.py	2018-03-13 18:57:44 UTC (rev 1773)
+++ branches/ScoDoc7/ZNotes.py	2018-03-14 16:36:42 UTC (rev 1774)
@@ -257,6 +257,9 @@
 
     security.declareProtected(ScoView, 'formsemestre_evaluations_cal')
     formsemestre_evaluations_cal = sco_evaluations.formsemestre_evaluations_cal
+    security.declareProtected(ScoView, 'formsemestre_evaluations_delai_correction')
+    formsemestre_evaluations_delai_correction = sco_evaluations.formsemestre_evaluations_delai_correction
+    
     security.declareProtected(ScoView, 'module_evaluation_renumber')
     module_evaluation_renumber = sco_evaluations.module_evaluation_renumber
     security.declareProtected(ScoView, 'module_evaluation_move')

Modified: branches/ScoDoc7/sco_evaluations.py
===================================================================
--- branches/ScoDoc7/sco_evaluations.py	2018-03-13 18:57:44 UTC (rev 1773)
+++ branches/ScoDoc7/sco_evaluations.py	2018-03-14 16:36:42 UTC (rev 1774)
@@ -32,6 +32,7 @@
 from notes_log import log, logCallStack
 from sco_utils import *
 from notesdb import *
+from gen_tables import GenTable
 import sco_news
 import sco_formsemestre
 import sco_groups
@@ -252,7 +253,9 @@
         'gr_moyennes' : gr_moyennes,
         'groups' : groups,
         'evalcomplete' : complete,
-        'evalattente' : evalattente }
+        'evalattente' : evalattente,
+        'is_malus' : is_malus
+        }
 
 
 def do_evaluation_list_in_sem(context, formsemestre_id):
@@ -447,9 +450,99 @@
           <li>en <span style="background-color: %s">vert</span> les évaluations déjà notées</li>
           <li>en <span style="background-color: %s">bleu</span> les évaluations futures</li></ul></p>"""
           % (color_incomplete, color_complete, color_futur),
+          """<p><a href="formsemestre_evaluations_delai_correction?formsemestre_id=%s" class="stdlink">voir les délais de correction</a></p>
+          """ % (formsemestre_id,),
           context.sco_footer(REQUEST) ]
     return '\n'.join(H)
 
+def evaluation_date_first_completion(context, evaluation_id):
+    """Première date à laquelle l'évaluation a été complète
+    ou None si actuellement incomplète
+    """    
+    etat = do_evaluation_etat(context, evaluation_id)
+    if not etat['evalcomplete']:
+        return None
+    
+    E = context.do_evaluation_list( args={ 'evaluation_id' : evaluation_id } )[0]
+    M = context.do_moduleimpl_list( args={ 'moduleimpl_id' : E['moduleimpl_id']})[0]
+    formsemestre_id = M['formsemestre_id']
+    
+     # Il faut considerer les inscriptions au semestre
+    # (pour avoir l'etat et le groupe) et aussi les inscriptions
+    # au module (pour gerer les modules optionnels correctement)
+    insem = context.do_formsemestre_inscription_listinscrits(formsemestre_id)
+    insmod = context.do_moduleimpl_inscription_list(
+        args={ 'moduleimpl_id' : E['moduleimpl_id'] } )
+    insmodset = Set( [ x['etudid'] for x in insmod ] )
+    # retire de insem ceux qui ne sont pas inscrits au module
+    ins = [ i for i in insem if i['etudid'] in insmodset ]
+
+
+    notes = context._notes_getall(evaluation_id, filter_suppressed=False).values()
+    notes_log = context._notes_getall(evaluation_id, filter_suppressed=False, table='notes_notes_log').values()
+    date_premiere_note = {} # etudid : date
+    for note in notes + notes_log:
+        etudid = note['etudid']
+        if etudid in date_premiere_note:
+            date_premiere_note[etudid] = min(note['date'], date_premiere_note[etudid])
+        else:
+            date_premiere_note[etudid] = note['date']
+    # complet au moment du max (date la plus tardive) des premieres dates de saisie
+    return max( date_premiere_note.values() )
+
+def formsemestre_evaluations_delai_correction(context, formsemestre_id, REQUEST=None):
+    """Experimental: un tableau indiquant pour chaque évaluation
+    le nombre de jours avant la publication des notes.
+
+    N'indique pas les évaluations de ratrapage ni celles des modules de bonus/malus.
+    """
+    sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
+    nt = context._getNotesCache().get_NotesTable(context, formsemestre_id) #> liste evaluations
+    
+    evals = nt.get_sem_evaluation_etat_list()
+    T = []
+    for e in evals:
+        M = context.do_moduleimpl_list( args={ 'moduleimpl_id' : e['moduleimpl_id']})[0]
+        Mod = context.do_module_list( args={ 'module_id' : M['module_id'] } )[0]
+        if (e['evaluation_type'] != EVALUATION_NORMALE) or (Mod['module_type'] == MODULE_MALUS):
+            continue
+        e['date_first_complete'] = evaluation_date_first_completion(context, e['evaluation_id'])
+        if e['date_first_complete']:
+            e['delai_correction'] = (e['date_first_complete'].date() - e['jour']).days
+        else:
+            e['delai_correction'] = None
+        
+        e['module_code'] = Mod['code']
+        e['_module_code_target'] = 'moduleimpl_status?moduleimpl_id=' + M['moduleimpl_id']
+        e['module_titre'] = Mod['titre']
+        e['responsable_id'] = M['responsable_id']
+        e['responsable_nomplogin'] = context.Users.user_info(M['responsable_id'])['nomplogin']
+        e['_jour_target'] = 'evaluation_listenotes?evaluation_id=' + e['evaluation_id']
+        T.append(e)
+    
+    columns_ids=('module_code', 'module_titre', 'responsable_nomplogin', 'jour',
+                 'date_first_complete', 'delai_correction', 'description' )
+    titles = {
+        'module_code' : 'Code',
+        'module_titre' : 'Module',
+        'responsable_nomplogin' : 'Responsable',
+        'jour' : 'Date',
+        'date_first_complete' : 'Fin saisie',
+        'delai_correction' : 'Délai',
+        'description' : 'Description',
+        }
+    tab = GenTable(
+        titles=titles, columns_ids=columns_ids, rows=T, 
+        html_class='table_leftalign table_coldate',
+        html_sortable=True, 
+        html_title="<h2>Correction des évaluations du semestre</h2>",
+        caption="Correction des évaluations du semestre",
+        preferences=context.get_preferences(formsemestre_id),
+        origin = 'Généré par %s le ' % VERSION.SCONAME + timedate_human_repr() + '',
+        )
+    return tab.make_page(context, REQUEST=REQUEST)
+        
+    
 def module_evaluation_insert_before(context, ModEvals, next_eval, REQUEST):
     """Renumber evals such that an evaluation with can be inserted before next_eval
     Returns numero suitable for the inserted evaluation


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