Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 48 additions & 12 deletions sl/SL_Menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,13 +293,14 @@ def view_task_planning():
display_name = f"{name} (done)" if is_done else name
if is_active: display_name = f"**{display_name}**"
today_info = " ⭐" if task.get('today') else ""
recurring_info = " ↻" if task.get('recurring') else ""
if is_active:
bullet = "🔨"
elif is_done:
bullet = "✔"
else:
bullet = "-"
st.markdown(f"{bullet} **{task['main_project_name']}**: {display_name}{today_info}")
st.markdown(f"{bullet} **{task['main_project_name']}**: {display_name}{today_info}{recurring_info}")
with col_start_btn:
if st.button("▶", key=f"start_task_planning_weekly_{task['main_project_name']}_{task['task_name']}_{t_idx}", help=_("Start work on task"), disabled=is_active or task.get('status') == 'done'):
st.session_state.tracker.start_work(task['main_project_name'], task_id=task.get('id'))
Expand Down Expand Up @@ -328,13 +329,14 @@ def view_task_planning():
if is_active: display_name = f"**{display_name}**"
due_info = f" ({_('Due')}: {task['due_date']})" if task.get('due_date') else ""
today_info = " ⭐" if task.get('today') else ""
recurring_info = " ↻" if task.get('recurring') else ""
if is_active:
bullet = "🔨"
elif is_done:
bullet = "✔"
else:
bullet = "-"
st.markdown(f"{bullet} {display_name}{due_info}{today_info}")
st.markdown(f"{bullet} {display_name}{due_info}{today_info}{recurring_info}")
with col_start_btn:
if st.button("▶", key=f"start_task_planning_{task['main_project_name']}_{task['task_name']}_{t_idx}", help=_("Start work on task"), disabled=is_active or status == 'done'):
st.session_state.tracker.start_work(task['main_project_name'], task_id=task.get('id'))
Expand Down Expand Up @@ -386,13 +388,14 @@ def view_today_tasks():
display_name = f"{name} (done)" if is_done else name
if is_active: display_name = f"**{display_name}**"
due_info = f" ({_('Due')}: {task['due_date']})" if task.get('due_date') else ""
recurring_info = " ↻" if task.get('recurring') else ""
if is_active:
bullet = "🔨"
elif is_done:
bullet = "✔"
else:
bullet = "-"
st.markdown(f"{bullet} {display_name}{due_info}")
st.markdown(f"{bullet} {display_name}{due_info}{recurring_info}")
with col_start_btn:
if st.button("▶", key=f"start_today_task_{task['main_project_name']}_{task['task_name']}_{t_idx}", help=_("Start work on task"), disabled=is_active or status == 'done'):
st.session_state.tracker.start_work(task['main_project_name'], task_id=task.get('id'))
Expand Down Expand Up @@ -679,7 +682,11 @@ def view_close_task():
return

with st.form("close_sub_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(sub_projects)), format_func=lambda i: f"{sub_projects[i]['task_name']} (done)" if sub_projects[i].get('status') == 'done' else sub_projects[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(sub_projects)),
format_func=lambda i: f"{sub_projects[i]['task_name']}{' (done)' if sub_projects[i].get('status') == 'done' else ''}{' ↻' if sub_projects[i].get('recurring') else ''}"
)
submitted = st.form_submit_button(_("Close Task"), use_container_width=True)

if submitted:
Expand Down Expand Up @@ -720,7 +727,11 @@ def view_reopen_task():
return

with st.form("reopen_sub_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(sub_projects)), format_func=lambda i: f"{sub_projects[i]['task_name']} (done)" if sub_projects[i].get('status') == 'done' else sub_projects[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(sub_projects)),
format_func=lambda i: f"{sub_projects[i]['task_name']}{' (done)' if sub_projects[i].get('status') == 'done' else ''}{' ↻' if sub_projects[i].get('recurring') else ''}"
)
submitted = st.form_submit_button(_("Re-open Task"), use_container_width=True)

if submitted:
Expand Down Expand Up @@ -761,7 +772,11 @@ def view_delete_task():
return

with st.form("delete_sub_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(sub_projects)), format_func=lambda i: f"{sub_projects[i]['task_name']} (done)" if sub_projects[i].get('status') == 'done' else sub_projects[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(sub_projects)),
format_func=lambda i: f"{sub_projects[i]['task_name']}{' (done)' if sub_projects[i].get('status') == 'done' else ''}{' ↻' if sub_projects[i].get('recurring') else ''}"
)
st.warning(_("This action cannot be undone."))
submitted = st.form_submit_button(_("Delete Task"), use_container_width=True)

