import streamlit as st import pandas as pd import mysql.connector from datetime import datetime import os from dotenv import load_dotenv load_dotenv() def get_filtered_users(customer_id, service_id): mydb = mysql.connector.connect( host=os.getenv("MYSQL_HOST"), user=os.getenv("MYSQL_USER"), password=os.getenv("MYSQL_PASSWORD"), database=os.getenv("MYSQL_DATABASE") ) query = f"""SELECT * FROM Kunden.`daily.user.online` where DATE(timestamp) = CURDATE() """ if customer_id: query += f"AND customer_ID = {customer_id}" if service_id: query += f" AND services_id = {service_id}" query += " ORDER BY timestamp DESC" users = pd.read_sql_query(query, mydb) print(query) mydb.close() return users def get_initial_data(): mydb = mysql.connector.connect( host=os.getenv("MYSQL_HOST"), user=os.getenv("MYSQL_USER"), password=os.getenv("MYSQL_PASSWORD"), database=os.getenv("MYSQL_DATABASE") ) # Fetch unique service IDs and names service_id_query = """ SELECT DISTINCT s.service_ID, s.name FROM Kunden.services s """ service_ids = pd.read_sql_query(service_id_query, mydb) # Fetch customer information customer_query = """ SELECT DISTINCT c.customer_ID, c.customer, co.companyname FROM Kunden.company co JOIN Kunden.customers c ON co.customer_ID = c.customer_ID """ customers = pd.read_sql_query(customer_query, mydb) mydb.close() return service_ids, customers def user_filter(): st.title("User Filter :mag_right:") # Get initial data for widgets initial_service_ids, customers = get_initial_data() # Combine service_ID and name for display service_options = initial_service_ids.apply(lambda row: f"{row['service_ID']} - {row['name']}", axis=1) # Add selection widget for customer ID selected_customer = st.selectbox( 'Select Customer', ["All"] + customers.apply(lambda row: f"{row['customer_ID']} - {row['companyname']} - {row['customer']}", axis=1).tolist() ) # Extract customer_ID from selected option selected_customer_id = None if selected_customer == "All" else int(selected_customer.split(' - ')[0]) # Add selection widget for service ID selected_service = st.selectbox( 'Select Service', ["All"] + service_options.tolist() ) # Extract service_ID from selected option selected_service_id = None if selected_service == "All" else int(selected_service.split(' - ')[0]) # Add a button to apply filters if st.button('Apply Filters'): # Fetch filtered data from the database filtered_data = get_filtered_users(selected_customer_id, selected_service_id) # Display the filtered data if not filtered_data.empty: st.dataframe(filtered_data) else: st.write("No data available for the selected filters.")