diff --git a/src/components/pages/inventory/movement/form/MovementForm.tsx b/src/components/pages/inventory/movement/form/MovementForm.tsx index 431d3c22..bfee353e 100644 --- a/src/components/pages/inventory/movement/form/MovementForm.tsx +++ b/src/components/pages/inventory/movement/form/MovementForm.tsx @@ -176,6 +176,22 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { enableReinitialize: true, onSubmit: async (values) => { setMovementFormErrorMessage(''); + if (values.source_warehouse_id === values.destination_warehouse_id) { + const sourceWarehouseName = + (values.source_warehouse as WarehouseOptionType)?.label || + 'Gudang asal'; + const destinationWarehouseName = + (values.destination_warehouse as WarehouseOptionType)?.label || + 'gudang tujuan'; + + setMovementFormErrorMessage( + `Tidak bisa submit form. ${sourceWarehouseName} tidak boleh sama dengan ${destinationWarehouseName}.` + ); + toast.error( + `Tidak bisa submit form. Gudang asal dan tujuan tidak boleh sama!` + ); + return; + } const documents: File[] = []; const deliveriesPayload = values.deliveries.map((d) => { let documentIndex = 0; @@ -858,35 +874,40 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { placeholder='Pilih gudang asal...' value={formik.values.source_warehouse} onChange={(val) => { + const newSourceWarehouseId = (val as WarehouseOptionType) + ?.value; + + if (newSourceWarehouseId) { + if ( + newSourceWarehouseId === + formik.values.destination_warehouse_id + ) { + const destinationWarehouseName = + ( + formik.values + .destination_warehouse as WarehouseOptionType + )?.label || 'gudang tujuan'; + + toast.error( + `Tidak bisa memilih gudang yang sama. Gudang asal tidak boleh sama dengan ${destinationWarehouseName}.` + ); + return; // Prevent setting the value + } + } + formik.setFieldTouched('source_warehouse', true); formik.setFieldValue('source_warehouse', val); formik.setFieldTouched('source_warehouse_id', true); - const newSourceWarehouseId = (val as WarehouseOptionType) - ?.value; formik.setFieldValue( 'source_warehouse_id', newSourceWarehouseId ); + if ( - newSourceWarehouseId && - formik.values.destination_warehouse_id && - newSourceWarehouseId === - formik.values.destination_warehouse_id + formik.errors.destination_warehouse_id === + 'Gudang tujuan tidak boleh sama dengan gudang asal!' ) { - formik.setFieldError( - 'destination_warehouse_id', - 'Gudang tujuan tidak boleh sama dengan gudang asal!' - ); - } else { - if ( - formik.errors.destination_warehouse_id === - 'Gudang tujuan tidak boleh sama dengan gudang asal!' - ) { - formik.setFieldError( - 'destination_warehouse_id', - undefined - ); - } + formik.setFieldError('destination_warehouse_id', undefined); } }} options={warehouseOptions} @@ -952,35 +973,38 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { placeholder='Pilih gudang tujuan...' value={formik.values.destination_warehouse} onChange={(val) => { + const newDestinationWarehouseId = (val as WarehouseOptionType) + ?.value; + + if (newDestinationWarehouseId) { + if ( + newDestinationWarehouseId === + formik.values.source_warehouse_id + ) { + const sourceWarehouseName = + (formik.values.source_warehouse as WarehouseOptionType) + ?.label || 'gudang asal'; + + toast.error( + `Tidak bisa memilih gudang yang sama. Gudang tujuan tidak boleh sama dengan ${sourceWarehouseName}.` + ); + return; + } + } + formik.setFieldTouched('destination_warehouse', true); formik.setFieldValue('destination_warehouse', val); formik.setFieldTouched('destination_warehouse_id', true); - const newDestinationWarehouseId = (val as WarehouseOptionType) - ?.value; formik.setFieldValue( 'destination_warehouse_id', newDestinationWarehouseId ); + if ( - newDestinationWarehouseId && - formik.values.source_warehouse_id && - newDestinationWarehouseId === - formik.values.source_warehouse_id + formik.errors.destination_warehouse_id === + 'Gudang tujuan tidak boleh sama dengan gudang asal!' ) { - formik.setFieldError( - 'destination_warehouse_id', - 'Gudang tujuan tidak boleh sama dengan gudang asal!' - ); - } else { - if ( - formik.errors.destination_warehouse_id === - 'Gudang tujuan tidak boleh sama dengan gudang asal!' - ) { - formik.setFieldError( - 'destination_warehouse_id', - undefined - ); - } + formik.setFieldError('destination_warehouse_id', undefined); } }} options={warehouseOptions} @@ -1701,7 +1725,11 @@ const MovementForm = ({ type = 'add', initialValues }: MovementFormProps) => { hasInvalidQty || hasExceededStock || !formik.isValid || - formik.isSubmitting + formik.isSubmitting || + (formik.values.source_warehouse_id === + formik.values.destination_warehouse_id && + formik.values.source_warehouse_id !== 0 && + formik.values.destination_warehouse_id !== 0) } > Submit