[Scodoc-devel] [SVN] Scolar : [1246] - amelioration table recap complet ( lignes recap en bas du tableau dans le bon ordre);

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mer 19 Juin 13:02:17 CEST 2013


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20130619/4d16dcfd/attachment.html>
-------------- section suivante --------------
Modified: trunk/notes_table.py
===================================================================
--- trunk/notes_table.py	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/notes_table.py	2013-06-19 11:02:17 UTC (rev 1246)
@@ -131,7 +131,7 @@
 
         self.bonus = DictDefault(defaultvalue=0)
         # Notes dans les modules  { moduleimpl_id : { etudid: note_moyenne_dans_ce_module } }
-        self._modmoys, self._modimpls, valid_evals, mods_att, self.expr_diagnostics =\
+        self._modmoys, self._modimpls, self._valid_evals_per_mod, valid_evals, mods_att, self.expr_diagnostics =\
             sco_compute_moy.do_formsemestre_moyennes(context, formsemestre_id)
         self._mods_att = mods_att # liste des modules avec des notes en attente
         self._matmoys = {} # moyennes par matieres
@@ -388,7 +388,9 @@
         else:
             moy, min_note, max_note = 'NA', '-', '-'
         s = { 'moy' : moy, 'max' : max_note, 'min' : min_note,
-              'nb_notes' : nb_notes, 'nb_missing' : nb_missing }
+              'nb_notes' : nb_notes, 'nb_missing' : nb_missing,
+              'nb_valid_evals' : len(self._valid_evals_per_mod[moduleimpl_id])
+              }
         self.moduleimpl_stats[moduleimpl_id] = s
         return s
     

Modified: trunk/sco_bulletins.py
===================================================================
--- trunk/sco_bulletins.py	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/sco_bulletins.py	2013-06-19 11:02:17 UTC (rev 1246)
@@ -517,10 +517,12 @@
 
 
 # ------ Page bulletin
-def formsemestre_bulletinetud(context, etudid=None, formsemestre_id=None,
-                              format='html', version='long',
-                              xml_with_decisions=False,
-                              REQUEST=None):
+def formsemestre_bulletinetud(
+        context, etudid=None, formsemestre_id=None,
+        format='html', version='long',
+        xml_with_decisions=False,
+        force_publishing=False, # force publication meme si semestre non publie sur "portail"
+        REQUEST=None):
     "page bulletin de notes"
     try:
         etud = context.getEtudInfo(filled=1, REQUEST=REQUEST)[0]
@@ -538,6 +540,7 @@
     R.append( do_formsemestre_bulletinetud(context, formsemestre_id, etudid,
                                            format=format, version=version,
                                            xml_with_decisions=xml_with_decisions,
+                                           force_publishing=force_publishing,
                                            REQUEST=REQUEST)[0])
     
     if format == 'html' or format == 'pdfmail':
@@ -578,7 +581,8 @@
                                  format='html',
                                  REQUEST=None,
                                  nohtml=False,