Expand Down Expand Up @@ -811,7 +826,11 @@ def view_move_task():
return

with st.form("move_sub_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(sub_projects)), format_func=lambda i: f"{sub_projects[i]['task_name']} (done)" if sub_projects[i].get('status') == 'done' else sub_projects[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(sub_projects)),
format_func=lambda i: f"{sub_projects[i]['task_name']}{' (done)' if sub_projects[i].get('status') == 'done' else ''}{' ↻' if sub_projects[i].get('recurring') else ''}"
)
target_main = st.selectbox(_("Select Target Project"), target_options)

submitted = st.form_submit_button(_("Move Task"), use_container_width=True)
Expand Down Expand Up @@ -948,7 +967,11 @@ def view_promote_task():
return

with st.form("promote_sub_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(sub_projects)), format_func=lambda i: f"{sub_projects[i]['task_name']} (done)" if sub_projects[i].get('status') == 'done' else sub_projects[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(sub_projects)),
format_func=lambda i: f"{sub_projects[i]['task_name']}{' (done)' if sub_projects[i].get('status') == 'done' else ''}{' ↻' if sub_projects[i].get('recurring') else ''}"
)
st.info(_("This will create a new Project with the task's name and move all time entries to a 'General' task within it."))

submitted = st.form_submit_button(_("Promote to Project"), use_container_width=True)
Expand Down Expand Up @@ -1041,7 +1064,8 @@ def view_list_tasks():
name = t['task_name']
status_text = f"({_('closed')})" if t['status'] == 'closed' else ""
display_name = f"{name} (done)" if t['status'] == 'done' else name
st.markdown(f"- {display_name} {status_text}")
recurring_info = " ↻" if t.get('recurring') else ""
st.markdown(f"- {display_name} {status_text}{recurring_info}")
else:
st.info(_("No tasks found for '{name}'.").format(name=selected_main))

Expand Down Expand Up @@ -1407,7 +1431,11 @@ def view_edit_task_select_task():
st.info(_("No open tasks found."))
if st.button(_("Back"), use_container_width=True): navigate_to('edit_task')
return
selected_idx = st.selectbox(_("Select Task"), range(len(tasks)), format_func=lambda i: f"{tasks[i]['task_name']} (done)" if tasks[i].get('status') == 'done' else tasks[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(tasks)),
format_func=lambda i: f"{tasks[i]['task_name']}{' (done)' if tasks[i].get('status') == 'done' else ''}{' ↻' if tasks[i].get('recurring') else ''}"
)
selected_task = tasks[selected_idx]['task_name']
if st.button(_("Next"), use_container_width=True):
st.session_state.context['selected_task'] = selected_task
Expand Down Expand Up @@ -1560,7 +1588,11 @@ def view_start_work():
return

with st.form("start_work_form"):
selected_idx = st.selectbox(_("Select Task"), range(len(tasks)), format_func=lambda i: f"{tasks[i]['task_name']} (done)" if tasks[i].get('status') == 'done' else tasks[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(tasks)),
format_func=lambda i: f"{tasks[i]['task_name']}{' (done)' if tasks[i].get('status') == 'done' else ''}{' ↻' if tasks[i].get('recurring') else ''}"
)
submitted = st.form_submit_button(_("Start Work"), use_container_width=True)

if submitted:
Expand Down Expand Up @@ -1946,7 +1978,11 @@ def view_report_detailed_task_select_task():
navigate_to('report_detailed_task')
return

selected_idx = st.selectbox(_("Select Task"), range(len(tasks)), format_func=lambda i: f"{tasks[i]['task_name']} (done)" if tasks[i].get('status') == 'done' else tasks[i]['task_name'])
selected_idx = st.selectbox(
_("Select Task"),
range(len(tasks)),
format_func=lambda i: f"{tasks[i]['task_name']}{' (done)' if tasks[i].get('status') == 'done' else ''}{' ↻' if tasks[i].get('recurring') else ''}"
)
selected_task = tasks[selected_idx]['task_name']
if st.button(_("Generate Report"), use_container_width=True):
report = st.session_state.tracker.generate_task_report(main_project, selected_task)
Expand Down
2 changes: 1 addition & 1 deletion tt/TimeTracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class TimeTracker:

The data is loaded from and saved to a JSON file.
"""
VERSION = "3.9"
VERSION = "3.10"
STATUS_OPEN = "open"
STATUS_CLOSED = "closed"
STATUS_DONE = "done"
Expand Down
Loading