"Ajout de bouton pour PDF dans le bon répertoire"

This commit is contained in:
2025-04-17 11:50:41 +02:00
parent f5dcb764fa
commit d2a28a809c

139
domo91.py
View File

@@ -6,6 +6,7 @@ from datetime import date
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.dates as mdates import matplotlib.dates as mdates
from fpdf import FPDF from fpdf import FPDF
import os
st.set_page_config(page_title="Domo91 - Surveillance", layout="wide") st.set_page_config(page_title="Domo91 - Surveillance", layout="wide")
st.title("📡 Supervision Températures") st.title("📡 Supervision Températures")
@@ -17,7 +18,84 @@ db_config = {
"password": "#SO2&1nf%mZ@jfh", "password": "#SO2&1nf%mZ@jfh",
"database": "Sondes" "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)
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"]).dt.strftime("%H:%M")
releves = {}
for sonde in df["Sonde"].unique():
df_sonde = df[df["Sonde"] == sonde]
releves[sonde] = list(zip(df_sonde["Heure"], df_sonde["Temperature"]))
table_alertes = f"Alertes_{site}"
cursor.execute(f"SELECT Sonde, Debut_defaut, Status FROM {table_alertes} WHERE DATE(Debut_defaut) = %s", (date_str,))
alertes = cursor.fetchall()
cursor.close()
conn.close()
class RapportPDF(FPDF):
def header(self):
self.set_font("Arial", "B", 14)
self.cell(0, 10, "Rapport de surveillance des sondes", ln=1, align="C")
self.set_font("Arial", "", 12)
self.cell(0, 10, f"Date : {date_str}", ln=1, align="C")
self.ln(5)
def site_info(self, site_name):
self.set_font("Arial", "B", 12)
self.cell(0, 10, f"Site : {site_name}", ln=1)
self.ln(2)
def releves_section(self, data):
self.set_font("Arial", "B", 12)
self.cell(0, 10, "Relevés de température", ln=1)
for sonde, mesures in data.items():
self.set_font("Arial", "B", 11)
self.cell(0, 8, f"Sonde : {sonde}", ln=1)
self.set_font("Arial", "", 10)
for heure, temp in mesures:
self.cell(0, 6, f"{heure} - {temp} °C", ln=1)
self.ln(2)
def alertes_section(self, data):
self.set_font("Arial", "B", 12)
self.cell(0, 10, "Alertes enregistrées", ln=1)
self.set_font("Arial", "", 10)
for a in data:
self.cell(0, 6, f"{a['Sonde']} - {a['Debut_defaut']} - {a['Status']}", ln=1)
pdf = RapportPDF()
pdf.add_page()
pdf.site_info(site)
pdf.releves_section(releves)
pdf.alertes_section(alertes)
file_name = f"rapport_{site}_{date_str}.pdf"
output_dir = "PDF"
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)
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}")
# --- Initialisation session --- # --- Initialisation session ---
if "authenticated" not in st.session_state: if "authenticated" not in st.session_state:
st.session_state["authenticated"] = False st.session_state["authenticated"] = False
@@ -61,65 +139,6 @@ with st.sidebar:
if st.button("📥 Télécharger létat du jour (PDF)"): if st.button("📥 Télécharger létat du jour (PDF)"):
site = st.session_state["lieu_autorise"] site = st.session_state["lieu_autorise"]
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d") date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
def generer_pdf(site, date_str):
releves = {
"Chambre 1": [("06:00", 3.5), ("07:00", 3.2), ("08:00", 3.1)],
"Congélateur": [("06:00", -18.1), ("07:00", -17.8), ("08:00", -17.5)]
}
alertes = [
{"Sonde": "Chambre 2", "Debut": f"{date_str} 08:45", "Statut": "En cours"},
{"Sonde": "Congélateur", "Debut": f"{date_str} 12:30", "Statut": "Acquittée"}
]
class RapportPDF(FPDF):
def header(self):
self.set_font("Arial", "B", 14)
self.cell(0, 10, "Rapport de surveillance des sondes", ln=1, align="C")
self.set_font("Arial", "", 12)
self.cell(0, 10, f"Date : {date_str}", ln=1, align="C")
self.ln(5)
def site_info(self, site_name):
self.set_font("Arial", "B", 12)
self.cell(0, 10, f"Site : {site_name}", ln=1)
self.ln(2)
def releves_section(self, data):
self.set_font("Arial", "B", 12)
self.cell(0, 10, "Relevés de température", ln=1)
for sonde, mesures in data.items():
self.set_font("Arial", "B", 11)
self.cell(0, 8, f"Sonde : {sonde}", ln=1)
self.set_font("Arial", "", 10)
for heure, temp in mesures:
self.cell(0, 6, f"{heure} - {temp} °C", ln=1)
self.ln(2)
def alertes_section(self, data):
self.set_font("Arial", "B", 12)
self.cell(0, 10, "Alertes enregistrées", ln=1)
self.set_font("Arial", "", 10)
for a in data:
self.cell(0, 6, f"{a['Sonde']} - {a['Debut']} - {a['Statut']}", ln=1)
pdf = RapportPDF()
pdf.add_page()
pdf.site_info(site)
pdf.releves_section(releves)
pdf.alertes_section(alertes)
file_name = f"rapport_{site}_{date_str}.pdf"
output_path =file_name
pdf.output(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"
)
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.")
@@ -180,3 +199,5 @@ 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}")