Review Investasi

# feat
- Ubah status ke review dan sebaliknya
- Lihat dokumen, prospektus, dan berita di review status
### no issue
This commit is contained in:
2023-11-09 13:46:56 +08:00
parent 14c0fb4e21
commit 64aac72b5d
67 changed files with 269642 additions and 193 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -1,9 +1,13 @@
import { BeritaInvestasi } from "@/app_modules/investasi"; import { BeritaInvestasi } from "@/app_modules/investasi";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
export default async function Page({params}: {params: {id: string}}) { export default async function Page({params}: {params: {id: string}}) {
const dataInvestasi = await getOneInvestasiById(params.id)
return ( return (
<> <>
<BeritaInvestasi id={params.id}/> <BeritaInvestasi dataInvestasi={dataInvestasi as any}/>
</> </>
); );
} }

View File

@@ -1,7 +1,12 @@
import { DetailBeritaInvestasi } from "@/app_modules/investasi"; import { DetailBeritaInvestasi } from "@/app_modules/investasi";
import getOneBeritaInvestasiById from "@/app_modules/investasi/fun/get_one_berita_by_id";
export default async function Page({params}: {params: {id: string}}) {
// console.log(params.id)
const dataBerita = await getOneBeritaInvestasiById(params.id)
// console.log(dataBerita)
export default async function Page() {
return <> return <>
<DetailBeritaInvestasi/> <DetailBeritaInvestasi dataBerita={dataBerita as any}/>
</> </>
} }

View File

@@ -1,7 +1,10 @@
import { DetailDokumenInvestasi } from "@/app_modules/investasi"; import { DetailDokumenInvestasi } from "@/app_modules/investasi";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
export default async function Page() { export default async function Page({params}: {params: {id: string}}) {
const dataInvestasi = await getOneInvestasiById(params.id)
// console.log(params.id)
return<> return<>
<DetailDokumenInvestasi/> <DetailDokumenInvestasi dataInvestasi={dataInvestasi as any}/>
</> </>
} }

View File

@@ -1,7 +1,11 @@
import { DetailPropektus } from "@/app_modules/investasi"; import { DetailPropektus } from "@/app_modules/investasi";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
export default async function Page({params}:{params: {id: string}}) {
const dataInvestasi = await getOneInvestasiById(params.id)
export default async function Page(params:any) {
return<> return<>
<DetailPropektus/> <DetailPropektus dataInvestasi={dataInvestasi as any}/>
</> </>
} }

View File

