mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-62,65): add biaya_ekspedisi_per_item field and calculation in MovementForm
This commit is contained in:
@@ -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<ProductSchema> = Yup.object({
|
||||
product: Yup.object({
|
||||
value: Yup.number().min(1).required(),
|
||||
@@ -64,6 +64,12 @@ const EkspedisiObjectSchema: Yup.ObjectSchema<EkspedisiSchema> = 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,
|
||||
})) ?? [],
|
||||
});
|
||||
|
||||
@@ -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) => {
|
||||
<th>Plat Nomor</th>
|
||||
<th>No Surat Jalan</th>
|
||||
<th>Dokumen</th>
|
||||
<th>Biaya Ekspedisi</th>
|
||||
<th>Biaya Ekspedisi (Rp.)</th>
|
||||
<th>Biaya Ekspedisi / Item (Rp.)</th>
|
||||
<th>Nama Sopir</th>
|
||||
{type !== 'detail' && <th>Aksi</th>}
|
||||
</tr>
|
||||
@@ -836,6 +853,31 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => {
|
||||
}}
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
<TextInput
|
||||
disabled
|
||||
onChange={formik.handleChange}
|
||||
onBlur={formik.handleBlur}
|
||||
isError={isRepeaterInputError(
|
||||
'ekspedisi',
|
||||
'biaya_ekspedisi_per_item',
|
||||
idx
|
||||
)}
|
||||
name={`ekspedisi.${idx}.biaya_ekspedisi_per_item`}
|
||||
value={
|
||||
ekspedisi.qty && ekspedisi.biaya_ekspedisi
|
||||
? (
|
||||
ekspedisi.biaya_ekspedisi / ekspedisi.qty
|
||||
).toLocaleString('id-ID')
|
||||
: '0'
|
||||
}
|
||||
readOnly
|
||||
className={{
|
||||
wrapper: 'w-full min-w-24',
|
||||
input: 'bg-base-200',
|
||||
}}
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
<TextInput
|
||||
required
|
||||
|
||||
+1
@@ -44,6 +44,7 @@ export type CreateMovementPayload = {
|
||||
no_surat_jalan: string;
|
||||
dokumen: string | File;
|
||||
biaya_ekspedisi: number;
|
||||
biaya_ekspedisi_per_item?: number;
|
||||
nama_sopir: string;
|
||||
}[];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user