+ Moving TransmittingNetworksController into walletServiceExterne

This commit is contained in:
Djery-Tom 2020-11-28 09:22:30 +01:00
parent c171ce1af9
commit e8dc82155e
11 changed files with 54 additions and 223 deletions

View File

@ -6,7 +6,7 @@ use Laravel\Lumen\Routing\Controller as BaseController;
/** /**
* @OA\Info( * @OA\Info(
* title="Wallet Service API", * title="Wallet Service Interne API",
* version="1.0.0", * version="1.0.0",
* @OA\Contact( * @OA\Contact(
* email="administrateur@ilink-app.com", * email="administrateur@ilink-app.com",

View File

@ -271,7 +271,7 @@ class NanoCreditController extends Controller
* @OA\Parameter( * @OA\Parameter(
* parameter="id_user", * parameter="id_user",
* name="id_user", * name="id_user",
* description="ID de l'utilisateur", * description="ID de l'utilisateur enregistré dans la base de données",
* in="path", * in="path",
* required=true, * required=true,
* @OA\Schema( * @OA\Schema(

View File

@ -1,192 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\ConfigWallet;
use App\Models\Network;
use App\Models\TransmittingNetwork;
use App\Models\User;
use App\Models\Wallet;
use App\Models\WalletAgent;
use App\Models\WalletIlinkTransaction;
use App\Models\WalletsUser;
use App\Traits\ApiResponser;
use App\Traits\Helper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class TransmittingNetworksController extends Controller
{
use ApiResponser;
use Helper;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function index(Request $request)
{
$users = User::paginate($request->get("limit", 10));
return ["data" => $users];
}
public function receivePayment(Request $request)
{
$this->validate($request, [
'type' => 'required|integer|in:1,17', // Les types de transactions possibles à recevoir [1,3,17]
'montant' => 'required|numeric|min:0|not_in:0',
'frais' => 'required|numeric|min:0|not_in:0',
'taxe' => 'required|numeric|min:0|not_in:0',
'part_reseau_emetteur' => 'required|numeric|min:0|not_in:0',
'part_reseau_payeur' => 'required|numeric|min:0|not_in:0',
'montant_commission' => 'required|numeric|min:0|not_in:0',
'network_emetteur' => 'required|numeric|min:0|not_in:0',
'network_destinataire' => 'required|numeric|min:0|not_in:0',
'id_transaction_network_emetteur' => 'required',
]);
$configRecipient = ConfigWallet::where('id_network', $request->network_destinataire)->first();
$configTransmitter = ConfigWallet::where('id_network', $request->network_emetteur)->first();
if (!$configRecipient)
return $this->errorResponse(trans('errors.recipient_network_not_configured'));
if ($configRecipient->type != 'ilink')
return $this->errorResponse(trans('errors.recipient_network_not_authorized'));
if (!$configTransmitter)
return $this->errorResponse(trans('errors.transmitter_network_not_configured'));
if ($configTransmitter->type != 'autre')
return $this->errorResponse(trans('errors.transmitter_network_not_authorized'));
$transmittingNetwork = TransmittingNetwork::where('id_network', $request->network_emetteur)->where('id_configWallet', $configRecipient->id)->first();
if (!$transmittingNetwork)
return $this->errorResponse(trans('errors.transmitter_network_not_recognized'));
$transaction = new WalletIlinkTransaction();
$transaction->fill($request->all());
$transaction->id_transaction = $this->getTransactionID();
$transaction->from_network_emetteur = true;
//Hyperviseur destinataire
$hyperviseurDestinataire = WalletAgent::where('category', 'hyper')->where('network_id', $request->network_destinataire)->firstOrFail();
$walletHyper = Wallet::findOrFail($hyperviseurDestinataire->wallet_id);
$transaction->id_wallet_hyp = $walletHyper->id;
$finalNetwork = Network::findOrFail($request->network_destinataire);
$transaction->final_country = $finalNetwork->country->id;
$initNetwork = Network::findOrFail($request->network_emetteur);
$transaction->init_country = $initNetwork->country->id;
$transaction->montant_net = $transaction->montant_net_final_country = $request->montant;
$transaction->part_reseau_payeur_final_country = $transaction->part_reseau_payeur;
$transaction->status_reseau_payeur = 'EN_COURS';
switch ($request->type) {
case 1:
$this->validate($request, [
'id_destinataire' => 'required',
'nom_emetteur' => 'required',
'prenom_emetteur' => 'required',
'email_emetteur' => 'required',
'type_document_emetteur' => 'required',
'id_document_emetteur' => 'required',
'id_emetteur' => 'required',
]);
$destinataire = User::where('user_code', $request->id_destinataire)->first();
if ($destinataire) { // Si c'est un wallet ilink
if ($destinataire->network->country->id == $finalNetwork->country->id) {
$walletDestinataire = WalletsUser::where('idUser', $destinataire->id)->firstOrFail();
$walletDestinataire->balance += $request->montant;
$transaction->id_wallet_user = $walletDestinataire->id;
$walletDestinataire->save();
} else {
return $this->errorResponse(trans('errors.wallet_country_not_match', ['country' => $finalNetwork->country->name]));
}
} else {
return $this->errorResponse(trans('errors.wallet_not_defined'));
}
$walletHyper->balance_com += $request->montant_commission;
$walletHyper->save();
$transmittingNetwork->balance_compensation += $request->montant;
$transmittingNetwork->balance_com += $request->montant_commission;
$transmittingNetwork->save();
$transaction->commission_hyp = $transaction->commission_hyp_final_country = $request->montant_commission;
$transaction->status_reseau_payeur = 'TRAITEE';
$transaction->date = $this->getCurrentTimeByCountryCode($initNetwork->country->code_country);
$transaction->save();
$message = trans('messages.wallet_incoming_payment_message',
['id_transaction' => $transaction->id_transaction, 'amount' => $this->toMoneyWithNetwork($request->montant, $request->id),
'sender_name' => $request->nom_emetteur . ' ' . $request->prenom_emetteur, 'init_country' => $initNetwork->country->name, 'sender_code' => $request->id_emetteur,
'final_country' => $finalNetwork->country->name, 'network' => $initNetwork->name, 'receiver_code' => $request->id_destinataire]);
$this->sendMail($destinataire->email, trans('messages.wallet_incoming_payment'), $message);
return $this->successResponse(trans('messages.success_treated_demand'));
case 17:
$this->validate($request, [
'id_emetteur' => 'required',
'nom_emetteur' => 'required',
'prenom_emetteur' => 'required',
'type_document_emetteur' => 'required',
'id_document_emetteur' => 'required',
'email_emetteur' => 'required',
'nom_destinataire' => 'required',
'prenom_destinataire' => 'required',
'type_document_destinataire' => 'required',
'id_document_destinataire' => 'required',
'email_destinataire' => 'required',
'code_retrait' => 'required|size:16'
]);
$hash = $this->hashSSHA($request->code_retrait);
$transaction->encrypted_code_retrait = $hash['encrypted'];
$transaction->code_retrait_salt = $hash['salt'];
$transaction->status_retrait = false;
$transaction->commission_ag = floatval($request->montant_commission * $configRecipient->taux_com_ag_envoi_cash / 100);
$transaction->commission_sup = floatval($request->montant_commission * $configRecipient->taux_com_sup_envoi_cash / 100);
$transaction->commission_hyp = $transaction->commission_hyp_final_country = floatval($request->montant_commission * $configRecipient->taux_com_hyp_envoi_cash / 100);
$transaction->date = $this->getCurrentTimeByCountryCode($initNetwork->country->code_country);
$transaction->save();
$message = trans('messages.cash_incoming_payment_message',
['amount' => $this->toMoneyWithNetwork($request->montant, $request->id), 'id_transaction' => $transaction->id_transaction,
'sender_name' => $request->nom_emetteur . ' ' . $request->prenom_emetteur, 'receiver_name' => $request->nom_destinataire . ' ' . $request->prenom_destinataire,
'code' => wordwrap($request->code_retrait, 4, ' ', true), 'init_country' => $initNetwork->country->name,
'final_country' => $finalNetwork->country->name, 'network' => $initNetwork->name]);
$this->sendMail($request->email_destinataire, trans('messages.cash_incoming_payment'), $message);
return $this->successResponse(trans('messages.success_treated_demand'));
break;
case 18:
return $this->successResponse(trans('messages.success_treated_demand'));
break;
}
}
private function getTransactionID()
{
do {
$code = $this->generateTransactionCode();
$result = collect(DB::select('SELECT * FROM wallet_ilink_transaction WHERE id_transaction = :code', ['code' => $code]));
$codeCorrect = sizeof($result) < 0;
} while ($codeCorrect);
return $code;
}
}

View File

@ -9,9 +9,11 @@ use App\Models\WalletAgent;
use App\Models\WalletsUser; use App\Models\WalletsUser;
use App\Traits\ApiResponser; use App\Traits\ApiResponser;
use App\Traits\Helper; use App\Traits\Helper;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class WalletController extends Controller class WalletController extends Controller
{ {
@ -386,7 +388,7 @@ class WalletController extends Controller
* @OA\Parameter( * @OA\Parameter(
* parameter="id_wallet_network", * parameter="id_wallet_network",
* name="id_wallet_network", * name="id_wallet_network",
* description="ID du reseau auquel appartient le wallet", * description="ID du reseau enregistré dans la base de données auquel appartient le wallet",
* in="path", * in="path",
* required=true, * required=true,
* @OA\Schema( * @OA\Schema(
@ -430,7 +432,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
* @OA\Parameter( * @OA\Parameter(
* parameter="id_wallet_network", * parameter="id_wallet_network",
* name="id_wallet_network", * name="id_wallet_network",
* description="ID du reseau auquel appartient le wallet", * description="ID du reseau enregistré dans la base de données auquel appartient le wallet",
* in="path", * in="path",
* required=true, * required=true,
* @OA\Schema( * @OA\Schema(
@ -486,7 +488,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
* @OA\Property(property="id_bank", * @OA\Property(property="id_bank",
* type="integer", * type="integer",
* example=4, * example=4,
* description="ID de la banque" * description="ID de la banque enregistré dans la base de données"
* ), * ),
* @OA\Property(property="id_wallet_network", * @OA\Property(property="id_wallet_network",
* type="integer", * type="integer",
@ -496,7 +498,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
* @OA\Property(property="id_user", * @OA\Property(property="id_user",
* type="integer", * type="integer",
* example = 12, * example = 12,
* description="ID de l'utilisateur" * description="ID de l'utilisateur enregistré dans la base de données"
* ) * )
* ) * )
* ) * )
@ -508,7 +510,7 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
* ref="#/components/schemas/ApiResponse", * ref="#/components/schemas/ApiResponse",
* example = { * example = {
* "status" : 200, * "status" : 200,
* "response" : "Rattachement de votre compte bancaire effectué", * "response" : "Votre requête de rattachement de votre compte bancaire a été prise en compte, vous recevrez un mail de confirmation dès lors que la banque aura validé votre code IBAN",
* "error":null * "error":null
* } * }
* ) * )
@ -527,6 +529,14 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
$user = User::findOrFail($request->id_user); $user = User::findOrFail($request->id_user);
if (isset($user->iban) && isset($user->id_bank_country))
return $this->errorResponse(trans('errors.wallet_already_linked_to_bank_account'));
//Verifier si l'utilisateur est identifié
$identification = $this->checkUserIdentification($user->id);
if ($identification instanceof JsonResponse)
return $identification;
//Verifier si la banque est associée au reseau //Verifier si la banque est associée au reseau
$network_bank = NetworksOperator::where('id_network', $request->id_wallet_network)->where('id_operator_country', $request->id_bank)->first(); $network_bank = NetworksOperator::where('id_network', $request->id_wallet_network)->where('id_operator_country', $request->id_bank)->first();
if (!$network_bank) if (!$network_bank)
@ -547,9 +557,16 @@ INNER JOIN countries c ON oc.id_country = c.id INNER JOIN type_operators top ON
return $this->errorResponse(trans('errors.bank_not_match_iban')); return $this->errorResponse(trans('errors.bank_not_match_iban'));
} }
$user->iban = $request->iban; // Envoyer une requete vers la banque contant ses informations personnelles pour verfication du code iban
$user->id_bank_country = $request->id_bank; // dd($identification);
$user->save(); Log::info('-------------------------- User - Rattacher le compte bancaire au wallet ------------------------------------');
Log::info(array_merge($request->toArray(), $identification->toArray()));
Log::info('------------------------------------------------------------------------------------------------');
// $user->iban = $request->iban;
// $user->id_bank_country = $request->id_bank;
// $user->save();
return $this->successResponse(trans('messages.successful_bank_account_attachment')); return $this->successResponse(trans('messages.successful_bank_account_attachment'));
} }

View File

@ -485,12 +485,12 @@ class iLinkTransactionController extends Controller
* @OA\Property(property="id_wallet_user", * @OA\Property(property="id_wallet_user",
* type="integer", * type="integer",
* example=9, * example=9,
* description="ID du wallet de l'utilisateur" * description="ID du wallet de l'utilisateur enregistré dans la base de données"
* ), * ),
* @OA\Property(property="id_wallet_network", * @OA\Property(property="id_wallet_network",
* type="integer", * type="integer",
* example=101, * example=101,
* description="ID du reseau auquel appartient le wallet" * description="ID du reseau enregistré dans la base de données auquel appartient le wallet"
* ), * ),
* @OA\Property(property="montant", * @OA\Property(property="montant",
* type="number", * type="number",
@ -1226,12 +1226,12 @@ class iLinkTransactionController extends Controller
* @OA\Property(property="id_wallet_user", * @OA\Property(property="id_wallet_user",
* type="integer", * type="integer",
* example=9, * example=9,
* description="ID du wallet de l'agent" * description="ID du wallet de l'agent enregistré dans la base de données"
* ), * ),
* @OA\Property(property="id_wallet_network", * @OA\Property(property="id_wallet_network",
* type="integer", * type="integer",
* example=101, * example=101,
* description="ID du reseau auquel appartient le wallet" * description="ID du reseau enregistré dans la base de données auquel appartient le wallet"
* ), * ),
* @OA\Property(property="iban", * @OA\Property(property="iban",
* type="string", * type="string",
@ -1240,7 +1240,7 @@ class iLinkTransactionController extends Controller
* @OA\Property(property="id_bank", * @OA\Property(property="id_bank",
* type="integer", * type="integer",
* example=4, * example=4,
* description="ID de la banque" * description="ID de la banque enregistré dans la base de données"
* ), * ),
* @OA\Property(property="nom_emetteur", * @OA\Property(property="nom_emetteur",
* type="string", * type="string",
@ -1366,12 +1366,12 @@ class iLinkTransactionController extends Controller
* @OA\Property(property="id_wallet_user", * @OA\Property(property="id_wallet_user",
* type="integer", * type="integer",
* example=9, * example=9,
* description="ID du wallet de l'utilisateur" * description="ID du wallet de l'utilisateur enregistré dans la base de données"
* ), * ),
* @OA\Property(property="id_wallet_network", * @OA\Property(property="id_wallet_network",
* type="integer", * type="integer",
* example=101, * example=101,
* description="ID du reseau auquel appartient le wallet" * description="ID du reseau enregistré dans la base de données auquel appartient le wallet"
* ), * ),
* @OA\Property(property="no_facture", * @OA\Property(property="no_facture",
* type="string", * type="string",
@ -1470,7 +1470,7 @@ class iLinkTransactionController extends Controller
* @OA\Property(property="id_wallet_user", * @OA\Property(property="id_wallet_user",
* type="integer", * type="integer",
* example=9, * example=9,
* description="ID du wallet de l'utilisateur" * description="ID du wallet de l'utilisateur enregistré dans la base de données"
* ), * ),
* @OA\Property(property="montant", * @OA\Property(property="montant",
* type="number", * type="number",
@ -1903,17 +1903,6 @@ class iLinkTransactionController extends Controller
} }
private function checkUserIdentification($id_user)
{
$identification = Identification::where('id_user', $id_user)->first();
if (isset($identification)) {
if ($identification->status == 0)
return $this->errorResponse(trans('errors.validation_user_identification_required'));
} else {
return $this->errorResponse(trans('errors.user_identification_required'));
}
}
// public function index(Request $request){ // public function index(Request $request){
// //
// $notices = DB::select('select notices.id,notices.title,notices.body,notices.created_at,notices.updated_at, // $notices = DB::select('select notices.id,notices.title,notices.body,notices.created_at,notices.updated_at,

View File

@ -499,4 +499,18 @@ trait Helper
return $date->format('Y-m-d H:i:s'); return $date->format('Y-m-d H:i:s');
} }
// Verifier l'identification d'un utilisateur à partir de son id
public function checkUserIdentification($id_user)
{
$identification = Identification::where('id_user', $id_user)->first();
if (isset($identification)) {
if ($identification->status == 0)
return $this->errorResponse(trans('errors.validation_user_identification_required'));
else
return $identification;
} else {
return $this->errorResponse(trans('errors.user_identification_required'));
}
}
} }

View File

@ -83,4 +83,5 @@ Paying network : :network :country',
"not_matching_operator" => "This operator is not a :type_operator", "not_matching_operator" => "This operator is not a :type_operator",
"wallet_not_linked_to_bank_account" => "Your wallet is not linked to a bank account", "wallet_not_linked_to_bank_account" => "Your wallet is not linked to a bank account",
"update_banking_information" => "Update your banking information", "update_banking_information" => "Update your banking information",
"wallet_already_linked_to_bank_account" => "Your wallet is already linked to your bank account",
]; ];

View File

@ -310,4 +310,5 @@ Transaction Information:
- Recipient's names : :receiver_name - Recipient's names : :receiver_name
- IBAN of the recipient : :iban - IBAN of the recipient : :iban
- Bank : :bank :country", - Bank : :bank :country",
'successful_bank_account_attachment_taken' => 'Your request to link your bank account has been taken into account, you will receive a confirmation email as soon as the bank has validated your IBAN code',
]; ];

View File

@ -83,4 +83,5 @@ Réseau payeur : :network :country',
"not_matching_operator" => "Cet opérateur n'est pas un :type_operator", "not_matching_operator" => "Cet opérateur n'est pas un :type_operator",
"wallet_not_linked_to_bank_account" => "Votre wallet n'est pas rattaché à un compte bancaire", "wallet_not_linked_to_bank_account" => "Votre wallet n'est pas rattaché à un compte bancaire",
"update_banking_information" => "Mettez à jour vos informations bancaires", "update_banking_information" => "Mettez à jour vos informations bancaires",
"wallet_already_linked_to_bank_account" => "Votre wallet est déjà rattaché à votre compte bancaire",
]; ];

View File

@ -311,4 +311,5 @@ Informations de la transaction :
- Noms du destinataire : :receiver_name - Noms du destinataire : :receiver_name
- IBAN du destinataire : :iban - IBAN du destinataire : :iban
- Banque : :bank :country", - Banque : :bank :country",
'successful_bank_account_attachment_taken' => 'Votre requête de rattachement de votre compte bancaire a été prise en compte, vous recevrez un mail de confirmation dès lors que la banque aura validé votre code IBAN.',
]; ];

View File

@ -1,5 +1,5 @@
<?php <?php
/** @var \Laravel\Lumen\Routing\Router $router */
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Routes | Application Routes
@ -16,7 +16,6 @@
//}); //});
$router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($router) { $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($router) {
// Helper routes // Helper routes
$router->post('receivePayment', 'TransmittingNetworksController@receivePayment');
$router->post('update_password', 'UserController@updatePassword'); $router->post('update_password', 'UserController@updatePassword');
$router->get('agent_codes/{agent_code}', 'HelperController@agentCodes'); $router->get('agent_codes/{agent_code}', 'HelperController@agentCodes');
$router->get('countries', 'HelperController@countries'); $router->get('countries', 'HelperController@countries');