diff --git a/app/Http/Controllers/iLinkTransactionController.php b/app/Http/Controllers/iLinkTransactionController.php index 327faf5..5bce12c 100755 --- a/app/Http/Controllers/iLinkTransactionController.php +++ b/app/Http/Controllers/iLinkTransactionController.php @@ -21,6 +21,7 @@ use App\Traits\Helper; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; +use function DeepCopy\deep_copy; use function GuzzleHttp\Promise\all; class iLinkTransactionController extends Controller @@ -220,9 +221,11 @@ class iLinkTransactionController extends Controller if ($code == 200) { $walletUser->balance -= $transaction->montant; + //Emettre une trame SSL pour recharger le compte de la banque partenaire du montant de sa commission + $transaction->commission_banque = $frais * $config->taux_com_banque_envoi_wallet_carte_ilink / 100 ; - $walletHyperviseur->balance_com += $frais; - $transaction->commission_hyp = $frais; + $transaction->commission_hyp = $frais * $config->taux_com_hyp_envoi_wallet_carte_ilink / 100 ; + $walletHyperviseur->balance_com += $transaction->commission_hyp; $transaction->id_wallet_hyp = $walletHyperviseur->id; $transaction->frais = $frais; $transaction->date = new \DateTime(); @@ -334,6 +337,7 @@ class iLinkTransactionController extends Controller if ($request->montant > $walletUser->balance) { return $this->errorResponse(trans('errors.insufficient_balance')); } else { + $transaction->final_country = $init_country; $transaction->frais = $frais = $this->calculateFees($plr_user_wallet_cash_national, $request->montant); $transaction->taxe = $taxe = $this->calculateTax($taxesNationales, $frais); $transaction->montant_net = $montantRetrait = $transaction->montant - $frais - $taxe; @@ -357,7 +361,7 @@ class iLinkTransactionController extends Controller $message = trans('messages.successful_user_remove_from_wallet_to_cash', ['id_transaction' => $transaction->id_transaction, 'amount' => $this->toMoney($transaction->montant, $init_country), 'net' => $this->toMoney($montantRetrait, $init_country), 'fees' => $this->toMoney($frais + $taxe, $init_country), 'code' => wordwrap($code_retrait, 4, ' ', true), - 'sender_code' => $user->user_code]); + 'sender_code' => $user->user_code , 'init_country' => $this->getCountryName($init_country),]); $this->sendMail($user->email, trans('messages.successful_transaction'), $message); return $this->successResponse($message . trans('messages.sent_by_mail')); } @@ -475,35 +479,47 @@ class iLinkTransactionController extends Controller $this->validate($request, $transaction->remove_cash_rules()); $agent = AgentPlus::findOrFail($network_agent->agent_id); if ($this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) { - $transaction = WalletIlinkTransaction::find($request->id_transaction); + $transaction = WalletIlinkTransaction::where('id_transaction',$request->id_transaction)->first(); if ($transaction) { if ($transaction->status_retrait == 0) { if ($this->checkPassword($request->code_retrait, $transaction->encrypted_code_retrait, $transaction->code_retrait_salt)) { if ($transaction->montant_net == $request->montant) { - $part_ag = floatval($transaction->frais * $config->taux_com_ag_retrait_cash / 100); - $part_sup = floatval($transaction->frais * $config->taux_com_sup_retrait_cash / 100); + $transactionRetrait = $transaction->replicate(); + $transactionRetrait->id = null; + $transactionRetrait->id_transaction = $this->getTransactionID(); + + $transactionRetrait->commission_ag = floatval($transaction->frais * $config->taux_com_ag_retrait_cash / 100); + $transactionRetrait->commission_sup = floatval($transaction->frais * $config->taux_com_sup_retrait_cash / 100); + $transactionRetrait->commission_hyp = $transaction->frais - $transactionRetrait->commission_ag - $transactionRetrait->commission_sup; $walletAgent->balance_princ += $transaction->montant_net; - $walletAgent->balance_com += $part_ag; - $walletSuperviseur->balance_com += $part_sup; - $walletHyperviseur->balance_com -= ($part_ag + $part_sup); - $transaction->status_retrait = 1; - $transaction->date_retrait = new \DateTime(); + $walletAgent->balance_com += $transactionRetrait->commission_ag; + $walletSuperviseur->balance_com += $transactionRetrait->commission_sup; + $walletHyperviseur->balance_com -= ( $transactionRetrait->commission_ag + $transactionRetrait->commission_sup); + $transactionRetrait->status_retrait = $transaction->status_retrait = 1; + $transactionRetrait->date_retrait = $transaction->date_retrait = new \DateTime(); + $transactionRetrait->date = new \DateTime(); $walletAgent->save(); $walletSuperviseur->save(); $walletHyperviseur->save(); $transaction->save(); - return $this->successResponse(trans('messages.successful_transaction')); + $transactionRetrait->save(); + $message = trans('messages.successful_agent_remove_cash', + ['id_transaction' => $transactionRetrait->id_transaction, 'amount' => $this->toMoney($request->montant, $init_country), + 'commission' => $this->toMoney($transactionRetrait->commission_ag, $init_country), 'code' => wordwrap($request->code_retrait, 4, ' ', true), + 'id_transaction_retrait' => $transaction->id_transaction]); + $this->sendMail($agent->email, trans('messages.successful_transaction'), $message); + return $this->successResponse($message . trans('messages.sent_by_mail')); } else { - return $this->errorResponse('Montant de retrait incorrect'); + return $this->errorResponse(trans('errors.incorrect_withdrawal_amount')); } } else { - return $this->errorResponse('Code de retrait invalide'); + return $this->errorResponse(trans('errors.invalid_withdrawal_code')); } } else { - return $this->errorResponse('Retrait déjà éffectuée'); + return $this->errorResponse(trans('errors.withdrawal_already_made')); } } else { - return $this->errorResponse('Cette transaction n\'existe pas', Response::HTTP_NOT_FOUND); + return $this->errorResponse(trans('errors.transaction_not_exist'), Response::HTTP_NOT_FOUND); } } else { return $this->errorResponse(trans('messages.incorrect_user_password')); @@ -896,6 +912,28 @@ class iLinkTransactionController extends Controller } + public function getTransactionRetrait(Request $request){ + $this->validate($request, [ + 'id_transaction' =>'required', + ]); + $transaction = WalletIlinkTransaction::select('nom_destinataire' , 'prenom_destinataire' ,'type_document_destinataire','id_document_destinataire' ,'type', + 'id_wallet_user')->where('id_transaction',$request->id_transaction)->first(); + if(!$transaction) + return $this->errorResponse(trans('errors.transaction_not_exist'), Response::HTTP_NOT_FOUND); + + if ($transaction->status_retrait != 0) + return $this->errorResponse(trans('errors.withdrawal_already_made')); + + $data = $transaction->replicate(); + if($transaction->type == 9){ + $data->nom_destinataire = $transaction->wallet_user->user->lastname; + $data->prenom_destinataire = $transaction->wallet_user->user->firstname; + $data->user_code = $transaction->wallet_user->user->user_code; + } + + return $this->successResponse($data); + } + private function getPaliers(array $paliers, $type) { diff --git a/app/Models/WalletIlinkTransaction.php b/app/Models/WalletIlinkTransaction.php index c644dc0..44a536d 100644 --- a/app/Models/WalletIlinkTransaction.php +++ b/app/Models/WalletIlinkTransaction.php @@ -157,7 +157,7 @@ class WalletIlinkTransaction extends Model return $this->belongsTo(Wallet::class, 'id_wallet_hyp_payeur'); } - public function wallets_user() + public function wallet_user() { return $this->belongsTo(WalletsUser::class, 'id_wallet_user'); } @@ -218,7 +218,7 @@ class WalletIlinkTransaction extends Model public function remove_cash_rules(){ return [ - 'id_transaction' =>'required|integer|min:0|not_in:0', + 'id_transaction' =>'required', 'code_retrait' =>'required|size:16', ]; } diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index fd50e7e..2644d63 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -13,5 +13,9 @@ return [ 'insufficient_balance'=> 'The balance is insufficient to complete this transaction', 'no_ilink_network' => 'Sorry, there is no iLink World network in your country', 'wallet_country_not_match' => 'This recipient wallet code is not registered in the country :country', - 'no_bank_card_attached' => 'No bank card is attached to your account' + 'no_bank_card_attached' => 'No bank card is attached to your account', + 'transaction_not_exist' => 'This transaction does not exist', + 'withdrawal_already_made' => 'Withdrawal already made', + 'invalid_withdrawal_code' => 'Invalid withdrawal code', + 'incorrect_withdrawal_amount'=> 'Incorrect withdrawal amount', ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index c663023..de43284 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -85,7 +85,9 @@ Transaction information: - Number : :id_transaction - Amount of the transaction : :amount - Fees and Taxes: :fees + - Country of departure: :init_country - Net withdrawal amount : :net + - Country of destination: :init_country - Issuer account : :sender_code - Withdrawal code : :code', 'successful_user_remove_from_cart_to_wallet'=>'Withdrawing money from your card to your account @@ -102,7 +104,7 @@ Transaction information : - Amount of the transaction: :amount - Fees: :fees - Net withdrawal amount: :net - - Issuer account : :sender_code + - User code : :sender_code - Card number : :cart_number - Withdrawal code : :code', ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 725b438..2ced6db 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -13,5 +13,9 @@ return [ 'insufficient_balance'=> 'Le solde est insuffisant pour effectuer cette transaction', 'no_ilink_network' => 'Désolé , il n\'existe pas de reseau iLink World dans votre pays', 'wallet_country_not_match' => 'Ce code wallet destinataire n\'est pas enregistré dans le pays :country', - 'no_bank_card_attached' => 'Aucune carte bancaire n\'est rattachée à votre compte' + 'no_bank_card_attached' => 'Aucune carte bancaire n\'est rattachée à votre compte', + 'transaction_not_exist' => 'Cette transaction n\'existe pas', + 'withdrawal_already_made' => 'Retrait déjà éffectuée', + 'invalid_withdrawal_code' => 'Code de retrait invalide', + 'incorrect_withdrawal_amount'=> 'Montant de retrait incorrect', ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 495e079..3136671 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -85,7 +85,9 @@ Informations de la transaction : - Numéro : :id_transaction - Montant de la transaction : :amount - Frais et Taxes: :fees + - Pays de départ : :init_country - Montant net de retrait: :net + - Pays de destination : :init_country - Compte émetteur : :sender_code - Code de retrait : :code', 'successful_user_remove_from_cart_to_wallet'=>'Retrait d\'argent de votre carte vers votre compte @@ -102,7 +104,14 @@ Informations de la transaction : - Montant de la transaction : :amount - Frais : :fees - Montant net de retrait: :net - - Compte émetteur : :sender_code + - Code utilisateur : :sender_code - Numero de la carte : :cart_number - Code de retrait : :code', + 'successful_agent_remove_cash'=>'Retrait d\'argent +Informations de la transaction : + - Numéro : :id_transaction + - Montant de retrait : :amount + - Votre commission : :commission + - Numero de transaction de retrait : :id_transaction_retrait + - Code de retrait : :code' ]; diff --git a/routes/web.php b/routes/web.php index 9c45593..7f2936e 100755 --- a/routes/web.php +++ b/routes/web.php @@ -33,6 +33,7 @@ $router->group(['prefix' => '/transactions'] , function () use ($router){ $router->post('commission','iLinkTransactionController@calculateCommission'); $router->get('user/{id_wallet_user}','iLinkTransactionController@lastUserTransactions'); $router->get('agent/{id_wallet_agent}','iLinkTransactionController@lastAgentTransactions'); + $router->post('check_retraits','iLinkTransactionController@getTransactionRetrait'); }); });