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 (
{t.adminArchive.autoRuleOrders}
: null}| {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)} |
|
{order.fulfillmentMethod === "VERSAND" ? t.adminOrdersPage.shipping : t.adminOrdersPage.pickup} |
|