diff --git a/prisma/schema.prisma b/prisma/schema.prisma index aa2c96c6..4789e960 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -110,6 +110,7 @@ model Investasi { updatedAt DateTime @default(now()) @updatedAt author User? @relation(fields: [authorId], references: [id]) authorId String? + catatan String? MasterPeriodeDeviden MasterPeriodeDeviden? @relation(fields: [masterPeriodeDevidenId], references: [id]) masterPeriodeDevidenId String? diff --git a/public/file/57017e7b-bd18-4822-bea6-18e4f17823ac.pdf b/public/file/57017e7b-bd18-4822-bea6-18e4f17823ac.pdf new file mode 100644 index 00000000..6b87abcb Binary files /dev/null and b/public/file/57017e7b-bd18-4822-bea6-18e4f17823ac.pdf differ diff --git a/public/file/ad7680d8-8ccd-4ae5-99e9-08f292f26e65.pdf b/public/file/ad7680d8-8ccd-4ae5-99e9-08f292f26e65.pdf new file mode 100644 index 00000000..01985bdd Binary files /dev/null and b/public/file/ad7680d8-8ccd-4ae5-99e9-08f292f26e65.pdf differ diff --git a/public/investasi/21cb9f77-be9e-4f10-b7d5-b7d6935d445a.png b/public/investasi/21cb9f77-be9e-4f10-b7d5-b7d6935d445a.png new file mode 100644 index 00000000..24d01eeb Binary files /dev/null and b/public/investasi/21cb9f77-be9e-4f10-b7d5-b7d6935d445a.png differ diff --git a/public/investasi/90a63208-8257-4de8-8138-7fce204c2a76.png b/public/investasi/90a63208-8257-4de8-8138-7fce204c2a76.png new file mode 100644 index 00000000..d0c9754c Binary files /dev/null and b/public/investasi/90a63208-8257-4de8-8138-7fce204c2a76.png differ diff --git a/src/app/api/investasi/dokumen/[id]/route.ts b/src/app/api/investasi/dokumen/[id]/route.ts new file mode 100644 index 00000000..e5d4c94c --- /dev/null +++ b/src/app/api/investasi/dokumen/[id]/route.ts @@ -0,0 +1,22 @@ +import prisma from "@/app/lib/prisma"; +import { NextRequest, NextResponse } from "next/server"; +import fs from "fs"; + +export async function GET( + req: NextRequest, + { params }: { params: { id: string } } +) { + const data = await prisma.dokumenInvestasi.findUnique({ + where: { id: params.id }, + select: { + url: true, + }, + }); + + const file = fs.readFileSync(`./public/file/${data?.url}`); + return new NextResponse(file, { + headers: { + "Content-Type": "application/pdf", + }, + }); +} diff --git a/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx b/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx index 3fe5b041..4d899bd7 100644 --- a/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx +++ b/src/app/dev/admin/investasi/halaman_aksi/[id]/page.tsx @@ -1,9 +1,10 @@ import { Admin_HalamanAksi } from "@/app_modules/admin/investasi"; -export default async function Page() { +export default async function Page({params}:{params: {id: string}}) { + return ( <> - + ); } diff --git a/src/app/dev/admin/investasi/konfirmasi/layout.tsx b/src/app/dev/admin/investasi/konfirmasi/[id]/layout.tsx similarity index 100% rename from src/app/dev/admin/investasi/konfirmasi/layout.tsx rename to src/app/dev/admin/investasi/konfirmasi/[id]/layout.tsx diff --git a/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx new file mode 100644 index 00000000..57b53ff0 --- /dev/null +++ b/src/app/dev/admin/investasi/konfirmasi/[id]/page.tsx @@ -0,0 +1,16 @@ +import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi"; +import { funGetUserProfile } from "@/app_modules/fun/get_user_profile"; +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) + const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any) + // console.log(dataUser) + + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/investasi/konfirmasi/page.tsx b/src/app/dev/admin/investasi/konfirmasi/page.tsx deleted file mode 100644 index a186d372..00000000 --- a/src/app/dev/admin/investasi/konfirmasi/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi"; - - -export default async function Page({ params }: { params: { id: string } }) { - return ( - <> - - - ); -} diff --git a/src/app/lib/router_hipmi/router_admin.ts b/src/app/lib/router_hipmi/router_admin.ts index cc04bd4c..19f1b17c 100644 --- a/src/app/lib/router_hipmi/router_admin.ts +++ b/src/app/lib/router_hipmi/router_admin.ts @@ -6,7 +6,7 @@ export const RouterAdminDashboard = { export const RouterAdminInvestasi = { main_investasi: "/dev/admin/main/investasi", halaman_aksi: "/dev/admin/investasi/halaman_aksi/", - konfirmasi: "/dev/admin/investasi/konfirmasi", + konfirmasi: "/dev/admin/investasi/konfirmasi/", bukti_transfer: "/dev/admin/investasi/bukti_transfer", status_transfer: "/dev/admin/investasi/status_transfer" }; diff --git a/src/app/lib/router_hipmi/router_investasi.ts b/src/app/lib/router_hipmi/router_investasi.ts index 580ccfda..1afd840b 100644 --- a/src/app/lib/router_hipmi/router_investasi.ts +++ b/src/app/lib/router_hipmi/router_investasi.ts @@ -1,6 +1,8 @@ export const RouterInvestasi = { api_gambar: "/api/investasi/gambar/", api_file_prospektus: "/api/investasi/prospektus/", + api_file_dokumen: "/api/investasi/dokumen/", + //INVESTASI main: "/dev/investasi/main", main_porto: "/dev/investasi/main/portofolio", diff --git a/src/app/lib/router_hipmi/router_user_profile.ts b/src/app/lib/router_hipmi/router_user_profile.ts new file mode 100644 index 00000000..58271653 --- /dev/null +++ b/src/app/lib/router_hipmi/router_user_profile.ts @@ -0,0 +1,3 @@ +export const RouterUserProfile = { + api_foto: "/api/profile/foto/", +}; diff --git a/src/app_modules/admin/investasi/halaman_aksi/layout.tsx b/src/app_modules/admin/investasi/halaman_aksi/layout.tsx index 0e7b26a9..c60dc2a3 100644 --- a/src/app_modules/admin/investasi/halaman_aksi/layout.tsx +++ b/src/app_modules/admin/investasi/halaman_aksi/layout.tsx @@ -11,8 +11,8 @@ export default function Admin_LayoutHalamanAksi({ }) { return ( <> - {/* {children} */} - }> + {/* {children} */} + }> {children} diff --git a/src/app_modules/admin/investasi/halaman_aksi/view.tsx b/src/app_modules/admin/investasi/halaman_aksi/view.tsx index 88725613..fd8dca9c 100644 --- a/src/app_modules/admin/investasi/halaman_aksi/view.tsx +++ b/src/app_modules/admin/investasi/halaman_aksi/view.tsx @@ -17,7 +17,7 @@ import { import { IconChevronRight } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; -export default function Admin_HalamanAksi() { +export default function Admin_HalamanAksi({idInves}: {idInves: string}) { const router = useRouter(); const listHalamanAksi = [ { @@ -58,7 +58,7 @@ export default function Admin_HalamanAksi() { compact radius={50} w={100} - onClick={() => router.push(e.route)} + onClick={() => router.push(e.route + `${idInves}`)} > Lihat diff --git a/src/app_modules/admin/investasi/konfirmasi/view.tsx b/src/app_modules/admin/investasi/konfirmasi/view.tsx index 861ea200..d19c07a9 100644 --- a/src/app_modules/admin/investasi/konfirmasi/view.tsx +++ b/src/app_modules/admin/investasi/konfirmasi/view.tsx @@ -1,7 +1,14 @@ "use client"; +import { RouterHome } from "@/app/lib/router_hipmi/router_home"; import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; +import { RouterUserProfile } from "@/app/lib/router_hipmi/router_user_profile"; import { Warna } from "@/app/lib/warna"; +import funEditInvestasi from "@/app_modules/investasi/fun/fun_edit_investasi"; +import funGantiStatusInvestasi from "@/app_modules/investasi/fun/fun_ganti_status"; +import { gs_StatusPortoInvestasi } from "@/app_modules/investasi/g_state"; +import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi"; +import { MODEL_User_profile } from "@/app_modules/models/user_profile"; import { Group, Flex, @@ -20,24 +27,46 @@ import { Image, Collapse, Textarea, + Divider, + Mark, + Modal, } from "@mantine/core"; -import { useDisclosure } from "@mantine/hooks"; +import { useDisclosure, useShallowEffect } from "@mantine/hooks"; import { + IconAlertHexagonFilled, + IconBan, IconBookDownload, + IconCheck, IconChevronDown, IconChevronLeft, IconChevronRight, + IconFile, IconFileDescription, + IconFileTypePdf, + IconPdf, IconSpeakerphone, } from "@tabler/icons-react"; +import { useAtom } from "jotai"; +import _ from "lodash"; +import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; import toast from "react-simple-toasts"; -export default function Admin_KonfirmasiInvestasi({ id }: { id: string }) { +export default function Admin_KonfirmasiInvestasi({ + dataInvestasi, + dataUser, +}: { + dataInvestasi: MODEL_Investasi; + dataUser: MODEL_User_profile; +}) { const router = useRouter(); + const [investasi, setInvestasi] = useState(dataInvestasi); + const [user, setUser] = useState(dataUser); const [publish, setPublish] = useState(true); const [opened, { toggle }] = useDisclosure(false); + const [catatan, setCatatan] = useState(""); + const [status, setStatus] = useAtom(gs_StatusPortoInvestasi); const listBox = [ { @@ -59,178 +88,244 @@ export default function Admin_KonfirmasiInvestasi({ id }: { id: string }) { route: RouterInvestasi.berita, }, ]; + + // useShallowEffect(() => { + // cekStatusPublish() + // },[]) + + // 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 onPublish() { + // const res = await funGantiStatusInvestasi(investasi.id, "3") + setTimeout(() => setPublish(false), 1000); + toast("Proyek Investasi Di Publish"); + } + return ( <> - + - - Username + + {user.username} - {/* Sisa waktu : 20 Hari */} + + {" "} +
+ {publish ? ( + + ) : ( + + )} +
+ +
- - - - - + - {/* Title dan Persentase */} - - - Judul Proyek - - - - - {/* Rincian Data */} - - - - - Terkumpul - Rp. - - - Dana Dibutuhkan - Rp. - - - Harga Per Lembar - Rp. - - - Jadwal Pembagian - 3 Bulan - - - - - - - Investor - 4657 - - - ROI - % - - - Total Lembar - 0 - - - Pembagian Deviden - Selamanya - - - - - - {/* List Box */} - - {listBox.map((e) => ( - router.push(e.route + `${id}`)} - > - - - {e.name} - - {e.icon} - - + + + + {/* Title */} +
+ + {investasi.title} + +
+ + + +
- ))} -
- - {/* Button publish dan reject */} - - {/* Publish */} - -
- {publish ? ( - - ) : ( - - )} -
+ {/* Rincian Data */} + + + + + + Dana Dibutuhkan + Rp. {investasi.targetDana} + + + Harga Per Lembar + Rp.{investasi.hargaLembar} + + + Jadwal Pembagian + {investasi.MasterPembagianDeviden.name} bulan + + + Pencarian Investor + {investasi.MasterPencarianInvestor.name} hari + + + + + + + ROI + {investasi.roi} % + + + Total Lembar + {investasi.totalLembar} lembar + + + Pembagian Deviden + {investasi.MasterPeriodeDeviden.name} + + + + - {/* Reject */} - -
- -
+ + {/* Note dan dokumen */} + + + {/* Note */} + + Note : + + Cek kembali kelengkapan file prospektus & semua dokumen + terkait investasi sebelum mem-publish. Jika kelengkapan file + kurang lengkap maka reject dan berikan pesan terkait + kekurangnya. + + + {/* File file */} + + {/* Prospektus */} + + Prospektus : + {investasi.ProspektusInvestasi === null ? ( + Tidak ada file + ) : ( + + + + Prospektus_{investasi.title} + + + + + + )} + + + {/* Dokumen */} + + Dokumen : + {_.isEmpty(investasi.DokumenInvestasi) ? ( + Tidak ada dokumen + ) : ( + investasi.DokumenInvestasi.map((e) => ( + + + + {e.title} + + + + + + )) + )} + + +
- {/* Text area reject */} - - - -