[Scodoc-devel] [SVN] Scolar : [1519] - Export Apogee des notes moyennes de modules: ok

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Dim 10 Juil 15:14:42 CEST 2016


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160710/6c07e1c1/attachment.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/sco_apogee_csv.py
===================================================================
--- branches/ScoDoc7/sco_apogee_csv.py	2016-07-10 09:40:20 UTC (rev 1518)
+++ branches/ScoDoc7/sco_apogee_csv.py	2016-07-10 13:14:42 UTC (rev 1519)
@@ -95,7 +95,10 @@
 from notesdb import *
 from sco_utils import *
 
-APO_ENCODING = 'utf8' # encodage du fichier CSV Apogée (était 'ISO-8859-1' avant jul. 2016)
+APO_PORTAL_ENCODING = 'utf8' # encodage du fichier CSV Apogée (était 'ISO-8859-1' avant jul. 2016)
+APO_INPUT_ENCODING  = 'ISO-8859-1'
+APO_OUTPUT_ENCODING = APO_INPUT_ENCODING
+APO_DECIMAL_SEP = ',' # separateur décimal: virgule
 APO_SEP = '\t'
 APO_NEWLINE = '\r\n'
 
@@ -117,14 +120,14 @@
         }.get(code, 'DEF')
 
 def  _apo_fmt_note(note):
-    "Formatte une note pour Apogée"
+    "Formatte une note pour Apogée (séparateur décimal: ',')"
     if not note:
         return ''
     try:
         val = float(note)
     except ValueError:
         return ''
-    return '%3.2f' % val
+    return ('%3.2f' % val).replace('.', APO_DECIMAL_SEP)
 
 class StringIOFileLineWrapper(object):
     def __init__(self, data):
@@ -285,11 +288,11 @@
         modimpls = nt.get_modimpls()
         for modimpl in modimpls:
             if modimpl['module']['code_apogee'] == code:
-                n = nt.get_etud_mod_moy(moduleimpl_id, etudid)
+                n = nt.get_etud_mod_moy(modimpl['moduleimpl_id'], etudid)
                 if n != 'NI':
-                    return dict( N=_apo_fmt_note(n), B=20 )
+                    return dict( N=_apo_fmt_note(n), B=20, J='' )
                 else:
-                    return dict( N='', B=20 )
+                    return dict( N='', B=20, J='' )
         #
         return None # element Apogee non trouvé dans ce semestre
 
@@ -314,7 +317,7 @@
         if not data:
             raise ScoValueError('Fichier Apogée vide !')
         
-        data_utf8 = data.decode(APO_ENCODING).encode(SCO_ENCODING)
+        data_utf8 = data.decode(APO_INPUT_ENCODING).encode(SCO_ENCODING)
         f = StringIOFileLineWrapper(data_utf8) # pour traiter comme un fichier
          # check that we are at the begining of Apogee CSV
         line = f.readline().strip()
@@ -640,7 +643,7 @@
     log( logf.getvalue() ) # sortie aussi sur le log ScoDoc
 
     
-    csv_data = f.getvalue().decode(SCO_ENCODING).encode(APO_ENCODING)
+    csv_data = f.getvalue().decode(SCO_ENCODING).encode(APO_OUTPUT_ENCODING)
     
     # Create and return ZIP
     if not dest_zip:

Modified: branches/ScoDoc7/sco_etape_apogee.py
===================================================================
--- branches/ScoDoc7/sco_etape_apogee.py	2016-07-10 09:40:20 UTC (rev 1518)
+++ branches/ScoDoc7/sco_etape_apogee.py	2016-07-10 13:14:42 UTC (rev 1519)
@@ -91,6 +91,7 @@
 
 def apo_csv_store(context, csv_data, annee_scolaire, sem_id):
     """
+    csv_data: maquette content, as a string, encoding givne by APO_INPUT_ENCODING (latin-1, not utf8)
     annee_scolaire: int (2016)
     sem_id: 0 (année ?), 1 (premier semestre de l'année) ou 2 (deuxième semestre)
     :return: etape_apo du fichier CSV stocké

Modified: branches/ScoDoc7/sco_etape_apogee_view.py
===================================================================
--- branches/ScoDoc7/sco_etape_apogee_view.py	2016-07-10 09:40:20 UTC (rev 1518)
+++ branches/ScoDoc7/sco_etape_apogee_view.py	2016-07-10 13:14:42 UTC (rev 1519)
@@ -41,6 +41,7 @@
 import sco_etape_apogee
 import sco_apogee_csv
 import sco_portal_apogee
+from sco_apogee_csv import APO_PORTAL_ENCODING, APO_INPUT_ENCODING
 
 
 def apo_semset_maq_status(context, semset_id='', REQUEST=None):
@@ -213,7 +214,7 @@
     Certains de ces fichiers devront être importés dans Apogée.
     </p>
     </div>
-    ''' % (sco_apogee_csv.APO_ENCODING,) )
+    ''' % (APO_INPUT_ENCODING,) )
     H.append( context.sco_footer(REQUEST) )
     return '\n'.join(H)
 
@@ -380,6 +381,9 @@
     semset = sco_semset.SemSet(context, semset_id=semset_id)
     
     data = sco_portal_apogee.get_maquette_apogee(context, etape=etape_apo, annee_scolaire=semset['annee_scolaire'])
+    # here, data is utf8
+    # but we store and generate latin1 files, to ease further import in Apogée
+    data = data.decode(APO_PORTAL_ENCODING).encode(APO_INPUT_ENCODING)
     return view_apo_csv_store(context, semset_id, data=data, REQUEST=REQUEST)
 
 

Modified: branches/ScoDoc7/sco_semset.py
===================================================================
--- branches/ScoDoc7/sco_semset.py	2016-07-10 09:40:20 UTC (rev 1518)
+++ branches/ScoDoc7/sco_semset.py	2016-07-10 13:14:42 UTC (rev 1519)
@@ -211,8 +211,18 @@
             H.append(' <a class="stdlink" href="do_semset_remove_sem?semset_id=%s&formsemestre_id=%s">(supprimer)</a>' 
                      % (self['semset_id'], sem['formsemestre_id']))
             H.append('<br/>Etapes: <tt>%(etapes_apo_str)s</tt>, %(nbinscrits)s inscrits' % sem )
-            H.append('<br/>Elément Apogée année: <tt>%(elt_annee_apo)s</tt>' % sem )
-            H.append('<br/>Elément Apogée semestre: <tt>%(elt_sem_apo)s</tt>' % sem )
+            H.append('<br/>Elément Apogée année: ')
+            if sem['elt_annee_apo']:
+                H.append('<tt>%(elt_annee_apo)s</tt>' % sem )
+            else:
+                H.append('<span style="color: red;">manquant</span>')
+            
+            H.append('<br/>Elément Apogée semestre: ')
+            if sem['elt_sem_apo']:
+                H.append('<tt>%(elt_sem_apo)s</tt>' % sem )
+            else:
+                H.append('<span style="color: red;">manquant</span>')
+            
             H.append('</br><em>vérifier les semestres antécédents !</em>')
             H.append('</li>')
         


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