diff --git a/Backup/Sauvegarde du 1742025.txt b/Backup/Sauvegarde du 1742025.txt index f3e63b6..f615d87 100644 --- a/Backup/Sauvegarde du 1742025.txt +++ b/Backup/Sauvegarde du 1742025.txt @@ -137,7 +137,59 @@ if st.session_state["authenticated"]: site_selectionne = st.selectbox("📍 Choisissez un site :", sites_possibles) else: site_selectionne = st.session_state["lieu_autorise"] - st.info(f"Site imposé : {site_selectionne}") + +# --- SECTION ADMINISTRATEUR : Gestion des sondes du site --- + if st.session_state["role"] == "superviseur": + st.markdown("## 🛠️ Gestion des chambres froides") + + try: + conn_admin = mysql.connector.connect(**db_config) + cursor_admin = conn_admin.cursor(dictionary=True) + + cursor_admin.execute("SELECT * FROM Chambres_froides WHERE Lieu = %s", (site_selectionne,)) + chambres = cursor_admin.fetchall() + + if chambres: + for chambre in chambres: + col1, col2, col3 = st.columns([3, 1, 2]) + with col1: + st.markdown(f"**{chambre['Sonde']}**") + + # --- Toggle ON/OFF + with col2: + etat = st.checkbox("ON", value=(chambre["Etat"] == "ON"), key=f"etat_{chambre['Id']}") + new_etat = "ON" if etat else "OFF" + + # --- Contrôle +/- Temp_Max + with col3: + temp_max = chambre["Temp_Max"] + moins, val, plus = st.columns([1, 2, 1]) + with moins: + if st.button("➖", key=f"moins_{chambre['Id']}"): + temp_max -= 1 + with val: + st.markdown(f"
{temp_max}°C
", unsafe_allow_html=True) + with plus: + if st.button("➕", key=f"plus_{chambre['Id']}"): + temp_max += 1 + + # Mise à jour si changement détecté + if new_etat != chambre["Etat"] or temp_max != chambre["Temp_Max"]: + cursor_admin.execute( + "UPDATE Chambres_froides SET Etat = %s, Temp_Max = %s WHERE Id = %s", + (new_etat, temp_max, chambre["Id"]) + ) + conn_admin.commit() + st.success(f"{chambre['Sonde']} mise à jour") + + else: + st.info("Aucune chambre froide configurée pour ce site.") + + cursor_admin.close() + conn_admin.close() + + except Exception as e: + st.error(f"Erreur MySQL (admin) : {e}") selected_date = st.date_input("📅 Date du relevé", value=date.today()) st.session_state["selected_date"] = selected_date diff --git a/domo91.py b/domo91.py index 67b79a5..6df5cd9 100644 --- a/domo91.py +++ b/domo91.py @@ -7,6 +7,7 @@ import matplotlib.pyplot as plt import matplotlib.dates as mdates from fpdf import FPDF import os +import random st.set_page_config(page_title="Domo91 - Surveillance", layout="wide") st.title("📡 Supervision Températures") @@ -156,6 +157,7 @@ if st.session_state["authenticated"]: site_selectionne = st.session_state["lieu_autorise"] st.info(f"Site imposé : {site_selectionne}") + selected_date = st.date_input("📅 Date du relevé", value=date.today()) st.session_state["selected_date"] = selected_date @@ -184,6 +186,7 @@ if st.session_state["authenticated"]: df_sonde = df_sonde[(df_sonde["Heure"] >= 12) & (df_sonde["Heure"] < 18)] elif tranche == "Nuit (18h-6h)": df_sonde = df_sonde[(df_sonde["Heure"] >= 18) | (df_sonde["Heure"] < 6)] + df_sonde = df_sonde.copy() cursor.execute("SELECT Temp_Max FROM Chambres_froides WHERE Lieu = %s AND Sonde = %s", (site_selectionne, sonde_choisie)) seuil = cursor.fetchone() @@ -204,7 +207,8 @@ if st.session_state["authenticated"]: # Appliquer le style uniquement à la colonne "Temperature" - styled_df = df_filtré.style.map(surlignage_temp, subset=["Temperature"]) + + styled_df = df_filtré.style.applymap(surlignage_temp, subset=["Temperature"]) st.dataframe(styled_df, use_container_width=True) @@ -243,5 +247,85 @@ if st.session_state["authenticated"]: except Exception as e: st.error(f"Erreur MySQL : {e}") +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) + + submitted = st.form_submit_button("✅ Ajouter") + if submitted: + try: + conn_add = mysql.connector.connect(**db_config) + cursor_add = conn_add.cursor() + + cursor_add.execute( + "INSERT INTO Chambres_froides (Lieu, Sonde, Temp_Max, Etat) VALUES (%s, %s, %s, %s)", + (site_selectionne, 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_selectionne} 🎉") + + # Refresh immédiat + st.session_state["refresh_admin"] = random.randint(1000, 9999) + + except Exception as e: + st.error(f"Erreur lors de l'ajout : {e}") + with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True): + + # Bouton d'actualisation + if st.button("🔄 Actualiser la liste"): + st.session_state["refresh_admin"] = random.randint(0, 9999) # Force le rerun + + try: + conn_admin = mysql.connector.connect(**db_config) + cursor_admin = conn_admin.cursor(dictionary=True) + + cursor_admin.execute("SELECT * FROM Chambres_froides WHERE Lieu = %s", (site_selectionne,)) + chambres = cursor_admin.fetchall() + + if not chambres: + st.warning("Aucune chambre froide pour ce site.") + else: + for chambre in chambres: + col1, col2, col3 = st.columns([3, 1, 2]) + with col1: + st.markdown(f"**{chambre['Sonde']}**") + + with col2: + etat = st.checkbox("ON", value=(chambre["Etat"] == "ON"), + key=f"etat_{chambre['Id']}_{st.session_state.get('refresh_admin', 0)}") + new_etat = "ON" if etat else "OFF" + + with col3: + temp_max = chambre["Temp_Max"] + moins, val, plus = st.columns([1, 2, 1]) + with moins: + if st.button("➖", key=f"moins_{chambre['Id']}"): + temp_max -= 1 + with val: + st.markdown(f"
{temp_max}°C
", + unsafe_allow_html=True) + with plus: + if st.button("âž•", key=f"plus_{chambre['Id']}"): + temp_max += 1 + + if new_etat != chambre["Etat"] or temp_max != chambre["Temp_Max"]: + cursor_admin.execute( + "UPDATE Chambres_froides SET Etat = %s, Temp_Max = %s WHERE Id = %s", + (new_etat, temp_max, chambre["Id"]) + ) + conn_admin.commit() + st.success(f"{chambre['Sonde']} mise Ă  jour") + + cursor_admin.close() + conn_admin.close() + + except Exception as e: + st.error(f"Erreur SQL (admin) : {e}")