Files
boursecu_server/app/Http/Controllers/Finance/FinanceController.php
T

234 lines
9.5 KiB
PHP
Raw Normal View History

2026-01-24 14:03:11 +00:00
<?php
namespace App\Http\Controllers\Finance;
use App\Http\Controllers\Controller;
use App\Models\TransactionsAdmin;
use App\DB\Te\TableEngine;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Rooyesh\Wallet\interfaces\TransactionInterface;
use Rooyesh\Wallet\interfaces\WalletInterface;
use Rooyesh\Wallet\models\Wallet;
class FinanceController extends Controller
{
/**
* دفترکل داخلی: همه رویدادهای مالی (معامله / شارژ / پاداش و …).
* مستقل از اتصال به حسابداری بیرونی — برای همه اپ‌ها نمایان است.
*/
2026-01-24 14:03:11 +00:00
public function fall(Request $request)
{
$transactions_admins = TransactionsAdmin::with(['withdraw', 'order', 'user', 'customerTo', 'customer']);
2026-01-24 14:03:11 +00:00
TableEngine::create($transactions_admins, $request)
->initSearch(['price'])
->select(['*'])
->export($transactions_admins);
2026-06-25 23:06:29 +03:30
2026-01-24 14:03:11 +00:00
return response()->json($transactions_admins);
}
2026-06-28 15:16:39 +03:30
2026-01-24 14:03:11 +00:00
public function index()
{
$tallaPrice = Price::latest()->first();
// $talla->update_date = Verta::instance(Carbon::parse($talla->updated_at))->format('Y/n/j-H:i');
$new_customer_major = Customer::where('type',1)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3))
->count();
$new_customer_single = Customer::where('type',2)->whereDate('created_at','<=',now())->whereDate('created_at','>=',now()->subMonths(3))
->count();
$all_customer_major = Customer::where('type',1)->count();
$all_customer_single = Customer::where('type',2)->count();
$archive_customer_major = Customer::where('type',1)->where('is_archive',true)->count();
$archive_customer_single = Customer::where('type',2)->where('is_archive',true)->count();
$all_gold = Order::where('direction',2)->where('type',1)->sum('amount');// جمع طلاهایی که از مشتری خریدیم
$all_gold_single = Order::where('direction',2)->where('type',2)->sum('amount');// جمع طلاهایی که از مشتری خریدیم
$await_list = Order::where('direction',1)->where('sts',1)->get();
$best_customer_major=Order::with('customer')->where('type',1)->where('sts',2)->select('customer_id',DB::raw('sum(amount) as amount'))
->groupBy('customer_id')->limit(10)->get();
$best_customer_single=Wallet::with('customer')->whereNull('fund_id')->where('owner_type',2)->orderBy('gold','desc')->limit(10)->get();
// GT
$GT_all_customers = Customer::where('type',2)->where('is_archive',false)->count();
$GT_no_login_customers = Customer::where('type',2)->where('is_archive',false)->where('last_seen_at',null)->count();
$GT_no_valid_customers = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->count();
$GT_no_valid_customers_data = Customer::where('type',2)->where('is_archive',false)->where('is_legal',0)->get(['id','name','mobile']);
$GT_active_customers = Customer::where('type', 2)
->where('is_archive', false)
->whereIn('id', function($query) {
$query->select('owner')
->from('wallets');
})->count();
$GT_active_customers_data = Customer::where('type', 2)
->where('is_archive', false)
->whereIn('id', function($query) {
$query->select('owner')
->from('wallets');
})->get(['id','name','mobile']);
$transactions_admins = TransactionsAdmin::with(['withdraw','order',"user",'customerTo','customer'])->get();
return view('app', compact(
'GT_all_customers',
'GT_no_login_customers',
'GT_no_valid_customers',
'GT_no_valid_customers_data',
'GT_active_customers',
'GT_active_customers_data',
'transactions_admins',
'tallaPrice',
'new_customer_major',
'new_customer_single',
'all_customer_major',
'all_customer_single',
'archive_customer_major',
'archive_customer_single',
'all_gold',
'all_gold_single',
'await_list',
'best_customer_major',
'best_customer_single'
))->with('GT_deActive_customers', $GT_all_customers - $GT_active_customers)
->with('price', $tallaPrice->price);
}
public function startTransation(Request $request)
{
$user = auth()->user();
// riyal to tomman
$tomman = $request->value;
$riyal = (int)($request->value / 10);
$riyal .= 0;
$request->value = (int)($request->value / 10);
$Withdraw = Withdraw::create([
'customer_id' => auth('customer')->id(),
"cash" => $riyal,
'sts' => 1,
]);
$url = 'https://zify.ir/api/order/v2/create';
$payload = [
"payer" => [
"first_name" => $user->fname,
"last_name" => $user->lname,
"phone" => $user->mobile,
"email" => "",
"state" => $user->city,
"city" => $user->province,
"address_1" => $user->id,
"address_2" => $user->shop_name
],
"products" => [
[
"code" => "1",
"sellQuantity" => 1,
"title" => "IRR",
"amount" => $request->value,
"unlimited" => true,
"quantity" => $request->value,
"description" => "charge_account"
]
],
"returnUrl" => "https://api.gholaktala.ir/customer/charge_account_verify",
"clientRefId" => "$Withdraw->id",
"shipping_total" => 0,
"off_total" => 0,
"tax_total" => 0
];
$response = Http::withToken(env('ZIFI_TOKEN_GHOLAKTALLA'))
->post($url, $payload);
if ($response->successful()) {
$responseData = $response->json();
$orderCode = $responseData['data']['order'] ?? null;
if ($orderCode) {
$Withdraw->tracked_number = $orderCode;
$Withdraw->save();
return "https://zify.ir/order/accept/{$orderCode}";
} else {
return response()->json([
'message' => 'Order created successfully but order code is missing',
'data' => $responseData
]);
}
} else {
$response = $response->json();
return response()->json([$response][0], 422);
}
}
public function verifyTransation()
{
$Withdraw = Withdraw::with('customer')->where('id', $_GET['clientrefid'])->first();
$User = Customer::where('id', $Withdraw->customer_id)->first();
$url = 'https://zify.ir/api/order/v2/verify';
$payload = [
"order" => "$Withdraw->tracked_number",
];
$verifyResponse = Http::withToken(env('ZIFI_TOKEN_GHOLAKTALLA'))
->post($url, $payload);
$decodedResponse = json_decode($verifyResponse, true);
$verifyMessage = $decodedResponse['message'];
// return $decodedResponse['data'];
if (isset($decodedResponse['data']['refid']) || $verifyMessage == []) {
if ($Withdraw->cash == $decodedResponse['data']['amount'] * 10) {
$Withdraw->zify_code = $Withdraw->tracked_number;//ok
$Withdraw->tracked_number = $decodedResponse['data']['refid'];//ok
$Withdraw->sts = 2;//ok
$Withdraw->save();
$wallet_interface_fund = new WalletInterface($User->id, $User->type);
$transaction = new TransactionInterface($wallet_interface_fund, $_inp = [
"cash" => $decodedResponse['data']['amount'] * 10,
'expire_at' => now(),
'withdraw_id' => $_GET['clientrefid'],
'active' => true
], 3, false, true);
//----------sms
// User information
$userMobile = $Withdraw->customer->mobile; // User's mobile number
$userName = $Withdraw->customer->name; // User's name
$chargedAmount = $Withdraw->cash; // Charged amount
// Company name
$companyName = $this->Config('name_fa'); // Company name from configuration
// Constructing the SMS message
$message = "کاربر $userName با شماره موبایل $userMobile حساب خود را به مقدار " . number_format($chargedAmount) . " ریال شارژ کرد. با تشکر، $companyName";
// Getting admin mobile numbers and sending the SMS
User::where('active', 1)->get()->each(function($admin) use ($message) {
2026-07-18 22:22:01 +03:30
if (self::isSmsNotifEnabled('sms_notif_gateway_charge_admin')) {
$this->Send($admin->mobile, $message);
}
2026-01-24 14:03:11 +00:00
});
return view('showTransactionReport', compact('Withdraw'));
return redirect('https://app.gholaktala.ir/transactions');
}
return "مبلغ پرداختی دستکاری شده !";
} else {
$Withdraw->tracked_number;
$Withdraw->sts = 3;//no
$Withdraw->save();
return view('showTransactionReport', compact('Withdraw'));
}
}
}