diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0748a9d..ef686fc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -166,7 +166,7 @@ model Project { idVillage String Group Group @relation(fields: [idGroup], references: [id]) idGroup String - name String + title String status Int @default(0) // 0 = pending, 1 = ongoing, 2 = done, 3 = cancelled desc String? @db.Text reason String? @db.Text @@ -208,9 +208,9 @@ model ProjectTask { id String @id @default(cuid()) Project Project @relation(fields: [idProject], references: [id]) idProject String - name String + title String desc String? - status Int @default(0) // 0 = pending, 1 = ongoing + status Int @default(0) // 0 = todo, 1 = done dateStart DateTime @db.Date dateEnd DateTime @db.Date isActive Boolean @default(true) diff --git a/src/app/(application)/division/[id]/(fitur-division)/calender/update/[detail]/page.tsx b/src/app/(application)/division/[id]/(fitur-division)/calender/update/[detail]/page.tsx index 2c6b1dc..60b4434 100644 --- a/src/app/(application)/division/[id]/(fitur-division)/calender/update/[detail]/page.tsx +++ b/src/app/(application)/division/[id]/(fitur-division)/calender/update/[detail]/page.tsx @@ -2,10 +2,6 @@ import { UpdateDivisionCalender } from '@/module/calender'; import React from 'react'; function Page({ searchParams }: { searchParams: any }) { - // if (searchParams.page == "update-ulangi-event") - // return - // if (searchParams.page == "update-user-calender") - // return return ( ); diff --git a/src/app/(application)/project/create/page.tsx b/src/app/(application)/project/create/page.tsx index 41b26fa..3aac089 100644 --- a/src/app/(application)/project/create/page.tsx +++ b/src/app/(application)/project/create/page.tsx @@ -1,15 +1,12 @@ -import { CreateUsersProject, ViewCreateProject, ViewDateEndTask, ViewFileSave } from "@/module/project"; +import { CreateProject, ViewFileSave } from "@/module/project"; import React from "react"; function Page({ searchParams }: { searchParams: any }) { - if (searchParams.page == "task") - return ; - if (searchParams.page == "create-users") - return + if (searchParams.page == "file-save") return - return ; + return ; } export default Page; diff --git a/src/app/(application)/project/update/[id]/page.tsx b/src/app/(application)/project/update/[id]/page.tsx index fb689ee..f49558a 100644 --- a/src/app/(application)/project/update/[id]/page.tsx +++ b/src/app/(application)/project/update/[id]/page.tsx @@ -1,21 +1,8 @@ -import { - DetailCreateUserProject, - DetailDateEndTask, - EditDetailTaskProject, - FileUploadProgres, - ViewUpdateProgres, -} from "@/module/project"; +import { EditDetailTaskProject } from "@/module/project"; import React from "react"; -function Page({ searchParams }: { searchParams: any }) { - // if (searchParams.page == "upload-progres") return ; - // if (searchParams.page == "detail-create-user") - // return ; - // if (searchParams.page == "detail-date-task") return ; - - // return ; - +function Page() { return ( ) diff --git a/src/app/api/project/[id]/route.ts b/src/app/api/project/[id]/route.ts index 589c3e0..f08b29f 100644 --- a/src/app/api/project/[id]/route.ts +++ b/src/app/api/project/[id]/route.ts @@ -59,7 +59,7 @@ export async function GET(request: Request, context: { params: { id: string } }) }, select: { id: true, - name: true, + title: true, desc: true, status: true, dateStart: true, @@ -159,7 +159,7 @@ export async function POST(request: Request, context: { params: { id: string } } const dataCreate = await prisma.projectTask.create({ data: { - name, + title: name, idProject: id, dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')), dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')), @@ -249,7 +249,7 @@ export async function PUT(request: Request, context: { params: { id: string } }) id }, data: { - name + title: name } }) diff --git a/src/app/api/project/detail/[id]/route.ts b/src/app/api/project/detail/[id]/route.ts index 8ca266e..5a16292 100644 --- a/src/app/api/project/detail/[id]/route.ts +++ b/src/app/api/project/detail/[id]/route.ts @@ -12,6 +12,8 @@ export async function DELETE(request: Request, context: { params: { id: string } return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } const { id } = context.params; + const { idProject } = (await request.json()); + const data = await prisma.projectTask.count({ where: { id: id, @@ -37,6 +39,35 @@ export async function DELETE(request: Request, context: { params: { id: string } }, }); + const dataTask = await prisma.projectTask.findMany({ + where: { + isActive: true, + idProject: idProject, + } + }) + + const semua = dataTask.length + const selesai = dataTask.filter((item) => item.status == 1).length + const prosess = Math.ceil((selesai / semua) * 100) + let statusProject = 1 + + if (prosess == 100) { + statusProject = 2 + } else if (prosess == 0) { + statusProject = 0 + } + + + const updProject = await prisma.project.update({ + where: { + id: idProject + }, + data: { + status: statusProject + } + }) + + return NextResponse.json( { success: true, @@ -87,6 +118,8 @@ export async function PUT(request: Request, context: { params: { id: string } }) } }) + + // const cek progress const dataTask = await prisma.projectTask.findMany({ where: { isActive: true, @@ -174,7 +207,7 @@ export async function POST(request: Request, context: { params: { id: string } } id }, data: { - name: name, + title: name, dateStart: new Date(moment(dateStart).format('YYYY-MM-DD')), dateEnd: new Date(moment(dateEnd).format('YYYY-MM-DD')), } diff --git a/src/app/api/project/route.ts b/src/app/api/project/route.ts index 7464663..994d373 100644 --- a/src/app/api/project/route.ts +++ b/src/app/api/project/route.ts @@ -29,7 +29,7 @@ export async function GET(request: Request) { idVillage: String(villageId), idGroup: String(groupId), createdBy: String(userId), - name: { + title: { contains: (name == undefined || name == "null") ? "" : name, mode: "insensitive" }, @@ -37,7 +37,7 @@ export async function GET(request: Request) { }, select: { id: true, - name: true, + title: true, desc: true, status: true, ProjectMember: { @@ -73,16 +73,15 @@ export async function POST(request: Request) { return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } - const { idVillage, idGroup, name, task, member, file } = (await request.json()) + const { idGroup, title, task, member, file } = (await request.json()) const userId = user.id - + const data = await prisma.project.create({ data: { - idVillage: String(idVillage), + idVillage: String(user.idVillage), idGroup: String(idGroup), - name: name, - desc: "", + title, createdBy: String(userId) }, select: { @@ -94,7 +93,7 @@ export async function POST(request: Request) { const dataProject = task.map((v: any) => ({ ..._.omit(v, ["dateStart", "dateEnd", "name"]), idProject: data.id, - name: v.name, + title: v.title, dateStart: new Date(moment(v.dateStart).format('YYYY-MM-DD')), dateEnd: new Date(moment(v.dateEnd).format('YYYY-MM-DD')), })) @@ -109,7 +108,6 @@ export async function POST(request: Request) { ..._.omit(v, ["idUser", "name"]), idProject: data.id, idUser: v.idUser, - name: v.name })) const insertMember = await prisma.projectMember.createMany({ @@ -121,31 +119,31 @@ export async function POST(request: Request) { if (file.length > 0) { file.map((v: any, index: any) => { - const f: any = file[index].get('file') - const fName = f.name - const fExt = fName.split(".").pop() - // funUploadFile(fName, f) - - const dataFile = { - name: fName, - extension: fExt, - idProject: data.id, - } - - fileFix.push(dataFile) + const f: any = file[index].get('file') + const fName = f.name + const fExt = fName.split(".").pop() + // funUploadFile(fName, f) + + const dataFile = { + name: fName, + extension: fExt, + idProject: data.id, + } + + fileFix.push(dataFile) }) - + const insertFile = await prisma.divisionProjectFile.createMany({ - data: fileFix + data: fileFix }) - - } + + } - return NextResponse.json({ success: true, message: "Berhasil mendapatkan divisi", data: data, }, { status: 200 }); + return NextResponse.json({ success: true, message: "Berhasil membuat proyek", data: data, }, { status: 200 }); } catch (error) { console.error(error); - return NextResponse.json({ success: false, message: "Gagal mendapatkan divisi, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); + return NextResponse.json({ success: false, message: "Gagal membuat proyek, coba lagi nanti", reason: (error as Error).message, }, { status: 500 }); } } \ No newline at end of file diff --git a/src/app/api/task/detail/[id]/route.ts b/src/app/api/task/detail/[id]/route.ts index e298d29..1a47807 100644 --- a/src/app/api/task/detail/[id]/route.ts +++ b/src/app/api/task/detail/[id]/route.ts @@ -13,6 +13,7 @@ export async function DELETE(request: Request, context: { params: { id: string } return NextResponse.json({ success: false, message: "Anda harus login untuk mengakses ini" }, { status: 401 }); } const { id } = context.params; + const { idProject } = (await request.json()); const data = await prisma.divisionProjectTask.count({ where: { id: id, @@ -38,6 +39,34 @@ export async function DELETE(request: Request, context: { params: { id: string } }, }); + // const cek progress + const dataTask = await prisma.divisionProjectTask.findMany({ + where: { + isActive: true, + idProject: idProject + } + }) + + const semua = dataTask.length + const selesai = _.filter(dataTask, { status: 1 }).length + const progress = Math.ceil((selesai / semua) * 100) + let statusProject = 1 + + if (progress == 100) { + statusProject = 2 + } else if (progress == 0) { + statusProject = 0 + } + + const updProject = await prisma.divisionProject.update({ + where: { + id: idProject + }, + data: { + status: statusProject + } + }) + return NextResponse.json( { success: true, diff --git a/src/module/division_new/_division_fitur/calender/components/update_calander/update_division_calender.tsx b/src/module/division_new/_division_fitur/calender/components/update_calander/update_division_calender.tsx deleted file mode 100644 index f8f4797..0000000 --- a/src/module/division_new/_division_fitur/calender/components/update_calander/update_division_calender.tsx +++ /dev/null @@ -1,139 +0,0 @@ -"use client" -import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Box, Button, Group, Input, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; -import { DateInput, TimeInput } from '@mantine/dates'; -import React, { useState } from 'react'; -import { IoIosArrowDropright } from 'react-icons/io'; -import { useRouter } from 'next/navigation'; -import LayoutModal from '@/module/_global/layout/layout_modal'; -import toast from 'react-hot-toast'; - -export default function UpdateDivisionCalender() { - const [isModal, setModal] = useState(false) - - function onTrue(val: boolean) { - if (val) { - toast.success("Sukses! Data tersimpan"); - } - setModal(false) - } - const [value, setValue] = useState(null); - const router = useRouter() - return ( - - - - - - - - - - - - router.push('/calender/update?page=update-ulangi-event')}> - - Ulangi Event - - - - router.push('/calender/update?page=update-user-calender')}> - - Tambah Anggota - - - -