mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-137): integrate flock periods data fetching in RecordingForm for accurate recording validation
This commit is contained in:
@@ -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<BaseApiResponse<PeriodFlock>[]>(
|
||||
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<number>();
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user