HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/Imports/ClientImport.php
<?php

namespace App\Http\Controllers\Imports;

use App\Core\User\Application\UserService;
use App\Http\Controllers\Controller;
use App\Http\Controllers\UserController;
use App\Module;
use App\Rol;
use DB;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class ClientImport implements ToCollection, WithHeadingRow
{
    public $answer = [];

    public $edit = [
        'creados'   => 0,
        'existen'   => 0,
    ];

    public $is_error;
    public $request;
    private $__CLIENT_ROL = 4;
    private $newUsers = [];

    public function collection(Collection $rows)
    {
        $is_error = false;
        DB::beginTransaction();
        $cont = 1;
        $userController = new UserController();

        foreach ($rows as $row) {
            $cont++;
            if (!$row->filter()->isNotEmpty()) {
                continue;
            }

            if (!isset($row["nombres"]) || !$row["nombres"]) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene información de nombres',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            }

            if (!isset($row["apellidos"]) || !$row["apellidos"]) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene información de apellidos',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            }

            if (!isset($row["email"]) || !$row["email"]) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene información de email',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            } else if (!$this->validateStructureMail($row["email"])) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene email con un formato válido (ejp: pepitoperez@gmail.com)',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            }

            if (!isset($row["documento"]) || !$row["documento"]) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene información de documento',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            }

            if (!isset($row["telefono"]) || !$row["telefono"]) {
                $this->answer[] = [
                    'message' => 'La plantilla de importar clientes en la posición: ' . $cont . ' no tiene información de telefono',
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            }

            if (!isset($row["password"]) || !$row["password"]) {
                $password = base64_encode(random_bytes(4));
            } else {
                $password = $row["password"];
            }

            $data = [
                'first_name'        => trim($row['nombres']),
                'last_name'         => trim($row['apellidos']),
                'email'             => trim($row["email"]),
                'phone'             => trim($row["telefono"]),
                'password'          => $password,
                'document'          => trim($row["documento"]),
                'rol_id'            => $this->__CLIENT_ROL
            ];
            $request = new Request($data);
            $user = $userController->createClient($request, $is_ticket = false, $validateByDocument = false);
            if (!$user || !$user['r']) {
                $this->answer[] = [
                    'message' => 'Error creando cliente en la posición: ' . $cont . ', ' . $user['m'],
                    'state' => false,
                    'line' => $cont
                ];
                $is_error = true;
            } else if (isset($user['status']) && $user['status'] == 'success') {
                $this->edit['creados'] += 1;
                $this->newUsers[] = [
                    'user'              => $user['d'],
                    'password'          => $password,       // Contraseña sin codificar
                ];
            } else {
                if (isset($user['d']) && $user['d']['rol_id'] && $user['d']['rol_id'] != $this->__CLIENT_ROL) {
                    $this->answer[] = [
                        'message' => 'Error creando cliente en la posición: ' . $cont . ', ya existe usuario ' . $user['d']['email'] . ' registrado con otro rol: ' . Rol::findOrFail($user['d']['rol_id'])->name,
                        'state' => false,
                        'line' => $cont
                    ];
                    $is_error = true;
                }
                $this->edit['existen'] += 1;
            }
        }

        if ($is_error || sizeof($rows) <= 0) {
            DB::rollback();
            return;
        } else {
            DB::commit();

            $userModule = Module::where("route", "clients")->first();
            $controller = new Controller;
            $controller->registerLog(Auth::user()->id, 'Importar clientes', json_encode($rows), "Update", $userModule->id);

            if (config('app.notify_import_user') == 'true' && count($this->newUsers) > 0) {
                $userService = new UserService();
                $userService->dispatchNewUserProcesses($this->newUsers, 'mails.user.new-client');
            }
        }
    }

    function validateStructureMail($mail)
    {
        $pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
        return preg_match($pattern, $mail) === 1;
    }
}