[Scodoc-devel] [SVN] Scolar : [1540]

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Ven 29 Juil 15:46:36 CEST 2016


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160729/03f3bcda/attachment-0001.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/ZAbsences.py
===================================================================
--- branches/ScoDoc7/ZAbsences.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/ZAbsences.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -723,7 +723,7 @@
     def CalSelectWeek(self, year=None, REQUEST=None):
         "display calendar allowing week selection"
         if not year:
-            year = self.AnneeScolaire(REQUEST)
+            year = AnneeScolaire(REQUEST)
         sems = sco_formsemestre.do_formsemestre_list(self)
         if not sems:
             js = ''
@@ -763,7 +763,7 @@
         """return list of mondays (ISO dates), from september to june
         """
         if not year:
-            year = self.AnneeScolaire(REQUEST)
+            year = AnneeScolaire(REQUEST)
         d = ddmmyyyy( '1/9/%d' % year, work_saturday=self.is_work_saturday() )
         while d.weekday != 0:
             d = d.next()
@@ -1385,7 +1385,7 @@
         # check etudid
         etuds = self.getEtudInfo(etudid=etudid, code_nip=code_nip, REQUEST=REQUEST,filled=True)        
         if not etuds:
-            return self.log_unknown_etud(REQUEST=REQUEST)
+            return log_unknown_etud(self, REQUEST=REQUEST)
         etud = etuds[0]
         # check dates
         begin_date = ParseDateTimeUTC(begin) # may raises ValueError
