Woziii commited on
Commit
f3fff78
·
verified ·
1 Parent(s): d2ce0c9

Update interface_wizard.py

Browse files
Files changed (1) hide show
  1. interface_wizard.py +27 -41
interface_wizard.py CHANGED
@@ -1,6 +1,6 @@
1
  """
2
  Module définissant l'interface utilisateur Gradio sous forme d'assistant progressif (wizard).
3
- Cette version permet une navigation par étapes avec aperçu en temps réel.
4
  """
5
  import gradio as gr
6
  from utils import collect_author_info, ensure_default_supports
@@ -24,7 +24,7 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
24
  # Définir le nombre total d'étapes
25
  TOTAL_STEPS = 6
26
 
27
- with gr.Blocks(title="Assistant de Contrats de Cession", css="style.css") as demo:
28
  # Variables d'état pour stocker les données entre les étapes
29
  current_step = gr.State(value=1)
30
  contract_data = gr.State(value={
@@ -278,26 +278,30 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
278
  value=""
279
  )
280
 
 
 
281
  # Indicateur de génération
282
- with gr.Group(visible=False) as generation_status_group:
283
- generation_status = gr.Markdown("Préparation du contrat en cours...")
284
  generation_progress = gr.Slider(
285
  minimum=0,
286
  maximum=100,
287
  value=0,
288
  step=1,
289
  interactive=False,
290
- label="Progression"
 
291
  )
 
 
 
 
 
292
 
293
  # Boutons de navigation entre les étapes
294
  with gr.Row():
295
  back_button = gr.Button("Précédent", variant="secondary")
296
  next_button = gr.Button("Suivant", variant="primary")
297
-
298
- # Bouton de génération (visible uniquement à la dernière étape)
299
- with gr.Row(visible=False) as generate_button_row:
300
- generate_button = gr.Button("Générer le PDF", variant="primary", elem_id="generate-btn")
301
 
302
  # COLONNE DROITE - PRÉVISUALISATION EN TEMPS RÉEL
303
  with gr.Column(scale=2):
@@ -307,16 +311,11 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
307
  "Au fur et à mesure que vous remplissez le formulaire, votre contrat se construit ici."
308
  )
309
 
310
- # Prévisualisation du contrat
311
- contract_preview = gr.Markdown(
312
- value="*Commencez à remplir le formulaire pour voir l'aperçu du contrat*",
313
  elem_id="contract-preview"
314
  )
315
-
316
- # Zone de téléchargement (visible uniquement après génération)
317
- with gr.Group(visible=False) as download_group:
318
- gr.Markdown("### Téléchargement")
319
- pdf_output = gr.File(label="Votre contrat est prêt!")
320
 
321
  # ===== FONCTIONS DE NAVIGATION ET MISE À JOUR =====
322
 
@@ -442,9 +441,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
442
  show_physical_person = (current == 3 and author_type_val == "Personne physique")
443
  show_legal_entity = (current == 3 and author_type_val == "Personne morale")
444
 
445
- # Visibilité du bouton de génération (uniquement à la dernière étape)
446
- show_generate_button = (current == TOTAL_STEPS)
447
-
448
  # Mettre à jour l'aperçu du contrat
449
  preview = preview_contract(data)
450
 
@@ -464,7 +460,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
464
  gr.update(visible=rights_visibility), gr.update(visible=remuneration_visibility),
465
  gr.update(visible=show_work_desc), gr.update(visible=show_image_desc),
466
  gr.update(visible=show_physical_person), gr.update(visible=show_legal_entity),
467
- gr.update(visible=show_generate_button),
468
  # Aperçu du contrat
469
  preview
470
  )
@@ -502,9 +497,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
502
  show_physical_person = (current == 3 and data["auteur_type"] == "Personne physique")
503
  show_legal_entity = (current == 3 and data["auteur_type"] == "Personne morale")
504
 
505
- # Visibilité du bouton de génération (uniquement à la dernière étape)
506
- show_generate_button = (current == TOTAL_STEPS)
507
-
508
  # Mettre à jour l'aperçu du contrat
509
  preview = preview_contract(data)
510
 
@@ -524,7 +516,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
524
  gr.update(visible=rights_visibility), gr.update(visible=remuneration_visibility),
525
  gr.update(visible=show_work_desc), gr.update(visible=show_image_desc),
526
  gr.update(visible=show_physical_person), gr.update(visible=show_legal_entity),
527
- gr.update(visible=show_generate_button),
528
  # Aperçu du contrat
529
  preview
530
  )
@@ -545,20 +536,16 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
545
  def generate_pdf(contract_data, filename):
546
  """Génère le PDF du contrat avec indication de progression."""
547
 
