+ Fix bugs and add User - Envoi de wallet à carte

This commit is contained in:
Djery-Tom 2020-06-23 17:21:26 +01:00
parent 2ecf785ca3
commit 8a87d9231c
7 changed files with 125 additions and 49 deletions

View File

@ -113,6 +113,9 @@ class iLinkTransactionController extends Controller
$walletUser = WalletsUser::findOrFail($request->id_wallet_user);
$user = User::findOrFail($walletUser->idUser);
if ($this->checkPassword($request->password, $user->encrypted_password, $user->salt)) {
if($request->montant > $walletUser->balance){
return $this->errorResponse(trans('errors.insufficient_balance'));
}else{
$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;
@ -165,12 +168,58 @@ class iLinkTransactionController extends Controller
'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'));
}
break;
case 2: //User - Envoi de wallet à carte
$this->validate($request, $transaction->card_rules());
$walletUser = WalletsUser::findOrFail($request->id_wallet_user);
$user = User::findOrFail($walletUser->idUser);
if ($this->checkPassword($request->password, $user->encrypted_password, $user->salt)) {
if ($request->montant > $walletUser->balance) {
return $this->errorResponse(trans('errors.insufficient_balance'));
} else {
$expiration_date = \DateTime::createFromFormat('m/y', $request->expiration_date);
if (!$expiration_date)
$expiration_date = new \DateTime();
$transaction->expiration_date = $expiration_date;
$frais = $request->montant * $config->taux_com_user_wallet_carte / 100;
$transaction->montant_depot = $montantDepot = $transaction->montant - $frais;
$body['amount'] = $montantDepot;
$body['card_number'] = $request->numero_carte;
$body['cvv'] = $request->cvv;
$body['expiry_date'] = $expiration_date->format('Y-m');
$response = $client->post('fund-transfer-api/v1/transaction/push', ['json' => $body]);
$code = $response->getStatusCode();
if ($code == 200) {
$walletUser->balance -= $transaction->montant;
$walletHyperviseur->balance_com += $frais;
$transaction->commission_hyp = $frais;
$transaction->id_wallet_hyp = $walletHyperviseur->id;
$transaction->frais = $frais;
$transaction->date = new \DateTime();
$walletHyperviseur->save();
$walletUser->save();
$transaction->save();
$this->sendMail($user->email, trans('messages.successful_transaction'), trans('messages.successful_user_send_to_cart',
['id_transaction' => $transaction->id, 'amount' => $this->toMoneyWithNetwork($transaction->montant, $request->id_network),
'net' => $this->toMoneyWithNetwork($montantDepot, $request->id_network), 'fees' => $this->toMoneyWithNetwork($frais, $request->id_network),
'sender_code' => $user->user_code, 'cart_number' => wordwrap($request->numero_carte, 4, ' ', true)]));
return $this->successResponse(trans('messages.successful_transaction'));
} else {
return $this->errorResponse(trans('errors.visa_api_failed'), Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
}else{
return $this->errorResponse(trans('messages.incorrect_user_password'));
}
break;
case 3: //User - Envoi de wallet à cash

View File

@ -13,6 +13,7 @@ use Brick\Money\ExchangeRateProvider\BaseCurrencyProvider;
use Brick\Money\Money;
use Brick\Math\RoundingMode;
use PDO;
use Illuminate\Support\Facades\DB;
trait Helper
{
@ -46,6 +47,14 @@ trait Helper
return Country::findOrFail($id_country)->name;
}
public function toMoneyWithNetwork($amount , $id_network){
$currency = collect(DB::select('SELECT cu.code FROM networks n INNER JOIN countries c ON c.id = n.country_id INNER JOIN currencies cu ON cu.id = c.idCurrency
WHERE n.id = :id',['id'=>$id_network]))->first();
$money = Money::of(round($amount, 0),$currency ? $currency->code : 'XAF');
return $money->formatTo('fr_FR');
}
public function toMoney($amount, $id_country)
{
$country = Country::findOrFail($id_country);

View File

@ -9,5 +9,6 @@ return [
'visa_api_failed'=> 'Request to API visa failed',
'failed_transaction' => 'Failed transaction',
'user_phone_not_exist' => 'This customer number does not exist',
'wallet_not_defined' => 'This code does not correspond to an iLink wallet'
'wallet_not_defined' => 'This code does not correspond to an iLink wallet',
'insufficient_balance'=> 'The balance is insufficient to complete this transaction',
];

View File

@ -56,4 +56,12 @@ Transaction information:
- Fees + Tax : :fees
- Number of the sending wallet: :sender_code
- Number of the recipient wallet: :receiver_code',
'successful_user_send_to_cart' => 'Sending money to a visa card made.
Transaction information:
- Transaction ID: :id_transaction
- Amount of the transaction: :amount
- Net shipping amount: :net
- Fees: :fees
- Number of the sending wallet: :sender_code
- Recipient\'s card number: :cart_number',
];

View File

@ -9,5 +9,6 @@ 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',
'wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink'
'wallet_not_defined' => 'Ce code ne correspond pas à un wallet iLink',
'insufficient_balance'=> 'Le solde est insuffisant pour effectuer cette transaction',
];

View File

@ -56,4 +56,12 @@ Informations de la transaction :
- Frais et Taxe : :fees
- Numero du wallet émetteur : :sender_code
- Numero du wallet destinataire : :receiver_code',
'successful_user_send_to_cart' => 'Envoi d\'argent vers une carte visa effectué.
Informations de la transaction :
- Transaction ID : :id_transaction
- Montant de la transaction : :amount
- Montant net d\'envoi: :net
- Frais : :fees
- Numero du wallet émetteur : :sender_code
- Numero de la carte du destinataire : :cart_number',
];