@@ -16,12 +16,14 @@ export const RouterInvestasi = {
status_transaksi: "/dev/investasi/status_transaksi/berhasil", status_transaksi: "/dev/investasi/status_transaksi/berhasil",
status_transaksi_gagal: "/dev/investasi/status_transaksi/gagal", status_transaksi_gagal: "/dev/investasi/status_transaksi/gagal",
metode_transfer: "/dev/investasi/metode_transfer", metode_transfer: "/dev/investasi/metode_transfer",
// edit // // edit //
edit: "/dev/investasi/edit/", edit: "/dev/investasi/edit/",
edit_intro: "/dev/investasi/edit_intro/", edit_intro: "/dev/investasi/edit_intro/",
edit_prospektus: "/dev/investasi/edit_prospektus/", edit_prospektus: "/dev/investasi/edit_prospektus/",
edit_dokumen: "/dev/investasi/edit_dokumen/", edit_dokumen: "/dev/investasi/edit_dokumen/",
edit_berita: "/dev/investasi/edit_berita/", edit_berita: "/dev/investasi/edit_berita/",
// detail // // detail //
detail_saham_terbeli: "/dev/investasi/detail_saham_terbeli/", detail_saham_terbeli: "/dev/investasi/detail_saham_terbeli/",
detail_prospektus: "/dev/investasi/detail_prospektus/", detail_prospektus: "/dev/investasi/detail_prospektus/",

View File

@@ -3,48 +3,70 @@
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { import {
AspectRatio, AspectRatio,
Box,
Center,
Grid, Grid,
Group, Group,
Image, Image,
Paper, Paper,
Spoiler,
Stack, Stack,
Text, Text,
Title, Title,
} from "@mantine/core"; } from "@mantine/core";
import moment from "moment"; import moment from "moment";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { MODEL_Investasi } from "../model/model_investasi";
import { useState } from "react";
import _ from "lodash";
export default function BeritaInvestasi({ id }: { id: string }) { export default function BeritaInvestasi({
dataInvestasi,
}: {
dataInvestasi: MODEL_Investasi;
}) {
const router = useRouter(); const router = useRouter();
const [berita, setBerita] = useState(dataInvestasi);
return ( return (
<> <>
<Paper {!_.isEmpty(berita.BeritaInvestasi) ? (
berita.BeritaInvestasi.map((e) => (
w={"100%"} <Paper
bg={"gray"} key={e.id}
p={"sm"} w={"100%"}
onClick={() => router.push(RouterInvestasi.detail_berita + `${id}`)} bg={"gray"}
> p={"sm"}
<Stack> onClick={() =>
<Group position="apart"> router.push(RouterInvestasi.detail_berita + `${e.id}`)
<Title order={6}>Judul berita</Title> }
<Text fz={"xs"}>{moment(Date.now()).local().format("LL")}</Text> >
</Group> <Stack>
<Group position="apart">
<Title order={6}>{e.title}</Title>
<Text fz={"xs"}>{moment(e.createdAt).format("LL")}</Text>
</Group>
<Grid pt={5}> <Grid pt={5}>
<Grid.Col span={8}> <Grid.Col span={8}>
<Text fz={12}> <Text lineClamp={3} fz={12}>
Lorem ipsum dolor sit amet consectetur, adipisicing elit.... {e.deskripsi}
</Text> </Text>
</Grid.Col> </Grid.Col>
<Grid.Col span={4}> <Grid.Col span={4}>
<AspectRatio ratio={16 / 9} h={50} w={100}> <AspectRatio ratio={16 / 9} h={50} w={100}>
<Image alt="" src={"/aset/no-img.png"} /> <Image alt="" src={RouterInvestasi.api_gambar + `${e.imagesId}`} />
</AspectRatio> </AspectRatio>
</Grid.Col> </Grid.Col>
</Grid> </Grid>
</Stack> </Stack>
</Paper> </Paper>
))
) : (
<Center>
<Title order={6}>Tidak Ada Berita</Title>
</Center>
)}
</> </>
); );
} }

View File

@@ -82,9 +82,9 @@ export default function InvestasiCreate({
// toast(res.message); // toast(res.message);
setChangeColor(1); setChangeColor(1);
setActiveTab("Draft"); setActiveTab("Draft");
return router.push(RouterInvestasi.dialog_create) router.push(RouterInvestasi.dialog_create)
} else { } else {
return toast(res.message); toast(res.message);
} }
}); });
} }

View File

