From c16909f7b16a35bd54627d14df5284cbd0c2faef Mon Sep 17 00:00:00 2001 From: Roland Bernard <rolbernard@unibz.it> Date: Mon, 24 May 2021 17:10:04 +0200 Subject: [PATCH] Fixed completion computation --- server/src/v1/project.ts | 9 ++++++--- server/src/v1/team.ts | 9 ++++++--- server/src/v1/user.ts | 11 +++++++---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/server/src/v1/project.ts b/server/src/v1/project.ts index 6a33e99..b285bcb 100644 --- a/server/src/v1/project.ts +++ b/server/src/v1/project.ts @@ -282,13 +282,16 @@ project.get('/:uuid/completion', async (req, res) => { database('team_members') .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id') .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id') - .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id') - .leftJoin('workhours', 'tasks.id', 'workhours.task_id') .select({ id: 'tasks.id', status: database.raw( 'Case When `tasks`.`status` = \'open\' ' - + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'And (Select ' + + 'Sum(`task_requirements`.`time` * 60 * 1000) ' + + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) ' + + '< (Select ' + + 'Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) ' + 'Then \'overdue\' Else `tasks`.`status` End'), }) .where({ diff --git a/server/src/v1/team.ts b/server/src/v1/team.ts index a106fe7..3257771 100644 --- a/server/src/v1/team.ts +++ b/server/src/v1/team.ts @@ -400,13 +400,16 @@ team.get('/:uuid/completion', async (req, res) => { database('team_members') .innerJoin('team_projects', 'team_members.team_id', 'team_projects.team_id') .innerJoin('tasks', 'team_projects.project_id', 'tasks.project_id') - .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id') - .leftJoin('workhours', 'tasks.id', 'workhours.task_id') .select({ id: 'tasks.id', status: database.raw( 'Case When `tasks`.`status` = \'open\' ' - + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'And (Select ' + + 'Sum(`task_requirements`.`time` * 60 * 1000) ' + + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) ' + + '< (Select ' + + 'Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) ' + 'Then \'overdue\' Else `tasks`.`status` End'), }) .where({ diff --git a/server/src/v1/user.ts b/server/src/v1/user.ts index 43e9244..0496464 100644 --- a/server/src/v1/user.ts +++ b/server/src/v1/user.ts @@ -221,14 +221,17 @@ user.get('/completion', async (req, res) => { const to = new Date(parseInt(req.query.to as string ?? Date.now())); const completion = await database( database('task_assignees') - .leftJoin('tasks', 'task_assignees.task_id', 'tasks.id') - .leftJoin('task_requirements', 'tasks.id', 'task_requirements.task_id') - .leftJoin('workhours', 'tasks.id', 'workhours.task_id') + .innerJoin('tasks', 'task_assignees.task_id', 'tasks.id') .select({ id: 'tasks.id', status: database.raw( 'Case When `tasks`.`status` = \'open\' ' - + 'And Sum(`task_requirements`.`time` * 60 * 1000) < Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'And (Select ' + + 'Sum(`task_requirements`.`time` * 60 * 1000) ' + + 'from `task_requirements` where `task_requirements`.`task_id` = `tasks`.`id`) ' + + '< (Select ' + + 'Sum(`workhours`.`finished` - `workhours`.`started`) ' + + 'from `workhours` where `workhours`.`task_id` = `tasks`.`id`) ' + 'Then \'overdue\' Else `tasks`.`status` End'), }) .where({ -- GitLab