diff --git a/src/components/pages/production/recording/form/RecordingForm.schema.ts b/src/components/pages/production/recording/form/RecordingForm.schema.ts index 5506481e..7bb1cd26 100644 --- a/src/components/pages/production/recording/form/RecordingForm.schema.ts +++ b/src/components/pages/production/recording/form/RecordingForm.schema.ts @@ -2,6 +2,8 @@ import * as Yup from 'yup'; import { Recording, CreateGrowingRecordingPayload, + CreateLayingRecordingPayload, + CreateEggPayload, } from '@/types/api/production/recording'; export const RecordingGrowingFormSchema = Yup.object({ @@ -64,7 +66,7 @@ export const RecordingGrowingFormSchema = Yup.object({ .typeError('Produk harus berupa angka!'), usage_qty: Yup.number() .required('Jumlah penggunaan wajib diisi!') - .min(0, 'Jumlah penggunaan tidak boleh negatif!') + .min(1, 'Jumlah penggunaan tidak boleh 0!') .typeError('Jumlah penggunaan harus berupa angka!'), }) ) @@ -87,6 +89,24 @@ export const RecordingGrowingFormSchema = Yup.object({ .required('Data depletions wajib diisi!'), }); +export const RecordingLayingFormSchema = RecordingGrowingFormSchema.shape({ + eggs: Yup.array() + .of( + Yup.object({ + product_warehouse_id: Yup.number() + .required('Produk telur wajib diisi!') + .min(1, 'Produk telur wajib diisi!') + .typeError('Produk 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!'), + }) + ) + .min(1, 'Minimal harus ada 1 data telur!') + .required('Data telur wajib diisi!'), +}); + export const UpdateRecordingGrowingFormSchema = RecordingGrowingFormSchema.shape({ project_flock_kandangs_id: Yup.number() @@ -100,14 +120,31 @@ export const UpdateRecordingGrowingFormSchema = .required('Project Flock Kandang wajib diisi!'), }); +export const UpdateRecordingLayingFormSchema = RecordingLayingFormSchema.shape({ + project_flock_kandangs_id: Yup.number() + .default(0) + .typeError('Project Flock Kandang wajib diisi!') + .test( + 'is-valid-project-flock-kandang', + 'Project Flock Kandang wajib diisi!', + (value) => value !== undefined && value !== null && value > 0 + ) + .required('Project Flock Kandang wajib diisi!'), +}); + export type RecordingGrowingFormValues = Yup.InferType< typeof RecordingGrowingFormSchema >; +export type RecordingLayingFormValues = Yup.InferType< + typeof RecordingLayingFormSchema +>; + type RecordingFormData = Partial & { body_weights?: CreateGrowingRecordingPayload['body_weights']; stocks?: CreateGrowingRecordingPayload['stocks']; depletions?: CreateGrowingRecordingPayload['depletions']; + eggs?: CreateLayingRecordingPayload['eggs']; }; export const getRecordingGrowingFormInitialValues = ( @@ -158,3 +195,19 @@ export const getRecordingGrowingFormInitialValues = ( }, ], }); + +export const getRecordingLayingFormInitialValues = ( + initialValues?: RecordingFormData +): RecordingLayingFormValues => ({ + ...getRecordingGrowingFormInitialValues(initialValues), + + eggs: initialValues?.eggs?.map((egg: CreateEggPayload) => ({ + product_warehouse_id: egg.product_warehouse_id, + qty: egg.qty, + })) ?? [ + { + product_warehouse_id: 0, + qty: 0, + }, + ], +}); diff --git a/src/types/api/production/recording.d.ts b/src/types/api/production/recording.d.ts index d8903065..42a02c09 100644 --- a/src/types/api/production/recording.d.ts +++ b/src/types/api/production/recording.d.ts @@ -85,33 +85,28 @@ export type CreateGrowingRecordingPayload = { }[]; }; -export type CreateLayingRecordingPayload = { - project_flock_kandangs_id: number; - body_weights: { - avg_weight: number; +export type CreateGradingPayload = { + recording_id: number; + grading: { + product_warehouse_id: number; + grade: string; qty: number; }[]; - stocks?: { - product_warehouse_id: number; - usage_qty: number; - }[]; - depletions?: { - product_warehouse_id: number; - qty: number; - }[]; - eggs: { - product_warehouse_id: number; - qty: number; - grading?: { - grade: string; - qty: number; - }[]; - }[]; +}; + +export type CreateEggPayload = { + product_warehouse_id: number; + qty: number; +}; + +export type CreateLayingRecordingPayload = CreateGrowingRecordingPayload & { + eggs?: CreateEggPayload[]; }; export type CreateRecordingPayload = | CreateGrowingRecordingPayload - | CreateLayingRecordingPayload; + | CreateLayingRecordingPayload + | CreateGradingRecordingPayload; export type UpdateGrowingRecordingPayload = CreateGrowingRecordingPayload; export type UpdateLayingRecordingPayload = CreateLayingRecordingPayload;