fix some handling 3
This commit is contained in:
@@ -611,29 +611,32 @@ class ProductController extends SuperController
|
||||
|
||||
if (!Product::hasOrderLimitColumns()) {
|
||||
unset($data['order_limit_enabled'], $data['min_order_cash'], $data['max_order_cash']);
|
||||
} elseif (empty($data['order_limit_enabled'])) {
|
||||
$data['order_limit_enabled'] = false;
|
||||
$data['min_order_cash'] = null;
|
||||
$data['max_order_cash'] = null;
|
||||
} else {
|
||||
$min = $data['min_order_cash'] ?? null;
|
||||
$max = $data['max_order_cash'] ?? null;
|
||||
$hasMin = $min !== null && $min !== '';
|
||||
$hasMax = $max !== null && $max !== '';
|
||||
$min = $this->normalizeOrderLimitCash($data['min_order_cash'] ?? null);
|
||||
$max = $this->normalizeOrderLimitCash($data['max_order_cash'] ?? null);
|
||||
$orderLimitEnabled = filter_var($data['order_limit_enabled'] ?? false, FILTER_VALIDATE_BOOLEAN)
|
||||
|| $min !== null
|
||||
|| $max !== null;
|
||||
|
||||
if (!$hasMin && !$hasMax) {
|
||||
throw new UnprocessableEntityHttpException(
|
||||
'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود'
|
||||
);
|
||||
if (!$orderLimitEnabled) {
|
||||
$data['order_limit_enabled'] = false;
|
||||
$data['min_order_cash'] = null;
|
||||
$data['max_order_cash'] = null;
|
||||
} else {
|
||||
if ($min === null && $max === null) {
|
||||
throw new UnprocessableEntityHttpException(
|
||||
'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود'
|
||||
);
|
||||
}
|
||||
|
||||
if ($min !== null && $max !== null && $min > $max) {
|
||||
throw new UnprocessableEntityHttpException('حداقل مبلغ نمیتواند بیشتر از حداکثر باشد');
|
||||
}
|
||||
|
||||
$data['order_limit_enabled'] = true;
|
||||
$data['min_order_cash'] = $min;
|
||||
$data['max_order_cash'] = $max;
|
||||
}
|
||||
|
||||
if ($hasMin && $hasMax && (float) $min > (float) $max) {
|
||||
throw new UnprocessableEntityHttpException('حداقل مبلغ نمیتواند بیشتر از حداکثر باشد');
|
||||
}
|
||||
|
||||
$data['order_limit_enabled'] = true;
|
||||
$data['min_order_cash'] = $hasMin ? (int) $min : null;
|
||||
$data['max_order_cash'] = $hasMax ? (int) $max : null;
|
||||
}
|
||||
|
||||
if (!Product::hasShowInAssetsColumn()) {
|
||||
@@ -704,4 +707,39 @@ class ProductController extends SuperController
|
||||
|
||||
return (float) $value;
|
||||
}
|
||||
|
||||
private function normalizeOrderLimitCash(mixed $value): ?int
|
||||
{
|
||||
if ($value === null || $value === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (is_int($value)) {
|
||||
return $value >= 0 ? $value : null;
|
||||
}
|
||||
|
||||
if (is_float($value)) {
|
||||
return $value >= 0 ? (int) $value : null;
|
||||
}
|
||||
|
||||
if (! is_string($value)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$value = $this->normalizeAsciiDigits(trim(str_replace([' ', ',', '٬'], '', $value)));
|
||||
if ($value === '' || ! ctype_digit($value)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (int) $value;
|
||||
}
|
||||
|
||||
private function normalizeAsciiDigits(string $value): string
|
||||
{
|
||||
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
|
||||
$arabic = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
|
||||
$latin = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
|
||||
|
||||
return str_replace(array_merge($persian, $arabic), array_merge($latin, $latin), $value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user