Merge pull request #88 from bipproduction/map/view

Map/view
This commit is contained in:
Bagasbanuna02
2024-08-15 11:10:19 +08:00
committed by GitHub
237 changed files with 5686 additions and 2683 deletions

3
.env
View File

@@ -1,4 +1,5 @@
DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public" DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public"
PWD="QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb" PWD="QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb"
Client_KEY="SB-Mid-client-9NDTxltqdZrEB9m-" Client_KEY="SB-Mid-client-9NDTxltqdZrEB9m-"
Server_KEY="SB-Mid-server-NyltU-U7fLVQd1nv1LWBKylr" Server_KEY="SB-Mid-server-NyltU-U7fLVQd1nv1LWBKylr"
MAPBOX_TOKEN="pk.eyJ1IjoibWFsaWtrdXJvc2FraSIsImEiOiJjbHppZHh2enYwZnQ3MmlyMWc2Y2RlMzZoIn0.XssvJvq_iniclf8UhvXaIg"

View File

@@ -36,6 +36,7 @@
"@tiptap/react": "^2.2.3", "@tiptap/react": "^2.2.3",
"@tiptap/starter-kit": "^2.2.3", "@tiptap/starter-kit": "^2.2.3",
"@types/lodash": "^4.17.4", "@types/lodash": "^4.17.4",
"@types/mapbox-gl": "^3.4.0",
"@types/node": "20.4.5", "@types/node": "20.4.5",
"@types/react": "18.2.17", "@types/react": "18.2.17",
"@types/react-dom": "18.2.7", "@types/react-dom": "18.2.7",
@@ -51,6 +52,7 @@
"iron-session": "^6.3.1", "iron-session": "^6.3.1",
"jotai": "^2.4.3", "jotai": "^2.4.3",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"mapbox-gl": "^3.5.2",
"midtrans-client": "^1.3.1", "midtrans-client": "^1.3.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"mqtt": "^5.5.0", "mqtt": "^5.5.0",
@@ -66,6 +68,7 @@
"react-icons": "^5.0.1", "react-icons": "^5.0.1",
"react-infinite-scroll-component": "^6.1.0", "react-infinite-scroll-component": "^6.1.0",
"react-international-phone": "^4.2.6", "react-international-phone": "^4.2.6",
"react-map-gl": "^7.1.7",
"react-quill": "^2.0.0", "react-quill": "^2.0.0",
"react-responsive-carousel": "^3.2.23", "react-responsive-carousel": "^3.2.23",
"react-simple-toasts": "^5.10.0", "react-simple-toasts": "^5.10.0",

View File

@@ -45,6 +45,7 @@ model User {
UserProjectCollaboration_Notifikasi ProjectCollaboration_Notifikasi[] @relation("UserNotifProjectToUser") UserProjectCollaboration_Notifikasi ProjectCollaboration_Notifikasi[] @relation("UserNotifProjectToUser")
Admin_Notifikasi Notifikasi[] @relation("AdminNotifikasi") Admin_Notifikasi Notifikasi[] @relation("AdminNotifikasi")
User_Notifikasi Notifikasi[] @relation("UserNotifikasi") User_Notifikasi Notifikasi[] @relation("UserNotifikasi")
BusinessMaps BusinessMaps[]
} }
model MasterUserRole { model MasterUserRole {
@@ -865,9 +866,20 @@ model Notifikasi {
Role MasterUserRole? @relation(fields: [userRoleId], references: [id]) Role MasterUserRole? @relation(fields: [userRoleId], references: [id])
userRoleId String userRoleId String
User User? @relation("UserNotifikasi", fields: [userId], references: [id], map: "NotifikasiUser") User User? @relation("UserNotifikasi", fields: [userId], references: [id], map: "NotifikasiUser")
userId String? userId String?
Admin User? @relation("AdminNotifikasi", fields: [adminId], references: [id], map: "NotifikasiAdmin") Admin User? @relation("AdminNotifikasi", fields: [adminId], references: [id], map: "NotifikasiAdmin")
adminId String? adminId String?
}
model BusinessMaps {
id String @id @default(cuid())
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
namePin String
latitude Float
longitude Float
Author User? @relation(fields: [authorId], references: [id])
authorId String?
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

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

View File

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

View File

@@ -0,0 +1,14 @@
import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi";
import { funGetUserProfile } from "@/app_modules/fun_global/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 investasiId = params.id;
const dataInvestasi = await getOneInvestasiById(investasiId);
return (
<>
<Admin_KonfirmasiInvestasi dataInvestasi={dataInvestasi as any} />
</>
);
}

View File

@@ -2,15 +2,14 @@ import { Admin_KonfirmasiInvestasi } from "@/app_modules/admin/investasi";
import { funGetUserProfile } from "@/app_modules/fun_global/get_user_profile"; import { funGetUserProfile } from "@/app_modules/fun_global/get_user_profile";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id"; 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) const dataInvestasi = await getOneInvestasiById(params.id);
const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any) const dataUser = await funGetUserProfile(dataInvestasi?.authorId as any);
// console.log(dataUser) // console.log(dataUser)
return ( return (
<> <>
<Admin_KonfirmasiInvestasi dataInvestasi={dataInvestasi as any} dataUser={dataUser as any} /> <Admin_KonfirmasiInvestasi dataInvestasi={dataInvestasi as any} />
</> </>
); );
} }

View File

