Donasi Info Admni
# feat - info admin - hapus admin ## Issue: Loading data belum untuk versi alfa
@@ -25,6 +25,7 @@ model User {
|
|||||||
TransaksiInvestasi TransaksiInvestasi[]
|
TransaksiInvestasi TransaksiInvestasi[]
|
||||||
Donasi Donasi[]
|
Donasi Donasi[]
|
||||||
Donasi_Invoice Donasi_Invoice[]
|
Donasi_Invoice Donasi_Invoice[]
|
||||||
|
Donasi_Notif Donasi_Notif[]
|
||||||
}
|
}
|
||||||
|
|
||||||
model MasterUserRole {
|
model MasterUserRole {
|
||||||
@@ -77,6 +78,8 @@ model Images {
|
|||||||
CeritaDonasi Donasi_Cerita[]
|
CeritaDonasi Donasi_Cerita[]
|
||||||
Donasi_TemporaryCreate Donasi_TemporaryCreate[]
|
Donasi_TemporaryCreate Donasi_TemporaryCreate[]
|
||||||
Donasi_Kabar Donasi_Kabar[]
|
Donasi_Kabar Donasi_Kabar[]
|
||||||
|
Donasi_PencairanDana Donasi_PencairanDana[]
|
||||||
|
Donasi_Invoice Donasi_Invoice[]
|
||||||
}
|
}
|
||||||
|
|
||||||
model Katalog {
|
model Katalog {
|
||||||
@@ -275,18 +278,22 @@ model MasterStatusTransaksiInvestasi {
|
|||||||
TransaksiInvestasi TransaksiInvestasi[]
|
TransaksiInvestasi TransaksiInvestasi[]
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------- DONASI --------------------- //
|
/// ---------------------------------------- DONASI ----------------------------------------- //
|
||||||
model Donasi {
|
model Donasi {
|
||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
title String
|
title String
|
||||||
target String
|
target String
|
||||||
active Boolean @default(true)
|
active Boolean @default(true)
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
publishTime DateTime?
|
publishTime DateTime?
|
||||||
catatan String?
|
catatan String?
|
||||||
progres String? @default("0")
|
progres String? @default("0")
|
||||||
terkumpul String? @default("0")
|
terkumpul String? @default("0")
|
||||||
|
namaBank String?
|
||||||
|
rekening String?
|
||||||
|
akumulasiPencairan Int? @default(0)
|
||||||
|
totalPencairan Int? @default(0)
|
||||||
|
|
||||||
Author User? @relation(fields: [authorId], references: [id])
|
Author User? @relation(fields: [authorId], references: [id])
|
||||||
authorId String?
|
authorId String?
|
||||||
@@ -301,6 +308,7 @@ model Donasi {
|
|||||||
donasiMaster_StatusDonasiId String? @default("2")
|
donasiMaster_StatusDonasiId String? @default("2")
|
||||||
Donasi_Invoice Donasi_Invoice[]
|
Donasi_Invoice Donasi_Invoice[]
|
||||||
Donasi_Kabar Donasi_Kabar[]
|
Donasi_Kabar Donasi_Kabar[]
|
||||||
|
Donasi_PencairanDana Donasi_PencairanDana[]
|
||||||
}
|
}
|
||||||
|
|
||||||
model Donasi_TemporaryCreate {
|
model Donasi_TemporaryCreate {
|
||||||
@@ -395,6 +403,8 @@ model Donasi_Invoice {
|
|||||||
donasiMaster_StatusInvoiceId String? @default("3")
|
donasiMaster_StatusInvoiceId String? @default("3")
|
||||||
Author User? @relation(fields: [authorId], references: [id])
|
Author User? @relation(fields: [authorId], references: [id])
|
||||||
authorId String?
|
authorId String?
|
||||||
|
Images Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String?
|
||||||
}
|
}
|
||||||
|
|
||||||
model Donasi_Kabar {
|
model Donasi_Kabar {
|
||||||
@@ -405,8 +415,36 @@ model Donasi_Kabar {
|
|||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
Donasi Donasi? @relation(fields: [donasiId], references: [id])
|
Donasi Donasi? @relation(fields: [donasiId], references: [id])
|
||||||
|
donasiId String?
|
||||||
|
ImagesKabar Images? @relation(fields: [imagesId], references: [id])
|
||||||
|
imagesId String?
|
||||||
|
Donasi_Notif Donasi_Notif[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model Donasi_Notif {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
isRead Boolean @default(false)
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
|
||||||
|
User User? @relation(fields: [userId], references: [id])
|
||||||
|
userId String?
|
||||||
|
Donasi_Kabar Donasi_Kabar? @relation(fields: [donasi_KabarId], references: [id])
|
||||||
|
donasi_KabarId String?
|
||||||
|
}
|
||||||
|
|
||||||
|
model Donasi_PencairanDana {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
nominalCair Int
|
||||||
|
title String
|
||||||
|
deskripsi String
|
||||||
|
active Boolean @default(true)
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
Donasi Donasi? @relation(fields: [donasiId], references: [id])
|
||||||
donasiId String?
|
donasiId String?
|
||||||
ImagesKabar Images? @relation(fields: [imagesId], references: [id])
|
Images Images? @relation(fields: [imagesId], references: [id])
|
||||||
imagesId String?
|
imagesId String?
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
public/donasi/image/26f9f9ae-d099-4136-bb43-7d0a96770b55.jpeg
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 136 KiB |
|
Before Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
public/donasi/invoice/144ba2ba-67df-4014-92fd-f51f1a14d290.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/donasi/invoice/589732ad-0e8a-4273-bc27-707f01b1e4d0.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
public/donasi/invoice/8afa3968-fec7-49f9-8bba-d81d5f7ceb01.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/donasi/invoice/cd319bc0-09e5-4322-b924-43b1f0e619ff.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/donasi/kabar/2cfa3076-f9dd-43d2-b9fb-3ecd37b852a8.jpeg
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
public/donasi/pencairan/1c43100c-05bc-4234-b308-db06171cd188.jpg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
public/donasi/pencairan/92bb3b55-19e9-4676-9b2e-633d7fe9fa70.jpg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
public/donasi/pencairan/9ed489e4-056e-41d8-be75-faf7107f9a60.jpg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
32
src/app/api/donasi/gambar_bukti_transfer/[id]/route.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import fs from "fs";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
const get = await prisma.images.findUnique({
|
||||||
|
where: {
|
||||||
|
id: params.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/donasi/invoice/${get?.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const file = fs.readFileSync(`./public/donasi/invoice/${get?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
34
src/app/api/donasi/gambar_pencairan/[id]/route.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import fs from "fs";
|
||||||
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
req: NextRequest,
|
||||||
|
{ params }: { params: { id: string } }
|
||||||
|
) {
|
||||||
|
|
||||||
|
const get = await prisma.images.findUnique({
|
||||||
|
where: {
|
||||||
|
id: params.id,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (!fs.existsSync(`./public/donasi/pencairan/${get?.url}`)) {
|
||||||
|
const notFile = fs.readFileSync("./public/aset/global/no_img.png");
|
||||||
|
return new NextResponse(notFile, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const file = fs.readFileSync(`./public/donasi/pencairan/${get?.url}`);
|
||||||
|
return new NextResponse(file, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "image/png",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,17 +1,24 @@
|
|||||||
import { AdminDonasi_DetailPublish } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_DetailPublish } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_funCountDonatur } from "@/app_modules/admin/donasi/fun/count/fun_count_donatur";
|
import { AdminDonasi_funCountDonatur } from "@/app_modules/admin/donasi/fun/count/fun_count_donatur";
|
||||||
import { AdminDonasi_getListDonatur } from "@/app_modules/admin/donasi/fun/get/get_list_donatur_by_id";
|
import { AdminDonasi_getListDonatur } from "@/app_modules/admin/donasi/fun/get/get_list_donatur_by_id";
|
||||||
import { AdminDonasi_getById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
import { AdminDonasi_getListPencairanDana } from "@/app_modules/admin/donasi/fun/get/get_list_pencairan_dana_by_id";
|
||||||
|
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||||
export default async function Page({params}: {params: {id: string}}) {
|
|
||||||
const dataPublish = await AdminDonasi_getById(params.id)
|
|
||||||
const listDonatur = await AdminDonasi_getListDonatur(params.id)
|
|
||||||
const countDonatur = await AdminDonasi_funCountDonatur(params.id)
|
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
const dataPublish = await AdminDonasi_getOneById(params.id);
|
||||||
|
const listDonatur = await AdminDonasi_getListDonatur(params.id);
|
||||||
|
const countDonatur = await AdminDonasi_funCountDonatur(params.id);
|
||||||
|
const listPencairan = await AdminDonasi_getListPencairanDana(params.id);
|
||||||
|
// console.log(listDonatur)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AdminDonasi_DetailPublish dataPublish={dataPublish as any} listDonatur={listDonatur} countDonatur={countDonatur} />
|
<AdminDonasi_DetailPublish
|
||||||
|
dataPublish={dataPublish as any}
|
||||||
|
listDonatur={listDonatur}
|
||||||
|
countDonatur={countDonatur}
|
||||||
|
listPencairan={listPencairan as any}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const dataReject = await AdminDonasi_getById(params.id);
|
const dataReject = await AdminDonasi_getOneById(params.id);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
|
||||||
|
|
||||||
export default async function Page({params}: {params: {id: string}}) {
|
export default async function Page({params}: {params: {id: string}}) {
|
||||||
// console.log(params.id)
|
// console.log(params.id)
|
||||||
const dataReview = await AdminDonasi_getById(params.id)
|
const dataReview = await AdminDonasi_getOneById(params.id)
|
||||||
// console.log(dataReview)
|
// console.log(dataReview)
|
||||||
return <AdminDonasi_DetailReview dataReview={dataReview as any}/>
|
return <AdminDonasi_DetailReview dataReview={dataReview as any}/>
|
||||||
}
|
}
|
||||||
6
src/app/dev/admin/donasi/pencairan_dana/[id]/page.tsx
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { AdminDonasi_PencairanDana } from "@/app_modules/admin/donasi";
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
let donasiId = params.id;
|
||||||
|
return <AdminDonasi_PencairanDana donasiId={donasiId} />;
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import AdminDonasi_ProsesTransaksi from "@/app_modules/admin/donasi/detail_table/publish/proses_transaksi";
|
|
||||||
|
import { AdminDonasi_ProsesTransaksi } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getListStatusInvoiceProses } from "@/app_modules/admin/donasi/fun/get/get_list_status_invoice_proses";
|
import { AdminDonasi_getListStatusInvoiceProses } from "@/app_modules/admin/donasi/fun/get/get_list_status_invoice_proses";
|
||||||
|
|
||||||
export default async function Page({params}: {params: {id: string}}) {
|
export default async function Page({params}: {params: {id: string}}) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AdminDonasi_TablePublish } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_TablePublish } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_list_donasi_by_status";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const listPublish = await AdminDonasi_getByStatus("1")
|
const listPublish = await AdminDonasi_getByStatus("1")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AdminDonasi_TableReject } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_TableReject } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_list_donasi_by_status";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const dataReject = await AdminDonasi_getByStatus("4")
|
const dataReject = await AdminDonasi_getByStatus("4")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { AdminDonasi_TableReview } from "@/app_modules/admin/donasi";
|
import { AdminDonasi_TableReview } from "@/app_modules/admin/donasi";
|
||||||
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_donasi_by_status";
|
import { AdminDonasi_getByStatus } from "@/app_modules/admin/donasi/fun/get/get_list_donasi_by_status";
|
||||||
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
|
|||||||
14
src/app/dev/donasi/create/cerita_penggalang/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { LayoutCreateDonasi } from "@/app_modules/donasi";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<LayoutCreateDonasi>{children}</LayoutCreateDonasi>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
10
src/app/dev/donasi/detail/detail_kabar/[id]/page.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { DetailKabarDonasi } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar";
|
||||||
|
|
||||||
|
export default async function Page({params}: {params: {id: string}}) {
|
||||||
|
|
||||||
|
let kabarId = params.id
|
||||||
|
const dataDonasi = await Donasi_getOneKabar(kabarId)
|
||||||
|
|
||||||
|
return <DetailKabarDonasi dataDonasi={dataDonasi as any}/>
|
||||||
|
}
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import { DetailKabarDonasi } from "@/app_modules/donasi";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
return <DetailKabarDonasi/>
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,17 @@
|
|||||||
import { DetailMainDonasi } from "@/app_modules/donasi";
|
import { DetailMainDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
||||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
|
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
|
|
||||||
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 dataDonasi = await Donasi_getOneById(donasiId);
|
const dataDonasi = await Donasi_getOneById(donasiId);
|
||||||
const countDonatur = await Donasi_getCountDonatur(donasiId)
|
const countDonatur = await Donasi_getCountDonatur(donasiId)
|
||||||
|
const userLoginId = await getToken_UserId();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DetailMainDonasi dataDonasi={dataDonasi as any} countDonatur={countDonatur} />
|
<DetailMainDonasi dataDonasi={dataDonasi as any} countDonatur={countDonatur} userLoginId={userLoginId}/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
22
src/app/dev/donasi/detail/detail_notif/[id]/layout.tsx
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { LayoutDonasi_DetailNotif } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
params: { id: string };
|
||||||
|
}) {
|
||||||
|
let kabarId = params.id;
|
||||||
|
const dataKabar = await Donasi_getOneKabar(kabarId);
|
||||||
|
const donasiId = dataKabar?.donasiId
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<LayoutDonasi_DetailNotif donasiId={donasiId as any}>{children}</LayoutDonasi_DetailNotif>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
9
src/app/dev/donasi/detail/detail_notif/[id]/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { Donasi_DetailNotif } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getOneKabar } from "@/app_modules/donasi/fun/get/get_one_kabar";
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
let kabarId = params.id;
|
||||||
|
const dataKabar = await Donasi_getOneKabar(kabarId);
|
||||||
|
|
||||||
|
return <Donasi_DetailNotif dataKabar={dataKabar as any} />;
|
||||||
|
}
|
||||||
@@ -1,14 +1,18 @@
|
|||||||
import { DetailPublishDonasi } from "@/app_modules/donasi";
|
import { DetailPublishDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
||||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
|
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const dataPublish = await Donasi_getOneById(params.id);
|
const dataPublish = await Donasi_getOneById(params.id);
|
||||||
const countDonatur= await Donasi_getCountDonatur(params.id)
|
const countDonatur= await Donasi_getCountDonatur(params.id)
|
||||||
|
const userLoginId = await getToken_UserId();
|
||||||
|
|
||||||
|
console.log(userLoginId)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DetailPublishDonasi dataPublish={dataPublish as any} countDonatur={countDonatur} />
|
<DetailPublishDonasi dataPublish={dataPublish as any} countDonatur={countDonatur} userLoginId={userLoginId}/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/app/dev/donasi/edit/edit_rekening/[id]/layout.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { LayoutDonasi_EditRekening } from "@/app_modules/donasi";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<LayoutDonasi_EditRekening>{children}</LayoutDonasi_EditRekening>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
17
src/app/dev/donasi/edit/edit_rekening/[id]/page.tsx
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { Donasi_EditRekening } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
let donasiId = params.id;
|
||||||
|
const data = await Donasi_getOneById(donasiId);
|
||||||
|
const dataDonasi = {
|
||||||
|
id: data?.id,
|
||||||
|
namaBank: data?.namaBank,
|
||||||
|
rekening: data?.rekening,
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Donasi_EditRekening dataDonasi={dataDonasi as any} />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,8 +1,23 @@
|
|||||||
import { LayoutDonasi } from "@/app_modules/donasi";
|
import { LayoutDonasi } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getNotifByUserId } from "@/app_modules/donasi/fun/get/get_notif_by_user_id";
|
||||||
|
import { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
export default async function Layout({children}: {children: React.ReactNode}) {
|
export default async function Layout({
|
||||||
return <>
|
children,
|
||||||
<LayoutDonasi>{children}</LayoutDonasi>
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
const userId = await getToken_UserId();
|
||||||
|
// const dataDonasi = await DOnasi_getList
|
||||||
|
const isRead = await Donasi_getNotifByUserId(userId).then((res) => res.map((val) => val.isRead))
|
||||||
|
// console.log(isRead)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<LayoutDonasi userId={userId} isRead={isRead as any}>
|
||||||
|
{children}
|
||||||
|
</LayoutDonasi>
|
||||||
</>
|
</>
|
||||||
}
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
import { Donasi_NotifPage } from "@/app_modules/donasi";
|
import { Donasi_NotifPage } from "@/app_modules/donasi";
|
||||||
|
import { Donasi_getNotifByUserId } from "@/app_modules/donasi/fun/get/get_notif_by_user_id";
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
let userId = params.id;
|
||||||
|
const dataNotif = await Donasi_getNotifByUserId(userId);
|
||||||
|
// console.log(dataNotif)
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Donasi_NotifPage />
|
<Donasi_NotifPage dataNotif={dataNotif as any} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
25
src/app/dev/donasi/pencairan_dana/[id]/page.tsx
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { PencairanDanaDonasi } from "@/app_modules/donasi";
|
||||||
|
import ComponentDonasi_LoaderOverlay from "@/app_modules/donasi/component/loader_overlay";
|
||||||
|
import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
|
||||||
|
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 { getToken_UserId } from "@/app_modules/fun/get_user_token";
|
||||||
|
import { Loader } from "@mantine/core";
|
||||||
|
|
||||||
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
|
let donasiId = params.id;
|
||||||
|
const totalAkumulasi = await Donasi_getTotalPencairanDanaById(donasiId);
|
||||||
|
const listPencairan = await Donasi_getListPencairanDanaById(donasiId);
|
||||||
|
|
||||||
|
|
||||||
|
// if (authorId != totalAkumulasi?.authorId) return <><NotifPeringatan /></>
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<PencairanDanaDonasi
|
||||||
|
totalAkumulasi={totalAkumulasi as any}
|
||||||
|
listPencairan={listPencairan as any}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
import { PencairanDanaDonasi } from "@/app_modules/donasi";
|
|
||||||
|
|
||||||
export default async function Page() {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<PencairanDanaDonasi />
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -15,6 +15,10 @@ export const RouterAdminInvestasi = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const RouterAdminDonasi = {
|
export const RouterAdminDonasi = {
|
||||||
|
|
||||||
|
api_gambar_bukti_transfer: "/api/donasi/gambar_bukti_transfer/",
|
||||||
|
|
||||||
|
|
||||||
main_donasi: "/dev/admin/donasi/main",
|
main_donasi: "/dev/admin/donasi/main",
|
||||||
// table
|
// table
|
||||||
table_publish: "/dev/admin/donasi/table/publish",
|
table_publish: "/dev/admin/donasi/table/publish",
|
||||||
@@ -28,7 +32,10 @@ export const RouterAdminDonasi = {
|
|||||||
detail_reject: "/dev/admin/donasi/detail/reject/",
|
detail_reject: "/dev/admin/donasi/detail/reject/",
|
||||||
|
|
||||||
// proses
|
// proses
|
||||||
proses_transaksi: "/dev/admin/donasi/proses_transaksi/"
|
proses_transaksi: "/dev/admin/donasi/proses_transaksi/",
|
||||||
|
pencairan_dana :"/dev/admin/donasi/pencairan_dana/",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export const RouterDonasi = {
|
|||||||
api_image: "/api/donasi/image/",
|
api_image: "/api/donasi/image/",
|
||||||
api_image_cerita: "/api/donasi/image_cerita/",
|
api_image_cerita: "/api/donasi/image_cerita/",
|
||||||
api_gambar_kabar: "/api/donasi/gambar_kabar/",
|
api_gambar_kabar: "/api/donasi/gambar_kabar/",
|
||||||
|
api_gambar_pencairan: "/api/donasi/gambar_pencairan/",
|
||||||
|
|
||||||
//main
|
//main
|
||||||
main_beranda: "/dev/donasi/main/beranda",
|
main_beranda: "/dev/donasi/main/beranda",
|
||||||
@@ -13,7 +13,7 @@ export const RouterDonasi = {
|
|||||||
main_donasi_saya: "/dev/donasi/main/donasi_saya",
|
main_donasi_saya: "/dev/donasi/main/donasi_saya",
|
||||||
|
|
||||||
// create
|
// create
|
||||||
create_donasi: "/dev/donasi/create_donasi",
|
create_donasi: "/dev/donasi/create/create_donasi",
|
||||||
create_cerita_penggalang: "/dev/donasi/create/cerita_penggalang/",
|
create_cerita_penggalang: "/dev/donasi/create/cerita_penggalang/",
|
||||||
create_kabar: "/dev/donasi/create/create_kabar/",
|
create_kabar: "/dev/donasi/create/create_kabar/",
|
||||||
|
|
||||||
@@ -21,34 +21,33 @@ export const RouterDonasi = {
|
|||||||
update_kabar: "/dev/donasi/edit/update_kabar/",
|
update_kabar: "/dev/donasi/edit/update_kabar/",
|
||||||
edit_donasi: "/dev/donasi/edit/edit_donasi/",
|
edit_donasi: "/dev/donasi/edit/edit_donasi/",
|
||||||
edit_cerita_penggalang: "/dev/donasi/edit/edit_cerita/",
|
edit_cerita_penggalang: "/dev/donasi/edit/edit_cerita/",
|
||||||
|
edit_rekening: "/dev/donasi/edit/edit_rekening/",
|
||||||
|
|
||||||
//pop up
|
//pop up
|
||||||
page_pop_up_create: "/dev/donasi/page_pop_up/create",
|
page_pop_up_create: "/dev/donasi/page_pop_up/create",
|
||||||
|
|
||||||
//detail
|
//detail
|
||||||
detail_main: "/dev/donasi/detail/detail_main/",
|
detail_main: "/dev/donasi/detail/detail_main/",
|
||||||
detail_kabar: "/dev/donasi/detail/detail_kabar",
|
detail_kabar: "/dev/donasi/detail/detail_kabar/",
|
||||||
detail_publish: "/dev/donasi/detail/detail_publish/",
|
detail_publish: "/dev/donasi/detail/detail_publish/",
|
||||||
detail_review: "/dev/donasi/detail/detail_review/",
|
detail_review: "/dev/donasi/detail/detail_review/",
|
||||||
detail_draft: "/dev/donasi/detail/detail_draft/",
|
detail_draft: "/dev/donasi/detail/detail_draft/",
|
||||||
detail_reject: "/dev/donasi/detail/detail_reject/",
|
detail_reject: "/dev/donasi/detail/detail_reject/",
|
||||||
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/",
|
||||||
|
|
||||||
//alur donasi
|
//alur donasi
|
||||||
donatur: "/dev/donasi/donatur/",
|
donatur: "/dev/donasi/donatur/",
|
||||||
kabar: "/dev/donasi/kabar/",
|
kabar: "/dev/donasi/kabar/",
|
||||||
pencairan_dana: "/dev/donasi/pencairan_dana",
|
pencairan_dana: "/dev/donasi/pencairan_dana/",
|
||||||
penggalang_dana: "/dev/donasi/penggalang_dana/",
|
penggalang_dana: "/dev/donasi/penggalang_dana/",
|
||||||
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/",
|
||||||
|
|
||||||
// proses donasi
|
// proses donasi
|
||||||
masukan_donasi: "/dev/donasi/proses_donasi/masukan_donasi/",
|
masukan_donasi: "/dev/donasi/proses_donasi/masukan_donasi/",
|
||||||
metode_pembayaran: "/dev/donasi/proses_donasi/metode_pembayaran/",
|
metode_pembayaran: "/dev/donasi/proses_donasi/metode_pembayaran/",
|
||||||
invoice: "/dev/donasi/proses_donasi/invoice/",
|
invoice: "/dev/donasi/proses_donasi/invoice/",
|
||||||
proses_transaksi: "/dev/donasi/proses_donasi/proses_transaksi/",
|
proses_transaksi: "/dev/donasi/proses_donasi/proses_transaksi/",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { Group, Button } from "@mantine/core";
|
|||||||
import { IconChevronLeft } from "@tabler/icons-react";
|
import { IconChevronLeft } from "@tabler/icons-react";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
export default function AdminDonasi_TombolKembali() {
|
export default function ComponentAdminDonasi_TombolKembali() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -7,16 +7,23 @@ import {
|
|||||||
Divider,
|
Divider,
|
||||||
Group,
|
Group,
|
||||||
Image,
|
Image,
|
||||||
|
Modal,
|
||||||
Paper,
|
Paper,
|
||||||
SimpleGrid,
|
SimpleGrid,
|
||||||
Stack,
|
Stack,
|
||||||
Text,
|
Text,
|
||||||
|
Textarea,
|
||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||||
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
|
import { AdminDonasi_funUpdateCatatanReject } from "../fun/update/fun_update_catatan_reject";
|
||||||
|
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
|
||||||
|
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||||
|
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
|
||||||
|
|
||||||
export default function AdminDonasi_DetailReject({
|
export default function AdminDonasi_DetailReject({
|
||||||
dataReject,
|
dataReject,
|
||||||
@@ -28,7 +35,11 @@ export default function AdminDonasi_DetailReject({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<ButtonOnHeader />
|
<ButtonOnHeader
|
||||||
|
catatan={donasi.catatan}
|
||||||
|
donasiId={donasi.id}
|
||||||
|
setDonasi={setDonasi}
|
||||||
|
/>
|
||||||
<SimpleGrid
|
<SimpleGrid
|
||||||
cols={2}
|
cols={2}
|
||||||
spacing="lg"
|
spacing="lg"
|
||||||
@@ -46,18 +57,61 @@ export default function AdminDonasi_DetailReject({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ButtonOnHeader() {
|
function ButtonOnHeader({
|
||||||
|
catatan,
|
||||||
|
donasiId,
|
||||||
|
setDonasi,
|
||||||
|
}: {
|
||||||
|
catatan: string;
|
||||||
|
donasiId: string;
|
||||||
|
setDonasi: any;
|
||||||
|
}) {
|
||||||
|
const [catat, setCatat] = useState(catatan);
|
||||||
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
|
|
||||||
|
async function onUpdate() {
|
||||||
|
await AdminDonasi_funUpdateCatatanReject(donasiId, catat).then(
|
||||||
|
async (res) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
NotifBerhasil(res.message);
|
||||||
|
close();
|
||||||
|
await AdminDonasi_getOneById(donasiId).then((res) => setDonasi(res));
|
||||||
|
} else {
|
||||||
|
NotifGagal(res.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Group position="apart">
|
<Group position="apart">
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<Button radius={"xl"} bg={"orange"} color="orange">
|
<Button radius={"xl"} bg={"orange"} color="orange" onClick={open}>
|
||||||
Tambah catatan
|
Tambah catatan
|
||||||
</Button>
|
</Button>
|
||||||
</Group>
|
</Group>
|
||||||
<Divider />
|
<Divider />
|
||||||
</Stack>
|
</Stack>
|
||||||
|
<Modal
|
||||||
|
opened={opened}
|
||||||
|
onClose={close}
|
||||||
|
centered
|
||||||
|
title="Tambah catatan penolakan"
|
||||||
|
>
|
||||||
|
<Stack>
|
||||||
|
<Textarea
|
||||||
|
value={catat}
|
||||||
|
onChange={(val) => setCatat(val.target.value)}
|
||||||
|
/>
|
||||||
|
<Group position="right">
|
||||||
|
<Button radius="xl" onClick={() => onUpdate()}>
|
||||||
|
Simpan
|
||||||
|
</Button>
|
||||||
|
</Group>
|
||||||
|
</Stack>
|
||||||
|
</Modal>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import {
|
|||||||
Textarea,
|
Textarea,
|
||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||||
import {
|
import {
|
||||||
@@ -95,7 +95,7 @@ function ButtonOnHeader({ donasi }: { donasi: MODEL_DONASI }) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Group position="apart">
|
<Group position="apart">
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<Group>
|
<Group>
|
||||||
<Button
|
<Button
|
||||||
radius={"xl"}
|
radius={"xl"}
|
||||||
|
|||||||
@@ -10,17 +10,20 @@ import {
|
|||||||
Grid,
|
Grid,
|
||||||
Group,
|
Group,
|
||||||
Image,
|
Image,
|
||||||
|
Modal,
|
||||||
Pagination,
|
Pagination,
|
||||||
Paper,
|
Paper,
|
||||||
Progress,
|
Progress,
|
||||||
ScrollArea,
|
ScrollArea,
|
||||||
SimpleGrid,
|
SimpleGrid,
|
||||||
|
Spoiler,
|
||||||
Stack,
|
Stack,
|
||||||
Table,
|
Table,
|
||||||
Text,
|
Text,
|
||||||
|
TextInput,
|
||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import AdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
import {
|
import {
|
||||||
IconClover,
|
IconClover,
|
||||||
@@ -32,44 +35,50 @@ import moment from "moment";
|
|||||||
import {
|
import {
|
||||||
MODEL_DONASI,
|
MODEL_DONASI,
|
||||||
MODEL_DONASI_INVOICE,
|
MODEL_DONASI_INVOICE,
|
||||||
|
MODEL_DONASI_PENCAIRAN_DANA,
|
||||||
} from "@/app_modules/donasi/model/interface";
|
} from "@/app_modules/donasi/model/interface";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useInterval, useShallowEffect } from "@mantine/hooks";
|
import { useDisclosure, useInterval, useShallowEffect } from "@mantine/hooks";
|
||||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
|
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
|
||||||
|
|
||||||
export default function AdminDonasi_DetailPublish({
|
export default function AdminDonasi_DetailPublish({
|
||||||
dataPublish,
|
dataPublish,
|
||||||
listDonatur,
|
listDonatur,
|
||||||
countDonatur,
|
countDonatur,
|
||||||
|
listPencairan,
|
||||||
}: {
|
}: {
|
||||||
dataPublish: MODEL_DONASI;
|
dataPublish: MODEL_DONASI;
|
||||||
listDonatur: any[];
|
listDonatur: any[];
|
||||||
countDonatur: number;
|
countDonatur: number;
|
||||||
|
listPencairan: MODEL_DONASI_PENCAIRAN_DANA[];
|
||||||
}) {
|
}) {
|
||||||
const [donasi, setDonasi] = useState(dataPublish);
|
const [donasi, setDonasi] = useState(dataPublish);
|
||||||
const [donatur, setDoanutur] = useState(listDonatur);
|
const [donatur, setDoanutur] = useState(listDonatur);
|
||||||
const interval = useInterval(() => reloadData(donasi.id), 5000);
|
const interval = useInterval(() => reloadData(donasi.id), 5000);
|
||||||
|
const [pencairan, setPencairan] = useState(listPencairan);
|
||||||
|
|
||||||
useShallowEffect(() => {
|
useShallowEffect(() => {
|
||||||
interval.start();
|
interval.start();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
async function reloadData(donasiId: string) {
|
async function reloadData(donasiId: string) {
|
||||||
const data = await Donasi_getOneById(donasiId);
|
const data = await AdminDonasi_getOneById(donasiId);
|
||||||
setDonasi(data as any)
|
setDonasi(data as any);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* <pre>{JSON.stringify(donatur.map((e) => e), null, 2)}</pre> */}
|
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
|
||||||
<Stack>
|
<Stack>
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<TampilanDetailDonasi donasi={donasi} countDonatur={countDonatur} />
|
<TampilanDetailDonasi donasi={donasi} countDonatur={countDonatur} />
|
||||||
<TampilanListDonatur donatur={donatur} donasi={donasi} />
|
<TampilanListDonatur donatur={donatur} donasi={donasi} />
|
||||||
|
<TampilanListPencairan pencairan={pencairan} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
@@ -82,14 +91,16 @@ function TampilanDetailDonasi({
|
|||||||
donasi: MODEL_DONASI;
|
donasi: MODEL_DONASI;
|
||||||
countDonatur: number;
|
countDonatur: number;
|
||||||
}) {
|
}) {
|
||||||
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
|
const router = useRouter();
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Paper radius={"md"} p={"md"}>
|
<Paper radius={"md"} p={"md"}>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.Col span={6}>
|
<Grid.Col md={6} lg={4}>
|
||||||
<AspectRatio ratio={16 / 9}>
|
<AspectRatio ratio={16 / 9}>
|
||||||
<Paper radius={"md"}>
|
<Paper radius={"md"} h={{ lg: 200, md: 200, sm: 200 }}>
|
||||||
<Image
|
<Image
|
||||||
alt="Foto"
|
alt="Foto"
|
||||||
src={RouterDonasi.api_gambar + `${donasi.imagesId}`}
|
src={RouterDonasi.api_gambar + `${donasi.imagesId}`}
|
||||||
@@ -97,52 +108,134 @@ function TampilanDetailDonasi({
|
|||||||
</Paper>
|
</Paper>
|
||||||
</AspectRatio>
|
</AspectRatio>
|
||||||
</Grid.Col>
|
</Grid.Col>
|
||||||
<Grid.Col span={6}>
|
<Grid.Col md={6} lg={4}>
|
||||||
<Stack spacing={7}>
|
<Paper withBorder p={"sm"} mah={250} h={250}>
|
||||||
<Title order={4}>{donasi.title}</Title>
|
<Stack spacing={5}>
|
||||||
<Text fz={"xs"}>
|
<Title order={4}>{donasi.title}</Title>
|
||||||
Durasi: {donasi.DonasiMaster_Durasi.name} hari
|
<Group>
|
||||||
</Text>
|
<Text fz={"xs"}>Penggalang Dana</Text>
|
||||||
|
<Title order={5} c="blue">
|
||||||
|
{donasi.Author.username}
|
||||||
|
</Title>
|
||||||
|
</Group>
|
||||||
|
<Group>
|
||||||
|
<Text fz={12}>Durasi</Text>
|
||||||
|
<Title order={5} c="blue">
|
||||||
|
{donasi.DonasiMaster_Durasi.name} hari
|
||||||
|
</Title>
|
||||||
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={12}>Dana dibutuhkan</Text>
|
<Text fz={12}>Dana dibutuhkan</Text>
|
||||||
<Title order={5} c="blue">
|
<Title order={5} c="blue">
|
||||||
<TampilanRupiahDonasi nominal={+donasi.target} />
|
<TampilanRupiahDonasi nominal={+donasi.target} />
|
||||||
</Title>
|
</Title>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={12}>Kategori</Text>
|
<Text fz={12}>Kategori</Text>
|
||||||
<Title order={5} c="blue">
|
<Title order={5} c="blue">
|
||||||
{donasi.DonasiMaster_Ketegori.name}
|
{donasi.DonasiMaster_Ketegori.name}
|
||||||
</Title>
|
</Title>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={12}>Total donatur</Text>
|
<Text fz={12}>Total donatur</Text>
|
||||||
<Title order={5} c="blue">
|
<Title order={5} c="blue">
|
||||||
{countDonatur}
|
{countDonatur}
|
||||||
</Title>
|
</Title>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={12}>Progres</Text>
|
<Text fz={12}>Progres</Text>
|
||||||
<Title order={5} c="blue">
|
<Title order={5} c="blue">
|
||||||
{donasi.progres} %
|
{donasi.progres} %
|
||||||
</Title>
|
</Title>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={12}>Dana terkumpul</Text>
|
<Text fz={12}>Dana terkumpul</Text>
|
||||||
<Title order={5} c="blue">
|
<Title order={5} c="blue">
|
||||||
<TampilanRupiahDonasi nominal={+donasi.terkumpul} />
|
<TampilanRupiahDonasi nominal={+donasi.terkumpul} />
|
||||||
</Title>
|
</Title>
|
||||||
</Group>
|
</Group>
|
||||||
</Stack>
|
{/* <Button w={200} bg={"green.5"} color="green">Pencairan Dana</Button> */}
|
||||||
|
</Stack>
|
||||||
|
</Paper>
|
||||||
|
</Grid.Col>
|
||||||
|
|
||||||
|
<Grid.Col md={6} lg={4}>
|
||||||
|
<Paper withBorder p={"sm"} mah={250} h={250}>
|
||||||
|
<Stack spacing={"xl"}>
|
||||||
|
<Center>
|
||||||
|
<Title order={4}>Pencairan Dana</Title>
|
||||||
|
</Center>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Col span={"auto"}>
|
||||||
|
<Stack spacing={0}>
|
||||||
|
<Text fz={"xs"}>Total Dana Dicairkan</Text>
|
||||||
|
<Title>
|
||||||
|
<TampilanRupiahDonasi
|
||||||
|
nominal={donasi.totalPencairan}
|
||||||
|
fontSize={14}
|
||||||
|
/>
|
||||||
|
</Title>
|
||||||
|
</Stack>
|
||||||
|
</Grid.Col>
|
||||||
|
<Grid.Col span={"auto"}>
|
||||||
|
<Stack spacing={0}>
|
||||||
|
<Text fz={"xs"}>Bank Tujuan</Text>
|
||||||
|
<Title order={6}>{donasi.namaBank}</Title>
|
||||||
|
</Stack>
|
||||||
|
</Grid.Col>
|
||||||
|
</Grid>
|
||||||
|
<Grid>
|
||||||
|
<Grid.Col span={"auto"}>
|
||||||
|
<Stack spacing={0}>
|
||||||
|
<Text fz={"xs"}>Akumulasi Pencairan</Text>
|
||||||
|
<Title order={6}>
|
||||||
|
{donasi.akumulasiPencairan} Kali
|
||||||
|
</Title>
|
||||||
|
</Stack>
|
||||||
|
</Grid.Col>
|
||||||
|
<Grid.Col span={"auto"}>
|
||||||
|
<Stack spacing={0}>
|
||||||
|
<Text fz={"xs"}>Nomor Rekening</Text>
|
||||||
|
<Title order={6}>{donasi.rekening}</Title>
|
||||||
|
</Stack>
|
||||||
|
</Grid.Col>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
radius={"xl"}
|
||||||
|
onClick={() =>
|
||||||
|
router.push(
|
||||||
|
RouterAdminDonasi.pencairan_dana + `${donasi.id}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Cairkan Dana
|
||||||
|
</Button>
|
||||||
|
</Stack>
|
||||||
|
</Paper>
|
||||||
</Grid.Col>
|
</Grid.Col>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Paper>
|
</Paper>
|
||||||
|
<Modal opened={opened} onClose={close} centered>
|
||||||
|
<PencairanDana />
|
||||||
|
</Modal>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function PencairanDana() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Stack>
|
||||||
|
<TextInput label="Masukan nominal" />
|
||||||
|
</Stack>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//######################## LIST DONATUR #####################//
|
||||||
function TampilanListDonatur({
|
function TampilanListDonatur({
|
||||||
donatur,
|
donatur,
|
||||||
donasi,
|
donasi,
|
||||||
@@ -220,3 +313,94 @@ function TampilanListDonatur({
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//######################## LIST PENCAIRAN #####################//
|
||||||
|
function TampilanListPencairan({
|
||||||
|
pencairan,
|
||||||
|
}: {
|
||||||
|
pencairan: MODEL_DONASI_PENCAIRAN_DANA[];
|
||||||
|
}) {
|
||||||
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
|
const [gambarId, setGambarId] = useState("");
|
||||||
|
|
||||||
|
const rowTable = pencairan.map((e) => (
|
||||||
|
<tr key={e.id}>
|
||||||
|
<td>
|
||||||
|
<TampilanRupiahDonasi nominal={e.nominalCair} />
|
||||||
|
</td>
|
||||||
|
<td>{moment(e.createdAt).format("ll")}</td>
|
||||||
|
<td>
|
||||||
|
<Text>{e.title}</Text>
|
||||||
|
</td>
|
||||||
|
<td width={500}>
|
||||||
|
<Box w={"100%"}>
|
||||||
|
<Spoiler hideLabel="Sembunyikan" maxHeight={70} showLabel="Lihat">
|
||||||
|
{e.deskripsi}
|
||||||
|
</Spoiler>
|
||||||
|
</Box>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{
|
||||||
|
<Box>
|
||||||
|
<Center>
|
||||||
|
<Button
|
||||||
|
radius={"xl"}
|
||||||
|
compact
|
||||||
|
bg={"green"}
|
||||||
|
color="green"
|
||||||
|
onClick={() => {
|
||||||
|
open();
|
||||||
|
setGambarId(e.imagesId);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Detail
|
||||||
|
</Button>
|
||||||
|
</Center>
|
||||||
|
</Box>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Modal opened={opened} onClose={close} centered>
|
||||||
|
<AspectRatio ratio={9 / 16}>
|
||||||
|
<Image
|
||||||
|
src={RouterDonasi.api_gambar_pencairan + `${gambarId}`}
|
||||||
|
alt="Foto"
|
||||||
|
/>
|
||||||
|
</AspectRatio>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
<Stack p={"md"}>
|
||||||
|
<Title order={3}>Rincian Pencairan Dana</Title>
|
||||||
|
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
|
||||||
|
{_.isEmpty(pencairan) ? (
|
||||||
|
<Paper bg={"gray.1"} p={"xs"}>
|
||||||
|
<Center>BELUM ADA PENCAIRAN DANA</Center>
|
||||||
|
</Paper>
|
||||||
|
) : (
|
||||||
|
<Paper withBorder p={"xs"}>
|
||||||
|
<Table horizontalSpacing={"md"} verticalSpacing={"md"}>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Nominal</th>
|
||||||
|
<th>Tanggal</th>
|
||||||
|
<th>Judul</th>
|
||||||
|
<th>
|
||||||
|
<Center>Deskripsi</Center>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<Center>Bukti Transfer</Center>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>{rowTable}</tbody>
|
||||||
|
</Table>
|
||||||
|
</Paper>
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,196 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import {
|
||||||
|
AspectRatio,
|
||||||
|
Button,
|
||||||
|
Center,
|
||||||
|
FileButton,
|
||||||
|
Image,
|
||||||
|
NumberInput,
|
||||||
|
Paper,
|
||||||
|
Stack,
|
||||||
|
TextInput,
|
||||||
|
Textarea,
|
||||||
|
Title,
|
||||||
|
} from "@mantine/core";
|
||||||
|
import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||||
|
import { useState } from "react";
|
||||||
|
import { IconCamera } from "@tabler/icons-react";
|
||||||
|
import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||||
|
import { MODEL_DONASI_PENCAIRAN_DANA } from "@/app_modules/donasi/model/interface";
|
||||||
|
import _ from "lodash";
|
||||||
|
import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
|
||||||
|
import { AdminDonasi_funCreatePencairanDana } from "../../fun/create/fun_create_pencairan_dana";
|
||||||
|
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
|
||||||
|
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||||
|
import { AdminDonasi_AkumulasiPencairanById } from "../../fun/update/fun_update_akumulasi_pencairan";
|
||||||
|
|
||||||
|
export default function AdminDonasi_PencairanDana({
|
||||||
|
donasiId,
|
||||||
|
}: {
|
||||||
|
donasiId: string;
|
||||||
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
|
const [file, setFile] = useState<File | null>(null);
|
||||||
|
const [images, setImages] = useState<any | null>();
|
||||||
|
const [value, setValue] = useState({
|
||||||
|
title: "",
|
||||||
|
deskripsi: "",
|
||||||
|
nilai: "",
|
||||||
|
});
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Stack>
|
||||||
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
|
<Center>
|
||||||
|
<Paper
|
||||||
|
p={"md"}
|
||||||
|
w={{ base: 200, sm: 200, md: 300, lg: 400 }}
|
||||||
|
withBorder
|
||||||
|
>
|
||||||
|
<Center mb={"lg"}>
|
||||||
|
<Title order={5}>Form Pencairan Dana</Title>
|
||||||
|
</Center>
|
||||||
|
<Stack>
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
type="number"
|
||||||
|
placeholder="Masukan jumlah nominal"
|
||||||
|
label="Nominal"
|
||||||
|
onChange={(val) => {
|
||||||
|
setValue({
|
||||||
|
...value,
|
||||||
|
nilai: val.target.value,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
placeholder="Masukan judul"
|
||||||
|
label="Judul"
|
||||||
|
onChange={(val: any) => {
|
||||||
|
setValue({
|
||||||
|
...value,
|
||||||
|
title: val.target.value,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Textarea
|
||||||
|
withAsterisk
|
||||||
|
placeholder="Masukan deskripsi"
|
||||||
|
label="Deskripsi"
|
||||||
|
onChange={(val: any) => {
|
||||||
|
setValue({
|
||||||
|
...value,
|
||||||
|
deskripsi: val.target.value,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ComponentDonasi_NotedBox informasi="Wajib menyertakan bukti transfer" />
|
||||||
|
<Stack>
|
||||||
|
<Center>
|
||||||
|
<FileButton
|
||||||
|
onChange={async (files: any | null) => {
|
||||||
|
try {
|
||||||
|
const buffer = URL.createObjectURL(
|
||||||
|
new Blob([new Uint8Array(await files.arrayBuffer())])
|
||||||
|
);
|
||||||
|
// console.log(buffer, "ini buffer");
|
||||||
|
// console.log(files, " ini file");
|
||||||
|
setImages(buffer);
|
||||||
|
setFile(files);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
accept="image/png,image/jpeg"
|
||||||
|
>
|
||||||
|
{(props) => (
|
||||||
|
<Button
|
||||||
|
{...props}
|
||||||
|
radius={"xl"}
|
||||||
|
variant="outline"
|
||||||
|
w={150}
|
||||||
|
leftIcon={<IconCamera />}
|
||||||
|
compact
|
||||||
|
>
|
||||||
|
Upload
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</FileButton>
|
||||||
|
</Center>
|
||||||
|
{images ? (
|
||||||
|
<AspectRatio ratio={9 / 16}>
|
||||||
|
<Paper radius={"md"} withBorder>
|
||||||
|
<Image
|
||||||
|
alt="Foto"
|
||||||
|
src={images}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</AspectRatio>
|
||||||
|
) : (
|
||||||
|
""
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
|
<Button
|
||||||
|
radius={"xl"}
|
||||||
|
mt={"lg"}
|
||||||
|
onClick={
|
||||||
|
() => onSave(router, value, donasiId, file as any)
|
||||||
|
// console.log(value)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Simpan
|
||||||
|
</Button>
|
||||||
|
</Stack>
|
||||||
|
</Paper>
|
||||||
|
</Center>
|
||||||
|
</Stack>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onSave(
|
||||||
|
router: AppRouterInstance,
|
||||||
|
value: any,
|
||||||
|
donasiId: string,
|
||||||
|
file: FormData
|
||||||
|
) {
|
||||||
|
const body = {
|
||||||
|
donasiId: donasiId,
|
||||||
|
nominalCair: value.nilai,
|
||||||
|
title: value.title,
|
||||||
|
deskripsi: value.deskripsi,
|
||||||
|
};
|
||||||
|
|
||||||
|
// console.log(body);
|
||||||
|
|
||||||
|
if (_.values(body).includes("")) return NotifPeringatan("Lengkapi Data");
|
||||||
|
if (!file) return NotifPeringatan("Lampirkan Bukti Transfer");
|
||||||
|
|
||||||
|
const gambar = new FormData();
|
||||||
|
gambar.append("file", file as any);
|
||||||
|
|
||||||
|
await AdminDonasi_funCreatePencairanDana(body as any, gambar).then(
|
||||||
|
async (res) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
await AdminDonasi_AkumulasiPencairanById(
|
||||||
|
body.donasiId as any,
|
||||||
|
body.nominalCair as any
|
||||||
|
).then((res) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
NotifBerhasil(res.message);
|
||||||
|
router.back();
|
||||||
|
} else {
|
||||||
|
NotifGagal(res.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
NotifGagal(res.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,18 +2,21 @@
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
ActionIcon,
|
ActionIcon,
|
||||||
|
AspectRatio,
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
Center,
|
Center,
|
||||||
Group,
|
Group,
|
||||||
HoverCard,
|
HoverCard,
|
||||||
|
Image,
|
||||||
|
Modal,
|
||||||
Paper,
|
Paper,
|
||||||
Stack,
|
Stack,
|
||||||
Table,
|
Table,
|
||||||
Text,
|
Text,
|
||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import AdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../../component/tombol_kembali";
|
||||||
import { MODEL_DONASI_INVOICE } from "@/app_modules/donasi/model/interface";
|
import { MODEL_DONASI_INVOICE } from "@/app_modules/donasi/model/interface";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
@@ -24,15 +27,17 @@ import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_b
|
|||||||
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||||
import { AdminDonasi_getListStatusInvoiceProses } from "../../fun/get/get_list_status_invoice_proses";
|
import { AdminDonasi_getListStatusInvoiceProses } from "../../fun/get/get_list_status_invoice_proses";
|
||||||
import { AdminDonasi_funUpdateProgresDanTerkumpul } from "../../fun/update/fun_update_progres_dan_terkumpul";
|
import { AdminDonasi_funUpdateProgresDanTerkumpul } from "../../fun/update/fun_update_progres_dan_terkumpul";
|
||||||
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
|
import { RouterAdminDonasi } from "@/app/lib/router_hipmi/router_admin";
|
||||||
|
|
||||||
export default function AdminDonasi_ProsesTransaksi({
|
export default function AdminDonasi_ProsesTransaksi({
|
||||||
listProses,
|
listProses,
|
||||||
}: {
|
}: {
|
||||||
listProses: MODEL_DONASI_INVOICE[];
|
listProses: MODEL_DONASI_INVOICE[];
|
||||||
}) {
|
}) {
|
||||||
const [invoice, setInvoice] = useState<MODEL_DONASI_INVOICE[] | any[]>(
|
const [invoice, setInvoice] = useState<MODEL_DONASI_INVOICE[]>(listProses);
|
||||||
listProses
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
);
|
const [imageId, setImageId] = useState("");
|
||||||
|
|
||||||
async function onClick(invoice: MODEL_DONASI_INVOICE) {
|
async function onClick(invoice: MODEL_DONASI_INVOICE) {
|
||||||
let nominal: number = +invoice.nominal;
|
let nominal: number = +invoice.nominal;
|
||||||
@@ -50,7 +55,7 @@ export default function AdminDonasi_ProsesTransaksi({
|
|||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
await AdminDonasi_getListStatusInvoiceProses(
|
await AdminDonasi_getListStatusInvoiceProses(
|
||||||
invoice.Donasi.id
|
invoice.Donasi.id
|
||||||
).then((res) => {
|
).then((res: any) => {
|
||||||
setInvoice(res);
|
setInvoice(res);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -79,6 +84,20 @@ export default function AdminDonasi_ProsesTransaksi({
|
|||||||
<Button
|
<Button
|
||||||
radius={"xl"}
|
radius={"xl"}
|
||||||
variant="outline"
|
variant="outline"
|
||||||
|
onClick={() => {
|
||||||
|
open();
|
||||||
|
setImageId(e.imagesId);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Lihat
|
||||||
|
</Button>
|
||||||
|
</Center>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<Center>
|
||||||
|
<Button
|
||||||
|
radius={"xl"}
|
||||||
|
variant="filled"
|
||||||
color="green"
|
color="green"
|
||||||
onClick={() => onClick(e)}
|
onClick={() => onClick(e)}
|
||||||
>
|
>
|
||||||
@@ -91,9 +110,12 @@ export default function AdminDonasi_ProsesTransaksi({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Modal opened={opened} onClose={close} centered>
|
||||||
|
<ModalBuktiTransfer imageId={imageId} />
|
||||||
|
</Modal>
|
||||||
{/* <pre>{JSON.stringify(invoice, null, 2)}</pre> */}
|
{/* <pre>{JSON.stringify(invoice, null, 2)}</pre> */}
|
||||||
<Stack>
|
<Stack>
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<Stack>
|
<Stack>
|
||||||
<HeaderPage />
|
<HeaderPage />
|
||||||
|
|
||||||
@@ -107,6 +129,9 @@ export default function AdminDonasi_ProsesTransaksi({
|
|||||||
<Center>Metode Pembayaran</Center>
|
<Center>Metode Pembayaran</Center>
|
||||||
</th>
|
</th>
|
||||||
<th>Tanggal</th>
|
<th>Tanggal</th>
|
||||||
|
<th>
|
||||||
|
<Center>Bukti Transfer</Center>
|
||||||
|
</th>
|
||||||
<th>
|
<th>
|
||||||
<Center>Aksi</Center>
|
<Center>Aksi</Center>
|
||||||
</th>
|
</th>
|
||||||
@@ -151,3 +176,16 @@ function HeaderPage() {
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ModalBuktiTransfer({ imageId }: { imageId: string }) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AspectRatio ratio={9 / 16}>
|
||||||
|
<Image
|
||||||
|
alt="Foto"
|
||||||
|
src={RouterAdminDonasi.api_gambar_bukti_transfer + `${imageId}`}
|
||||||
|
/>
|
||||||
|
</AspectRatio>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { MODEL_DONASI_PENCAIRAN_DANA } from "@/app_modules/donasi/model/interface";
|
||||||
|
import _ from "lodash";
|
||||||
|
import { v4 } from "uuid";
|
||||||
|
import fs from "fs";
|
||||||
|
import { revalidatePath } from "next/cache";
|
||||||
|
|
||||||
|
export async function AdminDonasi_funCreatePencairanDana(
|
||||||
|
req: MODEL_DONASI_PENCAIRAN_DANA,
|
||||||
|
gambar: FormData
|
||||||
|
) {
|
||||||
|
const dataImage: any = gambar.get("file");
|
||||||
|
const fileName = dataImage.name;
|
||||||
|
const fileExtension = _.lowerCase(dataImage.name.split(".").pop());
|
||||||
|
const fRandomName = v4(fileName) + "." + fileExtension;
|
||||||
|
|
||||||
|
const uploadBukti = await prisma.images.create({
|
||||||
|
data: {
|
||||||
|
url: fRandomName,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
url: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!uploadBukti) return { status: 400, message: "Gagal upload gambar" };
|
||||||
|
const uploadFolder = Buffer.from(await dataImage.arrayBuffer());
|
||||||
|
fs.writeFileSync(
|
||||||
|
`./public/donasi/pencairan/${uploadBukti.url}`,
|
||||||
|
uploadFolder
|
||||||
|
);
|
||||||
|
|
||||||
|
const createPencairan = await prisma.donasi_PencairanDana.create({
|
||||||
|
data: {
|
||||||
|
nominalCair: +req.nominalCair,
|
||||||
|
deskripsi: req.deskripsi,
|
||||||
|
title: req.title,
|
||||||
|
donasiId: req.donasiId,
|
||||||
|
imagesId: uploadBukti.id
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!createPencairan) return { status: 400, message: "Gagal membuat data" };
|
||||||
|
revalidatePath("/dev/admin/donasi/detail/publish");
|
||||||
|
return {
|
||||||
|
status: 200,
|
||||||
|
message: "Berhasil",
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -4,7 +4,10 @@ import prisma from "@/app/lib/prisma";
|
|||||||
|
|
||||||
export async function AdminDonasi_getByStatus(status: string) {
|
export async function AdminDonasi_getByStatus(status: string) {
|
||||||
if (status === "1") {
|
if (status === "1") {
|
||||||
const getReview = await prisma.donasi.findMany({
|
const getPublish = await prisma.donasi.findMany({
|
||||||
|
orderBy: {
|
||||||
|
createdAt: "desc",
|
||||||
|
},
|
||||||
where: {
|
where: {
|
||||||
donasiMaster_StatusDonasiId: "1",
|
donasiMaster_StatusDonasiId: "1",
|
||||||
},
|
},
|
||||||
@@ -12,24 +15,25 @@ export async function AdminDonasi_getByStatus(status: string) {
|
|||||||
id: true,
|
id: true,
|
||||||
title: true,
|
title: true,
|
||||||
target: true,
|
target: true,
|
||||||
active: true,
|
// active: true,
|
||||||
createdAt: true,
|
// createdAt: true,
|
||||||
updatedAt: true,
|
// updatedAt: true,
|
||||||
publishTime: true,
|
// publishTime: true,
|
||||||
authorId: true,
|
authorId: true,
|
||||||
imagesId: true,
|
// imagesId: true,
|
||||||
donasiMaster_KategoriId: true,
|
terkumpul: true,
|
||||||
donasiMaster_DurasiId: true,
|
// donasiMaster_KategoriId: true,
|
||||||
donasiMaster_StatusDonasiId: true,
|
// donasiMaster_DurasiId: true,
|
||||||
Author: true,
|
// donasiMaster_StatusDonasiId: true,
|
||||||
|
// Author: true,
|
||||||
imageDonasi: true,
|
imageDonasi: true,
|
||||||
CeritaDonasi: true,
|
// CeritaDonasi: true,
|
||||||
DonasiMaster_Ketegori: true,
|
DonasiMaster_Ketegori: true,
|
||||||
DonasiMaster_Durasi: true,
|
DonasiMaster_Durasi: true,
|
||||||
DonasiMaster_Status: true,
|
// DonasiMaster_Status: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
return getReview;
|
return getPublish;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status === "2") {
|
if (status === "2") {
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
"use server"
|
||||||
|
|
||||||
|
import prisma from "@/app/lib/prisma"
|
||||||
|
|
||||||
|
export async function AdminDonasi_getListPencairanDana(donasiId:string) {
|
||||||
|
const data = await prisma.donasi_PencairanDana.findMany({
|
||||||
|
where: {
|
||||||
|
donasiId: donasiId
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return data
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ export async function AdminDonasi_getListStatusInvoiceProses(donasiId: string) {
|
|||||||
nominal: true,
|
nominal: true,
|
||||||
createdAt: true,
|
createdAt: true,
|
||||||
Author: true,
|
Author: true,
|
||||||
|
imagesId: true,
|
||||||
Donasi: {
|
Donasi: {
|
||||||
select: {
|
select: {
|
||||||
id: true,
|
id: true,
|
||||||
@@ -26,8 +27,6 @@ export async function AdminDonasi_getListStatusInvoiceProses(donasiId: string) {
|
|||||||
publishTime: true,
|
publishTime: true,
|
||||||
catatan: true,
|
catatan: true,
|
||||||
terkumpul: true,
|
terkumpul: true,
|
||||||
authorId: true,
|
|
||||||
imagesId: true,
|
|
||||||
donasiMaster_KategoriId: true,
|
donasiMaster_KategoriId: true,
|
||||||
donasiMaster_DurasiId: true,
|
donasiMaster_DurasiId: true,
|
||||||
donasiMaster_StatusDonasiId: true,
|
donasiMaster_StatusDonasiId: true,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
|
||||||
export async function AdminDonasi_getById(id: string) {
|
export async function AdminDonasi_getOneById(id: string) {
|
||||||
const res = await prisma.donasi.findFirst({
|
const res = await prisma.donasi.findFirst({
|
||||||
where: {
|
where: {
|
||||||
id: id,
|
id: id,
|
||||||
@@ -19,6 +19,10 @@ export async function AdminDonasi_getById(id: string) {
|
|||||||
progres: true,
|
progres: true,
|
||||||
terkumpul: true,
|
terkumpul: true,
|
||||||
authorId: true,
|
authorId: true,
|
||||||
|
namaBank: true,
|
||||||
|
rekening: true,
|
||||||
|
totalPencairan: true,
|
||||||
|
akumulasiPencairan: true,
|
||||||
imagesId: true,
|
imagesId: true,
|
||||||
donasiMaster_KategoriId: true,
|
donasiMaster_KategoriId: true,
|
||||||
donasiMaster_DurasiId: true,
|
donasiMaster_DurasiId: true,
|
||||||
@@ -31,5 +35,6 @@ export async function AdminDonasi_getById(id: string) {
|
|||||||
DonasiMaster_Status: true,
|
DonasiMaster_Status: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
// console.log(res)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||||
|
|
||||||
|
export async function AdminDonasi_AkumulasiPencairanById(
|
||||||
|
donasiId: string,
|
||||||
|
nominalPencairan: number
|
||||||
|
) {
|
||||||
|
const cariDonasi = await prisma.donasi.findFirst({
|
||||||
|
where: {
|
||||||
|
id: donasiId,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
akumulasiPencairan: true,
|
||||||
|
totalPencairan: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!cariDonasi) return { status: 400, message: "Donasi tidak ditemukan" };
|
||||||
|
|
||||||
|
let akumulasiSementara: number | any = cariDonasi.akumulasiPencairan;
|
||||||
|
let totalSementara: number | any = cariDonasi.totalPencairan;
|
||||||
|
|
||||||
|
// console.log(akumulasiSementara, "akumulasi");
|
||||||
|
// console.log(totalSementara, "total");
|
||||||
|
|
||||||
|
const hasilTotal = totalSementara + Number(nominalPencairan)
|
||||||
|
const hasilAkumulasi = akumulasiSementara + 1;
|
||||||
|
|
||||||
|
const update = await prisma.donasi.update({
|
||||||
|
where: {
|
||||||
|
id: donasiId,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
akumulasiPencairan: hasilAkumulasi,
|
||||||
|
totalPencairan: hasilTotal,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!update) return { status: 400, message: "Update akumulasi gagal" };
|
||||||
|
|
||||||
|
return {
|
||||||
|
status: 200,
|
||||||
|
message: "Berhasil di simpan",
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
"use server"
|
||||||
|
|
||||||
|
import prisma from "@/app/lib/prisma"
|
||||||
|
|
||||||
|
export async function AdminDonasi_funUpdateCatatanReject(doansiId: string, catatan: string) {
|
||||||
|
const updt = await prisma.donasi.update({
|
||||||
|
where: {
|
||||||
|
id: doansiId
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
catatan: catatan
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if(!updt) return {status: 400, message: "Gagal update"}
|
||||||
|
return {
|
||||||
|
status: 200,
|
||||||
|
message: "Berhasil update"
|
||||||
|
}
|
||||||
|
}
|
||||||
3
src/app_modules/admin/donasi/global_state/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import { atomWithStorage } from "jotai/utils";
|
||||||
|
|
||||||
|
export const gs_adminDonasi_hotMenu = atomWithStorage("gs_adminDonasi_hotMenu", 0)
|
||||||
@@ -6,6 +6,7 @@ import AdminDonasi_DetailReview from "./detail_table/detail_review";
|
|||||||
import AdminDonasi_TableReject from "./table_status/table_reject";
|
import AdminDonasi_TableReject from "./table_status/table_reject";
|
||||||
import AdminDonasi_DetailReject from "./detail_table/detail_reject";
|
import AdminDonasi_DetailReject from "./detail_table/detail_reject";
|
||||||
import AdminDonasi_ProsesTransaksi from "./detail_table/publish/proses_transaksi";
|
import AdminDonasi_ProsesTransaksi from "./detail_table/publish/proses_transaksi";
|
||||||
|
import AdminDonasi_PencairanDana from "./detail_table/publish/pencairan_dana";
|
||||||
|
|
||||||
export {
|
export {
|
||||||
AdminDonasi_Main,
|
AdminDonasi_Main,
|
||||||
@@ -15,4 +16,6 @@ export {
|
|||||||
AdminDonasi_TableReject,
|
AdminDonasi_TableReject,
|
||||||
AdminDonasi_DetailReview,
|
AdminDonasi_DetailReview,
|
||||||
AdminDonasi_DetailReject,
|
AdminDonasi_DetailReject,
|
||||||
|
AdminDonasi_ProsesTransaksi,
|
||||||
|
AdminDonasi_PencairanDana,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||||
@@ -27,7 +27,7 @@ export default function AdminDonasi_TablePublish({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<TableStatus listPublish={listPublish as any} />
|
<TableStatus listPublish={listPublish as any} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
@@ -45,6 +45,9 @@ function TableStatus({ listPublish }: { listPublish: MODEL_DONASI[] }) {
|
|||||||
<td>
|
<td>
|
||||||
<TampilanRupiahDonasi nominal={+e.target} />
|
<TampilanRupiahDonasi nominal={+e.target} />
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
<TampilanRupiahDonasi nominal={+e.terkumpul}/>
|
||||||
|
</td>
|
||||||
<td>{e.DonasiMaster_Ketegori.name}</td>
|
<td>{e.DonasiMaster_Ketegori.name}</td>
|
||||||
<td>{e.DonasiMaster_Durasi.name} hari</td>
|
<td>{e.DonasiMaster_Durasi.name} hari</td>
|
||||||
<td>
|
<td>
|
||||||
@@ -84,6 +87,7 @@ function TableStatus({ listPublish }: { listPublish: MODEL_DONASI[] }) {
|
|||||||
<tr>
|
<tr>
|
||||||
<th>Judul</th>
|
<th>Judul</th>
|
||||||
<th>Target</th>
|
<th>Target</th>
|
||||||
|
<th>Terkumpul</th>
|
||||||
<th>Ketegori</th>
|
<th>Ketegori</th>
|
||||||
<th>Durasi</th>
|
<th>Durasi</th>
|
||||||
<th><Center>Aksi</Center></th>
|
<th><Center>Aksi</Center></th>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
import AdminDonasi_DetailReview from "../detail_table/detail_review";
|
import AdminDonasi_DetailReview from "../detail_table/detail_review";
|
||||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||||
@@ -30,7 +30,7 @@ export default function AdminDonasi_TableReject({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<TableStatus dataReject={dataReject} />
|
<TableStatus dataReject={dataReject} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
import { IconChevronLeft, IconEyeCheck } from "@tabler/icons-react";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import AdminDonasi_TombolKembali from "../component/tombol_kembali";
|
import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali";
|
||||||
import { useDisclosure } from "@mantine/hooks";
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
import AdminDonasi_DetailReview from "../detail_table/detail_review";
|
import AdminDonasi_DetailReview from "../detail_table/detail_review";
|
||||||
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
|
||||||
@@ -30,7 +30,7 @@ export default function AdminDonasi_TableReview({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<AdminDonasi_TombolKembali />
|
<ComponentAdminDonasi_TombolKembali />
|
||||||
<TableStatus listReview={listReview} />
|
<TableStatus listReview={listReview} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
Avatar,
|
Avatar,
|
||||||
Box,
|
Box,
|
||||||
Burger,
|
Burger,
|
||||||
|
Divider,
|
||||||
Drawer,
|
Drawer,
|
||||||
Footer,
|
Footer,
|
||||||
Group,
|
Group,
|
||||||
@@ -31,6 +32,8 @@ import {
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
||||||
import { Logout } from "@/app_modules/auth";
|
import { Logout } from "@/app_modules/auth";
|
||||||
|
import { useAtom } from "jotai";
|
||||||
|
import { gs_adminDonasi_hotMenu } from "../donasi/global_state";
|
||||||
|
|
||||||
export default function AdminLayout({
|
export default function AdminLayout({
|
||||||
children,
|
children,
|
||||||
@@ -40,7 +43,7 @@ export default function AdminLayout({
|
|||||||
const theme = useMantineTheme();
|
const theme = useMantineTheme();
|
||||||
const [opened, setOpened] = useState(false);
|
const [opened, setOpened] = useState(false);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [active, setActive] = useState(1);
|
const [active, setActive] = useAtom(gs_adminDonasi_hotMenu);
|
||||||
|
|
||||||
const listAdminPage = [
|
const listAdminPage = [
|
||||||
{
|
{
|
||||||
@@ -75,15 +78,24 @@ export default function AdminLayout({
|
|||||||
p="xs"
|
p="xs"
|
||||||
bg={"gray.2"}
|
bg={"gray.2"}
|
||||||
>
|
>
|
||||||
{listAdminPage.map((e) => (
|
{listAdminPage.map((e, i) => (
|
||||||
<NavLink
|
<Box key={i}>
|
||||||
key={e.id}
|
<NavLink
|
||||||
label={e.name}
|
sx={{
|
||||||
onClick={() => {
|
":hover": {
|
||||||
// setActive(e.id);
|
backgroundColor: "transparent",
|
||||||
router.push(e.route);
|
},
|
||||||
}}
|
}}
|
||||||
/>
|
fw={active === i ? "bold" : "normal"}
|
||||||
|
// key={e.id}
|
||||||
|
label={e.name}
|
||||||
|
onClick={() => {
|
||||||
|
setActive(i);
|
||||||
|
router.push(e.route);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{active === i ? <Divider size={"lg"} color="gray" /> : ""}
|
||||||
|
</Box>
|
||||||
))}
|
))}
|
||||||
</Navbar>
|
</Navbar>
|
||||||
</MediaQuery>
|
</MediaQuery>
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ import { useAtom } from "jotai";
|
|||||||
import { gs_otp, gs_nomor } from "../state/state";
|
import { gs_otp, gs_nomor } from "../state/state";
|
||||||
import { IconCircleLetterH } from "@tabler/icons-react";
|
import { IconCircleLetterH } from "@tabler/icons-react";
|
||||||
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
||||||
|
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
|
||||||
|
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -44,12 +46,12 @@ export default function Login() {
|
|||||||
router.push(RouterAdminDashboard.splash_admin);
|
router.push(RouterAdminDashboard.splash_admin);
|
||||||
} else {
|
} else {
|
||||||
if (val.status == 200) {
|
if (val.status == 200) {
|
||||||
toast("Nomor OTP terkirim");
|
|
||||||
setCode(val.body.otp);
|
setCode(val.body.otp);
|
||||||
setInputNumber(val.body.nomor);
|
setInputNumber(val.body.nomor);
|
||||||
router.push("/dev/auth/validasi");
|
router.push("/dev/auth/validasi");
|
||||||
|
return NotifBerhasil("Nomor OTP terkirim");
|
||||||
} else {
|
} else {
|
||||||
toast(val.message);
|
NotifGagal(val.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ import { ApiHipmi } from "@/app/lib/api";
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
|
import { funGetUserProfile } from "@/app_modules/fun/get_user_profile";
|
||||||
import { useFocusTrap } from "@mantine/hooks";
|
import { useFocusTrap } from "@mantine/hooks";
|
||||||
|
import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_berhasil";
|
||||||
|
import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal";
|
||||||
|
import { NotifPeringatan } from "@/app_modules/donasi/component/notifikasi/notif_peringatan";
|
||||||
|
|
||||||
export default function Validasi() {
|
export default function Validasi() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -51,12 +54,12 @@ export default function Validasi() {
|
|||||||
.then((val) => {
|
.then((val) => {
|
||||||
myConsole(val);
|
myConsole(val);
|
||||||
if (val.status == 200) {
|
if (val.status == 200) {
|
||||||
toast("Berhasil Login");
|
|
||||||
setTimeout(() => router.push("/dev/home"), 2000);
|
setTimeout(() => router.push("/dev/home"), 2000);
|
||||||
funGetUserProfile(val.data.id);
|
funGetUserProfile(val.data.id);
|
||||||
|
NotifBerhasil("Berhasil Login");
|
||||||
} else {
|
} else {
|
||||||
toast("Silahkan Registrasi");
|
router.push("/dev/auth/register");
|
||||||
return router.push("/dev/auth/register");
|
NotifPeringatan("Silahkan Registrasi");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -45,10 +45,9 @@ export default function ComponentDonasi_BoxPublish({
|
|||||||
{donasi.map((e, i) => (
|
{donasi.map((e, i) => (
|
||||||
<Box
|
<Box
|
||||||
key={i}
|
key={i}
|
||||||
onClick={
|
onClick={() => {
|
||||||
() => router.push(path + `${e.id}`)
|
router.push(path + `${e.id}`);
|
||||||
// toast("Cooming soon")
|
}}
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Grid>
|
<Grid>
|
||||||
|
|||||||
@@ -22,13 +22,19 @@ import {
|
|||||||
} from "@tabler/icons-react";
|
} from "@tabler/icons-react";
|
||||||
import TampilanRupiahDonasi from "../tampilan_rupiah";
|
import TampilanRupiahDonasi from "../tampilan_rupiah";
|
||||||
import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur";
|
import ComponentDonasi_TampilanHitungMundur from "../tampilan_hitung_mundur";
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||||
|
import { NotifPeringatan } from "../notifikasi/notif_peringatan";
|
||||||
|
import { NotifBerhasil } from "../notifikasi/notif_berhasil";
|
||||||
|
import { Donasi_findDonaturByTokenId } from "../../fun/get/get_donatur_by_token_id";
|
||||||
|
|
||||||
export function ComponentDonasi_DetailDataMain({
|
export function ComponentDonasi_DetailDataMain({
|
||||||
donasi,
|
donasi,
|
||||||
countDonatur,
|
countDonatur,
|
||||||
|
userLoginId,
|
||||||
}: {
|
}: {
|
||||||
donasi: MODEL_DONASI;
|
donasi: MODEL_DONASI;
|
||||||
countDonatur: number;
|
countDonatur: number;
|
||||||
|
userLoginId?: string | any;
|
||||||
}) {
|
}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
return (
|
return (
|
||||||
@@ -103,7 +109,7 @@ export function ComponentDonasi_DetailDataMain({
|
|||||||
<Divider orientation="vertical" />
|
<Divider orientation="vertical" />
|
||||||
<Grid.Col
|
<Grid.Col
|
||||||
span={"auto"}
|
span={"auto"}
|
||||||
onClick={() => router.push(RouterDonasi.pencairan_dana)}
|
onClick={() => onPencairanDana(router, donasi, userLoginId)}
|
||||||
>
|
>
|
||||||
<Stack spacing={"sm"} align="center">
|
<Stack spacing={"sm"} align="center">
|
||||||
<IconMoneybag color="skyblue" />
|
<IconMoneybag color="skyblue" />
|
||||||
@@ -116,3 +122,23 @@ export function ComponentDonasi_DetailDataMain({
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function onPencairanDana(
|
||||||
|
router: AppRouterInstance,
|
||||||
|
donasi: MODEL_DONASI,
|
||||||
|
userLoginId: string
|
||||||
|
) {
|
||||||
|
// console.log(userLoginId)
|
||||||
|
// console.log(donasi.authorId)
|
||||||
|
const cek = await Donasi_findDonaturByTokenId(donasi.id, userLoginId);
|
||||||
|
|
||||||
|
if(userLoginId == donasi.authorId)
|
||||||
|
return router.push(RouterDonasi.pencairan_dana + `${donasi.id}`);
|
||||||
|
|
||||||
|
if (!cek ) return NotifPeringatan("Halaman khusus donatur");
|
||||||
|
router.push(RouterDonasi.pencairan_dana + `${donasi.id}`);
|
||||||
|
|
||||||
|
// if (userLoginId != donasi.authorId)
|
||||||
|
// return NotifPeringatan("Halaman khusus donatur");
|
||||||
|
// router.push(RouterDonasi.pencairan_dana + `${donasi.id}`);
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,16 +3,18 @@
|
|||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
import { Paper, Stack, Text, Title } from "@mantine/core";
|
import { Paper, Stack, Text, Title } from "@mantine/core";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import router from "next/router";
|
|
||||||
import { MODEL_DONASI_KABAR } from "../../model/interface";
|
import { MODEL_DONASI_KABAR } from "../../model/interface";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
export default function ComponentDonasi_ListKabar({
|
export default function ComponentDonasi_ListKabar({
|
||||||
kabar,
|
kabar,
|
||||||
|
route
|
||||||
}: {
|
}: {
|
||||||
kabar: MODEL_DONASI_KABAR;
|
kabar: MODEL_DONASI_KABAR;
|
||||||
|
route: string
|
||||||
}) {
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Paper bg={"gray.1"} p={"md"}>
|
<Paper bg={"gray.1"} p={"md"}>
|
||||||
@@ -26,7 +28,7 @@ export default function ComponentDonasi_ListKabar({
|
|||||||
<Text
|
<Text
|
||||||
c={"blue"}
|
c={"blue"}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
router.push(RouterDonasi.update_kabar + `${kabar.id}`)
|
router.push(route + `${kabar.id}`)
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Buka Kabar
|
Buka Kabar
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { IconArrowLeft, 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 HeaderTamplateDonasi({
|
export default function ComponentDonasi_HeaderTamplate({
|
||||||
hideBack,
|
hideBack,
|
||||||
changeIconBack,
|
changeIconBack,
|
||||||
route,
|
route,
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ export default function ComponentDonasi_NotedBox({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Paper bg={"blue.3"} p={"sm"}>
|
<Paper bg={"blue.3"} p={10}>
|
||||||
<Group>
|
<Group>
|
||||||
<Text fz={"xs"} fs={"italic"}>
|
<Text fz={10} fs={"italic"}>
|
||||||
<Text span inherit c={"red"}>
|
<Text span inherit c={"red"}>
|
||||||
*{" "}
|
*{" "}
|
||||||
</Text>
|
</Text>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import {
|
|||||||
Image,
|
Image,
|
||||||
Paper,
|
Paper,
|
||||||
Stack,
|
Stack,
|
||||||
|
Text,
|
||||||
|
TextInput,
|
||||||
Textarea,
|
Textarea,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { IconCamera } from "@tabler/icons-react";
|
import { IconCamera } from "@tabler/icons-react";
|
||||||
@@ -38,6 +40,9 @@ export default function CreateCeritaPenggalangDonasi({
|
|||||||
const [create, setCreate] = useState({
|
const [create, setCreate] = useState({
|
||||||
pembukaan: "",
|
pembukaan: "",
|
||||||
cerita: "",
|
cerita: "",
|
||||||
|
namaBank: "",
|
||||||
|
rekening: ""
|
||||||
|
|
||||||
});
|
});
|
||||||
const [temporary, setTemporary] = useState(dataTemporary);
|
const [temporary, setTemporary] = useState(dataTemporary);
|
||||||
const [file, setFile] = useState<File | null>(null);
|
const [file, setFile] = useState<File | null>(null);
|
||||||
@@ -58,6 +63,8 @@ export default function CreateCeritaPenggalangDonasi({
|
|||||||
donasiMaster_KategoriId: temporary.donasiMaster_KategoriId,
|
donasiMaster_KategoriId: temporary.donasiMaster_KategoriId,
|
||||||
donasiMaster_DurasiId: temporary.donasiMaster_DurasiId,
|
donasiMaster_DurasiId: temporary.donasiMaster_DurasiId,
|
||||||
authorId: userId,
|
authorId: userId,
|
||||||
|
namaBank: create.namaBank,
|
||||||
|
rekening: create.rekening,
|
||||||
CeritaDonasi: {
|
CeritaDonasi: {
|
||||||
pembukaan: create.pembukaan,
|
pembukaan: create.pembukaan,
|
||||||
cerita: create.cerita,
|
cerita: create.cerita,
|
||||||
@@ -75,79 +82,118 @@ export default function CreateCeritaPenggalangDonasi({
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing={"md"} px={"md"}>
|
<Stack spacing={50} px={"md"}>
|
||||||
{/* <pre>{JSON.stringify(dataTempo, null, 2)}</pre> */}
|
{/* <pre>{JSON.stringify(dataTempo, null, 2)}</pre> */}
|
||||||
<ComponentDonasi_NotedBox informasi="Ceritakan dengan jujur & benar mengapa Penggalanagn Dana ini harus diadakan!" />
|
<Stack spacing={"sm"}>
|
||||||
<Textarea
|
<ComponentDonasi_NotedBox informasi="Ceritakan dengan jujur & benar mengapa Penggalanagn Dana ini harus diadakan!" />
|
||||||
autosize
|
|
||||||
minRows={2}
|
|
||||||
maxRows={4}
|
|
||||||
withAsterisk
|
|
||||||
label="Pembukaan"
|
|
||||||
placeholder="Pembuka dari isi cerita"
|
|
||||||
onChange={(val) =>
|
|
||||||
setCreate({
|
|
||||||
...create,
|
|
||||||
pembukaan: val.target.value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
<Stack spacing={"xs"}>
|
|
||||||
<AspectRatio ratio={16 / 9}>
|
|
||||||
<Paper radius={"md"}>
|
|
||||||
<Image
|
|
||||||
alt="Foto"
|
|
||||||
src={imageCerita ? imageCerita : "/aset/no-img.png"}
|
|
||||||
/>
|
|
||||||
</Paper>
|
|
||||||
</AspectRatio>
|
|
||||||
|
|
||||||
<Center>
|
<Textarea
|
||||||
<FileButton
|
autosize
|
||||||
onChange={async (files: any | null) => {
|
minRows={2}
|
||||||
try {
|
maxRows={4}
|
||||||
const buffer = URL.createObjectURL(
|
withAsterisk
|
||||||
new Blob([new Uint8Array(await files.arrayBuffer())])
|
label="Pembukaan"
|
||||||
);
|
placeholder="Pembuka dari isi cerita"
|
||||||
// console.log(buffer, "ini buffer");
|
onChange={(val) =>
|
||||||
// console.log(files, " ini file");
|
setCreate({
|
||||||
setImageCerita(buffer);
|
...create,
|
||||||
setFile(files);
|
pembukaan: val.target.value,
|
||||||
} catch (error) {
|
})
|
||||||
console.log(error);
|
}
|
||||||
}
|
/>
|
||||||
}}
|
|
||||||
accept="image/png,image/jpeg"
|
<Textarea
|
||||||
>
|
autosize
|
||||||
{(props) => (
|
minRows={2}
|
||||||
<Button
|
maxRows={10}
|
||||||
{...props}
|
withAsterisk
|
||||||
radius={"xl"}
|
label="Cerita"
|
||||||
variant="outline"
|
placeholder="Ceritakan alasan mengapa harus membuat Penggalangan Dana"
|
||||||
w={150}
|
onChange={(val) =>
|
||||||
leftIcon={<IconCamera />}
|
setCreate({
|
||||||
>
|
...create,
|
||||||
Upload
|
cerita: val.target.value,
|
||||||
</Button>
|
})
|
||||||
)}
|
}
|
||||||
</FileButton>
|
/>
|
||||||
</Center>
|
|
||||||
|
<Stack spacing={"xs"}>
|
||||||
|
<Center>
|
||||||
|
<FileButton
|
||||||
|
onChange={async (files: any | null) => {
|
||||||
|
try {
|
||||||
|
const buffer = URL.createObjectURL(
|
||||||
|
new Blob([new Uint8Array(await files.arrayBuffer())])
|
||||||
|
);
|
||||||
|
// console.log(buffer, "ini buffer");
|
||||||
|
// console.log(files, " ini file");
|
||||||
|
setImageCerita(buffer);
|
||||||
|
setFile(files);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
accept="image/png,image/jpeg"
|
||||||
|
>
|
||||||
|
{(props) => (
|
||||||
|
<Button
|
||||||
|
compact
|
||||||
|
{...props}
|
||||||
|
radius={"xl"}
|
||||||
|
variant="outline"
|
||||||
|
w={150}
|
||||||
|
leftIcon={<IconCamera />}
|
||||||
|
>
|
||||||
|
Upload
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</FileButton>
|
||||||
|
</Center>
|
||||||
|
|
||||||
|
{imageCerita ? (
|
||||||
|
<AspectRatio ratio={16 / 9}>
|
||||||
|
<Paper radius={"md"}>
|
||||||
|
<Image
|
||||||
|
alt="Foto"
|
||||||
|
src={imageCerita ? imageCerita : "/aset/no-img.png"}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</AspectRatio>
|
||||||
|
) : (
|
||||||
|
<Center>
|
||||||
|
<Text fs={"italic"} fz={10}>
|
||||||
|
Upload poster atau gambar penggalangan !
|
||||||
|
</Text>
|
||||||
|
</Center>
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Textarea
|
|
||||||
autosize
|
|
||||||
minRows={2}
|
|
||||||
maxRows={10}
|
|
||||||
withAsterisk
|
|
||||||
label="Cerita"
|
|
||||||
placeholder="Ceritakan alasan mengapa harus membuat Penggalangan Dana"
|
|
||||||
onChange={(val) =>
|
|
||||||
setCreate({
|
|
||||||
...create,
|
|
||||||
cerita: val.target.value,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
|
|
||||||
|
<Stack spacing={"sm"}>
|
||||||
|
<ComponentDonasi_NotedBox informasi="Lengkapi nama bank dan rekening di bawah untuk mempermudah admin jika penggalangan dana ini telah di publish!" />
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
placeholder="Contoh: BNI, BCA, MANDIRI, DLL"
|
||||||
|
label="Nama Bank"
|
||||||
|
onChange={(val) => {
|
||||||
|
setCreate({
|
||||||
|
...create,
|
||||||
|
namaBank: _.upperCase(val.target.value)
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
placeholder="Maskuan nomor rekening"
|
||||||
|
label="Nomor rekening"
|
||||||
|
onChange={(val) => {
|
||||||
|
setCreate({
|
||||||
|
...create,
|
||||||
|
rekening: val.target.value
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Stack>
|
||||||
<Button w={"100%"} radius={"xl"} onClick={() => onCreate()}>
|
<Button w={"100%"} radius={"xl"} onClick={() => onCreate()}>
|
||||||
Simpan
|
Simpan
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -91,46 +91,7 @@ export default function CreateDonasi({
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Stack>
|
|
||||||
<AspectRatio ratio={16 / 9}>
|
|
||||||
<Paper radius={"md"}>
|
|
||||||
<Image
|
|
||||||
alt="Foto"
|
|
||||||
src={imageDonasi ? imageDonasi : "/aset/no-img.png"}
|
|
||||||
/>
|
|
||||||
</Paper>
|
|
||||||
</AspectRatio>
|
|
||||||
<Center>
|
|
||||||
<FileButton
|
|
||||||
onChange={async (files: any | null) => {
|
|
||||||
try {
|
|
||||||
const buffer = URL.createObjectURL(
|
|
||||||
new Blob([new Uint8Array(await files.arrayBuffer())])
|
|
||||||
);
|
|
||||||
// console.log(buffer, "ini buffer");
|
|
||||||
// console.log(files, " ini file");
|
|
||||||
setImageDonasi(buffer);
|
|
||||||
setFile(files);
|
|
||||||
} catch (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
accept="image/png,image/jpeg"
|
|
||||||
>
|
|
||||||
{(props) => (
|
|
||||||
<Button
|
|
||||||
{...props}
|
|
||||||
radius={"xl"}
|
|
||||||
variant="outline"
|
|
||||||
w={150}
|
|
||||||
leftIcon={<IconCamera />}
|
|
||||||
>
|
|
||||||
Upload
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</FileButton>
|
|
||||||
</Center>
|
|
||||||
</Stack>
|
|
||||||
<Stack>
|
<Stack>
|
||||||
<TextInput
|
<TextInput
|
||||||
withAsterisk
|
withAsterisk
|
||||||
@@ -160,6 +121,56 @@ export default function CreateDonasi({
|
|||||||
onChange={(val: string) => setCreate({ ...create, durasiId: val })}
|
onChange={(val: string) => setCreate({ ...create, durasiId: val })}
|
||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
||||||
|
<Stack>
|
||||||
|
<Center>
|
||||||
|
<FileButton
|
||||||
|
onChange={async (files: any | null) => {
|
||||||
|
try {
|
||||||
|
const buffer = URL.createObjectURL(
|
||||||
|
new Blob([new Uint8Array(await files.arrayBuffer())])
|
||||||
|
);
|
||||||
|
// console.log(buffer, "ini buffer");
|
||||||
|
// console.log(files, " ini file");
|
||||||
|
setImageDonasi(buffer);
|
||||||
|
setFile(files);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
accept="image/png,image/jpeg"
|
||||||
|
>
|
||||||
|
{(props) => (
|
||||||
|
<Button
|
||||||
|
compact
|
||||||
|
{...props}
|
||||||
|
radius={"xl"}
|
||||||
|
variant="outline"
|
||||||
|
w={150}
|
||||||
|
leftIcon={<IconCamera />}
|
||||||
|
>
|
||||||
|
Upload
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</FileButton>
|
||||||
|
</Center>
|
||||||
|
{imageDonasi ? (
|
||||||
|
<AspectRatio ratio={16 / 9}>
|
||||||
|
<Paper radius={"md"}>
|
||||||
|
<Image
|
||||||
|
alt="Foto"
|
||||||
|
src={imageDonasi ? imageDonasi : "/aset/no-img.png"}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</AspectRatio>
|
||||||
|
) : (
|
||||||
|
<Center>
|
||||||
|
<Text fs={"italic"} fz={10}>
|
||||||
|
Upload poster atau gambar penggalangan !
|
||||||
|
</Text>
|
||||||
|
</Center>
|
||||||
|
)}
|
||||||
|
</Stack>
|
||||||
<Button my={"lg"} radius={"xl"} onClick={() => onCreate()}>
|
<Button my={"lg"} radius={"xl"} onClick={() => onCreate()}>
|
||||||
Selanjutnya
|
Selanjutnya
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
|
|||||||
import { NotifGagal } from "../../component/notifikasi/notif_gagal";
|
import { NotifGagal } from "../../component/notifikasi/notif_gagal";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
|
import { NotifPeringatan } from "../../component/notifikasi/notif_peringatan";
|
||||||
|
import ComponentDonasi_NotedBox from "../../component/noted_box";
|
||||||
|
import { Donasi_funCreateNotif } from "../../fun/create/fun_create_notif";
|
||||||
|
|
||||||
export default function Donasi_CreateKabar({ donasiId }: { donasiId: string }) {
|
export default function Donasi_CreateKabar({ donasiId }: { donasiId: string }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -33,6 +35,8 @@ export default function Donasi_CreateKabar({ donasiId }: { donasiId: string }) {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
|
<ComponentDonasi_NotedBox informasi="Gambar tidak wajib di isi ! Hanya upload jika di butuhkan." />
|
||||||
|
|
||||||
<TextInput
|
<TextInput
|
||||||
label="Judul"
|
label="Judul"
|
||||||
withAsterisk
|
withAsterisk
|
||||||
@@ -88,6 +92,7 @@ export default function Donasi_CreateKabar({ donasiId }: { donasiId: string }) {
|
|||||||
variant="outline"
|
variant="outline"
|
||||||
w={150}
|
w={150}
|
||||||
leftIcon={<IconCamera />}
|
leftIcon={<IconCamera />}
|
||||||
|
compact
|
||||||
>
|
>
|
||||||
Upload
|
Upload
|
||||||
</Button>
|
</Button>
|
||||||
@@ -125,15 +130,19 @@ async function onSave(
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (_.values(body).includes("")) return NotifPeringatan("Lengkapi Data");
|
if (_.values(body).includes("")) return NotifPeringatan("Lengkapi Data");
|
||||||
if (!file) return NotifPeringatan("Lengkapi Gambar");
|
// if (!file) return NotifPeringatan("Lengkapi Gambar");
|
||||||
|
|
||||||
const gambar = new FormData();
|
const gambar = new FormData();
|
||||||
gambar.append("file", file as any);
|
gambar.append("file", file as any);
|
||||||
|
|
||||||
await Donasi_funCreateKabar(body as any, gambar).then((res) => {
|
await Donasi_funCreateKabar(body as any, gambar).then(async (res) => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
NotifBerhasil(res.message);
|
await Donasi_funCreateNotif(body.donasiId, res.kabarId as any).then((val) => {
|
||||||
router.back()
|
if (val.status === 200) {
|
||||||
|
NotifBerhasil(res.message);
|
||||||
|
router.back();
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
NotifGagal(res.message);
|
NotifGagal(res.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
|
||||||
export default function LayoutDonasi_CreateKabar({
|
export default function LayoutDonasi_CreateKabar({
|
||||||
children,
|
children,
|
||||||
@@ -11,7 +11,7 @@ export default function LayoutDonasi_CreateKabar({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Buat Kabar" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Buat Kabar" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core"
|
import { AppShell } from "@mantine/core"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import HeaderTamplateDonasi from "../component/header_tamplate"
|
import ComponentDonasi_HeaderTamplate from "../component/header_tamplate"
|
||||||
|
|
||||||
export default function LayoutCreateDonasi({children}: {children: React.ReactNode}){
|
export default function LayoutCreateDonasi({children}: {children: React.ReactNode}){
|
||||||
return<>
|
return<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Buat Donasi"/>}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Buat Donasi"/>}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|
||||||
|
|||||||
34
src/app_modules/donasi/detail/deail_notif/index.tsx
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
|
import { AspectRatio, Box, Image, Paper, Stack, Text, Title } from "@mantine/core";
|
||||||
|
import moment from "moment";
|
||||||
|
import kabar from "../detail_main/kabar";
|
||||||
|
import { MODEL_DONASI_KABAR } from "../../model/interface";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
|
export default function Donasi_DetailNotif({dataKabar}: {dataKabar: MODEL_DONASI_KABAR}) {
|
||||||
|
const [kabar, setKabar] = useState(dataKabar)
|
||||||
|
return <>
|
||||||
|
<Stack>
|
||||||
|
<Stack>
|
||||||
|
<Text fz={"xs"}>{moment(Date.now()).format("ll")}</Text>
|
||||||
|
<Title order={5}>{kabar.title}</Title>
|
||||||
|
{kabar.imagesId === null ? (
|
||||||
|
""
|
||||||
|
) : (
|
||||||
|
<AspectRatio ratio={16 / 9}>
|
||||||
|
<Paper radius={"md"}>
|
||||||
|
<Image
|
||||||
|
alt="Foro"
|
||||||
|
src={RouterDonasi.api_gambar_kabar + `${kabar.imagesId}`}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</AspectRatio>
|
||||||
|
)}
|
||||||
|
<Text>{kabar.deskripsi}</Text>
|
||||||
|
</Stack>
|
||||||
|
</Stack>
|
||||||
|
|
||||||
|
</>;
|
||||||
|
}
|
||||||
41
src/app_modules/donasi/detail/deail_notif/layout.tsx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { AppShell, Button, Center, Footer } from "@mantine/core";
|
||||||
|
import React from "react";
|
||||||
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
|
|
||||||
|
export default function LayoutDonasi_DetailNotif({
|
||||||
|
children,
|
||||||
|
donasiId,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
donasiId: string;
|
||||||
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AppShell
|
||||||
|
header={<ComponentDonasi_HeaderTamplate title="Detail Pemberitahuan" />}
|
||||||
|
footer={
|
||||||
|
<Footer height={70} p={"md"}>
|
||||||
|
<Center h={"100%"}>
|
||||||
|
<Button
|
||||||
|
w={"100%"}
|
||||||
|
radius={"xl"}
|
||||||
|
onClick={() =>
|
||||||
|
router.push(RouterDonasi.detail_main + `${donasiId}`)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Lihat Donasi
|
||||||
|
</Button>
|
||||||
|
</Center>
|
||||||
|
</Footer>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</AppShell>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core"
|
import { AppShell } from "@mantine/core"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate"
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate"
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"
|
||||||
|
|
||||||
export default function LayoutDetailDonasiSaya({children}: {children: React.ReactNode}){
|
export default function LayoutDetailDonasiSaya({children}: {children: React.ReactNode}){
|
||||||
return<>
|
return<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Detail Donasi Saya" route={RouterDonasi.main_donasi_saya} />}
|
header={<ComponentDonasi_HeaderTamplate title="Detail Donasi Saya" route={RouterDonasi.main_donasi_saya} />}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
import {
|
import {
|
||||||
IconChevronLeft,
|
IconChevronLeft,
|
||||||
IconEdit,
|
IconEdit,
|
||||||
@@ -78,6 +78,15 @@ export default function LayoutDetailDraftDonasi({
|
|||||||
>
|
>
|
||||||
Edit Cerita
|
Edit Cerita
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
radius={"xl"}
|
||||||
|
w={"100%"}
|
||||||
|
color="orange"
|
||||||
|
onClick={() => router.push(RouterDonasi.edit_rekening + `${donasiId}`)}
|
||||||
|
>
|
||||||
|
Edit Rekening
|
||||||
|
</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Modal>
|
</Modal>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -13,38 +13,30 @@ import {
|
|||||||
Divider,
|
Divider,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
import { MODEL_DONASI_KABAR } from "../../model/interface";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function DetailKabarDonasi() {
|
export default function DetailKabarDonasi({dataDonasi}: {dataDonasi: MODEL_DONASI_KABAR}) {
|
||||||
|
const [kabar, setKabar] = useState(dataDonasi)
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Group>
|
|
||||||
<Avatar variant="filled" radius={"xl"} />
|
|
||||||
<Stack spacing={0}>
|
|
||||||
<Text>Username</Text>
|
|
||||||
<Text fz={"xs"}>{moment(Date.now()).format("ll")}</Text>
|
|
||||||
</Stack>
|
|
||||||
</Group>
|
|
||||||
<Stack>
|
<Stack>
|
||||||
<Title order={5}>Judul Berita</Title>
|
<Text fz={"xs"}>{moment(Date.now()).format("ll")}</Text>
|
||||||
|
<Title order={5}>{kabar.title}</Title>
|
||||||
|
{kabar.imagesId === null ? (
|
||||||
<Text>
|
""
|
||||||
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
|
) : (
|
||||||
nostrum vitae eum facilis similique minus exercitationem assumenda,
|
<AspectRatio ratio={16 / 9}>
|
||||||
quidem dolores illum ducimus fuga rem molestias? Numquam id
|
<Paper radius={"md"}>
|
||||||
praesentium dolor qui amet.
|
<Image
|
||||||
</Text>
|
alt="Foro"
|
||||||
|
src={RouterDonasi.api_gambar_kabar + `${kabar.imagesId}`}
|
||||||
<AspectRatio ratio={16 / 9}>
|
/>
|
||||||
<Image alt="Foro" src={"/aset/no-img.png"} />
|
</Paper>
|
||||||
</AspectRatio>
|
</AspectRatio>
|
||||||
<Text>
|
)}
|
||||||
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Aliquam
|
<Text>{kabar.deskripsi}</Text>
|
||||||
nostrum vitae eum facilis similique minus exercitationem assumenda,
|
|
||||||
quidem dolores illum ducimus fuga rem molestias? Numquam id
|
|
||||||
praesentium dolor qui amet.
|
|
||||||
</Text>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import FooterDonasi from "../../component/footer_close_donasi";
|
import FooterDonasi from "../../component/footer_close_donasi";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
|
||||||
export default function LayoutDetailKabarDonasi({
|
export default function LayoutDetailKabarDonasi({
|
||||||
children,
|
children,
|
||||||
@@ -22,7 +22,7 @@ export default function LayoutDetailKabarDonasi({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Detail Kabar" hideBack={true} />}
|
header={<ComponentDonasi_HeaderTamplate title="Detail Kabar" hideBack={true} />}
|
||||||
footer={<FooterDonasi />}
|
footer={<FooterDonasi />}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import ButtonDonasi from "@/app_modules/donasi/component/footer_button_donasi";
|
import ButtonDonasi from "@/app_modules/donasi/component/footer_button_donasi";
|
||||||
import FooterDonasi from "@/app_modules/donasi/component/footer_close_donasi";
|
import FooterDonasi from "@/app_modules/donasi/component/footer_close_donasi";
|
||||||
import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "@/app_modules/donasi/component/header_tamplate";
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ export default function LayoutCeritaPenggalangDonasi({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Cerita Penggalang Dana" />}
|
header={<ComponentDonasi_HeaderTamplate title="Cerita Penggalang Dana" />}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
@@ -28,7 +28,7 @@ export default function LayoutCeritaPenggalangDonasi({
|
|||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Cerita Penggalang Dana" />}
|
header={<ComponentDonasi_HeaderTamplate title="Cerita Penggalang Dana" />}
|
||||||
footer={<ButtonDonasi donasiId={donasiId}/>}
|
footer={<ButtonDonasi donasiId={donasiId}/>}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../../component/header_tamplate";
|
||||||
|
|
||||||
export default function LayoutDonaturDonasi({
|
export default function LayoutDonaturDonasi({
|
||||||
children,
|
children,
|
||||||
@@ -11,7 +11,7 @@ export default function LayoutDonaturDonasi({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Donatur" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Donatur" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -35,15 +35,21 @@ import ComponentDonasi_InformasiPenggalangMain from "../../component/detail_main
|
|||||||
|
|
||||||
export default function DetailMainDonasi({
|
export default function DetailMainDonasi({
|
||||||
dataDonasi,
|
dataDonasi,
|
||||||
countDonatur
|
countDonatur,
|
||||||
|
userLoginId,
|
||||||
}: {
|
}: {
|
||||||
dataDonasi: MODEL_DONASI;
|
dataDonasi: MODEL_DONASI;
|
||||||
countDonatur: number
|
countDonatur: number;
|
||||||
|
userLoginId: string;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack spacing={40}>
|
<Stack spacing={40}>
|
||||||
<ComponentDonasi_DetailDataMain donasi={dataDonasi} countDonatur={countDonatur} />
|
<ComponentDonasi_DetailDataMain
|
||||||
|
donasi={dataDonasi}
|
||||||
|
countDonatur={countDonatur}
|
||||||
|
userLoginId={userLoginId}
|
||||||
|
/>
|
||||||
<ComponentDonasi_InformasiPenggalangMain author={dataDonasi.Author} />
|
<ComponentDonasi_InformasiPenggalangMain author={dataDonasi.Author} />
|
||||||
<ComponentDonasi_CeritaPenggalangMain donasi={dataDonasi} />
|
<ComponentDonasi_CeritaPenggalangMain donasi={dataDonasi} />
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export default function KabarDonasi({
|
|||||||
>
|
>
|
||||||
{kabar.map((e, i) => (
|
{kabar.map((e, i) => (
|
||||||
<Box key={i}>
|
<Box key={i}>
|
||||||
<ComponentDonasi_ListKabar kabar={e} />
|
<ComponentDonasi_ListKabar kabar={e} route={RouterDonasi.detail_kabar} />
|
||||||
</Box>
|
</Box>
|
||||||
))}
|
))}
|
||||||
</SimpleGrid>
|
</SimpleGrid>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core"
|
import { AppShell } from "@mantine/core"
|
||||||
import React from "react"
|
import React from "react"
|
||||||
import HeaderTamplateDonasi from "../../../component/header_tamplate"
|
import ComponentDonasi_HeaderTamplate from "../../../component/header_tamplate"
|
||||||
|
|
||||||
export default function LayoutKabarDonasi({children}: {children: React.ReactNode}){
|
export default function LayoutKabarDonasi({children}: {children: React.ReactNode}){
|
||||||
return<>
|
return<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Kabar Terbaru"/>}
|
header={<ComponentDonasi_HeaderTamplate title="Kabar Terbaru"/>}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell, Box, Button, Center, Footer } from "@mantine/core";
|
import { AppShell, Box, Button, Center, Footer } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
import ButtonDonasi from "../../component/footer_button_donasi";
|
import ButtonDonasi from "../../component/footer_button_donasi";
|
||||||
|
|
||||||
export default function LayoutDetailMainDonasi({
|
export default function LayoutDetailMainDonasi({
|
||||||
@@ -15,7 +15,7 @@ export default function LayoutDetailMainDonasi({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Detail Donasi" />}
|
header={<ComponentDonasi_HeaderTamplate title="Detail Donasi" />}
|
||||||
footer={<ButtonDonasi donasiId={donasiId}/>}
|
footer={<ButtonDonasi donasiId={donasiId}/>}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box";
|
import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box";
|
||||||
|
import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah";
|
||||||
import {
|
import {
|
||||||
|
MODEL_DONASI,
|
||||||
|
MODEL_DONASI_PENCAIRAN_DANA,
|
||||||
|
} from "@/app_modules/donasi/model/interface";
|
||||||
|
import {
|
||||||
|
AspectRatio,
|
||||||
Avatar,
|
Avatar,
|
||||||
Button,
|
Button,
|
||||||
Center,
|
Center,
|
||||||
@@ -18,85 +25,103 @@ import {
|
|||||||
import { useDisclosure } from "@mantine/hooks";
|
import { useDisclosure } from "@mantine/hooks";
|
||||||
import { IconTransferIn } from "@tabler/icons-react";
|
import { IconTransferIn } from "@tabler/icons-react";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
export default function PencairanDanaDonasi() {
|
export default function PencairanDanaDonasi({
|
||||||
|
totalAkumulasi,
|
||||||
|
listPencairan,
|
||||||
|
}: {
|
||||||
|
totalAkumulasi: MODEL_DONASI;
|
||||||
|
listPencairan: MODEL_DONASI_PENCAIRAN_DANA[];
|
||||||
|
}) {
|
||||||
|
const [akumulasi, setAkumulasi] = useState(totalAkumulasi);
|
||||||
|
const [listPD, setListPD] = useState(listPencairan);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Stack>
|
<Stack>
|
||||||
<BoxDanaDicarikan />
|
<BoxDanaDicarikan akumulasi={akumulasi} />
|
||||||
<InformasiPencairanDana />
|
<InformasiPencairanDana listPD={listPD} />
|
||||||
</Stack>
|
</Stack>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function BoxDanaDicarikan() {
|
function BoxDanaDicarikan({ akumulasi }: { akumulasi: MODEL_DONASI }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Paper bg={"gray.1"} p={"md"}>
|
<Paper bg={"gray.1"} p={"md"}>
|
||||||
<Stack>
|
<Stack>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.Col span={6}>
|
<Grid.Col span={6}>
|
||||||
<Title order={5}>Rp. 10.000.000</Title>
|
<Title order={5}>
|
||||||
<Text fz={"xs"}>Dana sudah dicairkan</Text>
|
<TampilanRupiahDonasi nominal={akumulasi.totalPencairan} />
|
||||||
</Grid.Col>
|
</Title>
|
||||||
<Grid.Col span={6}>
|
<Text fz={"xs"}>Dana sudah dicairkan</Text>
|
||||||
<Title order={5}>2 kali</Title>
|
</Grid.Col>
|
||||||
<Text fz={"xs"}>Pencairan dana</Text>
|
<Grid.Col span={6}>
|
||||||
</Grid.Col>
|
<Title order={5}>{akumulasi.akumulasiPencairan} kali</Title>
|
||||||
</Grid>
|
<Text fz={"xs"}>Pencairan dana</Text>
|
||||||
<ComponentDonasi_NotedBox informasi=" Pencairan dana akan dilakukan oleh Admin HIPMI tanpa campur tangan
|
</Grid.Col>
|
||||||
|
</Grid>
|
||||||
|
<ComponentDonasi_NotedBox
|
||||||
|
informasi=" Pencairan dana akan dilakukan oleh Admin HIPMI tanpa campur tangan
|
||||||
pihak manapun, jika berita pencairan dana dibawah tidak sesuai
|
pihak manapun, jika berita pencairan dana dibawah tidak sesuai
|
||||||
dengan kabar yang diberikan oleh PENGGALANG DANA. Maka pegguna lain
|
dengan kabar yang diberikan oleh PENGGALANG DANA. Maka pegguna lain
|
||||||
dapat melaporkannya pada Admin HIPMI !"/>
|
dapat melaporkannya pada Admin HIPMI !"
|
||||||
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Paper>
|
</Paper>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function InformasiPencairanDana() {
|
function InformasiPencairanDana({
|
||||||
|
listPD,
|
||||||
|
}: {
|
||||||
|
listPD: MODEL_DONASI_PENCAIRAN_DANA[];
|
||||||
|
}) {
|
||||||
const [opened, { open, close }] = useDisclosure(false);
|
const [opened, { open, close }] = useDisclosure(false);
|
||||||
|
const [idGambar, setIdGambar] = useState("");
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Modal opened={opened} onClose={close} fullScreen>
|
<Modal opened={opened} onClose={close} size={"xl"}>
|
||||||
<Paper>
|
<AspectRatio ratio={9 / 16}>
|
||||||
<Stack>
|
<Paper>
|
||||||
|
<Image
|
||||||
|
alt="Foto"
|
||||||
|
src={RouterDonasi.api_gambar_pencairan + `${idGambar}`}
|
||||||
|
/>
|
||||||
|
</Paper>
|
||||||
|
</AspectRatio>
|
||||||
|
</Modal>
|
||||||
|
{listPD.map((e, i) => (
|
||||||
|
<Paper key={i} withBorder p={"md"}>
|
||||||
|
<Text fz={"xs"}>{moment(e.createdAt).format("ll")}</Text>
|
||||||
|
<Stack spacing={"lg"}>
|
||||||
|
<Title order={5}>{e.title}</Title>
|
||||||
|
<Spoiler
|
||||||
|
maxHeight={50}
|
||||||
|
hideLabel="Sembunyikan"
|
||||||
|
showLabel="Baca Selengkapnya"
|
||||||
|
>
|
||||||
|
{e.deskripsi}
|
||||||
|
</Spoiler>
|
||||||
<Center>
|
<Center>
|
||||||
<Title order={5}>Bukti Pencairan Dana</Title>
|
<Button
|
||||||
|
radius={"xl"}
|
||||||
|
variant="outline"
|
||||||
|
leftIcon={<IconTransferIn />}
|
||||||
|
onClick={() => {
|
||||||
|
open();
|
||||||
|
setIdGambar(e.imagesId);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Bukti Transfer
|
||||||
|
</Button>
|
||||||
</Center>
|
</Center>
|
||||||
<Image alt="Foto" src={"/aset/donasi/bukti.jpg"} />
|
|
||||||
</Stack>
|
</Stack>
|
||||||
</Paper>
|
</Paper>
|
||||||
</Modal>
|
))}
|
||||||
{Array(2)
|
|
||||||
.fill(0)
|
|
||||||
.map((e, i) => (
|
|
||||||
<Paper key={i} withBorder p={"md"}>
|
|
||||||
<Text fz={"xs"}>{moment(Date.now()).format("ll")}</Text>
|
|
||||||
<Stack spacing={"lg"}>
|
|
||||||
<Title order={5}>Pencairan Dana Sebesar Rp. 5.000.000</Title>
|
|
||||||
<Spoiler
|
|
||||||
maxHeight={50}
|
|
||||||
hideLabel="Sembunyikan"
|
|
||||||
showLabel="Baca Selengkapnya"
|
|
||||||
>
|
|
||||||
Pencairan Dana kepada pihak Penggalang dana sebesar 5 juta yang
|
|
||||||
di transfer pada, {moment(Date.now()).format("lll")}.
|
|
||||||
</Spoiler>
|
|
||||||
<Center>
|
|
||||||
<Button
|
|
||||||
radius={"xl"}
|
|
||||||
variant="outline"
|
|
||||||
leftIcon={<IconTransferIn />}
|
|
||||||
onClick={() => open()}
|
|
||||||
>
|
|
||||||
Bukti Transfer
|
|
||||||
</Button>
|
|
||||||
</Center>
|
|
||||||
</Stack>
|
|
||||||
</Paper>
|
|
||||||
))}
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "@/app_modules/donasi/component/header_tamplate";
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ export default function LayoutPencairanDanaDonasi({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Pencairan Dana" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Pencairan Dana" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "@/app_modules/donasi/component/header_tamplate";
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ export default function LayoutPenggalangDanaDonasi({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="Informasi Penggalangan Dana" />}
|
header={<ComponentDonasi_HeaderTamplate title="Informasi Penggalangan Dana" />}
|
||||||
// footer={<FooterDonasi />}
|
// footer={<FooterDonasi />}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -31,17 +31,19 @@ import ComponentDonasi_InformasiPenggalangMain from "../../component/detail_main
|
|||||||
|
|
||||||
export default function DetailPublishDonasi({
|
export default function DetailPublishDonasi({
|
||||||
dataPublish,
|
dataPublish,
|
||||||
countDonatur
|
countDonatur,
|
||||||
|
userLoginId
|
||||||
}: {
|
}: {
|
||||||
dataPublish: MODEL_DONASI;
|
dataPublish: MODEL_DONASI;
|
||||||
countDonatur: number
|
countDonatur: number,
|
||||||
|
userLoginId: string
|
||||||
}) {
|
}) {
|
||||||
const [donasi, setDonasi] = useState(dataPublish);
|
const [donasi, setDonasi] = useState(dataPublish);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* <pre>{JSON.stringify(donasi,null,2)}</pre> */}
|
{/* <pre>{JSON.stringify(donasi,null,2)}</pre> */}
|
||||||
<Stack spacing={40}>
|
<Stack spacing={40}>
|
||||||
<ComponentDonasi_DetailDataMain donasi={donasi} countDonatur={countDonatur} />
|
<ComponentDonasi_DetailDataMain donasi={donasi} countDonatur={countDonatur} userLoginId={userLoginId}/>
|
||||||
<ComponentDonasi_InformasiPenggalangMain author={donasi.Author}/>
|
<ComponentDonasi_InformasiPenggalangMain author={donasi.Author}/>
|
||||||
<ComponentDonasi_CeritaPenggalangMain donasi={donasi} />
|
<ComponentDonasi_CeritaPenggalangMain donasi={donasi} />
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ export default function LayoutDetailPublishDonasi({
|
|||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={
|
header={
|
||||||
<HeaderTamplateDonasi
|
<ComponentDonasi_HeaderTamplate
|
||||||
title="Detail Publish"
|
title="Detail Publish"
|
||||||
icon={<IconMessageShare />}
|
icon={<IconMessageShare />}
|
||||||
route2={RouterDonasi.list_kabar + `${donasiId}`}
|
route2={RouterDonasi.list_kabar + `${donasiId}`}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
|
|||||||
import { NotifGagal } from "../../component/notifikasi/notif_gagal";
|
import { NotifGagal } from "../../component/notifikasi/notif_gagal";
|
||||||
import ComponentDonasi_CeritaPenggalangMain from "../../component/detail_main/cerita_penggalang";
|
import ComponentDonasi_CeritaPenggalangMain from "../../component/detail_main/cerita_penggalang";
|
||||||
import ComponentDonasi_DetailDataGalangDana from "../../component/detail_galang_dana/detail_data_donasi";
|
import ComponentDonasi_DetailDataGalangDana from "../../component/detail_galang_dana/detail_data_donasi";
|
||||||
|
import { Donasi_funDeleteDonasiById } from "../../fun/delete/fin_delete_donasi_by_id";
|
||||||
|
|
||||||
export default function DetailRejectDonasi({
|
export default function DetailRejectDonasi({
|
||||||
dataReject,
|
dataReject,
|
||||||
@@ -92,8 +93,15 @@ function ButtonAction({ donasiId }: { donasiId: string }) {
|
|||||||
setTabsPostingDonasi("Draft");
|
setTabsPostingDonasi("Draft");
|
||||||
}
|
}
|
||||||
async function onDelete() {
|
async function onDelete() {
|
||||||
router.push(RouterDonasi.main_galang_dana);
|
await Donasi_funDeleteDonasiById(donasiId).then((res) => {
|
||||||
setTabsPostingDonasi("Reject");
|
if (res.status === 200) {
|
||||||
|
router.push(RouterDonasi.main_galang_dana);
|
||||||
|
setTabsPostingDonasi("Reject");
|
||||||
|
NotifBerhasil(res.message);
|
||||||
|
} else {
|
||||||
|
NotifGagal(res.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ export default function LayoutDetailRejectDonasi({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Detail Reject" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Detail Reject" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
import { IconEdit, IconMessageShare } from "@tabler/icons-react";
|
||||||
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi";
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ export default function LayoutDetailReviewDonasi({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Detail Review" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Detail Review" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ export default function EditCeritaPenggalangDonasi({
|
|||||||
radius={"xl"}
|
radius={"xl"}
|
||||||
onClick={() => onUpdate(router, value, file as any)}
|
onClick={() => onUpdate(router, value, file as any)}
|
||||||
>
|
>
|
||||||
Simpan
|
Update
|
||||||
</Button>
|
</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
{/* <pre> {JSON.stringify(value.pembukaan, null, 2)}</pre> */}
|
{/* <pre> {JSON.stringify(value.pembukaan, null, 2)}</pre> */}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
|
||||||
export default function LayoutEditCeritaPenggalangDonasi({
|
export default function LayoutEditCeritaPenggalangDonasi({
|
||||||
children,
|
children,
|
||||||
@@ -11,7 +11,7 @@ export default function LayoutEditCeritaPenggalangDonasi({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Update Cerita Penggalang" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Update Cerita Penggalang" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import HeaderTamplateDonasi from "../../component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
|
||||||
export default function LayoutEditDonasi({
|
export default function LayoutEditDonasi({
|
||||||
children,
|
children,
|
||||||
@@ -11,7 +11,7 @@ export default function LayoutEditDonasi({
|
|||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell header={<HeaderTamplateDonasi title="Edit Donasi" />}>
|
<AppShell header={<ComponentDonasi_HeaderTamplate title="Edit Donasi" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||
67
src/app_modules/donasi/edit/edit_rekening/index.tsx
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Button, Stack, TextInput } from "@mantine/core";
|
||||||
|
import { MODEL_DONASI } from "../../model/interface";
|
||||||
|
import { useState } from "react";
|
||||||
|
import _ from "lodash";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime";
|
||||||
|
import { Donasi_funUpdateRekening } from "../../fun/update/fun_update_rekening";
|
||||||
|
import { NotifBerhasil } from "../../component/notifikasi/notif_berhasil";
|
||||||
|
import { NotifGagal } from "../../component/notifikasi/notif_gagal";
|
||||||
|
|
||||||
|
export default function Donasi_EditRekening({
|
||||||
|
dataDonasi,
|
||||||
|
}: {
|
||||||
|
dataDonasi: MODEL_DONASI;
|
||||||
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
|
const [donasi, setDonasi] = useState(dataDonasi);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Stack spacing={"xl"}>
|
||||||
|
<Stack spacing={"sm"}>
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
label="Nama Bank"
|
||||||
|
placeholder="Masukan Nama Bank"
|
||||||
|
value={donasi.namaBank}
|
||||||
|
onChange={(val) =>
|
||||||
|
setDonasi({
|
||||||
|
...donasi,
|
||||||
|
namaBank: _.upperCase(val.target.value),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<TextInput
|
||||||
|
withAsterisk
|
||||||
|
label="Nomor Rekening"
|
||||||
|
placeholder="Masukkan Nomor Rekening"
|
||||||
|
value={donasi.rekening}
|
||||||
|
onChange={(val) =>
|
||||||
|
setDonasi({
|
||||||
|
...donasi,
|
||||||
|
rekening: val.target.value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</Stack>
|
||||||
|
<Button radius={"xl"} onClick={() => onUpdate(router, donasi)}>
|
||||||
|
Update
|
||||||
|
</Button>
|
||||||
|
</Stack>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onUpdate(router: AppRouterInstance, donasi: MODEL_DONASI) {
|
||||||
|
await Donasi_funUpdateRekening(donasi).then((res) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
router.back();
|
||||||
|
NotifBerhasil(res.message);
|
||||||
|
} else {
|
||||||
|
NotifGagal(res.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
21
src/app_modules/donasi/edit/edit_rekening/layout.tsx
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { AppShell } from "@mantine/core";
|
||||||
|
import React from "react";
|
||||||
|
import ComponentDonasi_HeaderTamplate from "../../component/header_tamplate";
|
||||||
|
|
||||||
|
export default function LayoutDonasi_EditRekening({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<AppShell
|
||||||
|
header={<ComponentDonasi_HeaderTamplate title="Edit Rekening" />}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</AppShell>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -55,7 +55,7 @@ export default function ListKabarDonasi({
|
|||||||
>
|
>
|
||||||
{kabar.map((e, i) => (
|
{kabar.map((e, i) => (
|
||||||
<Box key={i}>
|
<Box key={i}>
|
||||||
<ComponentDonasi_ListKabar kabar={e}/>
|
<ComponentDonasi_ListKabar kabar={e} route={RouterDonasi.update_kabar}/>
|
||||||
</Box>
|
</Box>
|
||||||
))}
|
))}
|
||||||
</SimpleGrid>
|
</SimpleGrid>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import HeaderTamplateDonasi from "@/app_modules/donasi/component/header_tamplate";
|
import ComponentDonasi_HeaderTamplate from "@/app_modules/donasi/component/header_tamplate";
|
||||||
import { AppShell } from "@mantine/core";
|
import { AppShell } from "@mantine/core";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ export default function LayoutListKabarDonasi({
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<AppShell
|
<AppShell
|
||||||
header={<HeaderTamplateDonasi title="List Kabar" />}>
|
header={<ComponentDonasi_HeaderTamplate title="List Kabar" />}>
|
||||||
{children}
|
{children}
|
||||||
</AppShell>
|
</AppShell>
|
||||||
</>
|
</>
|
||||||
|
|||||||