diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index a9284b1c..4abd74d3 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -30,6 +30,7 @@ import { LocationApi } from '@/services/api/master-data'; import { ProductWarehouseApi } from '@/services/api/inventory'; import { isResponseSuccess } from '@/lib/api-helper'; import { RECORDING_FLAG_OPTIONS } from '@/config/constant'; +import { PeriodFlock } from '@/types/api/production/project-flock'; import { useModal } from '@/components/Modal'; import toast from 'react-hot-toast'; @@ -97,6 +98,20 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { RecordingApi.getAllFetcher ); + const flockPeriodsUrls = useMemo(() => { + if (!isResponseSuccess(projectFlocks)) return []; + return projectFlocks?.data.map(pf => `${ProjectFlockApi.basePath}/flocks/${pf.flock.id}/periods`) || []; + }, [projectFlocks]); + + const { data: flockPeriodsData } = useSWR[]>( + flockPeriodsUrls.length > 0 ? flockPeriodsUrls : null, + (urls: string[]) => Promise.all(urls.map(url => fetch(url).then(res => res.json()))), + { + revalidateOnFocus: false, + dedupingInterval: 60000, + } + ); + const recordedProjectFlockIds = useMemo(() => { if (!isResponseSuccess(existingRecordings)) return new Set(); @@ -105,13 +120,30 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { todayRecordings.forEach(recording => { const recordingDate = recording.record_date?.split('T')[0]; - if (recordingDate === today) { + + const isRecordedToday = recordingDate === today; + + let isCorrectPeriod = false; + if (isRecordedToday && flockPeriodsData && isResponseSuccess(projectFlocks)) { + const flockIndex = projectFlocks.data.findIndex(pf => pf.id === recording.project_flock_kandang_id); + if (flockIndex !== undefined && flockIndex >= 0 && flockPeriodsData[flockIndex]) { + const flockPeriod = flockPeriodsData[flockIndex]; + const currentProjectFlock = projectFlocks.data[flockIndex]; + + if (currentProjectFlock && isResponseSuccess(flockPeriod) && flockPeriod.data?.next_period) { + const expectedDay = flockPeriod.data.next_period - 1; + isCorrectPeriod = recording.day === expectedDay; + } + } + } + + if (isRecordedToday && (isCorrectPeriod || !flockPeriodsData)) { recordedIds.add(recording.project_flock_kandang_id); } }); return recordedIds; - }, [existingRecordings, today]); + }, [existingRecordings, today, flockPeriodsData, projectFlocks]); const { data: stockProducts, isLoading: isLoadingStockProducts } = useSWR( stockProductsUrl,