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 }) }}
/>
-