import DashboardLayout from "@/components/DashboardLayout" import { auth } from "@/lib/auth" import { prisma } from "@/lib/prisma" import Link from "next/link" import { notFound } from "next/navigation" export default async function ShiftDetailsPage({ params, }: { params: Promise<{ id: string }> }) { const { id } = await params const session = await auth() const manager = await prisma.shiftManager.findFirst({ where: { email: session?.user?.email || "" } }) if (!manager) return
Manager not found
const shift = await prisma.shift.findFirst({ where: { id, shiftManagerId: manager.id }, include: { shiftManager: true, shiftTeamMembers: { include: { worker: true, machine: true, team: true } }, machineShiftReports: { include: { worker: true, machine: true } } } }) if (!shift) notFound() return (
← Back to Shifts

Shift Details

{/* Shift Information Card */}

Shift Information

Shift Name

{shift.name}

Status

{shift.status}

Date

{new Date(shift.shiftDate).toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}

Team

{shift.shiftTeamMembers[0]?.team.name || 'N/A'}

Start Time

{new Date(shift.startTime).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}

End Time

{new Date(shift.endTime).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}

{/* Operator Assignments Card */}

Operator Assignments

{shift.shiftTeamMembers.length} operator(s) assigned

{shift.shiftTeamMembers.length === 0 ? (
No operators assigned to this shift
) : (
{shift.shiftTeamMembers.map((member) => { const report = shift.machineShiftReports.find( r => r.workerId === member.workerId && r.machineId === member.machineId ) return ( ) })}
Operator Role Machine Report Status Actions

{member.worker.firstName} {member.worker.surname}

{member.worker.email || 'N/A'}

{member.shiftRole}

{member.machine?.name || 'N/A'}

{member.machine?.machineType || 'N/A'}

{report ? ( Submitted ) : ( Pending )} {report ? ( View Report ) : ( No report yet )}
)}
{/* Summary Statistics */}

Total Operators

{shift.shiftTeamMembers.length}

Reports Submitted

{shift.machineShiftReports.length}

Reports Pending

{Math.max(0, shift.shiftTeamMembers.length - shift.machineShiftReports.length)}

) }