+ Update response email for agent operation

This commit is contained in:
Djery-Tom 2020-06-20 16:08:13 +01:00
parent f2e8318347
commit 7e3ce25b86
10 changed files with 272 additions and 38 deletions

View File

@ -57,7 +57,7 @@ class UserController extends Controller
if ($identification->status == 1) {
return $this->errorResponse(trans('messages.identification_already_validated'));
}
// dd($request->allFiles());
// dd($request->all());
$this->validate($request, [
'id_network' => 'required|integer|min:0|not_in:0',
'id_country' => 'required|integer|min:0|not_in:0',
@ -67,7 +67,7 @@ class UserController extends Controller
]);
$identification->idNetwork = $request->id_network;
$identification->id_country = $request->id_country;
$identification->country_id = $request->id_country;
$identification->document_image_front = $this->uploadImage($request,'document_image_front','D-F',"documents");
$identification->document_image_back = $this->uploadImage($request,'document_image_back','D-B',"documents");
$identification->user_image = $this->uploadImage($request,'user_image','U',"photos");

View File

@ -127,13 +127,44 @@ class iLinkTransactionController extends Controller
break;
case 12: // Agent - Retrait en cash
$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);
if($transaction){
if($transaction->status_retrait == 0){
if($this->checkPassword($request->code_retrait, $transaction->encrypted_code_retrait, $transaction->code_retrait_salt)){
$part_ag = floatval($transaction->frais * $config->taux_com_ag_retrait_cash/ 100) ;
$part_sup = floatval($transaction->frais * $config->taux_com_sup_retrait_cash/ 100);
$walletAgent->balance_princ -= $transaction->montant_retrait;
$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->save();
$walletSuperviseur->save();
$walletHyperviseur->save();
$transaction->save();
return $this->successResponse(trans('messages.successful_transaction'));
}else{
return $this->errorResponse('Code de retrait invalide');
}
}else{
return $this->errorResponse('Retrait déjà éffectuée');
}
}else{
return $this->errorResponse('Cette transaction n\'existe pas',Response::HTTP_NOT_FOUND);
}
}else{
return $this->errorResponse(trans('messages.incorrect_user_password'));
}
break;
case 13: // Agent - Retrait de la carte vers cash
break;
case 14: // Agent - Envoi de cash vers wallet iLink
$this->validate($request, $transaction->first_rules());
$this->validate($request, $transaction->cash_wallet_rules());
$agent = AgentPlus::findOrFail($network_agent->agent_id);
if ($this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) {
$user = User::where('user_code', $request->user_code)->firstOrFail();
@ -166,14 +197,17 @@ class iLinkTransactionController extends Controller
$transaction->id_wallet_sup = $walletSuperviseur->id;
$transaction->id_wallet_hyp = $walletHyperviseur->id;
$transaction->save();
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_deposit_ilink',['montant'=> $montantDepot]));
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_deposit_ilink',
['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' => $request->user_code]));
return $this->successResponse(trans('messages.successful_transaction'));
} else {
return $this->errorResponse(trans('messages.incorrect_user_password'));
}
break;
case 15: // Agent - Envoi de cash vers autre wallet
// $this->validate($request, $transaction->first_rules());
$this->validate($request, $transaction->cash_cash_rules());
$agent = AgentPlus::findOrFail($network_agent->agent_id);
if ($this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) {
$frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_agent_depot_autre_wallet, $request->montant) : $this->calculateFees($plr_agent_depot_autre_wallet_national, $request->montant);
@ -209,7 +243,7 @@ class iLinkTransactionController extends Controller
}
break;
case 16: // Agent - Envoi de cash vers une carte visa
$this->validate($request, $transaction->card_rules());
$this->validate($request, $transaction->cash_cash_rules());
$agent = AgentPlus::findOrFail($network_agent->agent_id);
if ($this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) {
$expiration_date = \DateTime::createFromFormat('m/y', $request->expiration_date);
@ -268,7 +302,9 @@ class iLinkTransactionController extends Controller
}
break;
case 17: // Agent - Envoi de cash vers cash
$this->validate($request, $transaction->cash_cash_rules());
$this->validate($request, array_merge($transaction->cash_cash_rules(), [
'email_emetteur' => 'required',
]));
$agent = AgentPlus::findOrFail($network_agent->agent_id);
if ($this->checkPassword($request->password, $agent->encrypted_password, $agent->salt)) {
$frais = ($request->init_country != $request->final_country) ? $this->calculateFees($plr_agent_cash_cash, $request->montant) : $this->calculateFees($plr_agent_cash_cash_national, $request->montant);
@ -303,8 +339,11 @@ class iLinkTransactionController extends Controller
$walletSuperviseur->save();
$walletHyperviseur->save();
$transaction->save();
$this->sendMail($request->email_emetteur, trans('messages.successful_transaction'), trans('messages.successful_send_cash',['montant'=> $montantRetrait,
'code'=> $code_retrait]));
$this->sendMail($request->email_emetteur, trans('messages.successful_transaction'), trans('messages.successful_send_cash',
['sender_name' => $request->prenom_emetteur . ' ' . $request->nom_emetteur, 'receiver_name' => $request->prenom_destinataire . ' ' . $request->prenom_destinataire,
'id_transaction' => $transaction->id, 'amount' => $this->toMoney($transaction->montant,$request->init_country), 'net_init' =>$this->toMoney($montantRetrait,$request->init_country) ,
'net_final' =>$this->convertMoney($montantRetrait,$request->init_country,$request->final_country) ,'fees' => $this->toMoney($frais,$request->init_country) ,'tax' => $this->toMoney($taxe,$request->init_country),
'code' => wordwrap($code_retrait , 4 , ' ' , true )]));
return $this->successResponse(trans('messages.successful_transaction'));
} else {
return $this->errorResponse(trans('messages.incorrect_user_password'));
@ -405,7 +444,7 @@ class iLinkTransactionController extends Controller
private function random_string()
{
$character_set_array = array();
$character_set_array[] = array('count' => 12, 'characters' => 'abcdefghjkmnpqrstuvwxyz');
$character_set_array[] = array('count' => 12, 'characters' => 'ABCDEFGHJKMNPQRSTUVWXYZ');
$character_set_array[] = array('count' => 4, 'characters' => '23456789');
$temp_array = array();
foreach ($character_set_array as $character_set) {

View File

@ -24,6 +24,7 @@ use Illuminate\Database\Eloquent\Model;
* @property Collection|Admin[] $admins
* @property Collection|ConfigGame[] $config_games
* @property Collection|Identification[] $identifications
* @property Collection|WalletIlinkTransaction[] $wallet_ilink_transactions
*
* @package App\Models
*/
@ -64,6 +65,11 @@ class Country extends Model
public function identifications()
{
return $this->hasMany(Identification::class, 'country');
return $this->hasMany(Identification::class);
}
public function wallet_ilink_transactions()
{
return $this->hasMany(WalletIlinkTransaction::class, 'final_country');
}
}

47
app/Models/Currency.php Normal file
View File

@ -0,0 +1,47 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
/**
* Class Currency
*
* @property int $id
* @property string $code
* @property int $numeric
* @property string $symbol
* @property string $name_en
* @property string $name_fr
*
* @property Collection|Country[] $countries
*
* @package App\Models
*/
class Currency extends Model
{
protected $table = 'currencies';
public $timestamps = false;
protected $casts = [
'numeric' => 'int'
];
protected $fillable = [
'code',
'numeric',
'symbol',
'name_en',
'name_fr'
];
public function countries()
{
return $this->hasMany(Country::class, 'idCurrency');
}
}

View File

@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Model;
* @property string $encrypted_code_retrait
* @property string $code_retrait_salt
* @property int $status_retrait
* @property Carbon $date_retrait
* @property string $id_destinataire
* @property string $type_id_destinataire
* @property int $network_destinataire
@ -85,6 +86,7 @@ class WalletIlinkTransaction extends Model
];
protected $dates = [
'date_retrait',
'expiration_date',
'date'
];
@ -96,6 +98,7 @@ class WalletIlinkTransaction extends Model
'encrypted_code_retrait',
'code_retrait_salt',
'status_retrait',
'date_retrait',
'id_destinataire',
'type_id_destinataire',
'network_destinataire',
@ -154,7 +157,7 @@ class WalletIlinkTransaction extends Model
// Regles de validation
//Envoi de cash vers wallet iLink
public function first_rules()
public function cash_wallet_rules()
{
return [
'user_code'=>'required',
@ -181,13 +184,21 @@ class WalletIlinkTransaction extends Model
'final_country' =>'required|integer|min:0|not_in:0',
'nom_emetteur'=>'required',
'prenom_emetteur'=>'required',
'email_emetteur'=>'required',
'type_document_emetteur'=>'required',
'id_document_emetteur'=>'required',
'nom_destinataire'=>'required',
'prenom_destinataire'=>'required',
'type_document_destinataire'=>'required',
'id_document_destinataire'=>'required',
'id_destinataire' => 'required',
'montant'=> 'required|numeric|min:0|not_in:0'
];
}
public function remove_cash_rules(){
return [
'id_transaction' =>'required|integer|min:0|not_in:0',
'code_retrait' =>'required|size:16',
'montant'=> 'required|numeric|min:0|not_in:0'
];
}

View File

@ -4,11 +4,20 @@
namespace App\Traits;
use App\Models\Country;
use Illuminate\Support\Facades\Mail;
use Brick\Money\CurrencyConverter;
use Brick\Money\ExchangeRateProvider\PDOProvider;
use Brick\Money\ExchangeRateProvider\PDOProviderConfiguration;
use Brick\Money\ExchangeRateProvider\BaseCurrencyProvider;
use Brick\Money\Money;
use Brick\Math\RoundingMode;
use PDO;
trait Helper
{
public function sendMail($email , $title , $messageText){
public function sendMail($email, $title, $messageText)
{
$recipients = [$email];
Mail::mailer('smtp')->raw($messageText, function ($message) use ($recipients, $title) {
@ -24,11 +33,50 @@ trait Helper
return $encrypted_password_to_check == $encrypted_password;
}
public function hashSSHA($string) {
public function hashSSHA($string)
{
$salt = sha1(rand());
$salt = substr($salt, 0, 10);
$encrypted = base64_encode(sha1($string . $salt, true) . $salt);
$hash = array("salt" => $salt, "encrypted" => $encrypted);
return $hash;
}
public function toMoney($amount, $id_country)
{
$country = Country::findOrFail($id_country);
$money = Money::of(round($amount, 0),$country->currency->code);
return $money->formatTo('fr_FR');
}
public function convertMoney($amount , $init_country , $final_country)
{
// set to whatever your rates are relative to
$baseCurrency = 'USD';
// use your own credentials, or re-use your existing PDO connection
$pdo = new PDO('mysql:host=' .env('DB_HOST') . ';dbname=' .env('DB_DATABASE'), env('DB_USERNAME'), env('DB_PASSWORD'));
$configuration = new PDOProviderConfiguration();
$configuration->tableName = 'exchange_rate';
$configuration->exchangeRateColumnName = 'exchange_rate';
$configuration->targetCurrencyColumnName = 'target_currency';
$configuration->sourceCurrencyCode = $baseCurrency;
// this provider loads exchange rates from your database
$provider = new PDOProvider($pdo, $configuration);
// this provider calculates exchange rates relative to the base currency
$provider = new BaseCurrencyProvider($provider, $baseCurrency);
// this currency converter can now handle any currency pair
$converter = new CurrencyConverter($provider);
$init_country = Country::findOrFail($init_country);
$final_country = Country::findOrFail($final_country);
$init_money = Money::of(round($amount, 0),$init_country->currency->code);;
$final_money = $converter->convert($init_money, $final_country->currency->code, RoundingMode::DOWN);
return $final_money->formatTo('fr_FR');
}
}

View File

@ -6,6 +6,7 @@
"type": "project",
"require": {
"php": "^7.2.5",
"brick/money": "^0.4.5",
"guzzlehttp/guzzle": "^6.5",
"illuminate/mail": "^7.13",
"laravel/lumen-framework": "^7.0",

54
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "38b17bef54c08bf451d9d7db7a488b12",
"content-hash": "5adcfbb33de444fa415816ca02cd157e",
"packages": [
{
"name": "brick/math",
@ -51,6 +51,58 @@
],
"time": "2020-02-17T13:57:43+00:00"
},
{
"name": "brick/money",
"version": "0.4.5",
"source": {
"type": "git",
"url": "https://github.com/brick/money.git",
"reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/brick/money/zipball/91f2b5bc35646f172b038e46bb496ad18db59c3c",
"reference": "91f2b5bc35646f172b038e46bb496ad18db59c3c",
"shasum": ""
},
"require": {
"brick/math": "~0.7.3 || ~0.8.0",
"php": "^7.1|^8.0"
},
"require-dev": {
"brick/varexporter": "~0.2.1",
"ext-dom": "*",
"ext-pdo": "*",
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^7.5.15"
},
"suggest": {
"ext-intl": "Required to format Money objects"
},
"type": "library",
"autoload": {
"psr-4": {
"Brick\\Money\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Money and currency library",
"keywords": [
"brick",
"currency",
"money"
],
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/brick/money",
"type": "tidelift"
}
],
"time": "2020-05-31T14:17:02+00:00"
},
{
"name": "doctrine/inflector",
"version": "1.3.1",

View File

@ -28,5 +28,21 @@ Welcome to the iLink World family !!!
Regards,
ILinkWorld team.',
'successful_deposit_ilink' => 'Your ilink account has been reloaded with :montant'
'successful_deposit_ilink' => 'Deposit to an iLink wallet. User code: :user_code
Transaction information:
- Transaction ID : :id_transaction
- Amount of the transaction : :amount
- Net amount of the country of departure : :net_init
- Net amount of the destination country : :net_final
- Fees : :fees
- Tax : :tax',
'successful_send_cash'=>'Sent by :sender_name to :receiver_name.
Transaction information:
- Transaction ID : :id_transaction
- Amount of the transaction : :amount
- Net amount of the country of departure : :net_init
- Net amount of the destination country : :net_final
- Fees : :fees
- Tax : :tax
- Withdrawal code : :code'
];

View File

@ -28,7 +28,21 @@ Bienvenue dans la famille iLink World !!!
Cordialement,
Equipe iLinkWorld.',
'successful_deposit_ilink' => 'Votre compte ilink a été rechargé d\'un montant de :montant',
'successful_send_cash' => 'Vous avez envoyé une somme de :montant .
Code de retrait : :code',
'successful_deposit_ilink' => 'Dépot vers un wallet iLink. Code de l\'utilisateur : :user_code
Informations de la transaction :
- Transaction ID : :id_transaction
- Montant de la transaction : :amount
- Montant net du pays de départ : :net_init
- Montant net du pays de destination : :net_final
- Frais : :fees
- Taxe : :tax',
'successful_send_cash' => 'Envoi effectué par :sender_name à :receiver_name.
Informations de la transaction :
- Transaction ID : :id_transaction
- Montant de la transaction : :amount
- Montant net du pays de départ : :net_init
- Montant net du pays de destination : :net_final
- Frais : :fees
- Taxe : :tax
- Code de retrait : :code',
];