Enhance task status change handling and progress updates
- Updated SQL queries to retrieve color codes for task statuses from the correct table, ensuring accurate data representation. - Added logic to automatically set task progress to 100% when a task is marked as done, improving task completion handling. - Enhanced frontend components to manage task status changes and reflect updates in real-time, including handling parent task progress. - Integrated logging for task status changes and progress updates to improve traceability and debugging.
This commit is contained in:
@@ -27,7 +27,7 @@ export async function on_get_done_statuses(
|
||||
|
||||
// Query to get all statuses in the "done" category for the project
|
||||
const result = await db.query(`
|
||||
SELECT ts.id, ts.name, ts.sort_order, ts.color_code
|
||||
SELECT ts.id, ts.name, ts.sort_order, stsc.color_code
|
||||
FROM task_statuses ts
|
||||
INNER JOIN sys_task_status_categories stsc ON ts.category_id = stsc.id
|
||||
WHERE ts.project_id = $1
|
||||
|
||||
@@ -4,10 +4,11 @@ import db from "../../config/db";
|
||||
import {NotificationsService} from "../../services/notifications/notifications.service";
|
||||
import {TASK_STATUS_COLOR_ALPHA} from "../../shared/constants";
|
||||
import {SocketEvents} from "../events";
|
||||
import {getLoggedInUserIdFromSocket, log_error, notifyProjectUpdates} from "../util";
|
||||
import {getLoggedInUserIdFromSocket, log, log_error, notifyProjectUpdates} from "../util";
|
||||
import TasksControllerV2 from "../../controllers/tasks-controller-v2";
|
||||
import {getTaskDetails, logStatusChange} from "../../services/activity-logs/activity-logs.service";
|
||||
import {getTaskDetails, logProgressChange, logStatusChange} from "../../services/activity-logs/activity-logs.service";
|
||||
import { assignMemberIfNot } from "./on-quick-assign-or-remove";
|
||||
import logger from "../../utils/logger";
|
||||
|
||||
export async function on_task_status_change(_io: Server, socket: Socket, data?: string) {
|
||||
try {
|
||||
@@ -49,6 +50,46 @@ export async function on_task_status_change(_io: Server, socket: Socket, data?:
|
||||
});
|
||||
}
|
||||
|
||||
// Check if the new status is in a "done" category
|
||||
if (changeResponse.status_category?.is_done) {
|
||||
// Get current progress value
|
||||
const progressResult = await db.query(`
|
||||
SELECT progress_value, manual_progress
|
||||
FROM tasks
|
||||
WHERE id = $1
|
||||
`, [body.task_id]);
|
||||
|
||||
const currentProgress = progressResult.rows[0]?.progress_value;
|
||||
const isManualProgress = progressResult.rows[0]?.manual_progress;
|
||||
|
||||
// Only update if not already 100%
|
||||
if (currentProgress !== 100) {
|
||||
// Update progress to 100%
|
||||
await db.query(`
|
||||
UPDATE tasks
|
||||
SET progress_value = 100, manual_progress = TRUE
|
||||
WHERE id = $1
|
||||
`, [body.task_id]);
|
||||
|
||||
log(`Task ${body.task_id} moved to done status - progress automatically set to 100%`, null);
|
||||
|
||||
// Log the progress change to activity logs
|
||||
await logProgressChange({
|
||||
task_id: body.task_id,
|
||||
old_value: currentProgress !== null ? currentProgress.toString() : "0",
|
||||
new_value: "100",
|
||||
socket
|
||||
});
|
||||
|
||||
// If this is a subtask, update parent task progress
|
||||
if (body.parent_task) {
|
||||
setTimeout(() => {
|
||||
socket.emit(SocketEvents.GET_TASK_PROGRESS.toString(), body.parent_task);
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const info = await TasksControllerV2.getTaskCompleteRatio(body.parent_task || body.task_id);
|
||||
|
||||
socket.emit(SocketEvents.TASK_STATUS_CHANGE.toString(), {
|
||||
|
||||
Reference in New Issue
Block a user