diff --git a/domo91.py b/domo91.py index 2a73efa..efb8231 100644 --- a/domo91.py +++ b/domo91.py @@ -26,10 +26,8 @@ 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) @@ -37,7 +35,23 @@ 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"]).dt.strftime("%H:%M") + 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") releves = {} for sonde in df["Sonde"].unique(): @@ -67,12 +81,19 @@ 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) + self.cell(0, 8, f"Sonde : {sonde}", ln=1, fill=True) self.set_font("Arial", "", 10) - for heure, temp in mesures: - self.cell(0, 6, f"{heure} - {temp} °C", ln=1) + 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() self.ln(2) def alertes_section(self, data): @@ -90,21 +111,67 @@ def generer_pdf(site, date_str): file_name = f"rapport_{site}_{date_str}.pdf" output_dir = "PDF" - os.makedirs(output_dir, exist_ok=True) # 🔧 Crée le dossier si absent + os.makedirs(output_dir, exist_ok=True) 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" - ) + return output_path 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 @@ -230,6 +297,7 @@ 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 @@ -238,7 +306,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)":