221 lines
12 KiB
PHP
Executable File
221 lines
12 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\User;
|
|
use App\Models\WalletAgent;
|
|
use App\Models\WalletsUser;
|
|
use App\Traits\ApiResponser;
|
|
use App\Traits\Helper;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class WalletController extends Controller
|
|
{
|
|
use ApiResponser;
|
|
use Helper;
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
//
|
|
}
|
|
|
|
public function activated($id_agent)
|
|
{
|
|
$networks = DB::select('SELECT ne.name as network , cc.name AS country, cc.currency_code, w.id, w.balance_princ , w.balance_com, w.created_date, cw.type,
|
|
na.id AS id_networkAgent , cw.taux_com_client_depot , na.id AS id_networkAgent , cg.category FROM agents ag
|
|
INNER JOIN networks_agents na ON ag.id=na.agent_id INNER JOIN codeGenerer cg ON cg.id=na.codeGenerer_id INNER JOIN networks ne ON ne.id=na.network_id INNER JOIN configWallet cw ON ne.id = cw.id_network
|
|
INNER JOIN countries_currencies cc ON ne.country_id=cc.id LEFT JOIN wallets w ON na.id = w.id_networkAgent WHERE ag.id= :id AND network_id IN (
|
|
SELECT networks.id FROM networks LEFT JOIN configWallet ON configWallet.id_network = networks.id WHERE status = 1 AND id_network IS NOT NULL)', ['id' => $id_agent]);
|
|
|
|
// Create wallet if is not exist
|
|
$category = null;
|
|
if($networks){
|
|
$reload = false;
|
|
$id = $id_agent;
|
|
foreach ($networks as $network){
|
|
$category = $network->category;
|
|
// Create wallet if is not exist
|
|
if(!$network->id){
|
|
DB::insert('INSERT INTO wallets (id_networkAgent) VALUES (?);', [$network->id_networkAgent]);
|
|
$reload = true;
|
|
}
|
|
}
|
|
if($reload)
|
|
return $this->activated($id);
|
|
}
|
|
|
|
|
|
// Return only single wallet if it is hypervisor or supervisor
|
|
if(in_array( $category , ['hyper','super'])){
|
|
// Remove unnecessary fields
|
|
$networks = $this->array_except($networks,['id_networkAgent','category']);
|
|
return $this->successResponse(collect($networks)->first());
|
|
}else{
|
|
// Remove unnecessary fields
|
|
$networks = $this->array_except($networks,['id_networkAgent','category','balance_princ','balance_com','created_date','taux_com_client_depot']);
|
|
return $this->successResponse($networks);
|
|
}
|
|
|
|
}
|
|
|
|
private function array_except($array, $keys){
|
|
foreach ($array as $row){
|
|
foreach($keys as $key){
|
|
unset($row->$key);
|
|
}
|
|
}
|
|
return $array;
|
|
}
|
|
|
|
public function show($id_wallet)
|
|
{
|
|
// $wallet = Wallet::findOrFail($id_wallet);
|
|
$wallet = collect(DB::select('SELECT wa.wallet_id AS id, wa.balance_princ, wa.balance_com, wa.created_date, wa.network , cw.taux_com_client_depot, c.name AS country, cw.type,
|
|
c.currency_code FROM wallet_agent wa INNER JOIN configWallet cw ON wa.network_id = cw.id_network INNER JOIN networks n ON n.id = wa.network_id
|
|
INNER JOIN countries_currencies c ON c.id = n.country_id
|
|
WHERE wa.wallet_id = :id',['id' => $id_wallet]))->first();
|
|
if($wallet)
|
|
return $this->successResponse($wallet);
|
|
else
|
|
return $this->errorResponse(trans('errors.model_not_found',['model'=>'wallet']),Response::HTTP_BAD_REQUEST);
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
$rules = [
|
|
'id_networkAgent'=>'required|integer|min:1'
|
|
];
|
|
|
|
$this->validate($request,$rules);
|
|
|
|
DB::insert('INSERT INTO wallets (id_networkAgent) VALUES (?);', [$request->id_networkAgent]);
|
|
return $this->successResponse(trans('messages.new_wallet_added'));
|
|
|
|
}
|
|
|
|
// Wallets users iLink
|
|
public function showWalletUser($id_user){
|
|
$wallet = collect(DB::select('SELECT wu.*, u.user_code , u.numero_carte , u.expiration_date ,n2.name as network , cc.name as country, cc.currency_code from wallets_users wu
|
|
INNER JOIN users u ON u.id = wu.idUser
|
|
INNER JOIN networks n1 ON n1.id = u.network_id
|
|
INNER JOIN networks n2 ON n2.country_id = n1.country_id
|
|
INNER JOIN configWallet cw ON cw.id_network = n2.id
|
|
INNER JOIN countries_currencies cc ON cc.id = n2.country_id
|
|
WHERE wu.idUser = :id_user AND cw.type = \'ilink\' LIMIT 1', ['id_user' => $id_user]))->first();
|
|
if ($wallet) {
|
|
return $this->successResponse($wallet);
|
|
} else
|
|
return $this->errorResponse(trans('errors.model_not_found', ['model' => 'wallet']), Response::HTTP_BAD_REQUEST);
|
|
}
|
|
|
|
//Les historiques globals des hyperviseur et superviseur
|
|
public function hyperHistory($id_network, Request $request)
|
|
{
|
|
|
|
$demandes = DB::select("SELECT 'N' as type_historique , i.* FROM infos_users_demandes_credits i WHERE id_network = :id ;", ['id' => $id_network]);
|
|
$savings = DB::select("SELECT 'E' as type_historique , i.* FROM infos_users_epargnes i WHERE id_network = :id;", ['id' => $id_network]);
|
|
|
|
$transactions = DB::select("SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
|
|
wit.nom_destinataire, wit.prenom_destinataire, wit.type , wit.id_wallet_user, wit.init_country, wit.final_country , wit.network_destinataire , wit.montant_net_final_country ,
|
|
wit.date as date_creation , wit.id , wit.numero_carte, wit.montant_net FROM wallet_ilink_transaction wit
|
|
INNER JOIN type_ilink_transaction tit ON wit.type = tit.id WHERE wit.network_emetteur = :id ;", ['id' => $id_network]);
|
|
|
|
$transactions_mapped = array_map(function ($data) {
|
|
|
|
$wallet_user = isset($data->id_wallet_user) ? WalletsUser::findOrFail($data->id_wallet_user) : null;
|
|
$user_destinataire = isset($data->id_destinataire) ? User::where('user_code', $data->id_destinataire)->first() : null;
|
|
$emetteur = $wallet_user ? $wallet_user->user->lastname . ' ' . $wallet_user->user->firstname : $data->prenom_emetteur . ' ' . $data->nom_emetteur;
|
|
if (!$wallet_user && !$data->nom_emetteur)
|
|
$emetteur = $data->numero_carte;
|
|
$destinataire = in_array($data->type, [12, 16]) ? $emetteur : ($user_destinataire ? $user_destinataire->lastname . ' ' . $user_destinataire->firstname :
|
|
$data->prenom_destinataire . ' ' . $data->nom_destinataire);
|
|
$data->emetteur = $emetteur;
|
|
$data->destinataire = $destinataire;
|
|
$data->frais = $this->toMoney($data->frais + $data->taxe, $data->init_country);
|
|
$data->montant_net_init = $this->toMoney($data->montant_net, $data->init_country);
|
|
$data->montant_net_final = $data->montant_net_final_country ? $this->toMoney($data->montant_net_final_country, $data->final_country) : $data->montant_net_init;
|
|
$data->montant = $this->toMoney($data->montant, $data->init_country);
|
|
$data->init_country = $this->getCountryName($data->init_country);
|
|
$data->final_country = $data->montant_net_final_country ? $this->getCountryName($data->final_country) : '';
|
|
$data->reseau_payeur = isset($data->network_destinataire) ? $this->getNetworkName($data->network_destinataire) . ' ' . $data->final_country : null;
|
|
|
|
unset($data->type, $data->id_wallet_user, $data->network_destinataire, $data->nom_destinataire, $data->prenom_destinataire, $data->taxe, $data->numero_carte,
|
|
$data->montant_net_final_country, $data->montant_net, $data->nom_emetteur, $data->prenom_emetteur, $data->id_destinataire);
|
|
return $data;
|
|
}, $transactions);
|
|
|
|
// Supprimer les underscore sur les etats
|
|
$merge = array_map(function ($demand) {
|
|
$demand->etat = str_replace('_', ' ', $demand->etat);
|
|
return $demand;
|
|
}, array_merge($demandes, $savings));
|
|
|
|
$result = array_merge($transactions_mapped, $merge);
|
|
|
|
usort($result, array($this, 'sortFunction')); // Trier le tout par date
|
|
|
|
// return $this->successResponse($this->arrayPaginator($result,$request));
|
|
return $this->successResponse($result);
|
|
|
|
}
|
|
|
|
public function superHistory($id_wallet, Request $request)
|
|
{
|
|
|
|
$walletSup = WalletAgent::where('wallet_id', $id_wallet)->firstOrFail();
|
|
|
|
$demandes = DB::select("SELECT 'N' as type_historique , i.* FROM infos_users_demandes_credits i WHERE id_network = :id ;", ['id' => $walletSup->codeMembre]);
|
|
|
|
|
|
$transactions = DB::select("SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
|
|
wit.nom_destinataire, wit.prenom_destinataire, wit.type , wit.id_wallet_user, wit.init_country, wit.final_country , wit.network_destinataire , wit.montant_net_final_country ,
|
|
wit.date as date_creation , wit.id , wit.numero_carte, wit.montant_net FROM wallet_ilink_transaction wit
|
|
INNER JOIN type_ilink_transaction tit ON wit.type = tit.id WHERE wit.id_wallet_sup = :id ;", ['id' => $id_wallet]);
|
|
|
|
$transactions_mapped = array_map(function ($data) {
|
|
|
|
$wallet_user = isset($data->id_wallet_user) ? WalletsUser::findOrFail($data->id_wallet_user) : null;
|
|
$user_destinataire = isset($data->id_destinataire) ? User::where('user_code', $data->id_destinataire)->first() : null;
|
|
$emetteur = $wallet_user ? $wallet_user->user->lastname . ' ' . $wallet_user->user->firstname : $data->prenom_emetteur . ' ' . $data->nom_emetteur;
|
|
if (!$wallet_user && !$data->nom_emetteur)
|
|
$emetteur = $data->numero_carte;
|
|
$destinataire = in_array($data->type, [12, 16]) ? $emetteur : ($user_destinataire ? $user_destinataire->lastname . ' ' . $user_destinataire->firstname :
|
|
$data->prenom_destinataire . ' ' . $data->nom_destinataire);
|
|
$data->emetteur = $emetteur;
|
|
$data->destinataire = $destinataire;
|
|
$data->frais = $this->toMoney($data->frais + $data->taxe, $data->init_country);
|
|
$data->montant_net_init = $this->toMoney($data->montant_net, $data->init_country);
|
|
$data->montant_net_final = $data->montant_net_final_country ? $this->toMoney($data->montant_net_final_country, $data->final_country) : $data->montant_net_init;
|
|
$data->montant = $this->toMoney($data->montant, $data->init_country);
|
|
$data->init_country = $this->getCountryName($data->init_country);
|
|
$data->final_country = $data->montant_net_final_country ? $this->getCountryName($data->final_country) : '';
|
|
$data->reseau_payeur = isset($data->network_destinataire) ? $this->getNetworkName($data->network_destinataire) . ' ' . $data->final_country : null;
|
|
|
|
unset($data->type, $data->id_wallet_user, $data->network_destinataire, $data->nom_destinataire, $data->prenom_destinataire, $data->taxe, $data->numero_carte,
|
|
$data->montant_net_final_country, $data->montant_net, $data->nom_emetteur, $data->prenom_emetteur, $data->id_destinataire);
|
|
return $data;
|
|
}, $transactions);
|
|
|
|
// Supprimer les underscore sur les etats
|
|
$demandes_mapped = array_map(function ($demand) {
|
|
$demand->etat = str_replace('_', ' ', $demand->etat);
|
|
return $demand;
|
|
}, $demandes);
|
|
|
|
$result = array_merge($transactions_mapped, $demandes_mapped);
|
|
|
|
usort($result, array($this, 'sortFunction')); // Trier le tout par date
|
|
|
|
// return $this->successResponse($this->arrayPaginator($result,$request));
|
|
return $this->successResponse($result);
|
|
}
|
|
|
|
}
|