diff --git a/app/Http/Controllers/Admin/WalletController.php b/app/Http/Controllers/Admin/WalletController.php index 1ff160f..604f7fe 100644 --- a/app/Http/Controllers/Admin/WalletController.php +++ b/app/Http/Controllers/Admin/WalletController.php @@ -33,14 +33,14 @@ class WalletController extends Controller if ($data['value'] > 0) { $deposit = true; } - $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $wallet_interface = new WalletInterface($data['customer_id'], (int) $customer->type); + $wallet = $wallet_interface->wallet; if (is_null($wallet) && !$deposit) { throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); } if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); } - $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); $orders = Order::where('customer_id', $data['customer_id'])->where('sts', 1)->get(); $gold_block = 0; if (count($orders) > 0) { @@ -91,14 +91,14 @@ class WalletController extends Controller if ($data['value'] > 0) { $deposit = true; } - $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $wallet_interface = new WalletInterface($data['customer_id'], (int) $customer->type); + $wallet = $wallet_interface->wallet; if (is_null($wallet) && !$deposit) { throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); } if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); } - $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); $orders = Order::where('customer_id', $data['customer_id'])->where('sts', 1)->get(); $gold_block = 0; @@ -160,14 +160,14 @@ class WalletController extends Controller $deposit = true; } - $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $wallet_interface = new WalletInterface($data['customer_id'], (int) $customer->type); + $wallet = $wallet_interface->wallet; // if (is_null($wallet) && !$deposit) { // throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); // } // if (!is_null($wallet) && $wallet->cash < abs($data['value']) && !$deposit) { // throw new UnprocessableEntityHttpException('مقدار موجودی کمتر از درخواست شماست'); // } - $wallet_interface = new WalletInterface($data['customer_id'], $customer->type); $gold_block = 0; $user = auth()->user(); $customer = Customer::findOrFail($data["customer_id"]); diff --git a/app/Http/Controllers/Customer/OrderController.php b/app/Http/Controllers/Customer/OrderController.php index a199a62..a0d70b9 100644 --- a/app/Http/Controllers/Customer/OrderController.php +++ b/app/Http/Controllers/Customer/OrderController.php @@ -42,9 +42,8 @@ class OrderController extends Controller throw new UnprocessableEntityHttpException('امکان سفارش برای شما غیرفعال است.'); } app(ConfigService::class)->assertTradingOpen(); - $wallet = Wallet::where('owner',auth('customer')->id())->whereNull('fund_id') - ->first(); - $wallet_interface = new WalletInterface($data['customer_id'], 1); + $wallet_interface = new WalletInterface($data['customer_id'], (int) $customer->type); + $wallet = $wallet_interface->wallet; if ($data['direction'] == 1){ // $order = Order::where('customer_id',auth('customer')->id())->where('sts',1)->first(); // if (!is_null($order)){ diff --git a/app/Http/Controllers/Single/SingleOrderController.php b/app/Http/Controllers/Single/SingleOrderController.php index 58a87ba..8c325f6 100644 --- a/app/Http/Controllers/Single/SingleOrderController.php +++ b/app/Http/Controllers/Single/SingleOrderController.php @@ -111,8 +111,9 @@ class SingleOrderController extends Controller $data['price_original'] = $data['price']; $data['payment_remind'] = 0; $data['fee'] = $data['difference']; - $wallet_interface = new WalletInterface($data['customer_id'], 2); - $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $ownerType = (int) ($customer?->type ?? 2); + $wallet_interface = new WalletInterface($data['customer_id'], $ownerType); + $wallet = $wallet_interface->wallet; if (!$wallet) { throw new UnprocessableEntityHttpException('کیف پول یافت نشد.'); } @@ -668,8 +669,9 @@ class SingleOrderController extends Controller $data['payment_sts'] = 4; $data['price_original'] = $data['price']; $add_sell_price = config('add_sell_price.single'); - $wallet_interface = new WalletInterface($data['customer_id'], 2); - $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); + $customer = Customer::findOrFail($data['customer_id']); + $wallet_interface = new WalletInterface($data['customer_id'], (int) $customer->type); + $wallet = $wallet_interface->wallet; $data['total_price_original'] = $data['amount'] * $data['price_original']; $data['payment_remind'] = 0; $data['fee'] = $add_sell_price; @@ -732,16 +734,16 @@ class SingleOrderController extends Controller $this->Send($admin->mobile, $message); }); - $Walet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); - $companyName = $this->Config('name_fa'); + $mainWallet = Wallet::where('owner', $data['customer_id']) + ->where('owner_type', $customer->type) + ->main() + ->first(); $companyurl = $this->Config('app_url'); $weight = $data['amount']; - $totalAmount = $data['total_price']; - $pricePerGram = $totalAmount / $weight; - - $goldBalance = $Walet->gold; - $remainingBalance = $Walet->cash; + $pricePerGram = $weight > 0 ? $totalAmount / $weight : 0; + $goldBalance = $mainWallet->gold ?? 0; + $remainingBalance = $mainWallet->cash ?? 0; $message = "$companyName\n"; $message .= "خرید آبشده\n"; diff --git a/app/Http/Controllers/Site/RequestsController.php b/app/Http/Controllers/Site/RequestsController.php index 0fa9181..413437e 100644 --- a/app/Http/Controllers/Site/RequestsController.php +++ b/app/Http/Controllers/Site/RequestsController.php @@ -47,8 +47,9 @@ class RequestsController extends Controller $data['total_fee'] = $data['amount'] * $data['difference']; $myCustomer = Customer::find($customer_id); - $wallet_interface = new WalletInterface($customer_id, 2); - $wallet = Wallet::where('owner', $customer_id)->whereNull('fund_id')->first(); + $ownerType = (int) ($myCustomer?->type ?? 2); + $wallet_interface = new WalletInterface($customer_id, $ownerType); + $wallet = $wallet_interface->wallet; $response = []; diff --git a/packages/rooyesh/wallet/src/models/Wallet.php b/packages/rooyesh/wallet/src/models/Wallet.php index 088ef59..f1d1e88 100644 --- a/packages/rooyesh/wallet/src/models/Wallet.php +++ b/packages/rooyesh/wallet/src/models/Wallet.php @@ -24,4 +24,10 @@ class Wallet extends Model { return $this->belongsTo('App\Models\Product','product_id'); } + + /** کیف اصلی مشتری — بدون fund و بدون product */ + public function scopeMain($query) + { + return $query->whereNull('fund_id')->whereNull('product_id'); + } }