diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 5d719d7..f350e28 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -252,54 +252,63 @@ model DivisionMember {
}
model DivisionProject {
- id String @id @default(cuid())
- Division Division @relation(fields: [idDivision], references: [id])
- idDivision String
- title String
- desc String @db.Text
- status Int @default(0) // 0 = pending, 1 = ongoing, 2 = done, 3 = cancelled
- isActive Boolean @default(true)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ id String @id @default(cuid())
+ Division Division @relation(fields: [idDivision], references: [id])
+ idDivision String
+ title String
+ desc String @db.Text
+ status Int @default(0) // 0 = pending, 1 = ongoing, 2 = done, 3 = cancelled
+ isActive Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ DivisionProjectTask DivisionProjectTask[]
+ DivisionProjectMember DivisionProjectMember[]
+ DivisionProjectFile DivisionProjectFile[]
}
model DivisionProjectTask {
- id String @id @default(cuid())
- Division Division @relation(fields: [idDivision], references: [id])
- idDivision String
- title String
- desc String @db.Text
- status Int @default(0)
- dateStart DateTime @db.Date
- dateEnd DateTime @db.Date
- isActive Boolean @default(true)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ id String @id @default(cuid())
+ Division Division @relation(fields: [idDivision], references: [id])
+ idDivision String
+ DivisionProject DivisionProject @relation(fields: [idProject], references: [id])
+ idProject String
+ title String
+ desc String @db.Text
+ status Int @default(0) // 0 = todo, 1 = done
+ dateStart DateTime @db.Date
+ dateEnd DateTime @db.Date
+ isActive Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}
model DivisionProjectMember {
- id String @id @default(cuid())
- Division Division @relation(fields: [idDivision], references: [id])
- idDivision String
- User User @relation(fields: [idUser], references: [id])
- idUser String
- isLeader Boolean @default(false)
- isActive Boolean @default(true)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ id String @id @default(cuid())
+ Division Division @relation(fields: [idDivision], references: [id])
+ idDivision String
+ DivisionProject DivisionProject @relation(fields: [idProject], references: [id])
+ idProject String
+ User User @relation(fields: [idUser], references: [id])
+ idUser String
+ isLeader Boolean @default(false)
+ isActive Boolean @default(true)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}
model DivisionProjectFile {
- id String @id @default(cuid())
- Division Division @relation(fields: [idDivision], references: [id])
- idDivision String
- name String
- extension String
- isActive Boolean @default(true)
- User User @relation(fields: [createdBy], references: [id])
- createdBy String
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ id String @id @default(cuid())
+ Division Division @relation(fields: [idDivision], references: [id])
+ idDivision String
+ DivisionProject DivisionProject @relation(fields: [idProject], references: [id])
+ idProject String
+ name String
+ extension String
+ isActive Boolean @default(true)
+ User User @relation(fields: [createdBy], references: [id])
+ createdBy String
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}
model DivisionDisscussion {
@@ -364,6 +373,8 @@ model DivisionCalendar {
desc String @db.Text
dateStart DateTime @db.Date
dateEnd DateTime @db.Date
+ timeStart DateTime @db.Time()
+ timeEnd DateTime @db.Time()
repeatEventTyper String
reminderInterval String
status Int @default(0)
@@ -382,6 +393,8 @@ model DivisionCalendarReminder {
idCalendar String
dateStart DateTime @db.Date
dateEnd DateTime @db.Date
+ timeStart DateTime @db.Time()
+ timeEnd DateTime @db.Time()
status Int @default(0)
isActive Boolean @default(true)
createdAt DateTime @default(now())
diff --git a/src/app/(application)/division/[id]/(fitur-division)/task/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/task/page.tsx
index f37ddba..45b8f15 100644
--- a/src/app/(application)/division/[id]/(fitur-division)/task/page.tsx
+++ b/src/app/(application)/division/[id]/(fitur-division)/task/page.tsx
@@ -1,9 +1,12 @@
-import { ViewDivisionTask } from '@/module/division_new';
+import { NavbarDivisionTask, TabsDivisionTask } from '@/module/task';
import React from 'react';
function Page() {
return (
-
+
+
+
+
);
}
diff --git a/src/app/api/division/route.ts b/src/app/api/division/route.ts
index e3a68b1..58f107f 100644
--- a/src/app/api/division/route.ts
+++ b/src/app/api/division/route.ts
@@ -55,7 +55,6 @@ export async function GET(request: Request) {
jumlah_member: v.DivisionMember.length
}))
- console.log(allData)
return NextResponse.json({ success: true, message: "Berhasil mendapatkan divisi", data: allData, }, { status: 200 });
diff --git a/src/app/api/task/route.ts b/src/app/api/task/route.ts
new file mode 100644
index 0000000..9b053bd
--- /dev/null
+++ b/src/app/api/task/route.ts
@@ -0,0 +1,79 @@
+import { prisma } from "@/module/_global";
+import { funGetUserByCookies } from "@/module/auth";
+import _, { ceil } from "lodash";
+import { NextResponse } from "next/server";
+
+// GET ALL DATA TUGAS DIVISI
+export async function GET(request: Request) {
+ try {
+ const user = await funGetUserByCookies()
+ if (user.id == undefined) {
+ return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 });
+ }
+
+ const { searchParams } = new URL(request.url);
+ const name = searchParams.get('search');
+ const divisi = searchParams.get('division');
+ const status = searchParams.get('status');
+
+ const cek = await prisma.division.count({
+ where: {
+ isActive: true,
+ id: String(divisi)
+ }
+ })
+
+ if (cek == 0) {
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, data tidak ditemukan", }, { status: 404 });
+ }
+
+ const data = await prisma.divisionProject.findMany({
+ where: {
+ isActive: true,
+ idDivision: String(divisi),
+ status: (status == "0" || status == "1" || status == "2" || status == "3") ? Number(status) : 0,
+ title: {
+ contains: (name == undefined || name == "null") ? "" : name,
+ mode: "insensitive"
+ }
+ },
+ select: {
+ id: true,
+ title: true,
+ desc: true,
+ status: true,
+ DivisionProjectTask: {
+ where: {
+ isActive: true
+ },
+ select: {
+ title: true
+ }
+ },
+ DivisionProjectMember: {
+ where: {
+ isActive: true
+ },
+ select: {
+ idUser: true
+ }
+ }
+ }
+ });
+
+ const formatData = data.map((v: any) => ({
+ ..._.omit(v, ["DivisionProjectTask", "DivisionProjectMember"]),
+ progress: ceil(v.DivisionProjectTask.filter((i: any) => i.status === 1).length / v.DivisionProjectTask.length),
+ member: v.DivisionProjectMember.length
+ }))
+
+ console.log('amalia', formatData)
+
+
+ return NextResponse.json({ success: true, message: "Berhasil mendapatkan divisi", data, }, { status: 200 });
+
+ } catch (error) {
+ console.log(error);
+ return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/src/module/discussion/lib/api_discussion.ts b/src/module/discussion/lib/api_discussion.ts
index ca9619c..bffbd08 100644
--- a/src/module/discussion/lib/api_discussion.ts
+++ b/src/module/discussion/lib/api_discussion.ts
@@ -26,7 +26,6 @@ export const funGetDiscussionById = async (path: string) => {
}
export const funEditStatusDiscussion = async (path: string, data: IStatusDiscussion) => {
- console.log('masuk sini')
const response = await fetch(`/api/discussion/${path}`, {
method: "DELETE",
headers: {
diff --git a/src/module/division_new/_division_fitur/task/view/view_division_task.tsx b/src/module/division_new/_division_fitur/task/view/view_division_task.tsx
deleted file mode 100644
index 436ffbe..0000000
--- a/src/module/division_new/_division_fitur/task/view/view_division_task.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-'use client'
-import NavbarDivisionTask from "../component/navbar_division_task";
-import TabsDivisionTask from "../component/tabs_division_task";
-
-export default function ViewDivisionTask() {
-
-
- return (
-
-
-
-
- );
-}
\ No newline at end of file
diff --git a/src/module/division_new/index.ts b/src/module/division_new/index.ts
index 06016c7..341aabf 100644
--- a/src/module/division_new/index.ts
+++ b/src/module/division_new/index.ts
@@ -11,7 +11,6 @@ import ViewUpdateDivisionCalender from "./_division_fitur/calender/view/view_upd
import ViewDocumentDivision from "./_division_fitur/document/view/view_document_division";
import ViewCreateTaskDivision from "./_division_fitur/task/view/view_create_division_task";
import ViewDetailDivisionTask from "./_division_fitur/task/view/view_detail_division_task";
-import ViewDivisionTask from "./_division_fitur/task/view/view_division_task";
import ViewUpdateProgressDivisionTask from "./_division_fitur/task/view/view_update_progress_division_task";
import CreateAdminDivision from "./ui/create_admin_division";
import CreateUsers from "./ui/create_users";
@@ -31,7 +30,6 @@ import ReportDivisionId from './ui/report_division_id';
export { CreateUsers };
export { CreateAdminDivision };
-export { ViewDivisionTask };
export { ViewDetailDivisionTask };
export { ViewUpdateProgressDivisionTask };
export { ViewDivisionCalender };
diff --git a/src/module/task/index.ts b/src/module/task/index.ts
new file mode 100644
index 0000000..31eceb8
--- /dev/null
+++ b/src/module/task/index.ts
@@ -0,0 +1,5 @@
+import NavbarDivisionTask from "./ui/navbar_division_task";
+import TabsDivisionTask from "./ui/tabs_division_task";
+
+export { NavbarDivisionTask }
+export { TabsDivisionTask }
\ No newline at end of file
diff --git a/src/module/task/lib/api_task.ts b/src/module/task/lib/api_task.ts
new file mode 100644
index 0000000..59e21ca
--- /dev/null
+++ b/src/module/task/lib/api_task.ts
@@ -0,0 +1,4 @@
+export const funGetAllTask = async (path?: string) => {
+ const response = await fetch(`/api/task${(path) ? path : ''}`, { next: { tags: ['task'] } });
+ return await response.json().catch(() => null);
+}
\ No newline at end of file
diff --git a/src/module/task/lib/type_task.ts b/src/module/task/lib/type_task.ts
new file mode 100644
index 0000000..e69de29
diff --git a/src/module/division_new/_division_fitur/task/component/drawer_division_task.tsx b/src/module/task/ui/drawer_division_task.tsx
similarity index 100%
rename from src/module/division_new/_division_fitur/task/component/drawer_division_task.tsx
rename to src/module/task/ui/drawer_division_task.tsx
diff --git a/src/module/division_new/_division_fitur/task/component/list_division_task.tsx b/src/module/task/ui/list_division_task.tsx
similarity index 100%
rename from src/module/division_new/_division_fitur/task/component/list_division_task.tsx
rename to src/module/task/ui/list_division_task.tsx
diff --git a/src/module/division_new/_division_fitur/task/component/navbar_division_task.tsx b/src/module/task/ui/navbar_division_task.tsx
similarity index 100%
rename from src/module/division_new/_division_fitur/task/component/navbar_division_task.tsx
rename to src/module/task/ui/navbar_division_task.tsx
diff --git a/src/module/division_new/_division_fitur/task/component/tabs_division_task.tsx b/src/module/task/ui/tabs_division_task.tsx
similarity index 51%
rename from src/module/division_new/_division_fitur/task/component/tabs_division_task.tsx
rename to src/module/task/ui/tabs_division_task.tsx
index 30d18cb..de627df 100644
--- a/src/module/division_new/_division_fitur/task/component/tabs_division_task.tsx
+++ b/src/module/task/ui/tabs_division_task.tsx
@@ -5,47 +5,37 @@ import { IoCloseCircleOutline } from "react-icons/io5";
import { RiProgress3Line } from "react-icons/ri";
import { TbClockPause } from "react-icons/tb";
import ListDivisionTask from "./list_division_task";
+import { useParams, useSearchParams } from "next/navigation";
export default function TabsDivisionTask() {
const iconStyle = { width: rem(20), height: rem(20) };
+ const param = useParams<{ id: string }>()
+ const searchParams = useSearchParams()
+ const status = searchParams.get('status')
return (
-
+
- }>
+ }>
Segera
- }>
+ }>
Dikerjakan
- }>
+ }>
Selesai
- }>
+ }>
Batal
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
)