mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-25 07:45:47 +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 { ProductWarehouseApi } from '@/services/api/inventory';
|
||||||
import { isResponseSuccess } from '@/lib/api-helper';
|
import { isResponseSuccess } from '@/lib/api-helper';
|
||||||
import { RECORDING_FLAG_OPTIONS } from '@/config/constant';
|
import { RECORDING_FLAG_OPTIONS } from '@/config/constant';
|
||||||
|
import { PeriodFlock } from '@/types/api/production/project-flock';
|
||||||
import { useModal } from '@/components/Modal';
|
import { useModal } from '@/components/Modal';
|
||||||
import toast from 'react-hot-toast';
|
import toast from 'react-hot-toast';
|
||||||
|
|
||||||
@@ -97,6 +98,20 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
|
|||||||
RecordingApi.getAllFetcher
|
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(() => {
|
const recordedProjectFlockIds = useMemo(() => {
|
||||||
if (!isResponseSuccess(existingRecordings)) return new Set<number>();
|
if (!isResponseSuccess(existingRecordings)) return new Set<number>();
|
||||||
|
|
||||||
@@ -105,13 +120,30 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
|
|||||||
|
|
||||||
todayRecordings.forEach(recording => {
|
todayRecordings.forEach(recording => {
|
||||||
const recordingDate = recording.record_date?.split('T')[0];
|
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);
|
recordedIds.add(recording.project_flock_kandang_id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return recordedIds;
|
return recordedIds;
|
||||||
}, [existingRecordings, today]);
|
}, [existingRecordings, today, flockPeriodsData, projectFlocks]);
|
||||||
|
|
||||||
const { data: stockProducts, isLoading: isLoadingStockProducts } = useSWR(
|
const { data: stockProducts, isLoading: isLoadingStockProducts } = useSWR(
|
||||||
stockProductsUrl,
|
stockProductsUrl,
|
||||||
|
|||||||
Reference in New Issue
Block a user