| | import streamlit as st |
| | import pandas as pd |
| | import sqlite3 |
| | from datetime import datetime |
| | import plotly.express as px |
| |
|
| | |
| | conn = sqlite3.connect('cafm.db', check_same_thread=False) |
| | c = conn.cursor() |
| |
|
| | |
| | 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() |
| |
|
| | |
| | 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") |
| |
|
| | |
| | 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) |
| |
|
| | |
| | selected_page = st.session_state.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. |
| | """) |
| |
|
| | |
| | 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) |
| |
|
| | |
| | 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) |
| |
|
| | |
| | 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) |
| |
|
| | |
| | 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) |
| |
|
| | |
| | conn.close() |
| |
|
| |
|
| |
|