Files
TimeTracker/docs/TASK_MANAGEMENT_README.md
Dries Peeters 79e826ced2 feat(tasks,ui): enhance task management UI; update routes; add tests
Improve task workflows and overall UX, and align backend routes with the
new UI flows. Update docs and development setup accordingly.

- UI: refine task list/view/edit templates, project views, and Kanban
  partial (`_kanban_tailwind.html`)
- CSS: polish `app/static/enhanced-ui.css` for spacing, layout, and
  responsiveness
- Routes: update `app/routes/tasks.py` and `app/routes/clients.py` to
  support new edit/delete/filter behaviors and validations
- Templates: align clients/projects pages for consistency and navigation
- Docs: refresh `docs/GETTING_STARTED.md` and
  `docs/TASK_MANAGEMENT_README.md`
- Dev: adjust `docker-compose.yml` and `setup.py` to match the latest
  runtime/build expectations
- Tests: add coverage for delete actions, task project editing, and task
  filters UI (`tests/test_delete_actions.py`,
  `tests/test_task_edit_project.py`,
  `tests/test_tasks_filters_ui.py`); update existing tests

Why:
- Streamlines common task operations and improves discoverability
- Ensures backend and UI are consistent and well-tested
2025-10-21 17:05:00 +02:00

190 lines
7.0 KiB
Markdown

# Task Management Feature
## Overview
The Task Management feature allows you to break down projects into manageable tasks, track their progress, assign them to team members, and monitor time spent on each task.
## Features
### Core Functionality
- **Task Creation**: Create tasks within projects with names, descriptions, and priorities
### Markdown Support
Task and project descriptions support Markdown formatting with a rich editor:
- Editing: Task create/edit and Project create/edit pages include a Markdown editor with dark-mode and image uploads
- Rendering: View pages render Markdown via the `markdown` Jinja filter (`app/utils/template_filters.py`), sanitized with Bleach
- Supported: headings, emphasis, lists, links, code blocks, tables, images
- **Status Tracking**: Monitor task progress through different states (To Do, In Progress, Review, Done)
- **Priority Management**: Set and track task priorities (Low, Medium, High, Urgent)
- **Time Estimation**: Estimate and track actual time for tasks
- **Task Assignment**: Assign tasks to team members
- **Due Date Tracking**: Set deadlines with overdue notifications
### Integration
- **Project Integration**: Tasks are linked to projects and visible in project views
- **Time Tracking**: Start timers and log time directly to specific tasks
- **User Management**: Tasks respect user roles and permissions
- **Reporting**: Include task data in time reports and analytics
## Automatic Database Migration
**No manual setup required!** The Task Management feature automatically creates the necessary database tables and columns when you first start the application.
### What Happens Automatically
1. **On Application Startup**: The system checks if the `tasks` table exists
2. **Table Creation**: If missing, the `tasks` table is automatically created with all required columns
3. **Column Addition**: The system checks if the `task_id` column exists in the `time_entries` table
4. **Schema Updates**: Any missing database elements are automatically added
### Migration Process
The migration runs automatically in these scenarios:
- **First Application Startup**: When the app starts for the first time
- **Database Initialization**: During the `init_database()` process
- **Runtime Checks**: When the database is accessed for the first time
### Migration Logging
The system provides clear feedback during migration:
```
Task Management: Creating tasks table...
✓ Tasks table created successfully
Task Management: Adding task_id column to time_entries table...
✓ task_id column added to time_entries table
Task Management migration check completed
```
## Usage
### Creating Tasks
1. Navigate to **Tasks****Create Task**
2. Select a project
3. Enter task details (name, description, priority, due date)
4. Optionally assign to a team member
5. Save the task
### Managing Task Status
- **To Do**: New tasks start in this state
- **In Progress**: Mark when work begins
- **Review**: Mark when ready for review
- **Done**: Mark when completed
### Time Tracking
- **Start Timer**: Begin timing work on a specific task
- **Manual Entry**: Log time spent on tasks with start/end times
- **Task View**: See total time spent and estimated vs. actual time
### Task Views
- **All Tasks**: Complete list with filtering and search
- **My Tasks**: Tasks assigned to or created by the current user
- **Project Tasks**: Tasks within a specific project
- **Overdue Tasks**: Admin view of all overdue tasks
### Filters UI
- The **All Tasks** page includes a filter panel that is **collapsible**.
- Use the chevron button near "Filter Tasks" to show/hide the filters.
- Your preference is **remembered** using `localStorage` so the panel stays collapsed or expanded across visits.
### Inline Client Creation (Quality of Life)
When creating a new project on `Projects → Create`, you can now create a new client without losing your filled-in project data:
- Click "Create new client" under the Client dropdown to open a modal
- Fill in the minimal client details and submit
- The newly created client is selected automatically and the default hourly rate is prefilled if available
This flow uses an AJAX request to `POST /clients/create` and updates the client select dynamically, preserving the current project form state.
## Database Schema
### Tasks Table
```sql
CREATE TABLE tasks (
id INTEGER PRIMARY KEY,
project_id INTEGER NOT NULL REFERENCES projects(id),
name VARCHAR(200) NOT NULL,
description TEXT,
status VARCHAR(20) DEFAULT 'todo' NOT NULL,
priority VARCHAR(20) DEFAULT 'medium' NOT NULL,
estimated_hours FLOAT,
due_date DATE,
assigned_to INTEGER REFERENCES users(id),
created_by INTEGER NOT NULL REFERENCES users(id),
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
started_at TIMESTAMP,
completed_at TIMESTAMP
);
```
### Time Entries Table (Updated)
The `time_entries` table now includes a `task_id` column:
```sql
ALTER TABLE time_entries ADD COLUMN task_id INTEGER REFERENCES tasks(id);
```
## API Endpoints
### Task Management
- `GET /tasks` - List all tasks with filtering
- `POST /tasks/create` - Create a new task
- `GET /tasks/<id>` - View task details
- `POST /tasks/<id>/edit` - Edit task
- `POST /tasks/<id>/status` - Update task status
- `POST /tasks/<id>/priority` - Update task priority
- `POST /tasks/<id>/assign` - Assign task to user
- `POST /tasks/<id>/delete` - Delete task
### API Access
- `GET /api/tasks/<id>` - Get task data in JSON format
- `PUT /api/tasks/<id>/status` - Update task status via API
## User Roles and Permissions
### Regular Users
- Create tasks in projects they have access to
- Update status and priority of their own tasks
- View tasks they're assigned to or created
- Start timers and log time for tasks
### Admin Users
- All regular user permissions
- View and manage all tasks across all projects
- Access overdue tasks report
- Assign tasks to any user
- Delete any task
## Troubleshooting
### Migration Issues
If you encounter migration problems:
1. **Check Application Logs**: Look for migration-related messages
2. **Manual Migration**: Use the migration script: `python docker/migrate-add-tasks.py`
3. **Database Reset**: As a last resort, recreate the database (data will be lost)
### Common Issues
- **Missing Tables**: Ensure the application has database write permissions
- **Column Errors**: Check if the `time_entries` table exists and is accessible
- **Permission Errors**: Verify database user has ALTER TABLE permissions
### Getting Help
- Check the application logs for detailed error messages
- Verify database connectivity and permissions
- Ensure all required Python packages are installed
## Development
### Adding New Features
The Task Management system is designed to be extensible:
- Add new task statuses in the `Task` model
- Extend priority levels as needed
- Add custom fields to the task schema
- Create new API endpoints for additional functionality
### Testing
- Run the migration test: `python docker/migrate-add-tasks.py`
- Test task creation and management workflows
- Verify time tracking integration
- Check user permission enforcement