Admin Investasi

# feat:
- Ganti status dan reject
### No issue
This commit is contained in:
2023-11-14 12:01:26 +08:00
parent 67212ca035
commit 989c9eed32
16 changed files with 341 additions and 158 deletions

View 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"
}
}

View File

@@ -21,6 +21,7 @@ export default async function Admin_funGetAllInvestasi() {
roi: true,
active: true,
imagesId: true,
catatan: true,
MasterStatusInvestasi: true,
BeritaInvestasi: true,
DokumenInvestasi: true,

View File

@@ -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>

View 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>
</>
);
}

View 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>
</>
);
}

View 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>
</>
);
}

View File

@@ -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",
// },
// ];