all(); $data['is_katod'] = ($data['method'] ?? null) === 'katod'; if ($data['is_katod']) { $data['method'] = 'gold'; } $config = app(ConfigService::class); $toBool = function ($value) { return filter_var($value, FILTER_VALIDATE_BOOLEAN); }; if ($config->usesMontzarPricing()) { $montzar_closed = $toBool($config->Config('montzar_closed')); $montzar_buy = !$toBool($config->Config('montzar_open_buy')) && (int) $data['direction'] === 1; $montzar_sell = !$toBool($config->Config('montzar_open_sell')) && (int) $data['direction'] === 2; if ($montzar_closed || $montzar_buy || $montzar_sell) { throw new UnprocessableEntityHttpException('عدم ارائه سرویس.'); } } if ($toBool($config->Config('close_price'))) { if (Cnt::where('key', 'app_closed')->value('value') == "true") { throw new UnprocessableEntityHttpException('عدم ارائه سرویس.'); } } // throw new UnprocessableEntityHttpException('به دلیل نوسانات سفارشات بسته میباشد.'); $transactionType = $data['direction'] == 1 ? "خرید" : "فروش"; if (auth('customer')->id()) { $data['customer_id'] = auth('customer')->id(); $latestPrice = Price::latest()->first(); if (!$latestPrice || $latestPrice->price == 0) { throw new UnprocessableEntityHttpException('عدم ارائه سرویس.'); } $data['all_price'] = $latestPrice; $data['price'] = $latestPrice->price; $data['price_id'] = $latestPrice->id; $feeCash = Setting::where('key', 'fee_cash')->first(); $feeServiceCharge = Setting::where('key', 'fee_service_charge_percentage')->first(); if (!$feeCash || !$feeServiceCharge) { throw new UnprocessableEntityHttpException('تنظیمات کارمزد یافت نشد.'); } $data['difference'] = (float) $feeCash->value; $data['service_charge_percentage'] = (float) $feeServiceCharge->value; $fee_free = Setting::where('key', 'fee_free')->where('is_active', true)->value('value'); if ($fee_free && $this->feeFree($data['customer_id'], $fee_free)) { $data['service_charge_percentage'] = 0; // $data['difference'] = 0; $data['fee_free'] = true; } $data['pay_at'] = (new \DateTime())->format('Y-m-d H:i:s'); } else if (auth('user')->id()) {//admin $data['service_charge_percentage'] = 0; } if($data['price'] === 0){ throw new UnprocessableEntityHttpException(' سفارشات بسته میباشد.'); } $data['sts'] = 2; $data['type'] = 2; $data['payment_sts'] = 4; $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(); if (!$wallet) { throw new UnprocessableEntityHttpException('کیف پول یافت نشد.'); } $response = []; // Check if the user wants to transact with a product or non-product (gold) if (isset($data['product_id']) and $data['product'] = Product::find($data['product_id'])) { // Check if the user wants to buy if ($data['direction'] == 1) { $data['service_charge_percentage'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_buy']) * $data['number']; $data['difference'] = $data['fee'] = $data['product']['cash_fee_buy']; $data['total_fee'] = $data['number'] * $data['fee']; $data['price_original'] = $data['product']['price'] + $data['product']['price_profit']; $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); // Check if the method is cash if ($data['method'] == "cash") { $response['buy'] = $this->processBuyTransactionProduct($data, $wallet, $wallet_interface); } // Check if the method is gold else if ($data['method'] == "gold") { $response['buy'] = $this->processBuyTransactionProductByGold($data, $wallet, $wallet_interface); } else { throw new UnprocessableEntityHttpException('روش پرداخت نامعتبر است.'); } } // Check if the user wants to sell else if ($data['direction'] == 2) { $data['service_charge_percentage'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_sell']) * $data['number']; $data['difference'] = $data['fee'] = $data['product']['cash_fee_sell']; $data['total_fee'] = $data['number'] * $data['fee']; $data['price_original'] = $data['product']['price'] + $data['product']['price_profit']; $data['total_price_original'] = $data['product']['amount'] * ($data['price_original'] ?? 0); // Check if the method is cash if ($data['method'] == "cash") { $response['sell'] = $this->processSellTransactionProduct($data, $wallet, $wallet_interface); } // Check if the method is gold else if ($data['method'] == "gold") { $response['sell'] = $this->processSellTransactionProductByGold($data, $wallet, $wallet_interface); } else { throw new UnprocessableEntityHttpException('روش پرداخت نامعتبر است.'); } } } else { // Calculate total price and fee for non-product (gold) transaction $data['total_price_original'] = $data['amount'] * ($data['price_original'] ?? 0); $mainProductId = Cnt::where('key', 'main_product')->value('value'); $productId = $data['abshode_id'] ?? $data['product_id'] ?? $mainProductId; $data['product'] = $productId ? Product::find($productId) : null; if (!$data['product']) { throw new UnprocessableEntityHttpException('محصول آبشده یافت نشد.'); } if ($data['direction'] == 1) { $data['difference'] = $data['product']['cash_fee_buy']; $data['service_charge_percentage'] = $data['product']['percent_fee_buy']; } elseif ($data['direction'] == 2) { $data['difference'] = $data['product']['cash_fee_sell']; $data['service_charge_percentage'] = $data['product']['percent_fee_sell']; } $data['total_fee'] = $data['amount'] * $data['difference']; $data['product_id'] = $data['product']->id; // Check if the user wants to buy if ($data['direction'] == 1) { if (!$data['product']['open_buy']) { throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); } $response['buy'] = $this->processBuyTransaction($data, $wallet, $wallet_interface); } // Check if the user wants to sell else if ($data['direction'] == 2) { if (!$data['product']['open_sell']) { throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); } $response['sell'] = $this->processSellTransaction($data, $wallet, $wallet_interface); } } if ($config->getString('send_to_tahesab', 'false') === 'true') { try { $tahesab = new TahesabController(); $data['tahesab'] = $tahesab->storeTrade($data); } catch (\Exception $e) { return response($e->getMessage(), 500); } } // $response['reward'] = $this->give_order_reward($data, $wallet, $wallet_interface); if (isset($data['order'])) { $response['Notifications'] = $this->sendTransactionNotifications($data, $transactionType); } return response()->json([$response, $data]); } private function processBuyTransaction(&$data, $wallet, $wallet_interface) { $response = []; $data['price'] += $data['difference']; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : $data['service_charge_percentage'] * $data['amount']; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['amount'] -= $data['service_charge']; if ($wallet->cash < $data['payment_amount']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $data['order'] = $order = Order::create($data); new TransactionInterface($wallet_interface, [ "cash" => $data['payment_amount'], "gold" => $data['amount'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), 'title' => self::meltedGoldBuyTitle(), ], 1, true, false); $response['1'] = 2; //send to provider $this->sendProviderOrder($data, $wallet_interface, (int) $data['direction']); return $response; } private function processBuyTransactionProduct(&$data, $wallet, $wallet_interface) { $data['price'] = $data['product']['price'] + $data['product']['price_profit']; $data['price'] += $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount'] + ($data['product']['percent_fee_buy'] * $data['amount']); $data['total_price'] = $data['total_amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_buy'] * $data['amount']); $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['wallet'] = $wallet; if ($wallet->cash < $data['payment_amount']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } if (!$data['product']['open_buy']) { throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); } $data['order'] = $order = Order::create($data); $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ "number" => $data['number'], "cash" => $data['total_price'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'title' => "برداشت وجه نقد" ], 12, false, false); $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); $wallet_interface_product->wallet->save(); new TransactionInterface($wallet_interface_product, [ "gold" => $data['number'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), 'title' => self::productBuyTitle($data['product']['title'] ?? ''), ], 1, true, false); } private function processBuyTransactionProductByGold(&$data, $wallet, $wallet_interface) { $data['price'] += $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount'] + ($data['product']['percent_fee_buy'] * $data['amount']); $data['total_price'] = $data['total_amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_buy'] * $data['amount']); $data['total_fee'] = 0; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['wallet'] = $wallet; if ($wallet->gold < $data['total_amount']) { throw new UnprocessableEntityHttpException($this->insufficientGoldBalanceMessage($data)); } if (!$data['product']['open_buy']) { throw new UnprocessableEntityHttpException('خرید این محصول در این لحظه مقدور نمیباشد'); } $data['order'] = $order = Order::create($data); $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ "number" => $data['number'], "gold" => $data['total_amount'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'title' => self::productBuyTitle($data['product']['title'] ?? '') ], 12, false, true); $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); $wallet_interface_product->wallet->save(); new TransactionInterface($wallet_interface_product, [ "gold" => $data['number'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), 'title' => self::productBuyTitle($data['product']['title'] ?? ''), ], 1, true, false); } private function processSellTransaction(&$data, $wallet, $wallet_interface) { $response = []; $data['price'] -= $data['difference']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : $data['service_charge_percentage'] * $data['amount']; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $data['total_price'] = $data['amount'] * $data['price'] - $data['service_charge_price']; $data['payment_amount'] = $data['total_price']; $data['payment_amount'] -= $data['service_charge_price']; if ($wallet->gold < $data['amount']) { throw new UnprocessableEntityHttpException($this->insufficientGoldBalanceMessage($data)); } $data['order'] = $order = Order::create($data); new TransactionInterface($wallet_interface, [ "gold" => $data['amount'], "cash" => $data['total_price'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'title' => self::meltedGoldSellTitle(), ], 2, false, true); //send to Goldir $this->sendProviderOrder($data, $wallet_interface, (int) $data['direction']); } private function processSellTransactionProduct(&$data, $wallet, $wallet_interface) { $data['price'] = $data['product']['price'] + $data['product']['price_profit']; $data['price'] -= $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount'] - ($data['product']['percent_fee_sell'] * $data['amount']); $data['total_price'] = $data['total_amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_sell'] * $data['amount']); $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); if ($wallet_interface_product->wallet->gold < $data['number']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } if (!$data['product']['open_sell']) { throw new UnprocessableEntityHttpException('فروش این محصول در این لحظه مقدور نمیباشد'); } $data['order'] = $order = Order::create($data); $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); $wallet_interface_product->wallet->save(); new TransactionInterface($wallet_interface_product, [ "gold" => $data['number'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), 'title' => self::productSellTitle($data['product']['title'] ?? ''), ], 1, false, false); $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ "number" => $data['number'], "cash" => $data['total_price'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'title' => "واریز وجه نقد" ], 12, false, true); } private function processSellTransactionProductByGold(&$data, $wallet, $wallet_interface) { $data['price'] -= $data['difference']; $data['amount'] = $data['number'] * $data['product']['amount']; $data['total_amount'] = $data['amount'] - ($data['product']['percent_fee_sell'] * $data['amount']); $data['total_price'] = $data['total_amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; $data['service_charge'] = isset($data['fee_free']) && $data['fee_free'] === true ? 0 : ($data['product']['percent_fee_sell'] * $data['amount']); $data['total_fee'] = 0; $data['service_charge_price'] = $data['service_charge'] * $data['price_original']; $wallet_interface_product = new WalletInterface(auth('customer')->id(), auth('customer')->user()->type, null, $data["product_id"]); if ($wallet_interface_product->wallet->gold < $data['number']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } if (!$data['product']['open_sell']) { throw new UnprocessableEntityHttpException('فروش این محصول در این لحظه مقدور نمیباشد'); } $data['order'] = $order = Order::create($data); $data['transaction'][] = new TransactionInterface($wallet_interface, $_inp = [ "number" => $data['number'], "gold" => $data['total_amount'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'title' => self::productSellTitle($data['product']['title'] ?? '') ], 12, true, false); $wallet_interface_product->wallet->gold = intval($wallet_interface_product->wallet->gold); $wallet_interface_product->wallet->save(); new TransactionInterface($wallet_interface_product, [ "gold" => $data['number'], "product_id" => $data["product_id"], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), 'title' => self::productSellTitle($data['product']['title'] ?? ''), ], 1, false, false); } private function give_order_reward(&$data, $wallet, $wallet_interface) { $data['aCustomers'] = []; $i = 0; $data['aCustomers'][$i] = Customer::findOrFail($data['customer_id']); while ($data['aCustomers'][$i + 1] = Customer::where('referral_id', $data['aCustomers'][$i]->referral_to_id)->first()) { if ($data['aCustomers'][$i + 1]->profit_amount_by_lvl) { $levels = json_decode(str_replace(['{', '}'], ['[', ']'], $data['aCustomers'][$i + 1]->profit_amount_by_lvl), true); foreach ($levels as $level) { if ($level[0] == $i + 1) { // [$level[1],$data['aCustomers'][$i+1]]; if ($this->Config('has_page_earn_money') == true) { $gift_for_invite = ($data['order']['service_charge'] * $level[1]) / 100; $profit_receiver = $data['aCustomers'][$i + 1]->id; $profit_sender = $data['aCustomers'][0]->id; $Withdraw = Withdraw::create([ 'user_id' => $profit_sender, 'customer_id' => $profit_receiver, "cash" => 0, "gold" => $gift_for_invite, 'sts' => 9, ]); $wallet_interface = new WalletInterface($profit_receiver, 2); new TransactionInterface($wallet_interface, $_inp = [ "cash" => 0, "gold" => $gift_for_invite, 'expire_at' => now(), 'active' => true, 'withdraw_id' => $Withdraw->id, 'start_at' => now(), ], 9, true, false); $transaction = Transaction::where('customer_id', $profit_receiver)->latest()->first(); TransactionsAdmin::create([ 'customer_id' => $profit_sender, 'customer_to_id' => $profit_receiver, 'user_id' => $profit_sender, 'order_id' => $data['order']['id'], 'wallet' => null, // یا مقدار مناسب دیگری 'transaction_id' => $transaction->id, 'cash' => 0, 'note' => ' سود بابت سفارش', 'type' => 1, // یا مقدار مناسب دیگری 'gold' => $gift_for_invite, 'balance_cash' => 0, // یا مقدار مناسب دیگری 'balance_gold' => $gift_for_invite, // مقدار صحیح برای `balance_gold` 'withdraw_id' => $Withdraw->id, ]); } } } } if ($i == 100) break; $i++; // برای جلوگیری از حلقه بی‌نهایت } return $data; } private function sendTransactionNotifications(array $data, string $transactionType) { $customer = Customer::findOrFail($data['customer_id']); $companyName = $this->Config('name_fa'); $amount = $data['amount'] ?? ( isset($data['number'], $data['product']['amount']) ? $data['number'] * $data['product']['amount'] : 0 ); $totalPrice = $data['total_price'] ?? ($data['payment_amount'] ?? 0); $subjectTitle = $this->transactionSubjectTitle($data); $message = "کاربر {$customer->name} با شماره موبایل {$customer->mobile} اقدام به $transactionType {$subjectTitle} به مقدار " . "{$amount} گرم به مبلغ " . number_format($totalPrice) . " ریال کرد. با تشکر، $companyName"; User::where('send_sms', 1)->get()->each(function ($admin) use ($message, $data, $transactionType, $companyName) { $this->send($admin->mobile, $message); }); $wallet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); $balanceLabel = self::metalTypeLabel(); // $pricePerGram = $totalPrice / $amount; $customerMessage = "$companyName\n$transactionType {$subjectTitle}\nگرم: {$amount}\n" . "مبلغ کل: " . number_format($totalPrice) . "\n\n" . "موجودی {$balanceLabel}: {$wallet->gold}\n" . "مانده ریالی: " . number_format($wallet->cash) . "\n" . $this->Config('app_url'); // ارسال SMS به مشتری $this->send($customer->mobile, $customerMessage); } private function sendProviderOrder(array &$data, $wallet_interface, int $direction) { if (app(\App\Services\ConfigService::class)->usesMontzarPricing()) { try { return app(MontzarService::class)->sendOrder($data); } catch (UnprocessableEntityHttpException $e) { $this->rollbackProviderFailedOrder($data, $wallet_interface, $direction); throw $e; } catch (\Throwable $e) { $this->rollbackProviderFailedOrder($data, $wallet_interface, $direction); throw new UnprocessableEntityHttpException( 'خطا در ثبت سفارش ارائه دهنده: ' . $e->getMessage() ); } } return null; } private function rollbackProviderFailedOrder(array $data, $wallet_interface, int $direction): void { $order = $data['order'] ?? null; if (!$order instanceof Order) { return; } if ($direction === 1) { new TransactionInterface($wallet_interface, [ 'cash' => $data['payment_amount'], 'gold' => $data['amount'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), ], 2, false, true); } else { new TransactionInterface($wallet_interface, [ 'gold' => $data['amount'], 'cash' => $data['total_price'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, ], 1, true, false); } $order->delete(); } public function storeBackUp(Request $request) { $data = $request->all(); if (auth('customer')->id()) {// متد در پنل کاربر $data['customer_id'] = auth('customer')->id(); $data['price'] = Price::orderBy('id', 'desc')->first()->price; } elseif (auth('user')->user()) {// متد در پنل ادمین $data['customer_id'] = $request->customer_id; $data['price'] = $request->price; } $data['sts'] = 2; $data['type'] = 2; $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(); $data['total_price_original'] = $data['amount'] * $data['price_original']; $data['payment_remind'] = 0; $data['fee'] = $add_sell_price; $data['total_fee'] = $data['amount'] * $data['fee']; if ($data['direction'] == 1) { $data['price'] += $add_sell_price; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; if ($wallet->cash < $data['total_price']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $order = Order::create($data);//buy new TransactionInterface($wallet_interface, $_inp = [ "cash" => $data['total_price'], "gold" => $data['amount'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id, 'start_at' => now(), ], 1, true, false); } else {//sell $data['price'] -= $add_sell_price; $data['total_price'] = $data['amount'] * $data['price']; $data['payment_amount'] = $data['total_price']; if ($wallet->gold < $data['amount']) { throw new UnprocessableEntityHttpException('موجودی شما کمتر از میزان سفارش است'); } $order = Order::create($data); new TransactionInterface($wallet_interface, $_inp = [ "gold" => $data['amount'], "cash" => $data['total_price'], 'expire_at' => now(), 'active' => true, 'order_id' => $order->id ], 2, false, true); } //----------------------------------------------------------------------------sms // Determine transaction type $transactionType = ($data['direction'] == 1) ? "خرید" : "فروش"; // User information $customer = Customer::where("id", $data['customer_id'])->firstOrFail(); $userMobile = $customer->mobile; // User's mobile number $userName = $customer->name; // User's name $chargedAmount = $data['total_price']; // Total price in Rial $chargedAmountGold = $data['amount']; // Amount of gold // Company name $companyName = $this->Config('name_fa'); // Company name from configuration // Constructing the SMS message $message = "کاربر $userName با شماره موبایل $userMobile اقدام به $transactionType طلا به مقدار " . $chargedAmountGold . " گرم به مبلغ " . number_format($chargedAmount) . " ریال کرد. با تشکر، $companyName"; // Getting admin mobile numbers and sending the SMS User::where('active', 1)->get()->each(function ($admin) use ($message) { $this->Send($admin->mobile, $message); }); $Walet = Wallet::where('owner', $data['customer_id'])->whereNull('fund_id')->first(); $companyName = $this->Config('name_fa'); $companyurl = $this->Config('app_url'); $weight = $data['amount']; $totalAmount = $data['total_price']; $pricePerGram = $totalAmount / $weight; $goldBalance = $Walet->gold; $remainingBalance = $Walet->cash; $message = "$companyName\n"; $message .= "خرید آبشده\n"; $message .= "گرم: $weight\n"; $message .= "قیمت گرم: " . number_format($pricePerGram) . "\n"; $message .= "مبلغ کل: " . number_format($totalAmount) . "\n\n"; $message .= "موجودی طلایی: $goldBalance\n"; $message .= "مانده ریالی: " . number_format($remainingBalance) . "\n"; $message .= "$companyurl" . "\n"; $this->Send($customer->mobile, $message); return response()->json($order); } public function table(Request $request) { $records = Order::where('customer_id', auth('customer')->id()) ->where('type', 2); TableEngine::create($records, $request->all()) ->initSearch([]) ->select([ '*', Order::$SELECT_STS_STR ])->export($records); return response()->json($records); } private function feeFree($customer_id, $count) { return Order::where('customer_id', $customer_id) ->where('type', 2) ->where('sts', 2) ->where('payment_sts', 4) ->count() < (int)$count; } private function isProductOrder(array $data): bool { return !empty($data['product_id']) && !empty($data['product']['title']); } private function transactionSubjectTitle(array $data): string { if ($this->isProductOrder($data)) { return $data['product']['title']; } return self::meltedGoldLabel(); } private function insufficientGoldBalanceMessage(array $data): string { return 'موجودی ' . self::metalTypeLabel() . ' شما کمتر از میزان سفارش است'; } }