@@ -1493,7 +1493,7 @@
         """
         etuds = self.getEtudInfo(etudid=etudid, filled=1, REQUEST=REQUEST)
         if not etuds:
-            return self.log_unknown_etud(format=format, REQUEST=REQUEST)
+            return log_unknown_etud(self, format=format, REQUEST=REQUEST)
         
         etud = etuds[0]
         cnx = self.GetDBConnexion()

Modified: branches/ScoDoc7/ZScolar.py
===================================================================
--- branches/ScoDoc7/ZScolar.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/ZScolar.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -91,6 +91,7 @@
 import sco_groups_edit
 import sco_up_to_date
 import sco_edt_cal
+import sco_dept
 
 from VERSION import SCOVERSION, SCONEWS
 
@@ -228,38 +229,8 @@
             role_name = role_type + DeptId
             DeptRoles.append( role_name )
         return DeptRoles
-
-    security.declareProtected(ScoView, 'essaiform')
-    def essaiform(self,REQUEST=None):
-        """essai autocompletion"""
-        H = [ self.sco_header(REQUEST, javascripts=['libjs/AutoSuggest.js'],
-                              cssstyles=['css/autosuggest_inquisitor.css'],
-                              bodyOnLoad="initform()"),
-              """<form method="get" action="essai">
-              <input type="text" style="width: 200px" id="testinput_c" value=""/>
-              <input type="text" disabled="disabled" id="testinput" name="x" value=""/>
-              <input type="submit" value="submit" />
-              </form>
-              
-              <script type="text/javascript">
-              function update_field(o) {
-              document.getElementById('testinput').value = o.info;
-              }
-              function initform() {
-              var options = {
-              script: "Users/get_userlist_xml?",
-              varname: "start",
-              json: false,
-              maxresults: 35,
-              timeout:4000,
-              callback:update_field
-              };
-              var as = new bsn.AutoSuggest('testinput_c', options);
-              }
-              </script>
-              """]
-        return '\n'.join(H) + self.sco_footer(REQUEST)
     
+    
     security.declareProtected(ScoView, 'essai')
     def essai(self, x='', REQUEST=None):
         """essai: header / body / footer"""
@@ -360,37 +331,14 @@
     #    GESTION DE LA BD
     #
     # --------------------------------------------------------------------
-    security.declareProtected('Change DTML Documents', 'GetDBConnexionString')    
+    security.declareProtected(ScoSuperAdmin, 'GetDBConnexionString')    
     def GetDBConnexionString(self):
         # should not be published (but used from contained classes via acquisition)
         return self._db_cnx_string
 
-    security.declareProtected('Change DTML Documents', 'GetDBConnexion')
+    security.declareProtected(ScoSuperAdmin, 'GetDBConnexion')
     GetDBConnexion = notesdb.GetDBConnexion
-    #    def GetDBConnexion(self, autocommit=True):
-    #    # should not be published (but used from contained classes via acquisition)
-    #    
-    #    if not getattr(self, '_zscolar_initialized', False):
-    #        self.initialize()
-    #    cnx = self._pg_pool.getconn(key=(thread.get_ident(),autocommit))
-    #    cnx.autocommit = autocommit
-    #    # self.DB().encoding = 'LATIN1' # necessaire car anciennes installs en utf-8
-    #    return cnx
 
-
-    security.declareProtected(ScoView, "TrivialFormulator")
-    def TrivialFormulator(self, form_url, values, formdescription=(), initvalues={},
-                          method='POST', submitlabel='OK', formid='tf',
-                          cancelbutton=None,
-                          readonly=False ):
-        "generator/validator of simple forms"
-        # obsolete, still used by dtml/entreprises old code...
-        return TrivialFormulator(
-            form_url, values,
-            formdescription=formdescription,
-            initvalues=initvalues,
-            method=method, submitlabel=submitlabel, formid=formid,
-            cancelbutton=cancelbutton, readonly=readonly )
     # --------------------------------------------------------------------
     #
     #    SCOLARITE (top level)
@@ -408,11 +356,6 @@
         H.append( "<h2>Dernières évolutions</h2>" + SCONEWS )
         H.append( '<div class="about-logo">' + icontag('borgne_img') + ' <em>Au pays des aveugles...</em></div>' )
         d = ''
-        # debug
-        #import locale
-        #g='gonÇalves'
-        # 
-        #d = "<p>locale=%s, g=%s -> %s</p>"% (locale.getlocale(), g, g.lower() )
         return self.sco_header(REQUEST)+ '\n'.join(H) + d + self.sco_footer(REQUEST)
     
     security.declareProtected(ScoView, 'ScoErrorResponse')
@@ -432,35 +375,7 @@
             return 'undefined' # XXX voir quoi faire en cas d'erreur json
         else:
             raise ValueError('ScoErrorResponse: invalid format')
-
-    security.declareProtected(ScoView, 'AnneeScolaire')
-    def AnneeScolaire(self, REQUEST=None):
-        "annee de debut de l'annee scolaire courante"
-        if REQUEST and REQUEST.form.has_key('sco_year'):
-            year = REQUEST.form['sco_year']
-            try:
-                year = int(year)
-                if year > 1900 and year < 2999:
-                    return year
-            except:
-                pass
-        t = time.localtime()
-        year, month = t[0], t[1]
-        if month < 8: # le "pivot" est le 1er aout
-            year = year - 1
-        return year
-
-    security.declareProtected(ScoView, 'DateISO2DDMMYYYY')
-    def DateISO2DDMMYYYY(self,isodate):
-        "Convert  date from ISO string to dd/mm/yyyy"
-        # was a Python Script. Still used by some old dtml code.
-        return DateISOtoDMY(isodate)
     
-    security.declareProtected(ScoView, 'DateDDMMYYYY2ISO')
-    def DateDDMMYYYY2ISO(self,dmy):
-        "Check date and convert to ISO string"
-        return DateDMYtoISO(dmy)
-
     # XXX essai XXX
     # security.declareProtected(ScoView, 'essai_cas')
     # essai_cas = essai_cas.essai_cas
@@ -501,7 +416,7 @@
     
     security.declareProtected(ScoView, 'doc_preferences')
     def doc_preferences(self, REQUEST):
-        """Liste preferences for wiki documentation"""
+        """List preferences for wiki documentation"""
         return sco_preferences.doc_preferences(self)
     
     # --------------------------------------------------------------------
@@ -546,154 +461,13 @@
         cursor.execute("select * from scolog where etudid=%(etudid)s ORDER BY DATE DESC",
                        {'etudid':etudid})
         return cursor.dictfetchall()
-    #
-    security.declareProtected(ScoView, 'getZopeUsers')
-    def getZopeUsers(self):
-        "liste des utilisateurs zope"
-        l = self.acl_users.getUserNames()
-        l.sort()
-        return l
-
+    
     # ----------  PAGE ACCUEIL (listes) --------------
     security.declareProtected(ScoView, 'index_html')
-    def index_html(self,REQUEST=None, showcodes=0, showlocked=0):
-        "Page accueil département (liste des semestres)"
-        showlocked=int(showlocked)
-        H = []
-
-        # News:
-        rssicon = icontag('rssicon_img', title='Flux RSS', border='0') 
-        H.append( sco_news.scolar_news_summary_html(self, rssicon=rssicon) )
-
-        # Avertissement de mise à jour:
-        H.append(sco_up_to_date.html_up_to_date_box(self))
-
-        # Liste de toutes les sessions:
-        sems = sco_formsemestre.do_formsemestre_list(self)
-        now = time.strftime( '%Y-%m-%d' )
-
-        cursems = []   # semestres "courants"
-        othersems = [] # autres (verrouillés)
-        # icon image:
-        groupicon = icontag('groupicon_img', title="Inscrits", border='0') 
-        emptygroupicon = icontag('emptygroupicon_img', title="Pas d'inscrits", border='0')
-        lockicon = icontag('lock32_img', title="verrouillé", border='0')
-        # selection sur l'etat du semestre
-        for sem in sems:
-            if sem['etat'] == '1':
-                sem['lockimg'] = ''
-                cursems.append(sem)
-            else:
-                sem['lockimg'] = lockicon
-                othersems.append(sem)
-            # Responsable de formation:
-            sco_formsemestre.sem_set_responsable_name(self, sem)
-            
-            if showcodes=='1':
-                sem['tmpcode'] = '<td><tt>%s</tt></td>' % sem['formsemestre_id']
-            else:
-                sem['tmpcode'] = ''
-            # Nombre d'inscrits:
-            args = { 'formsemestre_id' : sem['formsemestre_id'] }
-            ins = self.Notes.do_formsemestre_inscription_list( args=args )
-            nb = len(ins) # nb etudiants
-            sem['nb_inscrits'] = nb
-            if nb > 0:
-                sem['groupicon'] = groupicon
-            else:
-                sem['groupicon'] = emptygroupicon
-
-        # s'il n'y a pas d'utilisateurs dans la base, affiche message
-        if not self.Users.get_userlist():
-            H.append("""<h2>Aucun utilisateur défini !</h2><p>Pour définir des utilisateurs
-            <a href="Users">passez par la page Utilisateurs</a>.
-            <br/>
-            Définissez au moins un utilisateur avec le rôle AdminXXX (le responsable du département XXX).
-            </p>
-            """)
-        
-        # liste des formsemestres "courants"
-        if cursems:
-            H.append('<h2 class="listesems">Sessions en cours</h2>')
-            H.append(self._sem_table(cursems))
-        
-        else:
-            # aucun semestre courant: affiche aide
-            H.append("""<h2 class="listesems">Aucune session en cours !</h2>
-            <p>Pour ajouter une session, aller dans <a href="Notes">Programmes</a>,
-            choisissez une formation, puis suivez le lien "<em>UE, modules, semestres</em>".
-            </p><p>
-            Là, en bas de page, suivez le lien
-            "<em>Mettre en place un nouveau semestre de formation...</em>"
-            </p>""")
-        
-        if othersems and showlocked:
-            H.append("""<hr/>
-            <h2>Sessions terminées (non modifiables)</h2>
-            """)            
-            H.append(self._sem_table(othersems))
-            H.append('</table>')
-        if not showlocked:
-            H.append('<hr/><p><a href="%s?showlocked=1">Montrer les sessions verrouillées</a></p>' % REQUEST.URL0)
-        H.append("""<p><form action="Notes/view_formsemestre_by_etape">
-    Chercher étape courante: <input name="etape_apo" type="text" size="8"></input>    
-        </form
-        </p>
-        """)
-        #
-        authuser = REQUEST.AUTHENTICATED_USER
-        if authuser.has_permission(ScoEtudInscrit,self):
-            H.append("""<hr>
-            <h3>Gestion des étudiants</h3>
-            <ul>
-            <li><a class="stdlink" href="etudident_create_form">créer <em>un</em> nouvel étudiant</a></li>
-            <li><a class="stdlink" href="form_students_import_excel">importer de nouveaux étudiants</a> (ne pas utiliser sauf cas particulier, utilisez plutôt le lien dans
-            le tableau de bord semestre si vous souhaitez inscrire les
-            étudiants importés à un semestre)</li>
-            </ul>
-            """)
-        #
-        if authuser.has_permission(ScoEditApo,self) and True:  # disabled during devel
-            H.append("""<hr>
-            <h3>Exports Apogée</h3>
-            <ul>
-            <li><a class="stdlink" href="Notes/semset_page">Années scolaires / exports Apogée</a></li>
-            </ul>
-            """)
-        #
-        return self.sco_header(REQUEST)+'\n'.join(H)+self.sco_footer(REQUEST)
-
-    def _sem_table(self, sems):
-        tmpl = """<tr class="%(trclass)s">%(tmpcode)s
-        <td class="semicon">%(lockimg)s <a href="Notes/formsemestre_status?formsemestre_id=%(formsemestre_id)s#groupes">%(groupicon)s</a></td>        
-        <td class="datesem">%(mois_debut)s</td><td class="datesem"><a title="%(session_id)s">-</a> %(mois_fin)s</td>
-        <td><a class="stdlink" href="Notes/formsemestre_status?formsemestre_id=%(formsemestre_id)s">%(titre_num)s</a>
-        <span class="respsem">(%(responsable_name)s)</span>
-        </td>
-        </tr>
-        """
-
-        # Liste des semestres, groupés par modalités
-        sems_by_mod, modalites = sco_modalites.group_sems_by_modalite(self, sems)
-        
-        H = ['<table class="listesems">']
-        for modalite in modalites:
-            if len(modalites) > 1:
-                H.append('<tr><th colspan="4">%s</th></tr>' % modalite['titre'])
-
-            if sems_by_mod[modalite['modalite']]:
-                cur_idx = sems_by_mod[modalite['modalite']][0]['semestre_id']
-                for sem in sems_by_mod[modalite['modalite']]:
-                    if cur_idx != sem['semestre_id']:
-                        sem['trclass'] = 'firstsem' # separe les groupes de semestres
-                        cur_idx = sem['semestre_id']
-                    else:
-                        sem['trclass'] = ''
-                    H.append( tmpl % sem )
-        H.append('</table>')
-        return '\n'.join(H)
+    index_html = sco_dept.index_html
     
-    security.declareProtected(ScoView, 'index_html')
+    
+    security.declareProtected(ScoView, 'rssnews')
     def rssnews(self,REQUEST=None):
         "rss feed"
         REQUEST.RESPONSE.setHeader('content-type', XML_MIMETYPE)
@@ -836,16 +610,6 @@
         if filled:
             self.fillEtudsInfo(etud)
         return etud
-
-    security.declareProtected(ScoView, 'log_unknown_etud')
-    def log_unknown_etud(self, REQUEST=None, format='html'):
-        """Log request: cas ou getEtudInfo n'a pas ramene de resultat"""
-        etudid = REQUEST.form.get('etudid', '?')
-        code_nip = REQUEST.form.get('code_nip', '?')
-        code_ine = REQUEST.form.get('code_ine', '?')
-        log("unknown student: etudid=%s code_nip=%s code_ine=%s"
-            % (etudid, code_nip, code_ine))
-        return self.ScoErrorResponse( 'unknown student', format=format, REQUEST=REQUEST)
     
     security.declareProtected(ScoView, "search_etud_in_dept")
     search_etud_in_dept = sco_find_etud.search_etud_in_dept