@@ -1,8 +1,8 @@
import { Admin_TablePublishInvestasi } from "@/app_modules/admin/investasi"; import { Admin_TablePublishInvestasi } from "@/app_modules/admin/investasi";
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi"; import { adminInvestasi_funGetAllPublish } from "@/app_modules/admin/investasi/fun/get/get_all_publish";
export default async function Page() { export default async function Page() {
const listInvestasi = await Admin_funGetAllInvestasi(); const listInvestasi = await adminInvestasi_funGetAllPublish({page: 1});
return ( return (
<> <>

View File

@@ -1,10 +1,11 @@
import { Admin_TableRejectInvestasi } from "@/app_modules/admin/investasi"; import { Admin_TableRejectInvestasi } from "@/app_modules/admin/investasi";
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi"; import { adminInvestasi_funGetAllReject } from "@/app_modules/admin/investasi/fun/get/get_all_reject";
export default async function Page() { export default async function Page() {
const dataInvestsi = await Admin_funGetAllInvestasi() const dataInvestsi = await adminInvestasi_funGetAllReject({page: 1});
return <> return (
<Admin_TableRejectInvestasi dataInvestsi={dataInvestsi as any}/> <>
<Admin_TableRejectInvestasi dataInvestsi={dataInvestsi as any} />
</> </>
} );
}

View File

@@ -1,9 +1,11 @@
import { Admin_TableReviewInvestasi } from "@/app_modules/admin/investasi"; import { Admin_TableReviewInvestasi } from "@/app_modules/admin/investasi";
import Admin_funGetAllInvestasi from "@/app_modules/admin/investasi/fun/get_all_investasi"; import { adminInvestasi_funGetAllReview } from "@/app_modules/admin/investasi/fun/get/get_all_review";
export default async function Page() { export default async function Page() {
const dataInvestsi = await Admin_funGetAllInvestasi() const dataInvestsi = await adminInvestasi_funGetAllReview({ page: 1 });
return <> return (
<Admin_TableReviewInvestasi dataInvestsi={dataInvestsi as any}/> <>
<Admin_TableReviewInvestasi dataInvestsi={dataInvestsi as any} />
</> </>
} );
}

View File

@@ -0,0 +1,11 @@
import { LayoutDonasi_BuktiTransfer } from "@/app_modules/donasi";
export default async function Page({ params }: { params: { id: string } }) {
let imageId = params.id;
return (
<>
<LayoutDonasi_BuktiTransfer imageId={imageId} />
</>
);
}

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage />
</>
);
}

View File

@@ -1,12 +1,16 @@
import { DonaturDonasi } from "@/app_modules/donasi"; import { DonaturDonasi } from "@/app_modules/donasi";
import { Donasi_getListDonatur } from "@/app_modules/donasi/fun/get/get_list_donatur"; import { donasi_funGetListDonaturById } from "@/app_modules/donasi/fun/get/get_list_donatur";
export default async function Page({ params }: { params: { id: string } }) { export default async function Page({ params }: { params: { id: string } }) {
const listDonatur = await Donasi_getListDonatur(params.id); const donasiId = params.id;
const listDonatur = await donasi_funGetListDonaturById({
page: 1,
donasiId: donasiId,
});
return ( return (
<> <>
<DonaturDonasi listDonatur={listDonatur as any} /> <DonaturDonasi listDonatur={listDonatur as any} donasiId={donasiId} />
</> </>
); );
} }

View File

@@ -1,13 +1,13 @@
import { KabarDonasi } from "@/app_modules/donasi"; import { KabarDonasi } from "@/app_modules/donasi";
import { Donasi_getListKabar } from "@/app_modules/donasi/fun/get/get_list_kabar"; import { donasi_funGetListKabarById } from "@/app_modules/donasi/fun/get/get_list_kabar";
export default async function Page({params}: {params: {id: string}}) { export default async function Page({params}: {params: {id: string}}) {
const donasiId = params.id const donasiId = params.id
const listKabar = await Donasi_getListKabar(donasiId) const listKabar = await donasi_funGetListKabarById({ page: 1, donasiId : donasiId});
return ( return (
<> <>
<KabarDonasi listKabar={listKabar as any} /> <KabarDonasi listKabar={listKabar as any} donasiId={donasiId} />
</> </>
); );
} }

View File

@@ -1,9 +1,9 @@
import { ListKabarDonasi } from "@/app_modules/donasi"; import { ListKabarDonasi } from "@/app_modules/donasi";
import { Donasi_getListKabar } from "@/app_modules/donasi/fun/get/get_list_kabar"; import { donasi_funGetListKabarById } from "@/app_modules/donasi/fun/get/get_list_kabar";
export default async function Page({params}: {params: {id: string}}) { export default async function Page({params}: {params: {id: string}}) {
const donasiId = params.id const donasiId = params.id
const listKabar = await Donasi_getListKabar(donasiId) const listKabar = await donasi_funGetListKabarById({page: 1, donasiId : donasiId});
return ( return (
<> <>

View File

@@ -1,8 +1,8 @@
import { MainDonasi } from "@/app_modules/donasi"; import { MainDonasi } from "@/app_modules/donasi";
import { Donasi_getListBeranda } from "@/app_modules/donasi/fun/get/get_list_beranda"; import { donasi_funGetAllPublish } from "@/app_modules/donasi/fun/get/get_list_beranda";
export default async function Page() { export default async function Page() {
const listDonasi = await Donasi_getListBeranda() const listDonasi = await donasi_funGetAllPublish({ page: 1 });
// console.log(listDonasi) // console.log(listDonasi)
return <MainDonasi listDonasi={listDonasi as any}/> return <MainDonasi listDonasi={listDonasi as any} />;
} }

View File

@@ -1,10 +1,8 @@
import { DonasiSayaDonasi } from "@/app_modules/donasi"; import { DonasiSayaDonasi } from "@/app_modules/donasi";
import { Donasi_getInvoiceByAuthorId } from "@/app_modules/donasi/fun/get/get_list_invoice_by_author_id"; import { donasi_funGetAllInvoiceByAuthorId } from "@/app_modules/donasi/fun/get/get_all_invoice_by_author_id";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page() { export default async function Page() {
const authorId = await user_getOneUserId(); const listInvoice = await donasi_funGetAllInvoiceByAuthorId({ page: 1 });
const listInvoice = await Donasi_getInvoiceByAuthorId(authorId);
return <DonasiSayaDonasi listInvoice={listInvoice as any} />; return <DonasiSayaDonasi listInvoice={listInvoice as any} />;
} }

View File

@@ -1,13 +1,17 @@
import { PostingDonasi } from "@/app_modules/donasi"; import { PostingDonasi } from "@/app_modules/donasi";
import Donasi_getByStatus from "@/app_modules/donasi/fun/get/get_donasi_by_status"; import Donasi_getByStatus from "@/app_modules/donasi/fun/get/get_donasi_by_status";
import { donasi_funGetAllStatusDraft } from "@/app_modules/donasi/fun/get/status/get_all_status_draft";
import { donasi_funGetAllStatusPublish } from "@/app_modules/donasi/fun/get/status/get_all_status_publish";
import { donasi_funGetAllStatusReject } from "@/app_modules/donasi/fun/get/status/get_all_status_reject";
import { donasi_funGetAllStatusReview } from "@/app_modules/donasi/fun/get/status/get_all_status_review";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token"; import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page() { export default async function Page() {
const authorId = await user_getOneUserId(); const authorId = await user_getOneUserId();
const listPublish = await Donasi_getByStatus(authorId, "1") const listPublish = await donasi_funGetAllStatusPublish({page: 1});
const listReview = await Donasi_getByStatus(authorId, "2"); const listReview = await donasi_funGetAllStatusReview({page: 1});
const listDraft = await Donasi_getByStatus(authorId, "3"); const listDraft = await donasi_funGetAllStatusDraft({page: 1});
const listReject = await Donasi_getByStatus(authorId, "4") const listReject = await donasi_funGetAllStatusReject({page: 1});

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage />
</>
);
}

View File

@@ -1,21 +1,16 @@
import { PencairanDanaDonasi } from "@/app_modules/donasi"; import { PencairanDanaDonasi } from "@/app_modules/donasi";
import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan"; import { donasi_funGetListPencairanDanaById } from "@/app_modules/donasi/fun/get/get_list_pencairan_dana_by_id";
import { Donasi_getListPencairanDanaById } from "@/app_modules/donasi/fun/get/get_list_pencairan_dana_by_id";
import { Donasi_getTotalPencairanDanaById } from "@/app_modules/donasi/fun/get/get_pencairan_dana_by_id"; import { Donasi_getTotalPencairanDanaById } from "@/app_modules/donasi/fun/get/get_pencairan_dana_by_id";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
import { Loader } from "@mantine/core";
export default async function Page({ params }: { params: { id: string } }) { export default async function Page({ params }: { params: { id: string } }) {
let donasiId = params.id; let donasiId = params.id;
const totalAkumulasi = await Donasi_getTotalPencairanDanaById(donasiId); const totalAkumulasi = await Donasi_getTotalPencairanDanaById(donasiId);
const listPencairan = await Donasi_getListPencairanDanaById(donasiId); const listPencairan = await donasi_funGetListPencairanDanaById({page: 1, donasiId: donasiId});
// if (authorId != totalAkumulasi?.authorId) return <><NotifPeringatan /></>
return ( return (
<> <>
<PencairanDanaDonasi <PencairanDanaDonasi
donasiId={donasiId}
totalAkumulasi={totalAkumulasi as any} totalAkumulasi={totalAkumulasi as any}
listPencairan={listPencairan as any} listPencairan={listPencairan as any}
/> />

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage />
</>
);
}

View File

@@ -1,16 +1,16 @@
import { Event_StatusPage } from "@/app_modules/event"; import { Event_StatusPage } from "@/app_modules/event";
import { Event_getListByStatusId } from "@/app_modules/event/fun/get/get_list_event_by_status_id";
import { event_getAllDraft } from "@/app_modules/event/fun/get/status/get_all_draft"; import { event_getAllDraft } from "@/app_modules/event/fun/get/status/get_all_draft";
import { event_getAllReject } from "@/app_modules/event/fun/get/status/get_all_reject"; import { event_getAllReject } from "@/app_modules/event/fun/get/status/get_all_reject";
import { event_getAllReview } from "@/app_modules/event/fun/get/status/get_all_review"; import { event_getAllReview } from "@/app_modules/event/fun/get/status/get_all_review";
import { event_funGetAllStatusPublish } from "@/app_modules/event/fun/get/status/get_all_status_publish";
import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token"; import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token";
export default async function Page() { export default async function Page() {
const authorId = await user_getOneUserId(); const authorId = await user_getOneUserId();
const listPublish = await Event_getListByStatusId("1", authorId); const listPublish = await event_funGetAllStatusPublish({ page: 1 });
const listReview = await event_getAllReview({page: 1}); const listReview = await event_getAllReview({ page: 1 });
const listDraft = await event_getAllDraft({ page: 1 }); const listDraft = await event_getAllDraft({ page: 1 });
const listReject = await event_getAllReject({page: 1}); const listReject = await event_getAllReject({ page: 1 });
return ( return (
<Event_StatusPage <Event_StatusPage

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage/>
</>
);
}

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage/>
</>
);
}

View File

@@ -7,7 +7,7 @@ export default async function Page({params}: {params: {id: string}}) {
const dataInvestasi = await getOneInvestasiById(params.id) const dataInvestasi = await getOneInvestasiById(params.id)
return<> return<>
<DetailDraftInvestasi dataInvestasi={dataInvestasi}/> <DetailDraftInvestasi dataInvestasi={dataInvestasi as any}/>
</> </>
} }

View File

@@ -1,10 +1,11 @@
import { DetailPublishInvestasi } from "@/app_modules/investasi"; import { DetailPublishInvestasi } from "@/app_modules/investasi";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id"; 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);
const dataInvestasi = await getOneInvestasiById(params.id) return (
return<> <>
<DetailPublishInvestasi dataInvestasi={dataInvestasi as any}/> <DetailPublishInvestasi dataInvestasi={dataInvestasi as any} />
</> </>
} );
}

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage/>
</>
);
}

View File

@@ -1,45 +1,12 @@
import { MainInvestasi } from "@/app_modules/investasi"; import { MainInvestasi } from "@/app_modules/investasi";
import funUpadteProgresPersenInvestasi from "@/app_modules/investasi/fun/fun_update_progres_persen"; import { investasi_funGetAllPublish } from "@/app_modules/investasi/fun/get_all_investasi";
import funUpadteProgresWaktuInvestasi from "@/app_modules/investasi/fun/fun_update_progres_waktu";
import getAllDataPublishInvestasi from "@/app_modules/investasi/fun/get_list_all_investasi";
import { getListAllPublish } from "@/app_modules/investasi/fun/get_list_all_publish";
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
import _ from "lodash";
export default async function Page() { export default async function Page() {
const dataOnProgres = await getListAllPublish("1"); const allData = await investasi_funGetAllPublish();
const dataSelesai = await getListAllPublish("2");
const dataWaktuHabis = await getListAllPublish("3");
const allData = await getAllDataPublishInvestasi();
// console.log(allData)
// const dataInves: MODEL_Investasi[] = [];
// for (let i of allData as any) {
// await funUpadteProgresWaktuInvestasi(i).then(
// async () =>
// await funUpadteProgresPersenInvestasi(i).then(
// async () =>
// await getAllDataPublishInvestasi().then((val: any) =>
// dataInves.push(val)
// )
// )
// );
// }
// const realData = dataInves.map((e) => e)
// console.log(allData)
return ( return (
<> <>
<MainInvestasi <MainInvestasi listData={allData as any} />
listData={allData as any}
dataSelesai={dataSelesai as any}
dataWaktuHabis={dataWaktuHabis as any}
/>
</> </>
); );
} }

View File

@@ -14,7 +14,7 @@ export default async function Page() {
}) })
); );
const listTransaksi = await getListTransaksiBerhasilInvestasi(user.id) const listTransaksi = await getListTransaksiBerhasilInvestasi(user.id)
// console.log(listTransaksi)
return ( return (
<> <>
<InvestasiSahamTerbeli listTransaksi={listTransaksi as any} /> <InvestasiSahamTerbeli listTransaksi={listTransaksi as any} />

View File

@@ -3,10 +3,15 @@ import React from "react";
export default async function Layout({ export default async function Layout({
children, children,
params,
}: { }: {
children: React.ReactNode; children: React.ReactNode;
params: {id: string}
}) { }) {
const investasiId = params.id;
return ( return (
<LayoutProsesTransaksiInvestasi>{children}</LayoutProsesTransaksiInvestasi> <LayoutProsesTransaksiInvestasi investasiId={investasiId}>
{children}
</LayoutProsesTransaksiInvestasi>
); );
} }

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage/>
</>
);
}

