2020-04-15 23:08:09 +00:00
< ? php
namespace App\Http\Controllers ;
2020-11-13 06:39:24 +00:00
use App\Models\Network ;
use App\Models\NetworksOperator ;
2020-10-05 16:32:31 +00:00
use App\Models\User ;
2020-12-01 10:51:05 +00:00
use App\Models\UsersBankingAccountVerification ;
2020-10-05 16:32:31 +00:00
use App\Models\WalletAgent ;
2020-06-01 18:31:25 +00:00
use App\Models\WalletsUser ;
2020-04-15 23:08:09 +00:00
use App\Traits\ApiResponser ;
2020-06-25 08:01:59 +00:00
use App\Traits\Helper ;
2020-11-28 08:22:30 +00:00
use Illuminate\Http\JsonResponse ;
2020-04-17 15:26:12 +00:00
use Illuminate\Http\Request ;
use Illuminate\Http\Response ;
2020-04-15 23:08:09 +00:00
use Illuminate\Support\Facades\DB ;
2020-11-28 08:22:30 +00:00
use Illuminate\Support\Facades\Log ;
2020-04-15 23:08:09 +00:00
class WalletController extends Controller
{
use ApiResponser ;
2020-06-25 08:01:59 +00:00
use Helper ;
2020-04-17 15:26:12 +00:00
2020-04-15 23:08:09 +00:00
/**
* Create a new controller instance .
*
* @ return void
*/
public function __construct ()
{
//
}
2020-04-17 15:26:12 +00:00
public function activated ( $id_agent )
{
2020-11-13 14:21:17 +00:00
$networks = DB :: select ( ' SELECT ne . name as network , cc . name AS country , cc . code_country , cc . currency_code , w . id , w . balance_princ , w . balance_com , w . created_date , cw . type ,
2020-12-08 12:40:15 +00:00
na . id AS id_networkAgent , cw . taux_com_client_depot , na . id AS id_networkAgent , cg . category , cw . has_nano_credit FROM agents ag
2020-04-21 14:07:57 +00:00
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
2020-09-28 09:43:39 +00:00
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 (
2020-04-17 15:26:12 +00:00
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 ]);
2020-04-15 23:08:09 +00:00
2020-05-05 08:27:08 +00:00
// Create wallet if is not exist
2020-05-05 20:42:57 +00:00
$category = null ;
2020-11-11 14:37:26 +00:00
if ( $networks ) {
2020-05-05 08:27:08 +00:00
$reload = false ;
$id = $id_agent ;
2020-11-11 14:37:26 +00:00
foreach ( $networks as $network ) {
2020-05-05 20:42:57 +00:00
$category = $network -> category ;
// Create wallet if is not exist
2020-11-11 14:37:26 +00:00
if ( ! $network -> id ) {
2020-11-13 14:21:17 +00:00
$datetime = $this -> getCurrentTimeByCountryCode ( $network -> code_country );
DB :: insert ( 'INSERT INTO wallets (id_networkAgent , created_date) VALUES (? , ?);' , [ $network -> id_networkAgent , $datetime ]);
2020-05-05 08:27:08 +00:00
$reload = true ;
}
}
2020-11-11 14:37:26 +00:00
if ( $reload )
2020-05-05 08:27:08 +00:00
return $this -> activated ( $id );
}
2020-05-05 20:42:57 +00:00
2020-05-05 22:29:26 +00:00
2020-05-05 20:42:57 +00:00
// Return only single wallet if it is hypervisor or supervisor
2020-11-11 14:37:26 +00:00
if ( in_array ( $category , [ 'hyper' , 'super' ])) {
2020-05-05 22:29:26 +00:00
// Remove unnecessary fields
2020-11-11 14:37:26 +00:00
$networks = $this -> array_except ( $networks , [ 'id_networkAgent' , 'category' ]);
2020-05-05 20:42:57 +00:00
return $this -> successResponse ( collect ( $networks ) -> first ());
2020-11-11 14:37:26 +00:00
} else {
2020-05-05 22:29:26 +00:00
// Remove unnecessary fields
2020-11-11 14:37:26 +00:00
$networks = $this -> array_except ( $networks , [ 'id_networkAgent' , 'category' , 'balance_princ' , 'balance_com' , 'created_date' , 'taux_com_client_depot' ]);
2020-05-05 20:42:57 +00:00
return $this -> successResponse ( $networks );
2020-05-05 22:29:26 +00:00
}
}
2020-11-11 14:37:26 +00:00
private function array_except ( $array , $keys )
{
foreach ( $array as $row ) {
foreach ( $keys as $key ) {
2020-05-05 22:29:26 +00:00
unset ( $row -> $key );
}
}
return $array ;
2020-04-15 23:08:09 +00:00
}
2020-04-17 15:26:12 +00:00
public function show ( $id_wallet )
{
2020-05-05 19:18:08 +00:00
// $wallet = Wallet::findOrFail($id_wallet);
2020-07-07 19:15:30 +00:00
$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 ,
2020-12-09 09:01:11 +00:00
c . currency_code , cw . id_network , cw . has_nano_credit 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
2020-07-04 17:03:59 +00:00
INNER JOIN countries_currencies c ON c . id = n . country_id
2020-11-11 14:37:26 +00:00
WHERE wa . wallet_id = : id ', [' id ' => $id_wallet ])) -> first ();
if ( $wallet )
2020-05-05 19:18:08 +00:00
return $this -> successResponse ( $wallet );
else
2020-11-11 14:37:26 +00:00
return $this -> errorResponse ( trans ( 'errors.model_not_found' , [ 'model' => 'wallet' ]), Response :: HTTP_BAD_REQUEST );
2020-04-17 15:26:12 +00:00
}
2020-04-21 14:07:57 +00:00
public function create ( Request $request )
{
$rules = [
2020-11-11 14:37:26 +00:00
'id_networkAgent' => 'required|integer|min:1'
2020-04-21 14:07:57 +00:00
];
2020-11-11 14:37:26 +00:00
$this -> validate ( $request , $rules );
2020-04-21 14:07:57 +00:00
DB :: insert ( 'INSERT INTO wallets (id_networkAgent) VALUES (?);' , [ $request -> id_networkAgent ]);
2020-04-28 16:12:05 +00:00
return $this -> successResponse ( trans ( 'messages.new_wallet_added' ));
2020-04-21 14:07:57 +00:00
}
2020-06-01 18:31:25 +00:00
// Wallets users iLink
2020-11-11 14:37:26 +00:00
public function showWalletUser ( $id_user )
{
2020-12-08 12:40:15 +00:00
$wallet = collect ( DB :: select ( ' SELECT wu .* , u . user_code , u . numero_carte , u . expiration_date , n2 . id as id_wallet_network , n2 . name as network , cc . name as country , cc . currency_code , cw . has_nano_credit from wallets_users wu
2020-07-25 18:02:54 +00:00
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
2020-10-05 16:32:31 +00:00
WHERE wu . idUser = : id_user AND cw . type = \ 'ilink\' LIMIT 1' , [ 'id_user' => $id_user ])) -> first ();
if ( $wallet ) {
2020-06-02 08:35:37 +00:00
return $this -> successResponse ( $wallet );
2020-06-16 05:49:49 +00:00
} else
2020-10-05 16:32:31 +00:00
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 )
{
2020-10-16 18:43:44 +00:00
$demandes = DB :: select ( " SELECT 'N' as type_historique, i.montant , i.user as destinataire , i.* FROM infos_users_demandes_credits i WHERE id_network = :id ; " , [ 'id' => $id_network ]);
$savings = DB :: select ( " SELECT 'E' as type_historique , i.montant , i.user as destinataire , i.* FROM infos_users_epargnes i WHERE id_network = :id; " , [ 'id' => $id_network ]);
2020-10-05 16:32:31 +00:00
2020-10-27 10:52:37 +00:00
$transactions = DB :: select ( " SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation_fr , tit.name as operation_en , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
2020-10-05 16:32:31 +00:00
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 ) {
2020-10-27 10:52:37 +00:00
$data -> operation = app () -> isLocale ( 'en' ) ? $data -> operation_en : $data -> operation_fr ;
2020-10-16 16:21:27 +00:00
$date = $data -> date_creation ;
unset ( $data -> date_creation );
2020-10-05 16:32:31 +00:00
$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 ;
2020-10-16 19:30:27 +00:00
$data -> montant2 = $this -> toMoney ( $data -> montant , $data -> init_country );
2020-10-05 16:32:31 +00:00
$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 ;
2020-10-16 18:13:56 +00:00
if ( $data -> type == 13 )
$data -> destinataire = $data -> numero_carte ;
2020-10-16 19:30:27 +00:00
if ( ctype_space ( $data -> destinataire )) {
$data -> destinataire = $data -> emetteur ;
}
2020-10-16 16:21:27 +00:00
$data -> date_creation = $date ;
2020-10-05 16:32:31 +00:00
unset ( $data -> type , $data -> id_wallet_user , $data -> network_destinataire , $data -> nom_destinataire , $data -> prenom_destinataire , $data -> taxe , $data -> numero_carte ,
2020-10-27 10:52:37 +00:00
$data -> montant_net_final_country , $data -> montant_net , $data -> nom_emetteur , $data -> prenom_emetteur , $data -> id_destinataire , $data -> operation_fr , $data -> operation_en );
2020-10-05 16:32:31 +00:00
return $data ;
}, $transactions );
// Supprimer les underscore sur les etats
$merge = array_map ( function ( $demand ) {
2020-11-20 16:25:54 +00:00
$demand -> etat = trans ( 'states.' . $demand -> etat );
if ( isset ( $demand -> type ))
$demand -> type = trans ( 'states.' . $demand -> type );
if ( isset ( $demand -> type_caution ))
$demand -> type_caution = trans ( 'states.' . $demand -> type_caution );
2020-10-05 16:32:31 +00:00
return $demand ;
}, array_merge ( $demandes , $savings ));
$result = array_merge ( $transactions_mapped , $merge );
usort ( $result , array ( $this , 'sortFunction' )); // Trier le tout par date
2020-10-07 09:07:11 +00:00
return $this -> successResponse ( $this -> arrayPaginator ( $result , $request ));
2020-10-05 16:32:31 +00:00
}
2020-11-20 16:25:54 +00:00
public function superHistory ( $agent_code , Request $request )
2020-10-05 16:32:31 +00:00
{
2020-11-20 16:25:54 +00:00
$walletSup = WalletAgent :: where ( 'codeMembre' , $agent_code ) -> firstOrFail ();
$id_wallet = $walletSup -> wallet_id ;
2020-10-05 16:32:31 +00:00
2020-10-16 18:43:44 +00:00
$demandes = DB :: select ( " SELECT 'N' as type_historique , i.montant ,i.user as destinataire , i.* FROM infos_users_demandes_credits i WHERE codeParrain = :code ; " , [ 'code' => $walletSup -> codeMembre ]);
2020-10-05 16:32:31 +00:00
2020-10-27 10:52:37 +00:00
$transactions = DB :: select ( " SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation_fr , tit.name as operation_en , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
2020-10-05 16:32:31 +00:00
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 ) {
2020-10-27 10:52:37 +00:00
$data -> operation = app () -> isLocale ( 'en' ) ? $data -> operation_en : $data -> operation_fr ;
2020-10-16 16:21:27 +00:00
$date = $data -> date_creation ;
unset ( $data -> date_creation );
2020-10-05 16:32:31 +00:00
$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 ;
2020-10-16 19:30:27 +00:00
$data -> montant2 = $this -> toMoney ( $data -> montant , $data -> init_country );
2020-10-05 16:32:31 +00:00
$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 ;
2020-10-16 18:13:56 +00:00
if ( $data -> type == 13 )
$data -> destinataire = $data -> numero_carte ;
2020-10-16 16:21:27 +00:00
$data -> date_creation = $date ;
2020-10-05 16:32:31 +00:00
unset ( $data -> type , $data -> id_wallet_user , $data -> network_destinataire , $data -> nom_destinataire , $data -> prenom_destinataire , $data -> taxe , $data -> numero_carte ,
2020-10-27 10:52:37 +00:00
$data -> montant_net_final_country , $data -> montant_net , $data -> nom_emetteur , $data -> prenom_emetteur , $data -> id_destinataire , $data -> operation_fr , $data -> operation_en );
2020-10-05 16:32:31 +00:00
return $data ;
}, $transactions );
// Supprimer les underscore sur les etats
$demandes_mapped = array_map ( function ( $demand ) {
2020-11-20 16:25:54 +00:00
$demand -> etat = trans ( 'states.' . $demand -> etat );
$demand -> type_caution = trans ( 'states.' . $demand -> type_caution );
2020-10-05 16:32:31 +00:00
return $demand ;
}, $demandes );
$result = array_merge ( $transactions_mapped , $demandes_mapped );
usort ( $result , array ( $this , 'sortFunction' )); // Trier le tout par date
2020-10-07 09:07:11 +00:00
return $this -> successResponse ( $this -> arrayPaginator ( $result , $request ));
2020-06-01 18:31:25 +00:00
}
2020-10-16 07:40:10 +00:00
// Routes sans pagination
public function allHyperHistory ( $id_network )
{
2020-10-16 18:43:44 +00:00
$demandes = DB :: select ( " SELECT 'N' as type_historique, i.montant , i.user as destinataire , i.* FROM infos_users_demandes_credits i WHERE id_network = :id ; " , [ 'id' => $id_network ]);
$savings = DB :: select ( " SELECT 'E' as type_historique , i.montant , i.user as destinataire , i.* FROM infos_users_epargnes i WHERE id_network = :id; " , [ 'id' => $id_network ]);
2020-10-16 07:40:10 +00:00
2020-10-27 10:52:37 +00:00
$transactions = DB :: select ( " SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation_fr , tit.name as operation_en , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
2020-10-16 07:40:10 +00:00
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 ) {
2020-10-27 10:52:37 +00:00
$data -> operation = app () -> isLocale ( 'en' ) ? $data -> operation_en : $data -> operation_fr ;
2020-10-16 16:21:27 +00:00
$date = $data -> date_creation ;
unset ( $data -> date_creation );
2020-10-16 07:40:10 +00:00
$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 ;
2020-10-16 19:30:27 +00:00
$data -> montant2 = $this -> toMoney ( $data -> montant , $data -> init_country );
2020-10-16 07:40:10 +00:00
$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 ;
2020-10-16 18:13:56 +00:00
if ( $data -> type == 13 )
$data -> destinataire = $data -> numero_carte ;
2020-10-16 19:30:27 +00:00
if ( ctype_space ( $data -> destinataire )) {
$data -> destinataire = $data -> emetteur ;
}
2020-10-16 16:21:27 +00:00
$data -> date_creation = $date ;
2020-10-16 07:40:10 +00:00
unset ( $data -> type , $data -> id_wallet_user , $data -> network_destinataire , $data -> nom_destinataire , $data -> prenom_destinataire , $data -> taxe , $data -> numero_carte ,
2020-10-27 10:52:37 +00:00
$data -> montant_net_final_country , $data -> montant_net , $data -> nom_emetteur , $data -> prenom_emetteur , $data -> id_destinataire , $data -> operation_fr , $data -> operation_en );
2020-10-16 07:40:10 +00:00
return $data ;
}, $transactions );
// Supprimer les underscore sur les etats
$merge = array_map ( function ( $demand ) {
2020-11-20 16:25:54 +00:00
$demand -> etat = trans ( 'states.' . $demand -> etat );
if ( isset ( $demand -> type ))
$demand -> type = trans ( 'states.' . $demand -> type );
if ( isset ( $demand -> type_caution ))
$demand -> type_caution = trans ( 'states.' . $demand -> type_caution );
2020-10-16 07:40:10 +00:00
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 ( $result );
}
2020-11-20 16:25:54 +00:00
public function allSuperHistory ( $agent_code )
2020-10-16 07:40:10 +00:00
{
2020-11-20 16:25:54 +00:00
$walletSup = WalletAgent :: where ( 'codeMembre' , $agent_code ) -> firstOrFail ();
$id_wallet = $walletSup -> wallet_id ;
2020-10-16 07:40:10 +00:00
2020-10-16 18:43:44 +00:00
$demandes = DB :: select ( " SELECT 'N' as type_historique, i.montant , i.user as destinataire , i.* FROM infos_users_demandes_credits i WHERE codeParrain = :code ; " , [ 'code' => $walletSup -> codeMembre ]);
2020-10-16 07:40:10 +00:00
2020-10-27 10:52:37 +00:00
$transactions = DB :: select ( " SELECT 'T' as type_historique, wit.id_transaction, tit.nom as operation_fr , tit.name as operation_en , wit.montant ,wit.nom_emetteur, wit.prenom_emetteur, wit.id_wallet_user,wit.frais,wit.taxe,wit.id_destinataire,
2020-10-16 07:40:10 +00:00
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 ) {
2020-10-27 10:52:37 +00:00
$data -> operation = app () -> isLocale ( 'en' ) ? $data -> operation_en : $data -> operation_fr ;
2020-10-16 16:21:27 +00:00
$date = $data -> date_creation ;
unset ( $data -> date_creation );
2020-10-16 07:40:10 +00:00
$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 ;
2020-10-16 19:30:27 +00:00
$data -> montant2 = $this -> toMoney ( $data -> montant , $data -> init_country );
2020-10-16 07:40:10 +00:00
$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 ;
2020-10-16 18:13:56 +00:00
if ( $data -> type == 13 )
$data -> destinataire = $data -> numero_carte ;
2020-10-16 19:30:27 +00:00
if ( ctype_space ( $data -> destinataire )) {
$data -> destinataire = $data -> emetteur ;
}
2020-10-16 16:21:27 +00:00
$data -> date_creation = $date ;
2020-10-16 07:40:10 +00:00
unset ( $data -> type , $data -> id_wallet_user , $data -> network_destinataire , $data -> nom_destinataire , $data -> prenom_destinataire , $data -> taxe , $data -> numero_carte ,
2020-10-27 10:52:37 +00:00
$data -> montant_net_final_country , $data -> montant_net , $data -> nom_emetteur , $data -> prenom_emetteur , $data -> id_destinataire , $data -> operation_fr , $data -> operation_en );
2020-10-16 07:40:10 +00:00
return $data ;
}, $transactions );
// Supprimer les underscore sur les etats
$demandes_mapped = array_map ( function ( $demand ) {
2020-11-20 16:25:54 +00:00
$demand -> etat = trans ( 'states.' . $demand -> etat );
$demand -> type_caution = trans ( 'states.' . $demand -> type_caution );
2020-10-16 07:40:10 +00:00
return $demand ;
}, $demandes );
$result = array_merge ( $transactions_mapped , $demandes_mapped );
usort ( $result , array ( $this , 'sortFunction' )); // Trier le tout par date
return $this -> successResponse ( $result );
}
2020-11-11 14:37:26 +00:00
/**
* @ OA\Get (
* path = " /wallets/users/operators/ { type_operator}/ { id_wallet_network} " ,
2020-11-11 15:46:33 +00:00
* summary = " Afficher la liste des opérateurs d'un reseau " ,
* tags = { " Liste des opérateurs d'un reseau " },
2020-11-11 14:37:26 +00:00
* security = {{ " api_key " : {}}},
* @ OA\Parameter (
* parameter = " type_operator " ,
* name = " type_operator " ,
* description = " Type d'operateur " ,
* in = " path " ,
* required = true ,
* @ OA\Schema (
* type = " string " ,
* enum = { " bank " , " electricity " , " phone " , " tv " , " school " , " water " },
* default = " bank "
* )
* ),
* @ OA\Parameter (
* parameter = " id_wallet_network " ,
* name = " id_wallet_network " ,
2020-11-28 08:22:30 +00:00
* description = " ID du reseau enregistré dans la base de données auquel appartient le wallet " ,
2020-11-11 14:37:26 +00:00
* in = " path " ,
* required = true ,
* @ OA\Schema (
* type = " integer " , default = 101
* )
* ),
* @ OA\Response (
* response = 200 ,
* description = " OK " ,
* @ OA\JsonContent (
* ref = " #/components/schemas/ApiResponse " ,
* example = {
* " status " : 200 ,
* " response " : {{
* " id_operator " : 1 ,
* " operator_name " : " ENEO " ,
* " operator_address " : " Bonamoussadi " ,
* " country " : " Cameroon "
* }},
* " error " : null
* }
* )
* )
* )
*/
2020-11-06 17:40:08 +00:00
public function getWalletOperators ( $id_wallet_network , $type_operator )
2020-10-27 10:52:37 +00:00
{
2020-11-06 17:40:08 +00:00
$operators = DB :: select ( " SELECT oc.id as id_operator, o.nom as operator_name , oc.adresse as operator_address, c.name as country FROM networks_operators nop INNER JOIN operators_countries oc ON oc.id = nop.id_operator_country INNER JOIN operators o ON o.id = oc.id_operator
INNER JOIN countries c ON oc . id_country = c . id INNER JOIN type_operators top ON o . type = top . code WHERE nop . id_network = : id_network AND o . type = : type_operator ; " , ['id_network' => $id_wallet_network , 'type_operator' => $type_operator ]);
2020-10-27 10:52:37 +00:00
2020-11-06 17:40:08 +00:00
return $this -> successResponse ( $operators );
2020-10-27 10:52:37 +00:00
}
2020-11-13 06:39:24 +00:00
/**
* @ OA\Get (
* path = " /wallets/users/banks_for_link/ { id_wallet_network} " ,
* summary = " Afficher la liste des banques d'un réseau pour le rattachement à un wallet " ,
* tags = { " Rattacher un compte bancaire à un wallet utilisateur simple " },
* security = {{ " api_key " : {}}},
* @ OA\Parameter (
* parameter = " id_wallet_network " ,
* name = " id_wallet_network " ,
2020-11-28 08:22:30 +00:00
* description = " ID du reseau enregistré dans la base de données auquel appartient le wallet " ,
2020-11-13 06:39:24 +00:00
* in = " path " ,
* required = true ,
* @ OA\Schema (
* type = " integer " , default = 101
* )
* ),
* @ OA\Response (
* response = 200 ,
* description = " OK " ,
* @ OA\JsonContent (
* ref = " #/components/schemas/ApiResponse " ,
* example = {
* " status " : 200 ,
* " response " : {{
* " id_bank " : 1 ,
* " bank_name " : " UBA " ,
* " bank_address " : " Bonamoussadi " ,
* " country " : " Cameroon "
* }},
* " error " : null
* }
* )
* )
* )
*/
//Banques d'un réseau pour la liaison
public function getBanksInNetworkForLink ( $id_wallet_network )
{
$id_country = Network :: findOrFail ( $id_wallet_network ) -> country -> id ;
$banks = DB :: select ( " SELECT oc.id as id_bank, o.nom as bank_name , oc.adresse as bank_address, c.name as country FROM networks_operators nop INNER JOIN operators_countries oc ON oc.id = nop.id_operator_country INNER JOIN operators o ON o.id = oc.id_operator
INNER JOIN countries c ON oc . id_country = c . id INNER JOIN type_operators top ON o . type = top . code WHERE nop . id_network = : id_network AND o . type = 'bank' AND oc . id_country = : id_country ; " , ['id_network' => $id_wallet_network , 'id_country' => $id_country ]);
return $this -> successResponse ( $banks );
}
/**
* @ OA\Post (
* path = " /wallets/users/link_bank_account " ,
* summary = " Rattacher le compte bancaire d'un utilisateur à son wallet " ,
* tags = { " Rattacher un compte bancaire à un wallet utilisateur simple " },
* security = {{ " api_key " : {}}},
* @ OA\RequestBody (
* description = " Corps de la requete " ,
* required = true ,
* @ OA\MediaType (
* mediaType = " application/json " ,
* @ OA\Schema (
* @ OA\Property ( property = " iban " ,
* type = " string " ,
* description = " Identifiant bancaire "
* ),
* @ OA\Property ( property = " id_bank " ,
* type = " integer " ,
* example = 4 ,
2020-11-28 08:22:30 +00:00
* description = " ID de la banque enregistré dans la base de données "
2020-11-13 06:39:24 +00:00
* ),
* @ OA\Property ( property = " id_wallet_network " ,
* type = " integer " ,
* example = 101 ,
* description = " ID du réseau auquel appartient le wallet "
* ),
* @ OA\Property ( property = " id_user " ,
* type = " integer " ,
* example = 12 ,
2020-11-28 08:22:30 +00:00
* description = " ID de l'utilisateur enregistré dans la base de données "
2020-11-13 06:39:24 +00:00
* )
* )
* )
* ),
* @ OA\Response (
* response = 200 ,
* description = " OK " ,
* @ OA\JsonContent (
* ref = " #/components/schemas/ApiResponse " ,
* example = {
* " status " : 200 ,
2020-11-28 08:22:30 +00:00
* " response " : " Votre requête de rattachement de votre compte bancaire a été prise en compte, vous recevrez un mail de confirmation dès lors que la banque aura validé votre code IBAN " ,
2020-11-13 06:39:24 +00:00
* " error " : null
* }
* )
* )
* )
*/
2020-12-01 10:51:05 +00:00
2020-11-13 06:39:24 +00:00
// Rattacher le compte bancaire au wallet
public function linkBankAccount ( Request $request )
{
$this -> validate ( $request , [
'iban' => 'required' ,
'id_bank' => 'required|integer|min:0|not_in:0' ,
'id_wallet_network' => 'required|integer|min:0|not_in:0' ,
'id_user' => 'required|integer|min:0|not_in:0' ,
]);
$user = User :: findOrFail ( $request -> id_user );
2020-11-28 08:22:30 +00:00
if ( isset ( $user -> iban ) && isset ( $user -> id_bank_country ))
return $this -> errorResponse ( trans ( 'errors.wallet_already_linked_to_bank_account' ));
//Verifier si l'utilisateur est identifié
$identification = $this -> checkUserIdentification ( $user -> id );
if ( $identification instanceof JsonResponse )
return $identification ;
2020-11-13 06:39:24 +00:00
//Verifier si la banque est associée au reseau
$network_bank = NetworksOperator :: where ( 'id_network' , $request -> id_wallet_network ) -> where ( 'id_operator_country' , $request -> id_bank ) -> first ();
if ( ! $network_bank )
return $this -> errorResponse ( trans ( 'errors.bank_not_associated_with_network' ));
if ( $network_bank -> operators_country -> operator -> type != 'bank' )
return $this -> errorResponse ( trans ( 'errors.not_banking_operator' ));
//Verifier le code IBAN
$country_code = $network_bank -> network -> country -> code_country ;
$bank_code = $network_bank -> operators_country -> code ;
switch ( $this -> checkIBAN ( $request -> iban , $country_code , $bank_code )) {
case 0 :
return $this -> errorResponse ( trans ( 'errors.invalid_iban' ));
case 1 :
return $this -> errorResponse ( trans ( 'errors.country_not_match_iban' ));
case 2 :
return $this -> errorResponse ( trans ( 'errors.bank_not_match_iban' ));
}
2020-12-01 10:51:05 +00:00
$user_banking_account_verif = new UsersBankingAccountVerification ();
$user_banking_account_verif -> id_transaction = $this -> getTransactionID ();
$user_banking_account_verif -> iban = $request -> iban ;
$user_banking_account_verif -> user_code = $user -> user_code ;
$user_banking_account_verif -> id_bank_country = $request -> id_bank ;
$user_banking_account_verif -> is_verified = $user_banking_account_verif -> was_treated = 0 ;
$user_banking_account_verif -> id_network = $request -> id_wallet_network ;
$user_banking_account_verif -> save ();
2020-11-28 08:22:30 +00:00
// Envoyer une requete vers la banque contant ses informations personnelles pour verfication du code iban
Log :: info ( '-------------------------- User - Rattacher le compte bancaire au wallet ------------------------------------' );
2020-12-02 16:08:43 +00:00
Log :: info ( array_merge ( $request -> toArray (), $identification -> toArray (), [ 'id_transaction' => $user_banking_account_verif -> id_transaction ]));
2020-11-28 08:22:30 +00:00
Log :: info ( '------------------------------------------------------------------------------------------------' );
2020-11-28 08:28:49 +00:00
return $this -> successResponse ( trans ( 'messages.successful_bank_account_attachment_taken' ));
2020-11-13 06:39:24 +00:00
}
2020-12-01 10:51:05 +00:00
private function getTransactionID ()
{
do {
$code = $this -> generateTransactionCode ();
$result = collect ( DB :: select ( 'SELECT * FROM users_banking_account_verification WHERE id_transaction = :code' , [ 'code' => $code ]));
$codeCorrect = sizeof ( $result ) < 0 ;
} while ( $codeCorrect );
return $code ;
}
2020-04-15 23:08:09 +00:00
}