Actualiser domo91.py
This commit is contained in:
106
domo91.py
106
domo91.py
@@ -26,8 +26,10 @@ db_config = {
|
|||||||
"database": "Sondes"
|
"database": "Sondes"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# --- Fonction de génération PDF ---
|
# --- Fonction de génération PDF ---
|
||||||
def generer_pdf(site, date_str):
|
def generer_pdf(site, date_str):
|
||||||
|
st.info(f"Génération du rapport PDF pour {site} à la date {date_str}")
|
||||||
try:
|
try:
|
||||||
conn = mysql.connector.connect(**db_config)
|
conn = mysql.connector.connect(**db_config)
|
||||||
cursor = conn.cursor(dictionary=True)
|
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,))
|
cursor.execute(f"SELECT Sonde, Date, Temperature FROM `{site}` WHERE DATE(Date) = %s ORDER BY Sonde, Date", (date_str,))
|
||||||
rows = cursor.fetchall()
|
rows = cursor.fetchall()
|
||||||
df = pd.DataFrame(rows)
|
df = pd.DataFrame(rows)
|
||||||
df["Heure"] = pd.to_datetime(df["Date"])
|
df["Heure"] = pd.to_datetime(df["Date"]).dt.strftime("%H:%M")
|
||||||
|
|
||||||
# --- 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")
|
|
||||||
|
|
||||||
releves = {}
|
releves = {}
|
||||||
for sonde in df["Sonde"].unique():
|
for sonde in df["Sonde"].unique():
|
||||||
@@ -81,19 +67,12 @@ def generer_pdf(site, date_str):
|
|||||||
def releves_section(self, data):
|
def releves_section(self, data):
|
||||||
self.set_font("Arial", "B", 12)
|
self.set_font("Arial", "B", 12)
|
||||||
self.cell(0, 10, "Relevés de température", ln=1)
|
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():
|
for sonde, mesures in data.items():
|
||||||
if not mesures:
|
|
||||||
continue
|
|
||||||
self.set_font("Arial", "B", 11)
|
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)
|
self.set_font("Arial", "", 10)
|
||||||
for i in range(0, len(mesures), 3):
|
for heure, temp in mesures:
|
||||||
ligne = mesures[i:i+3]
|
self.cell(0, 6, f"{heure} - {temp} °C", ln=1)
|
||||||
for heure, temp in ligne:
|
|
||||||
self.cell(col_width, row_height, f"{heure} : {temp:.1f}°C", border=1)
|
|
||||||
self.ln()
|
|
||||||
self.ln(2)
|
self.ln(2)
|
||||||
|
|
||||||
def alertes_section(self, data):
|
def alertes_section(self, data):
|
||||||
@@ -111,67 +90,21 @@ def generer_pdf(site, date_str):
|
|||||||
|
|
||||||
file_name = f"rapport_{site}_{date_str}.pdf"
|
file_name = f"rapport_{site}_{date_str}.pdf"
|
||||||
output_dir = "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)
|
output_path = os.path.join(output_dir, file_name)
|
||||||
|
|
||||||
pdf.output(output_path)
|
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:
|
except Exception as e:
|
||||||
st.error(f"Erreur lors de la génération du PDF : {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 ---
|
# --- Initialisation des variables de 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
|
||||||
@@ -212,8 +145,8 @@ else:
|
|||||||
st.session_state["lieu_autorise"] = None
|
st.session_state["lieu_autorise"] = None
|
||||||
st.rerun()
|
st.rerun()
|
||||||
|
|
||||||
# 🔔 Forcer une alerte de test dynamique avec choix de la sonde
|
# 🔔 Forcer une alerte de test dynamique avec choix de la sonde (réservé aux superviseurs)
|
||||||
if st.session_state.get("authenticated"):
|
if st.session_state.get("authenticated") and st.session_state.get("role") == "superviseur":
|
||||||
site_actuel = (
|
site_actuel = (
|
||||||
st.session_state.get("lieu_autorise")
|
st.session_state.get("lieu_autorise")
|
||||||
if st.session_state.get("role") != "superviseur"
|
if st.session_state.get("role") != "superviseur"
|
||||||
@@ -297,7 +230,6 @@ if st.session_state["authenticated"]:
|
|||||||
df["Date"] = pd.to_datetime(df["Date"])
|
df["Date"] = pd.to_datetime(df["Date"])
|
||||||
sondes = sorted(df["Sonde"].unique())
|
sondes = sorted(df["Sonde"].unique())
|
||||||
sonde_choisie = st.selectbox("🧪 Choisissez une sonde :", sondes)
|
sonde_choisie = st.selectbox("🧪 Choisissez une sonde :", sondes)
|
||||||
st.session_state["sonde_selectionnee"] = sonde_choisie
|
|
||||||
df_sonde = df[df["Sonde"] == sonde_choisie]
|
df_sonde = df[df["Sonde"] == sonde_choisie]
|
||||||
|
|
||||||
# Ajouter une colonne Heure pour faciliter les filtres
|
# Ajouter une colonne Heure pour faciliter les filtres
|
||||||
@@ -306,7 +238,7 @@ if st.session_state["authenticated"]:
|
|||||||
# Filtrage par tranche horaire
|
# Filtrage par tranche horaire
|
||||||
tranche = st.radio("🕒 Tranche horaire :",
|
tranche = st.radio("🕒 Tranche horaire :",
|
||||||
["Toute la journée", "Matin (6h-12h)", "Après-midi (12h-18h)", "Nuit (18h-6h)"])
|
["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)":
|
if tranche == "Matin (6h-12h)":
|
||||||
df_sonde = df_sonde[(df_sonde["Heure"] >= 6) & (df_sonde["Heure"] < 12)]
|
df_sonde = df_sonde[(df_sonde["Heure"] >= 6) & (df_sonde["Heure"] < 12)]
|
||||||
elif tranche == "Après-midi (12h-18h)":
|
elif tranche == "Après-midi (12h-18h)":
|
||||||
@@ -454,5 +386,3 @@ if st.session_state["role"] == "superviseur":
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
st.error(f"Erreur SQL (admin) : {e}")
|
st.error(f"Erreur SQL (admin) : {e}")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user