548
- # Mise à jour de l'interface pour indiquer le début de la génération
549
- yield gr.update(visible=True), gr.update(value="Préparation des données..."), 0, gr.update(visible=False), None
550
- time.sleep(0.5)
551
-
552
  # Étape 1: Préparation du contrat (25%)
553
- yield gr.update(visible=True), gr.update(value="Construction du contrat..."), 25, gr.update(visible=False), None
554
  time.sleep(0.5)
555
 
556
  # Étape 2: Mise en forme (50%)
557
- yield gr.update(visible=True), gr.update(value="Mise en forme du document..."), 50, gr.update(visible=False), None
558
  time.sleep(0.5)
559
 
560
  # Étape 3: Génération du PDF (75%)
561
- yield gr.update(visible=True), gr.update(value="Génération du PDF..."), 75, gr.update(visible=False), None
562
 
563
  # Appel à la fonction de génération réelle
564
  pdf_path = generate_pdf_fn(
@@ -575,7 +562,7 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
575
  )
576
 
577
  # Finalisation (100%)
578
- yield gr.update(visible=True), gr.update(value="Contrat PDF généré avec succès!"), 100, gr.update(visible=True), pdf_path
579
 
580
  # Fonction simplifiée pour prévisualiser le contrat
581
  def preview_contract(data):
@@ -583,7 +570,7 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
583
 
584
  # Vérifier qu'il y a suffisamment de données pour prévisualiser
585
  if not data.get("type_contrat"):
586
- return "*Complétez au moins le type de contrat pour voir l'aperçu*"
587
 
588
  # Appeler la fonction de prévisualisation
589
  try:
@@ -608,9 +595,10 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
608
  if ligne.strip().startswith("ARTICLE") or ligne.strip().isupper():
609
  preview_html = preview_html.replace(ligne, f"<h3>{ligne}</h3>")
610
 
611
- return preview_html
 
612
  except Exception as e:
613
- return f"*Erreur de prévisualisation: {str(e)}*"
614
 
615
  # ===== ÉVÉNEMENTS =====
616
 
@@ -642,7 +630,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
642
  group_rights, group_remuneration,
643
  group_work_description, group_image_description,
644
  group_physical_person, group_legal_entity,
645
- generate_button_row,
646
  # Aperçu du contrat
647
  contract_preview
648
  ]
@@ -661,7 +648,6 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
661
  group_rights, group_remuneration,
662
  group_work_description, group_image_description,
663
  group_physical_person, group_legal_entity,
664
- generate_button_row,
665
  # Aperçu du contrat
666
  contract_preview
667
  ]
@@ -685,9 +671,9 @@ def create_wizard_interface(generate_pdf_fn, preview_contract_fn):
685
  fn=generate_pdf,
686
  inputs=[contract_data, contract_name],
687
  outputs=[
688
- generation_status_group, generation_status,
689
- generation_progress, download_group, pdf_output
690
  ]
691
  )
692
 
693
- return demo
 
1
  """
2
  Module définissant l'interface utilisateur Gradio sous forme d'assistant progressif (wizard).
3
+ Version améliorée avec zone de prévisualisation fixe et meilleur placement des éléments.
4
  """
5
  import gradio as gr
6
  from utils import collect_author_info, ensure_default_supports
 
24
  # Définir le nombre total d'étapes
25
  TOTAL_STEPS = 6
26
 
27
+ with gr.Blocks(title="Assistant de Contrats de Cession", css="wizard_style.css") as demo:
28
  # Variables d'état pour stocker les données entre les étapes
29
  current_step = gr.State(value=1)
30
  contract_data = gr.State(value={
 
278
  value=""
279
  )
280
 
281
+ generate_button = gr.Button("Générer le PDF", variant="primary", elem_id="generate-btn")
282
+
283
  # Indicateur de génération
284
+ with gr.Group() as generation_status_group:
285
+ generation_status = gr.Markdown("", elem_id="generation-status")
286
  generation_progress = gr.Slider(
287
  minimum=0,
288
  maximum=100,
289
  value=0,
290
  step=1,
291
  interactive=False,
292
+ label="Progression",
293
+ visible=False
294
  )
295
+
296
+ # Zone de téléchargement (maintenant placée sous le bouton)
297
+ with gr.Group(visible=False) as download_group:
298
+ gr.Markdown("### Téléchargement")
299
+ pdf_output = gr.File(label="Votre contrat est prêt!")
300
 
301
  # Boutons de navigation entre les étapes
302
  with gr.Row():
303
  back_button = gr.Button("Précédent", variant="secondary")
304
  next_button = gr.Button("Suivant", variant="primary")
 
 
 
 
305
 
306
  # COLONNE DROITE - PRÉVISUALISATION EN TEMPS RÉEL
307
  with gr.Column(scale=2):
 
311
  "Au fur et à mesure que vous remplissez le formulaire, votre contrat se construit ici."
312
  )
