From c2698c43bbbb706e57af58aac2ed2a0bfeeb32c3 Mon Sep 17 00:00:00 2001 From: Michel Date: Sat, 26 Apr 2025 14:35:33 +0200 Subject: [PATCH] "Ajout ou correction sur develop" --- domo91.py | 129 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 79 insertions(+), 50 deletions(-) diff --git a/domo91.py b/domo91.py index 47f9695..c32c26a 100644 --- a/domo91.py +++ b/domo91.py @@ -176,44 +176,56 @@ if site_pdf and date_pdf: if st.sidebar.button("📥 Télécharger l’état du jour (PDF)", key="pdf_btn"): generer_pdf(site_pdf, date_pdf.strftime("%Y-%m-%d")) -# 🔔 Forcer une alerte de test dynamique avec choix de la sonde (réservé aux superviseurs) +# --- Forcer une alerte de test dynamique (réservé aux superviseurs) if st.session_state.get("authenticated") and st.session_state.get("role") == "superviseur": site_actuel = ( st.session_state.get("lieu_autorise") if st.session_state.get("role") != "superviseur" else st.session_state.get("selected_site") ) - if site_actuel: - try: - conn = mysql.connector.connect(**db_config) - cursor = conn.cursor() - cursor.execute(f"SELECT DISTINCT Sonde FROM `{site_actuel}` ORDER BY Sonde ASC") - sondes_dispo = [row[0] for row in cursor.fetchall()] - cursor.close() - conn.close() - if sondes_dispo: - st.sidebar.markdown("---") - st.sidebar.subheader("🧪 Test alerte manuelle") - sonde_test = st.sidebar.selectbox("Choisir une sonde :", sondes_dispo) - if st.sidebar.button("🔔 Forcer une alerte de test"): - now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - try: - conn = mysql.connector.connect(**db_config) - cursor = conn.cursor() - table_alertes = f"Alertes_{site_actuel}" - cursor.execute(f""" - INSERT INTO {table_alertes} (Sonde, Debut_defaut, Status) - VALUES (%s, %s, %s) - """, (sonde_test, now, "Test")) - conn.commit() - cursor.close() - conn.close() - st.success(f"Alerte de test créée pour {sonde_test} à {now}") - except Exception as e: - st.error(f"Erreur lors de la création de l'alerte : {e}") - except Exception as e: - st.sidebar.warning(f"Erreur chargement des sondes : {e}") + if site_actuel: + # Initialiser la détection de changement de site + if "last_site" not in st.session_state: + st.session_state["last_site"] = None + + # Si le site a changé, recharger les sondes disponibles + if site_actuel != st.session_state["last_site"]: + try: + conn = mysql.connector.connect(**db_config) + cursor = conn.cursor() + cursor.execute(f"SELECT DISTINCT Sonde FROM `{site_actuel}` ORDER BY Sonde ASC") + st.session_state["sondes_dispo"] = [row[0] for row in cursor.fetchall()] + cursor.close() + conn.close() + st.session_state["last_site"] = site_actuel + except Exception as e: + st.sidebar.warning(f"Erreur chargement des sondes : {e}") + + # Affichage de la liste des sondes disponibles + sondes_dispo = st.session_state.get("sondes_dispo", []) + + if sondes_dispo: + st.sidebar.markdown("---") + st.sidebar.subheader("🧪 Test alerte manuelle") + sonde_test = st.sidebar.selectbox("Choisir une sonde :", sondes_dispo) + + if st.sidebar.button("🔔 Forcer une alerte de test"): + now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + try: + conn = mysql.connector.connect(**db_config) + cursor = conn.cursor() + table_alertes = f"Alertes_{site_actuel}" + cursor.execute(f""" + INSERT INTO {table_alertes} (Sonde, Debut_defaut, Status) + VALUES (%s, %s, %s) + """, (sonde_test, now, "Test")) + conn.commit() + cursor.close() + conn.close() + st.success(f"Alerte de test créée pour {sonde_test} à {now}") + except Exception as e: + st.error(f"Erreur lors de la création de l'alerte : {e}") else: st.success(f"Connecté ({st.session_state['role']})") @@ -226,7 +238,7 @@ if st.session_state.get("authenticated") and st.session_state.get("role") == "su st.markdown("---") st.subheader("📄 Rapport PDF") if "selected_date" in st.session_state: - if st.button("📥 Télécharger l’état du jour (PDF)"): + if st.button("📅 Télécharger l'état du jour (PDF)"): site = st.session_state["lieu_autorise"] date_val = st.session_state["selected_date"].strftime("%Y-%m-%d") generer_pdf(site, date_val) @@ -399,6 +411,11 @@ if st.session_state["authenticated"]: st.error(f"Erreur chargement statistiques : {e}") # --- Affichage automatique des alertes non acquittées --- + site_selectionne = ( + st.session_state.get("lieu_autorise") + if st.session_state.get("role") != "superviseur" + else st.session_state.get("selected_site") + ) try: conn = mysql.connector.connect(**db_config) cursor = conn.cursor(dictionary=True) @@ -414,26 +431,38 @@ if st.session_state["authenticated"]: if st.session_state["role"] == "superviseur": with st.expander("+ Ajouter une nouvelle chambre froide", expanded=False): with st.form("ajout_sonde"): - nouvelle_sonde = st.text_input("Nom de la sonde") - temp_max = st.number_input("Température maximale autorisée (°C)", value=4) - etat_on = st.checkbox("État actif (ON)", value=True) + nouvelle_sonde = st.sidebar.text_input("Nom de la nouvelle sonde :") + seuil_max = st.sidebar.number_input("Température maximale autorisée :", min_value=-50.0, + max_value=50.0, value=6.0, step=0.1) - submitted = st.form_submit_button("✅ Ajouter") - if submitted: + if st.sidebar.button("➕ Ajouter la nouvelle sonde"): try: - conn_add = mysql.connector.connect(**db_config) - cursor_add = conn_add.cursor() - cursor_add.execute( - "INSERT INTO Chambres_froides (Lieu, Sonde, Temp_Max, Status) VALUES (%s, %s, %s, %s)", - (site, nouvelle_sonde, temp_max, "ON" if etat_on else "OFF") - ) - conn_add.commit() - cursor_add.close() - conn_add.close() - st.success(f"Sonde '{nouvelle_sonde}' ajoutée avec succès au site {site} 🎉") - st.session_state["refresh_admin"] = random.randint(1000, 9999) + conn = mysql.connector.connect(**db_config) + cursor = conn.cursor() + + # Insérer dans Chambres_froides + cursor.execute(""" + INSERT INTO Chambres_froides (Lieu, Sonde, Temp_Max, Etat) + VALUES (%s, %s, %s, %s) + """, (site_actuel, nouvelle_sonde, seuil_max, "ON")) + conn.commit() + + # Insérer un premier relevé dans la table de relevés + table_releves = site_actuel + cursor.execute(f""" + INSERT INTO `{table_releves}` (Date, Sonde, Temperature) + VALUES (NOW(), %s, %s) + """, (nouvelle_sonde, 0.0)) + conn.commit() + + cursor.close() + conn.close() + + st.success( + f"Sonde {nouvelle_sonde} ajoutée avec Temp_Max {seuil_max}°C et premier relevé enregistré.") + except Exception as e: - st.error(f"Erreur lors de l'ajout : {e}") + st.error(f"Erreur lors de l'ajout de la sonde : {e}") with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True): if st.button("🔄 Actualiser la liste"): @@ -506,4 +535,4 @@ if st.session_state["authenticated"]: st.error(f"Erreur chargement des connexions : {e}") except exception as err: - st.error(f"Erreur MySQL : {err}") + st.error(f"Erreur MySQL : {err}") \ No newline at end of file