diff --git a/packages/admin/dashboard/src/i18n/translations/en.json b/packages/admin/dashboard/src/i18n/translations/en.json index 51554c6d43..4bc1f75cc5 100644 --- a/packages/admin/dashboard/src/i18n/translations/en.json +++ b/packages/admin/dashboard/src/i18n/translations/en.json @@ -735,7 +735,11 @@ "descriptionPlaceholder": "What type of reservation is this?", "successToast": "Reservation was successfully created.", "updateSuccessToast": "Reservation was successfully updated.", - "deleteSuccessToast": "Reservation was successfully deleted." + "deleteSuccessToast": "Reservation was successfully deleted.", + "errors": { + "noAvaliableQuantity": "Stock location doesn't have available quantity.", + "quantityOutOfRange": "Minimum quantity is 1 and maximum quantity is {{max}}" + } }, "toast": { "updateLocations": "Locations updated successfully.", diff --git a/packages/admin/dashboard/src/routes/reservations/reservation-create/components/reservation-create-from/reservation-create-from.tsx b/packages/admin/dashboard/src/routes/reservations/reservation-create/components/reservation-create-from/reservation-create-from.tsx index c4a2c244a8..25bbe191d9 100644 --- a/packages/admin/dashboard/src/routes/reservations/reservation-create/components/reservation-create-from/reservation-create-from.tsx +++ b/packages/admin/dashboard/src/routes/reservations/reservation-create/components/reservation-create-from/reservation-create-from.tsx @@ -91,6 +91,31 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => { const { mutateAsync, isPending } = useCreateReservationItem() const handleSubmit = form.handleSubmit(async (data) => { + const min = 1 + const max = selectedLocationLevel?.available_quantity + ? selectedLocationLevel.available_quantity + : 0 + + if (!selectedLocationLevel?.available_quantity) { + form.setError("quantity", { + type: "manual", + message: t("inventory.reservation.errors.noAvaliableQuantity"), + }) + + return + } + + if (data.quantity < min || data.quantity > max) { + form.setError("quantity", { + type: "manual", + message: t("inventory.reservation.errors.quantityOutOfRange", { + max: max, + }), + }) + + return + } + await mutateAsync(data, { onSuccess: ({ reservation }) => { toast.success(t("inventory.reservation.successToast")) @@ -219,12 +244,6 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => { placeholder={t( "inventory.reservation.quantityPlaceholder" )} - min={1} - max={ - selectedLocationLevel?.available_quantity - ? selectedLocationLevel.available_quantity - : 0 - } value={value || ""} onChange={(e) => { const value = e.target.value