@@ -1,21 +1,31 @@
"use client"; "use client";
import { AspectRatio, Image, Stack, Text, Title } from "@mantine/core"; import { AspectRatio, Group, Image, Stack, Text, Title } from "@mantine/core";
import { Model_Berita_Investasi } from "../model/model_investasi";
import { useState } from "react";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import moment from "moment";
export default function DetailBeritaInvestasi() { export default function DetailBeritaInvestasi({
dataBerita,
}: {
dataBerita: Model_Berita_Investasi;
}) {
const [berita, setBerita] = useState(dataBerita);
return ( return (
<> <>
<Stack> <Stack spacing={"lg"}>
<Title>Judul berita</Title> <Stack spacing={0}>
<AspectRatio ratio={16/9}> <Title>{berita.title}</Title>
<Image src={"/aset/no-img.png"} alt=""/> <Text fz={12}>{moment(berita.createdAt).format("lll")}</Text>
</AspectRatio> </Stack>
<Text> <AspectRatio ratio={16 / 9}>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum eaque sint <Image
consequuntur consectetur ratione nostrum quasi aspernatur quae? Facere src={RouterInvestasi.api_gambar + `${berita.imagesId}`}
repudiandae illum laborum eum recusandae, id cumque in quaerat eveniet alt=""
beatae. />
</Text> </AspectRatio>
<Text>{berita.deskripsi}</Text>
</Stack> </Stack>
</> </>
); );

View File

@@ -1,14 +1,25 @@
"use client"; "use client";
import { Paper, Grid, Center, Text } from "@mantine/core"; import { Paper, Grid, Center, Text, Title } from "@mantine/core";
import { IconChevronRight } from "@tabler/icons-react"; import { IconChevronRight } from "@tabler/icons-react";
import Link from "next/link"; import Link from "next/link";
import { MODEL_Investasi } from "../model/model_investasi";
import { useState } from "react";
import _ from "lodash";
export default function DetailDokumenInvestasi() { export default function DetailDokumenInvestasi({
dataInvestasi,
}: {
dataInvestasi: MODEL_Investasi;
}) {
const [dokumen, setDokumen] = useState(dataInvestasi);
return ( return (
<> <>
<Link {!_.isEmpty(dokumen.DokumenInvestasi) ? (
href={"/aset/dummy_file.pdf"} dokumen.DokumenInvestasi.map((e) => (
<Link
key={e.id}
href={`/file/${e.url}`}
target="_blank" target="_blank"
style={{ textDecorationLine: "none" }} style={{ textDecorationLine: "none" }}
> >
@@ -21,7 +32,7 @@ export default function DetailDokumenInvestasi() {
onClick={() => ""} onClick={() => ""}
> >
<Grid.Col span={10}> <Grid.Col span={10}>
<Text>Nama File.pdf</Text> <Text>{e.title}</Text>
</Grid.Col> </Grid.Col>
<Grid.Col span={2}> <Grid.Col span={2}>
<Center> <Center>
@@ -31,6 +42,12 @@ export default function DetailDokumenInvestasi() {
</Grid> </Grid>
</Paper> </Paper>
</Link> </Link>
))
) : (
<Center>
<Title order={6}>Tidak Ada File</Title>
</Center>
)}
</> </>
); );
} }

View File

@@ -111,6 +111,10 @@ export default function DetailDraftInvestasi({
<Text>Jadwal Pembagian</Text> <Text>Jadwal Pembagian</Text>
<Text>{investasi.MasterPembagianDeviden.name} bulan </Text> <Text>{investasi.MasterPembagianDeviden.name} bulan </Text>
</Box> </Box>
<Box>
<Text>Pencarian Investor</Text>
<Text>{investasi.MasterPencarianInvestor.name} Hari </Text>
</Box>
</Stack> </Stack>
</Grid.Col> </Grid.Col>
<Grid.Col span={6}> <Grid.Col span={6}>

View File

@@ -42,19 +42,19 @@ export default function DetailReviewInvestasi({dataInvestasi}:{dataInvestasi: MO
id: 1, id: 1,
name: "Prospektus", name: "Prospektus",
icon: <IconBookDownload size={70} />, icon: <IconBookDownload size={70} />,
route: RouterInvestasi.edit_prospektus, route: RouterInvestasi.detail_prospektus,
}, },
{ {
id: 2, id: 2,
name: "Dokumen", name: "Dokumen",
icon: <IconFileDescription size={70} />, icon: <IconFileDescription size={70} />,
route: RouterInvestasi.edit_dokumen, route: RouterInvestasi.detail_dokumen,
}, },
{ {
id: 3, id: 3,
name: "Berita", name: "Berita",
icon: <IconSpeakerphone size={70} />, icon: <IconSpeakerphone size={70} />,
route: RouterInvestasi.edit_berita, route: RouterInvestasi.berita,
}, },
]; ];
@@ -106,6 +106,10 @@ export default function DetailReviewInvestasi({dataInvestasi}:{dataInvestasi: MO
<Text>Jadwal Pembagian</Text> <Text>Jadwal Pembagian</Text>
<Text>{investasi.MasterPembagianDeviden.name} Bulan </Text> <Text>{investasi.MasterPembagianDeviden.name} Bulan </Text>
</Box> </Box>
<Box>
<Text>Pencarian Investor</Text>
<Text>{investasi.MasterPencarianInvestor.name} Hari </Text>
</Box>
</Stack> </Stack>
</Grid.Col> </Grid.Col>
<Grid.Col span={6}> <Grid.Col span={6}>
@@ -132,7 +136,7 @@ export default function DetailReviewInvestasi({dataInvestasi}:{dataInvestasi: MO
<Grid.Col <Grid.Col
span={"auto"} span={"auto"}
key={e.id} key={e.id}
onClick={() => router.push(e.route + `${"1"}`)} onClick={() => router.push(e.route + `${investasi.id}`)}
> >
<Paper h={100} w={100} bg={"gray.4"} withBorder py={"xs"}> <Paper h={100} w={100} bg={"gray.4"} withBorder py={"xs"}>
<Flex direction={"column"} align={"center"} justify={"center"}> <Flex direction={"column"} align={"center"} justify={"center"}>

View File

@@ -1,36 +1,53 @@
"use client"; "use client";
import { Paper, Grid, Center, Text } from "@mantine/core"; import { Paper, Grid, Center, Text, Title } from "@mantine/core";
import { IconChevronRight } from "@tabler/icons-react"; import { IconChevronRight } from "@tabler/icons-react";
import Link from "next/link"; import Link from "next/link";
import {
MODEL_Investasi,
Model_Prospektus_Investasi,
} from "../model/model_investasi";
import { useState } from "react";
export default function DetailPropektus({
dataInvestasi,
}: {
dataInvestasi: MODEL_Investasi;
}) {
const [prospek, setProspek] = useState(dataInvestasi);
export default function DetailPropektus() {
return ( return (
<> <>
<Link {prospek.ProspektusInvestasi !== null ? (
href={"/aset/dummy_file.pdf"} <Link
target="_blank" href={`/file/${prospek.ProspektusInvestasi.url}`}
style={{ textDecorationLine: "none" }} target="_blank"
> style={{ textDecorationLine: "none" }}
<Paper w={"100%"} h={50} bg={"gray"} mb={"md"}> >
<Grid <Paper w={"100%"} h={50} bg={"gray"} mb={"md"}>
align="center" <Grid
justify="center" align="center"
h={50} justify="center"
px={"sm"} h={50}
onClick={() => ""} px={"sm"}
> onClick={() => ""}
<Grid.Col span={10}> >
<Text>Nama File.pdf</Text> <Grid.Col span={10}>
</Grid.Col> <Text>Prospektus_{prospek.title}</Text>
<Grid.Col span={2}> </Grid.Col>
<Center> <Grid.Col span={2}>
<IconChevronRight /> <Center>
</Center> <IconChevronRight />
</Grid.Col> </Center>
</Grid> </Grid.Col>
</Paper> </Grid>
</Link> </Paper>
</Link>
) : (
<Center>
<Title order={6}>Tidak Ada File</Title>
</Center>
)}
</> </>
); );
} }

View File

@@ -10,6 +10,7 @@ import {
Text, Text,
ActionIcon, ActionIcon,
Group, Group,
Modal,
} from "@mantine/core"; } from "@mantine/core";
import { import {
IconChevronRight, IconChevronRight,
@@ -23,6 +24,8 @@ import _ from "lodash";
import funDeleteDokumenInvestasi from "../fun/fun_delete_dokumen"; import funDeleteDokumenInvestasi from "../fun/fun_delete_dokumen";
import toast from "react-simple-toasts"; import toast from "react-simple-toasts";
import funLoadDataInvestasi from "../fun/fun_load_data"; import funLoadDataInvestasi from "../fun/fun_load_data";
import { useDisclosure } from "@mantine/hooks";
import { Warna } from "@/app/lib/warna";
export default function EditDokumenInvestasi({ export default function EditDokumenInvestasi({
dataInvestasi, dataInvestasi,
@@ -30,24 +33,39 @@ export default function EditDokumenInvestasi({
dataInvestasi: MODEL_Investasi; dataInvestasi: MODEL_Investasi;
}) { }) {
const [dokumen, setDokumen] = useState(dataInvestasi); const [dokumen, setDokumen] = useState(dataInvestasi);
const [idDel, setDel] = useState<any | null>();
const [opened, { open, close }] = useDisclosure(false);
async function onDelete(id: string) { async function onDelete(id: string) {
await funDeleteDokumenInvestasi(id)
.then( async (res) => { await funDeleteDokumenInvestasi(id).then(async (res) => {
if(res.status === 200){ if (res.status === 200) {
toast(res.message) toast(res.message);
const load = await funLoadDataInvestasi(dokumen.id)
setDokumen(load as any) const load = await funLoadDataInvestasi(dokumen.id);
setDokumen(load as any);
} else { } else {
toast(res.message) toast(res.message);
} }
}) });
} }
return ( return (
<> <>
{/* <pre>{JSON.stringify(dokukem, null, 2)}</pre> */} {/* <pre>{JSON.stringify(dokukem, null, 2)}</pre> */}
{/* <Modal opened={opened} onClose={close} centered title="Hapus dokumen ?">
<Group position="center">
<Button radius={50}>Batal</Button>
<Button
radius={50}
bg={Warna.merah}
color="red"
onClick={() => onDelete(idDel)}
>
Hapus
</Button>
</Group>
</Modal> */}
{!_.isEmpty(dokumen.DokumenInvestasi) ? ( {!_.isEmpty(dokumen.DokumenInvestasi) ? (
dokumen.DokumenInvestasi.map((e) => ( dokumen.DokumenInvestasi.map((e) => (
@@ -65,16 +83,17 @@ export default function EditDokumenInvestasi({
<Grid.Col span={4}> <Grid.Col span={4}>
<Group position="center"> <Group position="center">
<Link <Link href={`/file/${e.url}`} target="_blank">
href={`/file/${e.url}`}
target="_blank"
>
<ActionIcon variant="transparent"> <ActionIcon variant="transparent">
<IconWorldShare color="green" /> <IconWorldShare color="green" />
</ActionIcon> </ActionIcon>
</Link> </Link>
<ActionIcon variant="transparent" onClick={() => onDelete(e.id)}> <ActionIcon
variant="transparent"
onClick={() => {
onDelete(e.id)
}}
>
<IconTrash color="red" /> <IconTrash color="red" />
</ActionIcon> </ActionIcon>
</Group> </Group>
@@ -84,7 +103,7 @@ export default function EditDokumenInvestasi({
)) ))
) : ( ) : (
<Center> <Center>
<Title order={4}>Tidak ada file</Title> <Title order={5}>Tidak ada file</Title>
</Center> </Center>
)} )}

View File

@@ -18,6 +18,7 @@ import {
Image, Image,
NumberInput, NumberInput,
Stack, Stack,
Modal,
} from "@mantine/core"; } from "@mantine/core";
import { IconCamera, IconChevronRight } from "@tabler/icons-react"; import { IconCamera, IconChevronRight } from "@tabler/icons-react";
import Link from "next/link"; import Link from "next/link";
@@ -30,6 +31,7 @@ import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import _ from "lodash"; import _ from "lodash";
import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master"; import { MODEL_DEFAULT_MASTER } from "@/app_modules/models/model_default_master";
import funEditInvestasi from "../fun/fun_edit_investasi"; import funEditInvestasi from "../fun/fun_edit_investasi";
import { useDisclosure, useWindowScroll } from "@mantine/hooks";
export default function EditIntroInvestasi({ export default function EditIntroInvestasi({
dataInvestasi, dataInvestasi,
@@ -43,6 +45,9 @@ export default function EditIntroInvestasi({
listPembagian: MODEL_DEFAULT_MASTER[]; listPembagian: MODEL_DEFAULT_MASTER[];
}) { }) {
const router = useRouter(); const router = useRouter();
const [opened, { open, close }] = useDisclosure(false);
const [scroll, scrollTo] = useWindowScroll();
const [edit_inves, setEdit_inves] = useState(dataInvestasi); const [edit_inves, setEdit_inves] = useState(dataInvestasi);
const [img, setImg] = useState<any | null>(); const [img, setImg] = useState<any | null>();
const [fl, setFl] = useState<File | null>(null); const [fl, setFl] = useState<File | null>(null);
@@ -56,29 +61,40 @@ export default function EditIntroInvestasi({
} }
async function onUpdate() { async function onUpdate() {
const body = edit_inves;
if (_.values(edit_inves).includes("")) return toast("Lengkapi data"); if (_.values(edit_inves).includes("")) return toast("Lengkapi data");
// if (!fl) return toast("File Kosong"); // if (!fl) return toast("File Kosong");
const fd = new FormData(); const fd = new FormData();
fd.append("file", fl as any); fd.append("file", fl as any);
// router.back()
// await funEditInvestasi(fd, edit_inves).then((res) => await funEditInvestasi(fd, body).then(async (res) => {
// res.status === 200 ? router.back() : toast(res.message) res.status === 200
// ); ? (toast(res.message), router.back())
: toast(res.message);
await funEditInvestasi(fd, edit_inves).then(async (res) => { // if (res.status === 200) {
if (res.status === 200) { // router.back()
toast(res.message); // } else {
router.replace(RouterInvestasi.edit + `${edit_inves.id}`); // toast(res.message);
} else { // }
toast(res.message);
}
}); });
} }
return ( return (
<> <>
<Modal
opened={opened}
onClose={close}
centered
title="Simpan perubahan data ?"
withCloseButton={false}
>
<Group position="center">
<Button onClick={close} bg={"red"} color="red">Batal</Button>
<Button onClick={onUpdate} bg={Warna.hijau_muda} color="green">Simpan</Button>
</Group>
</Modal>
<Box> <Box>
<AspectRatio ratio={16 / 9}> <AspectRatio ratio={16 / 9}>
{img ? ( {img ? (
@@ -102,7 +118,7 @@ export default function EditIntroInvestasi({
accept="image/png,image/jpeg" accept="image/png,image/jpeg"
> >
{(props) => ( {(props) => (
<Button {...props} w={350} radius={50}> <Button {...props} radius={50}>
<IconCamera /> <IconCamera />
</Button> </Button>
)} )}
@@ -233,7 +249,8 @@ export default function EditIntroInvestasi({
bg={Warna.hijau_muda} bg={Warna.hijau_muda}
color="green" color="green"
onClick={() => { onClick={() => {
onUpdate(); scrollTo({y: 0})
open();
}} }}
> >
Update Update

View File

@@ -50,8 +50,8 @@ export default function EditProspektusInvestasi({
> >
<Grid.Col span={10}> <Grid.Col span={10}>
<Group> <Group>
<IconFileTypePdf /> {/* <IconFileTypePdf /> */}
<Text>Prospektus_{prospek.title}</Text> <Text lineClamp={1}>Prospektus_{prospek.title}</Text>
</Group> </Group>
</Grid.Col> </Grid.Col>
<Grid.Col span={2}> <Grid.Col span={2}>

View File

@@ -1,9 +1,11 @@
"use server"; "use server";
import { myConsole } from "@/app/fun/my_console";
import prisma from "@/app/lib/prisma"; import prisma from "@/app/lib/prisma";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { revalidatePath } from "next/cache";
export default async function funDeleteBeritaInvestasi(id: string, idInvestasi: string) { export default async function funDeleteBeritaInvestasi(id: string) {
const res = await prisma.beritaInvestasi.delete({ const res = await prisma.beritaInvestasi.delete({
where: { where: {
id: id, id: id,
@@ -12,7 +14,6 @@ export default async function funDeleteBeritaInvestasi(id: string, idInvestasi:
if (!res) return { status: 400, message: "Gagal hapus" }; if (!res) return { status: 400, message: "Gagal hapus" };
return { return {
status: 200, status: 200,
message: "Berita terhapus", message: "Berita terhapus",

View File

@@ -3,7 +3,6 @@
import prisma from "@/app/lib/prisma"; import prisma from "@/app/lib/prisma";
export default async function funDeleteDokumenInvestasi(idDokumen: string) { export default async function funDeleteDokumenInvestasi(idDokumen: string) {
const res = await prisma.dokumenInvestasi.delete({ const res = await prisma.dokumenInvestasi.delete({
where: { where: {
id: idDokumen, id: idDokumen,
@@ -12,7 +11,6 @@ export default async function funDeleteDokumenInvestasi(idDokumen: string) {
if (!res) return { status: 400, message: "Gagal hapus" }; if (!res) return { status: 400, message: "Gagal hapus" };
return { return {
status: 200, status: 200,
message: "Dokumen terhapus", message: "Dokumen terhapus",

View File

@@ -8,17 +8,13 @@ import fs from "fs";
import { revalidatePath } from "next/cache"; import { revalidatePath } from "next/cache";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
async function up1(data: any) {}
async function up2(data: any, formData: any) {}
export default async function funEditInvestasi( export default async function funEditInvestasi(
formData: FormData, formData: FormData,
data: MODEL_Investasi data: MODEL_Investasi
) { ) {
const file = formData.get("file")?.length; const file = formData.get("file");
if (file === undefined) { if (file !== "null") {
const file: any = formData.get("file"); const file: any = formData.get("file");
const fName = file.name; const fName = file.name;
const fExt = const fExt =
@@ -37,63 +33,34 @@ export default async function funEditInvestasi(
if (!updateImage) return { status: 400, message: "Gagal upload gambar" }; if (!updateImage) return { status: 400, message: "Gagal upload gambar" };
const upFolder = Buffer.from(await file.arrayBuffer()); const upFolder = Buffer.from(await file.arrayBuffer());
fs.writeFileSync(`./public/investasi/${updateImage.url}`, upFolder); fs.writeFileSync(`./public/investasi/${updateImage.url}`, upFolder);
}
const editInves = await prisma.investasi.update({ const editInves = await prisma.investasi.update({
where: { where: {
id: data.id, id: data.id,
}, },
data: { data: {
title: data.title, title: data.title,
targetDana: data.targetDana, targetDana: data.targetDana,
hargaLembar: data.hargaLembar, hargaLembar: data.hargaLembar,
totalLembar: data.totalLembar, totalLembar: data.totalLembar,
roi: data.roi, roi: data.roi,
masterPencarianInvestorId: data.MasterPencarianInvestor.id, masterPencarianInvestorId: data.MasterPencarianInvestor.id,
masterPembagianDevidenId: data.MasterPembagianDeviden.id, masterPembagianDevidenId: data.MasterPembagianDeviden.id,
masterPeriodeDevidenId: data.MasterPeriodeDeviden.id, masterPeriodeDevidenId: data.MasterPeriodeDeviden.id,
}, },
}); });
if (!editInves) { if (!editInves) {
return {
status: 400,
message: "Gagal update",
};
}
revalidatePath(RouterInvestasi.detail_draft);
return { return {
status: 200, status: 400,
message: "Berhasil Disimpan", message: "Gagal update",
};
} else {
const editInves = await prisma.investasi.update({
where: {
id: data.id,
},
data: {
title: data.title,
targetDana: data.targetDana,
hargaLembar: data.hargaLembar,
totalLembar: data.totalLembar,
roi: data.roi,
masterPencarianInvestorId: data.MasterPencarianInvestor.id,
masterPembagianDevidenId: data.MasterPembagianDeviden.id,
masterPeriodeDevidenId: data.MasterPeriodeDeviden.id,
},
});
if (!editInves) {
return {
status: 400,
message: "Gagal update",
};
}
revalidatePath(RouterInvestasi.detail_draft);
return {
status: 200,
message: "Berhasil Disimpan",
}; };
} }
revalidatePath(RouterInvestasi.edit);
return {
status: 200,
message: "Berhasil Disimpan",
};
} }

View File

@@ -1,6 +1,8 @@
"use server"; "use server";
import prisma from "@/app/lib/prisma"; import prisma from "@/app/lib/prisma";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { revalidatePath } from "next/cache";
export default async function funLoadDataInvestasi(id: string) { export default async function funLoadDataInvestasi(id: string) {
const data = await prisma.investasi.findUnique({ const data = await prisma.investasi.findUnique({

View File

@@ -24,9 +24,10 @@ import toast from "react-simple-toasts";
import { MODEL_Investasi } from "../model/model_investasi"; import { MODEL_Investasi } from "../model/model_investasi";
import { useState } from "react"; import { useState } from "react";
import _ from "lodash"; import _ from "lodash";
import deleteBeritaInvestasi from "../fun/fun_delete_berita";
import getOneInvestasiById from "../fun/get_one_investasi_by_id"; import getOneInvestasiById from "../fun/get_one_investasi_by_id";
import funLoadDataInvestasi from "../fun/fun_load_data"; import funLoadDataInvestasi from "../fun/fun_load_data";
import funDeleteBeritaInvestasi from "../fun/fun_delete_berita";
import { useShallowEffect } from "@mantine/hooks";
export default function ListEditBeritaInvestasi({ export default function ListEditBeritaInvestasi({
dataInvestasi, dataInvestasi,
@@ -34,14 +35,14 @@ export default function ListEditBeritaInvestasi({
dataInvestasi: MODEL_Investasi; dataInvestasi: MODEL_Investasi;
}) { }) {
const router = useRouter(); const router = useRouter();
const [investasi, setInvestasi] = useState<MODEL_Investasi>(dataInvestasi); const [investasi, setInvestasi] = useState(dataInvestasi);
async function onDelete(idBerita: string, idInvestasi: string) { async function onDelete(idBerita: string) {
await deleteBeritaInvestasi(idBerita, idInvestasi).then( async(res) => { await funDeleteBeritaInvestasi(idBerita).then(async (res) => {
if (res.status === 200) { if (res.status === 200) {
const loadData = await funLoadDataInvestasi(idInvestasi); const load = await funLoadDataInvestasi(investasi.id)
setInvestasi(loadData as any)
toast(res.message); toast(res.message);
return setInvestasi(load as any)
} else { } else {
toast(res.message); toast(res.message);
} }
@@ -57,7 +58,6 @@ export default function ListEditBeritaInvestasi({
<Center> <Center>
<Title order={6}>Berita Kosong</Title> <Title order={6}>Berita Kosong</Title>
</Center> </Center>
<Divider />
</Box> </Box>
) : ( ) : (
"" ""
@@ -87,7 +87,7 @@ export default function ListEditBeritaInvestasi({
</Menu.Item> </Menu.Item>
<Menu.Item <Menu.Item
onClick={() => { onClick={() => {
onDelete(v.id, dataInvestasi.id); onDelete(v.id);
}} }}
> >
Hapus Hapus
@@ -120,6 +120,7 @@ export default function ListEditBeritaInvestasi({
</Stack> </Stack>
</Paper> </Paper>
))} ))}
<Divider my={"lg"} />
</> </>
); );
} }

View File

@@ -42,7 +42,7 @@ export interface Model_Berita_Investasi {
updatedAt: Date; updatedAt: Date;
} }
interface Model_Prospektus_Investasi { export interface Model_Prospektus_Investasi {
id: string id: string
url: string url: string
active: boolean; active: boolean;
@@ -51,7 +51,7 @@ interface Model_Prospektus_Investasi {
investasiId: string investasiId: string
} }
interface Model_Dokumen_Investasi { export interface Model_Dokumen_Investasi {
id: string id: string
title: string title: string
url: string url: string

View File

@@ -43,7 +43,7 @@ export default function UploadDokumenInvestasi({
fd.append("file", pdf as any); fd.append("file", pdf as any);
await funUploadDokumenInvestasi(fd, body).then((res) => { await funUploadDokumenInvestasi(fd, body).then((res) => {
console.log(res); // console.log(res);
if (res.status === 201) { if (res.status === 201) {
toast("Berhasil upload"); toast("Berhasil upload");
router.back(); router.back();

View File

@@ -53,7 +53,7 @@ export default function UploadProspektusInvestasi({
const buffer = URL.createObjectURL( const buffer = URL.createObjectURL(
new Blob([new Uint8Array(await file.arrayBuffer())]) new Blob([new Uint8Array(await file.arrayBuffer())])
); );
console.log(buffer); // console.log(buffer);
setFile(buffer); setFile(buffer);
setPdf(file); setPdf(file);
}} }}