diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index bdf37487..d4d175e2 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -1369,9 +1369,6 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { } readOnly disabled - className={{ - input: 'bg-base-200', - }} /> { } readOnly disabled - className={{ - input: 'bg-base-200', - }} /> @@ -1433,9 +1427,6 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { } readOnly disabled - className={{ - input: 'bg-base-200', - }} /> { } readOnly disabled - className={{ - input: 'bg-base-200', - }} /> diff --git a/src/components/pages/production/recording/form/RecordingForm.schema.ts b/src/components/pages/production/recording/form/RecordingForm.schema.ts index 063c2cc0..b39f94ca 100644 --- a/src/components/pages/production/recording/form/RecordingForm.schema.ts +++ b/src/components/pages/production/recording/form/RecordingForm.schema.ts @@ -164,6 +164,9 @@ export const RecordingLayingFormSchema: Yup.ObjectSchema ({ product_warehouse_id: stock.product_warehouse_id, qty: diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index 63d78397..4603832c 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -554,15 +554,18 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const nextDayRecordingUrl = useMemo(() => { if (!projectFlockKandangLookup) return null; const projectFlockKandangId = projectFlockKandangLookup.id; - return `${RecordingApi.basePath}/next-day?project_flock_kandang_id=${projectFlockKandangId}`; - }, [projectFlockKandangLookup]); + return `${RecordingApi.basePath}/next-day?project_flock_kandang_id=${projectFlockKandangId}&record_date=${selectedRecordDate}`; + }, [projectFlockKandangLookup, selectedRecordDate]); const { data: nextDayRecordingData } = useSWR( nextDayRecordingUrl, nextDayRecordingUrl ? () => { const projectFlockKandangId = projectFlockKandangLookup!.id; - return RecordingApi.nextDayRecording(projectFlockKandangId); + return RecordingApi.nextDayRecording( + projectFlockKandangId, + selectedRecordDate + ); } : null ); @@ -1075,14 +1078,9 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { if ((type as 'add' | 'edit' | 'detail') === 'detail') return null; const stock = formik.values.stocks?.[stockIdx]; if (!stock || !stock.product_warehouse_id) return null; - const availableStock = getAvailableStock(stock.product_warehouse_id); - const requestedUsage = Number(stock.qty) || 0; - if (requestedUsage > availableStock) { - return `Jumlah pakai melebihi stok tersedia! Maksimal: ${formatNumber(availableStock)}`; - } return null; }, - [formik.values.stocks, getAvailableStock, type] + [formik.values.stocks, type] ); const getStockUsageAdornment = useCallback( @@ -1096,7 +1094,10 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { if (requestedUsage > 0) { return ( - (sisa: {formatNumber(remainingStock)}) + (tersedia: {formatNumber(availableStock)} | pakai:{' '} + {formatNumber(requestedUsage)} | sisa:{' '} + {formatNumber(Math.max(remainingStock, 0))} | dipinjam:{' '} + {formatNumber(Math.max(-remainingStock, 0))}) ); } @@ -2443,7 +2444,11 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { ); }} options={unifiedStockProducts} - placeholder='Pilih Produk' + placeholder={ + !formik.values.project_flock_kandang_id + ? 'Pilih kandang terlebih dahulu' + : 'Pilih Produk' + } isLoading={isLoadingStockProducts} onMenuScrollToBottom={loadMoreStockProducts} isError={ @@ -2464,7 +2469,10 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { wrapper: 'w-full min-w-48', }} isSearchable - isDisabled={type === 'detail'} + isDisabled={ + type === 'detail' || + !formik.values.project_flock_kandang_id + } isClearable={type !== 'detail'} startAdornment={ stock.product_warehouse_id 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/services/api/production.ts b/src/services/api/production.ts index 8e66d57e..d481081d 100644 --- a/src/services/api/production.ts +++ b/src/services/api/production.ts @@ -74,7 +74,8 @@ export class RecordingService extends BaseApiService< } async nextDayRecording( - projectFlockId: number + projectFlockId: number, + recordDate?: string ): Promise | undefined> { return await this.customRequest>( `next-day`, @@ -82,6 +83,7 @@ export class RecordingService extends BaseApiService< method: 'GET', params: { project_flock_kandang_id: projectFlockId, + record_date: recordDate, }, } ); 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 = {