From 8b1e43cdb95539c839c1ae9d0cb7c1a079811e4f Mon Sep 17 00:00:00 2001 From: rstubryan Date: Sun, 25 Jan 2026 18:00:53 +0700 Subject: [PATCH] refactor(FE): Set week using chick_in_date and earliest record --- .../uniformity/form/UniformityForm.tsx | 47 ++++++++++++++++--- src/types/api/production/project-flock.d.ts | 1 + 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/components/pages/production/uniformity/form/UniformityForm.tsx b/src/components/pages/production/uniformity/form/UniformityForm.tsx index d7013520..e6b0657d 100644 --- a/src/components/pages/production/uniformity/form/UniformityForm.tsx +++ b/src/components/pages/production/uniformity/form/UniformityForm.tsx @@ -399,23 +399,58 @@ const UniformityForm = ({ // ===== SIDE EFFECTS ===== useEffect(() => { if ( + projectFlockKandangLookup?.chick_in_date && projectFlockKandangLookup?.project_flock_kandang_id && isResponseSuccess(recordingsData) && recordingsData.data ) { - const matchingRecording = recordingsData.data.find( + const matchingRecordings = recordingsData.data.filter( (recording: Recording) => recording.project_flock?.project_flock_kandang_id === projectFlockKandangLookup.project_flock_kandang_id ); - if (matchingRecording?.project_flock?.production_standart?.week) { - const weekValue = - matchingRecording.project_flock.production_standart.week; - formik.setFieldValue('week', weekValue); + matchingRecordings.sort( + (a: Recording, b: Recording) => + new Date(a.record_datetime).getTime() - + new Date(b.record_datetime).getTime() + ); + + const earliestRecording = matchingRecordings[0]; + + if (earliestRecording) { + const chickInDate = new Date(projectFlockKandangLookup.chick_in_date); + chickInDate.setHours(0, 0, 0, 0); + + const earliestRecordDate = new Date(earliestRecording.record_datetime); + earliestRecordDate.setHours(0, 0, 0, 0); + + const initialWeek = + earliestRecording.project_flock?.production_standart?.week || 18; + + if (formik.values.date) { + const selectedDate = new Date(formik.values.date); + selectedDate.setHours(0, 0, 0, 0); + + const daysDiff = Math.floor( + (selectedDate.getTime() - chickInDate.getTime()) / + (1000 * 60 * 60 * 24) + ); + + const weeksDiff = Math.floor(daysDiff / 7); + + formik.setFieldValue('week', initialWeek + weeksDiff); + } else { + formik.setFieldValue('week', initialWeek); + } } } - }, [projectFlockKandangLookup?.project_flock_kandang_id, recordingsData]); + }, [ + projectFlockKandangLookup?.chick_in_date, + projectFlockKandangLookup?.project_flock_kandang_id, + recordingsData, + formik.values.date, + ]); useEffect(() => { const unsub = subscribeValidate(() => { diff --git a/src/types/api/production/project-flock.d.ts b/src/types/api/production/project-flock.d.ts index dcc1a348..d3a862d9 100644 --- a/src/types/api/production/project-flock.d.ts +++ b/src/types/api/production/project-flock.d.ts @@ -76,6 +76,7 @@ export type ProjectFlockKandangLookup = { quantity: number; available_quantity?: number; population: number; + chick_in_date: string; }; export type ProjectFlockAvailableQuantity = {