Enhance task progress tracking and UI updates
- Updated SQL migration to insert default task statuses ('To Do', 'Doing', 'Done') upon project creation, improving task management.
- Enhanced socket commands to emit progress updates for subtasks, ensuring real-time synchronization of task progress.
- Refactored frontend components to handle progress calculations and updates more effectively, including improved logging for debugging.
- Removed deprecated members reports components to streamline the codebase and improve maintainability.
This commit is contained in:
@@ -354,14 +354,19 @@ BEGIN
|
||||
VALUES (_project_id, _team_id, _project_created_log)
|
||||
RETURNING id INTO _project_created_log_id;
|
||||
|
||||
-- add the team member in the project as a user
|
||||
INSERT INTO project_members (project_id, team_member_id, project_access_level_id)
|
||||
VALUES (_project_id, _team_member_id,
|
||||
(SELECT id FROM project_access_levels WHERE key = 'MEMBER'));
|
||||
-- insert the project creator as a project member
|
||||
INSERT INTO project_members (team_member_id, project_access_level_id, project_id, role_id)
|
||||
VALUES (_team_member_id, (SELECT id FROM project_access_levels WHERE key = 'ADMIN'),
|
||||
_project_id,
|
||||
(SELECT id FROM roles WHERE team_id = _team_id AND default_role IS TRUE));
|
||||
|
||||
-- register the project log
|
||||
INSERT INTO project_logs (project_id, team_id, description)
|
||||
VALUES (_project_id, _team_id, _project_member_added_log);
|
||||
-- insert statuses
|
||||
INSERT INTO task_statuses (name, project_id, team_id, category_id, sort_order)
|
||||
VALUES ('To Do', _project_id, _team_id, (SELECT id FROM sys_task_status_categories WHERE is_todo IS TRUE), 0);
|
||||
INSERT INTO task_statuses (name, project_id, team_id, category_id, sort_order)
|
||||
VALUES ('Doing', _project_id, _team_id, (SELECT id FROM sys_task_status_categories WHERE is_doing IS TRUE), 1);
|
||||
INSERT INTO task_statuses (name, project_id, team_id, category_id, sort_order)
|
||||
VALUES ('Done', _project_id, _team_id, (SELECT id FROM sys_task_status_categories WHERE is_done IS TRUE), 2);
|
||||
|
||||
-- insert default project columns
|
||||
PERFORM insert_task_list_columns(_project_id);
|
||||
|
||||
@@ -33,6 +33,56 @@ export async function on_get_task_subtasks_count(io: any, socket: Socket, taskId
|
||||
|
||||
console.log(`Emitted subtask count for task ${taskId}: ${subtaskCount}`);
|
||||
|
||||
// If there are subtasks, also get their progress information
|
||||
if (subtaskCount > 0) {
|
||||
// Get all subtasks for this parent task with their progress information
|
||||
const subtasksResult = await db.query(`
|
||||
SELECT
|
||||
t.id,
|
||||
t.progress_value,
|
||||
t.manual_progress,
|
||||
t.weight,
|
||||
CASE
|
||||
WHEN t.manual_progress = TRUE THEN t.progress_value
|
||||
ELSE COALESCE(
|
||||
(SELECT (CASE WHEN tl.total_minutes > 0 THEN
|
||||
(tl.total_minutes_spent / tl.total_minutes * 100)
|
||||
ELSE 0 END)
|
||||
FROM (
|
||||
SELECT
|
||||
t2.id,
|
||||
t2.total_minutes,
|
||||
COALESCE(SUM(twl.time_spent), 0) as total_minutes_spent
|
||||
FROM tasks t2
|
||||
LEFT JOIN task_work_log twl ON t2.id = twl.task_id
|
||||
WHERE t2.id = t.id
|
||||
GROUP BY t2.id, t2.total_minutes
|
||||
) tl
|
||||
), 0)
|
||||
END as calculated_progress
|
||||
FROM tasks t
|
||||
WHERE t.parent_task_id = $1 AND t.archived IS FALSE
|
||||
`, [taskId]);
|
||||
|
||||
// Emit progress updates for each subtask
|
||||
for (const subtask of subtasksResult.rows) {
|
||||
const progressValue = subtask.manual_progress ?
|
||||
subtask.progress_value :
|
||||
Math.floor(subtask.calculated_progress);
|
||||
|
||||
socket.emit(
|
||||
SocketEvents.TASK_PROGRESS_UPDATED.toString(),
|
||||
{
|
||||
task_id: subtask.id,
|
||||
progress_value: progressValue,
|
||||
weight: subtask.weight
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
console.log(`Emitted progress updates for ${subtasksResult.rows.length} subtasks of task ${taskId}`);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
log_error(`Error getting subtask count for task ${taskId}: ${error}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user