Files
worklenz/worklenz-backend/src/controllers/gantt-controller.ts

98 lines
4.1 KiB
TypeScript

import { IWorkLenzRequest } from "../interfaces/worklenz-request";
import { IWorkLenzResponse } from "../interfaces/worklenz-response";
import db from "../config/db";
import { ServerResponse } from "../models/server-response";
import WorklenzControllerBase from "./worklenz-controller-base";
import HandleExceptions from "../decorators/handle-exceptions";
import { getColor } from "../shared/utils";
import moment from "moment";
export default class GanttController extends WorklenzControllerBase {
@HandleExceptions()
public static async getPhaseLabel(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `SELECT phase_label
FROM projects
WHERE id = $1;`;
const result = await db.query(q, [req.query.project_id]);
const [data] = result.rows;
return res.status(200).send(new ServerResponse(true, data));
}
@HandleExceptions()
public static async get(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `SELECT id AS "TaskID",
name AS "TaskName",
start_date AS "StartDate",
end_date AS "EndDate",
(SELECT name FROM task_statuses WHERE id = tasks.status_id) AS status,
(SELECT color_code
FROM sys_task_status_categories
WHERE id = (SELECT category_id FROM task_statuses WHERE id = tasks.status_id)),
(SELECT COALESCE(ARRAY_TO_JSON(ARRAY_AGG(ROW_TO_JSON(rec))), '[]'::JSON)
FROM (SELECT id AS "TaskID",
name AS "TaskName",
start_date AS "StartDate",
end_date AS "EndDate",
(SELECT name FROM task_statuses WHERE id = tasks.status_id) AS status,
(SELECT color_code
FROM sys_task_status_categories
WHERE id = (SELECT category_id FROM task_statuses WHERE id = tasks.status_id))
FROM tasks t
WHERE t.parent_task_id = tasks.id) rec) AS subtasks
FROM tasks
WHERE archived IS FALSE
AND project_id = $1
AND parent_task_id IS NULL
ORDER BY roadmap_sort_order, created_at DESC;`;
const result = await db.query(q, [req.query.project_id]);
return res.status(200).send(new ServerResponse(true, result.rows));
}
@HandleExceptions()
public static async getPhasesByProject(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `SELECT name AS label,
(SELECT MIN(start_date)
FROM tasks
WHERE id IN (SELECT task_id FROM task_phase WHERE phase_id = project_phases.id)) as day
FROM project_phases
WHERE project_id = $1;`;
const result = await db.query(q, [req.params.id]);
for (const phase of result.rows) {
phase.day = new Date(phase.day);
}
return res.status(200).send(new ServerResponse(true, result.rows));
}
@HandleExceptions()
public static async getWorkload(req: IWorkLenzRequest, res: IWorkLenzResponse): Promise<IWorkLenzResponse> {
const q = `SELECT pm.id AS "TaskID",
tmiv.team_member_id,
name AS "TaskName",
avatar_url,
email,
TRUE as project_member,
(SELECT COALESCE(ARRAY_TO_JSON(ARRAY_AGG(ROW_TO_JSON(rec))), '[]'::JSON)
FROM (SELECT id AS "TaskID",
name AS "TaskName",
start_date AS "StartDate",
end_date AS "EndDate"
FROM tasks
INNER JOIN tasks_assignees ta ON tasks.id = ta.task_id
WHERE archived IS FALSE
AND project_id = pm.project_id
AND ta.team_member_id = tmiv.team_member_id
ORDER BY roadmap_sort_order, start_date DESC) rec) AS subtasks
FROM project_members pm
INNER JOIN team_member_info_view tmiv ON pm.team_member_id = tmiv.team_member_id
WHERE project_id = $1
ORDER BY tmiv.name;`;
const result = await db.query(q, [req.query.project_id]);
for (const member of result.rows) {
member.color_code = getColor(member.TaskName);
}
return res.status(200).send(new ServerResponse(true, result.rows));
}
}