import Link from "next/link"; import { requireKitaSession } from "@/lib/auth-utils"; import { prisma } from "@/lib/prisma"; import { absenceDate, absenceToday, canManageKitaAbsences, } from "@/lib/absence-policy"; import { reasonLabel } from "@/lib/absence-utils"; import { AbsenceManagementActions } from "@/components/absence-management-actions"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; export const metadata = { title: "Meine Abwesenheiten · Kita-Planer" }; export default async function OwnAbsencesPage({ searchParams, }: { searchParams: Promise<{ view?: string; page?: string }>; }) { const session = await requireKitaSession(); const actor = await prisma.user.findFirstOrThrow({ where: { id: session.user.id, kitaId: session.user.kitaId }, select: { familyId: true, role: true }, }); const query = await searchParams; const past = query.view === "past"; const parsedPage = Number(query.page ?? 1); const requestedPage = Number.isSafeInteger(parsedPage) && parsedPage > 0 ? parsedPage : 1; const today = absenceToday(); const where = { kitaId: session.user.kitaId, child: { kitaId: session.user.kitaId, familyId: actor.familyId ?? "" }, endDate: past ? { lt: absenceDate(today) } : { gte: absenceDate(today) }, }; const count = actor.familyId ? await prisma.absence.count({ where }) : 0; const pages = Math.max(1, Math.ceil(count / 20)); const page = Math.min(requestedPage, pages); const absences = actor.familyId ? await prisma.absence.findMany({ where, select: { id: true, startDate: true, endDate: true, reason: true, note: true, updatedAt: true, child: { select: { firstName: true, lastName: true } }, }, orderBy: [{ startDate: past ? "desc" : "asc" }, { id: "asc" }], take: 20, skip: (page - 1) * 20, }) : []; const href = (nextPage: number) => `/dashboard/abwesenheiten?view=${past ? "past" : "current"}&page=${nextPage}`; const dateLabel = (date: Date) => new Intl.DateTimeFormat("de-DE", { dateStyle: "medium", timeZone: "UTC", }).format(date); return (

MEIN HAUSHALT

Meine{" "} Abwesenheiten

Zukünftige Meldungen deiner Kinder kannst du ändern oder zurücknehmen. Sobald eine Meldung begonnen hat, übernimmt die Kita die gesamte Meldung.

{canManageKitaAbsences(actor.role) && ( )}
{!actor.familyId ? (

Deinem Konto ist noch kein Haushalt zugeordnet.

) : ( <>

{count} Meldung{count === 1 ? "" : "en"}

{absences.length === 0 && ( Für diesen Zeitraum sind keine Abwesenheiten gemeldet. )} {absences.map((absence) => { const startDate = absence.startDate.toISOString().slice(0, 10); return (

{absence.child.firstName} {absence.child.lastName}

{dateLabel(absence.startDate)} {absence.endDate.getTime() !== absence.startDate.getTime() ? ` – ${dateLabel(absence.endDate)}` : ""}{" "} · {reasonLabel(absence.reason)}

{past ? "Vergangen" : startDate <= today ? "Laufend" : "Zukünftig"}
{absence.note && (

{absence.note}

)}
); })}
{pages > 1 && (
{page > 1 ? ( ) : ( )} Seite {page} von {pages} {page < pages ? ( ) : ( )}
)} )}
); }