diff --git a/app/api/twenty-crm/tasks/route.ts b/app/api/twenty-crm/tasks/route.ts index ea2c085..93e96dc 100644 --- a/app/api/twenty-crm/tasks/route.ts +++ b/app/api/twenty-crm/tasks/route.ts @@ -332,8 +332,12 @@ async function fetchTwentyTasks(userId?: string): Promise { const tasks: TwentyTask[] = filteredByAssignee .filter((task: TwentyTask) => { // Filter: only overdue tasks (dueAt < today) and not completed - if (task.status === 'Done') { - return false; + // Check if task is done (case-insensitive to handle "Done", "done", "DONE", etc.) + if (task.status) { + const status = task.status.trim().toLowerCase(); + if (status === 'done') { + return false; + } } if (!task.dueAt) { @@ -366,6 +370,7 @@ async function fetchTwentyTasks(userId?: string): Promise { logger.debug('[TWENTY_CRM_TASKS] Tasks after filtering', { count: tasks.length, + filteredOutDone: filteredByAssignee.length - tasks.length, }); logger.debug('[TWENTY_CRM_TASKS] Successfully fetched tasks from Twenty CRM', { @@ -423,14 +428,18 @@ export async function GET(request: NextRequest) { const tasks = await fetchTwentyTasks(twentyCrmUserId); // Transform to match Leantime task format for consistency - const transformedTasks = tasks.map((task) => ({ - id: `twenty-${task.id}`, // Prefix to avoid conflicts with Leantime IDs - headline: task.title, - description: (task as any)._bodyText || null, // Use extracted body text - dateToFinish: task.dueAt || null, // For Twenty CRM, dueAt is used as the notification time - projectName: 'Médiation', - projectId: 0, - status: task.status === 'Done' ? 5 : 1, // 5 = Done, 1 = New (or other status) + const transformedTasks = tasks.map((task) => { + // Check if task is done (case-insensitive) + const isDone = task.status ? task.status.trim().toLowerCase() === 'done' : false; + + return { + id: `twenty-${task.id}`, // Prefix to avoid conflicts with Leantime IDs + headline: task.title, + description: (task as any)._bodyText || null, // Use extracted body text + dateToFinish: task.dueAt || null, // For Twenty CRM, dueAt is used as the notification time + projectName: 'Médiation', + projectId: 0, + status: isDone ? 5 : 1, // 5 = Done, 1 = New (or other status) editorId: task.assigneeId || null, editorFirstname: task.assignee?.name?.firstName || null, editorLastname: task.assignee?.name?.lastName || null, @@ -443,7 +452,8 @@ export async function GET(request: NextRequest) { dependingTicketId: null, source: 'twenty-crm', // Add source identifier url: process.env.TWENTY_CRM_URL ? `${process.env.TWENTY_CRM_URL}/object/task/${task.id}` : null, - })); + }; + }); logger.debug('[TWENTY_CRM_TASKS] Transformed tasks', { count: transformedTasks.length,