Admin Investasi
# feat: - Ganti status dan reject ### No issue
This commit is contained in:
21
src/app_modules/admin/investasi/fun/fun_reject_investasi.ts
Normal file
21
src/app_modules/admin/investasi/fun/fun_reject_investasi.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
"use server"
|
||||
|
||||
import prisma from "@/app/lib/prisma"
|
||||
|
||||
export default async function funRejectInvestasi(data: any) {
|
||||
// console.log(data)
|
||||
|
||||
const res = await prisma.investasi.update({
|
||||
where: { id: data.id },
|
||||
data: {
|
||||
masterStatusInvestasiId: data.status,
|
||||
catatan: data.catatan
|
||||
}
|
||||
})
|
||||
if(!res) return {status: 400, message: "Gagal reject"}
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
message: "Reject berhasil"
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ export default async function Admin_funGetAllInvestasi() {
|
||||
roi: true,
|
||||
active: true,
|
||||
imagesId: true,
|
||||
catatan: true,
|
||||
MasterStatusInvestasi: true,
|
||||
BeritaInvestasi: true,
|
||||
DokumenInvestasi: true,
|
||||
|
||||
@@ -52,6 +52,7 @@ import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import toast from "react-simple-toasts";
|
||||
import funRejectInvestasi from "../fun/fun_reject_investasi";
|
||||
|
||||
export default function Admin_KonfirmasiInvestasi({
|
||||
dataInvestasi,
|
||||
@@ -89,23 +90,33 @@ export default function Admin_KonfirmasiInvestasi({
|
||||
},
|
||||
];
|
||||
|
||||
// useShallowEffect(() => {
|
||||
// cekStatusPublish()
|
||||
// },[])
|
||||
useShallowEffect(() => {
|
||||
cekStatusPublish();
|
||||
}, []);
|
||||
|
||||
// async function cekStatusPublish() {
|
||||
// if(investasi.MasterStatusInvestasi.id === "3")
|
||||
// setPublish(false)
|
||||
// }
|
||||
async function cekStatusPublish() {
|
||||
if (investasi.MasterStatusInvestasi.id === "3") setPublish(false);
|
||||
}
|
||||
|
||||
async function onCatatan() {
|
||||
if (_.isEmpty(catatan)) return toast("Lengkapi alasan");
|
||||
console.log(catatan);
|
||||
toggle();
|
||||
async function onReject() {
|
||||
const body = {
|
||||
id: investasi.id,
|
||||
catatan: catatan,
|
||||
status: "4",
|
||||
};
|
||||
if (_.isEmpty(body.catatan)) return toast("Lengkapi alasan");
|
||||
await funRejectInvestasi(body).then((res) => {
|
||||
if (res.status === 200) {
|
||||
toast(res.message);
|
||||
toggle();
|
||||
} else {
|
||||
toast(res.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function onPublish() {
|
||||
// const res = await funGantiStatusInvestasi(investasi.id, "3")
|
||||
const res = await funGantiStatusInvestasi(investasi.id, "3");
|
||||
setTimeout(() => setPublish(false), 1000);
|
||||
toast("Proyek Investasi Di Publish");
|
||||
}
|
||||
@@ -113,20 +124,28 @@ export default function Admin_KonfirmasiInvestasi({
|
||||
return (
|
||||
<>
|
||||
<Group position="apart" px={"md"}>
|
||||
<Flex align={"center"} gap={"xs"}>
|
||||
<Avatar
|
||||
radius={50}
|
||||
size={"lg"}
|
||||
src={
|
||||
RouterUserProfile.api_foto + `${user.Profile?.ImageProfile?.url}`
|
||||
}
|
||||
/>
|
||||
<Text>{user.username}</Text>
|
||||
</Flex>
|
||||
<Group>
|
||||
<ActionIcon onClick={() => router.back()}>
|
||||
<IconChevronLeft />
|
||||
</ActionIcon>
|
||||
<Flex align={"center"} gap={"xs"} pl={"lg"}>
|
||||
<Avatar
|
||||
radius={50}
|
||||
size={"md"}
|
||||
src={
|
||||
RouterUserProfile.api_foto +
|
||||
`${user.Profile?.ImageProfile?.url}`
|
||||
}
|
||||
/>
|
||||
<Text>{user.username}</Text>
|
||||
</Flex>
|
||||
</Group>
|
||||
<Group>
|
||||
{" "}
|
||||
<Center>
|
||||
{publish ? (
|
||||
{!publish || investasi.MasterStatusInvestasi.id === "4" ? (
|
||||
""
|
||||
) : (
|
||||
<Button
|
||||
radius={50}
|
||||
bg={"green"}
|
||||
@@ -138,30 +157,33 @@ export default function Admin_KonfirmasiInvestasi({
|
||||
>
|
||||
Publish
|
||||
</Button>
|
||||
) : (
|
||||
<Button
|
||||
radius={50}
|
||||
leftIcon={<IconBan />}
|
||||
bg={"orange"}
|
||||
color="orange"
|
||||
onClick={() => {
|
||||
setTimeout(() => setPublish(true), 1000);
|
||||
toast("Proyek Investasi Di Non-Aktifkan");
|
||||
}}
|
||||
>
|
||||
Non - aktifkan
|
||||
</Button>
|
||||
// <Button
|
||||
// radius={50}
|
||||
// leftIcon={<IconBan />}
|
||||
// bg={"orange"}
|
||||
// color="orange"
|
||||
// onClick={() => {
|
||||
// setTimeout(() => setPublish(true), 1000);
|
||||
// toast("Proyek Investasi Di Non-Aktifkan");
|
||||
// }}
|
||||
// >
|
||||
// Non - aktifkan
|
||||
// </Button>
|
||||
)}
|
||||
</Center>
|
||||
<Button
|
||||
radius={50}
|
||||
bg={"red"}
|
||||
color="red"
|
||||
onClick={toggle}
|
||||
rightIcon={<IconAlertHexagonFilled />}
|
||||
>
|
||||
Reject
|
||||
</Button>
|
||||
{investasi.MasterStatusInvestasi.id === "3" ? (
|
||||
""
|
||||
) : (
|
||||
<Button
|
||||
radius={50}
|
||||
bg={"red"}
|
||||
color="red"
|
||||
onClick={toggle}
|
||||
rightIcon={<IconAlertHexagonFilled />}
|
||||
>
|
||||
Reject
|
||||
</Button>
|
||||
)}
|
||||
</Group>
|
||||
</Group>
|
||||
|
||||
@@ -286,9 +308,7 @@ export default function Admin_KonfirmasiInvestasi({
|
||||
<Text>{e.title}</Text>
|
||||
<Link
|
||||
target="_blank"
|
||||
href={
|
||||
RouterInvestasi.api_file_dokumen + `${e.id}`
|
||||
}
|
||||
href={RouterInvestasi.api_file_dokumen + `${e.id}`}
|
||||
>
|
||||
<Button compact radius={50}>
|
||||
Buka
|
||||
@@ -319,7 +339,7 @@ export default function Admin_KonfirmasiInvestasi({
|
||||
onChange={(val) => setCatatan(val.target.value)}
|
||||
/>
|
||||
<Group position="right">
|
||||
<Button radius={50} compact onClick={() => onCatatan()}>
|
||||
<Button radius={50} compact onClick={() => onReject()}>
|
||||
Simpan
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
79
src/app_modules/admin/investasi/main/table_publish.tsx
Normal file
79
src/app_modules/admin/investasi/main/table_publish.tsx
Normal file
@@ -0,0 +1,79 @@
|
||||
import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
|
||||
import {
|
||||
Badge,
|
||||
ActionIcon,
|
||||
Box,
|
||||
ScrollArea,
|
||||
Table,
|
||||
Tooltip,
|
||||
} from "@mantine/core";
|
||||
import { IconEyeCheck } from "@tabler/icons-react";
|
||||
import { IconEdit, IconEye } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function TablePublish({
|
||||
dataInvestsi,
|
||||
}: {
|
||||
dataInvestsi: MODEL_Investasi[];
|
||||
}) {
|
||||
const [investasi, setInvestasi] = useState(dataInvestsi);
|
||||
const router = useRouter();
|
||||
|
||||
const tableBody = investasi.map((e) =>
|
||||
e.MasterStatusInvestasi.id === "3" ? (
|
||||
<tr key={e.id}>
|
||||
<td>{e.title}</td>
|
||||
<td>
|
||||
{e.MasterStatusInvestasi.id === "3" ? (
|
||||
<Badge variant="dot" color="green">
|
||||
{e.MasterStatusInvestasi.name}
|
||||
</Badge>
|
||||
) : (
|
||||
"-"
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<Tooltip label="Detail" withArrow position="bottom">
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() =>
|
||||
router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
|
||||
}
|
||||
>
|
||||
<IconEyeCheck />
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
</td>
|
||||
</tr>
|
||||
) : (
|
||||
""
|
||||
)
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box my={"lg"}>
|
||||
<ScrollArea w={"100%"}>
|
||||
{/* <Title order={5} mb={5}>
|
||||
List Publish
|
||||
</Title> */}
|
||||
<Badge color="green" variant="light" radius={0} size={"xl"}>
|
||||
Publish
|
||||
</Badge>
|
||||
<Table withBorder highlightOnHover>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama Proyek Investasi</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableBody}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
77
src/app_modules/admin/investasi/main/table_reject.tsx
Normal file
77
src/app_modules/admin/investasi/main/table_reject.tsx
Normal file
@@ -0,0 +1,77 @@
|
||||
import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
|
||||
import {
|
||||
Badge,
|
||||
ActionIcon,
|
||||
Box,
|
||||
ScrollArea,
|
||||
Table,
|
||||
Tooltip,
|
||||
} from "@mantine/core";
|
||||
import { IconEdit } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function TableReject({
|
||||
dataInvestsi,
|
||||
}: {
|
||||
dataInvestsi: MODEL_Investasi[];
|
||||
}) {
|
||||
const [investasi, setInvestasi] = useState(dataInvestsi);
|
||||
const router = useRouter();
|
||||
|
||||
const tableBody = investasi.map((e) =>
|
||||
e.MasterStatusInvestasi.id === "4" ? (
|
||||
<tr key={e.id}>
|
||||
<td>{e.title}</td>
|
||||
<td>
|
||||
{e.MasterStatusInvestasi.id === "4" ? (
|
||||
<Badge variant="dot" color="red">
|
||||
{e.MasterStatusInvestasi.name}
|
||||
</Badge>
|
||||
) : (
|
||||
"-"
|
||||
)}
|
||||
</td>
|
||||
<td>{e.catatan}</td>
|
||||
<td>
|
||||
<Tooltip label="Konfirmasi" withArrow position="bottom">
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() =>
|
||||
router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
|
||||
}
|
||||
>
|
||||
<IconEdit />
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
</td>
|
||||
</tr>
|
||||
) : (
|
||||
""
|
||||
)
|
||||
);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box my={"lg"}>
|
||||
<ScrollArea w={"100%"}>
|
||||
<Badge color="red" variant="light" radius={0} size={"xl"}>
|
||||
Reject
|
||||
</Badge>
|
||||
<Table withBorder highlightOnHover>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama Proyek Investasi</th>
|
||||
<th>Status</th>
|
||||
<th>Catatan</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableBody}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
74
src/app_modules/admin/investasi/main/table_review.tsx
Normal file
74
src/app_modules/admin/investasi/main/table_review.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
import { RouterAdminInvestasi } from "@/app/lib/router_hipmi/router_admin";
|
||||
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
|
||||
import {
|
||||
Badge,
|
||||
ActionIcon,
|
||||
Box,
|
||||
ScrollArea,
|
||||
Table,
|
||||
Tooltip,
|
||||
} from "@mantine/core";
|
||||
import { IconEdit } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function TableReview({
|
||||
dataInvestsi,
|
||||
}: {
|
||||
dataInvestsi: MODEL_Investasi[];
|
||||
}) {
|
||||
const [investasi, setInvestasi] = useState(dataInvestsi);
|
||||
const router = useRouter();
|
||||
|
||||
const tableBody = investasi.map((e) =>
|
||||
e.MasterStatusInvestasi.id === "2" ? (
|
||||
<tr key={e.id}>
|
||||
<td>{e.title}</td>
|
||||
<td>
|
||||
{e.MasterStatusInvestasi.id === "2" ? (
|
||||
<Badge variant="dot" color="orange">
|
||||
{e.MasterStatusInvestasi.name}
|
||||
</Badge>
|
||||
) : (
|
||||
"-"
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<Tooltip label="Konfirmasi" withArrow position="bottom">
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() =>
|
||||
router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
|
||||
}
|
||||
>
|
||||
<IconEdit />
|
||||
</ActionIcon>
|
||||
</Tooltip>
|
||||
</td>
|
||||
</tr>
|
||||
) : (
|
||||
""
|
||||
)
|
||||
);
|
||||
return (
|
||||
<>
|
||||
<Box my={"lg"}>
|
||||
<ScrollArea w={"100%"}>
|
||||
<Badge color="orange" variant="light" radius={0} size={"xl"}>
|
||||
Review
|
||||
</Badge>
|
||||
<Table withBorder highlightOnHover>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama Proyek Investasi</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableBody}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -19,6 +19,9 @@ import {
|
||||
import { IconEdit } from "@tabler/icons-react";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import TablePublish from "./table_publish";
|
||||
import TableReview from "./table_review";
|
||||
import TableReject from "./table_reject";
|
||||
|
||||
export default function Admin_Investasi({
|
||||
listInvestasi,
|
||||
@@ -59,33 +62,6 @@ export default function Admin_Investasi({
|
||||
},
|
||||
];
|
||||
|
||||
const tableBody = investasi.map((e) => (
|
||||
<tr key={e.id}>
|
||||
<td>{e.title}</td>
|
||||
<td>
|
||||
{e.MasterStatusInvestasi.id === "3" ? (
|
||||
<Badge variant="dot" color="green">
|
||||
{e.MasterStatusInvestasi.name}
|
||||
</Badge>
|
||||
) : (
|
||||
<Badge variant="dot" color="red">
|
||||
{e.MasterStatusInvestasi.name}
|
||||
</Badge>
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<ActionIcon
|
||||
variant="transparent"
|
||||
onClick={() =>
|
||||
router.push(RouterAdminInvestasi.konfirmasi + `${e.id}`)
|
||||
}
|
||||
>
|
||||
<IconEdit />
|
||||
</ActionIcon>
|
||||
</td>
|
||||
</tr>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<Title>Investasi</Title>
|
||||
@@ -108,67 +84,16 @@ export default function Admin_Investasi({
|
||||
</Grid.Col>
|
||||
))}
|
||||
</Grid>
|
||||
|
||||
<Box my={"lg"}>
|
||||
<Center my={"xs"}>
|
||||
<Text>List Investasi</Text>
|
||||
</Center>
|
||||
<ScrollArea w={"100%"}>
|
||||
<Table withBorder highlightOnHover>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nama Proyek Investasi</th>
|
||||
<th>Status</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>{tableBody}</tbody>
|
||||
</Table>
|
||||
</ScrollArea>
|
||||
</Box>
|
||||
<TablePublish dataInvestsi={investasi as any} />
|
||||
<TableReview dataInvestsi={investasi as any} />
|
||||
<TableReject dataInvestsi={investasi as any} />
|
||||
{/* <pre>{JSON.stringify(investasi, null, 2)}</pre> */}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
// const listTable = [
|
||||
// {
|
||||
// id: 1,
|
||||
// status: {
|
||||
// id: 1,
|
||||
// name: "Publish",
|
||||
// },
|
||||
// name: "Subway Kuta",
|
||||
// },
|
||||
// {
|
||||
// id: 2,
|
||||
// status: {
|
||||
// id: 2,
|
||||
// name: "Review",
|
||||
// },
|
||||
// name: "Event MCD",
|
||||
// },
|
||||
// {
|
||||
// id: 3,
|
||||
// status: {
|
||||
// id: 2,
|
||||
// name: " Review",
|
||||
// },
|
||||
// name: "Villa Batubulan",
|
||||
// },
|
||||
// {
|
||||
// id: 4,
|
||||
// status: {
|
||||
// id: 1,
|
||||
// name: "Publish",
|
||||
// },
|
||||
// name: "Kost Alif Denpasar",
|
||||
// },
|
||||
// {
|
||||
// id: 5,
|
||||
// status: {
|
||||
// id: 1,
|
||||
// name: "Publish",
|
||||
// },
|
||||
// name: "Pabrik Rokok Surya Gandum",
|
||||
// },
|
||||
// ];
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user