[scodoc-devel] [SVN] Scolar : [1735] PE: ameliorations par Cleo

eviennet at lipn.univ-paris13.fr eviennet at lipn.univ-paris13.fr
Jeu 21 Déc 11:38:00 CET 2017


Une pièce jointe HTML a été nettoyée...
URL: https://listes.univ-paris13.fr/pipermail/scodoc-devel/attachments/20171221/b6d0a12c/attachment.htm 
-------------- section suivante --------------
Added: branches/ScoDoc7/config/doc_poursuites_etudes/distrib/make_avis.bat
===================================================================
--- branches/ScoDoc7/config/doc_poursuites_etudes/distrib/make_avis.bat	                        (rev 0)
+++ branches/ScoDoc7/config/doc_poursuites_etudes/distrib/make_avis.bat	2017-12-21 10:38:00 UTC (rev 1735)
@@ -0,0 +1,3 @@
+
+echo "Compilation des avis latex"
+pdflatex avis.tex


Property changes on: branches/ScoDoc7/config/doc_poursuites_etudes/distrib/make_avis.bat
___________________________________________________________________
Added: svn:executable
   + *

Modified: branches/ScoDoc7/pe_jurype.py
===================================================================
--- branches/ScoDoc7/pe_jurype.py	2017-12-18 16:28:24 UTC (rev 1734)
+++ branches/ScoDoc7/pe_jurype.py	2017-12-21 10:38:00 UTC (rev 1735)
@@ -146,15 +146,16 @@
         self.exe_calculs_juryPE(semBase)
         self.synthetise_juryPE()
 
-        # Export des données => mode 1 seule feuille
-        filename = self.NOM_EXPORT_ZIP + "jurySyntheseDict_" + str(self.diplome) + '.xls'
-        self.xls = self.table_syntheseJury(mode="singlesheet")
+        # Export des données => mode 1 seule feuille -> supprimé
+        # filename = self.NOM_EXPORT_ZIP + "jurySyntheseDict_" + str(self.diplome) + '.xls'
+        #self.xls = self.table_syntheseJury(mode="singlesheet")
+        # self.add_file_to_zip(filename, self.xls.excel())
 
         # Fabrique 1 fichier excel résultat avec 1 seule feuille => trop gros
-        self.add_file_to_zip(filename, self.xls.excel())
         filename = self.NOM_EXPORT_ZIP + "jurySyntheseDict_" + str(self.diplome) + '_v2.xls'
         self.xlsV2 = self.table_syntheseJury(mode="multiplesheet")
-        self.add_file_to_zip(filename, self.xlsV2.excel())
+        if self.xlsV2:
+            self.add_file_to_zip(filename, self.xlsV2.excel())
 
         # Pour debug
         # self.syntheseJury = pe_tools.JURY_SYNTHESE_POUR_DEBUG #Un dictionnaire fictif pour debug
@@ -731,35 +732,40 @@
         """Table(s) du jury
         mode: singlesheet ou multiplesheet pour export excel
         """
+        sT = SeqGenTable() # le fichier excel à générer
 
         etudids =  self.syntheseJury.keys()
-        if not etudids:
-            return ''
+        if not etudids: #Si pas d'étudiants
+            T = GenTable( columns_ids=["pas d'étudiants"], rows=[ ], titles={"pas d'étudiants" : "pas d'étudiants"}, html_sortable=True, xls_sheet_name="dut" )
+            sT.add_genTable("dut", T)
+            return sT
+
+        # Si des étudiants
         maxParcours = max( [self.syntheseJury[etudid]['nbSemestres'] for etudid in etudids] )
 
         infos = ['sexe', 'nom', 'prenom', 'age', 'nbSemestres' ]
         entete = ['etudid']
         entete.extend( infos )
-        #semestres = ['S1', 'S2', 'S3', 'S4']
-        #aggregats = ['1A', '2A', '3S', '4S'] -> la somme correspond à PARCOURS.keys()
-        #entete.extend( ['Parcours'] + ['']*(maxParcours-1) )
         entete.extend( [ 'P%d' % i for i in range(1,maxParcours+1) ] )
         champs = ['note', 'class groupe', 'class promo' , 'min/moy/max groupe', 'min/moy/max promo']
 
+        aggregats = JuryPE.PARCOURS.keys()# ['S1', 'S2', ..., '1A', '4S']
+        aggregats = sorted(aggregats, key=lambda t: JuryPE.PARCOURS[t]['ordre']) # Tri des aggrégats
+
         if mode == "multiplesheet":
             allSheets = self.get_allTagInSyntheseJury() # tous les tags de syntheseJuryDict
-            for sem in JuryPE.PARCOURS.keys(): # ['S1', 'S2', ..., '1A', '4S']
+            for sem in aggregats: # JuryPE.PARCOURS.keys() -> ['S1', 'S2', ..., '1A', '4S']
                 entete.extend( ['%s %s' % (sem, champ) for champ in champs] )
         else: # "singlesheet"
             allSheets = ["singlesheet"]
