189 lines
9.1 KiB
PHP
Executable File
189 lines
9.1 KiB
PHP
Executable File
<?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 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(($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);
|
||
}
|
||
}
|