Woziii commited on
Commit
5e029bf
·
verified ·
1 Parent(s): 6dfc0a1

Update contract_builder.py

Browse files
Files changed (1) hide show
  1. contract_builder.py +145 -29
contract_builder.py CHANGED
@@ -31,7 +31,8 @@ class ContractBuilder:
31
  styles.add(ParagraphStyle(name='Sous-titre',
32
  fontName='Helvetica-Bold',
33
  fontSize=12,
34
- spaceAfter=10))
 
35
  styles.add(ParagraphStyle(name='Normal',
36
  fontName='Helvetica',
37
  fontSize=10,
@@ -41,6 +42,10 @@ class ContractBuilder:
41
  fontName='Helvetica-Bold',
42
  fontSize=11,
43
  spaceAfter=8))
 
 
 
 
44
  return styles
45
 
46
  @staticmethod
@@ -74,14 +79,24 @@ class ContractBuilder:
74
  # 1. Titre du contrat
75
  title = ContractTemplates.get_title(contract_type)
76
  elements.append(Paragraph(title, styles['Titre']))
77
- elements.append(Spacer(1, 10))
78
 
79
  # 2. Préambule
80
  preamble_text = ContractTemplates.get_preamble_text(contract_type, author_type, author_info)
81
- for paragraph in preamble_text.split('\n\n'):
 
82
  if paragraph.strip():
83
- elements.append(Paragraph(paragraph, styles['Normal']))
84
- elements.append(Spacer(1, 6))
 
 
 
 
 
 
 
 
 
85
 
86
  # 3. Article 1 - Objet
87
  object_clause = ContractTemplates.get_object_clause(
@@ -89,8 +104,20 @@ class ContractBuilder:
89
  sanitize_text(work_description),
90
  sanitize_text(image_description)
91
  )
92
- elements.append(Paragraph(object_clause, styles['Article']))
93
- elements.append(Spacer(1, 10))
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  # Compteur d'articles
96
  article_num = 2
@@ -98,9 +125,17 @@ class ContractBuilder:
98
  # 4. Article 2 - Droits cédés (pour contrat droits d'auteur)
99
  if "Auteur (droits d'auteur)" in contract_type:
100
  rights_clause = ContractTemplates.get_author_rights_clause(is_free, is_exclusive, additional_rights)
101
- for paragraph in rights_clause.split('\n\n'):
 
102
  if paragraph.strip():
103
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
104
  elements.append(Spacer(1, 6))
105
  article_num += 1
106
 
@@ -108,67 +143,148 @@ class ContractBuilder:
108
  if "Image (droit à l'image)" in contract_type:
109
  image_rights_article_num = article_num if "Auteur (droits d'auteur)" not in contract_type else article_num
110
  image_clause = ContractTemplates.get_image_rights_clause(is_free, is_exclusive)
111
- image_clause = image_clause.replace("Article 2", f"Article {image_rights_article_num}")
112
- for paragraph in image_clause.split('\n\n'):
 
 
 
 
 
 
 
 
 
113
  if paragraph.strip():
114
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
115
  elements.append(Spacer(1, 6))
116
  article_num += 1
117
 
118
  # 6. Article - Durée et territoire
119
  duration_clause = ContractTemplates.get_duration_territory_clause(article_num)
120
- for paragraph in duration_clause.split('\n\n'):
 
121
  if paragraph.strip():
122
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
123
  elements.append(Spacer(1, 6))
124
  article_num += 1
125
 
126
  # 7. Article - Supports d'exploitation
127
  final_supports = ensure_default_supports(supports)
128
  supports_clause = ContractTemplates.get_supports_clause(article_num, final_supports)
129
- for paragraph in supports_clause.split('\n\n'):
 
130
  if paragraph.strip():
131
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
132
  elements.append(Spacer(1, 6))
133
  article_num += 1
134
 
135
  # 8. Article - Rémunération
136
  remuneration_clause = ContractTemplates.get_remuneration_clause(article_num, is_free, sanitize_text(remuneration))
137
- for paragraph in remuneration_clause.split('\n\n'):
 
138
  if paragraph.strip():
139
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
140
  elements.append(Spacer(1, 6))
141
  article_num += 1
142
 
143
  # 9. Article - Garanties