-            for sem in JuryPE.PARCOURS.keys(): # ['S1', 'S2', ..., '1A', '4S']
+            for sem in aggregats: # JuryPE.PARCOURS.keys() -> ['S1', 'S2', ..., '1A', '4S']
                 tags = self.get_allTagForAggregat( sem )
                 entete.extend( ['%s %s %s' % (sem, tag, champ) for tag in tags for champ in champs] )
 
         columns_ids = entete        # les id et les titres de colonnes sont ici identiques
         titles = { i:i for i in columns_ids }
 
-        sT = SeqGenTable()
+
         for sheet in allSheets: # Pour tous les sheets à générer (1 si singlesheet, autant que de tags si multiplesheet)
             rows = []
             for etudid in etudids:
@@ -780,7 +786,7 @@
                     n += 1
                 #if self.syntheseJury[etudid]['nbSemestres'] < maxParcours:
                 #    descr += delim.join( ['']*( maxParcours -self.syntheseJury[etudid]['nbSemestres']) ) + delim
-                for sem in JuryPE.PARCOURS.keys():
+                for sem in aggregats: # JuryPE.PARCOURS.keys():
                     listeTags = self.get_allTagForAggregat( sem ) if mode=="singlesheet" else [sheet]
                     for tag in listeTags :
                         if tag in self.syntheseJury[etudid][sem]['groupe']:
@@ -797,8 +803,8 @@
                         row[champ + 'note'] = fmt_note(resgroupe[0])
                         row[champ + 'class groupe'] = '%s / %s' % (resgroupe[2], resgroupe[3])
                         row[champ + 'class promo']  = '%s / %s' % (respromo[2], respromo[3])
-                        row[champ + 'min/moy/max groupe'] = '%s / %s / %s' % tuple( fmt_note(x) for x in (resgroupe[4:7]) )
-                        row[champ + 'min/moy/max promo'] = '%s / %s / %s' % tuple( fmt_note(x) for x in (respromo[4:7]) )
+                        row[champ + 'min/moy/max groupe'] = '%s / %s / %s' % tuple( fmt_note(x) for x in (resgroupe[6], resgroupe[4], resgroupe[5]) )
+                        row[champ + 'min/moy/max promo'] = '%s / %s / %s' % tuple( fmt_note(x) for x in (respromo[6], respromo[4], respromo[5]) )
                 rows.append(row)
 
             T = GenTable( columns_ids=columns_ids, rows=rows, titles=titles, html_sortable=True, xls_sheet_name=sheet )

Modified: branches/ScoDoc7/pe_semestretag.py
===================================================================
--- branches/ScoDoc7/pe_semestretag.py	2017-12-18 16:28:24 UTC (rev 1734)
+++ branches/ScoDoc7/pe_semestretag.py	2017-12-21 10:38:00 UTC (rev 1735)
@@ -144,7 +144,7 @@
 
             for tag in tags : # tag de la forme "mathématiques", "théorie", "pe:0", "maths:2"
                 [tagname, ponderation] = sco_tag_module.split_tagname_coeff( tag ) # extrait un tagname et un éventuel coefficient de pondération (par defaut: 1)
-
+                #tagname = tagname
                 if not tagdict.has_key( tagname ) : # Ajout d'une clé pour le tag
                     tagdict[ tagname ] = { }
 
@@ -194,9 +194,9 @@
         return [ (self.nt.moy_gen[etudid], 1.0, etudid) for etudid in self.get_etudids() ]
 
     # -----------------------------------------------------------------------------
