+ add user's bank account verification route

This commit is contained in:
Djery-Tom 2020-12-01 11:52:38 +01:00
parent ee958746eb
commit c8777d6d48
13 changed files with 500 additions and 2 deletions

View File

@ -42,7 +42,7 @@ class TransmittingNetworksController extends Controller
* @OA\Post( * @OA\Post(
* path="/emitTransaction", * path="/emitTransaction",
* summary="Emettre une transaction vers le backend de iLink APP", * summary="Emettre une transaction vers le backend de iLink APP",
* tags={"Transaction vers le backend de iLink APP"}, * tags={"Transaction vers le backend de iLink App"},
* security={{"api_key":{}}}, * security={{"api_key":{}}},
* @OA\RequestBody( * @OA\RequestBody(
* description="Corps de la requete", * description="Corps de la requete",

View File

@ -0,0 +1,135 @@
<?php
namespace App\Http\Controllers;
use App\Models\ConfigWallet;
use App\Models\Identification;
use App\Models\Network;
use App\Models\NetworksOperator;
use App\Models\TransmittingNetwork;
use App\Models\User;
use App\Models\UsersBankingAccountVerification;
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 UserController extends Controller
{
use ApiResponser;
use Helper;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* @OA\Post(
* path="/confirmUserBankAccount",
* summary="Confirmer le compte bancaire d'un utilisateur ( Reservé uniquement au operateur bancaire )",
* tags={"Confirmer le compte bancaire d'un utilisateur"},
* security={{"api_key":{}}},
* @OA\RequestBody(
* description="Corps de la requete",
* required=true,
* @OA\MediaType(
* mediaType="application/json",
* @OA\Schema(
* @OA\Property(property="id_transaction",
* type="string",
* example = "CYS6E5OWBDHC",
* description="ID de la transaction (obtenu lors de la demande de verification)"
* ),
* @OA\Property(property="id_bank",
* type="integer",
* example=4,
* description="ID de la banque enregistré dans la base de données"
* ),
* @OA\Property(property="is_verified",
* type="boolean",
* example=true,
* description="Reponse de la demande de verification"
* ),
* )
* )
* ),
* @OA\Response(
* response=200,
* description="OK",
* @OA\JsonContent(
* ref="#/components/schemas/ApiResponse",
* example = {
* "status" : 200,
* "response" : "Demande traitée avec succès",
* "error":null
* },
* )
* )
* )
*/
// Perment aux operateurs bancaires de confirmer le code iban d'un utilisateur simple, suite à la requete de rattachement qui a été faites
public function confirmUserBankAccount(Request $request)
{
$this->validate($request, [
'id_transaction' => 'required',
'id_bank' => 'required',
'is_verified' => 'required|boolean'
]);
$transaction = UsersBankingAccountVerification::where('id_transaction', $request->id_transaction)->first();
if (!$transaction)
return $this->errorResponse(trans('errors.transaction_not_exist'));
if ($transaction->was_treated)
return $this->errorResponse(trans('errors.treated_demand'));
if ($transaction->id_bank_country != $request->id_bank)
return $this->errorResponse(trans('errors.not_authorized_to_process_request'));
$transaction->is_verified = $request->is_verified;
$user = User::where('user_code', $transaction->user_code)->first();
if (!$user)
return $this->errorResponse(trans('errors.unexpected_error'));
if ($request->is_verified) {
$user->iban = $transaction->iban;
$user->id_bank_country = $transaction->id_bank_country;
$user->save();
}
$transaction->was_treated = true;
$transaction->save();
if($request->is_verified){
$identification = Identification::where('id_user',$user->id)->first();
$owner = isset($identification) ? $identification->lastname.' '.$identification->firstname : $user->lastname.' '.$user->firstname;
$network_bank = NetworksOperator::where('id_network', $transaction->id_network )->where('id_operator_country', $request->id_bank)->first();
$bank = isset($network_bank) ? $network_bank->operators_country->operator->nom : 'n/a';
$country = isset($network_bank) ? $network_bank->network->country->name : 'n/a';
$message = trans('messages.successful_bank_account_attachment_message',
['iban' => $transaction->iban, 'owner' => $owner , 'bank' => $bank , 'country' => $country ]);
$this->sendMail($user->email, trans('messages.successful_bank_account_attachment'), $message);
}else{
$this->sendMail($user->email, trans('messages.failed_bank_account_attachment'), trans('messages.failed_bank_account_attachment_message'));
}
$this->successResponse(trans('messages.success_treated_demand'));
}
}

View File

@ -0,0 +1,104 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class Identification
*
* @property int $id
* @property string $firstname
* @property string $lastname
* @property Carbon $birth_date
* @property string $town
* @property string $country
* @property string $identity_document
* @property string $id_identity_document
* @property Carbon $expiry_date_document
* @property int $id_user
* @property int $status
* @property Carbon $createdAt
* @property string $user_image
* @property string $document_image_front
* @property string $document_image_back
* @property int $idNetwork
* @property int $country_id
*
* @property User $user
* @property Network $network
*
* @package App\Models
*/
class Identification extends Model
{
protected $table = 'identifications';
public $timestamps = false;
protected $casts = [
'id_user' => 'int',
'status' => 'int',
'idNetwork' => 'int',
'country_id' => 'int'
];
protected $dates = [
'birth_date',
'expiry_date_document',
'createdAt'
];
protected $fillable = [
'firstname',
'lastname',
'birth_date',
'town',
'country',
'identity_document',
'id_identity_document',
'expiry_date_document',
'id_user',
'status',
'createdAt',
'user_image',
'document_image_front',
'document_image_back',
'idNetwork',
'country_id'
];
public function country()
{
return $this->belongsTo(Country::class);
}
public function user()
{
return $this->belongsTo(User::class, 'id_user');
}
public function network()
{
return $this->belongsTo(Network::class, 'idNetwork');
}
public function rules()
{
return [
'lastname'=>'required',
'birth_date'=> 'required|date|before_or_equal:today',
'town'=>'required',
'country'=> 'required',
'identity_document'=> 'required',
'id_identity_document'=> 'required',
'expiry_date_document'=>'required|date|after_or_equal:today',
'id_user' => 'required_without_all:phone_number|integer|min:0|not_in:0',
'phone_number' => 'required_without_all:id_user'
];
}
}

View File

@ -0,0 +1,47 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class NetworksOperator
*
* @property int $id
* @property int $id_operator_country
* @property int $id_network
*
* @property OperatorsCountry $operators_country
* @property Network $network
*
* @package App\Models
*/
class NetworksOperator extends Model
{
protected $table = 'networks_operators';
public $timestamps = false;
protected $casts = [
'id_operator_country' => 'int',
'id_network' => 'int'
];
protected $fillable = [
'id_operator_country',
'id_network'
];
public function operators_country()
{
return $this->belongsTo(OperatorsCountry::class, 'id_operator_country');
}
public function network()
{
return $this->belongsTo(Network::class, 'id_network');
}
}

43
app/Models/Operator.php Normal file
View File

@ -0,0 +1,43 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class Operator
*
* @property int $id
* @property string $nom
* @property string|null $type
*
* @property TypeOperator $type_operator
* @property Collection|OperatorsCountry[] $operators_countries
*
* @package App\Models
*/
class Operator extends Model
{
protected $table = 'operators';
public $timestamps = false;
protected $fillable = [
'nom',
'type'
];
public function type_operator()
{
return $this->belongsTo(TypeOperator::class, 'type', 'code');
}
public function operators_countries()
{
return $this->hasMany(OperatorsCountry::class, 'id_operator');
}
}

View File

@ -0,0 +1,61 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class OperatorsCountry
*
* @property int $id
* @property int $id_operator
* @property int $id_country
* @property string|null $adresse
* @property string|null $code
* @property bool $status
*
* @property Operator $operator
* @property Country $country
* @property Collection|NetworksOperator[] $networks_operators
*
* @package App\Models
*/
class OperatorsCountry extends Model
{
protected $table = 'operators_countries';
public $timestamps = false;
protected $casts = [
'id_operator' => 'int',
'id_country' => 'int',
'status' => 'bool'
];
protected $fillable = [
'id_operator',
'id_country',
'adresse',
'code',
'status'
];
public function operator()
{
return $this->belongsTo(Operator::class, 'id_operator');
}
public function country()
{
return $this->belongsTo(Country::class, 'id_country');
}
public function networks_operators()
{
return $this->hasMany(NetworksOperator::class, 'id_operator_country');
}
}

View File

@ -0,0 +1,39 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class TypeOperator
*
* @property int $id
* @property string $code
* @property string|null $description_fr
* @property string|null $description_en
*
* @property Collection|Operator[] $operators
*
* @package App\Models
*/
class TypeOperator extends Model
{
protected $table = 'type_operators';
public $timestamps = false;
protected $fillable = [
'code',
'description_fr',
'description_en'
];
public function operators()
{
return $this->hasMany(Operator::class, 'type', 'code');
}
}

View File

@ -0,0 +1,48 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class UsersBankingAccountVerification
*
* @property int $id
* @property string $id_transaction
* @property string $user_code
* @property string $iban
* @property int $id_bank_country
* @property int $id_network
* @property bool $is_verified
* @property bool $was_treated
* @property Carbon $created_at
* @property Carbon $updated_at
*
* @package App\Models
*/
class UsersBankingAccountVerification extends Model
{
protected $table = 'users_banking_account_verification';
protected $casts = [
'id_bank_country' => 'int',
'id_network' => 'int',
'is_verified' => 'bool',
'was_treated' => 'bool'
];
protected $fillable = [
'id_transaction',
'user_code',
'iban',
'id_bank_country',
'id_network',
'is_verified',
'was_treated'
];
}

View File

@ -84,4 +84,5 @@ Paying network : :network :country',
"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", "wallet_already_linked_to_bank_account" => "Your wallet is already linked to your bank account",
'treated_demand' => 'This request has already been processed',
]; ];

View File

@ -289,7 +289,16 @@ Transaction Information:
- Operator : :operator - Operator : :operator
- Type of operator : :type_operator - Type of operator : :type_operator
- Invoice number : :invoice_number", - Invoice number : :invoice_number",
'successful_bank_account_attachment' => 'Connection of your bank account completed', 'successful_bank_account_attachment' => 'Connection of your bank account has been validated',
'successful_bank_account_attachment_message' => "Your request to link your bank account to your iLink World account has been validated.
Request Information:
- IBAN : :iban
- Bank : :bank: country
- Account holder names : :owner",
'failed_bank_account_attachment' => 'Connection of your bank account has been rejected',
'failed_bank_account_attachment_message' => "Your request to link your bank account to your iLink World account has been rejected.
Please check your information carefully and submit a new request.",
'successful_user_remove_from_bank_to_wallet' => 'Withdrawal from the bank to the wallet 'successful_user_remove_from_bank_to_wallet' => 'Withdrawal from the bank to the wallet
Transaction Information: Transaction Information:
- Number: :id_transaction - Number: :id_transaction

View File

@ -84,4 +84,5 @@ Réseau payeur : :network :country',
"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", "wallet_already_linked_to_bank_account" => "Votre wallet est déjà rattaché à votre compte bancaire",
'treated_demand' => 'Cette demande a déjà été traitée',
]; ];

