Alur pembayaran donasi
# feat - Tampilan invoce - Proses acc admin - Transaksi berhasil # Issue: Hitungan progres masih salah
This commit is contained in:
@@ -1,159 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
AspectRatio,
|
||||
Box,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Image,
|
||||
Pagination,
|
||||
Paper,
|
||||
Progress,
|
||||
ScrollArea,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import {
|
||||
IconClover,
|
||||
IconMessageChatbot,
|
||||
IconMoneybag,
|
||||
} from "@tabler/icons-react";
|
||||
import router from "next/router";
|
||||
import moment from "moment";
|
||||
|
||||
export default function AdminDonasi_DetailPublish() {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<AdminDonasi_TombolKembali />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<TampilanDetailDonasi />
|
||||
<TampilanListDonatur />
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TampilanDetailDonasi() {
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} bg={"blue.1"} p={"md"}>
|
||||
<Stack>
|
||||
<Stack>
|
||||
<AspectRatio ratio={16 / 9}>
|
||||
<Paper radius={"md"}>
|
||||
<Image alt="Foto" src={"/aset/no-img.png"} />
|
||||
</Paper>
|
||||
</AspectRatio>
|
||||
<Title order={4}>Judul Donasi</Title>
|
||||
<Stack spacing={0}>
|
||||
<Group position="apart">
|
||||
<Stack spacing={0}>
|
||||
<Text fz={12}>Dana dibutuhkan</Text>
|
||||
<Title order={4} c="blue">
|
||||
Rp. 50.000.000
|
||||
</Title>
|
||||
</Stack>
|
||||
<Text fz={"xs"}>
|
||||
Sisa hari{" "}
|
||||
<Text span inherit fw={"bold"}>
|
||||
100
|
||||
</Text>{" "}
|
||||
</Text>
|
||||
</Group>
|
||||
</Stack>
|
||||
<Progress size={"lg"} value={50} />
|
||||
{/* <Grid>
|
||||
<Grid.Col
|
||||
span={"auto"}
|
||||
// onClick={() => router.push(RouterDonasi.donatur)}
|
||||
>
|
||||
<Stack align="center" spacing={"xs"}>
|
||||
<Group>
|
||||
<IconClover color="skyblue" />
|
||||
<Text>50</Text>
|
||||
</Group>
|
||||
<Text>Donatur</Text>
|
||||
</Stack>
|
||||
</Grid.Col>
|
||||
<Divider orientation="vertical" />
|
||||
<Grid.Col
|
||||
span={"auto"}
|
||||
// onClick={() => router.push(RouterDonasi.kabar)}
|
||||
>
|
||||
<Stack spacing={"sm"} align="center">
|
||||
<IconMessageChatbot color="skyblue" />
|
||||
<Text>Kabar Terbaru</Text>
|
||||
</Stack>
|
||||
</Grid.Col>
|
||||
<Divider orientation="vertical" />
|
||||
<Grid.Col
|
||||
span={"auto"}
|
||||
// onClick={() => router.push(RouterDonasi.pencairan_dana)}
|
||||
>
|
||||
<Stack spacing={"sm"} align="center">
|
||||
<IconMoneybag color="skyblue" />
|
||||
<Text>Pencairan Dana</Text>
|
||||
</Stack>
|
||||
</Grid.Col>
|
||||
</Grid> */}
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TampilanListDonatur() {
|
||||
const tableRows = Array(10)
|
||||
.fill(0)
|
||||
.map((e, i) => (
|
||||
<tr key={i}>
|
||||
<td>User {`${i + 1}`}</td>
|
||||
<td>
|
||||
Rp.{" "}
|
||||
{`${new Intl.NumberFormat("id-ID", {
|
||||
maximumFractionDigits: 10,
|
||||
}).format(i + 100000)}`}
|
||||
</td>
|
||||
<td> {`${moment(Date.now()).format("ll")}`}</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} bg={"cyan.1"} p={"md"}>
|
||||
<Stack>
|
||||
<Title order={4}>List Donatur</Title>
|
||||
<ScrollArea h={300}>
|
||||
<Table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama</th>
|
||||
<th>Jumlah Donasi</th>
|
||||
<th>Tanggal Donasi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableRows}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -1,17 +1,115 @@
|
||||
"use client";
|
||||
|
||||
import { Button, Stack, Text } from "@mantine/core";
|
||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||
import {
|
||||
AspectRatio,
|
||||
Button,
|
||||
Divider,
|
||||
Group,
|
||||
Image,
|
||||
Paper,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import { useState } from "react";
|
||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
|
||||
export default function AdminDonasi_DetailReject({
|
||||
closeModal,
|
||||
dataReject,
|
||||
}: {
|
||||
closeModal: any;
|
||||
dataReject: MODEL_DONASI;
|
||||
}) {
|
||||
const [donasi, setDonasi] = useState(dataReject);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<Text>Cooming Soon</Text>
|
||||
<Button onClick={() => closeModal()}>close</Button>
|
||||
<ButtonOnHeader />
|
||||
<SimpleGrid
|
||||
cols={2}
|
||||
spacing="lg"
|
||||
breakpoints={[
|
||||
{ maxWidth: "md", cols: 2, spacing: "md" },
|
||||
{ maxWidth: "sm", cols: 1, spacing: "sm" },
|
||||
{ maxWidth: "xs", cols: 1, spacing: "xs" },
|
||||
]}
|
||||
>
|
||||
<TampilanDetailDonasi donasi={donasi} />
|
||||
<CatatanReject catatan={donasi.catatan} />
|
||||
</SimpleGrid>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function ButtonOnHeader() {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<Group position="apart">
|
||||
<AdminDonasi_TombolKembali />
|
||||
<Button radius={"xl"} bg={"orange"} color="orange">
|
||||
Tambah catatan
|
||||
</Button>
|
||||
</Group>
|
||||
<Divider />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function CatatanReject({ catatan }: { catatan: string }) {
|
||||
return (
|
||||
<>
|
||||
<Stack>
|
||||
<Title order={6}>Alasan Penolakan</Title>
|
||||
<Text>{catatan}</Text>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -84,7 +84,7 @@ function ButtonOnHeader({ donasi }: { donasi: MODEL_DONASI }) {
|
||||
(res) => {
|
||||
if (res.status === 200) {
|
||||
NotifBerhasil(res.message);
|
||||
router.back()
|
||||
router.back();
|
||||
} else {
|
||||
NotifGagal(res.message);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
AspectRatio,
|
||||
Badge,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Divider,
|
||||
Grid,
|
||||
Group,
|
||||
Image,
|
||||
Pagination,
|
||||
Paper,
|
||||
Progress,
|
||||
ScrollArea,
|
||||
SimpleGrid,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import AdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||
import {
|
||||
IconClover,
|
||||
IconMessageChatbot,
|
||||
IconMoneybag,
|
||||
} from "@tabler/icons-react";
|
||||
import router from "next/router";
|
||||
import moment from "moment";
|
||||
import {
|
||||
MODEL_DONASI,
|
||||
MODEL_DONASI_INVOICE,
|
||||
} from "@/app_modules/donasi/model/interface";
|
||||
import { useState } from "react";
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import _ from "lodash";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useInterval, useShallowEffect } from "@mantine/hooks";
|
||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||
|
||||
export default function AdminDonasi_DetailPublish({
|
||||
dataPublish,
|
||||
listDonatur,
|
||||
countDonatur,
|
||||
}: {
|
||||
dataPublish: MODEL_DONASI;
|
||||
listDonatur: any[];
|
||||
countDonatur: number;
|
||||
}) {
|
||||
const [donasi, setDonasi] = useState(dataPublish);
|
||||
const [donatur, setDoanutur] = useState(listDonatur);
|
||||
const interval = useInterval(() => reloadData(donasi.id), 5000);
|
||||
|
||||
useShallowEffect(() => {
|
||||
interval.start();
|
||||
}, []);
|
||||
|
||||
async function reloadData(donasiId: string) {
|
||||
const data = await Donasi_getOneById(donasiId);
|
||||
setDonasi(data as any)
|
||||
return data;
|
||||
}
|
||||
return (
|
||||
<>
|
||||
{/* <pre>{JSON.stringify(donatur.map((e) => e), null, 2)}</pre> */}
|
||||
<Stack>
|
||||
<AdminDonasi_TombolKembali />
|
||||
<TampilanDetailDonasi donasi={donasi} countDonatur={countDonatur} />
|
||||
<TampilanListDonatur donatur={donatur} donasi={donasi} />
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TampilanDetailDonasi({
|
||||
donasi,
|
||||
countDonatur,
|
||||
}: {
|
||||
donasi: MODEL_DONASI;
|
||||
countDonatur: number;
|
||||
}) {
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} p={"md"}>
|
||||
<Stack>
|
||||
<Grid>
|
||||
<Grid.Col span={6}>
|
||||
<AspectRatio ratio={16 / 9}>
|
||||
<Paper radius={"md"}>
|
||||
<Image
|
||||
alt="Foto"
|
||||
src={RouterDonasi.api_gambar + `${donasi.imagesId}`}
|
||||
/>
|
||||
</Paper>
|
||||
</AspectRatio>
|
||||
</Grid.Col>
|
||||
<Grid.Col span={6}>
|
||||
<Stack spacing={7}>
|
||||
<Title order={4}>{donasi.title}</Title>
|
||||
<Text fz={"xs"}>
|
||||
Durasi: {donasi.DonasiMaster_Durasi.name} hari
|
||||
</Text>
|
||||
|
||||
<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">
|
||||
{donasi.progres} %
|
||||
</Title>
|
||||
</Group>
|
||||
<Group>
|
||||
<Text fz={12}>Dana terkumpul</Text>
|
||||
<Title order={5} c="blue">
|
||||
<TampilanRupiahDonasi nominal={+donasi.terkumpul} />
|
||||
</Title>
|
||||
</Group>
|
||||
</Stack>
|
||||
</Grid.Col>
|
||||
</Grid>
|
||||
</Stack>
|
||||
</Paper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function TampilanListDonatur({
|
||||
donatur,
|
||||
donasi,
|
||||
}: {
|
||||
donatur: MODEL_DONASI_INVOICE[];
|
||||
donasi: MODEL_DONASI;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
const tableRows = donatur.map((e, i) => (
|
||||
<tr key={i}>
|
||||
<td>{e.Author.username}</td>
|
||||
<td>
|
||||
<TampilanRupiahDonasi nominal={+e.nominal} />
|
||||
</td>
|
||||
<td> {`${moment(e.createdAt).format("ll")}`}</td>
|
||||
<td>
|
||||
<Center>
|
||||
<Badge w={150} variant="dot">
|
||||
{e.DonasiMaster_StatusInvoice.name}
|
||||
</Badge>
|
||||
</Center>
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<Paper radius={"md"} p={"md"}>
|
||||
<Stack>
|
||||
<Group position="apart">
|
||||
<Title order={3}>Update List Donatur</Title>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
variant="outline"
|
||||
onClick={() =>
|
||||
router.push(RouterAdminDonasi.proses_transaksi + `${donasi.id}`)
|
||||
}
|
||||
>
|
||||
Proses transaksi
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
{_.isEmpty(donatur) ? (
|
||||
<Paper bg={"gray.1"} p={"xs"}>
|
||||
<Center>BELUM ADA DONATUR</Center>
|
||||
</Paper>
|
||||
) : (
|
||||
<Paper withBorder p={"xs"}>
|
||||
<Table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama Donatur</th>
|
||||
<th>Jumlah Donasi</th>
|
||||
<th>Tanggal</th>
|
||||
<th>
|
||||
<Center>Status</Center>
|
||||
</th>
|
||||
{/* <th>
|
||||
<Center>Aksi</Center>
|
||||
</th> */}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableRows}</tbody>
|
||||
</Table>
|
||||
</Paper>
|
||||
)}
|
||||
|
||||
{/* <Group position="apart">
|
||||
{[{ id: 1 }, { id: 2 },{ id: 3 }, { id: 4 }].map((e, i) => (
|
||||
<Button key={i}>Status</Button>
|
||||
))}
|
||||
</Group> */}
|
||||
</Stack>
|
||||
</Paper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
ActionIcon,
|
||||
Box,
|
||||
Button,
|
||||
Center,
|
||||
Group,
|
||||
HoverCard,
|
||||
Paper,
|
||||
Stack,
|
||||
Table,
|
||||
Text,
|
||||
Title,
|
||||
} from "@mantine/core";
|
||||
import AdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||
import { MODEL_DONASI_INVOICE } from "@/app_modules/donasi/model/interface";
|
||||
import { useState } from "react";
|
||||
import moment from "moment";
|
||||
import { IconQuestionMark } from "@tabler/icons-react";
|
||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||
import { AdminDonasi_funUpdateStatusInvoice } from "../../fun/update/fun_update_status_invoice";
|
||||
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
|
||||
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||
import { AdminDonasi_getListStatusInvoiceProses } from "../../fun/get/get_list_status_invoice_proses";
|
||||
import { AdminDonasi_funUpdateProgresDanTerkumpul } from "../../fun/update/fun_update_progres_dan_terkumpul";
|
||||
|
||||
export default function AdminDonasi_ProsesTransaksi({
|
||||
listProses,
|
||||
}: {
|
||||
listProses: MODEL_DONASI_INVOICE[];
|
||||
}) {
|
||||
const [invoice, setInvoice] = useState<MODEL_DONASI_INVOICE[] | any[]>(
|
||||
listProses
|
||||
);
|
||||
|
||||
async function onClick(invoice: MODEL_DONASI_INVOICE) {
|
||||
let nominal: number = +invoice.nominal;
|
||||
let terkumpulSementaras: number = +invoice.Donasi.terkumpul;
|
||||
const totalTerkumpul = terkumpulSementaras + nominal;
|
||||
|
||||
await AdminDonasi_funUpdateStatusInvoice(invoice.id, "1").then(
|
||||
async (res) => {
|
||||
if (res.status === 200) {
|
||||
NotifBerhasil(res.message);
|
||||
await AdminDonasi_funUpdateProgresDanTerkumpul(
|
||||
invoice.Donasi.id,
|
||||
totalTerkumpul
|
||||
).then(async (res) => {
|
||||
if (res.status === 200) {
|
||||
await AdminDonasi_getListStatusInvoiceProses(
|
||||
invoice.Donasi.id
|
||||
).then((res) => {
|
||||
setInvoice(res);
|
||||
});
|
||||
} else {
|
||||
NotifGagal(res.message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
NotifGagal(res.message);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const rowTable = invoice.map((e) => (
|
||||
<tr key={e.id}>
|
||||
<td>{e.Author.username}</td>
|
||||
<td>
|
||||
<TampilanRupiahDonasi nominal={+e.nominal} />
|
||||
</td>
|
||||
<td>
|
||||
<Center>{e.DonasiMaster_Bank.name}</Center>
|
||||
</td>
|
||||
<td>{`${moment(e.createdAt).format("ll")}`}</td>
|
||||
<td>
|
||||
<Center>
|
||||
<Button
|
||||
radius={"xl"}
|
||||
variant="outline"
|
||||
color="green"
|
||||
onClick={() => onClick(e)}
|
||||
>
|
||||
Accept
|
||||
</Button>
|
||||
</Center>{" "}
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* <pre>{JSON.stringify(invoice, null, 2)}</pre> */}
|
||||
<Stack>
|
||||
<AdminDonasi_TombolKembali />
|
||||
<Stack>
|
||||
<HeaderPage />
|
||||
|
||||
<Paper p={"md"} withBorder>
|
||||
<Table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama</th>
|
||||
<th>Nominal</th>
|
||||
<th>
|
||||
<Center>Metode Pembayaran</Center>
|
||||
</th>
|
||||
<th>Tanggal</th>
|
||||
<th>
|
||||
<Center>Aksi</Center>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{rowTable}</tbody>
|
||||
</Table>
|
||||
</Paper>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function HeaderPage() {
|
||||
return (
|
||||
<>
|
||||
<Group position="apart" px={"md"}>
|
||||
<Title order={5}>Update Status Donatur</Title>
|
||||
<Group position="left">
|
||||
<HoverCard width={280} shadow="md">
|
||||
<HoverCard.Target>
|
||||
<ActionIcon bg={"gray.3"} radius={"xl"}>
|
||||
<IconQuestionMark color="black" />
|
||||
</ActionIcon>
|
||||
</HoverCard.Target>
|
||||
<HoverCard.Dropdown>
|
||||
<Group spacing={4}>
|
||||
<Text fz="sm">Sebelum melakukan aksi</Text>
|
||||
<Text fz="sm" fw={"bold"} c={"green"}>
|
||||
ACCEPT
|
||||
</Text>
|
||||
<Text fz={"sm"}>
|
||||
Pastikan kembali transaksi donatur sesuai dengan mutasi pada
|
||||
Bank tertuju
|
||||
</Text>
|
||||
</Group>
|
||||
</HoverCard.Dropdown>
|
||||
</HoverCard>
|
||||
</Group>
|
||||
</Group>
|
||||
</>
|
||||
);
|
||||
}
|
||||
13
src/app_modules/admin/donasi/fun/count/fun_count_donatur.ts
Normal file
13
src/app_modules/admin/donasi/fun/count/fun_count_donatur.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminDonasi_funCountDonatur(donasiId: string) {
|
||||
const donatur = await prisma.donasi_Invoice.count({
|
||||
where: {
|
||||
donasiId: donasiId
|
||||
}
|
||||
});
|
||||
|
||||
return donatur;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminDonasi_getListDonatur(donasiId: string) {
|
||||
// console.log(donasiId)
|
||||
const data = await prisma.donasi_Invoice.findMany({
|
||||
where: {
|
||||
donasiId: donasiId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
nominal: true,
|
||||
createdAt: true,
|
||||
Author: true,
|
||||
DonasiMaster_StatusInvoice: true
|
||||
},
|
||||
});
|
||||
|
||||
// console.log(data)
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminDonasi_getListStatusInvoiceProses(donasiId: string) {
|
||||
const dataStatus = await prisma.donasi_Invoice.findMany({
|
||||
where: {
|
||||
donasiId: donasiId,
|
||||
donasiMaster_StatusInvoiceId: {
|
||||
equals: "2",
|
||||
},
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
nominal: true,
|
||||
createdAt: true,
|
||||
Author: true,
|
||||
Donasi: {
|
||||
select: {
|
||||
id: true,
|
||||
title: true,
|
||||
target: true,
|
||||
active: true,
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
publishTime: true,
|
||||
catatan: true,
|
||||
terkumpul: true,
|
||||
authorId: true,
|
||||
imagesId: true,
|
||||
donasiMaster_KategoriId: true,
|
||||
donasiMaster_DurasiId: true,
|
||||
donasiMaster_StatusDonasiId: true,
|
||||
Author: true,
|
||||
imageDonasi: true,
|
||||
CeritaDonasi: true,
|
||||
DonasiMaster_Ketegori: true,
|
||||
DonasiMaster_Durasi: true,
|
||||
DonasiMaster_Status: true,
|
||||
},
|
||||
},
|
||||
DonasiMaster_Bank: true,
|
||||
DonasiMaster_StatusInvoice: true,
|
||||
},
|
||||
});
|
||||
|
||||
return dataStatus;
|
||||
}
|
||||
@@ -15,6 +15,9 @@ export async function AdminDonasi_getById(id: string) {
|
||||
createdAt: true,
|
||||
updatedAt: true,
|
||||
publishTime: true,
|
||||
catatan: true,
|
||||
progres: true,
|
||||
terkumpul: true,
|
||||
authorId: true,
|
||||
imagesId: true,
|
||||
donasiMaster_KategoriId: true,
|
||||
|
||||
@@ -22,7 +22,7 @@ export async function AdminDonasi_funUpdateStatusPublish(
|
||||
});
|
||||
|
||||
if (!data) return { status: 400, message: "Data tidak ditemukan" };
|
||||
revalidatePath(RouterAdminDonasi.table_review);
|
||||
revalidatePath("/dev/admin/donasi/table/review");
|
||||
return {
|
||||
status: 200,
|
||||
message: "Status berhasil diganti",
|
||||
|
||||
@@ -10,19 +10,18 @@ export async function AdminDonasi_funUpdateStatusReject(
|
||||
statusId: string,
|
||||
catatan: string
|
||||
) {
|
||||
|
||||
const data = await prisma.donasi.update({
|
||||
where: {
|
||||
id: donasiId,
|
||||
},
|
||||
data: {
|
||||
donasiMaster_StatusDonasiId: statusId,
|
||||
catatan: catatan
|
||||
catatan: catatan,
|
||||
},
|
||||
});
|
||||
|
||||
if (!data) return { status: 400, message: "Data tidak ditemukan" };
|
||||
revalidatePath(RouterAdminDonasi.table_review);
|
||||
revalidatePath("/dev/admin/donasi/table/review");
|
||||
return {
|
||||
status: 200,
|
||||
message: "Status berhasil diganti",
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
|
||||
export async function AdminDonasi_funUpdateProgresDanTerkumpul(
|
||||
donasiId: string,
|
||||
terkumpul: number
|
||||
) {
|
||||
const danaTerkumpul = terkumpul.toString();
|
||||
|
||||
const update = await prisma.donasi.update({
|
||||
where: {
|
||||
id: donasiId,
|
||||
},
|
||||
data: {
|
||||
terkumpul: danaTerkumpul,
|
||||
},
|
||||
});
|
||||
|
||||
if (!update) return { status: 400, message: "Update dana terkumpul gagal" };
|
||||
let target: number = +update.target;
|
||||
let totalTerkumpul = Number(update.terkumpul);
|
||||
let progresSementarsa = Number(update.progres);
|
||||
|
||||
const progress = (totalTerkumpul / target) * 100;
|
||||
const totalProgres = progresSementarsa + progress;
|
||||
|
||||
const updateProgres = await prisma.donasi.update({
|
||||
where: { id: donasiId },
|
||||
data: { progres: totalProgres.toString() },
|
||||
});
|
||||
|
||||
if (!updateProgres) return { status: 400, message: "Update progres gagal" };
|
||||
return {
|
||||
status: 200,
|
||||
message: "Berhasil update data donasi",
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
"use server";
|
||||
|
||||
import prisma from "@/app/lib/prisma";
|
||||
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
export async function AdminDonasi_funUpdateStatusInvoice(
|
||||
invoiceId: string,
|
||||
statusId: string
|
||||
) {
|
||||
const update = await prisma.donasi_Invoice.update({
|
||||
where: {
|
||||
id: invoiceId,
|
||||
},
|
||||
data: {
|
||||
donasiMaster_StatusInvoiceId: statusId,
|
||||
},
|
||||
});
|
||||
if (!update) return { status: 400, message: "Update gagal" };
|
||||
revalidatePath("/dev/admin/donasi/detail/publish")
|
||||
return {
|
||||
status: 200,
|
||||
message: "Update berhasil",
|
||||
};
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
import AdminDonasi_Main from "./main";
|
||||
import AdminDonasi_TablePublish from "./table_status/table_publish";
|
||||
import AdminDonasi_DetailPublish from "./detail_table/detail_publish";
|
||||
import AdminDonasi_DetailPublish from "./detail_table/publish/detail_publish";
|
||||
import AdminDonasi_TableReview from "./table_status/table_review";
|
||||
import AdminDonasi_DetailReview from "./detail_table/detail_review";
|
||||
import AdminDonasi_TableReject from "./table_status/table_reject";
|
||||
import AdminDonasi_DetailReject from "./detail_table/detail_reject";
|
||||
import AdminDonasi_ProsesTransaksi from "./detail_table/publish/proses_transaksi";
|
||||
|
||||
export {
|
||||
AdminDonasi_Main,
|
||||
|
||||
@@ -37,9 +37,7 @@ export default function AdminDonasi_TablePublish({
|
||||
function TableStatus({ listPublish }: { listPublish: MODEL_DONASI[] }) {
|
||||
const router = useRouter();
|
||||
const [donasi, setDonasi] = useState(listPublish);
|
||||
async function onClick() {
|
||||
router.push(RouterAdminDonasi.detail_publish);
|
||||
}
|
||||
|
||||
|
||||
const TableRows = donasi.map((e, i) => (
|
||||
<tr key={i}>
|
||||
@@ -57,7 +55,7 @@ function TableStatus({ listPublish }: { listPublish: MODEL_DONASI[] }) {
|
||||
leftIcon={<IconEyeCheck />}
|
||||
radius={"xl"}
|
||||
variant="outline"
|
||||
onClick={onClick}
|
||||
onClick={() => router.push(RouterAdminDonasi.detail_publish + `${e.id}`)}
|
||||
>
|
||||
Tampilkan
|
||||
</Button>
|
||||
|
||||
@@ -42,17 +42,6 @@ function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
|
||||
const [opened, { open, close }] = useDisclosure(false);
|
||||
const [donasi, setDonasi] = useState(dataReject);
|
||||
|
||||
function onClick() {
|
||||
return (
|
||||
<Modal opened={opened} onClose={close} centered withCloseButton={false}>
|
||||
<Stack>
|
||||
<Title order={6}>Alasan penolakan</Title>
|
||||
<Text>{"test"}</Text>
|
||||
</Stack>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
const TableRows = donasi.map((e, i) => (
|
||||
<tr key={i}>
|
||||
<td>{e.title}</td>
|
||||
@@ -61,7 +50,6 @@ function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
|
||||
</td>
|
||||
<td>{e.DonasiMaster_Ketegori.name}</td>
|
||||
<td>{e.DonasiMaster_Durasi.name} hari</td>
|
||||
<td>{e.catatan}</td>
|
||||
<td>
|
||||
<Center>
|
||||
<Button
|
||||
@@ -70,20 +58,33 @@ function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
|
||||
leftIcon={<IconEyeCheck />}
|
||||
radius={"xl"}
|
||||
variant="outline"
|
||||
onClick={() => {
|
||||
onClick()
|
||||
// onClick(e.catatan);
|
||||
}}
|
||||
onClick={() => router.push(RouterAdminDonasi.detail_reject + `${e.id}`)}
|
||||
>
|
||||
Tampilkan
|
||||
</Button>
|
||||
</Center>
|
||||
|
||||
{/* <ModalReject opened={opened} close={close} /> */}
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
{donasi.map((e,i) => (
|
||||
<Modal
|
||||
key={e.id}
|
||||
opened={opened}
|
||||
onClose={close}
|
||||
centered
|
||||
withCloseButton={false}
|
||||
>
|
||||
<Stack>
|
||||
<Title order={6}>Alasan penolakan</Title>
|
||||
<Text>{i}</Text>
|
||||
</Stack>
|
||||
</Modal>
|
||||
))}
|
||||
<Box>
|
||||
<Box bg={"red.1"} p={"xs"}>
|
||||
<Title order={6} c={"red"}>
|
||||
@@ -104,7 +105,6 @@ function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
|
||||
<th>Target</th>
|
||||
<th>Ketegori</th>
|
||||
<th>Durasi</th>
|
||||
<th>Catatan</th>
|
||||
<th>
|
||||
<Center>Lihat alasan</Center>
|
||||
</th>
|
||||
@@ -116,3 +116,16 @@ function TableStatus({ dataReject }: { dataReject: MODEL_DONASI[] }) {
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
async function ModalReject(opened: any, close: any) {
|
||||
return (
|
||||
<>
|
||||
<Modal opened={opened} onClose={close} centered withCloseButton={false}>
|
||||
<Stack>
|
||||
<Title order={6}>Alasan penolakan</Title>
|
||||
<Text>{"test"}</Text>
|
||||
</Stack>
|
||||
</Modal>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user