Modification du formulaire des tickets pour le réinitaliser après la

création
This commit is contained in:
Stéphan Peccini 2025-05-16 06:36:53 +02:00
parent fc08a00a6c
commit 92bfd442c2
7 changed files with 72 additions and 22 deletions

View File

@ -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

View File

@ -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():

View File

@ -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):

View File

@ -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"
}
}
},

View File

@ -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"
}
}
},

View File

@ -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()

View File

@ -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