diff --git a/app/admin/commission/income/page.tsx b/app/admin/commission/income/page.tsx new file mode 100644 index 0000000..d8ffbd5 --- /dev/null +++ b/app/admin/commission/income/page.tsx @@ -0,0 +1,40 @@ +import Link from "next/link"; +import { and, asc, eq, gte, lt } from "drizzle-orm"; +import { redirect } from "next/navigation"; +import { connection } from "next/server"; +import { AdminHeader } from "@/components/admin/admin-header"; +import { CommissionIncomeCalendar } from "@/components/commission/income-calendar"; +import { getDb } from "@/db"; +import { commissionPayments, commissionTickets, users } from "@/db/schema"; +import { getAdminSession } from "@/lib/auth/server"; +import { commissionIncomeMonth } from "@/lib/commission/income"; + +export const instant = false; + +export default async function CommissionIncomePage({ searchParams }: PageProps<"/admin/commission/income">) { + await connection(); + if (!(await getAdminSession())) redirect("/auth/login?next=%2Fadmin%2Fcommission%2Fincome"); + const { month: rawMonth } = await searchParams; + const period = commissionIncomeMonth(rawMonth); + const rows = await getDb().select({ + ticketId: commissionTickets.id, + title: commissionTickets.title, + creatorName: users.name, + amountBaht: commissionPayments.amountBaht, + transferredAt: commissionPayments.transferredAt, + }).from(commissionPayments) + .innerJoin(commissionTickets, eq(commissionTickets.id, commissionPayments.ticketId)) + .innerJoin(users, eq(users.id, commissionTickets.userId)) + .where(and(gte(commissionPayments.transferredAt, period.from), lt(commissionPayments.transferredAt, period.to))) + .orderBy(asc(commissionPayments.transferredAt), asc(commissionPayments.id)); + + return
+
+ กลับไป Commission tickets +

Commission income

+

รายได้ประจำเดือนจาก Commision

+ +
+
; +} diff --git a/app/admin/commission/page.tsx b/app/admin/commission/page.tsx index 07989b8..b5707d1 100644 --- a/app/admin/commission/page.tsx +++ b/app/admin/commission/page.tsx @@ -31,6 +31,7 @@ export default async function AdminCommissionPage({ searchParams }: PageProps<"/

Commission tickets

+
diff --git a/app/admin/create/page.tsx b/app/admin/create/page.tsx index 82bafa3..d78f871 100644 --- a/app/admin/create/page.tsx +++ b/app/admin/create/page.tsx @@ -12,17 +12,35 @@ import { getActiveCatalog, listGuideCards } from "@/lib/guides/queries"; export default async function CreateGuidePage() { await connection(); if (!(await getAdminSession())) redirect("/auth/login?next=%2Fadmin"); - const [catalog, guides] = await Promise.all([getActiveCatalog(), listGuideCards()]); + const [catalog, guides] = await Promise.all([ + getActiveCatalog(), + listGuideCards(), + ]); if (!catalog) redirect("/admin?sync=required"); return (
- -

Catalog ล่าสุดจาก Lunaris

สร้าง Guide ใหม่

+ +
+

+ สร้าง Guide ใหม่ +

+
- guide.characterKey)} /> + guide.characterKey)} + />
); diff --git a/components/admin/admin-header.tsx b/components/admin/admin-header.tsx index 30e8855..a628df6 100644 --- a/components/admin/admin-header.tsx +++ b/components/admin/admin-header.tsx @@ -68,26 +68,6 @@ export function AdminHeader() { Glossary - - + +