diff --git a/app/fiches/utils/tickets/core.py b/app/fiches/utils/tickets/core.py index f48b3db..d2544f6 100644 --- a/app/fiches/utils/tickets/core.py +++ b/app/fiches/utils/tickets/core.py @@ -110,10 +110,6 @@ def creer_ticket_gitea(titre, corps, labels): reponse = gitea_request("post", url, headers={"Content-Type": "application/json"}, data=json.dumps(data)) if not reponse: - return - - issue_url = reponse.json().get("html_url", "") - if issue_url: - st.success(f"{str(_('pages.fiches.tickets.created_success'))} [Voir le ticket]({issue_url})") + return False else: - st.success(str(_('pages.fiches.tickets.created'))) + return True diff --git a/app/fiches/utils/tickets/creation.py b/app/fiches/utils/tickets/creation.py index dd3ddb4..ebebd44 100644 --- a/app/fiches/utils/tickets/creation.py +++ b/app/fiches/utils/tickets/creation.py @@ -74,6 +74,8 @@ def afficher_controles_formulaire(): col1, col2 = st.columns(2) if col1.button(str(_("pages.fiches.tickets.preview"))): st.session_state.previsualiser = True + # S'assurer que l'expander reste ouvert en mode prévisualisation + st.session_state.expander_state = True if col2.button(str(_("pages.fiches.tickets.cancel"))): st.session_state.previsualiser = False st.rerun() @@ -81,6 +83,23 @@ def afficher_controles_formulaire(): def gerer_previsualisation_et_soumission(reponses, labels, selected_ops, cible): """Gère la prévisualisation et la soumission du ticket.""" + # Si nous avons tenté de créer un ticket (succès ou erreur) + if st.session_state.get("ticket_cree", False) or st.session_state.get("ticket_erreur", False): + if st.session_state.get("ticket_cree", False): + st.success(str(_("pages.fiches.tickets.created_success"))) + else: + st.error(str(_("pages.fiches.tickets.creation_error"))) + + if st.button(str(_("pages.fiches.tickets.continue"))): + # Réinitialiser le formulaire et cacher l'expander + st.session_state.ticket_cree = False + st.session_state.ticket_erreur = False + st.session_state.previsualiser = False + st.session_state.expander_state = False + st.rerun() + return + + # Si nous ne sommes pas en mode prévisualisation, ne rien afficher if not st.session_state.get("previsualiser", False): return @@ -101,15 +120,31 @@ def gerer_previsualisation_et_soumission(reponses, labels, selected_ops, cible): labels_ids.append(labels_existants["Backlog"]) corps = construire_corps_ticket_markdown(reponses) - creer_ticket_gitea(titre_ticket, corps, labels_ids) + resultat = creer_ticket_gitea(titre_ticket, corps, labels_ids) + # Marquer le résultat et ouvrir l'expander pour afficher le résultat + st.session_state.ticket_cree = resultat + st.session_state.ticket_erreur = not resultat st.session_state.previsualiser = False - st.success(str(_("pages.fiches.tickets.created"))) + st.session_state.expander_state = True + st.rerun() def formulaire_creation_ticket_dynamique(fiche_selectionnee): """Fonction principale pour le formulaire de création de ticket.""" - with st.expander(str(_("pages.fiches.tickets.create_new")), expanded=False): + # Initialiser l'état de l'expander si ce n'est pas déjà fait + if "expander_state" not in st.session_state: + st.session_state.expander_state = False + + with st.expander(str(_("pages.fiches.tickets.create_new")), expanded=st.session_state.expander_state): + # Initialiser les états si ce n'est pas déjà fait + if "ticket_cree" not in st.session_state: + st.session_state.ticket_cree = False + if "ticket_erreur" not in st.session_state: + st.session_state.ticket_erreur = False + if "previsualiser" not in st.session_state: + st.session_state.previsualiser = False + # Chargement et vérification du modèle contenu_modele = charger_modele_ticket() if not contenu_modele: @@ -119,11 +154,21 @@ def formulaire_creation_ticket_dynamique(fiche_selectionnee): # Traitement du modèle et génération du formulaire sections = parser_modele_ticket(contenu_modele) labels, selected_ops, cible = generer_labels(fiche_selectionnee) - reponses = creer_champs_formulaire(sections, fiche_selectionnee) - - # Gestion des contrôles et de la prévisualisation - afficher_controles_formulaire() - gerer_previsualisation_et_soumission(reponses, labels, selected_ops, cible) + + # Créer le formulaire et gérer ses états + if st.session_state.ticket_cree or st.session_state.ticket_erreur: + # Si le ticket a été créé ou a échoué, afficher le message approprié et le bouton continuer + gerer_previsualisation_et_soumission({}, labels, selected_ops, cible) + else: + # Sinon afficher le formulaire normal + reponses = creer_champs_formulaire(sections, fiche_selectionnee) + + # Afficher les contrôles uniquement si nous ne sommes pas en mode prévisualisation + if not st.session_state.previsualiser: + afficher_controles_formulaire() + + # Gérer la prévisualisation et soumission + gerer_previsualisation_et_soumission(reponses, labels, selected_ops, cible) def charger_modele_ticket(): diff --git a/app/fiches/utils/tickets/display.py b/app/fiches/utils/tickets/display.py index 454b23b..6dfc028 100644 --- a/app/fiches/utils/tickets/display.py +++ b/app/fiches/utils/tickets/display.py @@ -6,7 +6,6 @@ import re from collections import defaultdict from dateutil import parser from utils.translations import _ -from .core import rechercher_tickets_gitea def extraire_statut_par_label(ticket): diff --git a/assets/locales/en.json b/assets/locales/en.json index 86a5128..c32da17 100644 --- a/assets/locales/en.json +++ b/assets/locales/en.json @@ -227,7 +227,11 @@ "comment_error": "Error retrieving comments:", "opened_by": "Opened by", "on_date": "on", - "updated": "UPDATED" + "updated": "UPDATED", + "continue": "Continuer", + "created_success": "Ticket created and placed in moderation", + "created_error": "Ticket creation failed. Please try later", + "see_ticket": "See ticket" } } }, diff --git a/assets/locales/fr.json b/assets/locales/fr.json index 20da328..7346ebf 100644 --- a/assets/locales/fr.json +++ b/assets/locales/fr.json @@ -227,7 +227,11 @@ "comment_error": "Erreur lors de la récupération des commentaires :", "opened_by": "Ouvert par", "on_date": "le", - "updated": "MAJ" + "updated": "MAJ", + "continue": "Continuer", + "created_success": "Ticket créé et placé en modération", + "created_error": "Échec de la création du ticket. Veuillez réessayer plus tard", + "see_ticket": "Voir le ticket" } } }, diff --git a/fabnum.py b/fabnum.py index ac52ed2..1dddcfd 100644 --- a/fabnum.py +++ b/fabnum.py @@ -181,15 +181,19 @@ elif st.session_state.onglet == fiches_tab: else: # Charger le graphe une seule fois # Le graphe n'est pas nécessaire pour Instructions ou Fiches - G_temp, G_temp_ivc, dot_file_path = charger_graphe() + dot_file_path = charger_graphe() if dot_file_path and st.session_state.onglet == analyse_tab: + G_temp = st.session_state["G_temp"] interface_analyse(G_temp) elif dot_file_path and st.session_state.onglet == visualisations_tab: + G_temp = st.session_state["G_temp"] + G_temp_ivc = st.session_state["G_temp_ivc"] interface_visualisations(G_temp, G_temp_ivc) elif dot_file_path and st.session_state.onglet == personnalisation_tab: + G_temp = st.session_state["G_temp"] G_temp = interface_personnalisation(G_temp) fermer_page() diff --git a/utils/graph_utils.py b/utils/graph_utils.py index 8253e85..b0d5f8f 100644 --- a/utils/graph_utils.py +++ b/utils/graph_utils.py @@ -189,9 +189,7 @@ def charger_graphe(): dot_file_path = True if dot_file_path: - G_temp = st.session_state["G_temp"] - G_temp_ivc = st.session_state["G_temp_ivc"] + return dot_file_path else: st.error("Impossible de charger le graphe pour cet onglet.") - - return G_temp, G_temp_ivc, dot_file_path + return dot_file_path