walletservice/app/Http/Controllers/TransactionController.php

137 lines
6.2 KiB
PHP
Raw Normal View History

2020-04-15 23:08:09 +00:00
<?php
namespace App\Http\Controllers;
use App\Models\AgentPlus;
2020-04-15 23:08:09 +00:00
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();
2020-04-15 23:08:09 +00:00
$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);
2020-04-15 23:08:09 +00:00
$data = $request->all();
$data['expiration_date'] = \DateTime::createFromFormat('m/Y',$request->expiration_date);
$transaction->fill($data);
2020-04-15 23:08:09 +00:00
$client = new \GuzzleHttp\Client();
// Procedure de depot d'argent
if($transaction->type == 'credit')
{
$frais = $transaction->montant * $config->taux_com_client_depot / 100 ;
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
$banqueCommission = floatval($config->frais_min_banque_depot * $config->part_banque_depot / 100);
// 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($config->frais_min_banque_depot * $config->taux_com_ag_depot / 100);
$superviseurCommission = floatval($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;
}
2020-04-15 23:08:09 +00:00
}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 / 100;
2020-04-15 23:08:09 +00:00
$response = $client->post('https://ilink-app.com/mobilebackendtest/interacted/MembersAction.php');
$code = $response->getStatusCode();
if($code == 200) {
2020-04-15 23:08:09 +00:00
//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 / 100);
2020-04-15 23:08:09 +00:00
// 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;
2020-04-15 23:08:09 +00:00
// dd(array($hyperviseurCommission ,$superviseurCommission));
2020-04-15 23:08:09 +00:00
$walletAgent->balance_com += $agentCommission;
$walletSuperviseur->balance_com += $superviseurCommission;
$walletHyperviseur->balance_com += $hyperviseurCommission;
}
2020-04-15 23:08:09 +00:00
}
$transaction->date = new \DateTime();
$transaction->statut = 1;
$walletAgent->save();
$walletSuperviseur->save();
$walletHyperviseur->save();
$transaction->save();
return $this->successResponse($transaction);
}
}