"🔧 Ajout des fonctions gestion des boutons"
This commit is contained in:
132
domo91.py
132
domo91.py
@@ -26,8 +26,10 @@ db_config = {
|
||||
"database": "Sondes"
|
||||
}
|
||||
|
||||
|
||||
# --- Fonction de génération PDF ---
|
||||
def generer_pdf(site, date_str):
|
||||
st.info(f"Génération du rapport PDF pour {site} à la date {date_str}")
|
||||
try:
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
@@ -35,23 +37,7 @@ def generer_pdf(site, date_str):
|
||||
cursor.execute(f"SELECT Sonde, Date, Temperature FROM `{site}` WHERE DATE(Date) = %s ORDER BY Sonde, Date", (date_str,))
|
||||
rows = cursor.fetchall()
|
||||
df = pd.DataFrame(rows)
|
||||
df["Heure"] = pd.to_datetime(df["Date"])
|
||||
|
||||
# --- Appliquer les filtres de l'utilisateur ---
|
||||
sonde_choisie = st.session_state.get("sonde_selectionnee")
|
||||
tranche = st.session_state.get("tranche_horaire")
|
||||
if sonde_choisie:
|
||||
df = df[df["Sonde"] == sonde_choisie]
|
||||
if tranche:
|
||||
heure = df["Heure"].dt.hour
|
||||
if tranche == "Matin (6h-12h)":
|
||||
df = df[(heure >= 6) & (heure < 12)]
|
||||
elif tranche == "Après-midi (12h-18h)":
|
||||
df = df[(heure >= 12) & (heure < 18)]
|
||||
elif tranche == "Nuit (18h-6h)":
|
||||
df = df[(heure >= 18) | (heure < 6)]
|
||||
|
||||
df["Heure"] = df["Heure"].dt.strftime("%H:%M")
|
||||
df["Heure"] = pd.to_datetime(df["Date"]).dt.strftime("%H:%M")
|
||||
|
||||
releves = {}
|
||||
for sonde in df["Sonde"].unique():
|
||||
@@ -81,19 +67,12 @@ def generer_pdf(site, date_str):
|
||||
def releves_section(self, data):
|
||||
self.set_font("Arial", "B", 12)
|
||||
self.cell(0, 10, "Relevés de température", ln=1)
|
||||
col_width = self.w / 3.3
|
||||
row_height = 6
|
||||
for sonde, mesures in data.items():
|
||||
if not mesures:
|
||||
continue
|
||||
self.set_font("Arial", "B", 11)
|
||||
self.cell(0, 8, f"Sonde : {sonde}", ln=1, fill=True)
|
||||
self.cell(0, 8, f"Sonde : {sonde}", ln=1)
|
||||
self.set_font("Arial", "", 10)
|
||||
for i in range(0, len(mesures), 3):
|
||||
ligne = mesures[i:i+3]
|
||||
for heure, temp in ligne:
|
||||
self.cell(col_width, row_height, f"{heure} : {temp:.1f}°C", border=1)
|
||||
self.ln()
|
||||
for heure, temp in mesures:
|
||||
self.cell(0, 6, f"{heure} - {temp} °C", ln=1)
|
||||
self.ln(2)
|
||||
|
||||
def alertes_section(self, data):
|
||||
@@ -111,66 +90,21 @@ def generer_pdf(site, date_str):
|
||||
|
||||
file_name = f"rapport_{site}_{date_str}.pdf"
|
||||
output_dir = "PDF"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
os.makedirs(output_dir, exist_ok=True) # 🔧 Crée le dossier si absent
|
||||
output_path = os.path.join(output_dir, file_name)
|
||||
|
||||
pdf.output(output_path)
|
||||
|
||||
return output_path
|
||||
with open(output_path, "rb") as f:
|
||||
st.download_button(
|
||||
label="📥 Télécharger le rapport PDF",
|
||||
data=f,
|
||||
file_name=file_name,
|
||||
mime="application/pdf"
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
st.error(f"Erreur lors de la génération du PDF : {e}")
|
||||
return None
|
||||
|
||||
# Ajout du bouton dans la sidebar pour tous les utilisateurs connectés
|
||||
if st.session_state.get("authenticated") and st.session_state.get("selected_date"):
|
||||
site = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
|
||||
st.session_state["site_selectionne"] = site
|
||||
st.sidebar.markdown("---")
|
||||
st.sidebar.subheader("📄 Impressions")
|
||||
|
||||
if st.sidebar.button("📥 Générer le PDF maintenant"):
|
||||
pdf_path = generer_pdf(site, date_val)
|
||||
if pdf_path:
|
||||
st.session_state["pdf_path"] = pdf_path
|
||||
|
||||
if "pdf_path" in st.session_state:
|
||||
with open(st.session_state["pdf_path"], "rb") as f:
|
||||
st.sidebar.download_button(
|
||||
label="📄 Télécharger le PDF",
|
||||
data=f,
|
||||
file_name=os.path.basename(st.session_state["pdf_path"]),
|
||||
mime="application/pdf",
|
||||
key="pdf_download_button"
|
||||
)
|
||||
|
||||
# Ajout du bouton dans la sidebar pour tous les utilisateurs connectés
|
||||
if st.session_state.get("authenticated") and st.session_state.get("selected_date"):
|
||||
site = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
|
||||
st.session_state["site_selectionne"] = site
|
||||
st.sidebar.markdown("---")
|
||||
st.sidebar.subheader("📄 Impressions")
|
||||
generer_pdf(site, date_val)
|
||||
# Ajout du bouton dans la sidebar pour tous les utilisateurs connectés
|
||||
if st.session_state.get("authenticated") and st.session_state.get("selected_date"):
|
||||
site = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
|
||||
st.sidebar.markdown("---")
|
||||
st.sidebar.subheader("📄 Impressions")
|
||||
generer_pdf(site, date_val)
|
||||
|
||||
# --- Initialisation des variables de session ---
|
||||
if "authenticated" not in st.session_state:
|
||||
@@ -180,9 +114,7 @@ if "role" not in st.session_state:
|
||||
if "lieu_autorise" not in st.session_state:
|
||||
st.session_state["lieu_autorise"] = None
|
||||
|
||||
# --- Sidebar (connexion + bouton PDF) ---
|
||||
|
||||
# 🔐 Connexion (toujours affichée)
|
||||
# --- Connexion utilisateur dans la sidebar ---
|
||||
st.sidebar.header("🔐 Connexion")
|
||||
if not st.session_state.get("authenticated"):
|
||||
login = st.sidebar.text_input("Nom d'utilisateur")
|
||||
@@ -198,6 +130,7 @@ if not st.session_state.get("authenticated"):
|
||||
st.session_state["role"] = result["role"]
|
||||
st.session_state["lieu_autorise"] = result["Lieu"]
|
||||
st.success(f"Connecté comme {result['role']} ({result['Lieu']})")
|
||||
st.rerun()
|
||||
else:
|
||||
st.sidebar.error("Identifiants invalides")
|
||||
cursor.close()
|
||||
@@ -206,14 +139,28 @@ if not st.session_state.get("authenticated"):
|
||||
st.sidebar.error(f"Erreur lors de la connexion à la base : {e}")
|
||||
else:
|
||||
st.sidebar.success(f"Connecté ({st.session_state['role']})")
|
||||
if st.sidebar.button("🔓 Déconnexion"):
|
||||
if st.sidebar.button("🔓 Déconnexion", key="logout_sidebar"):
|
||||
st.session_state["authenticated"] = False
|
||||
st.session_state["role"] = None
|
||||
st.session_state["lieu_autorise"] = None
|
||||
st.rerun()
|
||||
|
||||
# 🔔 Forcer une alerte de test dynamique avec choix de la sonde
|
||||
if st.session_state.get("authenticated"):
|
||||
# 📄 Affichage bouton PDF si une date est choisie
|
||||
site_pdf = (
|
||||
st.session_state.get("lieu_autorise")
|
||||
if st.session_state.get("role") != "superviseur"
|
||||
else st.session_state.get("selected_site")
|
||||
)
|
||||
date_pdf = st.session_state.get("selected_date")
|
||||
if site_pdf and date_pdf:
|
||||
st.sidebar.markdown("---")
|
||||
st.sidebar.subheader("📄 Rapport 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)
|
||||
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"
|
||||
@@ -253,7 +200,7 @@ if st.session_state.get("authenticated"):
|
||||
|
||||
else:
|
||||
st.success(f"Connecté ({st.session_state['role']})")
|
||||
if st.button("🔓 Déconnexion"):
|
||||
if st.button("🔓 Déconnexion", key="logout_main"):
|
||||
st.session_state["authenticated"] = False
|
||||
st.session_state["role"] = None
|
||||
st.session_state["lieu_autorise"] = None
|
||||
@@ -297,7 +244,6 @@ if st.session_state["authenticated"]:
|
||||
df["Date"] = pd.to_datetime(df["Date"])
|
||||
sondes = sorted(df["Sonde"].unique())
|
||||
sonde_choisie = st.selectbox("🧪 Choisissez une sonde :", sondes)
|
||||
st.session_state["sonde_selectionnee"] = sonde_choisie
|
||||
df_sonde = df[df["Sonde"] == sonde_choisie]
|
||||
|
||||
# Ajouter une colonne Heure pour faciliter les filtres
|
||||
@@ -306,7 +252,7 @@ if st.session_state["authenticated"]:
|
||||
# Filtrage par tranche horaire
|
||||
tranche = st.radio("🕒 Tranche horaire :",
|
||||
["Toute la journée", "Matin (6h-12h)", "Après-midi (12h-18h)", "Nuit (18h-6h)"])
|
||||
st.session_state["tranche_horaire"] = tranche
|
||||
|
||||
if tranche == "Matin (6h-12h)":
|
||||
df_sonde = df_sonde[(df_sonde["Heure"] >= 6) & (df_sonde["Heure"] < 12)]
|
||||
elif tranche == "Après-midi (12h-18h)":
|
||||
@@ -375,7 +321,7 @@ 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.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)
|
||||
@@ -432,13 +378,13 @@ if st.session_state["role"] == "superviseur":
|
||||
temp_max = chambre["Temp_Max"]
|
||||
moins, val, plus = st.columns([1, 2, 1])
|
||||
with moins:
|
||||
if st.button("➖", key=f"moins_{chambre['Id']}"):
|
||||
if st.button("-", key=f"moins_{chambre['Id']}"):
|
||||
temp_max -= 1
|
||||
with val:
|
||||
st.markdown(f"<div style='text-align:center;font-size:20px'>{temp_max}°C</div>",
|
||||
unsafe_allow_html=True)
|
||||
with plus:
|
||||
if st.button("➕", key=f"plus_{chambre['Id']}"):
|
||||
if st.button("+", key=f"plus_{chambre['Id']}"):
|
||||
temp_max += 1
|
||||
|
||||
if new_etat != chambre["Etat"] or temp_max != chambre["Temp_Max"]:
|
||||
|
||||
Reference in New Issue
Block a user