Merge pull request #121 from bipproduction/admin/donasi/image
Fix: admin donasi
This commit is contained in:
@@ -5,6 +5,5 @@ export default async function Page({ params }: { params: { id: string } }) {
|
||||
let invoiceId = params.id;
|
||||
const dataInvoice = await Donasi_getOneInvoiceById(invoiceId);
|
||||
|
||||
|
||||
return <Donasi_InvoiceProses dataInvoice={dataInvoice as any} />;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ const DIRECTORY_ID = {
|
||||
donasi_cerita_image: "cm2dvy9bi007v10dpmatb5yiy",
|
||||
donasi_kabar: "cm2dvxo48007t10dpmmustxa2",
|
||||
donasi_bukti_transfer: "cm0yk1pmh000h10njhi6m8b8t",
|
||||
donasi_bukti_trf_pencairan_dana: "cm32s7h1q005yb5kuf5uiv5de",
|
||||
|
||||
// Job
|
||||
job_image: "cm0ypp6zl0003kp7jf59zuvjy",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { MainColor } from "@/app_modules/_global/color/color_pallet";
|
||||
import { Text } from "@mantine/core";
|
||||
|
||||
export default function ComponentGlobal_TampilanRupiah({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"use client";
|
||||
|
||||
import { Modal, Stack, Textarea, Group, Button } from "@mantine/core";
|
||||
import { Group, Modal, Stack, Textarea } from "@mantine/core";
|
||||
import React from "react";
|
||||
|
||||
export function Admin_ComponentModalReport({
|
||||
@@ -10,13 +10,17 @@ export function Admin_ComponentModalReport({
|
||||
onHandlerChange,
|
||||
buttonKanan,
|
||||
buttonKiri,
|
||||
cekInputKarakter,
|
||||
value,
|
||||
}: {
|
||||
opened: any;
|
||||
onClose: () => void;
|
||||
title: string;
|
||||
onHandlerChange: (val: any) => void;
|
||||
onHandlerChange: (val: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
||||
buttonKanan: React.ReactNode;
|
||||
buttonKiri: React.ReactNode;
|
||||
cekInputKarakter?: React.ReactNode;
|
||||
value?: string;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
@@ -29,13 +33,18 @@ export function Admin_ComponentModalReport({
|
||||
withCloseButton={false}
|
||||
>
|
||||
<Stack>
|
||||
<Textarea
|
||||
autosize
|
||||
minRows={3}
|
||||
maxRows={5}
|
||||
placeholder="Masukan alasan penolakan"
|
||||
onChange={onHandlerChange}
|
||||
/>
|
||||
<Stack spacing={"xs"}>
|
||||
<Textarea
|
||||
autosize
|
||||
value={value}
|
||||
minRows={3}
|
||||
maxRows={5}
|
||||
placeholder="Masukan alasan penolakan"
|
||||
onChange={onHandlerChange}
|
||||
/>
|
||||
{cekInputKarakter && cekInputKarakter}
|
||||
</Stack>
|
||||
|
||||
<Group position="right">
|
||||
{buttonKiri}
|
||||
{buttonKanan}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import { MODEL_CERITA_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import { Paper, Stack, Title, Box, AspectRatio, Image, Text } from "@mantine/core";
|
||||
import { Admin_ComponentLoadImageLandscape } from "../../_admin_global";
|
||||
|
||||
export default function ComponentAdminDonasi_CeritaPenggalangDana({
|
||||
cerita,
|
||||
@@ -18,12 +19,7 @@ export default function ComponentAdminDonasi_CeritaPenggalangDana({
|
||||
<Text>{cerita.pembukaan}</Text>
|
||||
|
||||
<Box>
|
||||
<AspectRatio ratio={16 / 9} mah={300} mx={"auto"}>
|
||||
<Image
|
||||
alt="Gambar_cerita"
|
||||
src={RouterDonasi.api_gambar_cerita + `${cerita.imagesId}`}
|
||||
/>
|
||||
</AspectRatio>
|
||||
<Admin_ComponentLoadImageLandscape fileId={cerita.imageId} />
|
||||
</Box>
|
||||
|
||||
<Text>{cerita.cerita}</Text>
|
||||
|
||||
@@ -1,11 +1,27 @@
|
||||
"use client"
|
||||
"use client";
|
||||
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import { Paper, Stack, Title, Box, AspectRatio, Group, Image, Text } from "@mantine/core";
|
||||
import {
|
||||
Paper,
|
||||
Stack,
|
||||
Title,
|
||||
Box,
|
||||
AspectRatio,
|
||||
Group,
|
||||
Image,
|
||||
Text,
|
||||
} from "@mantine/core";
|
||||
import { Admin_ComponentLoadImageLandscape } from "../../_admin_global";
|
||||
import ComponentAdminGlobal_TampilanRupiahDonasi from "../../_admin_global/tampilan_rupiah";
|
||||
import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component";
|
||||
|
||||
export default function ComponentAdminDonasi_TampilanDetailDonasi({ donasi }: { donasi: MODEL_DONASI }) {
|
||||
export default function ComponentAdminDonasi_TampilanDetailDonasi({
|
||||
donasi,
|
||||
}: {
|
||||
donasi: MODEL_DONASI;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} p={"md"} withBorder>
|
||||
@@ -13,12 +29,7 @@ export default function ComponentAdminDonasi_TampilanDetailDonasi({ donasi }: {
|
||||
<Title order={5}>Detail Data Donasi</Title>
|
||||
<Stack>
|
||||
<Box>
|
||||
<AspectRatio ratio={1 / 1} mah={300} mx={"auto"}>
|
||||
<Image
|
||||
alt="Foto"
|
||||
src={RouterDonasi.api_gambar + `${donasi.imagesId}`}
|
||||
/>
|
||||
</AspectRatio>
|
||||
<Admin_ComponentLoadImageLandscape fileId={donasi.imageId} />
|
||||
</Box>
|
||||
|
||||
<Stack spacing={0}>
|
||||
@@ -32,7 +43,10 @@ export default function ComponentAdminDonasi_TampilanDetailDonasi({ donasi }: {
|
||||
<Group>
|
||||
<Text fz={12}>Dana dibutuhkan</Text>
|
||||
<Title order={4} c="blue">
|
||||
<TampilanRupiahDonasi nominal={+donasi.target} />
|
||||
<ComponentGlobal_TampilanRupiah
|
||||
color="black"
|
||||
nominal={+donasi.target}
|
||||
/>
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
@@ -47,4 +61,4 @@ export default function ComponentAdminDonasi_TampilanDetailDonasi({ donasi }: {
|
||||
</Paper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { useState } from "react";
|
||||
import React, { useState } from "react";
|
||||
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
|
||||
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
|
||||
import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
|
||||
@@ -26,6 +26,7 @@ import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_det
|
||||
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
|
||||
import { AdminDonasi_funUpdateCatatanReject } from "../fun/update/fun_update_catatan_reject";
|
||||
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
|
||||
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
|
||||
|
||||
export default function AdminDonasi_DetailReject({
|
||||
dataReject,
|
||||
@@ -72,20 +73,19 @@ function ButtonOnHeader({
|
||||
setDonasi: any;
|
||||
}) {
|
||||
const [report, setReport] = useState(catatan);
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [opened, setOpened] = useState(false);
|
||||
const [isLoading, setLoading] = useState(false);
|
||||
|
||||
async function onUpdate() {
|
||||
await AdminDonasi_funUpdateCatatanReject(donasiId, report).then(
|
||||
async (res) => {
|
||||
if (res.status === 200) {
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(res.message);
|
||||
close();
|
||||
await AdminDonasi_getOneById(donasiId).then((res) => setDonasi(res));
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
}
|
||||
);
|
||||
const res = await AdminDonasi_funUpdateCatatanReject(donasiId, report);
|
||||
if (res.status === 200) {
|
||||
setLoading(true);
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(res.message);
|
||||
setOpened(false);
|
||||
await AdminDonasi_getOneById(donasiId).then((res) => setDonasi(res));
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -93,13 +93,62 @@ function ButtonOnHeader({
|
||||
<Stack>
|
||||
<Group position="apart">
|
||||
<AdminGlobal_ComponentBackButton />
|
||||
<Button radius={"xl"} bg={"orange"} color="orange" onClick={open}>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
bg={"orange"}
|
||||
color="orange"
|
||||
onClick={() => setOpened(true)}
|
||||
>
|
||||
Tambah catatan
|
||||
</Button>
|
||||
</Group>
|
||||
</Stack>
|
||||
|
||||
<Modal
|
||||
<Admin_ComponentModalReport
|
||||
opened={opened}
|
||||
onClose={() => setOpened(false)}
|
||||
title="Tambah catatan"
|
||||
value={report}
|
||||
onHandlerChange={(val: React.ChangeEvent<HTMLTextAreaElement>) =>
|
||||
setReport(val.target.value)
|
||||
}
|
||||
buttonKanan={
|
||||
<>
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoading}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onUpdate();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
buttonKiri={
|
||||
<>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
close();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
cekInputKarakter={
|
||||
<>
|
||||
<ComponentGlobal_InputCountDown
|
||||
maxInput={300}
|
||||
lengthInput={report.length}
|
||||
/>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
||||
{/* <Modal
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
centered
|
||||
@@ -117,73 +166,10 @@ function ButtonOnHeader({
|
||||
value={report}
|
||||
onChange={(val) => setReport(val.target.value)}
|
||||
/>
|
||||
<ComponentGlobal_InputCountDown
|
||||
maxInput={300}
|
||||
lengthInput={report.length}
|
||||
/>
|
||||
|
||||
<Group position="right">
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
close();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onUpdate();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</Group>
|
||||
<Group position="right"></Group>
|
||||
</Stack>
|
||||
</Modal>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TampilanDetailDonasi({ donasi }: { donasi: MODEL_DONASI }) {
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} p={"md"}>
|
||||
<Stack>
|
||||
<Stack>
|
||||
<AspectRatio ratio={16 / 9}>
|
||||
<Paper radius={"md"}>
|
||||
<Image
|
||||
alt="Foto"
|
||||
src={RouterDonasi.api_gambar + `${donasi.imagesId}`}
|
||||
/>
|
||||
</Paper>
|
||||
</AspectRatio>
|
||||
<Stack spacing={0}>
|
||||
<Title order={4}>{donasi.title}</Title>
|
||||
<Text fz={"xs"}>
|
||||
Durasi: {donasi.DonasiMaster_Durasi.name} hari
|
||||
</Text>
|
||||
</Stack>
|
||||
|
||||
<Stack spacing={0}>
|
||||
<Group>
|
||||
<Text fz={12}>Dana dibutuhkan</Text>
|
||||
<Title order={4} c="blue">
|
||||
<TampilanRupiahDonasi nominal={+donasi.target} />
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Kategori</Text>
|
||||
<Title order={4} c="blue">
|
||||
{donasi.DonasiMaster_Ketegori.name}
|
||||
</Title>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</Modal> */}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,26 +1,15 @@
|
||||
"use client";
|
||||
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import mqtt_client from "@/util/mqtt_client";
|
||||
import {
|
||||
MODEL_CERITA_DONASI,
|
||||
MODEL_DONASI,
|
||||
} from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
AspectRatio,
|
||||
Box,
|
||||
Button,
|
||||
Divider,
|
||||
Group,
|
||||
Image,
|
||||
Modal,
|
||||
Paper,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Text,
|
||||
Textarea,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { useRouter } from "next/navigation";
|
||||
@@ -28,15 +17,14 @@ import { useState } from "react";
|
||||
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
|
||||
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
|
||||
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
|
||||
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
|
||||
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
|
||||
import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
|
||||
import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi";
|
||||
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
|
||||
import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish";
|
||||
import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject";
|
||||
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
|
||||
import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi";
|
||||
import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
|
||||
import mqtt_client from "@/util/mqtt_client";
|
||||
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
|
||||
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
|
||||
|
||||
export default function AdminDonasi_DetailReview({
|
||||
dataReview,
|
||||
@@ -180,7 +168,48 @@ function ButtonOnHeader({
|
||||
</Group>
|
||||
{/* <Divider /> */}
|
||||
|
||||
<Modal
|
||||
<Admin_ComponentModalReport
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
title={"Alasan penolakan"}
|
||||
onHandlerChange={(val: any) => setCatatan(val.target.value)}
|
||||
buttonKiri={
|
||||
<>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
close();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
buttonKanan={
|
||||
<>
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoadingReject ? true : false}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onReject();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</>
|
||||
}
|
||||
cekInputKarakter={
|
||||
<>
|
||||
<ComponentGlobal_InputCountDown
|
||||
maxInput={300}
|
||||
lengthInput={catatan.length}
|
||||
/>
|
||||
</>
|
||||
}
|
||||
/>
|
||||
|
||||
{/* <Modal
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
centered
|
||||
@@ -202,28 +231,9 @@ function ButtonOnHeader({
|
||||
lengthInput={catatan.length}
|
||||
/>
|
||||
|
||||
<Group position="right">
|
||||
<Button
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
close();
|
||||
}}
|
||||
>
|
||||
Batal
|
||||
</Button>
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoadingReject ? true : false}
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onReject();
|
||||
}}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
</Group>
|
||||
<Group position="right"></Group>
|
||||
</Stack>
|
||||
</Modal>
|
||||
</Modal> */}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,33 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminGlobal } from "@/app/lib";
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_admin/router_admin_donasi";
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component";
|
||||
import { Admin_ComponentLoadImageLandscape } from "@/app_modules/admin/_admin_global";
|
||||
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_INVOICE,
|
||||
MODEL_DONASI_PENCAIRAN_DANA,
|
||||
} from "@/app_modules/donasi/model/interface";
|
||||
import { MODEL_NEW_DEFAULT_MASTER } from "@/app_modules/model_global/interface";
|
||||
import mqtt_client from "@/util/mqtt_client";
|
||||
import {
|
||||
ActionIcon,
|
||||
AspectRatio,
|
||||
Badge,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Image,
|
||||
Modal,
|
||||
Pagination,
|
||||
Paper,
|
||||
Progress,
|
||||
ScrollArea,
|
||||
Select,
|
||||
SimpleGrid,
|
||||
@@ -25,38 +38,15 @@ import {
|
||||
TextInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import {
|
||||
IconClover,
|
||||
IconMessageChatbot,
|
||||
IconMoneybag,
|
||||
IconReload,
|
||||
} from "@tabler/icons-react";
|
||||
import router from "next/router";
|
||||
import moment from "moment";
|
||||
import {
|
||||
MODEL_DONASI,
|
||||
MODEL_DONASI_INVOICE,
|
||||
MODEL_DONASI_PENCAIRAN_DANA,
|
||||
} from "@/app_modules/donasi/model/interface";
|
||||
import { useState } from "react";
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { IconReload } from "@tabler/icons-react";
|
||||
import _, { toNumber } from "lodash";
|
||||
import moment from "moment";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useDisclosure, useInterval, useShallowEffect } from "@mantine/hooks";
|
||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
|
||||
import AdminGlobal_ComponentBackButton from "@/app_modules/admin/_admin_global/back_button";
|
||||
import { MODEL_NEW_DEFAULT_MASTER } from "@/app_modules/model_global/interface";
|
||||
import { useState } from "react";
|
||||
import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id";
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_admin/router_admin_donasi";
|
||||
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
|
||||
import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total";
|
||||
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 mqtt_client from "@/util/mqtt_client";
|
||||
import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user";
|
||||
|
||||
export default function AdminDonasi_DetailPublish({
|
||||
dataPublish,
|
||||
@@ -82,13 +72,13 @@ export default function AdminDonasi_DetailPublish({
|
||||
"DonasiMaster_Status",
|
||||
]);
|
||||
|
||||
// fungsi manggil serveraction
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
|
||||
<Stack>
|
||||
<AdminGlobal_ComponentBackButton path={RouterAdminDonasi.table_publish} />
|
||||
<AdminGlobal_ComponentBackButton
|
||||
path={RouterAdminDonasi.table_publish}
|
||||
/>
|
||||
<TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} />
|
||||
<TampilanListDonatur
|
||||
donatur={listDonatur}
|
||||
@@ -113,6 +103,8 @@ function TampilanDetailDonasi({
|
||||
}) {
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const router = useRouter();
|
||||
const [isLoadingPencairanDana, setIsLoadingPencairanDana] = useState(false);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} p={"md"}>
|
||||
@@ -126,67 +118,119 @@ function TampilanDetailDonasi({
|
||||
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
|
||||
]}
|
||||
>
|
||||
<Paper withBorder>
|
||||
<AspectRatio ratio={1 / 1}>
|
||||
<Image
|
||||
// mah={500}
|
||||
// mx={"auto"}
|
||||
alt="Foto"
|
||||
src={RouterDonasi.api_gambar + `${donasi?.imagesId}`}
|
||||
/>
|
||||
</AspectRatio>
|
||||
<Paper withBorder p={"xs"}>
|
||||
<Stack>
|
||||
<Title align="center" order={4}>
|
||||
Gambar Donasi
|
||||
</Title>
|
||||
<Admin_ComponentLoadImageLandscape fileId={donasi.imageId} />
|
||||
</Stack>
|
||||
</Paper>
|
||||
|
||||
<Paper withBorder p={"sm"}>
|
||||
<Stack spacing={5}>
|
||||
<Title order={4}>{donasi?.title}</Title>
|
||||
<Group>
|
||||
<Text fz={"xs"}>Penggalang Dana</Text>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.Author.username}
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Durasi</Text>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.DonasiMaster_Durasi.name} hari
|
||||
</Title>
|
||||
</Group>
|
||||
<Title order={4}>Detail Donasi</Title>
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Judul</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.title}
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Group>
|
||||
<Text fz={12}>Dana dibutuhkan</Text>
|
||||
<Title order={5} c="blue">
|
||||
<TampilanRupiahDonasi nominal={+donasi?.target} />
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Kategori</Text>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.DonasiMaster_Ketegori?.name}
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Total donatur</Text>
|
||||
<Title order={5} c="blue">
|
||||
{countDonatur}
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Progres</Text>
|
||||
<Title order={5} c="blue">
|
||||
{toNumber(donasi.progres).toFixed(2)} %
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Dana terkumpul</Text>
|
||||
<Title order={5} c="blue">
|
||||
<TampilanRupiahDonasi nominal={+donasi?.terkumpul} />
|
||||
</Title>
|
||||
</Group>
|
||||
{/* <Button w={200} bg={"green.5"} color="green">Pencairan Dana</Button> */}
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Penggalang Dana</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.Author.username}
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Durasi</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.DonasiMaster_Durasi.name} hari
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Dana dibutuhkan</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<ComponentGlobal_TampilanRupiah
|
||||
nominal={+donasi?.target}
|
||||
color="darkblue"
|
||||
/>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Kategori</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{donasi?.DonasiMaster_Ketegori?.name}
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={"xs"}>Total donatur</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{countDonatur}
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={12}>Progres</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<Title order={5} c="blue">
|
||||
{toNumber(donasi.progres).toFixed(2)} %
|
||||
</Title>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
|
||||
<Grid>
|
||||
<Grid.Col span={4}>
|
||||
<Text fz={12}>Dana terkumpul</Text>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"content"}>:</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
<ComponentGlobal_TampilanRupiah
|
||||
nominal={+donasi?.terkumpul}
|
||||
color="darkblue"
|
||||
/>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
</Stack>
|
||||
</Paper>
|
||||
|
||||
{/* Pencairan Dana */}
|
||||
<Paper withBorder p={"sm"}>
|
||||
<Stack spacing={"xl"}>
|
||||
<Center>
|
||||
@@ -196,12 +240,10 @@ function TampilanDetailDonasi({
|
||||
<Grid.Col span={"auto"}>
|
||||
<Stack spacing={0}>
|
||||
<Text fz={"xs"}>Total Dana Dicairkan</Text>
|
||||
<Title>
|
||||
<TampilanRupiahDonasi
|
||||
nominal={donasi?.totalPencairan}
|
||||
fontSize={14}
|
||||
/>
|
||||
</Title>
|
||||
<ComponentGlobal_TampilanRupiah
|
||||
nominal={donasi?.totalPencairan}
|
||||
color="darkblue"
|
||||
/>
|
||||
</Stack>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={"auto"}>
|
||||
@@ -227,12 +269,15 @@ function TampilanDetailDonasi({
|
||||
</Grid>
|
||||
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoadingPencairanDana}
|
||||
radius={"xl"}
|
||||
onClick={() =>
|
||||
onClick={() => {
|
||||
setIsLoadingPencairanDana(true);
|
||||
router.push(
|
||||
RouterAdminDonasi_OLD.pencairan_dana + `${donasi?.id}`
|
||||
)
|
||||
}
|
||||
);
|
||||
}}
|
||||
>
|
||||
Cairkan Dana
|
||||
</Button>
|
||||
@@ -271,7 +316,7 @@ function TampilanListDonatur({
|
||||
onSuccessDonasi: (val: any) => void;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const [isLoading, setLoading] = useState(false);
|
||||
const [isLoadingCek, setLoadingCek] = useState(false);
|
||||
const [idData, setIdData] = useState("");
|
||||
const [lisDonatur, setListDonatur] = useState<MODEL_DONASI_INVOICE[]>(
|
||||
donatur.data
|
||||
@@ -323,7 +368,7 @@ function TampilanListDonatur({
|
||||
</td>
|
||||
<td>
|
||||
<Center>
|
||||
<TampilanRupiahDonasi nominal={+e?.nominal} />
|
||||
<ComponentGlobal_TampilanRupiah color="black" nominal={+e?.nominal} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
@@ -345,12 +390,13 @@ function TampilanListDonatur({
|
||||
{e?.donasiMaster_StatusInvoiceId === "1" ||
|
||||
e?.donasiMaster_StatusInvoiceId === "2" ? (
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoadingCek && idData === e?.id}
|
||||
radius={"xl"}
|
||||
onClick={() =>
|
||||
router.push(
|
||||
RouterAdminDonasi.transfer_invoice + `${e?.imagesId}`
|
||||
)
|
||||
}
|
||||
onClick={() => {
|
||||
setLoadingCek(true), setIdData(e?.id);
|
||||
router.push(RouterAdminGlobal.preview_image({ id: e.imageId }));
|
||||
}}
|
||||
>
|
||||
Cek
|
||||
</Button>
|
||||
@@ -496,6 +542,7 @@ function ButtonAccept({
|
||||
onSuccessDonatur: (val: any) => void;
|
||||
}) {
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
async function onAccept() {
|
||||
let nominalDonasi = nominal;
|
||||
@@ -510,6 +557,7 @@ function ButtonAccept({
|
||||
target: target,
|
||||
});
|
||||
if (updateStatus.status == 200) {
|
||||
setIsLoading(true);
|
||||
const dataNotif = {
|
||||
appId: updateStatus.data?.id,
|
||||
userId: updateStatus.data?.authorId,
|
||||
@@ -569,10 +617,11 @@ function ButtonAccept({
|
||||
});
|
||||
onSuccessDonatur(updatelistDonatur);
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(updateStatus.message);
|
||||
setIsLoading(false);
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(updateStatus.message);
|
||||
setIsLoading(false);
|
||||
}
|
||||
|
||||
close();
|
||||
}
|
||||
|
||||
@@ -592,13 +641,17 @@ function ButtonAccept({
|
||||
<Paper>
|
||||
<Stack align="center">
|
||||
<Title
|
||||
align="center"
|
||||
order={6}
|
||||
>{`${"Anda yakin sudah melihat bukti transfer ?"}`}</Title>
|
||||
>{`${"Anda sudah melihat bukti transfer dan yakin menerima donasi ini ?"}`}</Title>
|
||||
<Group position="center">
|
||||
<Button radius={"xl"} onClick={() => close()}>
|
||||
Batal
|
||||
</Button>
|
||||
<Button
|
||||
color="green"
|
||||
loading={isLoading}
|
||||
loaderPosition="center"
|
||||
radius={"xl"}
|
||||
onClick={() => {
|
||||
onAccept();
|
||||
|
||||
@@ -30,6 +30,9 @@ import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||
import { AdminDonasi_funCreatePencairanDana } from "../../fun/create/fun_create_pencairan_dana";
|
||||
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
|
||||
import { AdminDonasi_AkumulasiPencairanById } from "../../fun/update/fun_update_akumulasi_pencairan";
|
||||
import { ComponentGlobal_InputCountDown } from "@/app_modules/_global/component";
|
||||
import { DIRECTORY_ID } from "@/app/lib";
|
||||
import { funGlobal_UploadToStorage } from "@/app_modules/_global/fun";
|
||||
|
||||
export default function AdminDonasi_PencairanDana({
|
||||
donasiId,
|
||||
@@ -55,7 +58,6 @@ export default function AdminDonasi_PencairanDana({
|
||||
onSuccess={(val) => {
|
||||
setTerkumpul(val.terkumpul);
|
||||
setTotal(val.totalPencairan);
|
||||
console.log(val);
|
||||
}}
|
||||
/>
|
||||
</Stack>
|
||||
@@ -120,14 +122,82 @@ function FormView({
|
||||
});
|
||||
const [nilaiNominal, setNilaiNominal] = useState(0);
|
||||
const [isOver, setIsOver] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
const terkumpul = toNumber(danaTerkumpul);
|
||||
const sisaDana = terkumpul - totalPencairan;
|
||||
|
||||
async function onSave() {
|
||||
const body = {
|
||||
donasiId: donasiId,
|
||||
nominalCair: nilaiNominal,
|
||||
title: value.title,
|
||||
deskripsi: value.deskripsi,
|
||||
};
|
||||
|
||||
if (_.values(body).includes(""))
|
||||
return ComponentAdminGlobal_NotifikasiPeringatan("Lengkapi Data");
|
||||
|
||||
const uploadImage = await funGlobal_UploadToStorage({
|
||||
file: file as File,
|
||||
dirId: DIRECTORY_ID.donasi_bukti_trf_pencairan_dana,
|
||||
});
|
||||
if (!uploadImage.success)
|
||||
return ComponentAdminGlobal_NotifikasiPeringatan(
|
||||
"Gagal upload file gambar"
|
||||
);
|
||||
|
||||
const res = await AdminDonasi_funCreatePencairanDana({
|
||||
data: body as any,
|
||||
fileId: uploadImage.data.id,
|
||||
});
|
||||
if (res.status === 200) {
|
||||
setIsLoading(true);
|
||||
const res2 = await AdminDonasi_AkumulasiPencairanById(
|
||||
body.donasiId as any,
|
||||
body.nominalCair as any
|
||||
);
|
||||
if (res2.status === 200) {
|
||||
const loadData = await AdminDonasi_getOneById(donasiId);
|
||||
onSuccess(loadData);
|
||||
|
||||
const dataNotif = {
|
||||
appId: loadData?.id,
|
||||
userId: loadData?.authorId,
|
||||
pesan: loadData?.title as any,
|
||||
status: "Pencairan Dana",
|
||||
kategoriApp: "DONASI",
|
||||
title: "Dana donasi berhasil dicairkan",
|
||||
};
|
||||
|
||||
const notif = await adminNotifikasi_funCreateToUser({
|
||||
data: dataNotif as any,
|
||||
});
|
||||
|
||||
if (notif.status === 201) {
|
||||
mqtt_client.publish(
|
||||
"USER",
|
||||
JSON.stringify({ userId: loadData?.authorId, count: 1 })
|
||||
);
|
||||
}
|
||||
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(res2.message);
|
||||
router.back();
|
||||
setIsLoading(false);
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res2.message);
|
||||
setIsLoading(false);
|
||||
}
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res.message);
|
||||
setIsLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Center>
|
||||
<Paper p={"md"} w={{ base: 200, sm: 200, md: 300, lg: 400 }} withBorder>
|
||||
<Paper p={"md"} w={{ base: 300, sm: 350, md: 400, lg: 500 }} withBorder>
|
||||
<Center mb={"lg"}>
|
||||
<Title order={5}>Form Pencairan Dana</Title>
|
||||
</Center>
|
||||
@@ -186,18 +256,28 @@ function FormView({
|
||||
});
|
||||
}}
|
||||
/>
|
||||
<Textarea
|
||||
withAsterisk
|
||||
placeholder="Masukan deskripsi"
|
||||
label="Deskripsi"
|
||||
maxLength={300}
|
||||
onChange={(val: any) => {
|
||||
setValue({
|
||||
...value,
|
||||
deskripsi: val.target.value,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
<Stack spacing={5}>
|
||||
<Textarea
|
||||
withAsterisk
|
||||
placeholder="Masukan deskripsi"
|
||||
label="Deskripsi"
|
||||
maxLength={300}
|
||||
autosize
|
||||
minRows={3}
|
||||
maxRows={5}
|
||||
onChange={(val: any) => {
|
||||
setValue({
|
||||
...value,
|
||||
deskripsi: val.target.value,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
|
||||
<ComponentGlobal_InputCountDown
|
||||
lengthInput={value.deskripsi.length}
|
||||
maxInput={300}
|
||||
/>
|
||||
</Stack>
|
||||
|
||||
<ComponentDonasi_NotedBox informasi="Wajib menyertakan bukti transfer" />
|
||||
<Stack>
|
||||
@@ -208,8 +288,7 @@ function FormView({
|
||||
const buffer = URL.createObjectURL(
|
||||
new Blob([new Uint8Array(await files.arrayBuffer())])
|
||||
);
|
||||
// console.log(buffer, "ini buffer");
|
||||
// console.log(files, " ini file");
|
||||
|
||||
setImages(buffer);
|
||||
setFile(files);
|
||||
} catch (error) {
|
||||
@@ -243,6 +322,8 @@ function FormView({
|
||||
)}
|
||||
</Stack>
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoading}
|
||||
disabled={
|
||||
_.values(value).includes("") || file === null || isOver
|
||||
? true
|
||||
@@ -251,16 +332,7 @@ function FormView({
|
||||
style={{ transition: "0.5s" }}
|
||||
radius={"xl"}
|
||||
mt={"lg"}
|
||||
onClick={() =>
|
||||
onSave({
|
||||
router: router,
|
||||
value: value,
|
||||
donasiId: donasiId,
|
||||
file: file as any,
|
||||
nilaiNominal: nilaiNominal,
|
||||
onSuccess1: (val: any) => onSuccess(val),
|
||||
})
|
||||
}
|
||||
onClick={() => onSave()}
|
||||
>
|
||||
Simpan
|
||||
</Button>
|
||||
@@ -270,75 +342,3 @@ function FormView({
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
async function onSave({
|
||||
router,
|
||||
value,
|
||||
donasiId,
|
||||
file,
|
||||
nilaiNominal,
|
||||
|
||||
onSuccess1,
|
||||
}: {
|
||||
router: AppRouterInstance;
|
||||
value: any;
|
||||
donasiId: string;
|
||||
file: FormData;
|
||||
nilaiNominal: number;
|
||||
onSuccess1: (val: any) => void;
|
||||
}) {
|
||||
const body = {
|
||||
donasiId: donasiId,
|
||||
nominalCair: nilaiNominal,
|
||||
title: value.title,
|
||||
deskripsi: value.deskripsi,
|
||||
};
|
||||
|
||||
if (_.values(body).includes(""))
|
||||
return ComponentAdminGlobal_NotifikasiPeringatan("Lengkapi Data");
|
||||
if (!file)
|
||||
return ComponentAdminGlobal_NotifikasiPeringatan(
|
||||
"Lampirkan Bukti Transfer"
|
||||
);
|
||||
|
||||
const gambar = new FormData();
|
||||
gambar.append("file", file as any);
|
||||
|
||||
const res = await AdminDonasi_funCreatePencairanDana(body as any, gambar);
|
||||
if (res.status === 200) {
|
||||
const res2 = await AdminDonasi_AkumulasiPencairanById(
|
||||
body.donasiId as any,
|
||||
body.nominalCair as any
|
||||
);
|
||||
if (res2.status === 200) {
|
||||
const loadData = await AdminDonasi_getOneById(donasiId);
|
||||
onSuccess1(loadData);
|
||||
|
||||
const dataNotif = {
|
||||
appId: loadData?.id,
|
||||
userId: loadData?.authorId,
|
||||
pesan: loadData?.title as any,
|
||||
status: "Pencairan Dana",
|
||||
kategoriApp: "DONASI",
|
||||
title: "Dana donasi berhasil dicairkan",
|
||||
};
|
||||
|
||||
const notif = await adminNotifikasi_funCreateToUser({
|
||||
data: dataNotif as any,
|
||||
});
|
||||
|
||||
if (notif.status === 201) {
|
||||
mqtt_client.publish(
|
||||
"USER",
|
||||
JSON.stringify({ userId: loadData?.authorId, count: 1 })
|
||||
);
|
||||
}
|
||||
|
||||
ComponentAdminGlobal_NotifikasiBerhasil(res2.message);
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res2.message);
|
||||
}
|
||||
} else {
|
||||
ComponentAdminGlobal_NotifikasiGagal(res.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,39 +7,42 @@ import { v4 } from "uuid";
|
||||
import fs from "fs";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminDonasi_funCreatePencairanDana(
|
||||
req: MODEL_DONASI_PENCAIRAN_DANA,
|
||||
gambar: FormData
|
||||
) {
|
||||
const dataImage: any = gambar.get("file");
|
||||
const fileName = dataImage.name;
|
||||
const fileExtension = _.lowerCase(dataImage.name.split(".").pop());
|
||||
const fRandomName = v4(fileName) + "." + fileExtension;
|
||||
export async function AdminDonasi_funCreatePencairanDana({
|
||||
data,
|
||||
fileId,
|
||||
}: {
|
||||
data: MODEL_DONASI_PENCAIRAN_DANA;
|
||||
fileId: string;
|
||||
}) {
|
||||
// const dataImage: any = gambar.get("file");
|
||||
// const fileName = dataImage.name;
|
||||
// const fileExtension = _.lowerCase(dataImage.name.split(".").pop());
|
||||
// const fRandomName = v4(fileName) + "." + fileExtension;
|
||||
|
||||
const uploadBukti = await prisma.images.create({
|
||||
data: {
|
||||
url: fRandomName,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
url: true,
|
||||
},
|
||||
});
|
||||
// const uploadBukti = await prisma.images.create({
|
||||
// data: {
|
||||
// url: fRandomName,
|
||||
// },
|
||||
// select: {
|
||||
// id: true,
|
||||
// url: true,
|
||||
// },
|
||||
// });
|
||||
|
||||
if (!uploadBukti) return { status: 400, message: "Gagal upload gambar" };
|
||||
const uploadFolder = Buffer.from(await dataImage.arrayBuffer());
|
||||
fs.writeFileSync(
|
||||
`./public/donasi/pencairan/${uploadBukti.url}`,
|
||||
uploadFolder
|
||||
);
|
||||
// if (!uploadBukti) return { status: 400, message: "Gagal upload gambar" };
|
||||
// const uploadFolder = Buffer.from(await dataImage.arrayBuffer());
|
||||
// fs.writeFileSync(
|
||||
// `./public/donasi/pencairan/${uploadBukti.url}`,
|
||||
// uploadFolder
|
||||
// );
|
||||
|
||||
const createPencairan = await prisma.donasi_PencairanDana.create({
|
||||
data: {
|
||||
nominalCair: +req.nominalCair,
|
||||
deskripsi: req.deskripsi,
|
||||
title: req.title,
|
||||
donasiId: req.donasiId,
|
||||
imagesId: uploadBukti.id
|
||||
nominalCair: +data.nominalCair,
|
||||
deskripsi: data.deskripsi,
|
||||
title: data.title,
|
||||
donasiId: data.donasiId,
|
||||
imageId: fileId,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ export async function adminDonasi_getListDonatur({
|
||||
DonasiMaster_StatusInvoice: true,
|
||||
donasiMaster_StatusInvoiceId: true,
|
||||
imagesId: true,
|
||||
imageId: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ export default async function adminDonasi_getListPublish({
|
||||
imageDonasi: true,
|
||||
DonasiMaster_Ketegori: true,
|
||||
DonasiMaster_Durasi: true,
|
||||
imageId: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ export async function AdminDonasi_getOneById(id: string) {
|
||||
DonasiMaster_Ketegori: true,
|
||||
DonasiMaster_Durasi: true,
|
||||
DonasiMaster_Status: true,
|
||||
imageId: true,
|
||||
},
|
||||
});
|
||||
return res;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import { AspectRatio, Box, Image, Paper, Stack } from "@mantine/core";
|
||||
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { Admin_ComponentLoadImageLandscape } from "../../_admin_global";
|
||||
|
||||
export default function AdminDonasi_BuktiTransfer({
|
||||
imageId,
|
||||
@@ -23,12 +24,13 @@ function BuktiTransfer({ imageId }: { imageId: string }) {
|
||||
return (
|
||||
<>
|
||||
<Paper withBorder p={"lg"} bg={"gray.3"}>
|
||||
<AspectRatio ratio={2 / 1} mx="auto">
|
||||
<Admin_ComponentLoadImageLandscape fileId={imageId}/>
|
||||
{/* <AspectRatio ratio={2 / 1} mx="auto">
|
||||
<Image
|
||||
alt="Foto"
|
||||
src={RouterAdminDonasi_OLD.api_gambar_bukti_transfer + `${imageId}`}
|
||||
/>
|
||||
</AspectRatio>
|
||||
</AspectRatio> */}
|
||||
{/* <AspectRatio ratio={1 / 1} mah={500} p={"lg"} bg={"cyan"}>
|
||||
<Paper bg={"grape"} h={"100%"}>
|
||||
<Image
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Group,
|
||||
@@ -12,16 +12,12 @@ import {
|
||||
ScrollArea,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
TextInput,
|
||||
Title,
|
||||
Title
|
||||
} from "@mantine/core";
|
||||
import { IconChevronLeft, IconEyeCheck, IconSearch } from "@tabler/icons-react";
|
||||
import { IconEyeCheck, IconSearch } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import { useState } from "react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate";
|
||||
import adminDonasi_getListPublish from "../fun/get/get_list_publish";
|
||||
|
||||
@@ -77,12 +73,12 @@ function TableStatus({ listPublish }: { listPublish: any }) {
|
||||
</td>
|
||||
<td>
|
||||
<Center>
|
||||
<TampilanRupiahDonasi nominal={+e.target} />
|
||||
<ComponentGlobal_TampilanRupiah color="black" nominal={+e.target} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
<Center>
|
||||
<TampilanRupiahDonasi nominal={+e.terkumpul} />
|
||||
<ComponentGlobal_TampilanRupiah color="black" nominal={+e.terkumpul} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Group,
|
||||
@@ -17,22 +17,13 @@ import {
|
||||
TextInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import {
|
||||
IconChevronLeft,
|
||||
IconEyeCheck,
|
||||
IconEyeClosed,
|
||||
IconEyeEdit,
|
||||
IconSearch,
|
||||
} from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import AdminDonasi_DetailReview from "../detail/detail_review";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import { IconEyeEdit, IconSearch } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate";
|
||||
import adminDonasi_getListReject from "../fun/get/get_list_reject";
|
||||
import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component";
|
||||
|
||||
export default function AdminDonasi_TableReject({
|
||||
dataReject,
|
||||
@@ -89,7 +80,7 @@ function TableStatus({ dataReject }: { dataReject: any }) {
|
||||
</td>
|
||||
<td>
|
||||
<Center>
|
||||
<TampilanRupiahDonasi nominal={+e?.target} />
|
||||
<ComponentGlobal_TampilanRupiah color="black" nominal={+e.target} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -1,33 +1,26 @@
|
||||
"use client";
|
||||
|
||||
import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Group,
|
||||
Modal,
|
||||
Pagination,
|
||||
Paper,
|
||||
ScrollArea,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
TextInput,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { IconChevronLeft, IconEyeCheck, IconSearch } from "@tabler/icons-react";
|
||||
import { IconEyeCheck, IconSearch } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import AdminDonasi_DetailReview from "../detail/detail_review";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import { useState } from "react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate";
|
||||
import _ from "lodash";
|
||||
import adminDonasi_getListReview from "../fun/get/get_list_review";
|
||||
import { ComponentGlobal_TampilanRupiah } from "@/app_modules/_global/component";
|
||||
|
||||
export default function AdminDonasi_TableReview({
|
||||
listReview,
|
||||
@@ -83,7 +76,7 @@ function TableStatus({ listReview }: { listReview: any }) {
|
||||
</td>
|
||||
<td>
|
||||
<Center>
|
||||
<TampilanRupiahDonasi nominal={+e?.target} />
|
||||
<ComponentGlobal_TampilanRupiah color="black" nominal={+e.target} />
|
||||
</Center>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@@ -6,15 +6,14 @@ import mqtt_client from "@/util/mqtt_client";
|
||||
import {
|
||||
Button,
|
||||
Group,
|
||||
Modal,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Textarea,
|
||||
Stack
|
||||
} from "@mantine/core";
|
||||
import { useShallowEffect } from "@mantine/hooks";
|
||||
import _ from "lodash";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
|
||||
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
|
||||
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
|
||||
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
|
||||
@@ -26,7 +25,6 @@ import { ComponentAdminInvestasi_DetailGambar } from "../_component/detail_gamba
|
||||
import { ComponentAdminInvestasi_UIDetailFile } from "../_component/ui_detail_file";
|
||||
import { adminInvestasi_funEditStatusPublishById } from "../fun/edit/fun_status_publish_by_id";
|
||||
import Admin_funRejectInvestasi from "../fun/fun_reject_investasi";
|
||||
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
|
||||
|
||||
export default function AdminInvestasi_DetailReview({
|
||||
dataInvestasi,
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import {
|
||||
AccentColor,
|
||||
MainColor,
|
||||
} from "@/app_modules/_global/color/color_pallet";
|
||||
import {
|
||||
Paper,
|
||||
Stack,
|
||||
Title,
|
||||
Spoiler,
|
||||
Center,
|
||||
Button,
|
||||
Center,
|
||||
Paper,
|
||||
Spoiler,
|
||||
Stack,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { IconImageInPicture } from "@tabler/icons-react";
|
||||
import moment from "moment";
|
||||
|
||||
import { MODEL_DONASI_PENCAIRAN_DANA } from "../../model/interface";
|
||||
import { RouterImagePreview } from "@/app/lib";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { MODEL_DONASI_PENCAIRAN_DANA } from "../../model/interface";
|
||||
|
||||
export function ComponentDonasi_CardPencairanDana({
|
||||
data,
|
||||
@@ -24,6 +25,7 @@ export function ComponentDonasi_CardPencairanDana({
|
||||
data: MODEL_DONASI_PENCAIRAN_DANA;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const [isLoading, setLoading] = useState(false);
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -48,12 +50,13 @@ export function ComponentDonasi_CardPencairanDana({
|
||||
</Spoiler>
|
||||
<Center>
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoading}
|
||||
radius={"xl"}
|
||||
leftIcon={<IconImageInPicture />}
|
||||
onClick={() => {
|
||||
// open();
|
||||
// setIdGambar(e.imagesId);
|
||||
router.push(RouterDonasi.bukti_transfer + data.imagesId, {
|
||||
setLoading(true);
|
||||
router.push(RouterImagePreview.main({ id: data.imageId }), {
|
||||
scroll: false,
|
||||
});
|
||||
}}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
"use client";
|
||||
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import { MainColor } from "@/app_modules/_global/color/color_pallet";
|
||||
import {
|
||||
AccentColor,
|
||||
MainColor,
|
||||
} from "@/app_modules/_global/color/color_pallet";
|
||||
ComponentGlobal_CardStyles,
|
||||
ComponentGlobal_LoadImageLandscape,
|
||||
} from "@/app_modules/_global/component";
|
||||
import ComponentGlobal_Loader from "@/app_modules/_global/component/loader";
|
||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
|
||||
import {
|
||||
AspectRatio,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Image,
|
||||
Progress,
|
||||
Stack,
|
||||
Text,
|
||||
@@ -29,11 +29,6 @@ import { Donasi_findDonaturByTokenId } from "../../fun/get/get_donatur_by_token_
|
||||
import { MODEL_DONASI } from "../../model/interface";
|
||||
import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur";
|
||||
import TampilanRupiahDonasi from "../tampilan_rupiah";
|
||||
import {
|
||||
ComponentGlobal_CardStyles,
|
||||
ComponentGlobal_LoadImageLandscape,
|
||||
} from "@/app_modules/_global/component";
|
||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
|
||||
|
||||
export function ComponentDonasi_DetailDataMain({
|
||||
donasi,
|
||||
@@ -70,7 +65,7 @@ export function ComponentDonasi_DetailDataMain({
|
||||
<TampilanRupiahDonasi nominal={+donasi?.terkumpul} />
|
||||
</Title>
|
||||
<Group>
|
||||
<Text fz={10}>Dari total</Text>{" "}
|
||||
<Text fz={10}>Dari target</Text>{" "}
|
||||
<TampilanRupiahDonasi
|
||||
nominal={+donasi?.target}
|
||||
fontSize={10}
|
||||
|
||||
@@ -1,37 +1,14 @@
|
||||
"use client";
|
||||
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import {
|
||||
AccentColor,
|
||||
MainColor,
|
||||
} from "@/app_modules/_global/color/color_pallet";
|
||||
import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information";
|
||||
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
|
||||
import { ComponentDonasi_InformasiPencairanDana } from "@/app_modules/donasi/component/card_view/box_informasi_pencarian_dana";
|
||||
import { ComponentDonasi_BoxPencariranDana } from "@/app_modules/donasi/component/card_view/box_pencairan_dana";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import {
|
||||
MODEL_DONASI,
|
||||
MODEL_DONASI_PENCAIRAN_DANA,
|
||||
} from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
AspectRatio,
|
||||
Button,
|
||||
Center,
|
||||
Grid,
|
||||
Image,
|
||||
Modal,
|
||||
Paper,
|
||||
Spoiler,
|
||||
Stack,
|
||||
Text,
|
||||
Title,
|
||||
Stack
|
||||
} from "@mantine/core";
|
||||
import { useDisclosure } from "@mantine/hooks";
|
||||
import { IconImageInPicture } from "@tabler/icons-react";
|
||||
import _ from "lodash";
|
||||
import moment from "moment";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function PencairanDanaDonasi({
|
||||
@@ -49,7 +26,10 @@ export default function PencairanDanaDonasi({
|
||||
<>
|
||||
<Stack>
|
||||
<ComponentDonasi_BoxPencariranDana akumulasi={akumulasi} />
|
||||
<ComponentDonasi_InformasiPencairanDana donasiId={donasiId} listPD={listPD} />
|
||||
<ComponentDonasi_InformasiPencairanDana
|
||||
donasiId={donasiId}
|
||||
listPD={listPD}
|
||||
/>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -144,4 +144,5 @@ export interface MODEL_DONASI_PENCAIRAN_DANA {
|
||||
donasiId: string;
|
||||
imagesId: string
|
||||
Donasi: MODEL_DONASI;
|
||||
imageId: string
|
||||
}
|
||||
|
||||
@@ -300,6 +300,8 @@ export default function Donasi_InvoiceProses({
|
||||
|
||||
{file !== null ? (
|
||||
<Button
|
||||
loaderPosition="center"
|
||||
loading={isLoading}
|
||||
radius={"xl"}
|
||||
bg={MainColor.yellow}
|
||||
color="yellow"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
import { ActionIcon, AppShell, Group, Header, Title } from "@mantine/core";
|
||||
import React from "react";
|
||||
import React, { useState } from "react";
|
||||
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||
import { IconX } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
@@ -11,6 +11,7 @@ import { gs_donasi_hot_menu } from "../../global_state";
|
||||
import AppComponentGlobal_LayoutTamplate from "@/app_modules/_global/component_layout_tamplate";
|
||||
import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate";
|
||||
import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate";
|
||||
import ComponentGlobal_Loader from "@/app_modules/_global/component/loader";
|
||||
|
||||
export default function LayoutDonasi_ProsesTransaksi({
|
||||
children,
|
||||
@@ -18,8 +19,10 @@ export default function LayoutDonasi_ProsesTransaksi({
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [donasiHotMenu, setDonasiHotMenu] = useAtom(gs_donasi_hot_menu);
|
||||
async function onClick() {
|
||||
setIsLoading(true);
|
||||
setDonasiHotMenu(2);
|
||||
router.push(RouterDonasi.main_donasi_saya);
|
||||
}
|
||||
@@ -31,20 +34,10 @@ export default function LayoutDonasi_ProsesTransaksi({
|
||||
title="Proses Transaksi"
|
||||
customButtonLeft={
|
||||
<ActionIcon variant="transparent" onClick={() => onClick()}>
|
||||
<IconX />
|
||||
{isLoading ? <ComponentGlobal_Loader /> : <IconX />}
|
||||
</ActionIcon>
|
||||
}
|
||||
/>
|
||||
|
||||
// <Header height={50} sx={{ borderStyle: "none" }}>
|
||||
// <Group h={50} position="apart" px={"md"}>
|
||||
// <ActionIcon variant="transparent" onClick={() => onClick()}>
|
||||
// <IconX />
|
||||
// </ActionIcon>
|
||||
// <Title order={5}>Proses Transaksi</Title>
|
||||
// <ActionIcon disabled variant="transparent"></ActionIcon>
|
||||
// </Group>
|
||||
// </Header>
|
||||
}
|
||||
>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user