CAFM / app.py
usmanayaz's picture
Update app.py
f25141f verified
import streamlit as st
import pandas as pd
import sqlite3
from datetime import datetime
import plotly.express as px
# Database connection
conn = sqlite3.connect('cafm.db', check_same_thread=False)
c = conn.cursor()
# Database initialization
def create_tables():
c.execute('''
CREATE TABLE IF NOT EXISTS assets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_name TEXT,
asset_name TEXT,
asset_type TEXT,
maintenance_history TEXT,
warranty TEXT,
current_condition TEXT
)
''')
c.execute('''
CREATE TABLE IF NOT EXISTS work_orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_name TEXT,
work_order_description TEXT,
assigned_to TEXT,
status TEXT,
created_at TEXT
)
''')
c.execute('''
CREATE TABLE IF NOT EXISTS preventive_maintenance (
id INTEGER PRIMARY KEY AUTOINCREMENT,
site_name TEXT,
task_name TEXT,
schedule_date TEXT,
status TEXT
)
''')
create_tables()
# Sidebar Navigation with Session State to retain page state
if "page" not in st.session_state:
st.session_state.page = "Home"
def navigate_to(page):
st.session_state.page = page
st.sidebar.title("CAFM Navigation")
# Define navigation options
pages = {
"Home": "🏠",
"Asset Management": "πŸ“‹",
"Work Order Management": "πŸ› οΈ",
"Preventive Maintenance": "⏰",
"Reporting & Analytics": "πŸ“Š"
}
st.sidebar.markdown("---")
for page, icon in pages.items():
if st.sidebar.button(f"{icon} {page}"):
navigate_to(page)
# Main Page Logic
selected_page = st.session_state.page
# Home Page
if selected_page == "Home":
st.title("Welcome to the Computer-Aided Facility Management (CAFM) System")
st.image(
"https://via.placeholder.com/800x300.png?text=CAFM+System",
use_container_width=True
)
st.markdown("""
This application centralizes all facility management tasks to improve efficiency and decision-making.
Explore the options to manage assets, track work orders, plan maintenance, and analyze data trends.
""")
# Asset Management
elif selected_page == "Asset Management":
st.title("Asset Management")
st.markdown("Manage and monitor your facility's assets efficiently.")
with st.form("asset_form"):
site_name = st.text_input("Site Name")
asset_name = st.text_input("Asset Name")
asset_type = st.text_input("Asset Type")
maintenance_history = st.text_area("Maintenance History")
warranty = st.text_input("Warranty (e.g., 1 year)")
current_condition = st.selectbox("Current Condition", ["Good", "Needs Repair", "Critical"])
submitted = st.form_submit_button("Add Asset")
if submitted:
c.execute('''
INSERT INTO assets (site_name, asset_name, asset_type, maintenance_history, warranty, current_condition)
VALUES (?, ?, ?, ?, ?, ?)
''', (site_name, asset_name, asset_type, maintenance_history, warranty, current_condition))
conn.commit()
st.success("Asset added successfully!")
st.session_state.page = "Asset Management"
st.subheader("Asset List")
assets = pd.read_sql_query("SELECT * FROM assets", conn)
st.dataframe(assets)
# Work Order Management
elif selected_page == "Work Order Management":
st.title("Work Order Management")
st.markdown("Streamline the management of work orders from creation to completion.")
with st.form("work_order_form"):
site_name = st.text_input("Site Name")
work_order_description = st.text_area("Work Order Description")
assigned_to = st.text_input("Assigned To")
status = st.selectbox("Status", ["Pending", "In Progress", "Completed"])
submitted = st.form_submit_button("Create Work Order")
if submitted:
c.execute('''
INSERT INTO work_orders (site_name, work_order_description, assigned_to, status, created_at)
VALUES (?, ?, ?, ?, ?)
''', (site_name, work_order_description, assigned_to, status, datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
conn.commit()
st.success("Work order created successfully!")
st.session_state.page = "Work Order Management"
st.subheader("Work Orders")
work_orders = pd.read_sql_query("SELECT * FROM work_orders", conn)
st.dataframe(work_orders)
# Preventive Maintenance
elif selected_page == "Preventive Maintenance":
st.title("Preventive Maintenance")
st.markdown("Plan and manage preventive maintenance tasks to ensure asset longevity.")
with st.form("maintenance_form"):
site_name = st.text_input("Site Name")
task_name = st.text_input("Task Name")
schedule_date = st.date_input("Schedule Date")
status = st.selectbox("Status", ["Scheduled", "Completed"])
submitted = st.form_submit_button("Schedule Task")
if submitted:
c.execute('''
INSERT INTO preventive_maintenance (site_name, task_name, schedule_date, status)
VALUES (?, ?, ?, ?)
''', (site_name, task_name, schedule_date, status))
conn.commit()
st.success("Task scheduled successfully!")
st.session_state.page = "Preventive Maintenance"
st.subheader("Scheduled Maintenance")
maintenance = pd.read_sql_query("SELECT * FROM preventive_maintenance", conn)
st.dataframe(maintenance)
# Reporting & Analytics
elif selected_page == "Reporting & Analytics":
st.title("Reporting & Analytics")
st.markdown("Visualize data to make informed, data-driven decisions.")
st.subheader("Asset Overview")
asset_data = pd.read_sql_query("SELECT site_name, COUNT(*) as total_assets FROM assets GROUP BY site_name", conn)
if not asset_data.empty:
fig = px.bar(asset_data, x="site_name", y="total_assets", title="Total Assets by Site")
st.plotly_chart(fig)
st.subheader("Work Order Summary")
work_order_data = pd.read_sql_query("SELECT site_name, COUNT(*) as total_work_orders FROM work_orders GROUP BY site_name", conn)
if not work_order_data.empty:
fig = px.pie(work_order_data, values="total_work_orders", names="site_name", title="Work Orders Distribution by Site")
st.plotly_chart(fig)
st.subheader("Maintenance Tasks Overview")
maintenance_data = pd.read_sql_query("SELECT site_name, COUNT(*) as total_tasks FROM preventive_maintenance GROUP BY site_name", conn)
if not maintenance_data.empty:
fig = px.line(maintenance_data, x="site_name", y="total_tasks", title="Maintenance Tasks by Site")
st.plotly_chart(fig)
# Close database connection
conn.close()