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

Guardar y valodar los correos electronicos del contacto

parent d31fbbf2
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
use App\Models\Caracteristicas;
use App\Models\cargos;
use App\Models\Contacto;
use App\Models\CorreoContactos;
use App\Models\Profesion;
use App\Models\Subgrupo;
use App\Models\Telefono;
@@ -63,6 +64,14 @@ public function store(Request $request)
            }, $item);
        }, $redesSocialesData);

        // Transformar valores '0' y "null" en null en los campos de correos electrónicos
        $correosData = $request->only(['correo_electronico', 'tipo_correo_electronico']);
        $correosData = array_map(function ($item) {
            return array_map(function ($value) {
                return ($value === '0' || $value === "null") ? null : $value;
            }, $item);
        }, $correosData);

        DB::beginTransaction();

        try{
@@ -80,6 +89,9 @@ public function store(Request $request)
             // Manejar los datos de redes sociales
             $redesSocialesGuardadas = $this->storeRedesSociales($contacto->id, $redesSocialesData);

            // Manejar los datos de correos electrónicos
            $correosGuardados = $this->storeCorreos($contacto->id, $correosData);

            // Si había datos de teléfonos y no se guardaron, lanzar excepción
            if ($telefonosGuardados === false && $this->telefonoDataPresent($telefonosData)) {
                throw new \Exception('Error al guardar los teléfonos');
@@ -90,6 +102,9 @@ public function store(Request $request)
                throw new \Exception('Error al guardar las redes sociales');
            }

            if ($correosGuardados === false && $this->correoDataPresent($correosData)) {
                throw new \Exception('Error al guardar los correos electrónicos');
            }

            DB::commit();
            
@@ -254,4 +269,48 @@ private function redSocialDataPresent($redesSocialesData)

        return false;
    }

    private function storeCorreos($contactoId, $correosData)
    {
        $correos = [];

        foreach ($correosData['correo_electronico'] as $index => $correo) {
            // Verificar si todos los campos del correo están vacíos (null o "null")
            $isEmpty = true;
            foreach ($correosData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    $isEmpty = false;
                    break;
                }
            }

            if (!$isEmpty) {
                $correos[] = [
                    'contacto_id' => $contactoId,
                    'correo_electronico' => $correo,
                    'tipo_correo_electronico' => $correosData['tipo_correo_electronico'][$index],
                ];
            }
        }

        if (!empty($correos)) {
            CorreoContactos::insert($correos);
            return true;
        }

        return false;
    }

    private function correoDataPresent($correosData)
    {
        foreach ($correosData['correo_electronico'] as $index => $redSocial) {
            foreach ($correosData as $key => $values) {
                if (!is_null($values[$index]) && $values[$index] !== "null") {
                    return true;
                }
            }
        }

        return false;
    }
}