Actualiser domo91.py

This commit is contained in:
2025-04-21 17:38:14 +00:00
parent 5922c4a47d
commit e924b65b82

108
domo91.py
View File

@@ -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,67 +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:
st.session_state["authenticated"] = False
@@ -212,8 +145,8 @@ else:
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"):
# 🔔 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"
@@ -297,7 +230,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 +238,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)":
@@ -453,6 +385,4 @@ if st.session_state["role"] == "superviseur":
conn_admin.close()
except Exception as e:
st.error(f"Erreur SQL (admin) : {e}")
st.error(f"Erreur SQL (admin) : {e}")