LexForge / contract_builder.py
Woziii's picture
Upload 10 files
2e25654 verified
raw
history blame
7.8 kB
"""
Module pour la construction des contrats à partir des templates.
"""
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY
from reportlab.platypus import Paragraph, Spacer
from contract_templates import ContractTemplates
from utils import ensure_default_supports, sanitize_text
class ContractBuilder:
"""
Classe responsable de la construction des contrats complets à partir des templates.
"""
@staticmethod
def get_styles():
"""
Retourne les styles pour le document PDF.
Returns:
dict: Dictionnaire des styles
"""
styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='Titre',
fontName='Helvetica-Bold',
fontSize=14,
alignment=TA_CENTER,
spaceAfter=12))
styles.add(ParagraphStyle(name='Sous-titre',
fontName='Helvetica-Bold',
fontSize=12,
spaceAfter=10))
styles.add(ParagraphStyle(name='Normal',
fontName='Helvetica',
fontSize=10,
alignment=TA_JUSTIFY,
spaceAfter=6))
styles.add(ParagraphStyle(name='Article',
fontName='Helvetica-Bold',
fontSize=11,
spaceAfter=8))
return styles
@staticmethod
def build_contract_elements(contract_type, is_free, author_type, author_info,
work_description, image_description, supports,
additional_rights, remuneration, is_exclusive):
"""
Construit tous les éléments du contrat.
Args:
contract_type (list): Liste des types de contrats sélectionnés
is_free (bool): True si la cession est gratuite, False sinon
author_type (str): Type d'auteur ("Personne physique" ou "Personne morale")
author_info (dict): Informations sur l'auteur
work_description (str): Description de l'œuvre
image_description (str): Description de l'image
supports (list): Liste des supports sélectionnés
additional_rights (list): Liste des droits supplémentaires sélectionnés
remuneration (str): Modalités de rémunération
is_exclusive (bool): True si la cession est exclusive, False sinon
Returns:
list: Liste des éléments du contrat pour ReportLab
"""
# Obtenir les styles
styles = ContractBuilder.get_styles()
# Initialiser la liste des éléments
elements = []
# 1. Titre du contrat
title = ContractTemplates.get_title(contract_type)
elements.append(Paragraph(title, styles['Titre']))
elements.append(Spacer(1, 10))
# 2. Préambule
preamble_text = ContractTemplates.get_preamble_text(contract_type, author_type, author_info)
for paragraph in preamble_text.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
# 3. Article 1 - Objet
object_clause = ContractTemplates.get_object_clause(
contract_type,
sanitize_text(work_description),
sanitize_text(image_description)
)
elements.append(Paragraph(object_clause, styles['Article']))
elements.append(Spacer(1, 10))
# Compteur d'articles
article_num = 2
# 4. Article 2 - Droits cédés (pour contrat droits d'auteur)
if "Auteur (droits d'auteur)" in contract_type:
rights_clause = ContractTemplates.get_author_rights_clause(is_free, is_exclusive, additional_rights)
for paragraph in rights_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 5. Article sur les droits à l'image (pour contrat droit à l'image)
if "Image (droit à l'image)" in contract_type:
image_rights_article_num = article_num if "Auteur (droits d'auteur)" not in contract_type else article_num
image_clause = ContractTemplates.get_image_rights_clause(is_free, is_exclusive)
image_clause = image_clause.replace("Article 2", f"Article {image_rights_article_num}")
for paragraph in image_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 6. Article - Durée et territoire
duration_clause = ContractTemplates.get_duration_territory_clause(article_num)
for paragraph in duration_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 7. Article - Supports d'exploitation
final_supports = ensure_default_supports(supports)
supports_clause = ContractTemplates.get_supports_clause(article_num, final_supports)
for paragraph in supports_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 8. Article - Rémunération
remuneration_clause = ContractTemplates.get_remuneration_clause(article_num, is_free, sanitize_text(remuneration))
for paragraph in remuneration_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 9. Article - Garanties
warranties_clause = ContractTemplates.get_warranties_clause(article_num, contract_type)
for paragraph in warranties_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 10. Article - Résiliation
termination_clause = ContractTemplates.get_termination_clause(article_num)
for paragraph in termination_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
article_num += 1
# 11. Article - Loi applicable
law_clause = ContractTemplates.get_applicable_law_clause(article_num)
for paragraph in law_clause.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 6))
# 12. Signatures
elements.append(Spacer(1, 20))
signatures = ContractTemplates.get_signatures_template(contract_type)
for paragraph in signatures.split('\n\n'):
if paragraph.strip():
elements.append(Paragraph(paragraph, styles['Normal']))
elements.append(Spacer(1, 8))
return elements