From 381d28aae55dc4016a4596c14a053bd750e4837f Mon Sep 17 00:00:00 2001 From: adonis Date: Wed, 29 Jul 2026 19:57:32 +0330 Subject: [PATCH] fix some bugs --- .../Single/SingleOrderController.php | 11 ++++++++++ app/Services/ConfigService.php | 21 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Single/SingleOrderController.php b/app/Http/Controllers/Single/SingleOrderController.php index 854f81c..26f8574 100644 --- a/app/Http/Controllers/Single/SingleOrderController.php +++ b/app/Http/Controllers/Single/SingleOrderController.php @@ -596,6 +596,12 @@ class SingleOrderController extends Controller // سمت کسر کارمزد برای گزارش تفکیک‌شده در داشبورد $data['fee_asset'] = $rialLocked ? 'gold' : 'rial'; + if (!$rialLocked && (float) $data['total_price'] < 0) { + throw new UnprocessableEntityHttpException( + 'مبلغ دریافتی فروش پس از کارمزد منفی شد. درصد کارمزد سفارش را بررسی کنید (باید اعشاری باشد؛ مثلاً ۰٫۰۱ برای ۱٪).' + ); + } + $grossTotal = $data['amount'] * $data['price']; $this->enforceProductOrderLimits($data, (float) $grossTotal); @@ -675,6 +681,11 @@ class SingleOrderController extends Controller $data['total_price'] = $data['amount'] * $data['price'] - $data['service_charge_price']; $data['payment_amount'] = $data['total_price']; $data['fee_asset'] = 'rial'; + if ($data['total_price'] < 0) { + throw new UnprocessableEntityHttpException( + 'مبلغ دریافتی فروش پس از کارمزد منفی شد. درصد کارمزد سفارش را بررسی کنید (باید اعشاری باشد؛ مثلاً ۰٫۰۱ برای ۱٪).' + ); + } $grossTotal = (float) ($data['amount'] * $data['price']); $this->enforceProductOrderLimits($data, $grossTotal); $wallet_interface_product = $this->productWalletInterface((int) $data["product_id"]); diff --git a/app/Services/ConfigService.php b/app/Services/ConfigService.php index 0b9671a..33569c6 100644 --- a/app/Services/ConfigService.php +++ b/app/Services/ConfigService.php @@ -138,11 +138,28 @@ class ConfigService foreach (['fee_service_charge_percentage', 'service_charge_percentage'] as $key) { $raw = $this->getString($key, ''); if ($raw !== '') { - return (float) $raw; + return $this->normalizeServiceChargeRatio((float) $raw); } } - return (float) config('fee.service_charge_percentage', 0); + return $this->normalizeServiceChargeRatio((float) config('fee.service_charge_percentage', 0)); + } + + /** + * نسبت کارمزد (۰٫۰۱ = ۱٪). اگر ادمین «۱» به‌جای «۰٫۰۱» گذاشته باشد نرمال می‌شود. + */ + private function normalizeServiceChargeRatio(float $value): float + { + if ($value <= 0) { + return 0.0; + } + + // مقدار ≥۱ یعنی درصد انسانی وارد شده (۱ → ۱٪)، نه نسبت + if ($value >= 1.0) { + return $value / 100.0; + } + + return $value; } /**