File size: 6,911 Bytes
6c151a6 7f1cd2f 6c151a6 abd03bf 7f1cd2f abd03bf 7f1cd2f abd03bf 7f1cd2f 153852a abd03bf 153852a 7f1cd2f 6c151a6 7f1cd2f 6c151a6 7f1cd2f abd03bf 7f1cd2f f25141f 6c151a6 7f1cd2f 6c151a6 7f1cd2f abd03bf 7f1cd2f f25141f 6c151a6 7f1cd2f 6c151a6 7f1cd2f abd03bf 7f1cd2f f25141f 6c151a6 7f1cd2f 6c151a6 7f1cd2f 6c151a6 7f1cd2f 6c151a6 7f1cd2f 6c151a6 7f1cd2f 6c151a6 7f1cd2f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | 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()
|