# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # Gestion scolarite IUT # # Copyright (c) 1999 - 2021 Emmanuel Viennet. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Emmanuel Viennet emmanuel.viennet@viennet.net # ############################################################################## ############################################################################## # Module "Avis de poursuite d'étude" # conçu et développé par Cléo Baras (IUT de Grenoble) ############################################################################## """ScoDoc : interface des fonctions de gestion des avis de poursuites d'étude """ import sco_utils as scu from notes_log import log import sco_formsemestre import sco_formsemestre_status import notes_table from gen_tables import GenTable import html_sco_header import sco_codes_parcours import sco_preferences import pe_tools from pe_tools import PE_LATEX_ENCODING import pe_tagtable import pe_semestretag import pe_settag import pe_jurype import pe_avislatex def _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=None): H = [ html_sco_header.sco_header( context, REQUEST, page_title="Avis de poursuite d'études" ), """

Génération des avis de poursuites d'études

Cette fonction génère un ensemble de fichiers permettant d'éditer des avis de poursuites d'études.
De nombreux aspects sont paramétrables: voir la documentation.

Les templates sont généralement installés sur le serveur ou dans le paramétrage de ScoDoc.
Au besoin, vous pouvez spécifier ici votre propre fichier de template (un_avis.tex):
Template:
Pied de page:
""".format( formsemestre_id=formsemestre_id ), ] return "\n".join(H) + html_sco_header.sco_footer(context, REQUEST) def pe_view_sem_recap( context, formsemestre_id, avis_tmpl_file=None, footer_tmpl_file=None, mode_debug=False, REQUEST=None, ): """Génération des avis de poursuite d'étude mode_debug = Pour "squeezer" le calcul du jury pe (long) et debugger uniquement la partie avis latex """ if REQUEST and REQUEST.method == "GET": return _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=REQUEST) prefs = sco_preferences.SemPreferences(context, formsemestre_id=formsemestre_id) semBase = sco_formsemestre.get_formsemestre(context, formsemestre_id) jury = pe_jurype.JuryPE(context, semBase) # Ajout avis LaTeX au même zip: 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é) template_latex = "" # template fourni via le formulaire Web if avis_tmpl_file: template_latex = avis_tmpl_file.read() template_latex = template_latex.decode(scu.SCO_ENCODING) else: # template indiqué dans préférences ScoDoc ? template_latex = pe_avislatex.get_code_latex_from_scodoc_preference( context, formsemestre_id, champ="pe_avis_latex_tmpl" ) template_latex = template_latex.strip() if not template_latex: # pas de preference pour le template: utilise fichier du serveur template_latex = pe_avislatex.get_templates_from_distrib("avis") # Footer: footer_latex = "" # template fourni via le formulaire Web if footer_tmpl_file: footer_latex = footer_tmpl_file.read() footer_latex = footer_latex.decode(scu.SCO_ENCODING) else: footer_latex = pe_avislatex.get_code_latex_from_scodoc_preference( context, formsemestre_id, champ="pe_avis_latex_footer" ) footer_latex = footer_latex.strip() if not footer_latex: # pas de preference pour le footer: utilise fichier du serveur footer_latex = pe_avislatex.get_templates_from_distrib( "footer" ) # fallback: footer vides tag_annotation_pe = pe_avislatex.get_code_latex_from_scodoc_preference( context, formsemestre_id, champ="pe_tag_annotation_avis_latex" ) # Ajout des annotations PE dans un fichier excel sT = pe_avislatex.table_syntheseAnnotationPE( context, jury.syntheseJury, tag_annotation_pe ) if sT: jury.add_file_to_zip(jury.NOM_EXPORT_ZIP + "_annotationsPE.xls", sT.excel()) latex_pages = {} # Dictionnaire de la forme nom_fichier => contenu_latex for etudid in etudids: [nom_fichier, contenu_latex] = pe_avislatex.get_avis_poursuite_par_etudiant( context, jury, etudid, template_latex, tag_annotation_pe, footer_latex, prefs, ) 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/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) data = jury.get_zipped_data() size = len(data) content_type = "application/zip" if REQUEST != None: REQUEST.RESPONSE.setHeader( "content-disposition", 'attachement; filename="%s.zip"' % jury.NOM_EXPORT_ZIP, ) REQUEST.RESPONSE.setHeader("content-type", content_type) REQUEST.RESPONSE.setHeader("content-length", size) return data