diff --git a/.env b/.env index 24829e2..512b20e 100644 --- a/.env +++ b/.env @@ -4,4 +4,5 @@ # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB. # See the documentation for all the connection string options: https://pris.ly/d/connection-strings -DATABASE_URL="postgresql://bip:Production_123d@localhost:5433/sistem_desa_mandiri?schema=public" \ No newline at end of file +DATABASE_URL="postgresql://bip:Production_123d@localhost:5433/sistem_desa_mandiri?schema=public" +URL="http://localhost:3000" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cec1f07..5d719d7 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -257,7 +257,7 @@ model DivisionProject { idDivision String title String desc String @db.Text - status Int @default(0) + status Int @default(0) // 0 = pending, 1 = ongoing, 2 = done, 3 = cancelled isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt diff --git a/src/app/(application)/(fitur-division)/calender/create/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/create/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/calender/create/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/calender/create/page.tsx diff --git a/src/app/(application)/(fitur-division)/calender/history/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/history/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/calender/history/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/calender/history/page.tsx diff --git a/src/app/(application)/(fitur-division)/calender/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/calender/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/calender/page.tsx diff --git a/src/app/(application)/(fitur-division)/calender/update/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/update/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/calender/update/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/calender/update/page.tsx diff --git a/src/app/(application)/(fitur-division)/discussion/[id]/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/discussion/[id]/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/discussion/[detail]/page.tsx diff --git a/src/app/(application)/(fitur-division)/discussion/create/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/discussion/create/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/discussion/create/page.tsx diff --git a/src/app/(application)/(fitur-division)/discussion/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/discussion/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/discussion/page.tsx diff --git a/src/app/(application)/(fitur-division)/discussion/edit/[id]/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/discussion/update/[detail]/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/discussion/edit/[id]/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/discussion/update/[detail]/page.tsx diff --git a/src/app/(application)/(fitur-division)/document/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/document/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/document/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/document/page.tsx diff --git a/src/app/(application)/(fitur-division)/task/[id]/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/task/[detail]/page.tsx similarity index 87% rename from src/app/(application)/(fitur-division)/task/[id]/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/task/[detail]/page.tsx index 775b997..915f30b 100644 --- a/src/app/(application)/(fitur-division)/task/[id]/page.tsx +++ b/src/app/(application)/division/[id]/(fitur-division)/task/[detail]/page.tsx @@ -6,4 +6,4 @@ function Page() { ) } -export default Page +export default Page \ No newline at end of file diff --git a/src/app/(application)/(fitur-division)/task/create/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/task/create/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/task/create/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/task/create/page.tsx diff --git a/src/app/(application)/(fitur-division)/task/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/task/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/task/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/task/page.tsx diff --git a/src/app/(application)/(fitur-division)/task/update/[id]/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/task/update/[detail]/page.tsx similarity index 100% rename from src/app/(application)/(fitur-division)/task/update/[id]/page.tsx rename to src/app/(application)/division/[id]/(fitur-division)/task/update/[detail]/page.tsx diff --git a/src/app/(application)/division/[id]/page.tsx b/src/app/(application)/division/[id]/page.tsx index 7493c94..9ba7527 100644 --- a/src/app/(application)/division/[id]/page.tsx +++ b/src/app/(application)/division/[id]/page.tsx @@ -1,9 +1,9 @@ import { ViewDetailDivision } from '@/module/division_new'; import React from 'react'; -function Page() { +function Page({ params }: { params: { id: string } }) { return ( - + ); } diff --git a/src/module/_global/bin/api_address.ts b/src/module/_global/bin/api_address.ts index d37c800..5d0584a 100644 --- a/src/module/_global/bin/api_address.ts +++ b/src/module/_global/bin/api_address.ts @@ -38,4 +38,7 @@ export const API_ADDRESS = { // Division "apiGetAllDivision": "/api/division/get?path=get-all-division", + "apiGetOneDivision": "/api/division/get?path=get-one-division", + "apiGetOneDetailDivision": "/api/division/get?path=get-one-detail-division", + "apiCreateDivision": "/api/division/post?path=create-division", } \ No newline at end of file diff --git a/src/module/division_new/api/api_index.ts b/src/module/division_new/api/api_index.ts index d934ac5..6e5225d 100644 --- a/src/module/division_new/api/api_index.ts +++ b/src/module/division_new/api/api_index.ts @@ -1,5 +1,6 @@ import getAllDivision from "./get/getAllDivision"; import getOneDivision from "./get/getOneDivision"; +import getOneDetailDivision from "./get/getOneDetailDivision"; import createDivision from "./post/createDivision"; import deleteDivision from "./post/deleteDivision"; import updateDivision from "./post/updateDivision"; @@ -30,4 +31,9 @@ export const API_INDEX_DIVISION = [ method: "GET", bin: getOneDivision, }, + { + path: "get-one-detail-division", + method: "GET", + bin: getOneDetailDivision, + }, ]; diff --git a/src/module/division_new/api/get/getOneDetailDivision.ts b/src/module/division_new/api/get/getOneDetailDivision.ts new file mode 100644 index 0000000..af8d72a --- /dev/null +++ b/src/module/division_new/api/get/getOneDetailDivision.ts @@ -0,0 +1,87 @@ +import { prisma } from '@/module/_global'; +import { NextRequest } from "next/server"; + +export default async function getOneDetailDivision(req: NextRequest) { + try { + const searchParams = req.nextUrl.searchParams + const id = searchParams.get('divisionId'); + + console.log('aaaaa',id) + const division = await prisma.division.findUnique({ + where: { + id: String(id), + }, + select: { + id: true, + name: true, + }, + }); + + const member = await prisma.divisionMember.findMany({ + where: { + idDivision: String(id), + }, + select: { + idUser: true, + isLeader: true + } + }) + + const tugas = await prisma.divisionProject.count({ + where: { + idDivision: String(id), + status: { + lte: 1 + }, + isActive: true + } + }) + + const dokumen = await prisma.divisionDocumentFolderFile.count({ + where: { + idDivision: String(id), + isActive: true, + category: "FILE" + } + }) + + const diskusi = await prisma.divisionDisscussion.count({ + where: { + idDivision: String(id), + isActive: true, + status: 1 + } + }) + + const kalender = await prisma.divisionCalendar.count({ + where: { + idDivision: String(id), + isActive: true, + dateStart: { + lte: new Date() + } + } + }) + + const allData = { + // division: division, + division:{name:id}, + jumlah:{ + tugas: 1, + dokumen: dokumen, + diskusi: diskusi, + kalender: kalender + }, + member: member, + } + + return Response.json(allData); + } catch (error) { + console.error(error); + return Response.json( + { message: "Internal Server Error", success: false }, + { status: 500 } + ); + } + +} \ No newline at end of file diff --git a/src/module/division_new/api/post/createDivision.ts b/src/module/division_new/api/post/createDivision.ts index 6718cf0..10e57f1 100644 --- a/src/module/division_new/api/post/createDivision.ts +++ b/src/module/division_new/api/post/createDivision.ts @@ -1,26 +1,40 @@ import { prisma } from "@/module/_global"; +import { funGetUserByCookies } from "@/module/auth"; +import _ from "lodash"; +import { revalidatePath } from "next/cache"; export default async function createDivision(req: Request) { try { - const data = await req.json(); - const insert = await prisma.division.create({ + const sent = await req.json(); + const user = await funGetUserByCookies(); + + const insertDivision = await prisma.division.create({ data: { - name: data.name, - idVillage: data.idVillage, - idGroup: data.idGroup, - desc: data.desc, - createdBy: data.createdBy + name: sent.data.name, + idVillage: String(user.idVillage), + idGroup: sent.data.idGroup, + desc: sent.data.desc, + createdBy: String(user.id) }, select: { id: true } }) + const dataMember = sent.member.map((v: any) => ({ + ..._.omit(v, ["isActive", "nik", "name", "phone", "email", "gender", "group", "position"]), + idUser: v.id, + idDivision: insertDivision.id, + isAdmin: sent.admin.some((i: any) => i == v.id) + })) + const insertMember = await prisma.divisionMember.createMany({ - data: data.member + data: dataMember }) - return Response.json(insert, { status: 201 }); + revalidatePath("/division"); + + return Response.json({ success: true, message: "Sukses menambahkan data divisi" }, { status: 201 }); } catch (error) { console.error(error); diff --git a/src/module/division_new/components/create_admin_division.tsx b/src/module/division_new/components/create_admin_division.tsx index 9dbdcc7..8c2569e 100644 --- a/src/module/division_new/components/create_admin_division.tsx +++ b/src/module/division_new/components/create_admin_division.tsx @@ -3,7 +3,7 @@ import NavbarAdminDivision from './ui/navbar_admin_division'; export default function CreateAdminDivision({ data }: { data: any }) { return ( - + { }} /> ); } diff --git a/src/module/division_new/components/create_division.tsx b/src/module/division_new/components/create_division.tsx index ac2f501..28e3322 100644 --- a/src/module/division_new/components/create_division.tsx +++ b/src/module/division_new/components/create_division.tsx @@ -24,6 +24,7 @@ import { funGetUserByCookies } from "@/module/auth"; import CreateAdminDivision from "./create_admin_division"; import CreateUsers from "./create_users"; import NavbarCreateUsers from "./ui/navbar_create_users"; +import NavbarAdminDivision from "./ui/navbar_admin_division"; export default function CreateDivision() { @@ -74,12 +75,30 @@ export default function CreateDivision() { } + function onChooseGroup(val: any) { + member.set([]) + setBody({ ...body, idGroup: val }) + } + + useShallowEffect(() => { loadData(); }, []); - if (isChooseAdmin) return + if (isChooseAdmin) return { + if (val) { + member.set([]) + setBody({ + ...body, + idGroup: "", + name: "", + desc: "", + }) + } + + setChooseAdmin(false) + }} /> if (isChooseAnggota) return { setChooseAnggota(false) }} /> @@ -101,8 +120,10 @@ export default function CreateDivision() { label: pro.name }))} onChange={(val) => { - setBody({ ...body, idGroup: val }) + onChooseGroup(val) }} + + value={body.idGroup} /> ) } @@ -112,9 +133,10 @@ export default function CreateDivision() { size="md" required radius={40} + value={body.name} onChange={(val) => { setBody({ ...body, name: val.target.value }) }} /> -