Widen order price columns so current gold rial quotes persist.
Gold gram prices now exceed the old DECIMAL/INT range and MySQL 1264 aborted buys; store money fields as DECIMAL(20,4) and hide the raw SQL error from the app. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -37,5 +37,18 @@ class Handler extends ExceptionHandler
|
||||
$this->reportable(function (Throwable $e) {
|
||||
//
|
||||
});
|
||||
|
||||
$this->renderable(function (\Illuminate\Database\QueryException $e, $request) {
|
||||
if ((int) ($e->errorInfo[1] ?? 0) !== 1264) {
|
||||
return null;
|
||||
}
|
||||
if (! $request->expectsJson()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'ثبت سفارش بهخاطر محدودیت فیلد قیمت ممکن نشد. لطفاً دوباره تلاش کنید.',
|
||||
], 422);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1801,6 +1801,30 @@ class SingleOrderController extends Controller
|
||||
$data['_fee_uses_app_price'],
|
||||
$data['_fee_base_price']
|
||||
);
|
||||
|
||||
$this->roundOrderMoneyFields($data);
|
||||
}
|
||||
|
||||
/** اعداد پولی سفارش را قبل از INSERT گرد کن تا با DECIMAL(20,4) سازگار باشد. */
|
||||
private function roundOrderMoneyFields(array &$data): void
|
||||
{
|
||||
foreach ([
|
||||
'price',
|
||||
'price_original',
|
||||
'total_price',
|
||||
'total_price_original',
|
||||
'total_price_liman',
|
||||
'fee',
|
||||
'total_fee',
|
||||
'service_charge_price',
|
||||
'payment_amount',
|
||||
'payment_remind',
|
||||
] as $key) {
|
||||
if (!isset($data[$key]) || !is_numeric($data[$key])) {
|
||||
continue;
|
||||
}
|
||||
$data[$key] = round((float) $data[$key], 4);
|
||||
}
|
||||
}
|
||||
|
||||
private function bonusGift($customer, $referrer)
|
||||
|
||||
Reference in New Issue
Block a user