From 5b05edaf38d7036e2980b2733eaafb2abd777691 Mon Sep 17 00:00:00 2001 From: amel Date: Fri, 23 Aug 2024 18:10:11 +0800 Subject: [PATCH] upd: project dan task Deskripsi: - tambah project - perbaiki task No Issues --- .../project/update/[id]/page.tsx | 17 +--- src/app/api/project/detail/[id]/route.ts | 33 +++++++ src/app/api/task/detail/[id]/route.ts | 29 ++++++ src/module/project/lib/api_project.ts | 3 +- src/module/project/lib/type_project.ts | 2 +- .../project/ui/add_member_detail_project.tsx | 5 +- .../project/ui/edit_detail_task_project.tsx | 2 +- src/module/project/ui/edit_task_project.tsx | 4 +- .../project/ui/list_tugas_detail_project.tsx | 91 ++++++++++--------- .../project/ui/navbar_detail_project.tsx | 2 +- .../project/ui/progress_detail_project.tsx | 4 +- src/module/task/lib/api_task.ts | 3 +- src/module/task/ui/detail_list_tugas_task.tsx | 2 +- src/module/task/ui/detail_progress_task.tsx | 81 ++++++++--------- 14 files changed, 163 insertions(+), 115 deletions(-) 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/detail/[id]/route.ts b/src/app/api/project/detail/[id]/route.ts index fb9a956..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, 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/project/lib/api_project.ts b/src/module/project/lib/api_project.ts index 37dde08..4153e21 100644 --- a/src/module/project/lib/api_project.ts +++ b/src/module/project/lib/api_project.ts @@ -31,12 +31,13 @@ export const funGetAllMemberById = async (path?: string) => { } -export const funDeleteDetailProject = async (path: string) => { +export const funDeleteDetailProject = async (path: string, data: { idProject: string }) => { const response = await fetch(`/api/project/detail/${path}`, { method: "DELETE", headers: { "Content-Type": "application/json", }, + body: JSON.stringify(data), }); return await response.json().catch(() => null); } diff --git a/src/module/project/lib/type_project.ts b/src/module/project/lib/type_project.ts index 0492b5a..8eedbc8 100644 --- a/src/module/project/lib/type_project.ts +++ b/src/module/project/lib/type_project.ts @@ -8,7 +8,7 @@ export interface IDataProject { export interface IDataListTaskProject { id: string - name: string + title: string desc: string status: number dateStart: string diff --git a/src/module/project/ui/add_member_detail_project.tsx b/src/module/project/ui/add_member_detail_project.tsx index 57477ff..14389b0 100644 --- a/src/module/project/ui/add_member_detail_project.tsx +++ b/src/module/project/ui/add_member_detail_project.tsx @@ -4,7 +4,6 @@ import React, { useState } from 'react'; import { IDataMemberProject, IDataMemberProjectDetail } from '../lib/type_project'; import toast from 'react-hot-toast'; import { funAddMemberProject, funGetAllMemberById, funGetOneProjectById } from '../lib/api_project'; -import { funGetDivisionById } from '@/module/division_new'; import { useShallowEffect } from '@mantine/hooks'; import { Avatar, Box, Button, Divider, Flex, Group, Stack, Text } from '@mantine/core'; import { LayoutNavbarNew, WARNA } from '@/module/_global'; @@ -103,11 +102,9 @@ export default function AddMemberDetailProject() { -
{JSON.stringify(isData, null, 1)}
-
{JSON.stringify(isDataMember, null, 1)}
{/* - + - {item.name} + {item.title} @@ -206,51 +207,51 @@ export default function ListTugasDetailProject() { setOpenModal(false)} - description="Apakah Anda yakin ingin menghapus proyek ini?" - onYes={(val) => { - if (val) { - onDelete() - } - setOpenModal(false) + description="Apakah Anda yakin ingin menghapus proyek ini?" + onYes={(val) => { + if (val) { + onDelete() + } + setOpenModal(false) }} /> - - setOpenDrawerStatus(false)}> - - - { - valStatusDetailProject.map((item, index) => { - return ( - { onUpdateStatus(item.value) }}> - - - - {item.name} - - - - {statusData === item.value ? : ""} - - - - - ) - }) - } - - - + setOpenDrawerStatus(false)}> + + + { + valStatusDetailProject.map((item, index) => { + return ( + { onUpdateStatus(item.value) }}> + + + + {item.name} + + + + {statusData === item.value ? : ""} + + + + + ) + }) + } + + + + diff --git a/src/module/project/ui/navbar_detail_project.tsx b/src/module/project/ui/navbar_detail_project.tsx index d8fe710..9a930af 100644 --- a/src/module/project/ui/navbar_detail_project.tsx +++ b/src/module/project/ui/navbar_detail_project.tsx @@ -21,7 +21,7 @@ export default function NavbarDetailProject() { try { const res = await funGetOneProjectById(param.id, 'data'); if (res.success) { - setName(res.data.name); + setName(res.data.title); } else { toast.error(res.message); } diff --git a/src/module/project/ui/progress_detail_project.tsx b/src/module/project/ui/progress_detail_project.tsx index 20892da..90aebfd 100644 --- a/src/module/project/ui/progress_detail_project.tsx +++ b/src/module/project/ui/progress_detail_project.tsx @@ -3,7 +3,7 @@ import { WARNA } from '@/module/_global'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Grid, Progress, Text } from '@mantine/core'; import { useParams } from 'next/navigation'; -import React, { useEffect, useState } from 'react'; +import React, { useState } from 'react'; import { HiMiniPresentationChartBar } from 'react-icons/hi2'; import { globalRefreshProject } from '../lib/val_project'; import toast from 'react-hot-toast'; @@ -39,7 +39,7 @@ export default function ProgressDetailProject() { } } - useEffect(() => { + useShallowEffect(() => { onRefresh() }, [refresh.get()]) diff --git a/src/module/task/lib/api_task.ts b/src/module/task/lib/api_task.ts index 80815f3..253ff78 100644 --- a/src/module/task/lib/api_task.ts +++ b/src/module/task/lib/api_task.ts @@ -26,12 +26,13 @@ export const funGetTaskDivisionById = async (path: string, kategori: string) => } -export const funDeleteDetailTask = async (path: string) => { +export const funDeleteDetailTask = async (path: string, data: { idProject: string }) => { const response = await fetch(`/api/task/detail/${path}`, { method: "DELETE", headers: { "Content-Type": "application/json", }, + body: JSON.stringify(data), }); return await response.json().catch(() => null); }; diff --git a/src/module/task/ui/detail_list_tugas_task.tsx b/src/module/task/ui/detail_list_tugas_task.tsx index cbcc855..c18e4be 100644 --- a/src/module/task/ui/detail_list_tugas_task.tsx +++ b/src/module/task/ui/detail_list_tugas_task.tsx @@ -49,7 +49,7 @@ export default function ListTugasDetailTask() { async function onDelete() { try { - const res = await funDeleteDetailTask(idData); + const res = await funDeleteDetailTask(idData, { idProject: param.detail }); if (res.success) { toast.success(res.message); refresh.set(true) diff --git a/src/module/task/ui/detail_progress_task.tsx b/src/module/task/ui/detail_progress_task.tsx index 42656f8..f498d2b 100644 --- a/src/module/task/ui/detail_progress_task.tsx +++ b/src/module/task/ui/detail_progress_task.tsx @@ -6,7 +6,7 @@ import { useParams } from "next/navigation"; import toast from "react-hot-toast"; import { HiMiniPresentationChartBar } from "react-icons/hi2"; import { funGetTaskDivisionById } from "../lib/api_task"; -import { useEffect, useState } from "react"; +import { useState } from "react"; import { globalRefreshTask } from "../lib/val_task"; import { useHookstate } from "@hookstate/core"; @@ -44,8 +44,7 @@ export default function ProgressDetailTask() { } - - useEffect(() => { + useShallowEffect(() => { onRefresh() }, [refresh.get()]) @@ -56,44 +55,44 @@ export default function ProgressDetailTask() { return ( {loading ? - - : - - - - - - - - - - Kemajuan Proyek {valProgress}% - - - - - + + : + + + + + + + + + + Kemajuan Proyek {valProgress}% + + + + + } )