Merge pull request #117 from bipproduction/amalia/15-agustus-24
upd: task
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { ViewDivisionTask } from '@/module/division_new';
|
||||
import { NavbarDivisionTask, TabsDivisionTask } from '@/module/task';
|
||||
import React from 'react';
|
||||
|
||||
function Page() {
|
||||
return (
|
||||
<ViewDivisionTask />
|
||||
<div>
|
||||
<NavbarDivisionTask />
|
||||
<TabsDivisionTask />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 });
|
||||
|
||||
|
||||
79
src/app/api/task/route.ts
Normal file
79
src/app/api/task/route.ts
Normal file
@@ -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 });
|
||||
}
|
||||
}
|
||||
@@ -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: {
|
||||
|
||||
@@ -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 (
|
||||
<div>
|
||||
<NavbarDivisionTask />
|
||||
<TabsDivisionTask />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -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 };
|
||||
|
||||
5
src/module/task/index.ts
Normal file
5
src/module/task/index.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import NavbarDivisionTask from "./ui/navbar_division_task";
|
||||
import TabsDivisionTask from "./ui/tabs_division_task";
|
||||
|
||||
export { NavbarDivisionTask }
|
||||
export { TabsDivisionTask }
|
||||
4
src/module/task/lib/api_task.ts
Normal file
4
src/module/task/lib/api_task.ts
Normal file
@@ -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);
|
||||
}
|
||||
0
src/module/task/lib/type_task.ts
Normal file
0
src/module/task/lib/type_task.ts
Normal file
@@ -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 (
|
||||
<Box p={20}>
|
||||
<Tabs variant="pills" color='#FF9861' radius="xl" defaultValue="segera">
|
||||
<Tabs variant="pills" color='#FF9861' radius="xl" defaultValue={(status == "1" || status == "2" || status == "3") ? status : "0"}>
|
||||
<Tabs.List grow bg={"white"} style={{
|
||||
border: `1px solid ${"#EDEDED"}`,
|
||||
padding: 5,
|
||||
borderRadius: 100
|
||||
}}>
|
||||
<Tabs.Tab value="segera" w={"23%"} leftSection={<TbClockPause style={iconStyle} />}>
|
||||
<Tabs.Tab value="0" w={"23%"} leftSection={<TbClockPause style={iconStyle} />}>
|
||||
Segera
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="dikerjakan" w={"28%"} leftSection={<RiProgress3Line style={iconStyle} />}>
|
||||
<Tabs.Tab value="1" w={"28%"} leftSection={<RiProgress3Line style={iconStyle} />}>
|
||||
Dikerjakan
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="selesai" w={"23%"} leftSection={<IoIosCheckmarkCircleOutline style={iconStyle} />}>
|
||||
<Tabs.Tab value="2" w={"23%"} leftSection={<IoIosCheckmarkCircleOutline style={iconStyle} />}>
|
||||
Selesai
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab value="batal" w={"20%"} leftSection={<IoCloseCircleOutline style={iconStyle} />}>
|
||||
<Tabs.Tab value="3" w={"20%"} leftSection={<IoCloseCircleOutline style={iconStyle} />}>
|
||||
Batal
|
||||
</Tabs.Tab>
|
||||
</Tabs.List>
|
||||
|
||||
<Tabs.Panel value="segera">
|
||||
<ListDivisionTask status="segera" />
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="dikerjakan">
|
||||
<ListDivisionTask status="dikerjakan" />
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="selesai">
|
||||
<ListDivisionTask status="selesai" />
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="batal">
|
||||
<ListDivisionTask status="batal" />
|
||||
</Tabs.Panel>
|
||||
<ListDivisionTask status="segera" />
|
||||
</Tabs>
|
||||
</Box>
|
||||
)
|
||||
Reference in New Issue
Block a user