Spaces:
Sleeping
Sleeping
File size: 2,989 Bytes
6fb7683 93a0f5c 6fb7683 93a0f5c 9afaf17 6fb7683 9afaf17 93a0f5c 6fb7683 4cd768f 6fb7683 93a0f5c 6fb7683 93a0f5c 6fb7683 93a0f5c 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 |
# components/task_operations.py
import pandas as pd
import os
from datetime import datetime
import streamlit as st
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 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_entry = {
"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_name(self, task_name):
for index, task in enumerate(st.session_state.tasks):
if task['Task Name'] == task_name:
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
|