View File

@@ -1,9 +0,0 @@
import ComponentGlobal_V2_LoadingPage from "@/app_modules/_global/loading_page_v2";
export default async function Page() {
return (
<>
<ComponentGlobal_V2_LoadingPage/>
</>
);
}

View File

@@ -0,0 +1,9 @@
import { Map_CreateNewPin } from "@/app_modules/map/view";
export default async function Page() {
return (
<>
<Map_CreateNewPin />
</>
);
}

View File

@@ -0,0 +1,14 @@
import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data";
import { Map_View } from "@/app_modules/map/view";
const mapboxToken = process.env.MAPBOX_TOKEN!;
export default async function Page() {
if (!mapboxToken)
return <ComponentGlobal_IsEmptyData text="Mapbox token not found" />;
return (
<>
<Map_View mapboxToken={mapboxToken} />
</>
);
}

View File

@@ -0,0 +1,10 @@
import { Map_Splash } from "@/app_modules/map/view";
export default async function Page() {
return (
<>
<Map_Splash />
</>
);
}

View File

@@ -10,6 +10,7 @@ import {
useEmotionCache, useEmotionCache,
} from "@mantine/core"; } from "@mantine/core";
import { Notifications } from "@mantine/notifications"; import { Notifications } from "@mantine/notifications";
import { Provider } from "jotai";
import { useServerInsertedHTML } from "next/navigation"; import { useServerInsertedHTML } from "next/navigation";
import "react-toastify/dist/ReactToastify.css"; import "react-toastify/dist/ReactToastify.css";
@@ -39,25 +40,7 @@ export default function RootStyleRegistry({
<CacheProvider value={cache}> <CacheProvider value={cache}>
<MantineProvider withGlobalStyles withNormalizeCSS> <MantineProvider withGlobalStyles withNormalizeCSS>
<Notifications position="top-center" containerWidth={300} /> <Notifications position="top-center" containerWidth={300} />
{children} <Provider>{children}</Provider>
{/* <Box
bg={"#252A2F"}
pos={"fixed"}
w={"100%"}
h={"100%"}
style={{
overflowY: "auto",
}}
>
<Container
mih={"100vh"}
p={0}
size={rem(500)}
bg={MainColor.darkblue}
>
</Container>
</Box> */}
</MantineProvider> </MantineProvider>
</CacheProvider> </CacheProvider>
</body> </body>

View File

@@ -3,4 +3,9 @@ export const RouterAdminInvestasi = {
table_publish: "/dev/admin/investasi/sub-menu/publish", table_publish: "/dev/admin/investasi/sub-menu/publish",
table_review: "/dev/admin/investasi/sub-menu/review", table_review: "/dev/admin/investasi/sub-menu/review",
table_reject: "/dev/admin/investasi/sub-menu/reject", table_reject: "/dev/admin/investasi/sub-menu/reject",
// detail
detail_publish: "/dev/admin/investasi/detail/publish/",
detail_review: "/dev/admin/investasi/detail/review/",
detail_reject: "/dev/admin/investasi/detail/reject/",
}; };

View File

@@ -36,6 +36,7 @@ export const RouterDonasi = {
detail_donasi_saya: "/dev/donasi/detail/detail_donasi_saya/", detail_donasi_saya: "/dev/donasi/detail/detail_donasi_saya/",
detail_notif: "/dev/donasi/detail/detail_notif/", detail_notif: "/dev/donasi/detail/detail_notif/",
//alur donasi //alur donasi
donatur: "/dev/donasi/donatur/", donatur: "/dev/donasi/donatur/",
kabar: "/dev/donasi/kabar/", kabar: "/dev/donasi/kabar/",
@@ -44,6 +45,7 @@ export const RouterDonasi = {
cerita_penggalang: "/dev/donasi/cerita_penggalang/", cerita_penggalang: "/dev/donasi/cerita_penggalang/",
list_kabar: "/dev/donasi/list_kabar/", list_kabar: "/dev/donasi/list_kabar/",
notif_page: "/dev/donasi/notif_page/", notif_page: "/dev/donasi/notif_page/",
bukti_transfer: "/dev/donasi/bukti-transfer/",
// proses donasi // proses donasi
masukan_donasi: "/dev/donasi/proses_donasi/masukan_donasi/", masukan_donasi: "/dev/donasi/proses_donasi/masukan_donasi/",

View File

@@ -0,0 +1,5 @@
export const RouterMap = {
splash: "/dev/map/splash",
main_view: "/dev/map/main",
create: "/dev/map/create",
};

View File

@@ -82,7 +82,7 @@ export default function UIGlobal_Drawer({
onClick={() => { onClick={() => {
setPageId(e?.id); setPageId(e?.id);
setIsLoading(true); setIsLoading(true);
router.push(e?.path); router.push(e?.path, {scroll: false});
}} }}
> >
{isLoading && e?.id === pageId ? ( {isLoading && e?.id === pageId ? (

View File

@@ -5,7 +5,11 @@ import { IconChevronLeft } from "@tabler/icons-react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
export default function ComponentAdminGlobal_BackButton({path}:{path?:string}) { export default function ComponentAdminGlobal_BackButton({
path,
}: {
path?: string;
}) {
const router = useRouter(); const router = useRouter();
const [isLoading, setLoading] = useState(false); const [isLoading, setLoading] = useState(false);
@@ -17,18 +21,21 @@ export default function ComponentAdminGlobal_BackButton({path}:{path?:string}) {
// loading={isLoading ? true : false} // loading={isLoading ? true : false}
c={"gray"} c={"gray"}
leftIcon={ leftIcon={
isLoading ? <Loader size={"xs"} color={"gray"} /> : <IconChevronLeft /> isLoading ? (
<Loader size={"xs"} color={"gray"} />
) : (
<IconChevronLeft />
)
} }
variant="white" variant="white"
onClick={() => { onClick={() => {
setLoading(true); setLoading(true);
// setTimeout(() => , 3000); // setTimeout(() => , 3000);
if(path==null){ if (path == null) {
router.back(); router.back();
}else{ } else {
router.push(path) router.push(path);
} }
}} }}
> >
Kembali Kembali

View File

@@ -88,7 +88,7 @@ export default function AdminDonasi_DetailPublish({
<> <>
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */} {/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
<Stack> <Stack>
<ComponentAdminGlobal_BackButton /> <ComponentAdminGlobal_BackButton path={RouterAdminDonasi.table_publish} />
<TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} /> <TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} />
<TampilanListDonatur <TampilanListDonatur
donatur={listDonatur} donatur={listDonatur}

View File

@@ -1,10 +1,13 @@
"use client"; "use client";
import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil";
import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal";
import { ComponentAdminGlobal_NotifikasiPeringatan } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_peringatan";
import ComponentAdminGlobal_TampilanRupiahDonasi from "@/app_modules/admin/component_global/tampilan_rupiah"; import ComponentAdminGlobal_TampilanRupiahDonasi from "@/app_modules/admin/component_global/tampilan_rupiah";
import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user";
import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box"; import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box";
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil"; import mqtt_client from "@/util/mqtt_client";
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
import { import {
AspectRatio, AspectRatio,
Button, Button,
@@ -25,12 +28,8 @@ import { useRouter } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali"; import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
import { AdminDonasi_funCreatePencairanDana } from "../../fun/create/fun_create_pencairan_dana"; import { AdminDonasi_funCreatePencairanDana } from "../../fun/create/fun_create_pencairan_dana";
import { AdminDonasi_AkumulasiPencairanById } from "../../fun/update/fun_update_akumulasi_pencairan";
import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input";
import { ComponentAdminGlobal_NotifikasiPeringatan } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_peringatan";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil";
import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal";
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id"; import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
import { AdminDonasi_AkumulasiPencairanById } from "../../fun/update/fun_update_akumulasi_pencairan";
export default function AdminDonasi_PencairanDana({ export default function AdminDonasi_PencairanDana({
donasiId, donasiId,
@@ -56,7 +55,7 @@ export default function AdminDonasi_PencairanDana({
onSuccess={(val) => { onSuccess={(val) => {
setTerkumpul(val.terkumpul); setTerkumpul(val.terkumpul);
setTotal(val.totalPencairan); setTotal(val.totalPencairan);
console.log(val) console.log(val);
}} }}
/> />
</Stack> </Stack>
@@ -148,15 +147,6 @@ function FormView({
} }
value={value.nilai} value={value.nilai}
onChange={(val) => { onChange={(val) => {
// const nilai = val.currentTarget.value;
// const nilaiTypeNumber = toNumber(val.currentTarget.value);
// if (nilaiTypeNumber > sisaDana) {
// console.log("lebih");
// } else {
// console.log("kurang");
// }
const match = val.currentTarget.value const match = val.currentTarget.value
.replace(/\./g, "") .replace(/\./g, "")
.match(/^[0-9]+$/); .match(/^[0-9]+$/);
@@ -314,24 +304,41 @@ async function onSave({
const gambar = new FormData(); const gambar = new FormData();
gambar.append("file", file as any); gambar.append("file", file as any);
await AdminDonasi_funCreatePencairanDana(body as any, gambar).then( const res = await AdminDonasi_funCreatePencairanDana(body as any, gambar);
async (res) => { if (res.status === 200) {
if (res.status === 200) { const res2 = await AdminDonasi_AkumulasiPencairanById(
await AdminDonasi_AkumulasiPencairanById( body.donasiId as any,
body.donasiId as any, body.nominalCair as any
body.nominalCair as any );
).then(async (res) => { if (res2.status === 200) {
if (res.status === 200) { const loadData = await AdminDonasi_getOneById(donasiId);
const loadData = await AdminDonasi_getOneById(donasiId); onSuccess1(loadData);
onSuccess1(loadData);
ComponentAdminGlobal_NotifikasiBerhasil(res.message); const dataNotif = {
} else { appId: loadData?.id,
ComponentAdminGlobal_NotifikasiGagal(res.message); userId: loadData?.authorId,
} pesan: loadData?.title as any,
}); status: "Pencairan Dana",
} else { kategoriApp: "DONASI",
NotifGagal(res.message); title: "Dana donasi berhasil dicairkan",
};
const notif = await adminNotifikasi_funCreateToUser({
data: dataNotif as any,
});
if (notif.status === 201) {
mqtt_client.publish(
"USER",
JSON.stringify({ userId: loadData?.authorId, count: 1 })
);
} }
ComponentAdminGlobal_NotifikasiBerhasil(res2.message);
} else {
ComponentAdminGlobal_NotifikasiGagal(res2.message);
} }
); } else {
ComponentAdminGlobal_NotifikasiGagal(res.message);
}
} }

View File

@@ -186,6 +186,7 @@ function TablePublish({ listPublish }: { listPublish: any }) {
}} }}
/> />
</Group> </Group>
{isEmpty(data) ? ( {isEmpty(data) ? (
<ComponentAdminGlobal_IsEmptyData /> <ComponentAdminGlobal_IsEmptyData />
) : ( ) : (

View File

@@ -0,0 +1,50 @@
import { MODEL_USER } from "@/app_modules/home/model/interface";
import { Paper, Stack, Title, Grid, Text } from "@mantine/core";
export function ComponentAdminInvestasi_DetailDataAuthor({
data,
}: {
data: any;
}) {
return (
<Paper withBorder p={"lg"}>
<Stack>
<Title order={3}>Data User</Title>
<Stack spacing={"xs"}>
<Grid>
<Grid.Col span={6}>
<Text fw={"bold"}>Nama:</Text>
</Grid.Col>
<Grid.Col span={6}>
<Text>{data?.Profile?.name}</Text>
</Grid.Col>
</Grid>
<Grid>
<Grid.Col span={6}>
<Text fw={"bold"}>Username:</Text>
</Grid.Col>
<Grid.Col span={6}>
<Text>@{data?.username}</Text>
</Grid.Col>
</Grid>
<Grid>
<Grid.Col span={6}>
<Text fw={"bold"}>Nomor:</Text>
</Grid.Col>
<Grid.Col span={6}>
<Text>+ {data?.nomor}</Text>
</Grid.Col>
</Grid>
<Grid>
<Grid.Col span={6}>
<Text fw={"bold"}>Alamat:</Text>
</Grid.Col>
<Grid.Col span={6}>
<Text>{data?.Profile?.alamat}</Text>
</Grid.Col>
</Grid>
</Stack>
</Stack>
</Paper>
);
}

View File

@@ -0,0 +1,82 @@
import { Paper, Stack, Title, Grid, Box, Text } from "@mantine/core";
export function ComponentAdminInvestasi_DetailData({ data }: { data: any }) {
return (
<>
<Paper withBorder p={"lg"}>
<Stack>
<Title order={3}>Rincian Data Investasi</Title>
<Grid justify="center">
<Grid.Col span={6}>
<Stack>
<Box>
<Text>Judul</Text>
<Text fw={"bold"}>{data?.title}</Text>
</Box>
<Box>
<Text>Dana Dibutuhkan</Text>
<Text fw={"bold"}>
Rp.{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.targetDana)}
</Text>
</Box>
<Box>
<Text>Harga Per Lembar</Text>
<Text fw={"bold"}>
Rp.{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.hargaLembar)}{" "}
</Text>
</Box>
<Box>
<Text>Total Lembar</Text>
<Text fw={"bold"}>
{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.totalLembar)}{" "}
lembar
</Text>
</Box>
</Stack>
</Grid.Col>
<Grid.Col span={6}>
<Stack>
<Box>
<Text>ROI</Text>
<Text fw={"bold"}>{data.roi} %</Text>
</Box>
<Box>
<Text>Pembagian Deviden</Text>
<Text fw={"bold"}>{data.MasterPeriodeDeviden.name}</Text>
</Box>
<Box>
<Text>Jadwal Pembagian</Text>
<Text fw={"bold"}>
{data.MasterPembagianDeviden.name} bulan{" "}
</Text>
</Box>
<Box>
<Text>Pencarian Investor</Text>
<Text fw={"bold"}>
{data.MasterPencarianInvestor.name} hari{" "}
</Text>
</Box>
</Stack>
</Grid.Col>
</Grid>
</Stack>
</Paper>
</>
);
}

View File

@@ -0,0 +1,28 @@
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { Paper, Stack, Title, AspectRatio, Center, Image } from "@mantine/core";
export function ComponentAdminInvestasi_DetailGambar({imagesId}: {imagesId: any}) {
return (
<>
<Paper withBorder p={"lg"}>
<Stack>
<Title align="center" order={3}>
Gambar Proyek
</Title>
<AspectRatio ratio={1 / 1} mah={300}>
<Center>
<Image
style={{ borderRadius: "10px" }}
radius={"md"}
width={200}
alt=""
src={RouterInvestasi.api_gambar + `${imagesId}`}
/>
</Center>
</AspectRatio>
</Stack>
</Paper>
</>
);
}

View File

@@ -0,0 +1,99 @@
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import {
SimpleGrid,
Paper,
Stack,
Title,
Grid,
Group,
Button,
Text,
} from "@mantine/core";
import { IconFileTypePdf } from "@tabler/icons-react";
import _ from "lodash";
import Link from "next/link";
export function ComponentAdminInvestasi_UIDetailFile({
title,
dataProspektus,
listDokumen,
}: {
title: string;
dataProspektus: any;
listDokumen: any[];
}) {
return (
<>
<SimpleGrid
cols={1}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 1, spacing: "md" },
{ maxWidth: "48rem", cols: 1, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Paper withBorder p={"lg"}>
<Stack>
<Title order={3}>File & Dokumen</Title>
<Stack spacing={50}>
{/* File */}
<Grid align="center">
<Grid.Col span={4}>
<Text fw={"bold"}>File:</Text>
</Grid.Col>
<Grid.Col span={8}>
<Group>
<IconFileTypePdf />
<Text>Prospek {title}</Text>
<Link
target="_blank"
href={
RouterInvestasi.api_file_prospektus +
`${dataProspektus === null ? "" : dataProspektus.id}`
}
>
<Button radius={50}>Lihat</Button>
</Link>
</Group>
</Grid.Col>
</Grid>
{/* Dokumen */}
<Grid>
<Grid.Col span={4}>
<Text fw={"bold"}>Dokumen:</Text>
</Grid.Col>
<Grid.Col span={8}>
<Stack>
{_.isEmpty(listDokumen) ? (
<Text>-</Text>
) : (
listDokumen.map((e: any) => (
<Paper key={e.id}>
<Group>
<IconFileTypePdf />
<Text>{e.title}</Text>
<Link
target="_blank"
href={
RouterInvestasi.api_file_dokumen + `${e.id}`
}
>
<Button radius={50}>Lihat</Button>
</Link>
</Group>
</Paper>
))
)}
</Stack>
</Grid.Col>
</Grid>
</Stack>
</Stack>
</Paper>
</SimpleGrid>
</>
);
}

View File

@@ -0,0 +1,159 @@
"use client";
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
import {
AspectRatio,
Box,
Center,
Grid,
Image,
List,
Paper,
SimpleGrid,
Stack,
Text,
ThemeIcon,
Title,
} from "@mantine/core";
import ComponentAdminGlobal_BackButton from "../../component_global/back_button";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { IconCircleCheck, IconHome } from "@tabler/icons-react";
import investasi from "../../notifikasi/route_setting/investasi";
export function AdminInvestasi_DetailPublish({
data,
}: {
data: MODEL_Investasi;
}) {
return (
<>
<Stack>
<ComponentAdminGlobal_BackButton />
<SimpleGrid cols={2}>
<InformasiAuthor data={data} />
<InformasiDataInvestasi data={data} />
</SimpleGrid>
</Stack>
</>
);
}
function InformasiAuthor({ data }: { data: MODEL_Investasi }) {
return (
<>
<Paper withBorder>
<Stack p={"lg"} spacing={"xl"}>
<Title align="center" order={3}>
{data.title}
</Title>
<AspectRatio ratio={1 / 1} mah={300}>
<Center>
<Image
bg={"blue"}
style={{ borderRadius: "10px" }}
radius={"md"}
width={250}
alt=""
src={RouterInvestasi.api_gambar + `${data.imagesId}`}
/>
</Center>
</AspectRatio>
<Stack spacing={"sm"}>
<Title order={4}>Informasi pemilik</Title>
<List
spacing="xs"
size="sm"
center
icon={
<ThemeIcon color="teal" size={24} radius="xl">
<IconCircleCheck size="1rem" />
</ThemeIcon>
}
>
<List.Item>{data.author.username}</List.Item>
<List.Item>+{data.author.nomor}</List.Item>
<List.Item>{data.author.Profile.email}</List.Item>
</List>
</Stack>
</Stack>
</Paper>
</>
);
}
function InformasiDataInvestasi({ data }: { data: MODEL_Investasi }) {
return (
<>
<Paper withBorder p={"lg"}>
<Stack>
<Title order={3}>Rincian Data Investasi</Title>
<Grid justify="center">
<Grid.Col>
<Grid mt={"md"} justify="center">
<Grid.Col span={6}>
<Stack>
<Box>
<Text>Dana Dibutuhkan</Text>
<Text fw={"bold"}>
Rp.{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.targetDana)}
</Text>
</Box>
<Box>
<Text>Harga Per Lembar</Text>
<Text fw={"bold"}>
Rp.{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.hargaLembar)}{" "}
</Text>
</Box>
<Box>
<Text>Jadwal Pembagian</Text>
<Text fw={"bold"}>
{data.MasterPembagianDeviden.name} bulan{" "}
</Text>
</Box>
<Box>
<Text>Pencarian Investor</Text>
<Text fw={"bold"}>
{data.MasterPencarianInvestor.name} hari{" "}
</Text>
</Box>
</Stack>
</Grid.Col>
<Grid.Col span={6}>
<Stack>
<Box>
<Text>ROI</Text>
<Text fw={"bold"}>{data.roi} %</Text>
</Box>
<Box>
<Text>Total Lembar</Text>
<Text fw={"bold"}>
{" "}
{new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10,
}).format(+data.totalLembar)}{" "}
lembar
</Text>
</Box>
<Box>
<Text>Pembagian Deviden</Text>
<Text fw={"bold"}>{data.MasterPeriodeDeviden.name}</Text>
</Box>
</Stack>
</Grid.Col>
</Grid>
</Grid.Col>
</Grid>
</Stack>
</Paper>
</>
);
}

View File

@@ -0,0 +1,76 @@
"use client";
import { MODEL_Investasi } from "@/app_modules/investasi/model/model_investasi";
import {
Paper,
SimpleGrid,
Stack,
Text,
Title
} from "@mantine/core";
import ComponentAdminGlobal_BackButton from "../../component_global/back_button";
import { ComponentAdminInvestasi_DetailDataAuthor } from "../_component/detail_data_author";
import { ComponentAdminInvestasi_DetailData } from "../_component/detail_data_investasi";
import { ComponentAdminInvestasi_DetailGambar } from "../_component/detail_gambar_investasi";
import { ComponentAdminInvestasi_UIDetailFile } from "../_component/ui_detail_file";
export function AdminInvestasi_DetailReject({
data,
}: {
data: MODEL_Investasi;
}) {
return (
<>
<Stack px={"lg"}>
<ComponentAdminGlobal_BackButton />
<SimpleGrid
cols={3}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Paper withBorder p={"lg"}>
<Stack>
<Title order={3} c={"red"}>
#{" "}
<Text span inherit c={"black"}>
Alasan penolakan
</Text>
</Title>
<Text>{data.catatan}</Text>
</Stack>
</Paper>
</SimpleGrid>
<SimpleGrid
cols={3}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
{/* Data Author */}
<ComponentAdminInvestasi_DetailDataAuthor data={data.author} />
{/* Data Foto */}
<ComponentAdminInvestasi_DetailGambar imagesId={data.imagesId} />
{/* Data Detail */}
<ComponentAdminInvestasi_DetailData data={data} />
</SimpleGrid>
<ComponentAdminInvestasi_UIDetailFile
title={data.title}
dataProspektus={data.ProspektusInvestasi}
listDokumen={data.DokumenInvestasi}
/>
{/* <pre>{JSON.stringify(data, null, 2)}</pre> */}
</Stack>
</>
);
}

View File

@@ -1,173 +1,224 @@
"use client"; "use client";
import { RouterHome } from "@/app/lib/router_hipmi/router_home"; import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; import { BeritaInvestasi } from "@/app_modules/investasi";
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_Investasi } from "@/app_modules/investasi/model/model_investasi";
import { MODEL_PROFILE_OLD } from "@/app_modules/home/model/user_profile"; import mqtt_client from "@/util/mqtt_client";
import { import {
Group,
Flex,
Avatar,
Paper,
AspectRatio, AspectRatio,
Box, Box,
Title,
Slider,
Grid,
Stack,
ActionIcon,
Center,
Button, Button,
Text, Center,
Image,
Collapse,
Textarea,
Divider, Divider,
Mark, Grid,
Group,
Image,
Modal, Modal,
Paper,
SimpleGrid,
Stack,
Text,
Textarea,
Title,
} from "@mantine/core"; } from "@mantine/core";
import { useDisclosure, useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
import { import {
IconAlertHexagonFilled, IconAlertHexagonFilled,
IconBan,
IconBookDownload,
IconCheck, IconCheck,
IconChevronDown,
IconChevronLeft,
IconChevronRight,
IconFile,
IconFileDescription,
IconFileTypePdf, IconFileTypePdf,
IconPdf,
IconSpeakerphone,
} from "@tabler/icons-react"; } from "@tabler/icons-react";
import { useAtom } from "jotai";
import _ from "lodash"; import _ from "lodash";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
import toast, { toastConfig } from "react-simple-toasts";
import Admin_funRejectInvestasi from "../fun/fun_reject_investasi";
import { RouterAdminInvestasi_OLD } from "@/app/lib/router_hipmi/router_admin";
import "react-simple-toasts/dist/theme/dark.css"; import "react-simple-toasts/dist/theme/dark.css";
import { BeritaInvestasi } from "@/app_modules/investasi"; import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil";
import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal";
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../component_global/admin_notifikasi/notifikasi_peringatan";
import ComponentAdminGlobal_BackButton from "../../component_global/back_button";
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
import { ComponentAdminInvestasi_DetailDataAuthor } from "../_component/detail_data_author";
import { ComponentAdminInvestasi_DetailData } from "../_component/detail_data_investasi";
import { ComponentAdminInvestasi_DetailGambar } from "../_component/detail_gambar_investasi";
import { ComponentAdminInvestasi_UIDetailFile } from "../_component/ui_detail_file";
import { adminInvestasi_funEditStatusPublishById } from "../fun/edit/fun_status_publish_by_id";
import Admin_funRejectInvestasi from "../fun/fun_reject_investasi";
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
toastConfig({ theme: "dark" }); export default function AdminInvestasi_DetailReview({
export default function Admin_KonfirmasiInvestasi({
dataInvestasi, dataInvestasi,
dataUser,
}: { }: {
dataInvestasi: MODEL_Investasi; dataInvestasi: MODEL_Investasi;
dataUser: MODEL_PROFILE_OLD;
}) { }) {
const router = useRouter(); const router = useRouter();
const [investasi, setInvestasi] = useState(dataInvestasi); const [data, setData] = useState(dataInvestasi);
const [user, setUser] = useState(dataUser);
const [publish, setPublish] = useState(true); const [publish, setPublish] = useState(true);
const [opened, { toggle }] = useDisclosure(false); const [openModal, setOpenModal] = useState(false);
const [catatan, setCatatan] = useState<string | number>(""); const [isLoadingPublish, setIsLoadingPublish] = useState(false);
const [status, setStatus] = useAtom(gs_StatusPortoInvestasi); const [isLoadingReject, setIsLoadingReject] = useState(false);
const listBox = [
{
id: 1,
name: "Prospektus",
icon: <IconBookDownload size={70} />,
route: RouterInvestasi.detail_prospektus,
},
{
id: 2,
name: "Dokumen",
icon: <IconFileDescription size={70} />,
route: RouterInvestasi.detail_dokumen,
},
{
id: 3,
name: "Berita",
icon: <IconSpeakerphone size={70} />,
route: RouterInvestasi.berita,
},
];
useShallowEffect(() => { useShallowEffect(() => {
cekStatusPublish(); cekStatusPublish();
}, []); }, []);
async function cekStatusPublish() { async function cekStatusPublish() {
if (investasi.MasterStatusInvestasi.id === "3") setPublish(false); if (data.MasterStatusInvestasi.id === "3") setPublish(false);
} }
async function onReject() { async function onReject() {
const body = { const body = {
id: investasi.id, id: data.id,
catatan: investasi.catatan, catatan: data.catatan,
status: "4", status: "4",
}; };
if (_.isEmpty(body.catatan)) return toast("Lengkapi alasan"); if (_.isEmpty(body.catatan))
await Admin_funRejectInvestasi(body).then((res) => { return ComponentAdminGlobal_NotifikasiPeringatan("Lengkapi alasan");
if (res.status === 200) { const res = await Admin_funRejectInvestasi(body);
toast(res.message); if (res.status === 200) {
router.back(); const dataNotif = {
toggle(); appId: res.data?.id,
} else { userId: res.data?.authorId,
toast(res.message); pesan: res.data?.title,
status: res.data?.MasterStatusInvestasi?.name,
kategoriApp: "INVESTASI",
title: "Investasi anda di tolak !",
};
const notif = await adminNotifikasi_funCreateToUser({
data: dataNotif as any,
});
if (notif.status === 201) {
mqtt_client.publish(
"USER",
JSON.stringify({ userId: res?.data?.authorId, count: 1 })
);
} }
});
const loadData = await getOneInvestasiById(data.id);
setData(loadData as any);
ComponentAdminGlobal_NotifikasiBerhasil(res.message);
router.back();
} else {
ComponentAdminGlobal_NotifikasiGagal(res.message);
}
} }
async function onPublish() { async function onPublish() {
await funGantiStatusInvestasi(investasi.id, "3", "1").then((res) => { const res = await adminInvestasi_funEditStatusPublishById({
if (res.status === 200) { investasiId: data.id,
setTimeout(() => setPublish(false), 1000); statusId: "1",
router.push(RouterAdminInvestasi_OLD.table_status_review); progesInvestasiId: "1",
toast("Proyek Investasi Di Publish");
}
}); });
if (res.status === 200) {
const dataNotif = {
appId: res.data?.id,
userId: res.data?.authorId as any,
pesan: res.data?.title as any,
status: res.data?.MasterStatusInvestasi?.name as any,
kategoriApp: "INVESTASI",
title: "Investasi publish",
};
const notif = await adminNotifikasi_funCreateToUser({
data: dataNotif as any,
});
if (notif.status === 201) {
mqtt_client.publish(
"USER",
JSON.stringify({ userId: res?.data?.authorId, count: 1 })
);
mqtt_client.publish(
"Beranda_Investasi",
JSON.stringify({ update: true })
);
const loadData = await getOneInvestasiById(data.id);
setData(loadData as any);
ComponentAdminGlobal_NotifikasiBerhasil("Proyek Investasi Di Publish");
router.back();
// router.push(RouterAdminInvestasi_OLD.table_status_review);
}
} else {
ComponentAdminGlobal_NotifikasiGagal(res.message);
}
} }
return ( return (
<> <>
<Group position="apart" px={"md"}> <Stack px={"lg"}>
<Group> <Group position="apart">
<ActionIcon onClick={() => router.back()}> <ComponentAdminGlobal_BackButton />
<IconChevronLeft />
</ActionIcon> {data.masterStatusInvestasiId === "2" ? (
<Flex align={"center"} gap={"xs"} pl={"lg"}> <Group>
{/* <Avatar <Button
radius={50} loaderPosition="center"
size={"md"} loading={isLoadingPublish}
src={ radius={"xl"}
RouterProfile.api_foto + color="green"
`${user.Profile?.ImageProfile?.url}` onClick={() => onPublish()}
} >
/> */} Publish
<Text>{user.username}</Text> </Button>
</Flex> <Button
loaderPosition="center"
loading={isLoadingReject}
radius={"xl"}
color="red"
onClick={() => onReject()}
>
Reject
</Button>
</Group>
) : (
""
)}
</Group> </Group>
<SimpleGrid
cols={3}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
{/* Data Author */}
<ComponentAdminInvestasi_DetailDataAuthor data={data.author} />
{/* Data Foto */}
<ComponentAdminInvestasi_DetailGambar imagesId={data.imagesId} />
{/* Data Detail */}
<ComponentAdminInvestasi_DetailData data={data} />
</SimpleGrid>
<ComponentAdminInvestasi_UIDetailFile
title={data.title}
dataProspektus={data.ProspektusInvestasi}
listDokumen={data.DokumenInvestasi}
/>
</Stack>
</>
);
return (
<>
<Group position="apart" px={"md"}>
<ComponentAdminGlobal_BackButton
path={RouterAdminInvestasi.table_review}
/>
<Group> <Group>
{" "}
<Center> <Center>
{!publish || investasi.MasterStatusInvestasi.id === "4" ? ( {!publish || data.MasterStatusInvestasi.id === "4" ? (
"" ""
) : ( ) : (
// <Button
// radius={50}
// leftIcon={<IconBan />}
// bg={"orange"}
// color="orange"
// onClick={() => {
// setTimeout(() => setPublish(true), 1000);
// toast("Proyek Investasi Di Non-Aktifkan");
// }}
// >
// Non - aktifkan
// </Button>
<Button <Button
radius={50} radius={50}
bg={"green"} bg={"green"}
@@ -181,14 +232,14 @@ export default function Admin_KonfirmasiInvestasi({
</Button> </Button>
)} )}
</Center> </Center>
{investasi.MasterStatusInvestasi.id === "3" ? ( {data.MasterStatusInvestasi.id === "3" ? (
"" ""
) : ( ) : (
<Button <Button
radius={50} radius={50}
bg={"red"} bg={"red"}
color="red" color="red"
onClick={toggle} onClick={() => setOpenModal(true)}
rightIcon={<IconAlertHexagonFilled />} rightIcon={<IconAlertHexagonFilled />}
> >
Reject Reject
@@ -205,14 +256,14 @@ export default function Admin_KonfirmasiInvestasi({
{/* Title */} {/* Title */}
<Center my={"sm"}> <Center my={"sm"}>
<Title order={4} mb={"xs"}> <Title order={4} mb={"xs"}>
{investasi.title} {data.title}
</Title> </Title>
</Center> </Center>
<Paper withBorder mb={"md"} mah={300} maw={400} mx={"auto"} p={5}> <Paper withBorder mb={"md"} mah={300} maw={400} mx={"auto"} p={5}>
<AspectRatio ratio={16 / 9}> <AspectRatio ratio={16 / 9}>
<Image <Image
alt="" alt=""
src={RouterInvestasi.api_gambar + `${investasi.imagesId}`} src={RouterInvestasi.api_gambar + `${data.imagesId}`}
/> />
</AspectRatio> </AspectRatio>
</Paper> </Paper>
@@ -229,7 +280,7 @@ export default function Admin_KonfirmasiInvestasi({
Rp.{" "} Rp.{" "}
{new Intl.NumberFormat("id-ID", { {new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10, maximumFractionDigits: 10,
}).format(+investasi.targetDana)} }).format(+data.targetDana)}
</Text> </Text>
</Box> </Box>
<Box> <Box>
@@ -238,16 +289,16 @@ export default function Admin_KonfirmasiInvestasi({
Rp.{" "} Rp.{" "}
{new Intl.NumberFormat("id-ID", { {new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10, maximumFractionDigits: 10,
}).format(+investasi.hargaLembar)}{" "} }).format(+data.hargaLembar)}{" "}
</Text> </Text>
</Box> </Box>
<Box> <Box>
<Text>Jadwal Pembagian</Text> <Text>Jadwal Pembagian</Text>
<Text>{investasi.MasterPembagianDeviden.name} bulan </Text> <Text>{data.MasterPembagianDeviden.name} bulan </Text>
</Box> </Box>
<Box> <Box>
<Text>Pencarian Investor</Text> <Text>Pencarian Investor</Text>
<Text>{investasi.MasterPencarianInvestor.name} hari </Text> <Text>{data.MasterPencarianInvestor.name} hari </Text>
</Box> </Box>
</Stack> </Stack>
</Grid.Col> </Grid.Col>
@@ -255,7 +306,7 @@ export default function Admin_KonfirmasiInvestasi({
<Stack> <Stack>
<Box> <Box>
<Text>ROI</Text> <Text>ROI</Text>
<Text>{investasi.roi} %</Text> <Text>{data.roi} %</Text>
</Box> </Box>
<Box> <Box>
<Text>Total Lembar</Text> <Text>Total Lembar</Text>
@@ -263,13 +314,13 @@ export default function Admin_KonfirmasiInvestasi({
{" "} {" "}
{new Intl.NumberFormat("id-ID", { {new Intl.NumberFormat("id-ID", {
maximumFractionDigits: 10, maximumFractionDigits: 10,
}).format(+investasi.totalLembar)}{" "} }).format(+data.totalLembar)}{" "}
lembar lembar
</Text> </Text>
</Box> </Box>
<Box> <Box>
<Text>Pembagian Deviden</Text> <Text>Pembagian Deviden</Text>
<Text>{investasi.MasterPeriodeDeviden.name}</Text> <Text>{data.MasterPeriodeDeviden.name}</Text>
</Box> </Box>
</Stack> </Stack>
</Grid.Col> </Grid.Col>
@@ -280,7 +331,7 @@ export default function Admin_KonfirmasiInvestasi({
<Grid> <Grid>
<Grid.Col span={6}> <Grid.Col span={6}>
{/* Note */} {/* Note */}
{!publish || investasi.MasterStatusInvestasi.id === "4" ? ( {!publish || data.MasterStatusInvestasi.id === "4" ? (
"" ""
) : ( ) : (
<Stack spacing={0}> <Stack spacing={0}>
@@ -294,9 +345,9 @@ export default function Admin_KonfirmasiInvestasi({
</Stack> </Stack>
)} )}
{publish && {publish &&
investasi.MasterStatusInvestasi.id === "3" && data.MasterStatusInvestasi.id === "3" &&
_.isEmpty(investasi.BeritaInvestasi) ? ( _.isEmpty(data.BeritaInvestasi) ? (
<BeritaInvestasi dataInvestasi={investasi} /> <BeritaInvestasi dataInvestasi={data} />
) : ( ) : (
"" ""
)} )}
@@ -309,21 +360,21 @@ export default function Admin_KonfirmasiInvestasi({
{/* Prospektus */} {/* Prospektus */}
<Stack spacing={0}> <Stack spacing={0}>
<Title order={6}>Prospektus :</Title> <Title order={6}>Prospektus :</Title>
{investasi.ProspektusInvestasi === null ? ( {data.ProspektusInvestasi === null ? (
<Text>Tidak ada file</Text> <Text>Tidak ada file</Text>
) : ( ) : (
<Paper p={"xs"}> <Paper p={"xs"}>
<Group> <Group>
<IconFileTypePdf /> <IconFileTypePdf />
<Text>Prospektus_{investasi.title}</Text> <Text>Prospektus_{data.title}</Text>
<Link <Link
target="_blank" target="_blank"
href={ href={
RouterInvestasi.api_file_prospektus + RouterInvestasi.api_file_prospektus +
`${ `${
investasi.ProspektusInvestasi === null data.ProspektusInvestasi === null
? "" ? ""
: investasi.ProspektusInvestasi.id : data.ProspektusInvestasi.id
}` }`
} }
> >
@@ -339,10 +390,10 @@ export default function Admin_KonfirmasiInvestasi({
{/* Dokumen */} {/* Dokumen */}
<Stack spacing={0}> <Stack spacing={0}>
<Title order={6}>Dokumen :</Title> <Title order={6}>Dokumen :</Title>
{_.isEmpty(investasi.DokumenInvestasi) ? ( {_.isEmpty(data.DokumenInvestasi) ? (
<Text>Tidak ada dokumen</Text> <Text>Tidak ada dokumen</Text>
) : ( ) : (
investasi.DokumenInvestasi.map((e) => ( data.DokumenInvestasi.map((e) => (
<Paper p={"xs"} key={e.id}> <Paper p={"xs"} key={e.id}>
<Group> <Group>
<IconFileTypePdf /> <IconFileTypePdf />
@@ -367,8 +418,8 @@ export default function Admin_KonfirmasiInvestasi({
<Modal <Modal
centered centered
opened={opened} opened={openModal}
onClose={toggle} onClose={() => setOpenModal(false)}
// withCloseButton={false} // withCloseButton={false}
title="Masukan alasan penolakan" title="Masukan alasan penolakan"
> >
@@ -377,10 +428,10 @@ export default function Admin_KonfirmasiInvestasi({
autosize autosize
minRows={2} minRows={2}
maxRows={4} maxRows={4}
value={investasi.catatan === null ? [] : investasi.catatan} value={data.catatan === null ? [] : data.catatan}
onChange={(val) => onChange={(val) =>
setInvestasi({ setData({
...investasi, ...data,
catatan: val.target.value, catatan: val.target.value,
}) })
} }

View File

@@ -0,0 +1,46 @@
"use server";
import prisma from "@/app/lib/prisma";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi";
import { revalidatePath } from "next/cache";
export async function adminInvestasi_funEditStatusPublishById({
investasiId,
statusId,
progesInvestasiId,
}: {
investasiId: string;
statusId: string;
progesInvestasiId: string;
}) {
const publishTime = new Date();
const res = await prisma.investasi.update({
where: {
id: investasiId,
},
data: {
countDown: publishTime,
masterStatusInvestasiId: statusId,
masterProgresInvestasiId: progesInvestasiId,
},
select: {
id: true,
title: true,
authorId: true,
MasterStatusInvestasi: {
select: {
name: true,
},
},
}
});
if (!res) return { status: 400, message: "Gagal Update" };
revalidatePath(RouterInvestasi.portofolio);
return {
data: res,
status: 200,
message: "Publish Berhasil",
};
}

View File

@@ -1,26 +1,36 @@
"use server" "use server";
import prisma from "@/app/lib/prisma" import prisma from "@/app/lib/prisma";
import { RouterAdminInvestasi_OLD } from "@/app/lib/router_hipmi/router_admin" import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi";
import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi" import { revalidatePath } from "next/cache";
import { revalidatePath } from "next/cache"
export default async function Admin_funRejectInvestasi(data: any) { export default async function Admin_funRejectInvestasi(data: any) {
// console.log(data) // console.log(data)
const res = await prisma.investasi.update({ const res = await prisma.investasi.update({
where: { id: data.id }, where: { id: data.id },
data: { data: {
masterStatusInvestasiId: data.status, masterStatusInvestasiId: data.status,
catatan: data.catatan catatan: data.catatan,
} },
}) select: {
if(!res) return {status: 400, message: "Gagal reject"} id: true,
title: true,
authorId: true,
MasterStatusInvestasi: {
select: {
name: true,
},
},
},
});
if (!res) return { status: 400, message: "Gagal reject" };
revalidatePath(RouterAdminInvestasi_OLD.main_investasi) revalidatePath(RouterAdminInvestasi.detail_review);
return { return {
status: 200, data: res,
message: "Reject berhasil" status: 200,
} message: "Reject berhasil",
} };
}

Some files were not shown because too many files have changed in this diff Show More