diff --git a/src/components/pages/production/recording/form/RecordingForm.schema.ts b/src/components/pages/production/recording/form/RecordingForm.schema.ts index 82b59036..063c2cc0 100644 --- a/src/components/pages/production/recording/form/RecordingForm.schema.ts +++ b/src/components/pages/production/recording/form/RecordingForm.schema.ts @@ -33,16 +33,16 @@ type RecordingGrowingFormSchemaType = { qty: number | string; }[]; depletions: { - product_warehouse_id: number; - qty: number | string; + product_warehouse_id?: number; + qty?: number | string; }[]; }; type RecordingLayingFormSchemaType = RecordingGrowingFormSchemaType & { eggs: { - product_warehouse_id: number; - qty: number | string; - weight: number | string; + product_warehouse_id?: number; + qty?: number | string; + weight?: number | string; }[]; }; @@ -52,14 +52,14 @@ export type StockSchema = { }; export type DepletionSchema = { - product_warehouse_id: number; - qty: number | string; + product_warehouse_id?: number; + qty?: number | string; }; export type EggSchema = { - product_warehouse_id: number; - qty: number | string; - weight: number | string; + product_warehouse_id?: number; + qty?: number | string; + weight?: number | string; }; const StockObjectSchema: Yup.ObjectSchema = Yup.object({ @@ -75,28 +75,19 @@ const StockObjectSchema: Yup.ObjectSchema = Yup.object({ const DepletionObjectSchema: Yup.ObjectSchema = Yup.object({ product_warehouse_id: Yup.number() - .required('Produk depletions wajib diisi!') - .min(1, 'Produk depletions wajib diisi!') - .typeError('Produk depletions harus berupa angka!'), + .optional() + .typeError('Depletions harus berupa angka!'), qty: Yup.number() - .required('Jumlah depletions wajib diisi!') - .min(1, 'Jumlah depletions minimal 1!') + .optional() .typeError('Jumlah depletions harus berupa angka!'), }); const EggObjectSchema: Yup.ObjectSchema = Yup.object({ product_warehouse_id: Yup.number() - .required('Kondisi telur wajib diisi!') - .min(1, 'Kondisi telur wajib diisi!') + .optional() .typeError('Kondisi telur harus berupa angka!'), - qty: Yup.number() - .required('Jumlah telur wajib diisi!') - .min(1, 'Jumlah telur tidak boleh 0!') - .typeError('Jumlah telur harus berupa angka!'), - weight: Yup.number() - .required('Berat telur wajib diisi!') - .min(1, 'Berat telur minimal 1 gram!') - .typeError('Berat telur harus berupa angka!'), + qty: Yup.number().optional().typeError('Jumlah telur harus berupa angka!'), + weight: Yup.number().optional().typeError('Berat telur harus berupa angka!'), }); export const RecordingGrowingFormSchema: Yup.ObjectSchema = @@ -163,18 +154,12 @@ export const RecordingGrowingFormSchema: Yup.ObjectSchema = RecordingGrowingFormSchema.shape({ - eggs: Yup.array() - .of(EggObjectSchema) - .min(1, 'Minimal harus ada 1 data telur!') - .required('Data telur wajib diisi!'), + eggs: Yup.array().of(EggObjectSchema).default([]), }); export const UpdateRecordingGrowingFormSchema = diff --git a/src/components/pages/production/recording/form/RecordingForm.tsx b/src/components/pages/production/recording/form/RecordingForm.tsx index 5044dec5..17a1d020 100644 --- a/src/components/pages/production/recording/form/RecordingForm.tsx +++ b/src/components/pages/production/recording/form/RecordingForm.tsx @@ -309,6 +309,13 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { // ===== PAYLOAD CREATION HELPERS ===== const createGrowingPayload = useCallback( (values: RecordingGrowingFormValues) => { + const depletions = values.depletions + ?.filter((d) => d.product_warehouse_id && d.qty) + .map((depletion) => ({ + product_warehouse_id: depletion.product_warehouse_id!, + qty: Number(depletion.qty) || 0, + })); + return { project_flock_kandang_id: values.project_flock_kandang_id, record_date: values.record_date, @@ -316,10 +323,7 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { product_warehouse_id: stock.product_warehouse_id, qty: Number(stock.qty) || 0, })), - depletions: (values.depletions ?? []).map((depletion) => ({ - product_warehouse_id: depletion.product_warehouse_id, - qty: Number(depletion.qty) || 0, - })), + ...(depletions && depletions.length > 0 && { depletions }), }; }, [] @@ -327,25 +331,33 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { const createLayingPayload = useCallback( (values: RecordingLayingFormValues) => { - return { - project_flock_kandang_id: values.project_flock_kandang_id, - record_date: values.record_date, - stocks: (values.stocks ?? []).map((stock) => ({ - product_warehouse_id: stock.product_warehouse_id, - qty: Number(stock.qty) || 0, - })), - depletions: (values.depletions ?? []).map((depletion) => ({ - product_warehouse_id: depletion.product_warehouse_id, + const depletions = values.depletions + ?.filter((d) => d.product_warehouse_id && d.qty) + .map((depletion) => ({ + product_warehouse_id: depletion.product_warehouse_id!, qty: Number(depletion.qty) || 0, - })), - eggs: (values.eggs ?? []).map((egg) => ({ - product_warehouse_id: egg.product_warehouse_id, + })); + + const eggs = values.eggs + ?.filter((e) => e.product_warehouse_id && e.qty && e.weight) + .map((egg) => ({ + product_warehouse_id: egg.product_warehouse_id!, qty: Number(egg.qty) || 0, weight: typeof egg.weight === 'number' ? egg.weight : parseFloat(String(egg.weight)) || 0, + })); + + return { + project_flock_kandang_id: values.project_flock_kandang_id, + record_date: values.record_date, + stocks: values.stocks.map((stock) => ({ + product_warehouse_id: stock.product_warehouse_id, + qty: Number(stock.qty) || 0, })), + ...(depletions && depletions.length > 0 && { depletions }), + ...(eggs && eggs.length > 0 && { eggs }), }; }, [] @@ -1692,12 +1704,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { )} -
- {JSON.stringify(formik.errors)} -
-
- {JSON.stringify(formik.values)} -
{/* Basic Info Card */} {(type === 'add' || type === 'edit') && ( { /> )} - - Kondisi - - * - - - - Jumlah - - * - - + Kondisi + Jumlah {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( Action )} @@ -2652,7 +2642,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { { /> )} - - Kondisi Telur - - * - - - - Jumlah - - * - - - - Berat (gram) - - * - - + Kondisi Telur + Jumlah + Berat (gram) {(type as 'add' | 'edit' | 'detail') !== 'detail' && ( Action )} @@ -2829,7 +2794,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { )} @@ -2872,7 +2836,6 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => { {