Woziii commited on
Commit
12d1337
·
verified ·
1 Parent(s): 0d840ea

Delete interface.py

Browse files
Files changed (1) hide show
  1. interface.py +0 -359
interface.py DELETED
@@ -1,359 +0,0 @@
1
- """
2
- Module définissant l'interface utilisateur Gradio et l'arbre de décision du formulaire.
3
- """
4
- import gradio as gr
5
- from utils import collect_author_info
6
- from config import (CONTRACT_TYPES, CESSION_MODES, ADDITIONAL_RIGHTS,
7
- AUTHOR_TYPES, CIVILITY_OPTIONS, SUPPORTS_OPTIONS)
8
-
9
-
10
- def create_interface(generate_pdf_fn, preview_contract_fn):
11
- """
12
- Crée l'interface utilisateur Gradio avec l'arbre de décision pour le formulaire.
13
-
14
- Args:
15
- generate_pdf_fn: Fonction pour générer le PDF
16
- preview_contract_fn: Fonction pour prévisualiser le contrat
17
-
18
- Returns:
19
- gr.Blocks: L'interface Gradio configurée
20
- """
21
- with gr.Blocks(title="Générateur de Contrats de Cession") as demo:
22
- gr.Markdown("# Générateur de Contrats de Cession de Droits")
23
- gr.Markdown("Cet outil vous permet de générer des contrats de cession de droits d'auteur et/ou de droits à l'image adaptés à votre situation.")
24
-
25
- # Organisation en onglets
26
- with gr.Tabs():
27
- with gr.TabItem("Formulaire"):
28
- # ===== ÉTAPE 1: TYPE DE CONTRAT =====
29
- gr.Markdown("### 1. Type de contrat")
30
- gr.Markdown("Cette première étape détermine le type de contrat à générer en fonction de la nature de l'œuvre.")
31
- type_contrat = gr.CheckboxGroup(
32
- CONTRACT_TYPES,
33
- label="Quel type de contrat souhaitez-vous établir?",
34
- value=["Auteur (droits d'auteur)"],
35
- info="Sélectionnez 'Auteur' pour une œuvre protégée par le droit d'auteur, 'Image' pour l'utilisation de l'image d'une personne, ou les deux si nécessaire."
36
- )
37
-
38
- # ===== ÉTAPE 2: MODE DE CESSION =====
39
- gr.Markdown("### 2. Mode de cession")
40
- gr.Markdown("Le mode de cession détermine si la cession est gratuite ou onéreuse, ce qui influencera les droits cédés et les clauses applicables.")
41
- type_cession = gr.Radio(
42
- CESSION_MODES,
43
- label="La cession se fait-elle à titre gratuit ou onéreux?",
44
- value="Gratuite",
45
- info="Une cession gratuite limite les droits cédés (reproduction et représentation uniquement). Une cession onéreuse permet d'étendre ces droits."
46
- )
47
-
48
- # ===== ÉTAPE 2.1: DROITS CÉDÉS (uniquement si onéreux) =====
49
- with gr.Group(visible=False) as groupe_droits:
50
- gr.Markdown("### 2.1 Droits cédés supplémentaires")
51
- gr.Markdown("""
52
- Pour une cession onéreuse, vous pouvez céder des droits supplémentaires en plus des droits de base:
53
- - Le droit de reproduction et le droit de représentation sont toujours inclus
54
- - Sélectionnez les droits supplémentaires que vous souhaitez céder
55
- """)
56
- droits_cedes = gr.CheckboxGroup(
57
- ADDITIONAL_RIGHTS,
58
- label="Sélectionnez les droits supplémentaires à céder",
59
- info="Chaque droit sélectionné sera ajouté dans le contrat avec sa définition juridique précise."
60
- )
61
-
62
- # ===== ÉTAPE 2.2: EXCLUSIVITÉ (uniquement si onéreux) =====
63
- with gr.Group(visible=False) as groupe_exclusivite:
64
- gr.Markdown("### 2.2 Exclusivité")
65
- gr.Markdown("""
66
- L'exclusivité est une clause importante qui détermine si le cédant peut réutiliser ou céder à d'autres les mêmes droits pendant la durée du contrat.
67
- """)
68
- exclusivite = gr.Checkbox(
69
- label="Souhaitez-vous établir une clause d'exclusivité?",
70
- value=False,
71
- info="Si coché, le cédant ne pourra pas céder les mêmes droits à d'autres personnes ni les utiliser lui-même pendant la durée du contrat."
72
- )
73
-
74
- # ===== ÉTAPE 3: INFORMATIONS SUR L'AUTEUR/MODÈLE =====
75
- gr.Markdown("### 3. Informations sur l'auteur/modèle")
76
- gr.Markdown("Ces informations identifient précisément le cédant dans le contrat.")
77
- auteur_type = gr.Radio(
78
- AUTHOR_TYPES,
79
- label="L'auteur/modèle est-il une personne physique ou morale?",
80
- value="Personne physique",
81
- info="Une personne morale est une entreprise ou une association. Pour les personnes morales, assurez-vous qu'elles détiennent bien les droits (œuvre collective, logiciel, ou cession obtenue)."
82
- )
83
-
84
- # Champs pour personne physique (visibles par défaut)
85
- with gr.Group() as groupe_personne_physique:
86
- gentille = gr.Radio(
87
- CIVILITY_OPTIONS,
88
- label="Civilité",
89
- value="M."
90
- )
91
- nom = gr.Textbox(
92
- label="Nom",
93
- placeholder="Nom de famille"
94
- )
95
- prenom = gr.Textbox(
96
- label="Prénom",
97
- placeholder="Prénom"
98
- )
99
- date_naissance = gr.Textbox(
100
- label="Date de naissance (facultatif)",
101
- placeholder="JJ/MM/AAAA"
102
- )
103
- nationalite = gr.Textbox(
104
- label="Nationalité",
105
- placeholder="Ex: française"
106
- )
107
- adresse = gr.Textbox(
108
- label="Adresse complète",
109
- placeholder="Numéro, rue, code postal, ville"
110
- )
111
- contact_physique = gr.Textbox(
112
- label="Moyen de contact (email, téléphone)",
113
- placeholder="Email et/ou téléphone"
114
- )
115
-
116
- # Champs pour personne morale (masqués par défaut)
117
- with gr.Group(visible=False) as groupe_personne_morale:
118
- nom_societe = gr.Textbox(
119
- label="Nom de la société",
120
- placeholder="Dénomination sociale"
121
- )
122
- statut = gr.Textbox(
123
- label="Statut juridique",
124
- placeholder="Ex: SARL, SAS, EURL, etc."
125
- )
126
- rcs = gr.Textbox(
127
- label="Numéro RCS",
128
- placeholder="Ex: 123 456 789 R.C.S. Paris"
129
- )
130
- siege = gr.Textbox(
131
- label="Adresse du siège social",
132
- placeholder="Adresse complète du siège"
133
- )
134
- contact_morale = gr.Textbox(
135
- label="Moyen de contact (email, téléphone)",
136
- placeholder="Email et/ou téléphone"
137
- )
138
-
139
- # ===== ÉTAPE 4: DESCRIPTION DE L'ŒUVRE (si contrat droits d'auteur) =====
140
- with gr.Group() as groupe_description_oeuvre:
141
- gr.Markdown("### 4. Description de l'œuvre")
142
- gr.Markdown("""
143
- Décrivez précisément l'œuvre concernée. Cette description sera intégrée dans le contrat pour identifier sans ambiguïté l'objet de la cession.
144
- """)
145
- description_oeuvre = gr.Textbox(
146
- label="Description de l'œuvre",
147
- placeholder="Titre, format, dimensions, support, technique utilisée, date de création, etc.",
148
- lines=5,
149
- info="Plus la description est précise, plus le contrat sera sécurisé juridiquement."
150
- )
151
-
152
- # ===== ÉTAPE 5: DESCRIPTION DE L'IMAGE (si contrat droit à l'image) =====
153
- with gr.Group(visible=False) as groupe_description_image:
154
- gr.Markdown("### 5. Description des images")
155
- gr.Markdown("""
156
- Décrivez précisément les images ou vidéos concernées par la cession du droit à l'image.
157
- """)
158
- description_image = gr.Textbox(
159
- label="Description des images/vidéos",
160
- placeholder="Ex: Séance photo réalisée le [date] à [lieu], comprenant X photographies où apparaît [nom du modèle]",
161
- lines=5,
162
- info="Précisez le contexte, la date et le lieu de prise de vue, le nombre d'images concernées, etc."
163
- )
164
-
165
- # ===== ÉTAPE 6: SUPPORTS D'EXPLOITATION =====
166
- gr.Markdown("### 6. Supports d'exploitation")
167
- gr.Markdown("""
168
- Sélectionnez les supports sur lesquels l'œuvre ou l'image pourra être exploitée.
169
- Le site web et Discord de Tellers sont automatiquement inclus.
170
- """)
171
- supports = gr.CheckboxGroup(
172
- SUPPORTS_OPTIONS,
173
- label="Sur quels supports les droits seront-ils exploités?",
174
- value=["Réseaux sociaux (Facebook, Instagram, Twitter, etc.)"],
175
- info="Vous pouvez sélectionner plusieurs supports. Le site web et Discord de Tellers sont toujours inclus."
176
- )
177
-
178
- # ===== ÉTAPE 7: RÉMUNÉRATION (uniquement si onéreux) =====
179
- with gr.Group(visible=False) as groupe_remuneration:
180
- gr.Markdown("### 7. Rémunération")
181
- gr.Markdown("""
182
- Pour une cession onéreuse, précisez les modalités de rémunération.
183
- Cela peut être un montant forfaitaire ou proportionnel aux recettes.
184
- """)
185
- remuneration = gr.Textbox(
186
- label="Modalités de rémunération",
187
- placeholder="Ex: 500€ versés à la signature, 5% des recettes versés trimestriellement",
188
- lines=3,
189
- info="La rémunération doit être précise pour être juridiquement valable: montant, date(s) de paiement, modalités."
190
- )
191
-
192
- # ===== BOUTONS D'ACTION =====
193
- gr.Markdown("### Génération du contrat")
194
- with gr.Row():
195
- preview_btn = gr.Button("Prévisualiser le contrat", variant="secondary")
196
- generate_btn = gr.Button("Générer le contrat PDF", variant="primary")
197
-
198
- # ===== ONGLET PRÉVISUALISATION =====
199
- with gr.TabItem("Prévisualisation"):
200
- apercu_contrat = gr.Textbox(
201
- label="Aperçu du contrat",
202
- lines=25,
203
- max_lines=50,
204
- interactive=False
205
- )
206
-
207
- # ===== ONGLET TÉLÉCHARGEMENT =====
208
- with gr.TabItem("Téléchargement"):
209
- pdf_output = gr.File(label="Contrat de cession prêt à télécharger")
210
-
211
- # ===== DÉFINITION DES INTERACTIONS CONDITIONNELLES =====
212
-
213
- # 1. Visibilité des champs en fonction du type de contrat
214
- def update_groups_type_contrat(type_selection):
215
- """Met à jour la visibilité des champs selon le type de contrat sélectionné."""
216
- show_auteur = "Auteur (droits d'auteur)" in type_selection
217
- show_image = "Image (droit à l'image)" in type_selection
218
-
219
- return {
220
- groupe_description_oeuvre: gr.update(visible=show_auteur),
221
- groupe_description_image: gr.update(visible=show_image)
222
- }
223
-
224
- type_contrat.change(
225
- fn=update_groups_type_contrat,
226
- inputs=type_contrat,
227
- outputs=[groupe_description_oeuvre, groupe_description_image]
228
- )
229
-
230
- # 2. Visibilité des champs en fonction du type de cession (gratuite/onéreuse)
231
- def update_groups_type_cession(cession_type):
232
- """Met à jour la visibilité des champs selon le type de cession sélectionné."""
233
- is_onereux = cession_type == "Onéreuse"
234
- return {
235
- groupe_droits: gr.update(visible=is_onereux),
236
- groupe_exclusivite: gr.update(visible=is_onereux),
237
- groupe_remuneration: gr.update(visible=is_onereux)
238
- }
239
-
240
- type_cession.change(
241
- fn=update_groups_type_cession,
242
- inputs=type_cession,
243
- outputs=[groupe_droits, groupe_exclusivite, groupe_remuneration]
244
- )
245
-
246
- # 3. Changement de formulaire selon le type d'auteur (physique/morale)
247
- def update_groups_type_auteur(auteur_type_val):
248
- """Met à jour la visibilité des champs selon le type d'auteur sélectionné."""
249
- is_physique = auteur_type_val == "Personne physique"
250
- return {
251
- groupe_personne_physique: gr.update(visible=is_physique),
252
- groupe_personne_morale: gr.update(visible=not is_physique)
253
- }
254
-
255
- auteur_type.change(
256
- fn=update_groups_type_auteur,
257
- inputs=auteur_type,
258
- outputs=[groupe_personne_physique, groupe_personne_morale]
259
- )
260
-
261
- # 4. Prévisualisation du contrat
262
- def handle_preview(type_contrat_val, type_cession_val, auteur_type_val,
263
- gentille_val, nom_val, prenom_val, date_naissance_val, nationalite_val, adresse_val, contact_physique_val,
264
- nom_societe_val, statut_val, rcs_val, siege_val, contact_morale_val,
265
- description_oeuvre_val, description_image_val, supports_val, droits_cedes_val, remuneration_val, exclusivite_val):
266
- """Gère la prévisualisation du contrat."""
267
- # Collecter les informations sur l'auteur/modèle
268
- is_physical_person = (auteur_type_val == "Personne physique")
269
-
270
- data = {
271
- "gentille": gentille_val,
272
- "nom": nom_val,
273
- "prenom": prenom_val,
274
- "date_naissance": date_naissance_val,
275
- "nationalite": nationalite_val,
276
- "adresse": adresse_val,
277
- "contact_physique": contact_physique_val,
278
- "nom_societe": nom_societe_val,
279
- "statut": statut_val,
280
- "rcs": rcs_val,
281
- "siege": siege_val,
282
- "contact_morale": contact_morale_val
283
- }
284
-
285
- auteur_info = collect_author_info(is_physical_person, data)
286
-
287
- # Est-ce que la cession est gratuite ?
288
- est_gratuit = (type_cession_val == "Gratuite")
289
-
290
- # Générer l'aperçu du contrat
291
- apercu = preview_contract_fn(
292
- type_contrat_val, est_gratuit, auteur_type_val, auteur_info,
293
- description_oeuvre_val, description_image_val, supports_val,
294
- droits_cedes_val, remuneration_val, exclusivite_val
295
- )
296
-
297
- return apercu
298
-
299
- preview_btn.click(
300
- fn=handle_preview,
301
- inputs=[
302
- type_contrat, type_cession, auteur_type,
303
- gentille, nom, prenom, date_naissance, nationalite, adresse, contact_physique,
304
- nom_societe, statut, rcs, siege, contact_morale,
305
- description_oeuvre, description_image, supports, droits_cedes, remuneration, exclusivite
306
- ],
307
- outputs=apercu_contrat
308
- )
309
-
310
- # 5. Génération du PDF
311
- def handle_generate_pdf(type_contrat_val, type_cession_val, auteur_type_val,
312
- gentille_val, nom_val, prenom_val, date_naissance_val, nationalite_val, adresse_val, contact_physique_val,
313
- nom_societe_val, statut_val, rcs_val, siege_val, contact_morale_val,
314
- description_oeuvre_val, description_image_val, supports_val, droits_cedes_val, remuneration_val, exclusivite_val):
315
- """Gère la génération du PDF."""
316
- # Collecter les informations sur l'auteur/modèle
317
- is_physical_person = (auteur_type_val == "Personne physique")
318
-
319
- data = {
320
- "gentille": gentille_val,
321
- "nom": nom_val,
322
- "prenom": prenom_val,
323
- "date_naissance": date_naissance_val,
324
- "nationalite": nationalite_val,
325
- "adresse": adresse_val,
326
- "contact_physique": contact_physique_val,
327
- "nom_societe": nom_societe_val,
328
- "statut": statut_val,
329
- "rcs": rcs_val,
330
- "siege": siege_val,
331
- "contact_morale": contact_morale_val
332
- }
333
-
334
- auteur_info = collect_author_info(is_physical_person, data)
335
-
336
- # Est-ce que la cession est gratuite ?
337
- est_gratuit = (type_cession_val == "Gratuite")
338
-
339
- # Générer le PDF
340
- pdf_path = generate_pdf_fn(
341
- type_contrat_val, est_gratuit, auteur_type_val, auteur_info,
342
- description_oeuvre_val, description_image_val, supports_val,
343
- droits_cedes_val, remuneration_val, exclusivite_val
344
- )
345
-
346
- return pdf_path
347
-
348
- generate_btn.click(
349
- fn=handle_generate_pdf,
350
- inputs=[
351
- type_contrat, type_cession, auteur_type,
352
- gentille, nom, prenom, date_naissance, nationalite, adresse, contact_physique,
353
- nom_societe, statut, rcs, siege, contact_morale,
354
- description_oeuvre, description_image, supports, droits_cedes, remuneration, exclusivite
355
- ],
356
- outputs=pdf_output
357
- )
358
-
359
- return demo