-    def get_noteEtCoeff_modimpl(self, modimpl_id, etudid) :
+    def get_noteEtCoeff_modimpl(self, modimpl_id, etudid, profondeur=2) :
         """ Renvoie un couple donnant la note et le coeff normalisé d'un étudiant à un module d'id modimpl_id.
-        La noteet le coeff sont extraits :
+        La note et le coeff sont extraits :
         1) soit des données du semestre en normalisant le coefficient par rapport à la somme des coefficients des modules du semestre,
         2) soit des données des UE précédemment capitalisées, en recherchant un module de même CODE que le modimpl_id proposé,
         le coefficient normalisé l'étant alors par rapport au total des coefficients du semestre auquel appartient l'ue capitalisée
@@ -204,8 +204,8 @@
         (note, coeff_norm) = (None, None)
 
         modimpl = self.get_moduleimpl(modimpl_id) # Le module considéré
-        if modimpl == None:
-            return (note, coeff_norm)
+        if modimpl == None or profondeur <0:
+            return (None, None)
 
         # Y-a-t-il eu capitalisation d'UE ?
         ue_capitalisees = self.get_ue_capitalisees( etudid ) # les ue capitalisées des étudiants
@@ -221,7 +221,8 @@
         elif len(ue_capitalisees) > 0:
             # A quel semestre correspond l'ue capitalisée et quelles sont ses notes ?
             # fid_prec = [ ue['formsemestre_id'] for ue in ue_capitalisees if ue['ue_id'] == modimpl['module']['ue_id'] ][0]
-            fids_prec = [ ue['formsemestre_id'] for ue in ue_capitalisees if ue['ue_code'] == modimpl['ue']['ue_code'] ]
+            semestre_id = modimpl['module']['semestre_id']
+            fids_prec = [ ue['formsemestre_id'] for ue in ue_capitalisees if ue['ue_code'] == modimpl['ue']['ue_code'] ] # and ue['semestre_id'] == semestre_id]
             if len(fids_prec) > 0:
                 # => le formsemestre_id du semestre dont vient la capitalisation
                 fid_prec = fids_prec[0]
@@ -232,7 +233,7 @@
                 modimpl_prec = [ module for module in nt_prec._modimpls if module['module']['code'] == modimpl['module']['code'] ]
                 if len(modimpl_prec) > 0 : # si une correspondance est trouvée
                     semtag_prec = SemestreTag( self.context, nt_prec, nt_prec.sem )
-                    (note, coeff_norm) = semtag_prec.get_noteEtCoeff_modimpl(modimpl_prec[0]['moduleimpl_id'], etudid) # lecture de la note via le semtag associé au modimpl capitalisé
+                    (note, coeff_norm) = semtag_prec.get_noteEtCoeff_modimpl(modimpl_prec[0]['moduleimpl_id'], etudid, profondeur=profondeur-1) # lecture de la note via le semtag associé au modimpl capitalisé
             # Sinon - pas de notes à prendre en compte
         return (note, coeff_norm)
 

Modified: branches/ScoDoc7/pe_tools.py
===================================================================
--- branches/ScoDoc7/pe_tools.py	2017-12-18 16:28:24 UTC (rev 1734)
+++ branches/ScoDoc7/pe_tools.py	2017-12-21 10:38:00 UTC (rev 1735)
@@ -159,7 +159,7 @@
     distrib_pathnames = list_directory_filenames(distrib_dir) # eg /opt/scodoc/Products/ScoDoc/config/doc_poursuites_etudes/distrib/modeles/toto.tex
     l = len(distrib_dir)
     distrib_filenames = { x[l+1:] for x in distrib_pathnames } # eg modeles/toto.tex
-    
+
     local_dir = os.path.join( PE_AUX_DIR, 'local' )
     local_pathnames = list_directory_filenames(local_dir)
     l = len(local_dir)
@@ -167,16 +167,16 @@
 
     for filename in distrib_filenames | local_filenames:
         if filename in local_filenames:
-            add_local_file_to_zip( zipfile, ziproot, os.path.join(local_dir, filename), filename )
+            add_local_file_to_zip( zipfile, ziproot, os.path.join(local_dir, filename), 'avis/' + filename )
         else:
-            add_local_file_to_zip( zipfile, ziproot, os.path.join(distrib_dir, filename), filename )
+            add_local_file_to_zip( zipfile, ziproot, os.path.join(distrib_dir, filename), 'avis/' + filename )
     
     # Logos: (add to logos/ directory in zip)
     logos_names = [ 'logos/logo_header.jpg', 'logos/logo_footer.jpg' ]
     for f in logos_names:
         logo = os.path.join(SCO_SRCDIR, f)
         if os.path.isfile(logo):
-            add_local_file_to_zip( zipfile, ziproot, logo, f )
+            add_local_file_to_zip( zipfile, ziproot, logo, 'avis/' + f )
     
 
 

Modified: branches/ScoDoc7/pe_view.py
===================================================================
--- branches/ScoDoc7/pe_view.py	2017-12-18 16:28:24 UTC (rev 1734)
+++ branches/ScoDoc7/pe_view.py	2017-12-21 10:38:00 UTC (rev 1735)
@@ -66,7 +66,7 @@
     jury = pe_jurype.JuryPE(context, semBase)
 
     # Ajout avis LaTeX au même zip:
-    etudids =  jury.syntheseJury.keys()
+    etudids = jury.syntheseJury.keys()
 
     # Récupération du template latex, du footer latex et du tag identifiant les annotations relatives aux PE
     # (chaines unicodes, html non quoté)
@@ -99,12 +99,12 @@
             prefs
         )
         
-        jury.add_file_to_zip((nom_fichier + '.tex').encode(PE_LATEX_ENCODING), contenu_latex.encode(PE_LATEX_ENCODING))
+        jury.add_file_to_zip(('avis/' + nom_fichier + '.tex').encode(PE_LATEX_ENCODING), contenu_latex.encode(PE_LATEX_ENCODING))
         latex_pages[nom_fichier] = contenu_latex  # Sauvegarde dans un dico
     
     # Nouvelle version : 1 fichier par étudiant avec 1 fichier appelant créée ci-dessous
     doc_latex = '\n% -----\n'.join( ["\\include{" + nom + "}" for nom in sorted( latex_pages.keys() ) ] )
-    jury.add_file_to_zip('avis_poursuite.tex', doc_latex.encode(PE_LATEX_ENCODING))
+    jury.add_file_to_zip('avis/avis_poursuite.tex', doc_latex.encode(PE_LATEX_ENCODING))
 
     # Ajoute image, LaTeX class file(s) and modeles
     pe_tools.add_pe_stuff_to_zip(context, jury.zipfile, jury.NOM_EXPORT_ZIP)


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