[Scodoc-devel] [SVN] Scolar : [1521] Export Apogee: meilleur traitement des cas avec reorientation entre les semestres de l' annee

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Lun 11 Juil 22:35:41 CEST 2016


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160711/e6f56889/attachment.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/misc/createtables.sql
===================================================================
--- branches/ScoDoc7/misc/createtables.sql	2016-07-10 17:21:51 UTC (rev 1520)
+++ branches/ScoDoc7/misc/createtables.sql	2016-07-11 20:35:40 UTC (rev 1521)
@@ -389,7 +389,7 @@
    semset_id text default notes_newid('NSS') PRIMARY KEY,
    title text,
    annee_scolaire int default NULL, -- 2016
-   sem_id int default NULL -- 0, 1, 2
+   sem_id int default NULL -- periode: 0, 1, 2
 ) WITH OIDS;
 
 CREATE TABLE notes_semset_formsemestre (

Modified: branches/ScoDoc7/sco_apogee_csv.py
===================================================================
--- branches/ScoDoc7/sco_apogee_csv.py	2016-07-10 17:21:51 UTC (rev 1520)
+++ branches/ScoDoc7/sco_apogee_csv.py	2016-07-11 20:35:40 UTC (rev 1521)
@@ -222,8 +222,14 @@
             for col_id in apo_data.col_ids[4:]:
                 code = apo_data.cols[col_id]['Code'] # 'V1RT'
                 el = sco_elts.get(code, None) # {'R': 'ADM', 'J': '', 'B': 20, 'N': '12.14'}
-                if el is None:                    
-                    for sem in apo_data.sems_etape:
+                if el is None:
+                    if apo_data.cols[col_id]['Type Objet'] == 'VET' and apo_data.periode != None:
+                        # code année étape: il serait logique de ne chercher que les semestre en période 2
+                        # mais on cherche ceux en même periode que l'ensemble (voir Q1)
+                        sems_to_search = apo_data.sems_periode
+                    else:
+                        sems_to_search = apo_data.sems_etape             
+                    for sem in sems_to_search:
                         el = self.search_elt_in_sem(context, code, sem)
                         if el != None:
                             sco_elts[code] = el
@@ -298,21 +304,30 @@
 
 
 class ApoData:
-    def __init__(self, data):
+    def __init__(self, data, periode=None):
         """Lecture du fichier CSV Apogée
         Regroupe les élements importants d'un fichier CSV Apogée
+        periode = 1 (sept-jan) ou 2 (fev-jul), mais cette info n'est pas
+         (toujours) présente dans les CSV Apogée et doit être indiquée par l'utilisateur
         """
         self.read_csv(data)
         self.etape_apogee = self.get_etape_apogee()
         self.annee_scolaire = self.get_annee_scolaire()
-        self.sem_id = None # 1 (sept-jan) ou 2 (fev-jul), mais cette info n'est pas (toujours) présente dans les CSV Apogée et doit être indiquée par l'utilisateur
-        
+        self.periode = periode # 
+
+    def set_periode(self, periode):
+        self.periode = periode
+    
     def setup(self, context):
         """Recherche semestres ScoDoc concernés
         """
         self.sems_etape = comp_apo_sems(context, self.etape_apogee, self.annee_scolaire )
         self.etape_formsemestre_ids = { s['formsemestre_id'] for s in self.sems_etape }
-        
+        if self.periode != None:
+            self.sems_periode = [ s for s in self.sems_etape if s['periode'] == self.periode ]
+        else:
+            self.sems_periode= None
+    
     def read_csv(self, data):
         if not data:
             raise ScoValueError('Fichier Apogée vide !')
@@ -453,7 +468,7 @@
                 'est_NAR' : e.is_NAR,
                 'commentaire' : '; '.join(e.log)
                 }
-            if e.col_elts:
+            if e.col_elts and e.col_elts[self.etape_apogee] != None:
                 cr['etape' ] = e.col_elts[self.etape_apogee].get('R', '')
                 cr['etape_note'] = e.col_elts[self.etape_apogee].get('N', '')
             else:
@@ -583,14 +598,14 @@
                   )
     return T.excel()
 
-def export_csv_to_apogee(context, apo_csv_data, dest_zip=None, REQUEST=None ):
+def export_csv_to_apogee(context, apo_csv_data, periode=None, dest_zip=None, REQUEST=None ):
     """Genere un fichier CSV Apogée 
     à partir d'un fichier CSV Apogée vide (ou partiellement rempli)
     et des résultats ScoDoc.
     Si dest_zip, ajoute les fichiers générés à ce zip
     sinon crée un zip et le publie
     """
