Loading app/Http/Controllers/ContactoController.php +59 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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{ Loading @@ -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'); Loading @@ -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(); Loading Loading @@ -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; } } Loading
app/Http/Controllers/ContactoController.php +59 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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{ Loading @@ -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'); Loading @@ -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(); Loading Loading @@ -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; } }