File size: 3,808 Bytes
2e25654
 
9a47779
2e25654
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a47779
2e25654
 
 
 
 
 
 
 
 
 
9a47779
 
 
 
33af3be
9a47779
 
 
2e25654
9a47779
2e25654
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cde09e3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
"""
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:
        # Personne physique
        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:
        # Personne morale
        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
    """
    # Création d'une copie de la liste pour ne pas modifier l'original
    supports = selected_supports.copy() if selected_supports else []
    
    # Vérification que les supports par défaut sont inclus
    for default_support in DEFAULT_SUPPORTS:
        # Vérification que le support n'est pas déjà présent sous une forme quelconque
        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 ""
    
    # Limiter la longueur des lignes pour éviter les débordements
    # tout en préservant les caractères Unicode/accentués
    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"
    
    # Formate la liste des supports en une chaîne lisible
    return ", ".join(supports)