|
""" |
|
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) |