From e964dca60a6cabc67487daf91dd574e691d65101 Mon Sep 17 00:00:00 2001 From: nico Date: Fri, 28 Feb 2025 17:25:58 +0800 Subject: [PATCH] Integrasi API pencairan dana --- .../admin/donasi/pencairan_dana/[id]/page.tsx | 29 +- .../admin/_admin_global/tampilan_rupiah.tsx | 3 +- .../admin/donasi/component/tombol_kembali.tsx | 4 +- .../detail/publish/detail_list_pencairan.tsx | 2 +- .../donasi/detail/publish/detail_publish.tsx | 3 +- .../detail/publish/detail_publish_backup.tsx | 889 ------------------ .../detail/publish/detail_publish_backup2.txt | 871 ----------------- .../donasi/detail/publish/pencairan_dana.tsx | 114 ++- .../detail/publish/pencairan_dana_backup.txt | 387 ++++++++ 9 files changed, 494 insertions(+), 1808 deletions(-) delete mode 100644 src/app_modules/admin/donasi/detail/publish/detail_publish_backup.tsx delete mode 100644 src/app_modules/admin/donasi/detail/publish/detail_publish_backup2.txt create mode 100644 src/app_modules/admin/donasi/detail/publish/pencairan_dana_backup.txt diff --git a/src/app/dev/admin/donasi/pencairan_dana/[id]/page.tsx b/src/app/dev/admin/donasi/pencairan_dana/[id]/page.tsx index 10c8d4b7..d6229c17 100644 --- a/src/app/dev/admin/donasi/pencairan_dana/[id]/page.tsx +++ b/src/app/dev/admin/donasi/pencairan_dana/[id]/page.tsx @@ -1,18 +1,29 @@ import { AdminDonasi_PencairanDana } from "@/app_modules/admin/donasi"; import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id"; -export default async function Page({ params }: { params: { id: string } }) { - let donasiId = params.id; - const dataDonasi = await AdminDonasi_getOneById(donasiId); - const danaTerkumpul = dataDonasi?.terkumpul; - const totalPencairan = dataDonasi?.totalPencairan - +export default async function Page() { return ( ); } + +// import { AdminDonasi_PencairanDana } from "@/app_modules/admin/donasi"; +// import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id"; + +// export default async function Page({ params }: { params: { id: string } }) { +// let donasiId = params.id; +// const dataDonasi = await AdminDonasi_getOneById(donasiId); +// const danaTerkumpul = dataDonasi?.terkumpul; +// const totalPencairan = dataDonasi?.totalPencairan + + +// return ( +// +// ); +// } diff --git a/src/app_modules/admin/_admin_global/tampilan_rupiah.tsx b/src/app_modules/admin/_admin_global/tampilan_rupiah.tsx index 2a9145fd..31fbd524 100644 --- a/src/app_modules/admin/_admin_global/tampilan_rupiah.tsx +++ b/src/app_modules/admin/_admin_global/tampilan_rupiah.tsx @@ -1,3 +1,4 @@ +import { AdminColor } from "@/app_modules/_global/color/color_pallet"; import { Text } from "@mantine/core"; export default function ComponentAdminGlobal_TampilanRupiahDonasi({ @@ -9,7 +10,7 @@ export default function ComponentAdminGlobal_TampilanRupiahDonasi({ }) { return ( <> - + Rp.{" "} {new Intl.NumberFormat("id-ID", { maximumFractionDigits: 10 }).format( nominal diff --git a/src/app_modules/admin/donasi/component/tombol_kembali.tsx b/src/app_modules/admin/donasi/component/tombol_kembali.tsx index 2630f979..8d507b7e 100644 --- a/src/app_modules/admin/donasi/component/tombol_kembali.tsx +++ b/src/app_modules/admin/donasi/component/tombol_kembali.tsx @@ -1,5 +1,6 @@ "use client"; +import { AdminColor } from "@/app_modules/_global/color/color_pallet"; import { Group, Button } from "@mantine/core"; import { IconChevronLeft } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; @@ -10,7 +11,8 @@ export default function ComponentAdminDonasi_TombolKembali() { <> - - - - - - - - - - ); -} - -function PencairanDana() { - return ( - <> - - - - - ); -} - -//######################## LIST DONATUR #####################// -function TampilanListDonatur({ - donatur, - listMasterStatus, - dataDonasi, - onSuccessDonasi, -}: { - donatur: any; - listMasterStatus: MODEL_NEW_DEFAULT_MASTER[]; - dataDonasi: MODEL_DONASI; - onSuccessDonasi: (val: any) => void; -}) { - const router = useRouter(); - const [isLoadingCek, setLoadingCek] = useState(false); - const [idData, setIdData] = useState(""); - const [lisDonatur, setListDonatur] = useState( - donatur.data - ); - const [isNPage, setNPage] = useState(donatur.nPage); - const [isActivePage, setActivePage] = useState(1); - const [isSelect, setSelect] = useState(""); - - async function onRelaod() { - const loadData = await adminDonasi_getListDonatur({ - donasiId: dataDonasi?.id, - page: 1, - }); - setSelect(""); - setListDonatur(loadData.data as any); - setNPage(loadData.nPage); - } - - async function onSelect(s: any) { - setSelect(s); - const loadData = await adminDonasi_getListDonatur({ - donasiId: dataDonasi?.id, - page: 1, - selectStatusId: s, - }); - setListDonatur(loadData.data as any); - setNPage(loadData.nPage); - setActivePage(1); - } - - async function onPageClick(p: any) { - setActivePage(p); - const loadData = await adminDonasi_getListDonatur({ - donasiId: dataDonasi?.id, - page: p, - selectStatusId: isSelect, - }); - setListDonatur(loadData.data as any); - setNPage(loadData.nPage); - } - - const tableRows = lisDonatur.map((e, i) => ( - - -
{e?.Author.username}
- - -
{e?.DonasiMaster_Bank?.name}
- - -
- -
- - -
- {new Intl.DateTimeFormat("id-ID", { dateStyle: "full" }).format( - e?.createdAt - )} -
- - -
- - {e?.DonasiMaster_StatusInvoice?.name} - -
- - -
- {e?.donasiMaster_StatusInvoiceId === "1" || - e?.donasiMaster_StatusInvoiceId === "2" ? ( - - ) : ( - "-" - )} -
- - -
- {e?.donasiMaster_StatusInvoiceId === "1" ? ( - - ) : e?.DonasiMaster_StatusInvoice?.id === "2" ? ( - { - onSuccessDonasi(val); - }} - onSuccessDonatur={(val) => { - setListDonatur(val.data); - setNPage(val.nPage); - }} - /> - ) : ( - - - )} -
- - - )); - - return ( - <> - - {/*
{JSON.stringify(dataDonasi, null, 2)}
*/} - - { - onRelaod(); - }} - > - - - ({ - value: e.id, - label: e.name, - }))} - onChange={(val) => { - onSelect(val); - }} - /> */} -
- } - /> - - - - - - - - - - - - - - {rowTable} -
-
Nominal
-
-
Tanggal
-
-
Judul
-
Deskripsi -
Bukti Transfer
-
-
- - {/*
- { - onPageClick(val); - }} - /> -
*/} -
- - - {/* - Rincian Pencairan Dana - {_.isEmpty(pencairan) ? ( - -
BELUM ADA PENCAIRAN DANA
-
- ) : ( - - - - - - - - - - - - {rowTable} -
NominalTanggalJudul -
Deskripsi
-
-
Bukti Transfer
-
-
- )} -
*/} - - ); -} diff --git a/src/app_modules/admin/donasi/detail/publish/detail_publish_backup2.txt b/src/app_modules/admin/donasi/detail/publish/detail_publish_backup2.txt deleted file mode 100644 index 36ac2f11..00000000 --- a/src/app_modules/admin/donasi/detail/publish/detail_publish_backup2.txt +++ /dev/null @@ -1,871 +0,0 @@ -"use client"; - -import { AccentColor, AdminColor } from "@/app_modules/_global/color/color_pallet"; -import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component"; -import { apiGetMasterStatusTransaksi } from "@/app_modules/_global/lib/api_fetch_master"; -import { globalStatusTransaksi } from "@/app_modules/_global/lib/master_list_app"; -import { Admin_ComponentLoadImageLandscape } from "@/app_modules/admin/_admin_global"; -import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component"; -import CustomSkeletonAdmin from "@/app_modules/admin/_admin_global/_component/skeleton/customSkeletonAdmin"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_gagal"; -import AdminGlobal_ComponentBackButton from "@/app_modules/admin/_admin_global/back_button"; -import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user"; -import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; -import { - MODEL_DONASI, - MODEL_DONASI_PENCAIRAN_DANA -} from "@/app_modules/donasi/model/interface"; -import { MODEL_NEW_DEFAULT_MASTER } from "@/app_modules/model_global/interface"; -import { RouterAdminGlobal } from "@/lib"; -import { RouterAdminDonasi } from "@/lib/router_admin/router_admin_donasi"; -import { RouterAdminDonasi_OLD } from "@/lib/router_hipmi/router_admin"; -import { clientLogger } from "@/util/clientLogger"; -import mqtt_client from "@/util/mqtt_client"; -import { - ActionIcon, - Badge, - Box, - Button, - Center, - Grid, - Group, - Modal, - Pagination, - Paper, - ScrollArea, - Select, - SimpleGrid, - Spoiler, - Stack, - Table, - Text, - TextInput, - Title, -} from "@mantine/core"; -import { useDisclosure, useShallowEffect } from "@mantine/hooks"; -import { IconReload } from "@tabler/icons-react"; -import _, { toNumber } from "lodash"; -import moment from "moment"; -import { useParams, useRouter } from "next/navigation"; -import { useState } from "react"; -import SkeletonAdminDetailDonasiPublish from "../../component/skeleton_detail_donasi_publish"; -import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id"; -import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total"; -import { apiGetAdminAllDaftarDonatur, apiGetAdminDonasiById } from "../../lib/api_fetch_admin_donasi"; - -export default function AdminDonasi_DetailPublish({ - countDonatur, - listPencairan, -}: { - countDonatur: number; - listPencairan: MODEL_DONASI_PENCAIRAN_DANA[]; -}) { - const [pencairan, setPencairan] = useState(listPencairan); - // const [isReload, setReload] = useState(false); - - return ( - <> - {/*
{JSON.stringify(pencairan, null, 2)}
*/} - - <> - - - - - - - - ); -} - -function TampilanDetailDonasi({ - countDonatur, -}: { - countDonatur: number; -}) { - const params = useParams<{ id: string }>(); - const [data, setData] = useState(null); - const [isReload, setReload] = useState(false); - - - useShallowEffect(() => { - - loadInitialData(); - }, [isReload]) - const loadInitialData = async () => { - try { - const response = await apiGetAdminDonasiById({ - id: params.id, - }) - - if (response?.success && response?.data) { - setTimeout(() => { - setData(response.data) - }, 3000); - } else { - console.log("Invalid data format recieved:", response); - setData(null) - } - } catch (error) { - clientLogger.error("Invalid data format recieved:", error); - setData(null); - } - } - const [opened, { open, close }] = useDisclosure(false); - const router = useRouter(); - const [isLoadingPencairanDana, setIsLoadingPencairanDana] = useState(false); - - - return ( - <> - {!data ? () : ( - - - - - - - Gambar Donasi - - - - - - - - Detail Donasi - - - Judul - - : - - - {data?.title} - - - - - - - Penggalang Dana - - : - - - {data?.Author.username} - - - - - - - Durasi - - : - - - {data?.DonasiMaster_Durasi.name} hari - - - - - - - Dana dibutuhkan - - : - - - - - - - - Kategori - - : - - - {data?.DonasiMaster_Ketegori?.name} - - - - - - - Total donatur - - : - - - {countDonatur} - - - - - - - Progres - - : - - - {toNumber(data.progres).toFixed(2)} % - - - - - - - Dana terkumpul - - : - - - - - - - - {/* Pencairan Dana */} - - -
- Pencairan Dana -
- - - - Total Dana Dicairkan - - - - - - Bank Tujuan - - {data?.namaBank} - - - - - - - - Akumulasi Pencairan - - {data?.akumulasiPencairan} Kali - - - - - - Nomor Rekening - - {data?.rekening} - - - - - - - Sisa Dana - - - - -
-
-
-
-
- )} - - - - - ); -} - -function PencairanDana() { - return ( - <> - - - - - ); -} - -//######################## LIST DONATUR #####################// -function TampilanListDonatur() { - const router = useRouter(); - const params = useParams<{ id: string }>(); - const donasiId = params.id; - const [isLoadingCek, setLoadingCek] = useState(false); - const [idData, setIdData] = useState(""); - const [lisDonatur, setListDonatur] = useState(null); - const [listStatus, setListStatus] = useState(null); - const [isNPage, setNPage] = useState(1); - const [isActivePage, setActivePage] = useState(1); - - const [selectStatus, setSelectStatus] = useState(""); - - - useShallowEffect(() => { - handleLoadData(); - }, [isActivePage, selectStatus]); - - useShallowEffect(() => { - handleLoadStatus(); - }, []) - - const handleLoadData = async () => { - try { - const cek = globalStatusTransaksi.find((e) => e.id === selectStatus); - const response = await apiGetAdminAllDaftarDonatur({ - id: donasiId, - page: `${isActivePage}`, - status: cek?.name, - }); - - if (response?.success && response?.data?.data) { - setListDonatur(response.data.data); - setNPage(response.data.nPage || 1); - } else { - console.error("Invalid data format received:", response); - setListDonatur([]); - } - } catch (error) { - clientLogger.error("Error get data daftar donatur", error); - setListDonatur([]); - } - } - - const handleLoadStatus = async () => { - try { - const response = await apiGetMasterStatusTransaksi(); - - - if (response?.success && response?.data) { - setListStatus(response.data); - } else { - console.error("Invalid data format received:", response); - setListStatus(null); - } - } catch (error) { - clientLogger.error("Error get status donatur", error); - setListStatus(null); - } - } - const onPageClick = async (page: number) => { - setActivePage(page); - } - async function onSelect(selectStatus: any) { - setSelectStatus(selectStatus); - } - async function onReload() { - setSelectStatus(""); - handleLoadData(); - } - - - - const renderTableBody = () => { - if (!Array.isArray(lisDonatur) || lisDonatur.length === 0) { - return ( - - -
- Tidak ada data -
- - - ); - } - return lisDonatur?.map((e, i) => ( - - -
{e?.Author.username}
- - -
{e?.DonasiMaster_Bank?.name}
- - -
- -
- - -
- {new Intl.DateTimeFormat("id-ID", { dateStyle: "full" }).format( - new Date(e?.createdAt) - )} -
- - -
- - {e?.DonasiMaster_StatusInvoice?.name} - -
- - -
- {e?.donasiMaster_StatusInvoiceId === "1" || - e?.donasiMaster_StatusInvoiceId === "2" ? ( - - ) : ( - "-" - )} -
- - -
- {e?.donasiMaster_StatusInvoiceId === "1" ? ( - - ) : e?.DonasiMaster_StatusInvoice?.id === "2" ? ( - { - onReload(); - }} - onSuccessDonatur={(val) => { - setListDonatur(val.data); - setNPage(val.nPage); - }} - /> - ) : ( - - - )} -
- - - )); - } - - if (!lisDonatur && !listStatus) return - - return ( - <> - - {/*
{JSON.stringify(dataDonasi, null, 2)}
*/} - - { - onReload(); - }} - > - - - ({ - value: e.id, - label: e.name, - }))} - onChange={(val) => { - onSelect(val); - }} - /> */} - - } - /> - - - - - - - - - - - - - - {rowTable} -
-
Nominal
-
-
Tanggal
-
-
Judul
-
Deskripsi -
Bukti Transfer
-
-
- - {/*
- { - onPageClick(val); - }} - /> -
*/} -
-
- - - - ); -} diff --git a/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx b/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx index cb058d01..fbcddaee 100644 --- a/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx +++ b/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx @@ -24,7 +24,7 @@ import { import { IconCamera } from "@tabler/icons-react"; import _, { toNumber } from "lodash"; import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; -import { useRouter } from "next/navigation"; +import { useParams, useRouter } from "next/navigation"; import { useState } from "react"; import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali"; import { AdminDonasi_funCreatePencairanDana } from "../../fun/create/fun_create_pencairan_dana"; @@ -33,34 +33,69 @@ import { AdminDonasi_AkumulasiPencairanById } from "../../fun/update/fun_update_ import { ComponentGlobal_InputCountDown } from "@/app_modules/_global/component"; import { DIRECTORY_ID } from "@/lib"; import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun"; +import { AdminColor } from "@/app_modules/_global/color/color_pallet"; +import { apiGetAdminDonasiById } from "../../lib/api_fetch_admin_donasi"; +import { MODEL_DONASI } from "@/app_modules/donasi/model/interface"; +import { clientLogger } from "@/util/clientLogger"; +import { useShallowEffect } from "@mantine/hooks"; +import CustomSkeletonAdmin from "@/app_modules/admin/_admin_global/_component/skeleton/customSkeletonAdmin"; -export default function AdminDonasi_PencairanDana({ - donasiId, - danaTerkumpul, - totalPencairan, -}: { - donasiId: string; - danaTerkumpul: string; - totalPencairan: number; -}) { - const [terkumpul, setTerkumpul] = useState(danaTerkumpul); - const [total, setTotal] = useState(totalPencairan); +export default function AdminDonasi_PencairanDana() { + const params = useParams<{ id: string }>(); + const donasiId = params.id; + const [data, setData] = useState(null); + // const [terkumpul, setTerkumpul] = useState(data?.terkumpul); + // const [total, setTotal] = useState(data?.totalPencairan); + + useShallowEffect(() => { + loadInitialData(); + }, []) + const loadInitialData = async () => { + try { + const response = await apiGetAdminDonasiById({ + id: donasiId, + }) + + if (response?.success && response?.data) { + setData(response.data) + console.log("ini respone data", response.data) + // setTerkumpul(response.data.terkumpul) + // setTotal(response.data.totalPencairan) + } else { + setData(null) + // setTerkumpul("") + // setTotal(0) + } + } catch (error) { + clientLogger.error("Invalid data format recieved:", error); + setData(null); + // setTerkumpul(""); + // setTotal(0); + } + } return ( <> - - { - setTerkumpul(val.terkumpul); - setTotal(val.totalPencairan); - }} - /> - + {!data ? + ( + ) + : ( + <> + + { + // setTerkumpul(val.terkumpul); + // setTotal(val.totalPencairan); + }} + /> + + )} + ); } @@ -74,6 +109,8 @@ function TotalDanaView({ }) { const terkumpul = toNumber(danaTerkumpul); const sisaDana = terkumpul - totalPencairan; + console.log("Sisa dana", sisaDana); + console.log("Terkumpul", terkumpul); return ( <> @@ -81,11 +118,10 @@ function TotalDanaView({ - Dana Tersisa + Dana Tersisa { <ComponentAdminGlobal_TampilanRupiahDonasi @@ -111,7 +147,9 @@ function FormView({ danaTerkumpul: string; totalPencairan: number; onSuccess: (val: any) => void; -}) { + }) { + + const router = useRouter(); const [file, setFile] = useState<File | null>(null); const [images, setImages] = useState<any | null>(); @@ -158,18 +196,21 @@ function FormView({ body.nominalCair as any ); if (res2.status === 200) { - const loadData = await AdminDonasi_getOneById(donasiId); + const loadData = await apiGetAdminDonasiById({id: donasiId}); onSuccess(loadData); + console.log("load Data", loadData); const dataNotif = { - appId: loadData?.id, - userId: loadData?.authorId, - pesan: loadData?.title as any, + appId: loadData?.data?.id, + userId: loadData?.data?.authorId, + pesan: loadData?.data?.title as any, status: "Pencairan Dana", kategoriApp: "DONASI", title: "Dana donasi berhasil dicairkan", }; + console.log("Data Notif", dataNotif); + const notif = await adminNotifikasi_funCreateToUser({ data: dataNotif as any, }); @@ -197,13 +238,14 @@ function FormView({ return ( <> <Center> - <Paper p={"md"} w={{ base: 300, sm: 350, md: 400, lg: 500 }} withBorder> + <Paper p={"md"} w={{ base: 300, sm: 350, md: 400, lg: 500 }} bg={AdminColor.softBlue}> <Center mb={"lg"}> - <Title order={5}>Form Pencairan Dana + Form Pencairan Dana Rp.
} + styles={{ label: { color: AdminColor.white } }} withAsterisk placeholder="0" label="Nominal" @@ -245,6 +287,7 @@ function FormView({ }} />