144
  warranties_clause = ContractTemplates.get_warranties_clause(article_num, contract_type)
145
- for paragraph in warranties_clause.split('\n\n'):
 
146
  if paragraph.strip():
147
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
148
  elements.append(Spacer(1, 6))
149
  article_num += 1
150
 
151
  # 10. Article - Résiliation
152
  termination_clause = ContractTemplates.get_termination_clause(article_num)
153
- for paragraph in termination_clause.split('\n\n'):
 
154
  if paragraph.strip():
155
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
156
  elements.append(Spacer(1, 6))
157
  article_num += 1
158
 
159
- # 11. Article - Loi applicable
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  law_clause = ContractTemplates.get_applicable_law_clause(article_num)
161
- for paragraph in law_clause.split('\n\n'):
 
162
  if paragraph.strip():
163
- elements.append(Paragraph(paragraph, styles['Normal']))
 
 
 
 
 
 
 
164
  elements.append(Spacer(1, 6))
165
 
166
- # 12. Signatures
167
- elements.append(Spacer(1, 20))
168
  signatures = ContractTemplates.get_signatures_template(contract_type)
169
- for paragraph in signatures.split('\n\n'):
 
170
  if paragraph.strip():
171
  elements.append(Paragraph(paragraph, styles['Normal']))
172
  elements.append(Spacer(1, 8))
173
 
174
- return elements
 
31
  styles.add(ParagraphStyle(name='Sous-titre',
32
  fontName='Helvetica-Bold',
33
  fontSize=12,
34
+ spaceAfter=10,
35
+ alignment=TA_CENTER))
36
  styles.add(ParagraphStyle(name='Normal',
37
  fontName='Helvetica',
38
  fontSize=10,
 
42
  fontName='Helvetica-Bold',
43
  fontSize=11,
44
  spaceAfter=8))
45
+ styles.add(ParagraphStyle(name='Sous-article',
46
+ fontName='Helvetica-Bold',
47
+ fontSize=10,
48
+ spaceAfter=6))
49
  return styles
50
 
51
  @staticmethod
 
79
  # 1. Titre du contrat
80
  title = ContractTemplates.get_title(contract_type)
81
  elements.append(Paragraph(title, styles['Titre']))
82
+ elements.append(Spacer(1, 15))
83
 
84
  # 2. Préambule
85
  preamble_text = ContractTemplates.get_preamble_text(contract_type, author_type, author_info)
86
+ paragraphs = preamble_text.split('\n\n')
87
+ for i, paragraph in enumerate(paragraphs):
88
  if paragraph.strip():
89
+ # Si c'est un titre comme "PRÉAMBULE" ou "ENTRE LES SOUSSIGNÉS"
90
+ if paragraph.isupper() and len(paragraph) < 50:
91
+ elements.append(Paragraph(paragraph, styles['Sous-titre']))
92
+ else:
93
+ elements.append(Paragraph(paragraph, styles['Normal']))
94
+
95
+ # Ajouter un espace plus grand après les titres
96
+ if paragraph.isupper() and len(paragraph) < 50:
97
+ elements.append(Spacer(1, 10))
98
+ else:
99
+ elements.append(Spacer(1, 6))
100
 
101
  # 3. Article 1 - Objet
102
  object_clause = ContractTemplates.get_object_clause(
 
104
  sanitize_text(work_description),
105
  sanitize_text(image_description)
106
  )
107
+
108
+ # Traitement de l'article objet
109
+ paragraphs = object_clause.split('\n\n')
110
+ for i, paragraph in enumerate(paragraphs):
111
+ if paragraph.strip():
112
+ # Si c'est un titre d'article (commence par "ARTICLE")
113
+ if paragraph.startswith("ARTICLE"):
114
+ elements.append(Paragraph(paragraph, styles['Article']))
115
+ # Si c'est un sous-titre (comme "1.1 Œuvre concernée")
116
+ elif paragraph.strip().startswith("1.") and len(paragraph.split("\n")[0]) < 50:
117
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
118
+ else:
119
+ elements.append(Paragraph(paragraph, styles['Normal']))
120
+ elements.append(Spacer(1, 6))
121
 
122
  # Compteur d'articles
123
  article_num = 2
 
