Ajout de fonctions dans Domo91 sur develop

This commit is contained in:
2025-05-08 21:34:24 +02:00
parent e3b124c6bd
commit a33c8b9581

136
domo91.py
View File

@@ -28,6 +28,8 @@ db_config = {
"password": os.getenv("DB_PASSWORD"),
"database": os.getenv("DB_NAME")
}
def get_connection():
return mysql.connector.connect(**db_config)
# --- Fonction de génération PDF ---
def generer_pdf(site, date_str):
@@ -137,7 +139,7 @@ if not st.session_state.get("authenticated"):
st.success(f"Connecté comme {result['role']} ({result['Lieu']})")
# Enregistrement de la connexion dans Connexion_Log
try:
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
now = datetime.datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute("""
INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion)
VALUES (%s, %s, %s)
@@ -208,7 +210,7 @@ if st.session_state.get("authenticated") and st.session_state.get("role") == "su
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")
now = datetime.datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
@@ -241,6 +243,28 @@ if st.session_state.get("authenticated") and st.session_state.get("role") == "su
generer_pdf(site, date_val)
else:
st.info("Sélectionnez une date pour activer la génération PDF.")
# Récupération des sondes actives
def get_sondes_par_lieu(lieu):
conn = get_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT Id, Sonde, En_entretien FROM Chambres_froides WHERE Lieu = %s", (lieu,))
sondes = cursor.fetchall()
conn.close()
return sondes
# Mise à jour statut entretien
def maj_entretien(sonde_id, statut, utilisateur):
conn = get_connection()
cursor = conn.cursor()
cursor.execute("UPDATE Chambres_froides SET En_entretien = %s WHERE Id = %s", (statut, sonde_id))
# Insertion dans Connexion_log
action = "Mise en entretien" if statut else "Sortie d'entretien"
cursor.execute(
"INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion, Action) VALUES (%s, %s, %s, %s)",
(utilisateur, lieu, datetime.datetime.now(), action)
)
conn.commit()
conn.close()
# --- CONTENU PRINCIPAL SI AUTHENTIFIÉ ---
if st.session_state["authenticated"]:
@@ -278,11 +302,17 @@ if st.session_state["authenticated"]:
st.error(f"Erreur lors de la récupération des alertes : {e}")
# --- NAVIGATION ---
if st.session_state["role"] == "superviseur":
onglet = st.sidebar.radio("📁 Navigation", ["Accueil", "Statistiques", "Traffic"])
if st.session_state.get("authenticated"):
# Navigation (onglets dynamiques selon rôle)
if st.session_state["role"] == "superviseur":
onglets_possibles = ["Accueil", "Statistiques", "Entretien", "Traffic"]
else:
onglets_possibles = ["Accueil", "Entretien"]
onglet = st.sidebar.radio("📁 Navigation", onglets_possibles)
# --- ONGLET ACCUEIL ---
else:
onglet = "Accueil"
if onglet == "Accueil":
st.markdown("## Sélection du site et de la date")
try:
@@ -298,7 +328,11 @@ if st.session_state["authenticated"]:
selected_date = st.date_input("📅 Date du relevé", value=date.today())
st.session_state["selected_date"] = selected_date
site_selectionne = st.session_state.get("lieu_autorise") or st.session_state.get("selected_site")
if not site_selectionne:
st.warning("Aucun site sélectionné.")
st.stop()
cursor.execute(
f"SELECT * FROM `{site_selectionne}` WHERE DATE(Date) = %s ORDER BY Sonde, Date DESC",
(selected_date.strftime("%Y-%m-%d"),)
@@ -362,6 +396,7 @@ if st.session_state["authenticated"]:
except Exception as e:
st.error(f"Erreur MySQL : {e}")
# ---- ONGLET STATISTIQUES ---
elif onglet == "Statistiques":
st.markdown("## 📈 Statistiques de température")
@@ -407,32 +442,15 @@ if st.session_state["authenticated"]:
except Exception as e:
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)
table_alertes = f"Alertes_{site_selectionne}"
cursor.close()
conn.close()
except Exception as e:
st.error(f"Erreur lors de la récupération des alertes : {e}")
# --- Fonctionnalités administrateur : ajout et gestion des chambres froides ---
if st.session_state["role"] == "superviseur":
with st.expander("+ Ajouter une nouvelle chambre froide", expanded=False):
with st.form("ajout_sonde"):
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)
nouvelle_sonde = st.text_input("Nom de la nouvelle sonde :")
seuil_max = st.number_input("Température maximale autorisée :", min_value=-50.0, max_value=50.0,
value=6.0, step=0.1)
if st.sidebar.button(" Ajouter la nouvelle sonde"):
if st.form_submit_button(" Ajouter la nouvelle sonde"):
try:
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
@@ -460,7 +478,24 @@ if st.session_state["authenticated"]:
except Exception as e:
st.error(f"Erreur lors de l'ajout de la sonde : {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)
table_alertes = f"Alertes_{site_selectionne}"
cursor.close()
conn.close()
except Exception as e:
st.error(f"Erreur lors de la récupération des alertes : {e}")
if st.session_state["role"] == "superviseur":
with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True):
if st.button("🔄 Actualiser la liste"):
st.session_state["refresh_admin"] = random.randint(0, 9999)
@@ -511,6 +546,52 @@ if st.session_state["authenticated"]:
except Exception as e:
st.error(f"Erreur SQL (admin) : {e}")
# --- ONGLET ENTRETIEN ---
elif onglet == "Entretien":
st.markdown("## 🧰 Gestion des sondes en entretien")
role = st.session_state.get("role", "utilisateur")
lieu = st.session_state.get("lieu_autorise") if role != "superviseur" else st.selectbox("Choisir un lieu :",
["Saclay", "Meudon"])
if not lieu:
st.warning("Aucun site sélectionné.")
st.stop()
else:
st.info(f"Site imposé : {lieu}" if role != "superviseur" else "")
def get_sondes_par_lieu(lieu):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT Id, Sonde, En_entretien FROM Chambres_froides WHERE Lieu = %s", (lieu,))
sondes = cursor.fetchall()
cursor.close()
conn.close()
return sondes
def maj_entretien(sonde_id, en_entretien, utilisateur, cible):
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()
cursor.execute("UPDATE Chambres_froides SET En_entretien = %s WHERE Id = %s", (en_entretien, sonde_id))
cursor.execute(
"INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion, Action, Cible) VALUES (%s, %s, %s, %s, %s)",
(utilisateur, lieu, datetime.datetime.now(), f"{'Mise' if en_entretien else 'Retrait'} en entretien",
cible))
conn.commit()
cursor.close()
conn.close()
try:
sondes = get_sondes_par_lieu(lieu)
for sonde in sondes:
checked = st.checkbox(f"{sonde['Sonde']} (ID: {sonde['Id']})", value=sonde['En_entretien'],
key=f"entretien_{sonde['Id']}")
if checked != sonde['En_entretien']:
maj_entretien(sonde['Id'], checked, st.session_state.get("utilisateur", "Inconnu"), sonde['Sonde'])
st.success(f"{sonde['Sonde']} {'mise' if checked else 'retirée'} en entretien.")
except Exception as e:
st.error(f"Erreur lors du chargement des sondes : {e}")
# --- ONGLET TRAFFIC ------
elif onglet == "Traffic":
@@ -539,4 +620,3 @@ if st.session_state["authenticated"]:
except Exception as err:
st.error(f"Erreur MySQL : {err}")