-    apo_data = ApoData(apo_csv_data)
+    apo_data = ApoData(apo_csv_data, periode=periode)
     apo_data.setup(context) # -> .sems_etape
 
     for e in apo_data.etuds:

Modified: branches/ScoDoc7/sco_etape_apogee_view.py
===================================================================
--- branches/ScoDoc7/sco_etape_apogee_view.py	2016-07-10 17:21:51 UTC (rev 1520)
+++ branches/ScoDoc7/sco_etape_apogee_view.py	2016-07-11 20:35:40 UTC (rev 1521)
@@ -501,18 +501,18 @@
         raise ValueError('invalid null semset_id')
     semset = sco_semset.SemSet(context, semset_id=semset_id)
     annee_scolaire = semset['annee_scolaire']
-    sem_id = semset['sem_id']
+    periode = semset['sem_id']
     
     data = StringIO()
     dest_zip = ZipFile( data, 'w' )
 
-    etapes_apo = sco_etape_apogee.apo_csv_list_stored_etapes(context, annee_scolaire, sem_id, etapes=semset.list_etapes())
+    etapes_apo = sco_etape_apogee.apo_csv_list_stored_etapes(context, annee_scolaire, periode, etapes=semset.list_etapes())
     for etape_apo in etapes_apo:
-        apo_csv = sco_etape_apogee.apo_csv_get(context, etape_apo, annee_scolaire, sem_id)
-        sco_apogee_csv.export_csv_to_apogee( context, apo_csv,
+        apo_csv = sco_etape_apogee.apo_csv_get(context, etape_apo, annee_scolaire, periode)
+        sco_apogee_csv.export_csv_to_apogee( context, apo_csv, periode=periode,
                                              dest_zip=dest_zip, REQUEST=REQUEST )
     
-    basename = context.get_preference('DeptName') + str(annee_scolaire) + '-%s-' % semset['sem_id'] + '-'.join(etapes_apo)
+    basename = context.get_preference('DeptName') + str(annee_scolaire) + '-%s-' % periode + '-'.join(etapes_apo)
     basename = sco_etape_apogee.ApoCSVArchive.sanitize_filename(unescape_html(basename))
     
     dest_zip.close()

Modified: branches/ScoDoc7/sco_formsemestre.py
===================================================================
--- branches/ScoDoc7/sco_formsemestre.py	2016-07-10 17:21:51 UTC (rev 1520)
+++ branches/ScoDoc7/sco_formsemestre.py	2016-07-11 20:35:40 UTC (rev 1521)
@@ -120,7 +120,13 @@
     sem['annee'] = annee_debut
     # 2007 ou 2007-2008:
     sem['anneescolaire'] = annee_scolaire_repr(int(annee_debut), sem['mois_debut_ord']) 
-
+    # La période: consiède comme "S1" (ou S3) les debut en aout-sept-octobre
+    # devrait sans doute pouvoir etre changé...
+    if sem['mois_debut_ord'] >= 8 and sem['mois_debut_ord'] <= 10:
+        sem['periode'] = 1 # typiquement, début en septembre: S1, S3...
+    else:
+        sem['periode'] = 2 # typiquement, début en février: S2, S4...
+    
     sem['titreannee'] = '%s %s  %s' % (sem['titre_num'], sem.get('modalite',''), annee_debut)
     if annee_fin != annee_debut:
         sem['titreannee'] += '-' + annee_fin

Modified: branches/ScoDoc7/sco_semset.py
===================================================================
--- branches/ScoDoc7/sco_semset.py	2016-07-10 17:21:51 UTC (rev 1520)
+++ branches/ScoDoc7/sco_semset.py	2016-07-11 20:35:40 UTC (rev 1521)
@@ -203,7 +203,7 @@
             H.append('<p>Année(s) scolaire(s) présentes: %s</p>' % ', '.join(
                 [ str(x) for x in self.annees_scolaires()]))
         if self['sem_id']:
-            H.append('<p>Semestre: %(sem_id)s</p>' % self)
+            H.append('<p>Période: %(sem_id)s (<em>1: septembre, 2: janvier</em>)</p>' % self)
         H.append('<p>Etapes: <tt>%s</tt></p>' % ', '.join(self.list_etapes()))
         H.append('''<h4>Semestres de l'ensemble:</h4><ul class="semset_listsems">''')
         for sem in self.sems:


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