-                                 xml_with_decisions=False # force decisions dans XML
+                                 xml_with_decisions=False, # force decisions dans XML
+                                 force_publishing=False # force publication meme si semestre non publie sur "portail"
                                  ):
     """G\xE9n\xE8re le bulletin au format demand\xE9.
     Retourne: (bul, filigranne)
@@ -588,13 +592,15 @@
     if format == 'xml':        
         bul = repr(sco_bulletins_xml.make_xml_formsemestre_bulletinetud(
             context, formsemestre_id,  etudid, REQUEST=REQUEST,
-            xml_with_decisions=xml_with_decisions, version=version))
+            xml_with_decisions=xml_with_decisions, force_publishing=force_publishing,
+            version=version))
         return bul, ''
     
     elif format == 'json':
         bul = sco_bulletins_json.make_json_formsemestre_bulletinetud(
             context, formsemestre_id,  etudid, REQUEST=REQUEST,
-            xml_with_decisions=xml_with_decisions, version=version)
+            xml_with_decisions=xml_with_decisions, force_publishing=force_publishing,
+            version=version)
         return bul, ''
     
     I = formsemestre_bulletinetud_dict(context, formsemestre_id, etudid, REQUEST=REQUEST)

Modified: trunk/sco_bulletins_json.py
===================================================================
--- trunk/sco_bulletins_json.py	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/sco_bulletins_json.py	2013-06-19 11:02:17 UTC (rev 1246)
@@ -49,11 +49,15 @@
 
 def make_json_formsemestre_bulletinetud(
         context, formsemestre_id,  etudid, REQUEST=None,
-        xml_with_decisions=False, version='long'):
+        xml_with_decisions=False, version='long',
+        force_publishing=False # force publication meme si semestre non publie sur "portail"
+        ):
     """Renvoie bulletin en chaine JSON"""
     
     d = formsemestre_bulletinetud_published_dict(
-        context, formsemestre_id,  etudid, REQUEST=REQUEST,
+        context, formsemestre_id,  etudid,
+        force_publishing=force_publishing,
+        REQUEST=REQUEST,
         xml_with_decisions=xml_with_decisions, version=version)
     
     if REQUEST:

Modified: trunk/sco_compute_moy.py
===================================================================
--- trunk/sco_compute_moy.py	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/sco_compute_moy.py	2013-06-19 11:02:17 UTC (rev 1246)
@@ -283,16 +283,18 @@
     # recupere les moyennes des etudiants de tous les modules
     D = {}
     valid_evals = []
+    valid_evals_per_mod = {} # { moduleimpl_id : eval }
     mods_att = []
     expr_diags = []
     for mod in mods:
-        assert not D.has_key(mod['moduleimpl_id'])
-        D[mod['moduleimpl_id']], valid_evals_mod, attente, expr_diag =\
-            do_moduleimpl_moyennes(context, mod)
+        moduleimpl_id = mod['moduleimpl_id']
+        assert not D.has_key(moduleimpl_id)
+        D[moduleimpl_id], valid_evals_mod, attente, expr_diag = do_moduleimpl_moyennes(context, mod)
+        valid_evals_per_mod[moduleimpl_id] = valid_evals_mod
         valid_evals += valid_evals_mod
         if attente:
             mods_att.append(mod)
         if expr_diag:
             expr_diags.append(expr_diag)
     #
-    return D, mods, valid_evals, mods_att, expr_diags
+    return D, mods, valid_evals_per_mod, valid_evals, mods_att, expr_diags

Modified: trunk/sco_recapcomplet.py
===================================================================
--- trunk/sco_recapcomplet.py	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/sco_recapcomplet.py	2013-06-19 11:02:17 UTC (rev 1246)
@@ -313,7 +313,7 @@
                 l += [ '' ] # rangs dans les groupes
         for ue in ues:
             if ue['type'] != UE_SPORT:
-                if key == 'coef':
+                if key == 'coef' or key == 'nb_valid_evals':
                     l.append('')
                 else:
                     l.append( fmt_note(ue[key], keep_numeric=keep_numeric) ) 
@@ -331,18 +331,25 @@
                                 coef = str(coef)
                             l.append(coef)
                         else:
-                            l.append(fmt_note(mods_stats[modimpl['moduleimpl_id']][key],
-                                              keep_numeric=keep_numeric)) # moyenne du module
+                            val = mods_stats[modimpl['moduleimpl_id']][key]
+                            if key == 'nb_valid_evals':
+                                if format[:3] != 'xls': # garde val numerique pour excel
+                                    val = str(val)
+                            else: # moyenne du module
+                                val = fmt_note(val, keep_numeric=keep_numeric)
+                            l.append(val) 
+                            
                         if format == 'xlsall':
                             l += _list_notes_evals_stats(context, mod_evals[modimpl['moduleimpl_id']], key)
         if modejury:
             l.append('') # case vide sur ligne "Moyennes"
         F.append(l + ['', ''] ) # ajoute cellules code_nip et etudid inutilisees ici
     
-    add_bottom_stat( 'moy', 'Moyennes', corner_value=fmt_note(nt.moy_moy, keep_numeric=keep_numeric) )
     add_bottom_stat( 'min', 'Min')
     add_bottom_stat( 'max', 'Max')
+    add_bottom_stat( 'moy', 'Moyennes', corner_value=fmt_note(nt.moy_moy, keep_numeric=keep_numeric) )
     add_bottom_stat( 'coef', 'Coef')
+    add_bottom_stat( 'nb_valid_evals', 'Nb \xE9vals')
     
     # Generation table au format demand\xE9
     if format == 'html':
@@ -391,10 +398,12 @@
             if i == 0: # Rang: force tri numerique pour sortable
                 cls = cls + ' sortnumeric'
             if cod2mod.has_key(F[0][i]): # lien vers etat module
-                cells += '<td class="%s"><a href="moduleimpl_status?moduleimpl_id=%s" title="%s">%s</a></td>' % (
+                mod = cod2mod[F[0][i]]
+                cells += '<td class="%s"><a href="moduleimpl_status?moduleimpl_id=%s" title="%s (%s)">%s</a></td>' % (
                     cls,
-                    cod2mod[F[0][i]]['moduleimpl_id'],
-                    cod2mod[F[0][i]]['module']['titre'],
+                    mod['moduleimpl_id'],
+                    mod['module']['titre'],
+                    context.Users.user_info(mod['responsable_id'])['nomcomplet'],
                     F[0][i])
             else:
                 cells += '<td class="%s">%s</td>' % (cls, F[0][i])
@@ -410,9 +419,10 @@
         nblines = len(F)-1
         for l in F[1:]:
             etudid = l[-1]
-            if ir >= nblines-4:
-                el = l[1] # derniere ligne
-                styl = ( 'recap_row_moy', 'recap_row_min', 'recap_row_max')[ir-nblines+3]
+            if ir >= nblines-5:
+                # dernieres lignes:
+                el = l[1] 
+                styl = ('recap_row_min', 'recap_row_max', 'recap_row_moy', 'recap_row_coef', 'recap_row_nbeval')[ir-nblines+5]
                 cells = '<tr class="%s sortbottom">' % styl
             else:
                 el = etudlink % { 'formsemestre_id' : formsemestre_id, 'etudid' : etudid, 'name' : l[1],
@@ -426,7 +436,7 @@
             cells += '<td class="recap_col">%s</td>' % nsn[0] # rang
             cells += '<td class="recap_col">%s</td>' % el # nom etud (lien)
             cells += '<td class="recap_col">%s</td>' % nsn[2] # group name
-            # grise si moyenne generale < barre
+            # Style si moyenne generale < barre
             cssclass = 'recap_col_moy'
             try:
                 if float(nsn[3]) < NOTES_BARRE_GEN:
@@ -442,7 +452,7 @@
                     ue = ues[ue_number]
                     ue_number += 1
                     
-                    if ir < nblines - 2:
+                    if ir == nblines - 1:
                         try:                            
                             if float(nsn[i]) < nt.parcours.get_barre_ue(ue['type']): # NOTES_BARRE_UE
                                 cssclass = 'recap_col_ue_inf'
@@ -452,6 +462,12 @@
                             pass
                 else:
                     cssclass = 'recap_col'
+                    if ir == nblines - 1: # si moyenne generale module < bare ue, surligne:
+                        try:
+                            if float(nsn[i]) < nt.parcours.get_barre_ue(ue['type']):
+                                cssclass = 'recap_col_moy_inf'
+                        except:
+                            pass
                 cells += '<td class="%s">%s</td>' % (cssclass,nsn[i])
             if modejury and etudid:
                 decision_sem = nt.get_etud_decision_sem(etudid)
@@ -470,7 +486,7 @@
                     cells += ''' <a href="#" onclick="va_saisir('%s', '%s')">%s</a>''' % (formsemestre_id, etudid, act)
                 cells += '</td>'
             H.append( cells + '</tr>' )
-            #H.append( '<tr><td class="recap_col">%s</td><td class="recap_col">%s</td><td class="recap_col">' % (l[0],el) +  '</td><td class="recap_col">'.join(nsn) + '</td></tr>')
+        
         H.append( ligne_titres )
         H.append('</table>')
         

Modified: trunk/static/css/scodoc.css
===================================================================
--- trunk/static/css/scodoc.css	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/static/css/scodoc.css	2013-06-19 11:02:17 UTC (rev 1246)
@@ -1066,17 +1066,22 @@
    border-bottom: 1px solid black;
 }
 }
-tr.recap_row_moy {
+tr.recap_row_min {
    border-top: 1px solid blue;
-   font-weight: bold;
 }
 tr.recap_row_min, tr.recap_row_max {
    font-weight: normal;
    font-style: italic;
 }
-tr.recap_row_max {
-   border-bottom: 1px solid blue;
+tr.recap_row_coef {   
 }
+tr.recap_row_moy {
+    font-weight: bold;
+}
+tr.recap_row_nbeval {
+    border-bottom: 1px solid blue;
+    color: green;
+}
 td.recap_tit {
    font-weight: bold;
    text-align: left;

Modified: trunk/static/js/radar_bulletin.js
===================================================================
--- trunk/static/js/radar_bulletin.js	2013-06-18 05:20:41 UTC (rev 1245)
+++ trunk/static/js/radar_bulletin.js	2013-06-19 11:02:17 UTC (rev 1246)
@@ -33,7 +33,7 @@
           'moy' : 16 },
     ];
     */
-    var query = "formsemestre_bulletinetud?formsemestre_id=" + formsemestre_id + "&etudid=" + etudid + "&format=json&version=selectedevals"
+    var query = "formsemestre_bulletinetud?formsemestre_id=" + formsemestre_id + "&etudid=" + etudid + "&format=json&version=selectedevals&force_publishing=1"
     
     $.get( query, '',  function(bul){ 
         var notes = [];


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