Spaces:
Sleeping
Sleeping
File size: 3,172 Bytes
93a0f5c 6fb7683 ad23ffc 93a0f5c 9afaf17 6fb7683 9afaf17 93a0f5c 6fb7683 ad23ffc 6fb7683 4cd768f 6fb7683 93a0f5c 6fb7683 ad23ffc 6fb7683 ad23ffc 6fb7683 93a0f5c 6fb7683 93a0f5c ad23ffc 6fb7683 ad23ffc 6fb7683 69e3818 4cd768f 6fb7683 4cd768f 6fb7683 69e3818 6fb7683 69e3818 6fb7683 69e3818 6fb7683 69e3818 6fb7683 |
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 |
import pandas as pd
import os
from datetime import datetime
import streamlit as st
import uuid # For generating unique task IDs
class TaskManager:
TASKS_FILE = "tasks.csv"
CATEGORIES = ['Learning', 'Gym', 'Personal', 'Family', 'Work', 'Prayer']
def __init__(self):
if 'tasks' not in st.session_state:
st.session_state.tasks = self.load_tasks()
def load_tasks(self):
if os.path.exists(self.TASKS_FILE):
if os.path.getsize(self.TASKS_FILE) > 0:
return pd.read_csv(self.TASKS_FILE, parse_dates=['Task Time']).to_dict(orient='records')
else:
return []
else:
df = pd.DataFrame(columns=["Task ID", "Task Name", "Task Time", "Task Duration (hours)", "Task Duration (minutes)", "Category"])
df.to_csv(self.TASKS_FILE, index=False)
return []
def save_tasks(self, tasks):
df = pd.DataFrame(tasks)
df.to_csv(self.TASKS_FILE, index=False)
def add_task(self, task_name, task_time, task_duration_hours, task_duration_minutes, task_category):
task_time_full = datetime.combine(datetime.today(), task_time)
task_id = str(uuid.uuid4()) # Generate a unique ID
task_entry = {
"Task ID": task_id, # Add Task ID
"Task Name": task_name,
"Task Time": task_time_full,
"Task Duration (hours)": int(task_duration_hours),
"Task Duration (minutes)": int(task_duration_minutes),
"Category": task_category
}
st.session_state.tasks.append(task_entry)
self.save_tasks(st.session_state.tasks)
def delete_task_by_id(self, task_id): # Modified method to delete by Task ID
for index, task in enumerate(st.session_state.tasks):
if task['Task ID'] == task_id: # Match by Task ID
st.session_state.tasks.pop(index)
self.save_tasks(st.session_state.tasks)
return True
return False
def generate_report(self, timeframe):
df = pd.DataFrame(st.session_state.tasks)
if df.empty:
return pd.DataFrame() # Return empty DataFrame if no tasks are present
# Ensure the 'Task Time' is in datetime format
df['Task Time'] = pd.to_datetime(df['Task Time'])
if timeframe == 'daily':
report = df[df['Task Time'].dt.date == pd.Timestamp.today().date()]
elif timeframe == 'weekly':
week_start = pd.Timestamp.today() - pd.DateOffset(days=pd.Timestamp.today().dayofweek)
report = df[(df['Task Time'] >= week_start) & (df['Task Time'] < pd.Timestamp.today() + pd.DateOffset(days=1))]
elif timeframe == 'monthly':
report = df[df['Task Time'].dt.month == pd.Timestamp.today().month]
elif timeframe == 'yearly':
report = df[df['Task Time'].dt.year == pd.Timestamp.today().year]
else:
report = pd.DataFrame() # Empty DataFrame for unsupported timeframes
report['Total Duration'] = report['Task Duration (hours)'] + report['Task Duration (minutes)'] / 60.0
return report
|