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