all(); $customer = Customer::findOrFail($data['customer_id']); $deposit = false; if ($data['value'] > 0) { $deposit = true; } $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); 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) { $value = $data['value']; foreach ($orders as $order) { if ($value < $order->payment_remind) { $order->payment_amount += $value; $order->payment_remind -= $value; $order->save(); break; } else { $value -= $order->payment_remind; $order->payment_amount = $order->total_price; $order->payment_remind = 0; $order->sts = 2; $gold_block -= $order->amount; $order->save(); } } } $user = auth()->user(); $customer = Customer::findOrFail($data["customer_id"]); $Withdraw = Withdraw::create([ 'user_id' => $user->id, 'customer_id' => $customer->id, "cash" => $data['value'], 'sts' => 4, ]); new TransactionInterface($wallet_interface, $_inp = [ 'cash' => $data['value'], 'expire_at' => now(), 'withdraw_id' => $Withdraw->id, 'active' => true ], 3, false, true, $gold_block); $message = 'کیف پول شما به مبلغ ' . $data['value'] . " ریال در تاریخ " . verta()->format('Y/n/j H:i:s') . " شارژ شد " . "\n" . $this->Config('name_fa'); $this->Send($customer->mobile, $message); return response()->json(true); } public function charge(Request $request) { $data = $request->all(); $customer = Customer::findOrFail($data['customer_id']); $deposit = false; if ($data['value'] > 0) { $deposit = true; } $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); 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; $user = auth()->user(); $customer = Customer::findOrFail($data["customer_id"]); $Withdraw = Withdraw::create([ 'user_id' => $user->id, 'customer_id' => $customer->id, "cash" => $data['value'], "note" => $data['note'], 'sts' => 4, ]); new TransactionInterface($wallet_interface, $_inp = [ 'gold' => 0, 'cash' => $data['value'], 'expire_at' => now(), "note" => $data['note'], 'withdraw_id' => $Withdraw->id, 'active' => true ], 7, true, $deposit, $gold_block); if(Setting::where('key', 'send_to_tahesab')->first()->value == "true"){ try { $data['direction'] = 0; $tahesab = new TahesabController(); $tahesab->wallet($data); }catch (\Exception $e){ return response($e->getMessage(), 500); } } $status = $data['value'] > 0 ?" شارژ شد ": " کسر شد "; $message = 'کیف پول شما به اندازه ' . number_format(abs($data['value'])) . " ریال در تاریخ " . verta()->format('Y/n/j H:i:s') .$status . "بابت" . "\n" . $data['note'] . "\n" . $this->Config('name_fa'); $this->Send($customer->mobile, $message); return response()->json(true); } public function charge_gold(Request $request) { $data = $request->all(); $customer = Customer::findOrFail($data['customer_id']); $deposit = false; if ($data['value'] > 0) { $deposit = true; } $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); // 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"]); $Withdraw = Withdraw::create([ 'user_id' => $user->id, 'customer_id' => $customer->id, "gold" => $data['value'], "note" => $data['note'], 'sts' => 4, ]); new TransactionInterface($wallet_interface, $_inp = [ 'cash' => 0, 'gold' => $data['value'], 'expire_at' => now(), "note" => $data['note'], 'withdraw_id' => $Withdraw->id, 'active' => true ], 7, $deposit, false, $gold_block); $message = 'کیف پول شما به اندازه ' . $data['value'] . " گرم در تاریخ " . verta()->format('Y/n/j H:i:s') . " شارژ شد بابت" . "\n" . $data['note'] . $this->Config('name_fa'); $this->Send($customer->mobile, $message); return response()->json(true); } public function index(Request $request) { $records = Transaction::with(['customer'])->whereNull('fund_id'); TableEngine::create($records, $request->all()) ->initSearch(['order_id', 'customer.name']) ->select([ '*', Transaction::$SELECT_CAJ, Transaction::$SELECT_TYPE_STR, Transaction::$SELECT_SAJ, Transaction::$SELECT_EAJ ])->export($records); // foreach ($records['rows'] as &$record) { // if (empty($record->title) or $record->title == "تعریف نشده"){ // $record->title = $record->type_str ; // $record->unit = "گرم"; // if (isset($record->wallet)) { // $wallet = Wallet::with('product')->where('id',$record->wallet)->first(); // if (isset($wallet->product)) { // if ($record->gold > 0){ // $record->title = " خرید " ; // // }else{ // $record->title = " فروش " ; // // } // $record->title .= $wallet->product->title ; // $record->unit = "عدد"; // // } // } // $record->save(); // } // // } return response()->json($records); } public function updateTransaction(Request $request) { $message = 'تراکنش تغیری نکرده.'; $transaction = Transaction::find($request->id); $product = Product::find($transaction->product_id); if (!$transaction) return response()->json(['error' => 'تراکنش یافت نشد.'], 404); $difference = $request->input('number') - $transaction->number; if (abs($difference) < 0.0001) { return response()->json(['message' => $message], 422); } $transaction->number = $request->input('number'); $wallet_interface = new WalletInterface($transaction->customer_id, 2); if ($wallet_interface->wallet->gold < $difference ) { if (!(isset($request->force) && $request->force === true)){ return response()->json(['message' => "کاربر مورد نظر موجودی ندارد. موجودی فعلی: " . $wallet_interface->wallet->gold . " مقدار مورد نیاز: " . $difference,'type'=>406],422); } } $isDiposit = $difference > 0 ? 0 : 1; new TransactionInterface($wallet_interface, [ "title" => "اصلاح سند " . $transaction->withdraw_id, "note" => $product->title, "product_id" => $product->id, "number" => 0, "gold" => $difference, 'expire_at' => now(), 'active' => true, 'withdraw_id' => $transaction->withdraw_id, 'start_at' => now(), ], 51, $isDiposit, false); $transaction->save(); $message = 'تراکنش با موفقیت به‌روزرسانی شد.'; return response()->json([ 'message' => $message, 'transaction' => $transaction, // 'previous_amount' => $previousAmount, // 'new_amount' => $newAmount, 'difference' => $difference, 'wallet' => $wallet_interface->wallet, ]); } public function indexWallet(Request $request) { // محاسبه‌ی مجموع gold و cash به ازای هر owner $records = Wallet::with('customer'); // ایجاد جدول با استفاده از TableEngine TableEngine::create($records, $request->all()) ->initSearch(['customer.name']) ->select(['*']) ->export($records); // محاسبه‌ی قیمت آخرین قیمت و مجموع کلی مقادیر gold و cash $lastPrice = Price::latest()->first()->price; $walletQuery = Wallet::where('owner', '!=', 4)->where('product_id', null); $sums = [ "gold" => round($walletQuery->sum('gold'), 2), "goldToCash" => round($walletQuery->sum('gold') * $lastPrice, 2), "cash" => round($walletQuery->sum('cash'), 2), "cashToGold" => round($walletQuery->sum('cash') / $lastPrice, 2), ]; // $sums = [ // "gold" => round(Wallet::whereNot('owner', 4)->sum('gold'), 2), // "goldToCash" => round(Wallet::sum('gold') * $lastPrice, 2), // "cash" => round(Wallet::sum('cash'), 2), // "cashToGold" => round(Wallet::sum('cash') / $lastPrice, 2), // "on" => $lastPrice, // ]; // افزودن sums به records $records['sums'] = $sums; return response()->json($records); } public function indexWithdraw(Request $request) { $records = Withdraw::with(['customer', 'bank_account', 'Address', "Transaction"]); TableEngine::create($records, $request->all()) ->initSearch(['customer.name']) ->select([ '*', Withdraw::$SELECT_STS_STR, Withdraw::$SELECT_DAJ ])->export($records); return response()->json($records); } public function updateWithdraw(Request $request, $id) { // پیدا کردن رکورد Withdraw با استفاده از شناسه $withdraw = Withdraw::find($id); // بررسی وجود رکورد if (!$withdraw) { return response()->json(['error' => 'Withdraw not found'], 404); } $withdraw->sts = $request->sts; $withdraw->save(); return response()->json(['message' => 'Withdraw updated successfully', 'withdraw' => $withdraw]); } public function getWithdraw(Request $request, $id) { // پیدا کردن رکورد Withdraw با استفاده از شناسه return $withdraw = Withdraw::with(['customer', 'bank_account', 'Address', "Transaction"])->find($id); // بررسی وجود رکورد if (!$withdraw) { return response()->json(['error' => 'Withdraw not found'], 404); } $withdraw->sts = $request->sts; $withdraw->save(); return response()->json(['message' => 'Withdraw updated successfully', 'withdraw' => $withdraw]); } public function completeWithdraw(Request $request) { $data = $request->all(); $data['user_id'] = auth('user')->id(); $data['sts'] = 2; $data['date_at'] = now(); Withdraw::findOrFail($data['id'])->update($data); $withdraw = Withdraw::findOrFail($data['id']); $withdraw->update($data); // $tahesab = new TahesabController(); // $tahesab->wallet([ // 'customer_id' => $withdraw->customer_id, // 'value' => $withdraw->cash, // 'direction' => 1, // 'note' => 'برداشت از کیف پول شماره ' . $withdraw->id, // ]); return response()->json(true); } }