# -*- mode: python -*- # -*- coding: utf-8 -*- ############################################################################## # # Gestion scolarite IUT # # Copyright (c) 1999 - 2024 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 """ from flask import send_file, request from app.models import FormSemestre from app.scodoc.sco_exceptions import ScoValueError import app.scodoc.sco_utils as scu from app.scodoc import sco_formsemestre from app.scodoc import html_sco_header from app.scodoc import sco_preferences from app.pe import pe_comp from app.pe import pe_jury from app.pe import pe_avislatex def _pe_view_sem_recap_form(formsemestre_id): sem_base = FormSemestre.get_formsemestre(formsemestre_id) if not sem_base.formation.is_apc() or sem_base.formation.get_cursus().NB_SEM < 6: H = [ html_sco_header.sco_header(page_title="Avis de poursuite d'études"), f"""

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 . Cette fonction (en Scodoc9) n'est prévue que pour le BUT.
Rendez-vous donc sur un semestre de BUT.

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 pour les étudiants diplômés en {diplome}.
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:
""", ] return "\n".join(H) + html_sco_header.sco_footer() # called from the web, POST or GET def pe_view_sem_recap( formsemestre_id, avis_tmpl_file=None, footer_tmpl_file=None, ): """Génération des avis de poursuite d'étude""" if request.method == "GET": return _pe_view_sem_recap_form(formsemestre_id) prefs = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id) sem_base = FormSemestre.get_formsemestre(formsemestre_id) if not sem_base.formation.is_apc(): raise ScoValueError( "Le module de Poursuites d'Etudes avec Scodoc 9 n'est disponible que pour des formations BUT" ) if sem_base.formation.get_cursus().NB_SEM < 6: raise ScoValueError( "Le module de Poursuites d'Etudes avec Scodoc 9 n'est pas prévu pour une formation de moins de 6 semestres" ) # L'année du diplome diplome = pe_comp.get_annee_diplome_semestre(sem_base) jury = pe_jury.JuryPE(diplome, sem_base.formation.formation_id) # Ajout avis LaTeX au même zip: # etudids = list(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 False: if avis_tmpl_file: try: template_latex = avis_tmpl_file.read().decode("utf-8") except UnicodeDecodeError as e: raise ScoValueError( "Données (template) invalides (caractères non UTF8 ?)" ) from e else: # template indiqué dans préférences ScoDoc ? template_latex = pe_avislatex.get_code_latex_from_scodoc_preference( 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().decode("utf-8") else: footer_latex = pe_avislatex.get_code_latex_from_scodoc_preference( 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( formsemestre_id, champ="pe_tag_annotation_avis_latex" ) # Ajout des annotations PE dans un fichier excel # sT = pe_avislatex.table_syntheseAnnotationPE(jury.syntheseJury, tag_annotation_pe) # if sT: # jury.add_file_to_zip( # jury.nom_export_zip + "_annotationsPE" + scu.XLSX_SUFFIX, sT.excel() # ) if False: 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( jury, etudid, template_latex, tag_annotation_pe, footer_latex, prefs, ) jury.add_file_to_zip("avis/" + nom_fichier + ".tex", contenu_latex) 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) # Ajoute image, LaTeX class file(s) and modeles pe_tools.add_pe_stuff_to_zip(jury.zipfile, jury.nom_export_zip) data = jury.get_zipped_data() return send_file( data, mimetype="application/zip", download_name=scu.sanitize_filename(jury.nom_export_zip + ".zip"), as_attachment=True, )