| """ |
| Fonctions utilitaires utilisées dans l'application. |
| Version corrigée pour gérer correctement les caractères accentués et UTF-8. |
| """ |
| import os |
| import tempfile |
| import re |
| from config import DEFAULT_SUPPORTS |
|
|
|
|
| def collect_author_info(is_physical_person, data): |
| """ |
| Collecte les informations sur l'auteur/modèle selon son type. |
| |
| Args: |
| is_physical_person (bool): True si l'auteur est une personne physique, False sinon |
| data (dict): Dictionnaire contenant les données du formulaire |
| |
| Returns: |
| dict: Les informations formatées sur l'auteur/modèle |
| """ |
| author_info = {} |
| |
| if is_physical_person: |
| |
| author_info = { |
| "gentille": data.get("gentille", "M."), |
| "nom": data.get("nom", ""), |
| "prenom": data.get("prenom", ""), |
| "date_naissance": data.get("date_naissance", ""), |
| "nationalite": data.get("nationalite", ""), |
| "adresse": data.get("adresse", ""), |
| "contact": data.get("contact_physique", "") |
| } |
| else: |
| |
| author_info = { |
| "nom_societe": data.get("nom_societe", ""), |
| "statut": data.get("statut", ""), |
| "rcs": data.get("rcs", ""), |
| "siege": data.get("siege", ""), |
| "contact": data.get("contact_morale", "") |
| } |
| |
| return author_info |
|
|
|
|
| def ensure_default_supports(selected_supports): |
| """ |
| S'assure que les supports par défaut sont inclus dans la liste des supports sélectionnés. |
| |
| Args: |
| selected_supports (list): Liste des supports sélectionnés par l'utilisateur |
| |
| Returns: |
| list: Liste des supports incluant les supports par défaut |
| """ |
| |
| supports = selected_supports.copy() if selected_supports else [] |
| |
| |
| for default_support in DEFAULT_SUPPORTS: |
| |
| if not any(default_support.lower() in support.lower() for support in supports): |
| supports.append(default_support) |
| |
| return supports |
|
|
|
|
| def sanitize_text(text): |
| """ |
| Nettoie le texte pour éviter les problèmes d'affichage dans le PDF. |
| Version corrigée pour préserver les caractères accentués et UTF-8. |
| |
| Args: |
| text (str): Texte à nettoyer |
| |
| Returns: |
| str: Texte nettoyé |
| """ |
| if not text: |
| return "" |
| |
| |
| |
| lines = [] |
| for line in text.split('\n'): |
| if len(line) < 2500: |
| lines.append(line) |
| else: |
| lines.append(line[:77] + '...') |
| |
| return '\n'.join(lines) |
|
|
|
|
| def create_temp_file(prefix="contrat_", suffix=".pdf"): |
| """ |
| Crée un fichier temporaire. |
| |
| Args: |
| prefix (str): Préfixe du nom du fichier |
| suffix (str): Suffixe du nom du fichier |
| |
| Returns: |
| str: Chemin vers le fichier temporaire |
| """ |
| temp_dir = tempfile.gettempdir() |
| filename = f"{prefix}{tempfile.NamedTemporaryFile().name}{suffix}" |
| return os.path.join(temp_dir, os.path.basename(filename)) |
|
|
|
|
| def format_supports_list(supports): |
| """ |
| Formate la liste des supports pour l'affichage dans le contrat. |
| |
| Args: |
| supports (list): Liste des supports |
| |
| Returns: |
| str: Liste des supports formatée |
| """ |
| if not supports: |
| return "site web et Discord de Tellers" |
| |
| |
| return ", ".join(supports) |