Modified: branches/ScoDoc7/notes_table.py
===================================================================
--- branches/ScoDoc7/notes_table.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/notes_table.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -131,7 +131,8 @@
     - identdict: { etudid : ident }
     - sem : le formsemestre
     get_table_moyennes_triees: [ (moy_gen, moy_ue1, moy_ue2, ... moy_ues, moy_mod1, ..., moy_modn, etudid) ] 
-    (où toutes les valeurs sont formatées (fmt_note), incluant les UE de sport
+    (où toutes les valeurs sont soit des nombrs soit des chaines spéciales comme 'NA', 'NI'), 
+    incluant les UE de sport
 
     - bonus[etudid] : valeur du bonus "sport".
 
@@ -236,10 +237,10 @@
             moy_ues = []
             for ue in self._ues:
                 moy_ue = ue_status[ue['ue_id']]['moy']
-                moy_ues.append(fmt_note(moy_ue))
+                moy_ues.append(moy_ue)
                 self.moy_ue[ue['ue_id']][etudid] = moy_ue
             
-            t = [fmt_note(moy_gen)] + moy_ues
+            t = [moy_gen] + moy_ues
             #
             is_cap = {} # ue_id : is_capitalized
             for ue in self._ues:
@@ -250,7 +251,7 @@
                 if is_cap[modimpl['module']['ue_id']]:
                     t.append('-c-')
                 else:
-                    t.append(fmt_note(val))
+                    t.append(val)
             #
             t.append(etudid)
             T.append(tuple(t))

Modified: branches/ScoDoc7/sco_abs_views.py
===================================================================
--- branches/ScoDoc7/sco_abs_views.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_abs_views.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -410,7 +410,7 @@
 <input type="text" name="fin" size="10" value="%s" class="datepicker"/>
 
 </td></tr></table>
-</form>""" % (context.AnneeScolaire(REQUEST), datetime.datetime.now().strftime('%d/%m/%Y')),
+</form>""" % (AnneeScolaire(REQUEST), datetime.datetime.now().strftime('%d/%m/%Y')),
           context.sco_footer(REQUEST)
           ]
     return '\n'.join(H)
