shamimjony1000 commited on
Commit
4cd768f
·
verified ·
1 Parent(s): 2fca8da

Update task_operations.py

Browse files
Files changed (1) hide show
  1. task_operations.py +40 -47
task_operations.py CHANGED
@@ -1,70 +1,63 @@
1
  import streamlit as st
2
  import pandas as pd
3
- from datetime import datetime
4
  import pytz
5
- import os
6
 
7
  class TaskManager:
8
- TASKS_FILE = "tasks.csv"
9
- CATEGORIES = ['Learning', 'Gym', 'Personal', 'Family', 'Work', 'Prayer']
10
- local_timezone = "Asia/Dhaka" # GMT+6
11
-
12
  def __init__(self):
 
 
13
  if 'tasks' not in st.session_state:
14
  st.session_state.tasks = self.load_tasks()
15
 
16
  def load_tasks(self):
17
- if os.path.exists(self.TASKS_FILE):
18
- if os.path.getsize(self.TASKS_FILE) > 0:
19
- df = pd.read_csv(self.TASKS_FILE, parse_dates=['Task Time'])
20
- df['Task Time'] = pd.to_datetime(df['Task Time']).dt.tz_localize('UTC').dt.tz_convert(self.local_timezone)
21
- return df.to_dict(orient='records')
22
- else:
23
- df = pd.DataFrame(columns=["Task Name", "Task Time", "Task Duration (hours)", "Task Duration (minutes)", "Category"])
24
- df.to_csv(self.TASKS_FILE, index=False)
25
- return []
26
-
27
- def save_tasks(self, tasks):
28
  df = pd.DataFrame(tasks)
29
- df.to_csv(self.TASKS_FILE, index=False)
 
 
 
 
 
30
 
31
  def add_task(self, task_name, task_time, task_duration_hours, task_duration_minutes, task_category):
32
- local_tz = pytz.timezone(self.local_timezone)
33
- task_time_full = local_tz.localize(datetime.combine(datetime.today(), task_time))
34
- task_entry = {
35
- "Task Name": task_name,
36
- "Task Time": task_time_full,
37
- "Task Duration (hours)": int(task_duration_hours),
38
- "Task Duration (minutes)": int(task_duration_minutes),
39
- "Category": task_category
40
  }
41
- st.session_state.tasks.append(task_entry)
42
  self.save_tasks(st.session_state.tasks)
43
 
44
- def delete_task_by_name(self, task_name):
45
- for index, task in enumerate(st.session_state.tasks):
46
- if task['Task Name'] == task_name:
47
- st.session_state.tasks.pop(index)
48
- self.save_tasks(st.session_state.tasks)
49
- return True
50
- return False
51
 
52
  def generate_report(self, timeframe):
53
  df = pd.DataFrame(st.session_state.tasks)
 
 
 
 
 
 
 
 
54
  if timeframe == 'daily':
55
- report = df[df['Task Time'].dt.date == pd.Timestamp.now(tz=self.local_timezone).date()]
56
  elif timeframe == 'weekly':
57
- week_start = pd.Timestamp.now(tz=self.local_timezone) - pd.DateOffset(days=pd.Timestamp.now(tz=self.local_timezone).dayofweek)
58
- report = df[(df['Task Time'] >= week_start) & (df['Task Time'] <= pd.Timestamp.now(tz=self.local_timezone))]
59
  elif timeframe == 'monthly':
60
- report = df[df['Task Time'].dt.month == pd.Timestamp.now(tz=self.local_timezone).month]
61
  elif timeframe == 'yearly':
62
- report = df[df['Task Time'].dt.year == pd.Timestamp.now(tz=self.local_timezone).year]
63
-
64
- report['Total Duration'] = report['Task Duration (hours)'] + report['Task Duration (minutes)'] / 60.0
65
- return report
66
-
67
- def download_report(self):
68
- df = pd.DataFrame(st.session_state.tasks)
69
- csv = df.to_csv(index=False)
70
- st.download_button("Download CSV", data=csv, file_name="task_report.csv", mime='text/csv')
 
1
  import streamlit as st
2
  import pandas as pd
3
+ from datetime import datetime, time, timedelta
4
  import pytz
 
5
 
6
  class TaskManager:
 
 
 
 
7
  def __init__(self):
8
+ self.utc_timezone = pytz.utc
9
+ self.local_timezone = pytz.timezone('Asia/Dhaka') # GMT+6 for your timezone
10
  if 'tasks' not in st.session_state:
11
  st.session_state.tasks = self.load_tasks()
12
 
13
  def load_tasks(self):
14
+ # Assuming tasks are stored as a list of dictionaries
15
+ tasks = st.session_state.get('tasks', [])
16
+ if not tasks:
17
+ return pd.DataFrame()
18
+
 
 
 
 
 
 
19
  df = pd.DataFrame(tasks)
20
+ df['Task Time'] = pd.to_datetime(df['Task Time'])
21
+
22
+ # Convert timezone if the timestamps are already timezone-aware
23
+ df['Task Time'] = df['Task Time'].dt.tz_convert(self.local_timezone)
24
+
25
+ return df
26
 
27
  def add_task(self, task_name, task_time, task_duration_hours, task_duration_minutes, task_category):
28
+ task_time_full = datetime.combine(datetime.today(), task_time).replace(tzinfo=self.local_timezone)
29
+ task_duration = timedelta(hours=task_duration_hours, minutes=task_duration_minutes)
30
+ task = {
31
+ 'Task Name': task_name,
32
+ 'Task Time': task_time_full,
33
+ 'Task Duration (hours)': task_duration_hours,
34
+ 'Task Duration (minutes)': task_duration_minutes,
35
+ 'Task Category': task_category,
36
  }
37
+ st.session_state.tasks.append(task)
38
  self.save_tasks(st.session_state.tasks)
39
 
40
+ def save_tasks(self, tasks):
41
+ st.session_state.tasks = tasks
 
 
 
 
 
42
 
43
  def generate_report(self, timeframe):
44
  df = pd.DataFrame(st.session_state.tasks)
45
+ if df.empty:
46
+ return pd.DataFrame()
47
+
48
+ df['Task Time'] = pd.to_datetime(df['Task Time']).dt.tz_convert(self.local_timezone)
49
+ df['Total Duration'] = df['Task Duration (hours)'] + df['Task Duration (minutes)'] / 60.0
50
+
51
+ # Filter based on the timeframe
52
+ today = datetime.now(self.local_timezone).date()
53
  if timeframe == 'daily':
54
+ df = df[df['Task Time'].dt.date == today]
55
  elif timeframe == 'weekly':
56
+ start_of_week = today - timedelta(days=today.weekday())
57
+ df = df[(df['Task Time'].dt.date >= start_of_week) & (df['Task Time'].dt.date <= today)]
58
  elif timeframe == 'monthly':
59
+ df = df[df['Task Time'].dt.month == today.month]
60
  elif timeframe == 'yearly':
61
+ df = df[df['Task Time'].dt.year == today.year]
62
+
63
+ return df