File size: 4,127 Bytes
727ba37
 
3f2d5fb
c728863
dbf6cc9
727ba37
d669316
054265f
 
 
 
 
 
 
 
 
 
 
3f2d5fb
 
d669316
3f2d5fb
 
dbf6cc9
3f2d5fb
d669316
 
 
 
054265f
3f2d5fb
 
 
 
 
 
 
 
 
 
d669316
3f2d5fb
 
d669316
 
3f2d5fb
d669316
 
 
 
 
 
 
 
 
 
 
 
 
 
a667788
3f2d5fb
a667788
3f2d5fb
054265f
 
 
 
d669316
3f2d5fb
 
727ba37
 
 
 
 
3f2d5fb
 
 
727ba37
 
 
 
 
3f2d5fb
 
 
727ba37
 
 
 
 
3f2d5fb
 
 
727ba37
 
 
 
 
3f2d5fb
dbf6cc9
 
 
 
 
 
 
3f2d5fb
 
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
# app.py

import streamlit as st
from task_operations import TaskManager
from task_visualization import TaskVisualizer
import pandas as pd
from datetime import datetime
import os

def download_file(filepath):
    """Allows downloading of the specified file."""
    with open(filepath, "rb") as f:
        st.download_button(
            label="Download Database",
            data=f,
            file_name=os.path.basename(filepath),
            mime="application/octet-stream"
        )

def main():
    st.title("Daily Task Tracker")

    task_manager = TaskManager()
    visualizer = TaskVisualizer()

    # Ensure tasks are loaded from the database into session state
    if 'tasks' not in st.session_state:
        st.session_state.tasks = task_manager.load_tasks()

    # Task input fields for adding new tasks
    task_name = st.text_input("Task Name")
    task_time = st.time_input("Task Time")
    task_duration_hours = st.number_input("Task Duration (Hours)", min_value=0, step=1, format="%d")
    task_duration_minutes = st.number_input("Task Duration (Minutes)", min_value=0, max_value=59, step=1, format="%d")
    task_category = st.selectbox("Task Category", TaskManager.CATEGORIES)

    if st.button("Add Task"):
        task_manager.add_task(task_name, task_time, task_duration_hours, task_duration_minutes, task_category)
        st.success(f"Task '{task_name}' added!")

    # Display tasks for today only
    if st.session_state.tasks:
        st.write("Today's Tasks:")

        # Convert session tasks to DataFrame and filter tasks for today
        df = pd.DataFrame(st.session_state.tasks)
        df['Task Time'] = pd.to_datetime(df['Task Time'])  # Ensure 'Task Time' is in datetime format
        today_tasks = df[df['Task Time'].dt.date == datetime.today().date()]  # Filter tasks for today

        if not today_tasks.empty:
            today_tasks['Task Duration (hours)'] = today_tasks['Task Duration (hours)'].astype(int)
            today_tasks['Task Duration (minutes)'] = today_tasks['Task Duration (minutes)'].astype(int)
            st.table(today_tasks[['Task ID', 'Task Name', 'Task Time', 'Task Duration (hours)', 'Task Duration (minutes)', 'Category']])
        else:
            st.write("No tasks for today.")

        # Task deletion option by ID
        task_id_to_delete = st.number_input("Enter Task ID to Delete", min_value=0, step=1)
        if st.button("Delete Task by ID"):
            if task_manager.delete_task_by_id(task_id_to_delete):
                st.success(f"Task with ID '{task_id_to_delete}' deleted!")
            else:
                st.error(f"Task with ID '{task_id_to_delete}' not found.")

    # Add a button to download the task.db file
    if st.button("Download Database"):
        download_file("tasks.db")  # Adjust the filename if needed

    # Report options and other visualizations are unchanged
    if st.button("Daily Report"):
        report = task_manager.generate_report('daily')
        if not report.empty:
            st.write("Daily Report:")
            st.dataframe(report)
        else:
            st.warning("No tasks for today.")

    if st.button("Weekly Report"):
        report = task_manager.generate_report('weekly')
        if not report.empty:
            st.write("Weekly Report:")
            st.dataframe(report)
        else:
            st.warning("No tasks for this week.")

    if st.button("Monthly Report"):
        report = task_manager.generate_report('monthly')
        if not report.empty:
            st.write("Monthly Report:")
            st.dataframe(report)
        else:
            st.warning("No tasks for this month.")

    if st.button("Yearly Report"):
        report = task_manager.generate_report('yearly')
        if not report.empty:
            st.write("Yearly Report:")
            st.dataframe(report)
        else:
            st.warning("No tasks for this year.")

    # Performance visualizations
    visualizer.plot_performance()
    visualizer.plot_overall_category_performance()

    # Option to download the report
    visualizer.download_report()

if __name__ == "__main__":
    main()