Ajout Gestion abonnements sur develop
This commit is contained in:
@@ -26,7 +26,7 @@ def journaliser_sms(message, site, phone_number):
|
||||
|
||||
def envoyer_sms_ovh(message, site):
|
||||
phone_numbers = PHONE_NUMBERS_BY_SITE.get(site)
|
||||
if not phone_numbers:
|
||||
if not phone_numbers or phone_numbers == ['']:
|
||||
print(f"[!] Aucun numéro défini pour le site {site}. SMS non envoyé.")
|
||||
return None
|
||||
|
||||
|
||||
78
domo91.py
78
domo91.py
@@ -78,7 +78,7 @@ def generer_pdf(site, date_str, periode):
|
||||
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.cell(0, 10, f"Période : {getattr(self, 'periode', '')}", ln=1, align="C")
|
||||
self.cell(0, 10, f"Periode : {getattr(self, 'periode', '')}", ln=1, align="C")
|
||||
self.ln(5)
|
||||
|
||||
def site_info(self, site_name):
|
||||
@@ -175,6 +175,11 @@ if not st.session_state.get("authenticated"):
|
||||
cursor.execute("SELECT * FROM MotsDePasse WHERE utilisateur = %s", (login,))
|
||||
result = cursor.fetchone()
|
||||
if result and result["mot_de_passe"] == password:
|
||||
if result["Expiration"] and result["Expiration"] < date.today():
|
||||
st.sidebar.error("⛔ Votre accès a expiré. Veuillez contacter un administrateur.")
|
||||
cursor.close()
|
||||
conn.close()
|
||||
st.stop()
|
||||
st.session_state["authenticated"] = True
|
||||
st.session_state["role"] = result["role"]
|
||||
st.session_state["lieu_autorise"] = result["Lieu"]
|
||||
@@ -216,7 +221,7 @@ if site_pdf and date_pdf:
|
||||
st.sidebar.subheader("📄 Rapport PDF")
|
||||
if st.sidebar.button("📥 Télécharger l’état du jour (PDF)", key="pdf_btn"):
|
||||
periode = st.session_state.get("selected_periode", "Toute la journée")
|
||||
generer_pdf(site_pdf, date_pdf.strftime("%Y-%m-%d"), periode)
|
||||
generer_pdf(site_pdf, date, periode)
|
||||
|
||||
# --- Forcer une alerte de test dynamique (réservé aux superviseurs)
|
||||
if st.session_state.get("authenticated") and st.session_state.get("role") == "superviseur":
|
||||
@@ -283,7 +288,7 @@ if st.session_state.get("authenticated") and st.session_state.get("role") == "su
|
||||
if st.button("📅 Télécharger l'état du jour (PDF)"):
|
||||
site = st.session_state["lieu_autorise"]
|
||||
date_val = st.session_state["selected_date"].strftime("%Y-%m-%d")
|
||||
generer_pdf(site, date_val)
|
||||
generer_pdf(site, date_val, periode)
|
||||
else:
|
||||
st.info("Sélectionnez une date pour activer la génération PDF.")
|
||||
# Récupération des sondes actives
|
||||
@@ -344,16 +349,18 @@ if st.session_state["authenticated"]:
|
||||
except Exception as e:
|
||||
st.error(f"Erreur lors de la récupération des alertes : {e}")
|
||||
|
||||
# --- NAVIGATION ---
|
||||
if st.session_state.get("authenticated"):
|
||||
# --- NAVIGATION --- (toujours défini, évite les erreurs)
|
||||
onglet = st.session_state.get("onglet_actif", "Accueil")
|
||||
|
||||
# Navigation (onglets dynamiques selon rôle)
|
||||
if st.session_state.get("authenticated"):
|
||||
if st.session_state["role"] == "superviseur":
|
||||
onglets_possibles = ["Accueil", "Statistiques", "Entretien", "Traffic"]
|
||||
|
||||
else:
|
||||
onglets_possibles = ["Accueil", "Entretien"]
|
||||
|
||||
onglet = st.sidebar.radio("📁 Navigation", onglets_possibles)
|
||||
onglet = st.sidebar.radio("📁 Navigation", onglets_possibles, index=onglets_possibles.index(onglet))
|
||||
st.session_state["onglet_actif"] = onglet
|
||||
|
||||
# --- ONGLET ACCUEIL ---
|
||||
if onglet == "Accueil":
|
||||
@@ -592,6 +599,47 @@ if st.session_state["authenticated"]:
|
||||
# --- ONGLET ENTRETIEN ---
|
||||
elif onglet == "Entretien":
|
||||
st.markdown("## 🧰 Gestion des sondes en entretien")
|
||||
|
||||
# --- Gérer les expirations comptes ---
|
||||
def afficher_gestion_expiration(conn):
|
||||
st.subheader("🔐 Gestion des expirations d'accès")
|
||||
|
||||
# Récupérer les utilisateurs avec leurs dates d'expiration
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
cursor.execute("SELECT Id, utilisateur, Expiration FROM MotsDePasse")
|
||||
users = cursor.fetchall()
|
||||
cursor.close()
|
||||
|
||||
df = pd.DataFrame(users)
|
||||
df['Expiration'] = pd.to_datetime(df['Expiration']).dt.date
|
||||
|
||||
for _, row in df.iterrows():
|
||||
est_expire = row['Expiration'] < date.today()
|
||||
fond = "#ffe6e6" if est_expire else "#f8f9fa" # rouge clair si expiré, gris clair sinon
|
||||
with st.container():
|
||||
st.markdown(f"<div style='background-color:{fond}; padding:10px; border-radius:8px;'>",
|
||||
unsafe_allow_html=True)
|
||||
col1, col2, col3 = st.columns([4, 2, 1])
|
||||
with col1:
|
||||
st.markdown(f"**Utilisateur :** {row['utilisateur']}")
|
||||
if est_expire:
|
||||
st.markdown("<span style='color:red; font-weight:bold;'>⛔ Accès expiré</span>",
|
||||
unsafe_allow_html=True)
|
||||
|
||||
with col2:
|
||||
new_date = st.date_input("Expiration", row['Expiration'], key=f"exp_{row['Id']}")
|
||||
with col3:
|
||||
if st.button("✅", key=f"save_{row['Id']}"):
|
||||
try:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("UPDATE MotsDePasse SET Expiration = %s WHERE Id = %s",
|
||||
(new_date, row['Id']))
|
||||
conn.commit()
|
||||
st.success(f"✅ {row['utilisateur']} mis à jour")
|
||||
cursor.close()
|
||||
except Exception as e:
|
||||
st.error(f"Erreur : {e}")
|
||||
st.markdown("</div><br>", unsafe_allow_html=True)
|
||||
role = st.session_state.get("role", "utilisateur")
|
||||
lieu = st.session_state.get("lieu_autorise") if role != "superviseur" else st.selectbox("Choisir un lieu :",
|
||||
["Saclay", "Meudon"])
|
||||
@@ -601,7 +649,6 @@ if st.session_state["authenticated"]:
|
||||
else:
|
||||
st.info(f"Site imposé : {lieu}" if role != "superviseur" else "")
|
||||
|
||||
|
||||
def get_sondes_par_lieu(lieu):
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
cursor = conn.cursor(dictionary=True)
|
||||
@@ -611,14 +658,13 @@ if st.session_state["authenticated"]:
|
||||
conn.close()
|
||||
return sondes
|
||||
|
||||
|
||||
def maj_entretien(sonde_id, en_entretien, utilisateur, cible):
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("UPDATE Chambres_froides SET En_entretien = %s WHERE Id = %s", (en_entretien, sonde_id))
|
||||
cursor.execute(
|
||||
"INSERT INTO Connexion_Log (Utilisateur, Lieu, Date_Connexion, Action, Cible) VALUES (%s, %s, %s, %s, %s)",
|
||||
(utilisateur, lieu, datetime.datetime.now(), f"{'Mise' if en_entretien else 'Retrait'} en entretien",
|
||||
(utilisateur, lieu, datetime.now(), f"{'Mise' if en_entretien else 'Retrait'} en entretien",
|
||||
cible))
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
@@ -636,7 +682,17 @@ if st.session_state["authenticated"]:
|
||||
except Exception as e:
|
||||
st.error(f"Erreur lors du chargement des sondes : {e}")
|
||||
|
||||
# --- ONGLET TRAFFIC ------
|
||||
# 👉 Gestion des expirations visibles uniquement pour les superviseurs
|
||||
if role == "superviseur":
|
||||
try:
|
||||
conn = mysql.connector.connect(**db_config)
|
||||
afficher_gestion_expiration(conn)
|
||||
conn.close()
|
||||
except Exception as e:
|
||||
st.error(f"Erreur lors du chargement des comptes : {e}")
|
||||
|
||||
|
||||
# --- ONGLET TRAFFIC ------
|
||||
elif onglet == "Traffic":
|
||||
st.markdown("## 🚦 Connexions récentes")
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user