Spaces:
Sleeping
Sleeping
File size: 8,670 Bytes
9705159 66419b7 9705159 c8d40c4 9705159 c52b5d6 010dc77 9705159 010dc77 9705159 010dc77 9705159 010dc77 9705159 010dc77 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 c52b5d6 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 a26e64b 66419b7 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 66419b7 a26e64b 66419b7 a26e64b 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 66419b7 9705159 |
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 |
import streamlit as st
import pandas as pd
from datetime import datetime, timedelta
from persiantools.jdatetime import JalaliDate
# Load schedule data from CSV
def load_schedule():
try:
schedule_data = pd.read_csv('schedule.csv')
except FileNotFoundError:
schedule_data = pd.DataFrame(columns=['Class', 'Day', 'Start Time', 'Username', 'System'])
return schedule_data
# Save schedule data to CSV
def save_schedule(schedule_data):
schedule_data.to_csv('schedule.csv', index=False)
# Load user details from CSV
def load_user_details():
try:
user_details = pd.read_csv('details.csv')
except FileNotFoundError:
user_details = pd.DataFrame(columns=['username', 'password'])
return user_details
# Check for system availability
def has_system_availability(schedule_data, class_selected, day_selected, start_time_selected, system_selected):
bookings = schedule_data[
(schedule_data['Class'] == class_selected) &
(schedule_data['Day'] == day_selected) &
(schedule_data['Start Time'] == start_time_selected)
]
if len(bookings) >= 3:
return False
elif system_selected in bookings['System'].values:
return False
else:
return True
# Convert string day and time to datetime
def get_class_datetime(day_selected, start_time_selected):
days_of_week = ["شنبه", "یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه"]
today = JalaliDate.today().to_gregorian()
current_day_index = today.weekday() # This returns the current day of the week as an integer (0=Monday, 6=Sunday)
# Adjusting days of the week to start from Saturday to match the Persian calendar
target_day_index = days_of_week.index(day_selected)
adjusted_day_index = (target_day_index + 1) % 7 # Mapping Saturday to 0, ..., Friday to 6
delta_days = (adjusted_day_index - current_day_index) % 7
# If the class day is today but time has passed, move to the next week
class_time = datetime.strptime(start_time_selected, "%H:%M").time()
if delta_days == 0 and class_time < datetime.now().time():
delta_days = 7
class_date = today + timedelta(days=delta_days)
class_datetime = datetime.combine(class_date, class_time)
return class_datetime
# Initialize session state variables
if 'username' not in st.session_state:
st.session_state.username = ""
if 'password' not in st.session_state:
st.session_state.password = ""
if 'schedule_data' not in st.session_state:
st.session_state.schedule_data = load_schedule()
if 'authenticated' not in st.session_state:
st.session_state.authenticated = False
if 'is_admin' not in st.session_state:
st.session_state.is_admin = False
# Login Page
def login_page():
st.title("ورود")
st.session_state.username = st.text_input("نام کاربری")
st.session_state.password = st.text_input("رمز عبور", type='password')
user_details = load_user_details()
if st.button("ورود"):
if (
(st.session_state.username in user_details['username'].values) and
(st.session_state.password in user_details[user_details['username'] == st.session_state.username]['password'].values)
) or (st.session_state.username == "armin" and st.session_state.password == "12345679"):
st.session_state.authenticated = True
st.session_state.is_admin = (st.session_state.username == "armin")
# Load schedule data again after login
st.session_state.schedule_data = load_schedule()
st.experimental_rerun()
else:
st.error("نام کاربری یا رمز عبور اشتباه است. لطفا دوباره تلاش کنید.")
# Class Schedule Page
def schedule_page():
st.title("برنامه کلاسی")
classes = ["تعمیرات موبایل"]
days = ["شنبه", "یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه"]
start_times = ["10:30","12:00","13:30","15:00","16:30","18:00","19:30"]
systems = ["ست ۱", "ست ۲", "ست ۳", "ست ۴", "ست ۵", "ست ۶"]
st.header("مدیریت کلاسها")
col1, col2 = st.columns(2)
with col1:
st.subheader("اضافه کردن کلاس")
class_selected = st.selectbox("کلاس", classes, key='add_class_select')
day_selected = st.selectbox("روز", days, key='add_day_select')
start_time_selected = st.selectbox("زمان شروع", start_times, key='add_time_select')
system_selected = st.selectbox("سیستم", systems, key='add_system_select')
if st.button("اضافه کردن کلاس"):
class_datetime = get_class_datetime(day_selected, start_time_selected)
if class_datetime - datetime.now() < timedelta(hours=90):
st.error("کلاسها باید حداقل ۳۰ ساعت قبل رزرو شوند.")
elif not has_system_availability(st.session_state.schedule_data, class_selected, day_selected, start_time_selected, system_selected):
st.error(f"سیستم '{system_selected}' در زمان '{start_time_selected}' در روز '{day_selected}' برای '{class_selected}' موجود نیست.")
else:
new_row = pd.DataFrame([[class_selected, day_selected, start_time_selected, st.session_state.username, system_selected]], columns=['Class', 'Day', 'Start Time', 'Username', 'System'])
st.session_state.schedule_data = pd.concat([st.session_state.schedule_data, new_row], ignore_index=True)
save_schedule(st.session_state.schedule_data)
st.success(f"کلاس {class_selected} با موفقیت اضافه شد به {system_selected}.")
with col2:
st.subheader("حذف کلاس")
if not st.session_state.schedule_data.empty and 'Username' in st.session_state.schedule_data.columns:
user_classes = st.session_state.schedule_data[
(st.session_state.schedule_data['Username'] == st.session_state.username) |
st.session_state.is_admin
]
if not user_classes.empty:
class_to_remove = st.selectbox("کلاس", user_classes['Class'].unique(), key='remove_class_select')
day_to_remove = st.selectbox("روز", user_classes[user_classes['Class'] == class_to_remove]['Day'].unique(), key='remove_day_select')
time_to_remove = st.selectbox("زمان شروع", user_classes[
(user_classes['Class'] == class_to_remove) &
(user_classes['Day'] == day_to_remove)
]['Start Time'].unique(), key='remove_time_select')
system_to_remove = st.selectbox("سیستم", user_classes[
(user_classes['Class'] == class_to_remove) &
(user_classes['Day'] == day_to_remove) &
(user_classes['Start Time'] == time_to_remove)
]['System'].unique(), key='remove_system_select')
if st.button("حذف کلاس"):
st.session_state.schedule_data = st.session_state.schedule_data[~(
(st.session_state.schedule_data['Class'] == class_to_remove) &
(st.session_state.schedule_data['Day'] == day_to_remove) &
(st.session_state.schedule_data['Start Time'] == time_to_remove) &
(st.session_state.schedule_data['System'] == system_to_remove) &
((st.session_state.is_admin) or (st.session_state.schedule_data['Username'] == st.session_state.username))
)]
save_schedule(st.session_state.schedule_data)
st.success(f"کلاس {class_to_remove} در روز {day_to_remove} ساعت {time_to_remove} با موفقیت حذف شد.")
else:
st.error("شما هیچ کلاسی برای حذف ندارید.")
else:
st.error("هیچ کلاسی برای حذف وجود ندارد یا ستون 'Username' موجود نیست.")
st.header("برنامه شما")
st.table(st.session_state.schedule_data)
if st.button("خروج"):
st.session_state['authenticated'] = False
st.session_state['username'] = ""
st.session_state['password'] = ""
st.session_state['is_admin'] = False
st.experimental_rerun()
# Authentication check
if not st.session_state['authenticated']:
login_page()
else:
schedule_page()
|