import Link from "next/link"; import { prisma } from "@/lib/prisma"; import { BackLink } from "@/components/back-link"; import { formatPrice, formatDate } from "@/lib/format"; import { OrderStatusBadge } from "@/components/account-ui"; import { updateOrderStatusAction } from "../actions"; import type { OrderStatus } from "@/generated/prisma/client"; import { insensitiveContains } from "@/lib/prisma-search"; import { getLocale } from "@/i18n/locale"; import { getDictionary } from "@/i18n/get-dictionary"; import { isArchiveView } from "@/lib/archive"; import { ensureAutoArchived } from "@/lib/archive-runner"; import { AdminArchiveTabs, AdminArchiveToggle } from "@/components/admin-archive"; import { AdminEmptyState, AdminPageHeader, AdminSearchForm } from "@/components/admin-list"; export default async function AdminOrdersPage(props: PageProps<"/admin/bestellungen">) { const t = getDictionary(await getLocale()); const statusLabels = t.orderStatusBadge; const { q, status, ansicht } = await props.searchParams; const query = typeof q === "string" ? q.trim() : ""; const statusFilter = typeof status === "string" && status in statusLabels ? (status as OrderStatus) : undefined; const isArchive = isArchiveView(ansicht); await ensureAutoArchived("orders"); const filterWhere = { ...(statusFilter ? { status: statusFilter } : {}), ...(query ? { OR: [ { orderNumber: insensitiveContains(query) }, { email: insensitiveContains(query) }, { lastName: insensitiveContains(query) }, ], } : {}), }; const [orders, activeCount, archivedCount] = await Promise.all([ prisma.order.findMany({ where: { ...filterWhere, archivedAt: isArchive ? { not: null } : null }, orderBy: { createdAt: "desc" }, take: 100, include: { items: true }, }), prisma.order.count({ where: { ...filterWhere, archivedAt: null } }), prisma.order.count({ where: { ...filterWhere, archivedAt: { not: null } } }), ]); return (
{/* Die DHL-Aktionen leiten bei einer nicht mehr auffindbaren Bestellung hierher zurueck (admin/actions/dhl.ts). Ohne diese Ausgabe sah das aus wie ein folgenloser Klick. */} {isArchive ?

{t.adminArchive.autoRuleOrders}

: null}
{orders.map((order) => ( ))}
{t.adminOrdersPage.colNumber} {t.adminOrdersPage.colCustomer} {t.adminOrdersPage.colDate} {t.adminOrdersPage.colItems} {t.adminOrdersPage.colTotal} {t.adminOrdersPage.colStatus} {t.adminOrdersPage.colFulfillment}
{order.orderNumber} {order.giftMessage ? ( {t.adminOrdersPage.giftOrderTitle} ) : null} {order.firstName} {order.lastName}
{order.email}
{formatDate(order.createdAt)} {order.items.length} {formatPrice(order.totalCents, order.currency)} {/* Storniert ist ein Endzustand (isOrderStatusChangeAllowed) — keine Auswahl anbieten, die der Server ablehnt. */} {order.status !== "STORNIERT" ? (
) : null}
{order.fulfillmentMethod === "VERSAND" ? t.adminOrdersPage.shipping : t.adminOrdersPage.pickup}
{orders.length === 0 ? ( ) : null}
); }