2026-01-24 14:03:11 +00:00
<? php
namespace App\Http\Controllers\Customer ;
use App\DB\Te\TableEngine ;
use App\Http\Controllers\Admin\CustomerController as adm_cu ;
use App\Http\Controllers\Controller ;
use App\Models\Address ;
use App\Models\Customer ;
use App\Models\User ;
use App\Models\TransactionsAdmin ;
use App\Models\Withdraw ;
use Illuminate\Http\Request ;
use Rooyesh\Wallet\interfaces\TransactionInterface ;
use Rooyesh\Wallet\interfaces\WalletInterface ;
use Rooyesh\Wallet\models\Wallet ;
use Rooyesh\Wallet\models\Transaction ;
use Illuminate\Support\Facades\Storage ;
use Illuminate\Support\Facades\Http ;
2026-01-31 09:09:32 +00:00
use App\Models\Setting ;
2026-02-08 08:02:11 +00:00
use App\Http\Controllers\Admin\TahesabController ;
2026-01-24 14:03:11 +00:00
//use App\Models\Price;
//use Carbon\Carbon;
//use Illuminate\Support\Facades\Http;
class CustomerController extends Controller
{
public function me ()
{
2026-01-31 09:09:32 +00:00
$select = [ '*' , Customer :: $SELECT_CAJ , Customer :: $SELECT_TYPE_STR ];
$user = Customer :: with ([ 'customer_settings.customer' , "agent" ]) -> select ( $select ) -> findOrFail ( auth ( 'customer' ) -> id ());
2026-01-24 14:03:11 +00:00
$wallet = Wallet :: where ( 'owner' , $user -> id )
-> where ( 'owner_type' , $user -> type )
-> whereNull ( 'fund_id' )
-> first () ?? new Wallet ();
$wallet -> gold_ab = round ( Wallet :: where ( 'owner' , $user -> id ) -> where ( 'product_id' , null ) -> sum ( 'gold' ), 2 );
$wallet -> wp = Wallet :: with ( 'product' ) -> where ( 'owner' , $user -> id ) -> get ();
foreach ( $wallet -> wp as $row ){
if ( $row -> product_id != null ){
$wallet -> treasure += $row -> product -> amount * $row -> gold ;
}
$wallet -> treasure_sum = $user -> gold + $wallet -> treasure ;
}
$wallet -> gold_sum = $wallet -> treasure_sum + $wallet -> gold_ab ;
$user -> wallets = Wallet :: with ([ 'product' ]) -> where ( 'owner' , $user -> id ) -> get () ?? new Wallet ();
$count_gold = 0 ;
$count_cash = 0 ;
$count_product = 0 ;
foreach ( $user -> wallets as $walletSingle ) {
if ( $walletSingle -> product_id ) {
if ( ! ( $walletSingle -> product -> group_type == "سکه" )){
( float ) $count_gold += $walletSingle -> product -> amount * $walletSingle -> gold ;
}
$count_cash += $walletSingle -> product -> price * $walletSingle -> gold ;
$count_product += $walletSingle -> gold ;
} else {
( float ) $count_gold += $walletSingle -> gold ;
( float ) $count_cash += $walletSingle -> cash ;
$wallet -> count_cash_wallet = $walletSingle -> cash ;
$wallet -> count_gold_wallet = $walletSingle -> gold ;
}
}
$wallet -> count_cash_wallets = $count_cash - $wallet -> count_cash_wallet ;
$wallet -> count_gold_wallets = $count_gold - $wallet -> count_gold_wallet ;
$wallet -> count_gold = $count_gold ;
$wallet -> count_cash = $count_cash ;
$wallet -> count_product = $count_product ;
$user -> wallet = $wallet ;
$user -> pwallet = Wallet :: with ( "product" ) -> where ( 'owner' , $user -> id )
-> where ( 'owner_type' , $user -> type ) // Ensures the wallet's owner type matches the user's type
-> whereNotNull ( 'product_id' ) // Filters wallets that have a non-null product_id
-> get () ?? new Wallet (); // If no wallet is found, assigns a new Wallet instance to the attribute
2026-01-31 09:09:32 +00:00
$forbiddenWords = [ 'tahesab' , 'token' ]; // کلمات ممنوعه
$query = Setting :: query ();
// حذف رکوردهایی که key شامل کلمات ممنوعه است
foreach ( $forbiddenWords as $word ) {
$query -> where ( 'key' , 'not like' , "% { $word } %" );
} $settings = $query -> get ();
$user -> settings = $settings ;
2026-01-24 14:03:11 +00:00
return response () -> json ( $user );
}
public function updateMe ( Request $request )
{
try {
$customer = Customer :: findOrFail ( auth ( 'customer' ) -> id ());
$updateData = $request -> except ([ 'referral_id' , 'referral_to_id' ]);
if ( isset ( $request -> fname ) && isset ( $request -> lname )) {
$updateData [ 'name' ] = " $request->fname $request->lname " ;
}
if ( $request -> has ( 'credential_id' )) {
$updateData [ 'credential_id' ] = $request -> credential_id ;
}
$customer -> update ( $updateData );
2026-02-08 08:02:11 +00:00
// $tah = new TahesabController();
// $tah->store(["customer_id" => $customer->id]);
2026-01-24 14:03:11 +00:00
if ( ! $customer -> is_legal ) {
$response = Http :: withHeaders ([
'Authorization' => 'Bearer mob83EBzqU7GWBmnc-6gXIp6r2G57P_94' ,
'Content-Type' => 'application/json' ,
]) -> post ( 'http://185.97.116.24:20205/check_user' , [
'number' => $customer -> mobile ,
'national' => $customer -> n_code ,
'host' => $_SERVER [ 'HTTP_HOST' ],
]);
if ( isset ( $response [ 'matched' ]) and $response [ 'matched' ] == true ) {
$customer -> is_legal = 1 ;
$customer -> save ();
if ( $this -> Config ( 'has_page_earn_money' ) == true ) {
$gift_for_inviter = 0.002 ;
$gift_for_invited = 0.003 ;
$companyName = $this -> Config ( 'name_fa' );
$companyurl = $this -> Config ( 'app_url' );
$referrer = $customer -> referral ;
if ( Customer :: where ( 'referral_to_id' , $referrer -> referral_id ) -> get () -> count () <= $referrer -> add_user_limit ) {
$Withdraw = Withdraw :: create ([
'user_id' => $customer -> id ,
'customer_id' => $customer -> referral -> id ,
"cash" => 0 ,
"gold" => $gift_for_invited ,
'sts' => 5 ,
]);
$wallet_interface = new WalletInterface ( $customer -> referral -> id , 2 );
new TransactionInterface ( $wallet_interface , $_inp = [
"cash" => 0 ,
"gold" => $gift_for_invited ,
'expire_at' => now (),
'active' => true ,
'title' => 'پاداش بابت معرفی' ,
'withdraw_id' => $Withdraw -> id ,
'start_at' => now (),
], 8 , true , false );
$transaction = Transaction :: where ( 'customer_id' , $customer -> referral -> id ) -> latest () -> first ();
TransactionsAdmin :: create ([
'customer_id' => $customer -> id ,
'customer_to_id' => $customer -> referral -> id ,
'user_id' => $customer -> id ,
'wallet' => null , // یا مقدار مناسب دیگری
'transaction_id' => $transaction -> id ,
'cash' => 0 ,
'note' => 'پاداش بابت معرفی' ,
'type' => 1 , // یا مقدار مناسب دیگری
'gold' => $gift_for_invited ,
'balance_cash' => 0 , // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw -> id ,
]);
$referrerWallet = Wallet :: where ( 'owner' , $customer -> referral -> id ) -> first ();
$message = "سلام { $referrer -> name } عزیز، \n\n { $gift_for_invited } گرم طلا بابت معرفی { $customer -> name } به حساب شما واریز شد. \n موجودی فعلی: { $referrerWallet -> gold } گرم. \n\n اطلاعات بیشتر: $companyurl \n\n با احترام، \n $companyName " ;
$this -> Send ( $referrer -> mobile , $message );
}
$Withdraw = Withdraw :: create ([
'user_id' => $customer -> id ,
'customer_id' => $customer -> id ,
"cash" => 0 ,
"gold" => $gift_for_inviter ,
'sts' => 5 ,
]);
$wallet_interface = new WalletInterface ( $customer -> id , 2 );
new TransactionInterface ( $wallet_interface , $_inp = [
"cash" => 0 ,
"gold" => $gift_for_inviter ,
'expire_at' => now (),
'active' => true ,
'title' => 'پاداش بابت ثبت نام' ,
'withdraw_id' => $Withdraw -> id ,
'start_at' => now (),
], 8 , true , false );
$transaction = Transaction :: where ( 'customer_id' , $customer -> id ) -> latest () -> first ();
TransactionsAdmin :: create ([
'customer_id' => $customer -> id ,
'customer_to_id' => $customer -> id ,
'user_id' => $customer -> id ,
'wallet' => null , // یا مقدار مناسب دیگری
'transaction_id' => $transaction -> id ,
'cash' => 0 ,
'note' => 'پاداش بابت ثبت نام' ,
'type' => 1 , // یا مقدار مناسب دیگری
'gold' => $gift_for_inviter ,
'balance_cash' => 0 , // یا مقدار مناسب دیگری
'withdraw_id' => $Withdraw -> id ,
]);
$referrerWallet = Wallet :: where ( 'owner' , $customer -> id ) -> first ();
$message = "سلام " . $customer -> name . " عزیز، \n\n " . $gift_for_invited . " گرم طلا بابت ثبت نام " . " به حساب شما واریز شد. \n " . "موجودی فعلی: " . $referrerWallet -> gold . " گرم. \n\n " . "اطلاعات بیشتر: " . $companyurl . " \n\n " . "با احترام، \n " . $companyName ;
$this -> Send ( $customer -> mobile , $message );
}
} else {
// This block will handle the case where the code doesn't match
// if (isset($response['code']) and $response['code'] === 'mobileNumber.not_valid') {
// return response()->json(['message' => "کد ملی تطابق ندارد",'response' =>$response], 422);
// } else {
// // This block will handle other errors from the $response variable
// return response()->json(['response' => $response], 422);
// }
return response () -> json ([ 'message' => "کد ملی ثبت شد، اما در حال حاضر سیستم نتوانست آن را تأیید کند. لطفاً منتظر بررسی و تأیید مدیر بمانید." , 'response' => $response ], 422 );
}
}
return response () -> json ( true );
} catch ( \Exception $e ) {
// نمایش 400 کاراکتر اول از پیام خطا
$errorMessage = substr ( $e -> getMessage (), 0 , 400 );
return response () -> json ([ 'error' => $errorMessage ], 500 );
}
}
public function active_finger ()
{
$customer = Customer :: findOrFail ( auth ( 'customer' ) -> id ());
if ( $customer -> finger_print ) {
$customer -> finger_print = false ; // Set to false if currently true
} else {
$customer -> finger_print = true ; // Set to true if currently false
}
$customer -> save ();
return response () -> json ( $customer );
}
public function imFrom ( $code )
{
$referrer = Customer :: where ( 'referral_id' , $code ) -> first ();
if ( $referrer ) {
// Define the reward amount
$rewardAmount = 200000 ; // Adjusted reward amount as per the new requirement
// Update the referred customer with the referral code
$newCustomer = auth ( 'customer' ) -> user (); // Assuming the new customer is authenticated
$newCustomer -> referral_id = $code ;
$newCustomer -> save ();
// Construct the SMS message
$message = sprintf (
"%s با کد معرف شما ثبت نام کرد. \n کیف پول شما %d ریال به عنوان پاداش شارژ شد. \n %s" ,
$newCustomer -> name ,
$rewardAmount ,
$this -> Config ( 'name_fa' )
);
// Send SMS to the referrer
$this -> Send ( $referrer -> mobile , $message );
return response () -> json ([ 'message' => 'Referral reward processed and SMS sent to referrer.' ], 200 );
} else {
return response () -> json ([ 'error' => 'کد نامعتبر میباشد' ], 422 );
}
}
public function i_have ( Request $request )
{
$user = auth ( 'customer' ) -> user ();
$customer_referral_id = Customer :: where ( "id" , $user [ 'id' ]) -> first () -> referral_id ;
$return [ 'users' ] = Customer :: where ( "referral_to_id" , $customer_referral_id ) -> get ();
$return [ 'gifts' ] = TransactionsAdmin :: with ([ 'withdraw' , 'order' , "user" , 'customerTo' , 'customer' ]) -> where ( "customer_to_id" , $user -> id ) -> get ();
$return [ 'usersSum' ] = $return [ 'users' ] -> count ();
$return [ 'giftsSum' ] = number_format ( $return [ 'gifts' ] -> sum ( 'gold' ), 3 );
return response () -> json ( $return );
}
}