fix(FE-279): adjust closing project flock kandang

This commit is contained in:
randy-ar
2025-12-09 10:33:38 +07:00
parent b97cc39854
commit 8a0adf847e
10 changed files with 398 additions and 190 deletions
@@ -11,12 +11,12 @@ import { useState } from 'react';
import ApprovalSteps, {
useApprovalSteps,
} from '@/components/pages/ApprovalSteps';
import { PROJECT_FLOCK_KANDANG_APPROVAL_LINE } from '@/config/approval-line';
import ChickinFormView from '@/components/pages/production/chickin/form/tabs/ChickinFormView';
import ChickinLogsView from '@/components/pages/production/chickin/form/tabs/ChickLogsView';
import DrawerHeader from '@/components/helper/drawer/DrawerHeader';
import { Icon } from '@iconify/react';
import Badge from '@/components/Badge';
import { CHICKINS_APPROVAL_LINE } from '@/config/approval-line';
const ChickinFormKandang = ({
formType = 'add',
initialValues,
@@ -34,8 +34,8 @@ const ChickinFormKandang = ({
refresh: refreshApprovals,
} = useApprovalSteps({
latestApproval: initialValues?.approval,
approvalLines: PROJECT_FLOCK_KANDANG_APPROVAL_LINE,
moduleName: 'PROJECT_FLOCK_KANDANGS',
approvalLines: CHICKINS_APPROVAL_LINE,
moduleName: 'CHICKINS',
moduleId: initialValues?.id.toString() ?? '',
});
@@ -145,7 +145,7 @@ const ChickinLogsView = ({
})
)}
{initialValues?.approval?.step_number == 1 && (
{initialValues?.approval?.step_number >= 1 && (
<Button
color='success'
onClick={handleClickApprove}
@@ -43,7 +43,7 @@ const ProjectFlockClosingForm = ({
const deleteProjectFlockRes = await ProjectFlockKandangApi.closing(
projectFlock?.id as number,
{
closed_date: formatDate(new Date(), 'yyyy-MM-dd'),
closed_date: formatDate(new Date(), 'YYYY-MM-DD'),
action: isCanClose ? 'close' : 'unclose',
}
);
@@ -212,7 +212,7 @@ const ProjectFlockClosingForm = ({
}}
/>
{errorExpense && (
<div className='text-center text-error'>
<div className='text-center text-error text-sm'>
*Pastikan semua biaya sudah selesai sebelum melakukan closing.
</div>
)}
@@ -260,7 +260,7 @@ const ProjectFlockClosingForm = ({
}}
/>
{errorStock && (
<div className='text-center text-error'>
<div className='text-center text-error text-sm'>
*Masih ada sisa stock yang belum dihabiskan.
</div>
)}
@@ -23,7 +23,12 @@ import toast from 'react-hot-toast';
import ApprovalSteps, {
useApprovalSteps,
} from '@/components/pages/ApprovalSteps';
import { PROJECT_FLOCK_APPROVAL_LINE } from '@/config/approval-line';
import {
PROJECT_FLOCK_APPROVAL_LINE,
PROJECT_FLOCK_KANDANGS_APPROVAL_LINE,
} from '@/config/approval-line';
import useSWR from 'swr';
import { ProjectFlockKandangApi } from '@/services/api/production';
const ProjectFlockDetail = ({
projectFlock,
@@ -38,10 +43,20 @@ const ProjectFlockDetail = ({
null
);
const selectedKandang = projectFlock.kandangs.find(
const selectedKandang = projectFlock.kandangs?.find(
(kandang) => kandang.id === Number(selectedKandangId)
);
const { data: projectFlockKandang, isLoading: projectFlockKandangLoading } =
useSWR(
selectedKandangId
? `${ProjectFlockKandangApi.basePath}/get-detail/${selectedKandangId}`
: null,
selectedKandangId
? () => ProjectFlockKandangApi.getSingle(parseInt(selectedKandangId))
: null
);
const {
approvals,
isLoading: approvalsLoading,
@@ -53,6 +68,17 @@ const ProjectFlockDetail = ({
moduleId: projectFlock?.id.toString() ?? '',
});
const { approvals: kandangApprovals, isLoading: kandangApprovalsLoading } =
useApprovalSteps({
latestApproval:
selectedKandangId && isResponseSuccess(projectFlockKandang)
? projectFlockKandang?.data?.approval
: undefined,
approvalLines: PROJECT_FLOCK_KANDANGS_APPROVAL_LINE,
moduleName: 'PROJECT_FLOCK_KANDANGS',
moduleId: selectedKandangId ?? '',
});
const confirmationModalDeleteClickHandler = async () => {
setIsDeleteLoading(true);
const deleteProjectFlockRes = await ProjectFlockApi.delete(
@@ -151,7 +177,7 @@ const ProjectFlockDetail = ({
className={{ badge: 'rounded-lg px-2' }}
>
<Icon icon='mdi:bookmark' width={12} height={12} />
{` ${formatTitleCase(projectFlock.category)}`}
{` ${formatTitleCase(projectFlock.category ?? '')}`}
</Badge>
</div>
{/* Information Grid */}
@@ -194,7 +220,7 @@ const ProjectFlockDetail = ({
>
<Icon width={14} height={14} icon='mdi:circle-slice-8' /> Area
</div>
<div className='col-span-2'>{projectFlock.area.name}</div>
<div className='col-span-2'>{projectFlock.area?.name}</div>
{/* BARIS 2 */}
<div
@@ -204,7 +230,7 @@ const ProjectFlockDetail = ({
>
<Icon width={14} height={14} icon='mdi:circle-slice-8' /> Lokasi
</div>
<div className='col-span-2'>{projectFlock.location.name}</div>
<div className='col-span-2'>{projectFlock.location?.name}</div>
<div
className='col-span-1 flex flex-row items-center text-gray-400 font-semibold gap-2
@@ -213,7 +239,7 @@ const ProjectFlockDetail = ({
>
<Icon width={14} height={14} icon='mdi:circle-slice-8' /> FCR
</div>
<div className='col-span-2'>{projectFlock.fcr.name}</div>
<div className='col-span-2'>{projectFlock.fcr?.name}</div>
{/* BARIS 3 (Terakhir - TIDAK PERLU garis di bawahnya) */}
<div className='col-span-1 flex flex-row items-center text-gray-400 font-semibold gap-2'>
@@ -221,7 +247,7 @@ const ProjectFlockDetail = ({
Kategori
</div>
<div className='col-span-2'>
{formatTitleCase(projectFlock.category)}
{formatTitleCase(projectFlock.category ?? '')}
</div>
</div>
</div>
@@ -231,6 +257,9 @@ const ProjectFlockDetail = ({
<div className='border-t-1 border-gray-300'>
<div className='p-4 flex flex-col gap-4'>
<h2 className='text-2xl font-semibold'>Kandang Aktif</h2>
{kandangApprovals && !kandangApprovalsLoading && (
<ApprovalSteps approvals={kandangApprovals} />
)}
{/* Badge Row */}
<div className='flex flex-row gap-2'>
<Badge
@@ -246,7 +275,7 @@ const ProjectFlockDetail = ({
height={12}
color={'success'}
/>{' '}
Kandang Aktif ({projectFlock.kandangs.length})
Kandang Aktif ({projectFlock.kandangs?.length})
</Badge>
<div className='divider divider-horizontal p-0 m-0'></div>
<Badge
@@ -355,7 +384,7 @@ const ProjectFlockDetail = ({
color='neutral'
disabled={projectFlock.approval.step_number == 1}
>
{projectFlock.kandangs.map((kandang) => (
{projectFlock.kandangs?.map((kandang) => (
<div
key={kandang.id}
className={`grid grid-cols-2 gap-6 cursor-pointer hover:text-gray-800`}