@@ -449,9 +449,9 @@
     # crude portage from 1999 DTML
     etud = context.getEtudInfo(filled=1, REQUEST=REQUEST)[0]
     etudid = etud['etudid']
-    AnneeScolaire = int(context.AnneeScolaire(REQUEST))
-    datedebut = str(AnneeScolaire) +'-08-31'
-    datefin = str(AnneeScolaire+1) +'-07-31'
+    anneescolaire = int(AnneeScolaire(REQUEST))
+    datedebut = str(anneescolaire) +'-08-31'
+    datefin = str(anneescolaire+1) +'-07-31'
     nbabs = context.CountAbs(etudid=etudid, debut=datedebut, fin=datefin)
     nbabsjust = context.CountAbsJust(etudid=etudid, debut=datedebut, fin=datefin)
     events = []
@@ -461,7 +461,7 @@
         events.append( (str(a['jour']), 'A', '#EE0000', '', a['matin'], a['description'] ) )
     for a in context.ListeJustifs(etudid=etudid, datedebut=datedebut,only_no_abs=True):
         events.append( (str(a['jour']), 'X', '#8EA2C6', '', a['matin'], a['description'] ) )
-    CalHTML = ZAbsences.YearTable(context, AnneeScolaire, events=events, halfday=1 )
+    CalHTML = ZAbsences.YearTable(context, anneescolaire, events=events, halfday=1 )
     
     #
     H = [ context.sco_header(REQUEST,
@@ -482,12 +482,12 @@
 
           """<form method="GET" action="CalAbs" name="f">""",
           """<input type="hidden" name="etudid" value="%s"/>""" % etudid,
-          """Année scolaire %s-%s""" % (AnneeScolaire, AnneeScolaire+1),
+          """Année scolaire %s-%s""" % (anneescolaire, anneescolaire+1),
           """  Changer année: <select name="sco_year" onchange="document.f.submit()">"""
           ]
-    for y in range(AnneeScolaire, AnneeScolaire-10, -1):
+    for y in range(anneescolaire, anneescolaire-10, -1):
         H.append("""<option value="%s" """ % y )
-        if y == AnneeScolaire:
+        if y == anneescolaire:
              H.append('selected')
         H.append(""">%s</option>""" % y )
     H.append("""</select></form>""")
@@ -506,7 +506,7 @@
     En format 'text': texte avec liste d'absences (pour mails).
     """
     absjust_only = int(absjust_only) # si vrai, table absjust seule (export xls ou pdf)
-    datedebut = '%s-08-31' % context.AnneeScolaire(REQUEST)
+    datedebut = '%s-08-31' % AnneeScolaire(REQUEST)
     
     etud = context.getEtudInfo(etudid=etudid,filled=True)[0]
         

Modified: branches/ScoDoc7/sco_bulletins.py
===================================================================
--- branches/ScoDoc7/sco_bulletins.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_bulletins.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -225,7 +225,7 @@
         if ue['type'] != UE_SPORT:
             u['cur_moy_ue_txt'] = fmt_note(ue_status['cur_moy_ue'])            
         else:
-            u['cur_moy_ue_txt'] = 'bonus de %s points' % nt.bonus[etudid]
+            u['cur_moy_ue_txt'] = 'bonus de %s points' % fmt_note(nt.bonus[etudid])
         u['moy_ue_txt']  = fmt_note(ue_status['moy'])
         u['coef_ue_txt'] = fmt_coef(ue_status['coef_ue'])
         if dpv and dpv['decisions'][0]['decisions_ue'] and ue['ue_id'] in dpv['decisions'][0]['decisions_ue']:
@@ -560,7 +560,7 @@
         etud = context.getEtudInfo(filled=1, REQUEST=REQUEST)[0]
         etudid = etud['etudid']
     except:
-        return context.log_unknown_etud(REQUEST, format=format)
+        return log_unknown_etud(context, REQUEST, format=format)
     
     sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
 

Modified: branches/ScoDoc7/sco_bulletins_xml.py
===================================================================
--- branches/ScoDoc7/sco_bulletins_xml.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_bulletins_xml.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -152,7 +152,11 @@
                 titre=quote_xml_attr(ue['titre']),
                 code_apogee=quote_xml_attr(ue['code_apogee']) )
         doc._push()
-        doc.note( value=fmt_note(ue_status['cur_moy_ue']), 
+        if ue['type'] != UE_SPORT:
+            v = ue_status['cur_moy_ue']           
+        else:
+            v = nt.bonus[etudid]
+        doc.note( value=fmt_note(v), 
                   min=fmt_note(ue['min']), max=fmt_note(ue['max']) )
         doc._pop()
         try:

Modified: branches/ScoDoc7/sco_formsemestre.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_formsemestre.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -158,7 +158,7 @@
     si annee non specifiée, année scoalire courante
     """
     if not year:
-        year = context.AnneeScolaire(REQUEST)
+        year = AnneeScolaire(REQUEST)
     return ( ((sem['annee_debut'] == str(year)) and (sem['mois_debut_ord'] > 7))
              or ((sem['annee_debut'] == str(year+1)) and (sem['mois_debut_ord'] <= 7)))
 
@@ -249,7 +249,7 @@
         html_title = '''<h2>Semestres courants</h2>'''
     tab = table_formsemestres(context,
         list_formsemestre_by_etape(context, 
-                                   etape_apo=etape_apo, annee_scolaire=context.AnneeScolaire(REQUEST)),
+                                   etape_apo=etape_apo, annee_scolaire=AnneeScolaire(REQUEST)),
         html_title=html_title,
         html_next_section="""<form action="view_formsemestre_by_etape">
     Etape: <input name="etape_apo" type="text" size="8"></input>    

Modified: branches/ScoDoc7/sco_recapcomplet.py
===================================================================
--- branches/ScoDoc7/sco_recapcomplet.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_recapcomplet.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -315,7 +315,7 @@
         for ue in ues:
             i += 1
             if ue['type'] != UE_SPORT:
-                l.append( fmtnum(t[i]) ) # moyenne etud dans ue
+                l.append( fmtnum(fmt_note(t[i], keep_numeric=keep_numeric)) ) # moyenne etud dans ue
             else: # UE_SPORT:
                 # n'affiche pas la moyenne d'UE dans ce cas
                 if not hidemodules:
@@ -325,7 +325,7 @@
                 j = 0
                 for modimpl in modimpls:
                     if modimpl['module']['ue_id'] == ue['ue_id']:
-                        l.append( fmtnum(t[j+len(ues)+1]) ) # moyenne etud dans module
+                        l.append( fmtnum(fmt_note(t[j+len(ues)+1], keep_numeric=keep_numeric)) ) # moyenne etud dans module
                         if format == 'xlsall':
                             l += _list_notes_evals(context, mod_evals[modimpl['moduleimpl_id']], etudid)
                     j += 1
@@ -472,7 +472,12 @@
                 else:
                     cells = '<tr class="recap_row_odd" id="etudid%s">' % etudid
             ir += 1
-            nsn = [ x.replace('NA0', '-') for x in l[:-2] ] # notes sans le NA0
+            # XXX nsn = [ x.replace('NA0', '-') for x in l[:-2] ] 
+            # notes sans le NA0:
+            nsn = l[:-2] # copy
+            for i in range(len(nsn)):
+                if nsn[i] == 'NA0':
+                    nsn[i] = '-'
             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
@@ -578,7 +583,9 @@
         raise ValueError('unknown format %s' % format)
 
 def _list_notes_evals(context, evals, etudid):
-    """Liste des notes des evaluations completes de ce module"""
+    """Liste des notes des evaluations completes de ce module
+    (pour table xls avec evals)
+    """
     L = []
     for e in evals:
         if e['etat']['evalcomplete']:

Modified: branches/ScoDoc7/sco_semset.py
===================================================================
--- branches/ScoDoc7/sco_semset.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_semset.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -361,7 +361,7 @@
           ]
     H.append( tab.html() )
 
-    annee_courante = int(context.AnneeScolaire(REQUEST))
+    annee_courante = int(AnneeScolaire(REQUEST))
     menu_annee = '\n'.join([ '<option value="%s">%s</option>' % (i,i) for i in range(2014,annee_courante+1) ])
     
     H.append("""

Modified: branches/ScoDoc7/sco_utils.py
===================================================================
--- branches/ScoDoc7/sco_utils.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/sco_utils.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -28,8 +28,6 @@
 
 """ Common definitions
 """
-from VERSION import SCOVERSION
-import VERSION
 import pdb
 import os, sys, copy, re
 import pprint
@@ -51,6 +49,10 @@
 import jaxml
 
 import json
+
+from VERSION import SCOVERSION
+import VERSION
+
 from SuppressAccents import suppression_diacritics
 from sco_exceptions import *
 from sco_permissions import *
@@ -652,3 +654,28 @@
         data = ''
     
     return data
+
+def AnneeScolaire(REQUEST=None):
+    "annee de debut de l'annee scolaire courante"
+    if REQUEST and REQUEST.form.has_key('sco_year'):
+        year = REQUEST.form['sco_year']
+        try:
+            year = int(year)
+            if year > 1900 and year < 2999:
+                return year
+        except:
+            pass
+    t = time.localtime()
+    year, month = t[0], t[1]
+    if month < 8: # le "pivot" est le 1er aout
+        year = year - 1
+    return year
+
+def log_unknown_etud(context, REQUEST=None, format='html'):
+    """Log request: cas ou getEtudInfo n'a pas ramene de resultat"""
+    etudid = REQUEST.form.get('etudid', '?')
+    code_nip = REQUEST.form.get('code_nip', '?')
+    code_ine = REQUEST.form.get('code_ine', '?')
+    log("unknown student: etudid=%s code_nip=%s code_ine=%s"
+        % (etudid, code_nip, code_ine))
+    return context.ScoErrorResponse( 'unknown student', format=format, REQUEST=REQUEST)

Modified: branches/ScoDoc7/scolars.py
===================================================================
--- branches/ScoDoc7/scolars.py	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/scolars.py	2016-07-29 13:46:36 UTC (rev 1540)
@@ -174,7 +174,6 @@
             y = y + 1900
     return y
 
-
 _identiteEditor = EditableTable(
     'identite',
     'etudid',

Modified: branches/ScoDoc7/static/css/scodoc.css
===================================================================
--- branches/ScoDoc7/static/css/scodoc.css	2016-07-27 14:08:15 UTC (rev 1539)
+++ branches/ScoDoc7/static/css/scodoc.css	2016-07-29 13:46:36 UTC (rev 1540)
@@ -298,6 +298,46 @@
   margin-bottom: 0px;
 }
 
+table.semlist tr.gt_firstrow th {
+}
+
+table.semlist tr td {
+ border: none;
+}
+table.semlist tr a.stdlink, table.semlist tr a.stdlink:visited {
+ color: navy;
+ text-decoration: none;
+}
+
+table.semlist tr a.stdlink:hover {
+ color: red; 
+ text-decoration: underline;
+}
+
+table.semlist tr td.semestre_id {
+ text-align: right;
+}
+table.semlist tr td.modalite {
+ text-align: right;
+ padding-right: 1em;
+}
+div.gtrcontent table.semlist tr.css_S-1 {
+ background-color: rgb(251, 250, 216);
+}
+
+div.gtrcontent table.semlist tr.css_S1 {
+ background-color: rgb(92%,95%,94%);
+}
+div.gtrcontent table.semlist tr.css_S2 {
+ background-color: rgb(214, 223, 236);
+}
+div.gtrcontent table.semlist tr.css_S3 {
+ background-color: rgb(167, 216, 201);
+}
+div.gtrcontent table.semlist tr.css_S4 {
+ background-color: rgb(131, 225, 140);
+}
+
 /* ----- Liste des news ----- */
 
 div.news {


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