Merge pull request #117 from bipproduction/amalia/15-agustus-24

upd: task
This commit is contained in:
Amalia
2024-08-15 11:54:28 +08:00
committed by GitHub
14 changed files with 155 additions and 79 deletions

View File

@@ -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())

View File

@@ -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>
);
}

View File

@@ -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
View 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 });
}
}

View File

@@ -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: {

View File

@@ -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>
);
}

View File

@@ -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
View File

@@ -0,0 +1,5 @@
import NavbarDivisionTask from "./ui/navbar_division_task";
import TabsDivisionTask from "./ui/tabs_division_task";
export { NavbarDivisionTask }
export { TabsDivisionTask }

View 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);
}

View File

View 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>
)