diff --git a/app/Http/Controllers/HelperController.php b/app/Http/Controllers/HelperController.php index 9e94ba4..a06867e 100755 --- a/app/Http/Controllers/HelperController.php +++ b/app/Http/Controllers/HelperController.php @@ -21,15 +21,15 @@ class HelperController extends Controller public function countries() { - $countries = DB::select('SELECT id , name , code_dial FROM countries WHERE id IN ( - SELECT distinct n.country_id FROM networks n WHERE n.status = 1 - )'); + $countries = DB::select('SELECT id , name , code_dial FROM countries_currencies WHERE id IN ( + SELECT distinct c.id FROM networks n INNER JOIN countries_currencies c ON n.country_id=c.id INNER JOIN configWallet cw ON cw.id_network = n.id WHERE status = 1 + );'); return $this->successResponse($countries); } public function paying_networks($id_country) { - $networks = DB::select('SELECT id , name FROM networks WHERE id IN ( SELECT distinct id_network FROM paying_networks ) + $networks = DB::select('SELECT n.id , n.name , c.type FROM networks n INNER JOIN configWallet c ON c.id_network = n.id WHERE n.id IN ( SELECT distinct id_network FROM paying_networks ) AND status = 1 AND country_id = :id;',['id'=>$id_country]); return $this->successResponse($networks); } diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index d51d7d2..cec7415 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -116,41 +116,54 @@ class iLinkTransactionController extends Controller $transaction->frais = $frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_user_wallet_wallet, $request->montant) : $this->calculateFees($plr_user_wallet_wallet_national, $request->montant); $transaction->taxe = $taxe = ($request->init_country != $request->final_country) ? $this->calculateTax($taxesInternationales, $frais) : $this->calculateTax($taxesNationales, $frais); $transaction->montant_depot = $montantDepot = $transaction->montant - $frais - $taxe; - $reseauPayeur = PayingNetwork::where('id_network',$request->network_destinataire)->where('id_configWallet',$config->id)->first(); - if($reseauPayeur){ //Si le reseau existe chez iLink - $transaction->part_reseau_payeur = $frais* $reseauPayeur->taux_partage / 100; + $configPayeur = ConfigWallet::where('id_network', $request->network_destinataire)->firstOrFail(); + $reseauPayeur = PayingNetwork::where('id_network', $request->network_destinataire)->where('id_configWallet', $config->id)->firstOrFail(); + if($request->init_country != $request->final_country){ + $transaction->part_reseau_payeur = $frais * $reseauPayeur->taux_partage / 100; $transaction->part_reseau_emetteur = $frais - $transaction->part_reseau_payeur; + }else{ + $transaction->part_reseau_payeur = 0; + $transaction->part_reseau_emetteur = $frais; + } + $transaction->commission_hyp = $transaction->part_reseau_emetteur; + $reseauPayeur->balance_com += $transaction->part_reseau_payeur; + if ($configPayeur->type == 'ilink') { $walletHyperviseur->balance_com += $transaction->part_reseau_emetteur; - $reseauPayeur->balance_com += $transaction->part_reseau_payeur; - $reseauPayeur->save(); - }else{ - // Emettre requete SSL vers le reseau correspondant - } - if(isset($request->phone_destinataire)){ - $destinataire = User::where('phone', $request->phone_destinataire)->first(); - if($destinataire) - $transaction->id_destinataire = $destinataire->user_code; - else - return $this->errorResponse(trans('errors.user_phone_not_exist')); - }elseif (isset($request->id_destinataire)){ $destinataire = User::where('user_code', $request->id_destinataire)->first(); + if($destinataire) { // Si c'est un wallet ilink + $walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail(); + $walletDestinataire->balance += $montantDepot; + $walletDestinataire->save(); + } else { + return $this->errorResponse(trans('errors.wallet_not_defined')); + } + $walletUser->balance -= $transaction->montant; + //Hyperviseur payeur + $hyperviseurPayeur = AgentPlus::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail(); + if($hyperviseurPayeur->id == $hyperviseur->id){ //Si c'est le reseau payeur est aussi emetteur + $walletHyperviseur->balance_com += $transaction->part_reseau_payeur; + $reseauPayeur->balance_com += $transaction->part_reseau_emetteur; + }else{ + $wallet_agent_hypPayeur = WalletAgent::where('agent_id', $hyperviseurPayeur->id)->firstOrFail(); + $walletHyperviseurPayeur = Wallet::findOrFail($wallet_agent_hypPayeur->wallet_id); + $walletHyperviseurPayeur->balance_com += $transaction->part_reseau_payeur; + $walletHyperviseurPayeur->save(); + } + $walletHyperviseur->save(); + $walletUser->save(); + } else { + //Emettre requete SSL vers wallet extene correspondant pour recharger le compte dont l'id est : +// $transaction->id_destinataire ; + // et le montant est: +// $montantDepot; } - if($destinataire){ // Si c'est un wallet ilink - $walletDestinataire = WalletsUser::where('idUser',$destinataire->id)->firstOrFail(); - $walletDestinataire->balance += $montantDepot; - $walletDestinataire->save(); - }else{ - //Emettre requete SSL vers wallet extene correspondant pour recharger le compte - return $this->errorResponse(trans('errors.external_wallet_not_defined')); - } - $walletUser->balance -= $transaction->montant; - $walletHyperviseur->save(); - $walletUser->save(); + $reseauPayeur->save(); $transaction->save(); $this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_wallet', ['id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant, $request->init_country), 'net_init' => $this->toMoney($montantDepot, $request->init_country), - 'net_final' => $this->convertMoney($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais, $request->init_country), 'tax' => $this->toMoney($taxe, $request->init_country), - 'user_code' => $transaction->id_destinataire])); + 'net_final' => $this->convertMoney($montantDepot, $request->init_country, $request->final_country), 'fees' => $this->toMoney($frais + $taxe, $request->init_country), + 'init_country'=>$this->getCountryName($request->init_country) , 'final_country'=>$this->getCountryName($request->final_country), + 'sender_code' => $user->user_code, 'receiver_code' => $transaction->id_destinataire])); return $this->successResponse(trans('messages.successful_transaction')); } else { return $this->errorResponse(trans('messages.incorrect_user_password')); diff --git a/app/Models/WalletIlinkTransaction.php b/app/Models/WalletIlinkTransaction.php index c496ffe..d5046b1 100644 --- a/app/Models/WalletIlinkTransaction.php +++ b/app/Models/WalletIlinkTransaction.php @@ -215,7 +215,6 @@ class WalletIlinkTransaction extends Model 'type_document_destinataire'=>'required', 'id_document_destinataire'=>'required', 'id_destinataire' =>'required_without:phone_destinataire', - 'phone_destinataire'=>'required_without:id_destinataire', 'network_destinataire'=>'required|integer|min:0|not_in:0', ]; } diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 57b0caa..a3d2e6b 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -42,6 +42,10 @@ trait Helper return $hash; } + public function getCountryName($id_country){ + return Country::findOrFail($id_country)->name; + } + public function toMoney($amount, $id_country) { $country = Country::findOrFail($id_country); diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index a0e0883..9e683d8 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -9,5 +9,5 @@ return [ 'visa_api_failed'=> 'Request to API visa failed', 'failed_transaction' => 'Failed transaction', 'user_phone_not_exist' => 'This customer number does not exist', - 'external_wallet_not_defined' => 'This code does not correspond to an iLink wallet and no external wallet is defined' + 'wallet_not_defined' => 'This code does not correspond to an iLink wallet' ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index f308779..3c2ea58 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -9,5 +9,5 @@ return [ 'visa_api_failed'=> 'La requete vers l\'api visa a échouée', 'failed_transaction' => 'Transaction échouée', 'user_phone_not_exist' => 'Ce numéro client n\'existe pas', - 'external_wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink et aucun wallet externe n\'est defini' + 'wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink' ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 1b868c0..238c61a 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -49,9 +49,11 @@ Informations de la transaction : Informations de la transaction : - Transaction ID : :id_transaction - Montant de la transaction : :amount + - Pays de départ : :init_country - Montant net du pays de départ : :net_init + - Pays de destination : :final_country - Montant net du pays de destination : :net_final - - Frais : :fees - - Taxe : :tax - - Code wallet du destinataire : :code', + - Frais et Taxe : :fees + - Numero du wallet émetteur : :sender_code + - Numero du wallet destinataire : :receiver_code', ];