walletservice/app/Http/Controllers/TransactionController.php

189 lines
9.1 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers;
use App\Models\AgentPlus;
use App\Models\CodeGenerer;
use App\Models\ConfigWallet;
use App\Models\NetworksAgent;
use App\Models\Wallet;
use App\Models\WalletAgent;
use App\Models\WalletTransaction;
use App\Traits\ApiResponser;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class TransactionController extends Controller
{
use ApiResponser;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function add(Request $request)
{
$transaction = new WalletTransaction ;
$this->validate($request,$transaction->rules());
$walletAgent = Wallet::findOrFail($request->get('id_wallet'));
$network_agent = NetworksAgent::findOrFail( $walletAgent->id_networkAgent);
// Configuratrion du wallet
$config = ConfigWallet::where('id_network',$network_agent->network_id)->firstOrFail();
// Recuperation des wallets hyperviseur et superviseur
$codeGenerer = CodeGenerer::findOrFail($network_agent->codeGenerer_id);
$superviseur = AgentPlus::where('code_membre',$codeGenerer->code_parrain)->firstOrFail();
$hyperviseur = AgentPlus::where('code_membre',$superviseur->code_parrain)->firstOrFail();
$wallet_agent_sup = WalletAgent::where('agent_id', $superviseur->id)->firstOrFail();
$wallet_agent_hyp = WalletAgent::where('agent_id', $hyperviseur->id)->firstOrFail();
$walletSuperviseur = Wallet::findOrFail($wallet_agent_sup->wallet_id);
$walletHyperviseur = Wallet::findOrFail($wallet_agent_hyp->wallet_id);
$data = $request->all();
$data['expiration_date'] = \DateTime::createFromFormat('m/y',$request->expiration_date);
$transaction->fill($data);
$client = new \GuzzleHttp\Client();
// Procedure de depot d'argent
if($transaction->type == 'credit')
{
$frais = $transaction->montant * $config->taux_com_client_depot / 100 ;
// Verification faites au niveau du frontend
// if($walletAgent->balance_princ >= ($transaction->montant + $frais + $config->frais_min_banque_depot)){
$response = $client->post('https://ilink-app.com/mobilebackendtest/interacted/MembersAction.php');
$code = $response->getStatusCode();
if($code == 200){
//Requete vers la banque
// 1 ---> Emmètre via API sécurisé SSL une requête de débit de notre
//compte marchand la valeur égale au $montantDepot( montant de la
//transaction la frais calculé en % - frais minimum fixe du
//dépôt client) et créditer sa carte visa de cette valeur
$montantDepot = $transaction->montant - $frais - $config->frais_min_banque_depot;
$banqueCommission = floatval(($frais + $config->frais_min_banque_depot) * $config->part_banque_depot / 100);
$transaction->commission_banque = $banqueCommission;
// 2---> Emmètre via API sécurisé SSL une requête de débit de notre
//compte marchand du (Part de la banque partenaire en %
//pour le dépôtqui sapplique sur les frais minimum) et créditer
//le compte des opérations défini avec notre banque
//partenaire
$walletAgent->balance_princ -= $transaction->montant;
$agentCommission = floatval(($frais + $config->frais_min_banque_depot) * $config->taux_com_ag_depot / 100);
$superviseurCommission = floatval(($frais + $config->frais_min_banque_depot) * $config->taux_com_sup_depot / 100);
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
$walletAgent->balance_com += $agentCommission;
$walletSuperviseur->balance_com += $superviseurCommission;
$walletHyperviseur->balance_com += $hyperviseurCommission;
$transaction->id_wallet_sup = $walletSuperviseur->id;
$transaction->commission_sup = $superviseurCommission;
$transaction->id_wallet_hyp = $walletHyperviseur->id;
$transaction->commission_hyp = $hyperviseurCommission;
$transaction->commission_ag = $agentCommission;
}
// }else{
// return $this->errorResponse('Solde agent inferieur au montant de depot + frais + frais minimun de depot de la banque', Response::HTTP_BAD_REQUEST);
// }
// Procedure de retrait d'argent
}elseif ($transaction->type == 'debit')
{
// 12-05-20: Modif de Mr Manga : Le montant de la transaction c'est le montant de retrait sans les frais
return $this->errorMessage(trans('errors.service_unavailable'),Response::HTTP_SERVICE_UNAVAILABLE);
// $frais = $transaction->montant * $config->taux_com_client_retrait / 100;
//
// $response = $client->post('https://ilink-app.com/mobilebackendtest/interacted/MembersAction.php');
// $code = $response->getStatusCode();
// if($code == 200) {
// //Requete vers la banque
// // 1 ---> Emmètre via API sécurisé SSL une requête de retrait du
// //(montant de la transaction + frais de transaction) pour débiter
// //sa carte et créditer notre compte marchand
// $montantRetrait = $transaction->montant + $frais;
//
// $banqueCommission = floatval($transaction->montant * $config->part_banque_retrait / 100);
// $transaction->commission_banque = $banqueCommission;
// // 2---> Emmètre via API sécurisé SSL une requête de débit de notre
// //compte marchand du (montant de la transaction multiplié
// //par la Part de la banque partenaire en % ) et créditer le
// //compte des opérations défini avec notre banque partenaire
//
// $walletAgent->balance_princ += $transaction->montant;
//
// $agentCommission=floatval($transaction->montant*$config->taux_com_ag_retrait / 100);
// $superviseurCommission=floatval($transaction->montant*$config->taux_com_sup_retrait / 100);
// $hyperviseurCommission = $frais - $superviseurCommission - $agentCommission - $banqueCommission;
//
//// dd(array($hyperviseurCommission ,$superviseurCommission));
// $walletAgent->balance_com += $agentCommission;
// $walletSuperviseur->balance_com += $superviseurCommission;
// $walletHyperviseur->balance_com += $hyperviseurCommission;
//
// $transaction->id_wallet_sup = $walletSuperviseur->id;
// $transaction->commission_sup = $superviseurCommission;
// $transaction->id_wallet_hyp = $walletHyperviseur->id;
// $transaction->commission_hyp = $hyperviseurCommission;
// $transaction->commission_ag = $agentCommission;
// }
}
$transaction->date = new \DateTime();
$transaction->statut = 1;
$walletAgent->save();
$walletSuperviseur->save();
$walletHyperviseur->save();
$transaction->save();
return $this->successResponse($walletAgent);
}
public function lastTransactions($id_wallet){
$transactions = WalletTransaction::where('id_wallet',$id_wallet)->orderBy('date','desc')->limit(10)
->get(['id', 'montant' ,'numCarte' ,'commission_ag', 'type' ,'date']);
return $this->successResponse($transactions);
}
public function calculateCommission(Request $request)
{
$rules = [
'id_wallet' => 'required|integer|min:1',
'montant'=> 'required|numeric|min:0|not_in:0',
'type' =>'required|in:credit,debit',
];
$this->validate($request,$rules);
$walletAgent = Wallet::findOrFail($request->get('id_wallet'));
$network_agent = NetworksAgent::findOrFail( $walletAgent->id_networkAgent);
// Configuratrion du wallet
$config = ConfigWallet::where('id_network',$network_agent->network_id)->firstOrFail();
$commission = null;
if($request->type == 'credit') {
//Depot
$commission = ( $request->montant * $config->taux_com_client_depot / 100 ) + $config->frais_min_banque_depot;
$data['montant_calcule'] = $request->montant - $commission;
}elseif ($request->type == 'debit'){
// Retrait
$commission = $request->montant * $config->taux_com_client_retrait / 100 ;
$data['montant_calcule'] = $request->montant + $commission;
}
$data['commission'] = $commission ;
return $this->successResponse($data);
}
}