import streamlit as st import pandas as pd from datetime import datetime import pytz import os class TaskManager: TASKS_FILE = "tasks.csv" CATEGORIES = ['Learning', 'Gym', 'Personal', 'Family', 'Work', 'Prayer'] local_timezone = "Asia/Dhaka" # GMT+6 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: df = pd.read_csv(self.TASKS_FILE, parse_dates=['Task Time']) df['Task Time'] = pd.to_datetime(df['Task Time']).dt.tz_localize('UTC').dt.tz_convert(self.local_timezone) return df.to_dict(orient='records') 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): local_tz = pytz.timezone(self.local_timezone) task_time_full = local_tz.localize(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 timeframe == 'daily': report = df[df['Task Time'].dt.date == pd.Timestamp.now(tz=self.local_timezone).date()] elif timeframe == 'weekly': week_start = pd.Timestamp.now(tz=self.local_timezone) - pd.DateOffset(days=pd.Timestamp.now(tz=self.local_timezone).dayofweek) report = df[(df['Task Time'] >= week_start) & (df['Task Time'] <= pd.Timestamp.now(tz=self.local_timezone))] elif timeframe == 'monthly': report = df[df['Task Time'].dt.month == pd.Timestamp.now(tz=self.local_timezone).month] elif timeframe == 'yearly': report = df[df['Task Time'].dt.year == pd.Timestamp.now(tz=self.local_timezone).year] report['Total Duration'] = report['Task Duration (hours)'] + report['Task Duration (minutes)'] / 60.0 return report def download_report(self): df = pd.DataFrame(st.session_state.tasks) csv = df.to_csv(index=False) st.download_button("Download CSV", data=csv, file_name="task_report.csv", mime='text/csv')