mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE-208,212): enhance quantity validation and formatting in PurchaseOrderAcceptApprovalForm
This commit is contained in:
@@ -22,6 +22,7 @@ import {
|
||||
Purchase,
|
||||
} from '@/types/api/purchase/purchase';
|
||||
import DateInput from '@/components/input/DateInput';
|
||||
import { formatNumber } from '@/lib/helper';
|
||||
|
||||
interface PurchaseOrderAcceptApprovalFormProps {
|
||||
type?: 'add' | 'edit';
|
||||
@@ -218,7 +219,7 @@ const PurchaseOrderAcceptApprovalForm = ({
|
||||
vehicle_number: item.vehicle_number || '',
|
||||
expedition_vendor: null,
|
||||
expedition_vendor_id: 0,
|
||||
received_qty: item.sub_qty ? item.sub_qty.toString() : '',
|
||||
received_qty: '',
|
||||
transport_per_item: '',
|
||||
transport_total: '',
|
||||
};
|
||||
@@ -227,6 +228,21 @@ const PurchaseOrderAcceptApprovalForm = ({
|
||||
}
|
||||
}, [purchaseItems, initialValues]);
|
||||
|
||||
// ===== HELPER FUNCTIONS =====
|
||||
const getQuantityExceededError = useCallback(
|
||||
(idx: number, receivedQty: number) => {
|
||||
if (!receivedQty) return null;
|
||||
|
||||
const originalQty = purchaseItems[idx]?.quantity || 0;
|
||||
if (receivedQty > originalQty) {
|
||||
return `Tidak boleh melebihi ${formatNumber(originalQty)}`;
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
[purchaseItems]
|
||||
);
|
||||
|
||||
const expeditionVendors: ExpeditionVendorOptionType[] = useMemo(() => {
|
||||
return [
|
||||
{
|
||||
@@ -410,7 +426,7 @@ const PurchaseOrderAcceptApprovalForm = ({
|
||||
type='text'
|
||||
value={
|
||||
purchaseItem?.quantity
|
||||
? purchaseItem.quantity.toLocaleString('id-ID')
|
||||
? formatNumber(purchaseItem.quantity)
|
||||
: ''
|
||||
}
|
||||
readOnly={true}
|
||||
@@ -578,11 +594,25 @@ const PurchaseOrderAcceptApprovalForm = ({
|
||||
decimalScale={0}
|
||||
thousandSeparator=','
|
||||
decimalSeparator='.'
|
||||
bottomLabel={`Total: ${purchaseItems[idx]?.quantity ? formatNumber(purchaseItems[idx].quantity) : 0}`}
|
||||
isError={
|
||||
isRepeaterInputError(idx, 'received_qty').isError
|
||||
isRepeaterInputError(idx, 'received_qty').isError ||
|
||||
(formItem?.received_qty
|
||||
? getQuantityExceededError(
|
||||
idx,
|
||||
Number(formItem.received_qty)
|
||||
) !== null
|
||||
: false)
|
||||
}
|
||||
errorMessage={
|
||||
isRepeaterInputError(idx, 'received_qty').errorMessage
|
||||
isRepeaterInputError(idx, 'received_qty')
|
||||
.errorMessage ||
|
||||
(formItem?.received_qty
|
||||
? getQuantityExceededError(
|
||||
idx,
|
||||
Number(formItem.received_qty)
|
||||
) || undefined
|
||||
: undefined)
|
||||
}
|
||||
className={{
|
||||
wrapper: 'min-w-40 md:min-w-52 lg:min-w-64',
|
||||
|
||||
@@ -120,7 +120,9 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
|
||||
purchase_item: Yup.object({
|
||||
value: Yup.number().min(1).required(),
|
||||
label: Yup.string().required(),
|
||||
}).nullable().optional(),
|
||||
})
|
||||
.nullable()
|
||||
.optional(),
|
||||
purchase_item_id: Yup.number()
|
||||
.min(1, 'Purchase item is required!')
|
||||
.required('Purchase item is required!')
|
||||
@@ -164,7 +166,7 @@ const PurchaseAcceptApprovalItemObjectSchema: Yup.ObjectSchema<PurchaseAcceptApp
|
||||
.required('Jumlah diterima wajib diisi!')
|
||||
.test(
|
||||
'is-valid-received-qty',
|
||||
'Jumlah diterima harus berupa angka lebih dari 0!',
|
||||
'Harus berupa angka lebih dari 0!',
|
||||
function (value) {
|
||||
if (value === '' || value === null || value === undefined)
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user