get("limit", 10)); return ["data" => $users]; } public function receivePayment(Request $request) { $this->validate($request, [ 'type' => 'required|integer|in:1,3,17', // Les types de transactions possibles à recevoir [1,3,17] 'montant' => 'required|numeric|min:0|not_in:0', 'network_emetteur' => 'required|numeric|min:0|not_in:0', 'network_destinataire' => 'required|numeric|min:0|not_in:0', 'id_transaction_network_emetteur' => 'required', ]); $configRecipient = ConfigWallet::where('id_network', $request->network_destinataire)->first(); $configTransmitter = ConfigWallet::where('id_network', $request->network_emetteur)->first(); if (!$configRecipient) return $this->errorResponse("Ce reseau destinataire n'est pas configuré dans notre systeme"); if ($configRecipient->type != 'ilink') return $this->errorResponse("Ce reseau destinataire n'est pas autorise à recevoir des transactions dans notre systeme"); if (!$configTransmitter) return $this->errorResponse("Ce reseau emetteur n'est pas configuré dans notre systeme"); if ($configTransmitter->type != 'autre') return $this->errorResponse("Ce reseau emetteur n'est pas autorise à recevoir des transactions dans notre systeme"); $transmittingNetwork = TransmittingNetwork::where('id_network', $request->network_emetteur)->where('id_configWallet', $configRecipient->id)->first(); if (!$transmittingNetwork) return $this->errorResponse("Ce reseau n'est pas reconnu comme etant un reseau emetteur du reseau destinataire"); $transaction = new TransmittedIlinkTransaction(); $transaction->fill($request->all()); $transaction->id_transaction = $this->getTransactionID(); switch ($request->type) { case 1: $this->validate($request, [ 'id_destinataire' => 'required', 'nom_emetteur' => 'required', 'prenom_emetteur' => 'required', 'email_emetteur' => 'required', 'type_document_emetteur' => 'required', 'id_document_emetteur' => 'required', 'id_emetteur' => 'required', ]); $user = User::where('user_code', $request->id_destinataire)->firstOrFail(); $wallet_user = WalletsUser::where('idUser', $user->id)->firstOrFail(); // Verifier si le wallet destinataire appartient au meme pays que le reseau $wallet_user->balance += $request->montant; $wallet_user->save(); $transmittingNetwork->balance_compensation += $request->montant; $transmittingNetwork->save(); $transaction->save(); $message = trans('messages.wallet_incoming_payment_message', ['amount' => $this->toMoneyWithNetwork($request->montant, $request->id), 'transmitter' => $request->nom_emetteur . ' ' . $request->prenom_emetteur]); $this->sendMail($user->email, trans('messages.wallet_incoming_payment'), $message); return $this->successResponse(trans('messages.success_treated_demand')); break; case 2: $this->validate($request, [ 'nom_emetteur' => 'required', 'prenom_emetteur' => 'required', 'type_document_emetteur' => 'required', 'id_document_emetteur' => 'required', 'email_emetteur' => 'required', 'nom_destinataire' => 'required', 'prenom_destinataire' => 'required', 'type_document_destinataire' => 'required', ]); return $this->successResponse(trans('messages.success_treated_demand')); break; case 17: return $this->successResponse(trans('messages.success_treated_demand')); break; } } private function getTransactionID() { do { $code = $this->generateTransactionCode(); $result = collect(DB::select('SELECT * FROM transmitted_ilink_transaction WHERE id_transaction = :code', ['code' => $code])); $codeCorrect = sizeof($result) < 0; } while ($codeCorrect); return $code; } }