Ajout de fonctions dans Domo91 sur develop
This commit is contained in:
134
domo91.py
134
domo91.py
@@ -28,6 +28,8 @@ db_config = {
|
|||||||
"password": os.getenv("DB_PASSWORD"),
|
"password": os.getenv("DB_PASSWORD"),
|
||||||
"database": os.getenv("DB_NAME")
|
"database": os.getenv("DB_NAME")
|
||||||
}
|
}
|
||||||
|
def get_connection():
|
||||||
|
return mysql.connector.connect(**db_config)
|
||||||
|
|
||||||
# --- Fonction de génération PDF ---
|
# --- Fonction de génération PDF ---
|
||||||
def generer_pdf(site, date_str):
|
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']})")
|
st.success(f"Connecté comme {result['role']} ({result['Lieu']})")
|
||||||
# Enregistrement de la connexion dans Connexion_Log
|
# Enregistrement de la connexion dans Connexion_Log
|
||||||
try:
|
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("""
|
cursor.execute("""
|
||||||
INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion)
|
INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion)
|
||||||
VALUES (%s, %s, %s)
|
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)
|
sonde_test = st.sidebar.selectbox("Choisir une sonde :", sondes_dispo)
|
||||||
|
|
||||||
if st.sidebar.button("🔔 Forcer une alerte de test"):
|
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:
|
try:
|
||||||
conn = mysql.connector.connect(**db_config)
|
conn = mysql.connector.connect(**db_config)
|
||||||
cursor = conn.cursor()
|
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)
|
generer_pdf(site, date_val)
|
||||||
else:
|
else:
|
||||||
st.info("Sélectionnez une date pour activer la génération PDF.")
|
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É ---
|
# --- CONTENU PRINCIPAL SI AUTHENTIFIÉ ---
|
||||||
if st.session_state["authenticated"]:
|
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}")
|
st.error(f"Erreur lors de la récupération des alertes : {e}")
|
||||||
|
|
||||||
# --- NAVIGATION ---
|
# --- NAVIGATION ---
|
||||||
|
if st.session_state.get("authenticated"):
|
||||||
|
|
||||||
|
# Navigation (onglets dynamiques selon rôle)
|
||||||
if st.session_state["role"] == "superviseur":
|
if st.session_state["role"] == "superviseur":
|
||||||
onglet = st.sidebar.radio("📁 Navigation", ["Accueil", "Statistiques", "Traffic"])
|
onglets_possibles = ["Accueil", "Statistiques", "Entretien", "Traffic"]
|
||||||
# --- ONGLET ACCUEIL ---
|
|
||||||
else:
|
else:
|
||||||
onglet = "Accueil"
|
onglets_possibles = ["Accueil", "Entretien"]
|
||||||
|
|
||||||
|
onglet = st.sidebar.radio("📁 Navigation", onglets_possibles)
|
||||||
|
|
||||||
|
# --- ONGLET ACCUEIL ---
|
||||||
if onglet == "Accueil":
|
if onglet == "Accueil":
|
||||||
st.markdown("## Sélection du site et de la date")
|
st.markdown("## Sélection du site et de la date")
|
||||||
try:
|
try:
|
||||||
@@ -298,7 +328,11 @@ if st.session_state["authenticated"]:
|
|||||||
|
|
||||||
selected_date = st.date_input("📅 Date du relevé", value=date.today())
|
selected_date = st.date_input("📅 Date du relevé", value=date.today())
|
||||||
st.session_state["selected_date"] = selected_date
|
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(
|
cursor.execute(
|
||||||
f"SELECT * FROM `{site_selectionne}` WHERE DATE(Date) = %s ORDER BY Sonde, Date DESC",
|
f"SELECT * FROM `{site_selectionne}` WHERE DATE(Date) = %s ORDER BY Sonde, Date DESC",
|
||||||
(selected_date.strftime("%Y-%m-%d"),)
|
(selected_date.strftime("%Y-%m-%d"),)
|
||||||
@@ -362,6 +396,7 @@ if st.session_state["authenticated"]:
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"Erreur MySQL : {e}")
|
st.error(f"Erreur MySQL : {e}")
|
||||||
|
|
||||||
# ---- ONGLET STATISTIQUES ---
|
# ---- ONGLET STATISTIQUES ---
|
||||||
elif onglet == "Statistiques":
|
elif onglet == "Statistiques":
|
||||||
st.markdown("## 📈 Statistiques de température")
|
st.markdown("## 📈 Statistiques de température")
|
||||||
@@ -407,32 +442,15 @@ if st.session_state["authenticated"]:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"Erreur chargement statistiques : {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 ---
|
# --- Fonctionnalités administrateur : ajout et gestion des chambres froides ---
|
||||||
if st.session_state["role"] == "superviseur":
|
if st.session_state["role"] == "superviseur":
|
||||||
with st.expander("+ Ajouter une nouvelle chambre froide", expanded=False):
|
with st.expander("+ Ajouter une nouvelle chambre froide", expanded=False):
|
||||||
with st.form("ajout_sonde"):
|
with st.form("ajout_sonde"):
|
||||||
nouvelle_sonde = st.sidebar.text_input("Nom de la nouvelle sonde :")
|
nouvelle_sonde = st.text_input("Nom de la nouvelle sonde :")
|
||||||
seuil_max = st.sidebar.number_input("Température maximale autorisée :", min_value=-50.0,
|
seuil_max = st.number_input("Température maximale autorisée :", min_value=-50.0, max_value=50.0,
|
||||||
max_value=50.0, value=6.0, step=0.1)
|
value=6.0, step=0.1)
|
||||||
|
|
||||||
if st.sidebar.button("➕ Ajouter la nouvelle sonde"):
|
if st.form_submit_button("➕ Ajouter la nouvelle sonde"):
|
||||||
try:
|
try:
|
||||||
conn = mysql.connector.connect(**db_config)
|
conn = mysql.connector.connect(**db_config)
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
@@ -460,7 +478,24 @@ if st.session_state["authenticated"]:
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"Erreur lors de l'ajout de la sonde : {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):
|
with st.expander("🛠️ Gestion des chambres froides (administrateur)", expanded=True):
|
||||||
if st.button("🔄 Actualiser la liste"):
|
if st.button("🔄 Actualiser la liste"):
|
||||||
st.session_state["refresh_admin"] = random.randint(0, 9999)
|
st.session_state["refresh_admin"] = random.randint(0, 9999)
|
||||||
@@ -511,6 +546,52 @@ if st.session_state["authenticated"]:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"Erreur SQL (admin) : {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 ------
|
# --- ONGLET TRAFFIC ------
|
||||||
elif onglet == "Traffic":
|
elif onglet == "Traffic":
|
||||||
@@ -539,4 +620,3 @@ if st.session_state["authenticated"]:
|
|||||||
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
st.error(f"Erreur MySQL : {err}")
|
st.error(f"Erreur MySQL : {err}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user