From 33e363af893e7a99874c836a942afe0197e27f79 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 3 Nov 2023 16:28:05 +0800 Subject: [PATCH] feat: - Fitur hot menu ditambah - Fitur portofolio khusus status investasi - Fitur halaman transaksi ### No Issue #fix: - Perubahan minor --- prisma/schema.prisma | 84 +++- src/app/api/seeder/route.ts | 19 + .../detail_portofolio/draft/layout.tsx | 8 + .../detail_portofolio/draft/page.tsx | 8 + .../detail_portofolio/publish/layout.tsx | 9 + .../detail_portofolio/publish/page.tsx | 7 + .../detail_portofolio/reject/layout.tsx | 8 + .../detail_portofolio/reject/page.tsx | 7 + .../detail_portofolio/review/layout.tsx | 8 + .../detail_portofolio/review/page.tsx | 7 + .../dev/investasi/main/portofolio/page.tsx | 2 +- .../dev/investasi/main/saham_saya/page.tsx | 9 + src/app/dev/investasi/main/transaksi/page.tsx | 9 + .../{ => berhasil}/layout.tsx | 0 .../status_transaksi/{ => berhasil}/page.tsx | 0 .../status_transaksi/gagal/layout.tsx | 16 + .../investasi/status_transaksi/gagal/page.tsx | 7 + src/app/lib/router_hipmi/router_investasi.ts | 16 +- .../admin/investasi/konfirmasi/view.tsx | 118 +++-- src/app_modules/admin/investasi/main/view.tsx | 4 +- src/app_modules/crowd/main/view.tsx | 2 +- src/app_modules/investasi/create/view.tsx | 34 +- .../investasi/detail_porto/view.tsx | 7 - .../detail_portofolio/draft/layout.tsx | 28 ++ .../detail_portofolio/draft/page.tsx | 152 ++++++ .../detail_portofolio/publish/layout.tsx | 19 + .../detail_portofolio/publish/page.tsx | 144 ++++++ .../detail_portofolio/reject/layout.tsx | 23 + .../detail_portofolio/reject/page.tsx | 199 ++++++++ .../detail_portofolio/review/layout.tsx | 19 + .../detail_portofolio/review/page.tsx | 155 ++++++ .../dialog_page/transaksi_saham/layout.tsx | 8 +- .../investasi/dummy/data_dummy.json | 14 +- src/app_modules/investasi/g_state/index.ts | 3 +- src/app_modules/investasi/index.ts | 32 +- src/app_modules/investasi/main/layout.tsx | 85 ++-- src/app_modules/investasi/main/saham_saya.tsx | 151 ++++++ .../investasi/metode_transfer/view.tsx | 4 +- .../investasi/portofolio/layout.tsx | 29 ++ src/app_modules/investasi/portofolio/view.tsx | 466 +++++++++--------- .../status_transaksi/gagal/layout.tsx | 57 +++ .../investasi/status_transaksi/gagal/view.tsx | 62 +++ .../investasi/status_transaksi/layout.tsx | 20 +- .../investasi/transaksi/layout.tsx | 19 + src/app_modules/investasi/transaksi/page.tsx | 127 +++++ src/app_modules/investasi/transfer/layout.tsx | 32 +- src/app_modules/investasi/transfer/view.tsx | 70 ++- .../seeder/investasi/pembagian_deviden.json | 12 +- .../seeder/investasi/pencarian_investor.json | 16 +- src/bin/seeder/investasi/periode_deviden.json | 4 +- .../seeder/investasi/status_investasi.json | 22 + 51 files changed, 1953 insertions(+), 408 deletions(-) create mode 100644 src/app/dev/investasi/detail_portofolio/draft/layout.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/draft/page.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/publish/layout.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/publish/page.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/reject/layout.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/reject/page.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/review/layout.tsx create mode 100644 src/app/dev/investasi/detail_portofolio/review/page.tsx create mode 100644 src/app/dev/investasi/main/saham_saya/page.tsx create mode 100644 src/app/dev/investasi/main/transaksi/page.tsx rename src/app/dev/investasi/status_transaksi/{ => berhasil}/layout.tsx (100%) rename src/app/dev/investasi/status_transaksi/{ => berhasil}/page.tsx (100%) create mode 100644 src/app/dev/investasi/status_transaksi/gagal/layout.tsx create mode 100644 src/app/dev/investasi/status_transaksi/gagal/page.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/draft/layout.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/draft/page.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/publish/layout.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/publish/page.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/reject/layout.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/reject/page.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/review/layout.tsx create mode 100644 src/app_modules/investasi/detail_portofolio/review/page.tsx create mode 100644 src/app_modules/investasi/main/saham_saya.tsx create mode 100644 src/app_modules/investasi/portofolio/layout.tsx create mode 100644 src/app_modules/investasi/status_transaksi/gagal/layout.tsx create mode 100644 src/app_modules/investasi/status_transaksi/gagal/view.tsx create mode 100644 src/app_modules/investasi/transaksi/layout.tsx create mode 100644 src/app_modules/investasi/transaksi/page.tsx create mode 100644 src/bin/seeder/investasi/status_investasi.json diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 971903e2..87cdd3bf 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -22,6 +22,7 @@ model User { UserSession UserSession? Profile Profile? Investasi Investasi[] + SahamTerbeli SahamTerbeli[] } model MasterUserRole { @@ -61,13 +62,14 @@ model Profile { } model Images { - id String @id @default(cuid()) - url String - active Boolean @default(true) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - Profile Profile? - Investasi Investasi? + id String @id @default(cuid()) + url String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + Profile Profile? + Investasi Investasi? + BeritaInvestasi BeritaInvestasi[] } model Katalog { @@ -94,6 +96,8 @@ model MasterBidangBisnis { Katalog Katalog[] } +// -------------------- INVESTASI --------------------- // +// Table investasi / saham model Investasi { id String @id @default(cuid()) title String @@ -105,7 +109,7 @@ model Investasi { createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt author User? @relation(fields: [authorId], references: [id]) - authorId String? + authorId String? MasterPeriodeDeviden MasterPeriodeDeviden? @relation(fields: [masterPeriodeDevidenId], references: [id]) masterPeriodeDevidenId String? @@ -116,6 +120,16 @@ model Investasi { ImageInvestasi Images? @relation(fields: [imagesId], references: [id]) imagesId String? @unique + + ProspektusInvestasi ProspektusInvestasi? + DokumenInvestasi DokumenInvestasi? @relation(fields: [dokumenInvestasiId], references: [id]) + dokumenInvestasiId String? + BeritaInvestasi BeritaInvestasi? @relation(fields: [beritaInvestasiId], references: [id]) + beritaInvestasiId String? + SahamTerbeli SahamTerbeli? @relation(fields: [sahamTerbeliId], references: [id]) + sahamTerbeliId String? + MasterStatusInvestasi MasterStatusInvestasi? @relation(fields: [masterStatusInvestasiId], references: [id]) + masterStatusInvestasiId String? @default("1") } model MasterPencarianInvestor { @@ -144,3 +158,57 @@ model MasterPembagianDeviden { updatedAt DateTime @default(now()) @updatedAt investasi Investasi[] } + +model MasterStatusInvestasi { + id String @id @default(cuid()) + name String + color String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + investasi Investasi[] +} + +model ProspektusInvestasi { + id String @id @default(cuid()) + url String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + investasi Investasi @relation(fields: [investasiId], references: [id]) + investasiId String @unique +} + +model DokumenInvestasi { + id String @id @default(cuid()) + url String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + investasi Investasi[] +} + +model BeritaInvestasi { + id String @id @default(cuid()) + title String + deskripsi String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + investasi Investasi[] + ImageBerita Images? @relation(fields: [imagesId], references: [id]) + imagesId String? +} + +model SahamTerbeli { + id String @id @default(cuid()) + totalBeli String + jumlahLembar String + active Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt + + author User @relation(fields: [authorId], references: [id]) + authorId String + investasi Investasi[] +} diff --git a/src/app/api/seeder/route.ts b/src/app/api/seeder/route.ts index c1c653cc..326842be 100644 --- a/src/app/api/seeder/route.ts +++ b/src/app/api/seeder/route.ts @@ -5,6 +5,7 @@ import bidangBisnis from "../../../bin/seeder/bidang_bisnis.json"; import pencarianInvestor from "./../../../bin/seeder/investasi/pencarian_investor.json"; import periodeDeviden from "./../../../bin/seeder/investasi/periode_deviden.json"; import pembagianDeviden from "./../../../bin/seeder/investasi/pembagian_deviden.json"; +import statusInvestasi from "./../../../bin/seeder/investasi/status_investasi.json"; export async function GET(req: Request) { const dev = new URL(req.url).searchParams.get("dev"); @@ -89,6 +90,24 @@ export async function GET(req: Request) { }); } + // for (let i of statusInvestasi) { + // await prisma.masterStatusInvestasi.upsert({ + // where: { + // id: i.id, + // }, + // create: { + // id: i.id, + // name: i.name, + // color: i.color, + // }, + // update: { + // id: i.id, + // name: i.name, + // color: i.color, + // }, + // }); + // } + return NextResponse.json({ success: true }); } diff --git a/src/app/dev/investasi/detail_portofolio/draft/layout.tsx b/src/app/dev/investasi/detail_portofolio/draft/layout.tsx new file mode 100644 index 00000000..a5ced2f7 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/draft/layout.tsx @@ -0,0 +1,8 @@ +import { LayoutDetailDraftInvestasi } from "@/app_modules/investasi"; +import React from "react"; + +export default async function Layout({children}: {children: React.ReactNode}) { + return<> + {children} + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/draft/page.tsx b/src/app/dev/investasi/detail_portofolio/draft/page.tsx new file mode 100644 index 00000000..e07bb427 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/draft/page.tsx @@ -0,0 +1,8 @@ +import { DetailDraftInvestasi } from "@/app_modules/investasi"; + +export default async function Page() { + return<> + + + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/publish/layout.tsx b/src/app/dev/investasi/detail_portofolio/publish/layout.tsx new file mode 100644 index 00000000..a52bced1 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/publish/layout.tsx @@ -0,0 +1,9 @@ +import { LayoutDetailPublishInvestasi } from "@/app_modules/investasi"; +import React from "react"; + +export default async function Layout({children}: {children: React.ReactNode}) { + return<> + {children} + + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/publish/page.tsx b/src/app/dev/investasi/detail_portofolio/publish/page.tsx new file mode 100644 index 00000000..46e707c3 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/publish/page.tsx @@ -0,0 +1,7 @@ +import { DetailPublishInvestasi } from "@/app_modules/investasi"; + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/reject/layout.tsx b/src/app/dev/investasi/detail_portofolio/reject/layout.tsx new file mode 100644 index 00000000..6d374c05 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/reject/layout.tsx @@ -0,0 +1,8 @@ +import { LayoutDetailRejectInvestasi } from "@/app_modules/investasi"; +import React from "react"; + +export default async function Layout({children}: {children: React.ReactNode}) { + return<> + {children} + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/reject/page.tsx b/src/app/dev/investasi/detail_portofolio/reject/page.tsx new file mode 100644 index 00000000..37ade701 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/reject/page.tsx @@ -0,0 +1,7 @@ +import { DetailRejectInvestasi } from "@/app_modules/investasi"; + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/review/layout.tsx b/src/app/dev/investasi/detail_portofolio/review/layout.tsx new file mode 100644 index 00000000..30869978 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/review/layout.tsx @@ -0,0 +1,8 @@ +import { LayoutDetailReviewInvestasi } from "@/app_modules/investasi"; +import React from "react"; + +export default async function Layout({children}: {children: React.ReactNode}) { + return<> + {children} + +} \ No newline at end of file diff --git a/src/app/dev/investasi/detail_portofolio/review/page.tsx b/src/app/dev/investasi/detail_portofolio/review/page.tsx new file mode 100644 index 00000000..46ced138 --- /dev/null +++ b/src/app/dev/investasi/detail_portofolio/review/page.tsx @@ -0,0 +1,7 @@ +import { DetailReviewInvestasi } from "@/app_modules/investasi"; + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/investasi/main/portofolio/page.tsx b/src/app/dev/investasi/main/portofolio/page.tsx index a8f6cbf2..b388ad27 100644 --- a/src/app/dev/investasi/main/portofolio/page.tsx +++ b/src/app/dev/investasi/main/portofolio/page.tsx @@ -1,6 +1,6 @@ import { PortofolioInvestasi } from "@/app_modules/investasi"; -export default async function Page() { +export default async function Page({params}: {params: {id: string}}) { return<> diff --git a/src/app/dev/investasi/main/saham_saya/page.tsx b/src/app/dev/investasi/main/saham_saya/page.tsx new file mode 100644 index 00000000..4d6b80ec --- /dev/null +++ b/src/app/dev/investasi/main/saham_saya/page.tsx @@ -0,0 +1,9 @@ +import { InvestasiSahamTerbeli } from "@/app_modules/investasi"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/investasi/main/transaksi/page.tsx b/src/app/dev/investasi/main/transaksi/page.tsx new file mode 100644 index 00000000..a5496acb --- /dev/null +++ b/src/app/dev/investasi/main/transaksi/page.tsx @@ -0,0 +1,9 @@ +import { TransaksiInvestasi } from "@/app_modules/investasi"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/investasi/status_transaksi/layout.tsx b/src/app/dev/investasi/status_transaksi/berhasil/layout.tsx similarity index 100% rename from src/app/dev/investasi/status_transaksi/layout.tsx rename to src/app/dev/investasi/status_transaksi/berhasil/layout.tsx diff --git a/src/app/dev/investasi/status_transaksi/page.tsx b/src/app/dev/investasi/status_transaksi/berhasil/page.tsx similarity index 100% rename from src/app/dev/investasi/status_transaksi/page.tsx rename to src/app/dev/investasi/status_transaksi/berhasil/page.tsx diff --git a/src/app/dev/investasi/status_transaksi/gagal/layout.tsx b/src/app/dev/investasi/status_transaksi/gagal/layout.tsx new file mode 100644 index 00000000..d9a96998 --- /dev/null +++ b/src/app/dev/investasi/status_transaksi/gagal/layout.tsx @@ -0,0 +1,16 @@ +import { LayoutStatusTransaksiInvestasi_Gagal } from "@/app_modules/investasi"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + + {children} + + + ); +} diff --git a/src/app/dev/investasi/status_transaksi/gagal/page.tsx b/src/app/dev/investasi/status_transaksi/gagal/page.tsx new file mode 100644 index 00000000..184b345c --- /dev/null +++ b/src/app/dev/investasi/status_transaksi/gagal/page.tsx @@ -0,0 +1,7 @@ +import { StatusTransaksiInvestasi_Gagal } from "@/app_modules/investasi"; + +export default async function Page() { + return <> + + +} \ No newline at end of file diff --git a/src/app/lib/router_hipmi/router_investasi.ts b/src/app/lib/router_hipmi/router_investasi.ts index eba60fb8..44272965 100644 --- a/src/app/lib/router_hipmi/router_investasi.ts +++ b/src/app/lib/router_hipmi/router_investasi.ts @@ -1,12 +1,19 @@ export const RouterInvestasi = { //INVESTASI + main: "/dev/investasi/main", + main_porto: "/dev/investasi/main/portofolio", + main_investasi: "/dev/investasi/main/saham_saya", + main_transaksi: "/dev/investasi/main/transaksi", transfer: "/dev/investasi/transfer", dialog_transaksi: "/dev/investasi/dialog_page/transaksi_saham", dialog_create: "/dev/investasi/dialog_page/create", + // portofolio portofolio: "/dev/investasi/main/portofolio", + // proses beli saham - status_transaksi: "/dev/investasi/status_transaksi", + status_transaksi: "/dev/investasi/status_transaksi/berhasil", + status_transaksi_gagal: "/dev/investasi/status_transaksi/gagal", metode_transfer: "/dev/investasi/metode_transfer", // edit // edit_intro: "/dev/investasi/edit_intro/", @@ -18,8 +25,13 @@ export const RouterInvestasi = { detail_prospektus: "/dev/investasi/detail_prospektus/", detail_dokumen: "/dev/investasi/detail_dokumen/", detail_berita: "/dev/investasi/detail_berita/", + detail_draft: "/dev/investasi/detail_portofolio/draft", + detail_publish: "/dev/investasi/detail_portofolio/publish", + detail_review: "/dev/investasi/detail_portofolio/review", + detail_reject: "/dev/investasi/detail_portofolio/reject", + // berita berita: "/dev/investasi/berita/", create_berita: "/dev/investasi/create_berita", - list_edit_berita: "/dev/investasi/list_edit_berita/" + list_edit_berita: "/dev/investasi/list_edit_berita/", }; diff --git a/src/app_modules/admin/investasi/konfirmasi/view.tsx b/src/app_modules/admin/investasi/konfirmasi/view.tsx index e0864d5f..861ea200 100644 --- a/src/app_modules/admin/investasi/konfirmasi/view.tsx +++ b/src/app_modules/admin/investasi/konfirmasi/view.tsx @@ -18,9 +18,15 @@ import { Button, Text, Image, + Collapse, + Textarea, } from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; import { IconBookDownload, + IconChevronDown, + IconChevronLeft, + IconChevronRight, IconFileDescription, IconSpeakerphone, } from "@tabler/icons-react"; @@ -31,6 +37,8 @@ import toast from "react-simple-toasts"; export default function Admin_KonfirmasiInvestasi({ id }: { id: string }) { const router = useRouter(); const [publish, setPublish] = useState(true); + const [opened, { toggle }] = useDisclosure(false); + const listBox = [ { id: 1, @@ -125,7 +133,7 @@ export default function Admin_KonfirmasiInvestasi({ id }: { id: string }) { {/* List Box */} - + {listBox.map((e) => ( -
- {publish ? ( - - ) : ( - - )} -
+ + {/* Button publish dan reject */} + + {/* Publish */} + +
+ {publish ? ( + + ) : ( + + )} +
+
+ {/* Reject */} + +
+ +
+
+
+ + {/* Text area reject */} + + + +