View File

@ -291,6 +291,15 @@ Informations de la transaction :
- Type d'operateur : :type_operator - Type d'operateur : :type_operator
- No facture : :no_facture", - No facture : :no_facture",
'successful_bank_account_attachment' => 'Rattachement de votre compte bancaire effectué', 'successful_bank_account_attachment' => 'Rattachement de votre compte bancaire effectué',
'successful_bank_account_attachment_message' => "Votre demande de rattachement de votre compte bancaire à votre compte iLink World a été validée.
Informations sur la demande :
- IBAN : :iban
- Banque : :bank :country
- Noms du détenteur du compte : :owner",
'failed_bank_account_attachment' => 'Rattachement de votre compte bancaire rejetée',
'failed_bank_account_attachment_message' => "Votre demande de rattachement de votre compte bancaire à votre compte iLink World a été rejetée.
Veuillez verifier attentivement vos informations et soumettre une nouvelle demande.",
'successful_user_remove_from_bank_to_wallet' => "Retrait de la banque vers le wallet 'successful_user_remove_from_bank_to_wallet' => "Retrait de la banque vers le wallet
Informations de la transaction : Informations de la transaction :
- Numéro : :id_transaction - Numéro : :id_transaction

View File

@ -19,5 +19,6 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route
// }); // });
$router->post('emitTransaction', 'TransmittingNetworksController@emitPayment'); $router->post('emitTransaction', 'TransmittingNetworksController@emitPayment');
$router->post('confirmUserBankAccount', 'UserController@confirmUserBankAccount');
}); });