125
  # 4. Article 2 - Droits cédés (pour contrat droits d'auteur)
126
  if "Auteur (droits d'auteur)" in contract_type:
127
  rights_clause = ContractTemplates.get_author_rights_clause(is_free, is_exclusive, additional_rights)
128
+ paragraphs = rights_clause.split('\n\n')
129
+ for paragraph in paragraphs:
130
  if paragraph.strip():
131
+ # Si c'est un titre d'article (commence par "ARTICLE")
132
+ if paragraph.startswith("ARTICLE"):
133
+ elements.append(Paragraph(paragraph, styles['Article']))
134
+ # Si c'est un sous-titre (comme "2.1 Nature de la cession")
135
+ elif paragraph.strip().startswith("2.") and len(paragraph.split("\n")[0]) < 50:
136
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
137
+ else:
138
+ elements.append(Paragraph(paragraph, styles['Normal']))
139
  elements.append(Spacer(1, 6))
140
  article_num += 1
141
 
 
143
  if "Image (droit à l'image)" in contract_type:
144
  image_rights_article_num = article_num if "Auteur (droits d'auteur)" not in contract_type else article_num
145
  image_clause = ContractTemplates.get_image_rights_clause(is_free, is_exclusive)
146
+ # Remplacer le numéro d'article si nécessaire
147
+ if image_rights_article_num != 3:
148
+ image_clause = image_clause.replace("ARTICLE 3", f"ARTICLE {image_rights_article_num}")
149
+ # Aussi remplacer les sous-titres 3.x par le bon numéro
150
+ image_clause = image_clause.replace("3.1", f"{image_rights_article_num}.1")
151
+ image_clause = image_clause.replace("3.2", f"{image_rights_article_num}.2")
152
+ image_clause = image_clause.replace("3.3", f"{image_rights_article_num}.3")
153
+ image_clause = image_clause.replace("3.4", f"{image_rights_article_num}.4")
154
+
155
+ paragraphs = image_clause.split('\n\n')
156
+ for paragraph in paragraphs:
157
  if paragraph.strip():
158
+ # Si c'est un titre d'article (commence par "ARTICLE")
159
+ if paragraph.startswith("ARTICLE"):
160
+ elements.append(Paragraph(paragraph, styles['Article']))
161
+ # Si c'est un sous-titre (comme "3.1 Objet de l'autorisation")
162
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
163
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
164
+ else:
165
+ elements.append(Paragraph(paragraph, styles['Normal']))
166
  elements.append(Spacer(1, 6))
167
  article_num += 1
168
 
169
  # 6. Article - Durée et territoire
170
  duration_clause = ContractTemplates.get_duration_territory_clause(article_num)
171
+ paragraphs = duration_clause.split('\n\n')
172
+ for paragraph in paragraphs:
173
  if paragraph.strip():
174
+ # Si c'est un titre d'article (commence par "ARTICLE")
175
+ if paragraph.startswith("ARTICLE"):
176
+ elements.append(Paragraph(paragraph, styles['Article']))
177
+ # Si c'est un sous-titre (comme "4.1 Durée")
178
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
179
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
180
+ else:
181
+ elements.append(Paragraph(paragraph, styles['Normal']))
182
  elements.append(Spacer(1, 6))
183
  article_num += 1
184
 
185
  # 7. Article - Supports d'exploitation
186
  final_supports = ensure_default_supports(supports)
187
  supports_clause = ContractTemplates.get_supports_clause(article_num, final_supports)
188
+ paragraphs = supports_clause.split('\n\n')
189
+ for paragraph in paragraphs:
190
  if paragraph.strip():
191
+ # Si c'est un titre d'article (commence par "ARTICLE")
192
+ if paragraph.startswith("ARTICLE"):
193
+ elements.append(Paragraph(paragraph, styles['Article']))
194
+ # Si c'est un sous-titre (comme "5.1 Supports autorisés")
195
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
196
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
197
+ else:
198
+ elements.append(Paragraph(paragraph, styles['Normal']))
199
  elements.append(Spacer(1, 6))
200
  article_num += 1
201
 
202
  # 8. Article - Rémunération
203
  remuneration_clause = ContractTemplates.get_remuneration_clause(article_num, is_free, sanitize_text(remuneration))
