Commit 1a2a09f7 authored by Alfonso Rafael Solis Rangel's avatar Alfonso Rafael Solis Rangel
Browse files

Metodo de carga de contactos con csv

parent d9cdfe57
Loading
Loading
Loading
Loading
+98 −4
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Log;

class ContactoController extends Controller
{
@@ -446,14 +446,108 @@ private function correoDataPresent($correosData)
        return false;
    }

    public function viewUpload()
    {
        return view('adminGen.contactos.upload');
    }

    public function upload(Request $request)
    {
        $request->validate([
            'excel_file' => 'required|mimes:xlsx,xls',
            'csv_file' => 'required|mimes:csv,txt',
        ]);

        $path = $request->file('csv_file')->getRealPath();
        $content = file_get_contents($path);
        $content = str_replace("\xEF\xBB\xBF", '', $content); 

        $data = array_map('str_getcsv', explode("\n", $content));
        $header = array_shift($data);

        foreach ($data as $row) {
            if (count($header) !== count($row)) {
                continue;
            }
            $row = array_combine($header, $row);

            $contacto = Contacto::create([
                'nombre' => $row['nombre'],
                'ap_paterno' => $row['ap_paterno'],
                'ap_materno' => $row['ap_materno'],
                'cargo_desc' => $row['cargo_desc'],
                'mes_cump' => $row['mes_cump'],
                'dia_cump' => $row['dia_cump'],
                'domicilio_oficial' => $row['domicilio_oficial'],
                'codigo_postal' => $row['codigo_postal'],
                'localidad_oficial' => $row['localidad_oficial'],
                'municipio_oficial' => $row['municipio_oficial'],
                'estado' => $row['estado'],
                'pais' => $row['pais'],
                'domicilio_par' => $row['domicilio_par'],
                'codigo_postal_par' => $row['codigo_postal_par'],
                'localidad_par' => $row['localidad_par'],
                'municipio_par' => $row['municipio_par'],
                'estado_par' => $row['estado_par'],	
                'pais_par' => $row['pais_par'],	
                'finado' => $row['finado'],
                'foto_perfil' => 'assets/images/profile-icon.webp'
            ]);

        Excel::import(new ContactosImport, $request->file('excel_file'));
            // Procesar teléfonos
            $prefijos = explode(';', $row['prefijo']);
            $ladas = explode(';', $row['lada']);
            $numeros = explode(';', $row['numero']);
            $tipos = explode(';', $row['tipo']);
            $estatuses = explode(';', $row['estatus']);
            $exts = explode(';', $row['ext']);
            $id_radios = explode(';', $row['id_radio']);
            $observaciones = explode(';', $row['observaciones']);

            for ($i = 0; $i < count($prefijos); $i++) {
                if ($prefijos[$i] != 'null' || $ladas[$i] != 'null' || $numeros[$i] != 'null') {
                    Telefono::create([
                        'contacto_id' => $contacto->id,
                        'prefijo' => $prefijos[$i],
                        'lada' => $ladas[$i],
                        'numero' => $numeros[$i],
                        'tipo' => $tipos[$i],
                        'estatus' => $estatuses[$i],
                        'ext' => $exts[$i],
                        'id_radio' => $id_radios[$i],
                        'observaciones' => $observaciones[$i],
                    ]);
                }
            }

            // 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],
                    ]);
                }
            }

            // 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],
                    ]);
                }
            }
        }

        return redirect()->back()->with('success', 'Archivo Excel subido y procesado correctamente.');
        return redirect()->back()->with('success', 'Archivo CSV subido y procesado correctamente.');
    }
}