Commit 61ae9ca4 authored by Alfonso Rafael Solis Rangel's avatar Alfonso Rafael Solis Rangel
Browse files

Implementacion de erores personalizados al csv

parent e246f99b
Loading
Loading
Loading
Loading
+149 −98
Original line number Diff line number Diff line
@@ -550,6 +550,7 @@ public function viewUpload()

    public function upload(Request $request)
    {
        try{
            $request->validate([
                'csv_file' => 'required|mimes:csv,txt',
            ]);
@@ -609,49 +610,26 @@ public function upload(Request $request)
                $exts = explode(';', $row['ext']);
                $observaciones = explode(';', $row['observaciones']);
    
            for ($i = 0; $i < count($numeros); $i++) {
                if ( $numeros[$i] != 'null') {
                    Telefono::create([
                        'contacto_id' => $contacto->id,
                        'numero' => $numeros[$i],
                        'tipo' => $tipos[$i],
                        'estatus' => $estatuses[$i],
                        'ext' => $exts[$i],
                        'observaciones' => $observaciones[$i],
                    ]);
                }
            }
                $this->validateAndCreateTelefonos($contacto->id, $numeros, $tipos, $estatuses, $exts, $observaciones);
    
                // Procesar redes sociales
                $redes_sociales = explode(';', $row['red_social']);
                $tipos_redes_sociales = explode(';', $row['tipo_red_social']);
    
            for ($i = 0; $i < count($redes_sociales); $i++) {
                if ($redes_sociales[$i] != 'null' || $tipos_redes_sociales[$i] != 'null') {
                    RedesSociales::create([
                        'contacto_id' => $contacto->id,
                        'red_social' => $redes_sociales[$i],
                        'tipo_red_social' => $tipos_redes_sociales[$i],
                    ]);
                }
            }
                $this->validateAndCreateRS($contacto->id, $redes_sociales, $tipos_redes_sociales);
    
                // Procesar correos electrónicos
                $correos = explode(';', $row['correo_electronico']);
                $tipos_correos = explode(';', $row['tipo_correo_electronico']);
    
            for ($i = 0; $i < count($correos); $i++) {
                if ($correos[$i] != 'null' || $tipos_correos[$i] != 'null') {
                    CorreoContactos::create([
                        'contacto_id' => $contacto->id,
                        'correo_electronico' => $correos[$i],
                        'tipo_correo_electronico' => $tipos_correos[$i],
                    ]);
                }
            }
                $this->validateAndCreateEmails($contacto->id, $correos, $tipos_correos);
            }
    
            return redirect()->route('contacto.get')->with('success', 'Importación de contactos almacenada correctamente');
        }catch(\Throwable $e){
            return redirect()->route('contacto.upload')->withErrors('Error al importar los contactos, favor de revisar el archivo CSV. \n' . $e->getMessage());
        }
        
    }

    public function obtenerEventos(Request $request){
@@ -696,6 +674,79 @@ public function obtenerEventos(Request $request){

        return response()->json($eventos);
    }

    private function validateAndCreateTelefonos($contactoId, $numeros, $tipos, $estatuses, $exts, $observaciones)
    {
        for ($i = 0; $i < count($numeros); $i++) {
            if ($numeros[$i] != 'null') {
                if(!filter_var($numeros[$i], FILTER_VALIDATE_INT)){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El número de teléfono debe ser un número entero. Valor actual: ' . $numeros[$i]);
                }
                if(!in_array($tipos[$i], ['Directo', 'Particular', 'Celular', 'Conmutador'])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El tipo de teléfono debe ser "Directo", "Particular", "Celular" o "Conmutador". Valor actual: ' . $tipos[$i]);
                }
                if(!in_array($estatuses[$i], ['Público', 'Privado'])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El estatus del teléfono debe ser "Público" o "Privado". Valor actual: ' . $estatuses[$i]);
                }
                if(!is_string($exts[$i])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: La extensión del teléfono debe ser una cadena de texto. Valor actual: ' . $exts[$i]);
                }
                if(!is_string($observaciones[$i])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: Las observaciones del teléfono deben ser una cadena de texto. Valor actual: ' . $observaciones[$i]);
                }

                Telefono::create([
                    'contacto_id' => $contactoId,
                    'numero' => $numeros[$i],
                    'tipo' => $tipos[$i],
                    'estatus' => $estatuses[$i],
                    'ext' => $exts[$i],
                    'observaciones' => $observaciones[$i],
                ]);
            }
        }
    }

    private function validateAndCreateRS($contactoId, $redes_sociales, $tipos_redes_sociales)
    {
        for ($i = 0; $i < count($redes_sociales); $i++) {
            if ($redes_sociales[$i] != 'null') {
                if(!filter_var($redes_sociales[$i], FILTER_VALIDATE_URL)){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: La red social debe ser una URL válida. Valor actual: ' . $redes_sociales[$i]);
                }
                if(!in_array($tipos_redes_sociales[$i], ['Facebook', 'Twitter', 'Instagram', 'LinkedIn', 'Página Web'])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El tipo de red social debe ser "Facebook", "Twitter", "Instagram", "LinkedIn" o "Página Web". Valor actual: ' . $tipos_redes_sociales[$i]);
                }

                RedesSociales::create([
                    'contacto_id' => $contactoId,
                    'red_social' => $redes_sociales[$i],
                    'tipo_red_social' => $tipos_redes_sociales[$i],
                ]);
            }
        }
    }

    private function validateAndCreateEmails($contactoId, $correos, $tipos_correos)
    {
        for ($i = 0; $i < count($correos); $i++) {
            if ($correos[$i] != 'null') {
                if(!filter_var($correos[$i], FILTER_VALIDATE_EMAIL)){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El correo electrónico debe ser una dirección de correo válida. Valor actual: ' . $correos[$i]);
                }
                if(!in_array($tipos_correos[$i], ['Personal', 'Oficial'])){
                    throw new \Exception('Error en la fila ' . $i+1 . ' del archivo CSV: El tipo de correo electrónico debe ser "Personal" o "Oficial". Valor actual: ' . $tipos_correos[$i]);
                }

                CorreoContactos::create([
                    'contacto_id' => $contactoId,
                    'correo_electronico' => $correos[$i],
                    'tipo_correo_electronico' => $tipos_correos[$i],
                ]);
            }
        }
        
    }
}

    
 No newline at end of file