diff --git a/src/components/pages/inventory/movement/form/MovementForm.schema.ts b/src/components/pages/inventory/movement/form/MovementForm.schema.ts index 230244be..0bc0397c 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.schema.ts +++ b/src/components/pages/inventory/movement/form/MovementForm.schema.ts @@ -26,10 +26,10 @@ export type EkspedisiSchema = { no_surat_jalan: string; dokumen: string | File; biaya_ekspedisi: number; + biaya_ekspedisi_per_item?: number | undefined; nama_sopir: string; }; -// Define schemas for nested objects const ProductObjectSchema: Yup.ObjectSchema = Yup.object({ product: Yup.object({ value: Yup.number().min(1).required(), @@ -64,6 +64,12 @@ const EkspedisiObjectSchema: Yup.ObjectSchema = Yup.object({ .required('Biaya ekspedisi wajib diisi!') .min(0, 'Biaya minimal 0!') .typeError('Biaya harus berupa angka!'), + biaya_ekspedisi_per_item: Yup.number() + .transform((value) => (isNaN(value) ? undefined : value)) + .min(0, 'Biaya per item minimal 0!') + .typeError('Biaya per item harus berupa angka!') + .optional() + .default(undefined), nama_sopir: Yup.string().required('Nama sopir wajib diisi!'), }); @@ -130,6 +136,7 @@ export const getMovementFormInitialValues = ( no_surat_jalan: e.no_surat_jalan, dokumen: e.dokumen, biaya_ekspedisi: e.biaya_ekspedisi, + biaya_ekspedisi_per_item: e.biaya_ekspedisi, nama_sopir: e.nama_sopir, })) ?? [], }); diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index a2dd43c8..db432a4d 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -81,6 +81,9 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { dokumen: e.dokumen instanceof File ? e.dokumen : (e.dokumen as string), biaya_ekspedisi: e.biaya_ekspedisi, + biaya_ekspedisi_per_item: e.qty + ? e.biaya_ekspedisi / e.qty + : e.biaya_ekspedisi, nama_sopir: e.nama_sopir, })), }; @@ -145,6 +148,7 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { no_surat_jalan: '', dokumen: '', biaya_ekspedisi: 0, + biaya_ekspedisi_per_item: 0, nama_sopir: '', }, ]; @@ -252,6 +256,18 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { formikSetValues(formikInitialValues); }, [formikSetValues, formikInitialValues]); + useEffect(() => { + formik.values.ekspedisi?.forEach((eks, idx) => { + if (eks.qty && eks.biaya_ekspedisi) { + const perItem = eks.biaya_ekspedisi / eks.qty; + formik.setFieldValue( + `ekspedisi.${idx}.biaya_ekspedisi_per_item`, + perItem + ); + } + }); + }, [formik.values.ekspedisi]); + const getFilteredProductOptions = useCallback(() => { return ( formik.values.product @@ -646,7 +662,8 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { Plat Nomor No Surat Jalan Dokumen - Biaya Ekspedisi + Biaya Ekspedisi (Rp.) + Biaya Ekspedisi / Item (Rp.) Nama Sopir {type !== 'detail' && Aksi} @@ -836,6 +853,31 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { }} /> + + +