diff --git a/server/src/v1/project.ts b/server/src/v1/project.ts index 6a33e994ab4c32b3ad037e0c756f8cc865ed158c..b285bcbf2b56620b90fefa930b6209750e95e7f0 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 a106fe79c0782e57b9c2f1043cb9b542cffe7899..3257771e7cc48b2f3dda2fbe9318601d6b4ae3a9 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 43e9244309be3818dd2a904919358875b56d20d1..049646452834c86fef3317ea0a916ecfcda20004 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({