refactor(FE-311): remove transport_total field and update approval actions

This commit is contained in:
rstubryan
2025-12-08 14:42:39 +07:00
parent 88878f7613
commit 3a7f1f4812
7 changed files with 73 additions and 121 deletions
@@ -64,7 +64,6 @@ const PurchaseOrderAcceptApprovalForm = ({
| 'expedition_vendor_id'
| 'received_qty'
| 'transport_per_item'
| 'transport_total'
): { isError: boolean; errorMessage: string } => {
const touchedItem = formik.touched.items?.[idx];
const errorItem = formik.errors.items?.[idx] as
@@ -163,6 +162,7 @@ const PurchaseOrderAcceptApprovalForm = ({
validateOnBlur: true,
onSubmit: async (values) => {
const payload: CreateAcceptApprovalRequestPayload = {
action: 'APPROVED',
notes: values.notes || '',
items:
values.items?.map((formItem) => {
@@ -181,10 +181,6 @@ const PurchaseOrderAcceptApprovalForm = ({
typeof formItem.transport_per_item === 'string'
? parseFloat(formItem.transport_per_item) || 0
: formItem.transport_per_item || 0,
transport_total:
typeof formItem.transport_total === 'string'
? parseFloat(formItem.transport_total) || 0
: formItem.transport_total || 0,
};
}) || [],
};
@@ -241,7 +237,6 @@ const PurchaseOrderAcceptApprovalForm = ({
expedition_vendor_id: 0,
received_qty: '',
transport_per_item: '',
transport_total: '',
};
});
formik.setFieldValue('items', updatedItems);
@@ -301,7 +296,7 @@ const PurchaseOrderAcceptApprovalForm = ({
// ===== PURCHASE ITEM OPERATIONS =====
const handlePurchaseItemChange = (
idx: number,
field: 'received_qty' | 'transport_per_item' | 'transport_total',
field: 'received_qty' | 'transport_per_item',
value: string | number
) => {
const numValue = typeof value === 'string' ? parseFloat(value) || 0 : value;
@@ -318,26 +313,6 @@ const PurchaseOrderAcceptApprovalForm = ({
: parseFloat(
formik.values.items?.[idx]?.transport_per_item as string
) || 0;
if (receivedQty > 0 && transportPerItem >= 0) {
const calculatedTransportTotal = receivedQty * transportPerItem;
formik.setFieldValue(
`items.${idx}.transport_total`,
calculatedTransportTotal
);
}
}
if (field === 'transport_total') {
const receivedQty =
parseFloat(formik.values.items?.[idx]?.received_qty as string) || 0;
if (receivedQty > 0 && numValue >= 0) {
const calculatedTransportPerItem = numValue / receivedQty;
formik.setFieldValue(
`items.${idx}.transport_per_item`,
calculatedTransportPerItem
);
}
}
};
@@ -657,37 +632,6 @@ const PurchaseOrderAcceptApprovalForm = ({
}}
/>
</td>
<td>
<NumberInput
required
name={`items.${idx}.transport_total`}
value={formItem?.transport_total || ''}
onChange={(e) =>
handlePurchaseItemChange(
idx,
'transport_total',
e.target.value
)
}
onBlur={formik.handleBlur}
placeholder='Masukkan total transport'
allowNegative={false}
decimalScale={2}
thousandSeparator=','
decimalSeparator='.'
inputPrefix={'Rp'}
isError={
isRepeaterInputError(idx, 'transport_total').isError
}
errorMessage={
isRepeaterInputError(idx, 'transport_total')
.errorMessage
}
className={{
wrapper: 'min-w-40 md:min-w-52 lg:min-w-64',
}}
/>
</td>
</tr>
);
})}
@@ -23,10 +23,12 @@ type PurchaseRequestStaffApprovalFormSchemaType = {
};
type PurchaseRequestManagerApprovalFormSchemaType = {
action: 'APPROVED' | 'REJECTED';
notes: string | null;
};
type PurchaseRequestAcceptApprovalFormSchemaType = {
action: 'APPROVED' | 'REJECTED';
notes: string | null;
items: {
purchase_item?: {
@@ -45,7 +47,6 @@ type PurchaseRequestAcceptApprovalFormSchemaType = {
expedition_vendor_id: number;
received_qty: number | string;
transport_per_item: number | string;
transport_total: number | string;
}[];
};
@@ -83,7 +84,6 @@ export type PurchaseAcceptApprovalItemSchema = {
expedition_vendor_id: number;
received_qty: number | string;
transport_per_item: number | string;
transport_total: number | string;
};
export type PurchaseDeleteItemsSchema = {
@@ -152,6 +152,10 @@ const PurchaseStaffApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseStaffAppro
const PurchaseManagerApprovalObjectSchema: Yup.ObjectSchema<PurchaseRequestManagerApprovalFormSchemaType> =
Yup.object({
action: Yup.mixed<'APPROVED' | 'REJECTED'>()
.oneOf(['APPROVED', 'REJECTED'], 'Action harus APPROVED atau REJECTED')
.required('Action wajib diisi!')
.default('APPROVED'),
notes: Yup.string().nullable().default(null),
});
@@ -230,20 +234,6 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
}
)
.typeError('Biaya transport per item harus berupa angka!'),
transport_total: Yup.mixed<string | number>()
.required('Total biaya transport wajib diisi!')
.test(
'is-valid-transport-total',
'Total biaya transport harus berupa angka lebih dari atau sama dengan 0!',
function (value) {
if (value === '' || value === null || value === undefined)
return false;
const numValue =
typeof value === 'string' ? parseFloat(value) : value;
return !isNaN(numValue) && numValue >= 0;
}
)
.typeError('Total biaya transport harus berupa angka!'),
});
export const PurchaseRequestStaffApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestStaffApprovalFormSchemaType> =
@@ -368,6 +358,7 @@ export const PurchaseRequestManagerApprovalFormDefaultValues = (
purchase?: Purchase
): PurchaseRequestManagerApprovalFormSchemaType => {
return {
action: 'APPROVED',
notes: purchase?.notes ?? null,
};
};
@@ -378,6 +369,10 @@ export type PurchaseRequestManagerApprovalFormValues = Yup.InferType<
export const PurchaseRequestAcceptApprovalFormSchema: Yup.ObjectSchema<PurchaseRequestAcceptApprovalFormSchemaType> =
Yup.object({
action: Yup.mixed<'APPROVED' | 'REJECTED'>()
.oneOf(['APPROVED', 'REJECTED'], 'Action harus APPROVED atau REJECTED')
.required('Action wajib diisi!')
.default('APPROVED'),
notes: Yup.string().nullable().default(null),
items: Yup.array()
.of(PurchaseAcceptApprovalItemObjectSchema)
@@ -388,6 +383,7 @@ export const PurchaseRequestAcceptApprovalFormSchema: Yup.ObjectSchema<PurchaseR
export const PurchaseRequestAcceptApprovalFormInitialValues: PurchaseRequestAcceptApprovalFormSchemaType =
{
action: 'APPROVED',
notes: '',
items: [
{
@@ -399,7 +395,6 @@ export const PurchaseRequestAcceptApprovalFormInitialValues: PurchaseRequestAcce
expedition_vendor_id: 0,
received_qty: '',
transport_per_item: '',
transport_total: '',
},
],
};
@@ -408,6 +403,7 @@ export const PurchaseRequestAcceptApprovalFormDefaultValues = (
purchase?: Purchase
): PurchaseRequestAcceptApprovalFormSchemaType => {
return {
action: 'APPROVED',
notes: purchase?.notes ?? null,
items: purchase?.items
? purchase.items.map((item) => ({
@@ -419,7 +415,6 @@ export const PurchaseRequestAcceptApprovalFormDefaultValues = (
expedition_vendor_id: 0,
received_qty: '',
transport_per_item: '',
transport_total: '',
}))
: [
{
@@ -431,7 +426,6 @@ export const PurchaseRequestAcceptApprovalFormDefaultValues = (
expedition_vendor_id: 0,
received_qty: '',
transport_per_item: '',
transport_total: '',
},
],
};
@@ -925,6 +925,7 @@ const PurchaseOrderDetail = ({
color: 'success',
onClick: async (notes) => {
const payload: CreateManagerApprovalRequestPayload = {
action: 'APPROVED',
notes: notes || null,
};
+2 -2
View File
@@ -42,7 +42,6 @@ export type PurchaseItem = {
expedition_vendor_name?: string | null;
received_qty?: number | null;
transport_per_item?: number | null;
transport_total?: number | null;
};
export type BasePurchase = {
@@ -103,10 +102,12 @@ export type UpdateStaffApprovalRequestPayload = {
};
export type CreateManagerApprovalRequestPayload = {
action: 'APPROVED' | 'REJECTED';
notes?: string | null;
};
export type CreateAcceptApprovalRequestPayload = {
action: 'APPROVED' | 'REJECTED';
notes?: string;
items: {
purchase_item_id: number;
@@ -117,7 +118,6 @@ export type CreateAcceptApprovalRequestPayload = {
expedition_vendor_id: number;
received_qty: number;
transport_per_item: number;
transport_total: number;
}[];
};