313
 
314
+ # Prévisualisation du contrat - avec classe spéciale pour avoir une hauteur fixe
315
+ contract_preview = gr.HTML(
316
+ value="<div class='fixed-preview'>*Commencez à remplir le formulaire pour voir l'aperçu du contrat*</div>",
317
  elem_id="contract-preview"
318
  )
 
 
 
 
 
319
 
320
  # ===== FONCTIONS DE NAVIGATION ET MISE À JOUR =====
321
 
 
441
  show_physical_person = (current == 3 and author_type_val == "Personne physique")
442
  show_legal_entity = (current == 3 and author_type_val == "Personne morale")
443
 
 
 
 
444
  # Mettre à jour l'aperçu du contrat
445
  preview = preview_contract(data)
446
 
 
460
  gr.update(visible=rights_visibility), gr.update(visible=remuneration_visibility),
461
  gr.update(visible=show_work_desc), gr.update(visible=show_image_desc),
462
  gr.update(visible=show_physical_person), gr.update(visible=show_legal_entity),
 
463
  # Aperçu du contrat
464
  preview
465
  )
 
497
  show_physical_person = (current == 3 and data["auteur_type"] == "Personne physique")
498
  show_legal_entity = (current == 3 and data["auteur_type"] == "Personne morale")
499
 
 
 
 
500
  # Mettre à jour l'aperçu du contrat
501
  preview = preview_contract(data)
502
 
 
516
  gr.update(visible=rights_visibility), gr.update(visible=remuneration_visibility),
517
  gr.update(visible=show_work_desc), gr.update(visible=show_image_desc),
518
  gr.update(visible=show_physical_person), gr.update(visible=show_legal_entity),
 
519
  # Aperçu du contrat
520
  preview
521
  )
 
536
  def generate_pdf(contract_data, filename):
537
  """Génère le PDF du contrat avec indication de progression."""
538
 
 
 
 
 
539
  # Étape 1: Préparation du contrat (25%)
540
+ yield gr.update(value="Préparation des données..."), gr.update(visible=True, value=25), gr.update(visible=False), None
541
  time.sleep(0.5)
542
 
543
  # Étape 2: Mise en forme (50%)
544
+ yield gr.update(value="Construction du contrat..."), gr.update(visible=True, value=50), gr.update(visible=False), None
545
  time.sleep(0.5)
546
 
547
  # Étape 3: Génération du PDF (75%)
548
+ yield gr.update(value="Génération du PDF..."), gr.update(visible=True, value=75), gr.update(visible=False), None
549
 
550
  # Appel à la fonction de génération réelle
551
  pdf_path = generate_pdf_fn(
 
562
  )
563
 
564
  # Finalisation (100%)
565
+ yield gr.update(value="Contrat PDF généré avec succès!"), gr.update(visible=True, value=100), gr.update(visible=True), pdf_path
566
 
567
  # Fonction simplifiée pour prévisualiser le contrat
568
  def preview_contract(data):
 
570
 
571
  # Vérifier qu'il y a suffisamment de données pour prévisualiser
572
  if not data.get("type_contrat"):
573
+ return "<div class='fixed-preview'>*Complétez au moins le type de contrat pour voir l'aperçu*</div>"
574
 
575
  # Appeler la fonction de prévisualisation
576
  try:
 
595
  if ligne.strip().startswith("ARTICLE") or ligne.strip().isupper():
596
  preview_html = preview_html.replace(ligne, f"<h3>{ligne}</h3>")
597
 
598
+ # Encapsuler le contenu dans une div avec la classe spéciale
599
+ return f"<div class='fixed-preview'>{preview_html}</div>"
600
  except Exception as e:
601
+ return f"<div class='fixed-preview'>*Erreur de prévisualisation: {str(e)}*</div>"
602
 
603
  # ===== ÉVÉNEMENTS =====
604
 
 
630
  group_rights, group_remuneration,
631
  group_work_description, group_image_description,
632
  group_physical_person, group_legal_entity,
 
633
  # Aperçu du contrat
634
  contract_preview
635
  ]
 
648
  group_rights, group_remuneration,
649
  group_work_description, group_image_description,
650
  group_physical_person, group_legal_entity,
 
651
  # Aperçu du contrat
652
  contract_preview
653
  ]
 
671
  fn=generate_pdf,
672
  inputs=[contract_data, contract_name],
673
  outputs=[
674
+ generation_status, generation_progress,
675
+ download_group, pdf_output
676
  ]
677
  )
678
 
679
+ return demo