diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0ba45781..ae572e78 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -26,6 +26,8 @@ model User { Donasi Donasi[] Donasi_Invoice Donasi_Invoice[] Donasi_Notif Donasi_Notif[] + Event Event[] + Event_Peserta Event_Peserta[] } model MasterUserRole { @@ -478,3 +480,55 @@ model Donasi_PencairanDana { Images Images? @relation(fields: [imagesId], references: [id]) imagesId String? } + +// ========================================= EVENT ========================================= // + +model Event { + id String @id @default(cuid()) + title String + lokasi String + tanggal DateTime + deskripsi String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + catatan String? + + Author User? @relation(fields: [authorId], references: [id]) + authorId String? + EventMaster_Status EventMaster_Status? @relation(fields: [eventMaster_StatusId], references: [id]) + eventMaster_StatusId String? @default("2") + Event_Peserta Event_Peserta[] + EventMaster_TipeAcara EventMaster_TipeAcara? @relation(fields: [eventMaster_TipeAcaraId], references: [id]) + eventMaster_TipeAcaraId Int? +} + +model EventMaster_TipeAcara { + id Int @id @default(autoincrement()) + name String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + Event Event[] +} + +model EventMaster_Status { + id String @id @default(cuid()) + name String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + Event Event[] +} + +model Event_Peserta { + id String @id @default(cuid()) + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + Event Event? @relation(fields: [eventId], references: [id]) + eventId String? + User User? @relation(fields: [userId], references: [id]) + userId String? +} diff --git a/src/app/api/seeder/route.ts b/src/app/api/seeder/route.ts index 9a213b3f..2fa636a9 100644 --- a/src/app/api/seeder/route.ts +++ b/src/app/api/seeder/route.ts @@ -13,8 +13,10 @@ import userSeeder from "../../../bin/seeder/user_seeder.json"; import donasi_status from "../../../bin/seeder/donasi/master_status.json"; import donasi_kategori from "../../../bin/seeder/donasi/master_kategori.json"; import donasi_durasi from "../../../bin/seeder/donasi/master_durasi.json"; -import donasi_namaBank from "../../../bin/seeder/donasi/master_bank.json" -import donasi_status_invoice from "../../../bin/seeder/donasi/master_status_invoice.json" +import donasi_namaBank from "../../../bin/seeder/donasi/master_bank.json"; +import donasi_status_invoice from "../../../bin/seeder/donasi/master_status_invoice.json"; +import event_status from "../../../bin/seeder/event/master_status.json"; +import event_tipe_acara from "../../../bin/seeder/event/master_tipe_acara.json"; export async function GET(req: Request) { const dev = new URL(req.url).searchParams.get("dev"); @@ -264,6 +266,36 @@ export async function GET(req: Request) { }); } + for (let e of event_status) { + await prisma.eventMaster_Status.upsert({ + where: { + id: e.id, + }, + create: { + id: e.id, + name: e.name, + }, + update: { + name: e.name, + }, + }); + } + + for (let e of event_tipe_acara) { + await prisma.eventMaster_TipeAcara.upsert({ + where: { + id: e.id, + }, + create: { + id: e.id, + name: e.name, + }, + update: { + name: e.name, + }, + }); + } + return NextResponse.json({ success: true }); } diff --git a/src/app/dev/admin/event/main/page.tsx b/src/app/dev/admin/event/main/page.tsx new file mode 100644 index 00000000..92ce6bd0 --- /dev/null +++ b/src/app/dev/admin/event/main/page.tsx @@ -0,0 +1,20 @@ +import { AdminEvent_Main } from "@/app_modules/admin/event"; +import AdminEvent_funCountByStatusId from "@/app_modules/admin/event/fun/count/fun_count_event_by_status_id"; + +export default async function Page() { + const countPublish = await AdminEvent_funCountByStatusId("1"); + const countReview = await AdminEvent_funCountByStatusId("2"); + const countDraft = await AdminEvent_funCountByStatusId("3"); + const countReject = await AdminEvent_funCountByStatusId("4"); + + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/event/table/publish/page.tsx b/src/app/dev/admin/event/table/publish/page.tsx new file mode 100644 index 00000000..6b7d421f --- /dev/null +++ b/src/app/dev/admin/event/table/publish/page.tsx @@ -0,0 +1,12 @@ +import { AdminEvent_TablePublish } from "@/app_modules/admin/event"; +import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id"; + +export default async function Page() { + const listPublish = await AdminEvent_getListTableByStatusId("1"); + + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/event/table/reject/page.tsx b/src/app/dev/admin/event/table/reject/page.tsx new file mode 100644 index 00000000..74e069b4 --- /dev/null +++ b/src/app/dev/admin/event/table/reject/page.tsx @@ -0,0 +1,10 @@ +import { AdminEvent_TableReject } from "@/app_modules/admin/event"; +import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id"; + +export default async function Page() { + const listReject = await AdminEvent_getListTableByStatusId("4") + + return <> + + +} \ No newline at end of file diff --git a/src/app/dev/admin/event/table/review/page.tsx b/src/app/dev/admin/event/table/review/page.tsx new file mode 100644 index 00000000..d21a34a1 --- /dev/null +++ b/src/app/dev/admin/event/table/review/page.tsx @@ -0,0 +1,10 @@ +import { AdminEvent_TableReview } from "@/app_modules/admin/event"; +import { AdminEvent_getListTableByStatusId } from "@/app_modules/admin/event/fun/get/get_list_table_by_status_id"; + +export default async function Page() { + const listReview = await AdminEvent_getListTableByStatusId("2") + + return <> + + +} \ No newline at end of file diff --git a/src/app/dev/event/create/page.tsx b/src/app/dev/event/create/page.tsx index 2a83cb92..3bc87a0d 100644 --- a/src/app/dev/event/create/page.tsx +++ b/src/app/dev/event/create/page.tsx @@ -1,9 +1,11 @@ import { Event_Create } from "@/app_modules/event"; -import { Event_getListUser } from "@/app_modules/event/fun/get/get_list_user"; +import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; import _ from "lodash"; export default async function Page() { - const listUser = await Event_getListUser(); + const userId = await User_getUserId() + const listTipeAcara = await Event_getMasterTipeAcara(); - return ; + return ; } diff --git a/src/app/dev/event/detail/draft/layout.tsx b/src/app/dev/event/detail/draft/[id]/layout.tsx similarity index 52% rename from src/app/dev/event/detail/draft/layout.tsx rename to src/app/dev/event/detail/draft/[id]/layout.tsx index cb57dbe3..529e8e2e 100644 --- a/src/app/dev/event/detail/draft/layout.tsx +++ b/src/app/dev/event/detail/draft/[id]/layout.tsx @@ -1,11 +1,16 @@ - import { LayoutEvent_DetailDraft } from "@/app_modules/event"; import React from "react"; export default async function Page({ children, + params, }: { children: React.ReactNode; + params: { id: string }; }) { - return {children}; + let eventId = params.id + + return <> + {children}; + } diff --git a/src/app/dev/event/detail/draft/[id]/page.tsx b/src/app/dev/event/detail/draft/[id]/page.tsx new file mode 100644 index 00000000..ff593528 --- /dev/null +++ b/src/app/dev/event/detail/draft/[id]/page.tsx @@ -0,0 +1,8 @@ +import { Event_DetailDraft } from "@/app_modules/event"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; + +export default async function Page({params}: {params: {id: string}}) { + let eventId = params.id + const dataEvent = await Event_getOneById(eventId) + return ; +} diff --git a/src/app/dev/event/detail/draft/page.tsx b/src/app/dev/event/detail/draft/page.tsx deleted file mode 100644 index d30c95cf..00000000 --- a/src/app/dev/event/detail/draft/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Event_DetailDraft } from "@/app_modules/event"; - -export default async function Page() { - return ; -} diff --git a/src/app/dev/event/detail/kontribusi/layout.tsx b/src/app/dev/event/detail/kontribusi/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/detail/kontribusi/layout.tsx rename to src/app/dev/event/detail/kontribusi/[id]/layout.tsx diff --git a/src/app/dev/event/detail/kontribusi/[id]/page.tsx b/src/app/dev/event/detail/kontribusi/[id]/page.tsx new file mode 100644 index 00000000..d2548e5e --- /dev/null +++ b/src/app/dev/event/detail/kontribusi/[id]/page.tsx @@ -0,0 +1,20 @@ +import { Event_DetailKontribusi } from "@/app_modules/event"; +import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id"; +import { Event_getListPesertaById } from "@/app_modules/event/fun/get/get_list_peserta_by_id"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let eventId = params.id; + const dataEvent = await Event_getOneById(eventId); + const listKontributor = await Event_getListPesertaById(eventId); + const totalPeserta = await Event_countTotalPesertaById(eventId) + return ( + <> + + + ); +} diff --git a/src/app/dev/event/detail/kontribusi/page.tsx b/src/app/dev/event/detail/kontribusi/page.tsx deleted file mode 100644 index 80fd281b..00000000 --- a/src/app/dev/event/detail/kontribusi/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Event_DetailKontribusi } from "@/app_modules/event"; - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/event/detail/main/layout.tsx b/src/app/dev/event/detail/main/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/detail/main/layout.tsx rename to src/app/dev/event/detail/main/[id]/layout.tsx diff --git a/src/app/dev/event/detail/main/[id]/page.tsx b/src/app/dev/event/detail/main/[id]/page.tsx new file mode 100644 index 00000000..be2c8a94 --- /dev/null +++ b/src/app/dev/event/detail/main/[id]/page.tsx @@ -0,0 +1,27 @@ +import { Event_DetailMain } from "@/app_modules/event"; +import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id"; +import { Event_CekUserJoinById } from "@/app_modules/event/fun/get/cek_user_join_by_id"; +import { Event_getListPesertaById } from "@/app_modules/event/fun/get/get_list_peserta_by_id"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; + +export default async function Page({ params }: { params: { id: string } }) { + let eventId = params.id; + const dataEvent = await Event_getOneById(eventId); + const listPeserta = await Event_getListPesertaById(eventId); + const userLoginId = await User_getUserId(); + const isJoin = await Event_CekUserJoinById(eventId, userLoginId); + const totalPeserta = await Event_countTotalPesertaById(eventId) + + return ( + <> + + + ); +} diff --git a/src/app/dev/event/detail/main/page.tsx b/src/app/dev/event/detail/main/page.tsx deleted file mode 100644 index 805bf77b..00000000 --- a/src/app/dev/event/detail/main/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Event_DetailMain } from "@/app_modules/event"; - -export default async function Page() { - return <> - - -} \ No newline at end of file diff --git a/src/app/dev/event/detail/publish/layout.tsx b/src/app/dev/event/detail/publish/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/detail/publish/layout.tsx rename to src/app/dev/event/detail/publish/[id]/layout.tsx diff --git a/src/app/dev/event/detail/publish/[id]/page.tsx b/src/app/dev/event/detail/publish/[id]/page.tsx new file mode 100644 index 00000000..2e3de6da --- /dev/null +++ b/src/app/dev/event/detail/publish/[id]/page.tsx @@ -0,0 +1,9 @@ +import { Event_DetailPublish } from "@/app_modules/event"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let eventId = params.id; + const dataEvent = await Event_getOneById(eventId); + + return ; +} diff --git a/src/app/dev/event/detail/publish/page.tsx b/src/app/dev/event/detail/publish/page.tsx deleted file mode 100644 index e17f8fe4..00000000 --- a/src/app/dev/event/detail/publish/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Event_DetailPublish } from "@/app_modules/event"; - -export default async function Page() { - return ; -} diff --git a/src/app/dev/event/detail/reject/layout.tsx b/src/app/dev/event/detail/reject/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/detail/reject/layout.tsx rename to src/app/dev/event/detail/reject/[id]/layout.tsx diff --git a/src/app/dev/event/detail/reject/[id]/page.tsx b/src/app/dev/event/detail/reject/[id]/page.tsx new file mode 100644 index 00000000..5c2feb8b --- /dev/null +++ b/src/app/dev/event/detail/reject/[id]/page.tsx @@ -0,0 +1,9 @@ +import { Event_DetailReject } from "@/app_modules/event"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; + +export default async function Page({params}: {params: {id: string}}) { + let eventId = params.id + const dataEvent = await Event_getOneById(eventId) + + return ; +} diff --git a/src/app/dev/event/detail/reject/page.tsx b/src/app/dev/event/detail/reject/page.tsx deleted file mode 100644 index 6dbf68b6..00000000 --- a/src/app/dev/event/detail/reject/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Event_DetailReject } from "@/app_modules/event"; - -export default async function Page() { - return ; -} diff --git a/src/app/dev/event/detail/review/layout.tsx b/src/app/dev/event/detail/review/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/detail/review/layout.tsx rename to src/app/dev/event/detail/review/[id]/layout.tsx diff --git a/src/app/dev/event/detail/review/[id]/page.tsx b/src/app/dev/event/detail/review/[id]/page.tsx new file mode 100644 index 00000000..ddada325 --- /dev/null +++ b/src/app/dev/event/detail/review/[id]/page.tsx @@ -0,0 +1,10 @@ +import { Event_DetailReview } from "@/app_modules/event"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; + + +export default async function Page({params}: {params: {id: string}}) { + let eventId = params.id + const dataEvent = await Event_getOneById(eventId) + + return ; +} diff --git a/src/app/dev/event/detail/review/page.tsx b/src/app/dev/event/detail/review/page.tsx deleted file mode 100644 index 310b3529..00000000 --- a/src/app/dev/event/detail/review/page.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { Event_DetailReview } from "@/app_modules/event"; - - -export default async function Page() { - return ; -} diff --git a/src/app/dev/event/edit/layout.tsx b/src/app/dev/event/edit/[id]/layout.tsx similarity index 100% rename from src/app/dev/event/edit/layout.tsx rename to src/app/dev/event/edit/[id]/layout.tsx diff --git a/src/app/dev/event/edit/[id]/page.tsx b/src/app/dev/event/edit/[id]/page.tsx new file mode 100644 index 00000000..cf42526f --- /dev/null +++ b/src/app/dev/event/edit/[id]/page.tsx @@ -0,0 +1,27 @@ +import { Event_Edit } from "@/app_modules/event"; +import { Event_getOneById } from "@/app_modules/event/fun/get/get_one_by_id"; +import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara"; +import { MODEL_EVENT } from "@/app_modules/event/model/interface"; +import _ from "lodash"; + +export default async function Page({ params }: { params: { id: string } }) { + let eventId = params.id; + const data = await Event_getOneById(eventId); + const dataEvent = _.omit(data, [ + "Author", + "EventMaster_Status", + "Event_Peserta", + "createdAt", + "updatedAt", + "active", + ]); + // console.log(dataEvent) + + const listTipeAcara = await Event_getMasterTipeAcara() + + return ( + <> + + + ); +} diff --git a/src/app/dev/event/edit/page.tsx b/src/app/dev/event/edit/page.tsx deleted file mode 100644 index 84b19245..00000000 --- a/src/app/dev/event/edit/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Event_Edit } from "@/app_modules/event"; - -export default async function Page() { - return<> - - -} \ No newline at end of file diff --git a/src/app/dev/event/main/beranda/page.tsx b/src/app/dev/event/main/beranda/page.tsx index bab8df15..eb5dbac0 100644 --- a/src/app/dev/event/main/beranda/page.tsx +++ b/src/app/dev/event/main/beranda/page.tsx @@ -1,11 +1,12 @@ -"use client"; - import { Event_Beranda } from "@/app_modules/event"; +import { Event_getListAllPublish } from "@/app_modules/event/fun/get/get_list_all_publish"; + +export default async function Page() { + const dataEvent = await Event_getListAllPublish() -export default function Page() { return ( <> - + ); } diff --git a/src/app/dev/event/main/history/page.tsx b/src/app/dev/event/main/history/page.tsx new file mode 100644 index 00000000..ab089bc9 --- /dev/null +++ b/src/app/dev/event/main/history/page.tsx @@ -0,0 +1,7 @@ +import { Event_History } from "@/app_modules/event"; + +export default async function Page({ params }: { params: { id: string } }) { + let eventId = params.id; + console.log(eventId); + return ; +} diff --git a/src/app/dev/event/main/kontribusi/page.tsx b/src/app/dev/event/main/kontribusi/page.tsx index 25008331..5b162130 100644 --- a/src/app/dev/event/main/kontribusi/page.tsx +++ b/src/app/dev/event/main/kontribusi/page.tsx @@ -1,8 +1,14 @@ import { Event_Kontribusi } from "@/app_modules/event"; - +import { Event_getListKontibusiByUserId } from "@/app_modules/event/fun/get/get_list_kontribusi_by_user_id"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; export default async function Page() { - return<> - + const userLoginId = await User_getUserId(); + const listKontribusi = await Event_getListKontibusiByUserId(userLoginId) + + return ( + <> + -} \ No newline at end of file + ); +} diff --git a/src/app/dev/event/main/status_page/page.tsx b/src/app/dev/event/main/status_page/page.tsx index f840cfec..bf584a53 100644 --- a/src/app/dev/event/main/status_page/page.tsx +++ b/src/app/dev/event/main/status_page/page.tsx @@ -1,5 +1,20 @@ import { Event_StatusPage } from "@/app_modules/event"; +import { Event_getByStatusId } from "@/app_modules/event/fun/get/get_event_by_status_id"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; export default async function Page() { - return -} \ No newline at end of file + const authorId = await User_getUserId(); + const listPublish = await Event_getByStatusId("1", authorId); + const listReview = await Event_getByStatusId("2", authorId); + const listDraft = await Event_getByStatusId("3", authorId); + const listReject = await Event_getByStatusId("4", authorId); + + return ( + + ); +} diff --git a/src/app/lib/router_admin/router_admin_event.ts b/src/app/lib/router_admin/router_admin_event.ts new file mode 100644 index 00000000..16377d5d --- /dev/null +++ b/src/app/lib/router_admin/router_admin_event.ts @@ -0,0 +1,8 @@ +export const RouterAdminEvent = { + main_event: "/dev/admin/event/main", + + // table + table_review: "/dev/admin/event/table/review", + table_publish: "/dev/admin/event/table/publish", + table_reject: "/dev/admin/event/table/reject", +}; diff --git a/src/app/lib/router_hipmi/router_admin.ts b/src/app/lib/router_hipmi/router_admin.ts index 273bf3e0..80747dd1 100644 --- a/src/app/lib/router_hipmi/router_admin.ts +++ b/src/app/lib/router_hipmi/router_admin.ts @@ -15,17 +15,14 @@ export const RouterAdminInvestasi = { }; export const RouterAdminDonasi = { - api_gambar_bukti_transfer: "/api/donasi/gambar_bukti_transfer/", - main_donasi: "/dev/admin/donasi/main", // table table_publish: "/dev/admin/donasi/table/publish", table_review: "/dev/admin/donasi/table/review", table_reject: "/dev/admin/donasi/table/reject", - // detail detail_publish: "/dev/admin/donasi/detail/publish/", detail_review: "/dev/admin/donasi/detail/review/", @@ -33,14 +30,11 @@ export const RouterAdminDonasi = { // proses proses_transaksi: "/dev/admin/donasi/proses_transaksi/", - pencairan_dana :"/dev/admin/donasi/pencairan_dana/", - - - - - + pencairan_dana: "/dev/admin/donasi/pencairan_dana/", }; + + export const RouterAdminAward = { main_award: "/dev/admin/award/main", }; diff --git a/src/app/lib/router_hipmi/router_event.ts b/src/app/lib/router_hipmi/router_event.ts index 6f1310e3..65a97910 100644 --- a/src/app/lib/router_hipmi/router_event.ts +++ b/src/app/lib/router_hipmi/router_event.ts @@ -2,10 +2,11 @@ export const RouterEvent = { //main splash: "/dev/event/splash", beranda: "/dev/event/main/beranda", + status_page: "/dev/event/main/status_page", kontribusi: "/dev/event/main/kontribusi", + history: "/dev/event/main/history", // status - status_page: "/dev/event/main/status_page", status_publish: "/dev/event/main/status_page/publish", status_review: "/dev/event/main/status_page/review", status_draft: "/dev/event/main/status_page/draft", @@ -15,13 +16,13 @@ export const RouterEvent = { create: "/dev/event/create", // edit - edit: "/dev/event/edit", + edit: "/dev/event/edit/", // detail - detail_main: "/dev/event/detail/main", - detail_kontribusi: "/dev/event/detail/kontribusi", - detail_publish: "/dev/event/detail/publish", - detail_review: "/dev/event/detail/review", - detail_draft: "/dev/event/detail/draft", - detail_reject: "/dev/event/detail/reject", + detail_main: "/dev/event/detail/main/", + detail_kontribusi: "/dev/event/detail/kontribusi/", + detail_publish: "/dev/event/detail/publish/", + detail_review: "/dev/event/detail/review/", + detail_draft: "/dev/event/detail/draft/", + detail_reject: "/dev/event/detail/reject/", }; diff --git a/src/app_modules/admin/component/header_tamplate.tsx b/src/app_modules/admin/component/header_tamplate.tsx new file mode 100644 index 00000000..a49f3f64 --- /dev/null +++ b/src/app_modules/admin/component/header_tamplate.tsx @@ -0,0 +1,14 @@ +"use client"; + +import { Box, Title, Divider } from "@mantine/core"; + +export default function ComponentAdminGlobal_HeaderTamplate({name}: {name: string}) { + return ( + <> + + {name ? name : null} + + + + ); +} diff --git a/src/app_modules/admin/donasi/global_state/index.ts b/src/app_modules/admin/donasi/global_state/index.ts index 82788e0b..c6efc5c6 100644 --- a/src/app_modules/admin/donasi/global_state/index.ts +++ b/src/app_modules/admin/donasi/global_state/index.ts @@ -1,3 +1,8 @@ import { atomWithStorage } from "jotai/utils"; +/** + * @param index | 0 - 3 | 0: Main dahsboard, 1: Investasi, 2: Donasi, 3: Event + * @type number + * @ + */ export const gs_adminDonasi_hotMenu = atomWithStorage("gs_adminDonasi_hotMenu", 0) \ No newline at end of file diff --git a/src/app_modules/admin/event/fun/count/fun_count_event_by_status_id.ts b/src/app_modules/admin/event/fun/count/fun_count_event_by_status_id.ts new file mode 100644 index 00000000..0c263ea3 --- /dev/null +++ b/src/app_modules/admin/event/fun/count/fun_count_event_by_status_id.ts @@ -0,0 +1,50 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; + +/** + * + * @param statusId | string > 1 - 4 + * @returns jumlah dari donasi per status + */ +export default async function AdminEvent_funCountByStatusId(statusId: string) { + if (statusId === "1") { + const count = await prisma.event.count({ + where: { + eventMaster_StatusId: "1", + }, + }); + return count; + } + if (statusId === "2") { + const count = await prisma.event.count({ + where: { + eventMaster_StatusId: "2", + }, + }); + return count; + } + if (statusId === "3") { + const count = await prisma.event.count({ + where: { + eventMaster_StatusId: "3", + }, + }); + return count; + } + if (statusId === "4") { + const count = await prisma.event.count({ + where: { + eventMaster_StatusId: "4", + }, + }); + return count; + } + if (statusId === undefined || statusId === null) { + + return { + status: 400, + message: "Parameter tidak sesuai" + } + } +} diff --git a/src/app_modules/admin/event/fun/edit/fun_edit_status_publish_by_id.ts b/src/app_modules/admin/event/fun/edit/fun_edit_status_publish_by_id.ts new file mode 100644 index 00000000..05e8baab --- /dev/null +++ b/src/app_modules/admin/event/fun/edit/fun_edit_status_publish_by_id.ts @@ -0,0 +1,26 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function AdminEvent_funEditStatusPublishById( + eventId: string, + statusId: string +) { + console.log(eventId); + const updt = await prisma.event.update({ + where: { + id: eventId, + }, + data: { + eventMaster_StatusId: statusId, + }, + }); + + if (!updt) return { status: 400, message: "Update Gagal" }; + revalidatePath("/dev/admin/event/main"); + return { + status: 200, + message: "Berhasil Update Status", + }; +} diff --git a/src/app_modules/admin/event/fun/edit/fun_edit_status_reject_by_id.ts b/src/app_modules/admin/event/fun/edit/fun_edit_status_reject_by_id.ts new file mode 100644 index 00000000..ba8603c8 --- /dev/null +++ b/src/app_modules/admin/event/fun/edit/fun_edit_status_reject_by_id.ts @@ -0,0 +1,27 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; +import { MODEL_EVENT } from "@/app_modules/event/model/interface"; +import { revalidatePath } from "next/cache"; + +export async function AdminEvent_funEditCatatanById( + data: MODEL_EVENT, + statudId: string +) { + const updt = await prisma.event.update({ + where: { + id: data.id, + }, + data: { + eventMaster_StatusId: statudId, + catatan: data.catatan + }, + }); + + if (!updt) return { status: 400, message: "Update Gagal" }; + revalidatePath("/dev/admin/event/main"); + return { + status: 200, + message: "Berhasil Update Status", + }; +} diff --git a/src/app_modules/admin/event/fun/get/get_list_table_by_status_id.ts b/src/app_modules/admin/event/fun/get/get_list_table_by_status_id.ts new file mode 100644 index 00000000..3dc49909 --- /dev/null +++ b/src/app_modules/admin/event/fun/get/get_list_table_by_status_id.ts @@ -0,0 +1,142 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; + +export async function AdminEvent_getListTableByStatusId(statudId: string) { + if (statudId === "1") { + const getPublish = await prisma.event.findMany({ + orderBy: { + updatedAt: "desc", + }, + where: { + eventMaster_StatusId: "1", + }, + select: { + id: true, + title: true, + lokasi: true, + tanggal: true, + deskripsi: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: { + select: { + id: true, + name: true, + }, + }, + EventMaster_TipeAcara: { + select: { + id: true, + name: true, + }, + }, + Event_Peserta: true, + }, + }); + return getPublish; + } + if (statudId === "2") { + const getReview = await prisma.event.findMany({ + orderBy: { + createdAt: "desc", + }, + where: { + eventMaster_StatusId: "2", + }, + select: { + id: true, + title: true, + lokasi: true, + tanggal: true, + deskripsi: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: { + select: { + id: true, + name: true, + }, + }, + EventMaster_TipeAcara: { + select: { + id: true, + name: true, + }, + }, + }, + }); + return getReview; + } + if (statudId === "3") { + const getDraft = await prisma.event.findMany({ + orderBy: { + updatedAt: "desc", + }, + where: { + eventMaster_StatusId: "3", + }, + }); + return getDraft; + } + if (statudId === "4") { + const getReject = await prisma.event.findMany({ + orderBy: { + updatedAt: "desc", + }, + where: { + eventMaster_StatusId: "4", + }, + select: { + id: true, + title: true, + lokasi: true, + tanggal: true, + deskripsi: true, + Author: { + select: { + id: true, + username: true, + Profile: { + select: { + name: true, + }, + }, + }, + }, + EventMaster_Status: { + select: { + id: true, + name: true, + }, + }, + EventMaster_TipeAcara: { + select: { + id: true, + name: true, + }, + }, + catatan: true, + }, + }); + return getReject; + } +} diff --git a/src/app_modules/admin/event/index.tsx b/src/app_modules/admin/event/index.tsx new file mode 100644 index 00000000..e2c63ed4 --- /dev/null +++ b/src/app_modules/admin/event/index.tsx @@ -0,0 +1,11 @@ +import AdminEvent_Main from "./main"; +import AdminEvent_TableReview from "./table_status/table_review"; +import AdminEvent_TablePublish from "./table_status/table_publish"; +import AdminEvent_TableReject from "./table_status/table_reject"; + +export { + AdminEvent_Main, + AdminEvent_TableReview, + AdminEvent_TablePublish, + AdminEvent_TableReject, +}; diff --git a/src/app_modules/admin/event/main/index.tsx b/src/app_modules/admin/event/main/index.tsx new file mode 100644 index 00000000..77153b82 --- /dev/null +++ b/src/app_modules/admin/event/main/index.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; + +import { + Stack, + Title, + Divider, + SimpleGrid, + Paper, + Center, + Text, + Box, + Group, + ActionIcon, +} from "@mantine/core"; +import { IconChevronsRight } from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; +import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate"; + + +export default function AdminEvent_Main({ + countPublish, + countReview, + countDraft, + countReject, +}: { + countPublish: number; + countReview: number; + countDraft: number; + countReject: number; +}) { + const router = useRouter(); + const listBox = [ + { + id: 1, + name: "Publish", + jumlah: countPublish, + path: RouterAdminEvent.table_publish, + color: "green", + }, + { + id: 2, + name: "Review", + jumlah: countReview, + path: RouterAdminEvent.table_review, + color: "orange", + }, + { + id: 3, + name: "Draft", + jumlah: countDraft, + path: "", + color: "yellow", + }, + { + id: 4, + name: "Reject", + jumlah: countReject, + path: RouterAdminEvent.table_reject, + color: "red", + }, + ]; + return ( + <> + + + + {listBox.map((e, i) => ( + + + + + {e.name} + {e.jumlah} + + {e.path !== "" ? ( + router.push(e.path)}> + {" "} + + + ) : ( + + )} + + + ))} + + + + ); +} diff --git a/src/app_modules/admin/event/table_status/table_publish.tsx b/src/app_modules/admin/event/table_status/table_publish.tsx new file mode 100644 index 00000000..453da08e --- /dev/null +++ b/src/app_modules/admin/event/table_status/table_publish.tsx @@ -0,0 +1,142 @@ +"use client"; + +import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin"; +import { + ActionIcon, + Box, + Button, + Center, + Group, + Modal, + Spoiler, + Stack, + Table, + Text, + Title, +} from "@mantine/core"; +import { + IconBan, + IconChevronLeft, + IconEyeCheck, + IconEyeShare, + IconShare, +} from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; + +import { useDisclosure } from "@mantine/hooks"; + +import { useState } from "react"; +import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; +import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali"; +import { MODEL_EVENT } from "@/app_modules/event/model/interface"; +import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate"; +import moment from "moment"; +import _ from "lodash"; +import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { AdminEvent_getListTableByStatusId } from "../fun/get/get_list_table_by_status_id"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; + +export default function AdminEvent_TablePublish({ + listPublish, +}: { + listPublish: MODEL_EVENT[]; +}) { + return ( + <> + + + + + + + ); +} + +function TableStatus({ listPublish }: { listPublish: MODEL_EVENT[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listPublish); + + async function onClick() { + // router.push(RouterAdminDonasi.detail_publish); + } + + const TableRows = data.map((e, i) => ( + + {e.title} + {e.lokasi} + {e.EventMaster_TipeAcara.name} + + {moment(e.tanggal).format("dddd")}, {moment(e.tanggal).format("ll")} + + {moment(e.tanggal).format("LT")} + + + {e.deskripsi} + + + + + + + + )); + + return ( + <> + + + + PUBLISH + + + + + + + + + + + + + + + + {TableRows} +
JudulLokasiTipe AcaraTanggalJam +
Deskripsi
+
+
Aksi
+
+
+ {_.isEmpty(TableRows) ? ( +
+ Tidak Ada Data +
+ ) : ( + "" + )} +
+
+ + ); +} + + diff --git a/src/app_modules/admin/event/table_status/table_reject.tsx b/src/app_modules/admin/event/table_status/table_reject.tsx new file mode 100644 index 00000000..7adb15d7 --- /dev/null +++ b/src/app_modules/admin/event/table_status/table_reject.tsx @@ -0,0 +1,234 @@ +"use client"; + +import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin"; +import { + ActionIcon, + Box, + Button, + Center, + Flex, + Group, + Modal, + ScrollArea, + Spoiler, + Stack, + Table, + Text, + Textarea, + Title, +} from "@mantine/core"; +import { + IconBan, + IconChevronLeft, + IconEyeCheck, + IconEyeShare, + IconPencilPlus, + IconShare, +} from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; + +import { useDisclosure } from "@mantine/hooks"; + +import { useState } from "react"; +import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; +import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali"; +import { MODEL_EVENT } from "@/app_modules/event/model/interface"; +import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate"; +import moment from "moment"; +import _ from "lodash"; +import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { AdminEvent_getListTableByStatusId } from "../fun/get/get_list_table_by_status_id"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; +import { AdminEvent_funEditCatatanById } from "../fun/edit/fun_edit_status_reject_by_id"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; + +export default function AdminEvent_TableReject({ + listReject, +}: { + listReject: MODEL_EVENT[]; +}) { + return ( + <> + + + + + + + ); +} + +function TableStatus({ listReject }: { listReject: MODEL_EVENT[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listReject); + const [eventId, setEventId] = useState(""); + const [catatan, setCatatan] = useState(""); + + const TableRows = data.map((e, i) => ( + + + {e.Author.Profile.name} + + + {e.title} + + + {e.lokasi} + + + {e.EventMaster_TipeAcara.name} + + + + {moment(e.tanggal).format("dddd")}, {moment(e.tanggal).format("ll")} + + + + {moment(e.tanggal).format("LT")} + + + + + {e.deskripsi} + + + + + {" "} + + + {e.catatan} + + + + + + + + + )); + + return ( + <> + + +