successResponse($countries); } public function paying_networks(Request $request) { $this->validate($request,[ 'id_country' => 'required|integer|min:0|not_in:0', 'id_wallet_agent' => 'required_without:id_wallet_user|integer|min:0|not_in:0', 'id_wallet_user' => 'required_without:id_wallet_agent|integer|min:0|not_in:0', ]); if (isset($request->id_wallet_agent)) { $walletAgent = Wallet::findOrFail($request->get('id_wallet_agent')); $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); $init_country = $network_agent->network->country->id; // Configuratrion du wallet $config = ConfigWallet::where('id_network', $network_agent->network_id)->firstOrFail(); } elseif (isset($request->id_wallet_user)) { $walletUser = WalletsUser::findOrFail($request->id_wallet_user); $init_country = $walletUser->user->network->country->id; $result = ConfigWallet::join('networks', 'networks.id', '=', 'configWallet.id_network') ->where('networks.country_id', $init_country)->where('configWallet.type', 'ilink') ->select('configWallet.id')->first(); if ($result) { $config = ConfigWallet::findOrFail($result->id); } else { return $this->errorResponse(trans('errors.no_ilink_network')); } } $networks = DB::select('SELECT n.id , n.name , c.type FROM networks n INNER JOIN configWallet c ON c.id_network = n.id WHERE n.id IN ( SELECT distinct id_network FROM paying_networks WHERE id_configWallet = :id_config) AND status = 1 AND country_id = :id_country;',['id_country'=>$request->id_country, 'id_config'=> $config->id]); foreach ($networks as $network){ if($network->type == 'ilink') $network->type = 'ilink-world'; } if($request->id_country == $init_country ){ $currentNetwork = new \stdClass(); $currentNetwork->id = $config->network->id; $currentNetwork->name = $config->network->name; $currentNetwork->type = 'ilink-world'; array_unshift($networks,$currentNetwork); } return $this->successResponse($networks); } public function other_paying_networks(Request $request) { $this->validate($request,[ 'id_country' => 'required|integer|min:0|not_in:0', 'id_wallet_agent' => 'required|integer|min:0|not_in:0', ]); $walletAgent = Wallet::findOrFail($request->get('id_wallet_agent')); $network_agent = NetworksAgent::findOrFail($walletAgent->id_networkAgent); // Configuratrion du wallet $config = ConfigWallet::where('id_network', $network_agent->network_id)->firstOrFail(); $networks = DB::select('SELECT n.id , n.name , c.type FROM networks n INNER JOIN configWallet c ON c.id_network = n.id WHERE n.id IN ( SELECT distinct id_network FROM paying_networks WHERE id_configWallet = :id_config) AND status = 1 AND c.type <> \'ilink\' AND country_id = :id_country;',['id_country'=>$request->id_country, 'id_config'=> $config->id]); return $this->successResponse($networks); } public function country($code_dial){ return $this->successResponse(Country::where('code_dial',$code_dial)->firstOrFail()); } public function init(){ //Mettre a jour tous les utilisateurs qui n'ont pas de wallet iLink $users = User::whereNull('user_code')->orWhere('user_code','')->get(); foreach ($users as $user) { do { $user_code = $this->generateUserCode(); $result = collect(DB::select('SELECT * FROM users WHERE user_code = :code', ['code' => $user_code])); $codeCorrect = sizeof($result) < 0; } while ($codeCorrect); $user->user_code = $user_code; $wallet = WalletsUser::where('idUser', $user->id)->first(); if (!$wallet) { DB::insert('INSERT INTO wallets_users (idUser) VALUES (?);', [$user->id]); $user->save(); } } return $this->successResponse('OK :-) , Have a nice day dear ! '); } private function generateUserCode($length = 10) { $characters = '23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } // Retourne tous les codes membres d'un agent à partir d'un code public function agentCodes($agent_code) { $agent = AgentPlus::where('code_membre', $agent_code)->first(); $codes = []; if ($agent) { $codes = DB::select("SELECT cg.code_membre as code_membre from networks_agents na INNER JOIN codeGenerer cg ON cg.id=na.codeGenerer_id INNER JOIN networks ne ON ne.id=na.network_id WHERE na.agent_id = :id", ['id' => $agent->id]); } return $this->successResponse($codes); } public function calculateTransactionAmount() { $data = [['ID Wallet', 'Agent', 'Contact', 'Role', 'Parrain', 'Nombre de transactions', 'Montant à rembourser']]; // Calcul du montant a prelever pour tous les agents loc du reseau iLink World $config = ConfigWallet::where('id_network', 237)->first(); if (isset($config)) { $walletAgents = WalletAgent::where('network_id', 237)->orderBy('category')->orderBy('lastname', 'ASC')->get(); foreach ($walletAgents as $wallet) { $refund = 0; $totalTransactions = 0; if ($wallet->category == 'geolocated') { $totalTransactions = WalletTransaction::where('id_wallet', $wallet->wallet_id)->where('type', 'credit') ->where('canceled', '0')->where('deleted', 0)->count(); // Montant à rembourser $refund = $totalTransactions * $config->frais_min_banque_depot * $config->taux_com_ag_depot / 100; } elseif ($wallet->category == 'super') { $totalTransactions = WalletTransaction::where('id_wallet_sup', $wallet->wallet_id)->where('type', 'credit') ->where('canceled', '0')->where('deleted', 0)->count(); // Montant à rembourser $refund = $totalTransactions * $config->frais_min_banque_depot * $config->taux_com_sup_depot / 100; } elseif ($wallet->category == 'hyper') { $totalTransactions = WalletTransaction::where('id_wallet_hyp', $wallet->wallet_id)->where('type', 'credit') ->where('canceled', '0')->where('deleted', 0)->count(); // Montant à rembourser $refund = $totalTransactions * $config->frais_min_banque_depot * (100 - $config->taux_com_ag_depot - $config->taux_com_sup_depot) / 100; } array_push($data, [$wallet->wallet_id, $wallet->lastname, substr($wallet->transactionNumber, 4), $wallet->category, $wallet->parrain, $totalTransactions, $refund]); } } $export = new RefundAmountExport($data); return Excel::download($export, 'refund.xlsx'); } // public function fixFSServicesAmounts() // { // $data = Excel::toArray(new RefundAmountImport, storage_path('refund.xlsx')); // $result = []; // foreach ($data[0] as $key => $row) { // if ($key > 0) { // array_push($result, $row); // } // } // // try { // DB::beginTransaction(); // // Fix amount // foreach ($result as $r) { // if (isset($r[6])) { // if ($r[3] == 'hyper') continue; // $refund = $r[3] == 'geolocated' ? 50 * $r[5] : 25 * $r[5]; // $wallet = Wallet::find($r[0]); // $wallet->balance_com += $refund; // $wallet->save(); // } // } // DB::commit(); // return $this->successResponse(trans('messages.success_treated_demand')); // } catch (Throwable $exception) { // DB::rollBack(); // Log::error($exception->getMessage()); // return $this->errorResponse(trans('errors.unexpected_error')); // } // } public function notifyNewUser(Request $request) { // Notifier le nouvel agent inscrit $this->validate($request, [ 'subject' => 'required|string', 'email' => 'required|string', 'category' => 'required_if:user_type,agent|string', 'message' => 'required|string', 'user_id' => 'required|integer', 'user_type' => 'required|in:user,agent' ]); $subject = $request->input('subject'); $email = $request->input('email'); $message = $request->input('message'); $category = $request->input('category'); $user_id = $request->input('user_id'); $user_type = $request->input('user_type'); try { //Check if the directory already exists. $qr_code_pdf = null; if (empty($category) || $category == 'geolocated') { $qr_code_pdf = $this->generateQRCode($user_id, $user_type); } $recipients = [preg_replace("/\s+/", "", $email)]; // Supprimer les espaces dans le mail Mail::mailer('smtp')->raw($message, function ($message) use ($recipients, $subject, $qr_code_pdf) { $message->subject($subject) ->to($recipients); if (!empty($qr_code_pdf)) { $message->attachData($qr_code_pdf->output(), 'qr_code.pdf'); } }); } catch (\Throwable $t) { Log::error('-------- Mail not sent -----------'); Log::error($t->getMessage() . " :\n" . $t->getTraceAsString()); } } /** * @OA\Post( * path="/agents", * summary="Rechercher un agent", * tags={"Agents"}, * security={{"api_key":{}}}, * @OA\RequestBody( * description="Corps de la requete", * required=true, * @OA\MediaType( * mediaType="application/json", * @OA\Schema( * @OA\Property(property="dial_code", * type="string", * description="Dial code du pays", * example= "+237", * ), * @OA\Property(property="name", * type="string", * example="tom", * description="Nom de l'agent" * ), * @OA\Property(property="phone", * type="string", * example="0452366562", * description="Numero de telephone" * ), * @OA\Property(property="id", * type="integer", * example = 12, * description="ID de l'agent" * ) * ) * ) * ), * @OA\Response( * response=200, * description="OK", * @OA\JsonContent( * ref="#/components/schemas/ApiResponse", * example = { * "status" : 200, * "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", * "error":null * } * ) * ) * ) */ // Option de recherche des agents geolocalisés public function getAgents(Request $request) { $this->validate($request, [ 'name' => 'string', 'phone' => 'string', 'id' => 'integer', 'dial_code' => 'required|string|min:2' ]); $name = $request->input('name'); $phone = $request->input('phone'); $id = $request->input('id'); $dial_code = $request->input('dial_code'); // $perPage = current(DB::select("SELECT valeur_int FROM adminConfig WHERE cle = 'pas_chargement' LIMIT 1"))->valeur_int ?? 10; $query = AgentPlus::where('category', 'geolocated')->where('code_dial', $dial_code)->where('etat', 1)->distinct(); if (!empty($name)) { $query = $query->where('lastname', 'like', '%' . $name . '%')->orWhere('firstname', 'like', '%' . $name . '%'); } if (!empty($phone)) { $query = $query->where('phone', 'like', '%' . $phone . '%')->orWhere('transactionNumber', 'like', '%' . $phone . '%'); } if (!empty($id)) { $query = $query->where('id', $id); } $agents = $query->selectRaw('id , firstname, lastname, adresse , email , longitude , latitude , phone , transactionNumber , openHours , closeHours , solde , network, country');//->paginate($perPage); return $this->successResponse($agents); } }