124 lines
5.5 KiB
PHP
124 lines
5.5 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace App\Http\Controllers;
|
|||
|
|
|||
|
use App\Models\AgentsPlus;
|
|||
|
use App\Models\CodeGenerer;
|
|||
|
use App\Models\ConfigWallet;
|
|||
|
use App\Models\Network;
|
|||
|
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 = AgentsPlus::where('code_membre',$codeGenerer->code_parrain)->firstOrFail();
|
|||
|
$hyperviseur = AgentsPlus::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);;;
|
|||
|
|
|||
|
$transaction->fill($request->all());
|
|||
|
|
|||
|
$client = new \GuzzleHttp\Client();
|
|||
|
// Procedure de depot d'argent
|
|||
|
if($transaction->type == 'credit')
|
|||
|
{
|
|||
|
$frais = $transaction->montant * $config->taux_com_client_depot;
|
|||
|
|
|||
|
if($walletAgent->balance_princ >= ($transaction->montant + $config->taux_com_client_depot + $config->part_banque_depot)){
|
|||
|
//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
|
|||
|
|
|||
|
$banqueCommission = floatval($config->frais_min_banque_depot * $config->part_banque_depot);
|
|||
|
// 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 s’applique 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($config->frais_min_banque_depot * $config->taux_com_ag_depot);
|
|||
|
$superviseurCommission = floatval($config->frais_min_banque_depot * $config->taux_com_sup_depot);
|
|||
|
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
|
|||
|
|
|||
|
$walletAgent->balance_com += $agentCommission;
|
|||
|
$walletSuperviseur->balance_com += $superviseurCommission;
|
|||
|
$walletHyperviseur->balance_com += $hyperviseurCommission;
|
|||
|
}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')
|
|||
|
{
|
|||
|
|
|||
|
$frais = $transaction->montant * $config->taux_com_client_retrait;
|
|||
|
|
|||
|
//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
|
|||
|
|
|||
|
$banqueCommission = floatval($transaction->montant * $config->part_banque_retrait);
|
|||
|
// 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);
|
|||
|
$superviseurCommission=floatval($transaction->montant*$config->taux_com_sup_retrait);
|
|||
|
$hyperviseurCommission = $frais + $config->frais_min_banque_depot - $superviseurCommission - $agentCommission - $banqueCommission;
|
|||
|
|
|||
|
$walletAgent->balance_com += $agentCommission;
|
|||
|
$walletSuperviseur->balance_com += $superviseurCommission;
|
|||
|
$walletHyperviseur->balance_com += $hyperviseurCommission;
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
$transaction->date = new \DateTime();
|
|||
|
$transaction->statut = 1;
|
|||
|
$walletAgent->save();
|
|||
|
$walletSuperviseur->save();
|
|||
|
$walletHyperviseur->save();
|
|||
|
$transaction->save();
|
|||
|
return $this->successResponse($transaction);
|
|||
|
}
|
|||
|
}
|