204
+ paragraphs = remuneration_clause.split('\n\n')
205
+ for paragraph in paragraphs:
206
  if paragraph.strip():
207
+ # Si c'est un titre d'article (commence par "ARTICLE")
208
+ if paragraph.startswith("ARTICLE"):
209
+ elements.append(Paragraph(paragraph, styles['Article']))
210
+ # Si c'est un sous-titre (comme "6.1 Cession à titre gratuit")
211
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
212
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
213
+ else:
214
+ elements.append(Paragraph(paragraph, styles['Normal']))
215
  elements.append(Spacer(1, 6))
216
  article_num += 1
217
 
218
  # 9. Article - Garanties
219
  warranties_clause = ContractTemplates.get_warranties_clause(article_num, contract_type)
220
+ paragraphs = warranties_clause.split('\n\n')
221
+ for paragraph in paragraphs:
222
  if paragraph.strip():
223
+ # Si c'est un titre d'article (commence par "ARTICLE")
224
+ if paragraph.startswith("ARTICLE"):
225
+ elements.append(Paragraph(paragraph, styles['Article']))
226
+ # Si c'est un sous-titre (comme "7.1 Garanties de l'Auteur")
227
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
228
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
229
+ else:
230
+ elements.append(Paragraph(paragraph, styles['Normal']))
231
  elements.append(Spacer(1, 6))
232
  article_num += 1
233
 
234
  # 10. Article - Résiliation
235
  termination_clause = ContractTemplates.get_termination_clause(article_num)
236
+ paragraphs = termination_clause.split('\n\n')
237
+ for paragraph in paragraphs:
238
  if paragraph.strip():
239
+ # Si c'est un titre d'article (commence par "ARTICLE")
240
+ if paragraph.startswith("ARTICLE"):
241
+ elements.append(Paragraph(paragraph, styles['Article']))
242
+ # Si c'est un sous-titre (comme "8.1 Résiliation pour inexécution")
243
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
244
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
245
+ else:
246
+ elements.append(Paragraph(paragraph, styles['Normal']))
247
  elements.append(Spacer(1, 6))
248
  article_num += 1
249
 
250
+ # 11. Article - Dispositions diverses
251
+ other_clauses = ContractTemplates.get_other_clauses(article_num, contract_type)
252
+ paragraphs = other_clauses.split('\n\n')
253
+ for paragraph in paragraphs:
254
+ if paragraph.strip():
255
+ # Si c'est un titre d'article (commence par "ARTICLE")
256
+ if paragraph.startswith("ARTICLE"):
257
+ elements.append(Paragraph(paragraph, styles['Article']))
258
+ # Si c'est un sous-titre (comme "9.1 Clause de non-dénigrement")
259
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
260
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
261
+ else:
262
+ elements.append(Paragraph(paragraph, styles['Normal']))
263
+ elements.append(Spacer(1, 6))
264
+ article_num += 1
265
+
266
+ # 12. Article - Loi applicable
267
  law_clause = ContractTemplates.get_applicable_law_clause(article_num)
268
+ paragraphs = law_clause.split('\n\n')
269
+ for paragraph in paragraphs:
270
  if paragraph.strip():
271
+ # Si c'est un titre d'article (commence par "ARTICLE")
272
+ if paragraph.startswith("ARTICLE"):
273
+ elements.append(Paragraph(paragraph, styles['Article']))
274
+ # Si c'est un sous-titre (comme "10.1 Loi applicable")
275
+ elif paragraph.strip()[0].isdigit() and "." in paragraph.strip()[:3] and len(paragraph.split("\n")[0]) < 50:
276
+ elements.append(Paragraph(paragraph, styles['Sous-article']))
277
+ else:
278
+ elements.append(Paragraph(paragraph, styles['Normal']))
279
  elements.append(Spacer(1, 6))
280
 
281
+ # 13. Signatures
282
+ elements.append(Spacer(1, 30))
283
  signatures = ContractTemplates.get_signatures_template(contract_type)
284
+ paragraphs = signatures.split('\n\n')
285
+ for paragraph in paragraphs:
286
  if paragraph.strip():
287
  elements.append(Paragraph(paragraph, styles['Normal']))
288
  elements.append(Spacer(1, 8))
289
 
290
+ return elements