import streamlit as st
import pandas as pd
import plotly.express as px
from datetime import datetime, timedelta
# データの初期化
if ‘equipment_data’ not in st.session_state:
st.session_state[‘equipment_data’] = pd.DataFrame(columns=[‘ID’, ‘入庫日’, ‘出庫予定日’])
# 入庫データの追加
st.title(“機器管理システム”)
st.sidebar.header(“機器の入庫”)
equipment_id = st.sidebar.text_input(“機器IDを入力してください”)
入庫日 = st.sidebar.date_input(“入庫日”, datetime.now())
出庫予定日 = st.sidebar.date_input(“出庫予定日”, 入庫日 + timedelta(days=7))
if st.sidebar.button(“機器を入庫”):
if equipment_id:
new_data = pd.DataFrame({‘ID’: [equipment_id], ‘入庫日’: [入庫日], ‘出庫予定日’: [出庫予定日]})
st.session_state[‘equipment_data’] = pd.concat([st.session_state[‘equipment_data’], new_data], ignore_index=True)
st.sidebar.success(f”機器 {equipment_id} を入庫しました。”)
else:
st.sidebar.error(“機器IDを入力してください。”)
# 機器の返却
st.sidebar.header(“機器の返却”)
return_id = st.sidebar.text_input(“返却する機器IDを入力してください”)
if st.sidebar.button(“機器を返却”):
if return_id in st.session_state[‘equipment_data’][‘ID’].values:
st.session_state[‘equipment_data’] = st.session_state[‘equipment_data’][st.session_state[‘equipment_data’][‘ID’] != return_id]
st.sidebar.success(f”機器 {return_id} を返却しました。”)
else:
st.sidebar.error(“指定した機器IDが見つかりません。”)
# 現在の空き状況表示
st.header(“現在の機器の状況”)
現在の機器数 = len(st.session_state[‘equipment_data’])
空きスペース = 25 – 現在の機器数
st.metric(label=”空きスペース”, value=f”{空きスペース} / 25 台”)
# 機器のスケジュール表示
if not st.session_state[‘equipment_data’].empty:
fig = px.timeline(st.session_state[‘equipment_data’], x_start=’入庫日’, x_end=’出庫予定日’, y=’ID’, title=”機器の入出庫スケジュール”)
fig.update_yaxes(categoryorder=’total ascending’)
st.plotly_chart(fig)
else:
st.info(“現在、保管されている機器はありません。”)
コメント