diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 3e9ca2d..225a230 100755 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -7,11 +7,13 @@ use App\Models\Agent; use App\Models\AgentPlus; use App\Models\Identification; use App\Models\User; +use App\Traits\Helper; use Illuminate\Http\Request; use Illuminate\Http\Response; class UserController extends Controller { + use Helper; /** * Create a new controller instance. @@ -131,17 +133,6 @@ class UserController extends Controller } - private function generateRandomString($length = 10) - { - $characters = '23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'; - $charactersLength = strlen($characters); - $randomString = ''; - for ($i = 0; $i < $length; $i++) { - $randomString .= $characters[rand(0, $charactersLength - 1)]; - } - return $randomString; - } - public function rattachCard(Request $request, $id_user) { $this->validate($request, [ diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 3169c87..7be9023 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -2221,13 +2221,27 @@ class iLinkTransactionController extends Controller public function calculateCommission(Request $request) { - $rules = [ + $this->validate($request, [ 'type' => 'required|integer|min:0|not_in:0', - 'id_wallet_agent' => 'required_without:id_wallet_user|integer|min:0|not_in:0', - 'id_wallet_user' => 'required_without:id_wallet_agent|integer|min:0|not_in:0', 'montant' => 'required|numeric|min:0|not_in:0', - ]; - $this->validate($request, $rules); + ]); + + $simulator = $request->input('simulator', false); // only for simulator + + if($simulator){ + $this->validate($request, [ + 'init_country' => 'required|integer|exists:countries,id', + 'final_country' => 'required|integer|exists:countries,id', + ]); + $init_country = $request->input('init_country'); + $final_country = $request->input('final_country'); + }else{ + $this->validate($request, [ + 'id_wallet_agent' => 'required_without:id_wallet_user|integer|min:0|not_in:0', + 'id_wallet_user' => 'required_without:id_wallet_agent|integer|min:0|not_in:0', + ]); + } + if (isset($request->id_wallet_agent)) { $walletAgent = Wallet::findOrFail($request->get('id_wallet_agent')); $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); @@ -2237,22 +2251,25 @@ class iLinkTransactionController extends Controller } else { - $walletUser = WalletsUser::findOrFail($request->id_wallet_user); - // Pour les operations à cartes, le pays initial c'est le pays de la carte - if(in_array($request->type, [10, 11])){ - $init_country = $walletUser->user->card_country_id; - }else{ - $init_country = $walletUser->user->network->country->id; + if(empty($init_country)){ + $walletUser = WalletsUser::findOrFail($request->id_wallet_user); + // Pour les operations à cartes, le pays initial c'est le pays de la carte + if(in_array($request->type, [10, 11])){ + $init_country = $walletUser->user->card_country_id; + }else{ + $init_country = $walletUser->user->network->country->id; - if($request->type == 21){ - $withLinkedCard = $request->input('with_linked_card', false); - if ($withLinkedCard) { - $init_country = $walletUser->user->card_country_id; - }else{ - $init_country = Country::where('code_country', $request->input('customer_country'))->first()?->id; + if($request->type == 21){ + $withLinkedCard = $request->input('with_linked_card', false); + if ($withLinkedCard) { + $init_country = $walletUser->user->card_country_id; + }else{ + $init_country = Country::where('code_country', $request->input('customer_country'))->first()?->id; + } } } } + $result = ConfigWallet::join('networks', 'networks.id', '=', 'configWallet.id_network') ->where('networks.country_id', $init_country)->where('configWallet.type', 'ilink') ->select('configWallet.id')->first(); @@ -2288,10 +2305,16 @@ class iLinkTransactionController extends Controller switch ($request->type) { case 1: //User - Envoi wallet à wallet $this->validate($request, [ - 'final_country' => 'required|integer|exists:countries,id', - 'id_destinataire' => 'required_without:phone_destinataire', 'network_destinataire' => 'required|integer|min:0|not_in:0', ]); + + if(!$simulator){ + $this->validate($request, [ + 'final_country' => 'required|integer|exists:countries,id', + 'id_destinataire' => 'required_without:phone_destinataire' + ]); + } + $configNetworkDestinataire = ConfigWallet::where('id_network', $request->network_destinataire)->firstOrFail(); $frais = ($init_country != $request->final_country) ? $this->calculateFees($plr_user_wallet_wallet, $request->montant) : $this->calculateFees($plr_user_wallet_wallet_national, $request->montant); //Verifier si c'est pas un reseau ilink @@ -2305,11 +2328,13 @@ class iLinkTransactionController extends Controller ]); $frais += $fees; } else { - $destinataire = $this->verifyiLinkRecipient($request->id_destinataire, $request->final_country); - if(!($destinataire instanceof User)){ - return $destinataire; + if(!$simulator){ + $destinataire = $this->verifyiLinkRecipient($request->id_destinataire, $request->final_country); + if(!($destinataire instanceof User)){ + return $destinataire; + } + $data['destinataire'] = $destinataire->lastname . ' ' . $destinataire->firstname; } - $data['destinataire'] = $destinataire->lastname . ' ' . $destinataire->firstname; } $taxe = ($init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais); $data['frais'] = round($frais + $taxe, 2); @@ -2319,9 +2344,11 @@ class iLinkTransactionController extends Controller $data['montant_net_final'] = $this->toMoneyWithCurrency($data['montant_net_init'], $init_country, $request->final_country); break; case 2: //User - Envoi de wallet à carte - $final_country = $walletUser->user->card_country_id; - if(empty($final_country)){ - return $this->errorResponse(trans('errors.no_bank_card_attached')); + if(!$simulator){ + $final_country = $walletUser->user->card_country_id; + if(empty($final_country)){ + return $this->errorResponse(trans('errors.no_bank_card_attached')); + } } $plr_user_wallet_cart_national = $this->getPaliers($paliers_commission_wallets, 'user_wallet_cart_national'); $plr_user_wallet_cart_international = $this->getPaliers($paliers_commission_wallets, 'user_wallet_cart_international'); @@ -2369,7 +2396,9 @@ class iLinkTransactionController extends Controller $data['montant_net'] = round($request->montant - $data['frais'], 2); break; case 10: //User - Retrait de carte vers wallet - $final_country = $walletUser->user->network->country->id; + if(!$simulator){ + $final_country = $walletUser->user->network->country->id; + } $plr_user_cart_wallet_national = $this->getPaliers($paliers_commission_wallets, 'user_cart_wallet_national'); $plr_user_cart_wallet_international = $this->getPaliers($paliers_commission_wallets, 'user_cart_wallet_international'); @@ -2388,7 +2417,9 @@ class iLinkTransactionController extends Controller $data['montant_net_final'] = $this->toMoneyWithCurrency(round($request->montant, 2), $init_country, $final_country); break; case 11: // User - Retrait de carte vers cash - $final_country = $walletUser->user->network->country->id; + if(!$simulator){ + $final_country = $walletUser->user->network->country->id; + } $plr_user_cart_cash_national = $this->getPaliers($paliers_commission_wallets, 'user_cart_cash_national'); $plr_user_cart_cash_international = $this->getPaliers($paliers_commission_wallets, 'user_cart_cash_international'); @@ -2493,11 +2524,18 @@ class iLinkTransactionController extends Controller $data['montant_net_final'] = $this->toMoneyWithCurrency($data['montant_net_init'], $init_country, $request->final_country); break; case 21: //User - Retrait de carte vers autre wallet + $this->validate($request, [ - 'final_country' => 'required|integer|exists:countries,id', - 'id_destinataire' => 'required_without:phone_destinataire', 'network_destinataire' => 'required|integer|min:0|not_in:0', ]); + + if(!$simulator){ + $this->validate($request, [ + 'final_country' => 'required|integer|exists:countries,id', + 'id_destinataire' => 'required_without:phone_destinataire' + ]); + } + $plr_user_cart_autre_wallet_national = $this->getPaliers($paliers_commission_wallets, 'user_cart_autre_wallet_national'); $plr_user_cart_autre_wallet_international = $this->getPaliers($paliers_commission_wallets, 'user_cart_autre_wallet_international'); $frais = $this->calculateFees($init_country != $request->final_country ? $plr_user_cart_autre_wallet_international : $plr_user_cart_autre_wallet_national, $request->montant); @@ -2518,11 +2556,13 @@ class iLinkTransactionController extends Controller 'payment_method' => PaymentMethod::WALLET ]); } else { - $destinataire = $this->verifyiLinkRecipient($request->id_destinataire, $request->final_country); - if(!($destinataire instanceof User)){ - return $destinataire; + if(!$simulator){ + $destinataire = $this->verifyiLinkRecipient($request->id_destinataire, $request->final_country); + if(!($destinataire instanceof User)){ + return $destinataire; + } + $data['destinataire'] = $destinataire->lastname . ' ' . $destinataire->firstname; } - $data['destinataire'] = $destinataire->lastname . ' ' . $destinataire->firstname; } $frais += $fees; @@ -2579,7 +2619,7 @@ class iLinkTransactionController extends Controller if (!$transaction) return $this->errorResponse(trans('errors.transaction_not_exist'), Response::HTTP_NOT_FOUND); - if (!$this->checkPassword($request->code_retrait, $transaction->encrypted_code_retrait, $transaction->code_retrait_salt)) + if (!$this->checkPassword(remove_spaces($request->code_retrait), $transaction->encrypted_code_retrait, $transaction->code_retrait_salt)) return $this->errorResponse(trans('errors.invalid_withdrawal_code')); diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 523c302..c53cf34 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -700,4 +700,15 @@ trait Helper return $destination; } + + public function generateRandomString($length = 10) + { + $characters = '23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + $randomString .= $characters[rand(0, $charactersLength - 1)]; + } + return $randomString; + } }