[Scodoc-devel] [SVN] Scolar : [1525] Export Apo:

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Mer 13 Juil 00:06:23 CEST 2016


Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160713/f799e262/attachment.html>
-------------- section suivante --------------
Modified: branches/ScoDoc7/sco_apogee_csv.py
===================================================================
--- branches/ScoDoc7/sco_apogee_csv.py	2016-07-12 08:24:42 UTC (rev 1524)
+++ branches/ScoDoc7/sco_apogee_csv.py	2016-07-12 22:06:22 UTC (rev 1525)
@@ -223,10 +223,14 @@
                 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:
-                    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
+                    if apo_data.jury_intermediaire and self.est_resultat_annuel(col_id, code, apo_data):
+                        # (Q1) code annuel étape
+                        if self.annee_validable_par_precedent(apo_data):
+                            # exemple: S1 (AJ), S2 (ADM), puis S1 (ADM): ici on validera la première année en janvier
+                            sems_to_search = apo_data.sems_periode
+                        else:
+                            # exemple: S1 (ADM): on ne valide pas l'année dès le jury de S1 !
+                            sems_to_search = []
                     else:
                         sems_to_search = apo_data.sems_etape             
                     for sem in sems_to_search:
@@ -308,18 +312,44 @@
         #
         return None # element Apogee non trouvé dans ce semestre
 
+    def est_resultat_annuel(self, col_id, code, apo_data):
+        """Vrai si la colonnee contient un résultat "annuel"
+        donc à ne pas remplir en janvier (sauf si validation antérieure du semestre suivant)
+        """
+        if apo_data.periode is None:
+            return False # Licences pro, etc sans notion d'année en deux semestres
+        if apo_data.cols[col_id]['Type Objet'] == 'VET':
+            return True
+        # est-ce le code "annuel", genre VRT1A ? celui là est (pour l'instant ?) dans le semestre scodoc
+        # (ce serait mieux de le mettre dans la formation ! TODO)
+        codes_annee = apo_data.sems_periode[0]['elt_annee_apo'].split(',')
+        
+        return code in codes_annee
+    
+    def annee_validable_par_precedent(self, apo_data):
+        """Est-ce que le semestre suivant a été effectué l'année précédente ?
+        """
+        # Le semestre suivant: exemple 2 si on est en jury de S1
+        next_semestre_id = apo_data.cur_semestre_id + 1
+        # Les indices des semestres par lesquels est passé l'étudiant: [1, 2, 3]
+        etud_semestre_ids = { s['semestre_id'] for s in self.etud['sems'] }
 
+        return next_semestre_id in etud_semestre_ids
+
+        
 class ApoData:
     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
+        Laisser periode à None si etape en 1 semestre (LP, décalés, ...)
         """
         self.read_csv(data)
         self.etape_apogee = self.get_etape_apogee()
         self.annee_scolaire = self.get_annee_scolaire()
         self.periode = periode # 
+        self.jury_intermediaire = False # True si jury à mi-étape, eg jury de S1 dans l'étape (S1, S2)
 
     def set_periode(self, periode):
         self.periode = periode
@@ -331,8 +361,14 @@
         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 ]
+            self.cur_semestre_id = self.sems_periode[0]['semestre_id']
+            # Les semestres de la période ont le même indice, n'est-ce pas ?
+            assert all( self.cur_semestre_id == s['semestre_id'] for s in self.sems_periode )
+            # Cette condition sera inadaptée si semestres décalés 
+            # (mais ils n'ont pas d'étape annuelle, espérons!)
+            self.jury_intermediaire = (self.cur_semestre_id % 2) != 0
         else:
-            self.sems_periode= None
+            self.sems_periode = None
     
     def read_csv(self, data):
         if not data:
@@ -595,8 +631,8 @@
             'NIP' : e['nip'], 'c10' : '', 'c11' : '', 'c12' : '', 'c13' : 'NAR - Jury', 
             'date' : today } )
 
-    columns_ids=( 'nom', 'prenom', 'c0', 'c1', 'etape', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8',
-                  'NIP', 'c10', 'c11', 'c12', 'c13', 
+    columns_ids=( 'NIP', 'nom', 'prenom', 'etape', 'c0', 'c1', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8',
+                  'c10', 'c11', 'c12', 'c13', 
                   'date' )
     T = GenTable( columns_ids=columns_ids, titles=dict(zip(columns_ids,columns_ids)),
                   rows=L,


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