diff --git a/ondeck/src/app/(dashboard)/manager/page.tsx b/ondeck/src/app/(dashboard)/manager/page.tsx index beaaaa5..1110f1c 100644 --- a/ondeck/src/app/(dashboard)/manager/page.tsx +++ b/ondeck/src/app/(dashboard)/manager/page.tsx @@ -3,6 +3,7 @@ import { authOptions } from '@/lib/auth' import { redirect } from 'next/navigation' import { prisma } from '@/lib/db' import { ManagerPageClient } from '@/components/manager/manager-page-client' +import { OVERDUE_WINDOW_KEY, OVERDUE_WINDOW_DEFAULT } from '@/app/api/admin/manager-settings/route' export default async function ManagerPage() { const session = await getServerSession(authOptions) @@ -34,7 +35,15 @@ export default async function ManagerPage() { }), ]) - // Fetch team members with their task counts + const overdueSetting = await prisma.appSetting.findUnique({ where: { key: OVERDUE_WINDOW_KEY } }) + const overdueWindowDays = parseInt(overdueSetting?.value ?? String(OVERDUE_WINDOW_DEFAULT), 10) + + const shapeClientIds = (await prisma.client.findMany({ + where: { designation: { name: { in: ['Shape', 'Shape 2'] } } }, + select: { id: true }, + })).map((c) => c.id) + + // Fetch team members with their active task counts (Shape clients only) const teamMembers = await prisma.user.findMany({ where: { isActive: true }, select: { @@ -45,7 +54,8 @@ export default async function ManagerPage() { taskAssignments: { where: { task: { - status: { not: 'COMPLETED' } + clientId: { in: shapeClientIds }, + status: { notIn: ['COMPLETED', 'CANCELLED', 'NA'] }, } }, select: { @@ -60,11 +70,7 @@ export default async function ManagerPage() { }, userRoles: { include: { - role: { - select: { - name: true, - } - } + role: { select: { name: true } } } } }, @@ -93,6 +99,7 @@ export default async function ManagerPage() { teamMembers={teamMembers} recentTasks={recentTasks} setupQueueCount={setupQueueCount} + overdueWindowDays={overdueWindowDays} /> ) } diff --git a/ondeck/src/app/api/dashboard/workload/route.ts b/ondeck/src/app/api/dashboard/workload/route.ts index 13afaa4..6bc3650 100644 --- a/ondeck/src/app/api/dashboard/workload/route.ts +++ b/ondeck/src/app/api/dashboard/workload/route.ts @@ -126,7 +126,7 @@ export async function GET(request: NextRequest) { email: true, department: true, taskAssignments: { - where: { task: deptTaskWhere }, + where: { task: { ...deptTaskWhere, status: { notIn: ['COMPLETED', 'CANCELLED', 'NA'] } } }, include: { task: { select: { @@ -174,13 +174,9 @@ export async function GET(request: NextRequest) { }), ]) - // Calculate user-level metrics + // Calculate user-level metrics (taskAssignments only contains active tasks) const userMetrics = userWorkload.map((user) => { - const tasks = user.taskAssignments.map((a) => a.task) - const activeTasks = tasks.filter( - (t) => !['COMPLETED', 'CANCELLED', 'NA'].includes(t.status) - ) - const completedTasks = tasks.filter((t) => t.status === 'COMPLETED') + const activeTasks = user.taskAssignments.map((a) => a.task) const overdue = activeTasks.filter( (t) => new Date(t.dueDate) >= overdueFrom && new Date(t.dueDate) < today ) @@ -192,15 +188,12 @@ export async function GET(request: NextRequest) { id: user.id, name: user.displayName || user.email, department: user.department, - totalAssigned: tasks.length, + totalAssigned: activeTasks.length, activeTasks: activeTasks.length, - completedTasks: completedTasks.length, + completedTasks: 0, overdueTasks: overdue.length, highPriorityTasks: highPriority.length, - completionRate: - tasks.length > 0 - ? Math.round((completedTasks.length / tasks.length) * 100) - : 0, + completionRate: 0, } }) diff --git a/ondeck/src/components/dashboard/workload-kpis.tsx b/ondeck/src/components/dashboard/workload-kpis.tsx index 411dae3..47130d8 100644 --- a/ondeck/src/components/dashboard/workload-kpis.tsx +++ b/ondeck/src/components/dashboard/workload-kpis.tsx @@ -392,10 +392,8 @@ export function WorkloadKPIs({ department }: WorkloadKPIsProps = {}) {