Loading app/Http/Controllers/ContactoController.php +145 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,10 @@ use App\Models\Contacto; use App\Models\Profesion; use App\Models\Subgrupo; use App\Models\Telefono; use App\Models\RedesSociales; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; use Illuminate\Support\Str; Loading Loading @@ -45,6 +49,23 @@ public function store(Request $request) 'nombre' => 'required|max:255|string', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); $telefonosData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; }, $item); }, $telefonosData); $redesSocialesData = $request->only(['red_social', 'tipo_red_social']); $redesSocialesData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; }, $item); }, $redesSocialesData); DB::beginTransaction(); try{ $path_file = $this->storeProfilePicture($request); $data = $request->all(); Loading @@ -53,8 +74,30 @@ public function store(Request $request) } $contacto = Contacto::create($data); // Manejar los datos de teléfonos $telefonosGuardados = $this->storeTelefonos($contacto->id, $telefonosData); // Manejar los datos de redes sociales $redesSocialesGuardadas = $this->storeRedesSociales($contacto->id, $redesSocialesData); // 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'); } // Si había datos de redes sociales y no se guardaron, lanzar excepción if ($redesSocialesGuardadas === false && $this->redSocialDataPresent($redesSocialesData)) { throw new \Exception('Error al guardar las redes sociales'); } DB::commit(); dd($data); }catch (\Exception $e){ DB::rollBack(); return redirect()->back()->withErrors(['error' => 'Hubo un problema al crear el contacto: ' . $e->getMessage()]); } } /** Loading Loading @@ -117,4 +160,98 @@ private function storeProfilePicture(Request $request) // Retornar null si no hay archivo return null; } private function storeTelefonos($contactoId, $telefonosData) { $telefonos = []; foreach ($telefonosData['numero'] as $index => $numero) { // Verificar si todos los campos del teléfono están vacíos (null o "null") $isEmpty = true; foreach ($telefonosData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } if (!$isEmpty) { $telefonos[] = [ 'contacto_id' => $contactoId, 'prefijo' => $telefonosData['prefijo'][$index], 'lada' => $telefonosData['lada'][$index], 'numero' => $numero, 'tipo' => $telefonosData['tipo'][$index], 'estatus' => $telefonosData['estatus'][$index], 'ext' => $telefonosData['ext'][$index], 'id_radio' => $telefonosData['id_radio'][$index], 'observaciones' => $telefonosData['observaciones'][$index], ]; } } if (!empty($telefonos)) { Telefono::insert($telefonos); return true; } return false; } private function telefonoDataPresent($telefonosData) { foreach ($telefonosData['numero'] as $index => $numero) { foreach ($telefonosData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { return true; } } } return false; } private function storeRedesSociales($contactoId, $redesSocialesData) { $redesSociales = []; foreach ($redesSocialesData['red_social'] as $index => $redSocial) { // Verificar si todos los campos de la red social están vacíos (null o "null") $isEmpty = true; foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } if (!$isEmpty) { $redesSociales[] = [ 'contacto_id' => $contactoId, 'red_social' => $redSocial, 'tipo_red_social' => $redesSocialesData['tipo_red_social'][$index], ]; } } if (!empty($redesSociales)) { RedesSociales::insert($redesSociales); return true; } return false; } private function redSocialDataPresent($redesSocialesData) { foreach ($redesSocialesData['red_social'] as $index => $redSocial) { foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { return true; } } } return false; } } Loading
app/Http/Controllers/ContactoController.php +145 −8 Original line number Diff line number Diff line Loading @@ -7,6 +7,10 @@ use App\Models\Contacto; use App\Models\Profesion; use App\Models\Subgrupo; use App\Models\Telefono; use App\Models\RedesSociales; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; use Illuminate\Support\Str; Loading Loading @@ -45,6 +49,23 @@ public function store(Request $request) 'nombre' => 'required|max:255|string', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); $telefonosData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; }, $item); }, $telefonosData); $redesSocialesData = $request->only(['red_social', 'tipo_red_social']); $redesSocialesData = array_map(function ($item) { return array_map(function ($value) { return ($value === "null") ? null : $value; }, $item); }, $redesSocialesData); DB::beginTransaction(); try{ $path_file = $this->storeProfilePicture($request); $data = $request->all(); Loading @@ -53,8 +74,30 @@ public function store(Request $request) } $contacto = Contacto::create($data); // Manejar los datos de teléfonos $telefonosGuardados = $this->storeTelefonos($contacto->id, $telefonosData); // Manejar los datos de redes sociales $redesSocialesGuardadas = $this->storeRedesSociales($contacto->id, $redesSocialesData); // 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'); } // Si había datos de redes sociales y no se guardaron, lanzar excepción if ($redesSocialesGuardadas === false && $this->redSocialDataPresent($redesSocialesData)) { throw new \Exception('Error al guardar las redes sociales'); } DB::commit(); dd($data); }catch (\Exception $e){ DB::rollBack(); return redirect()->back()->withErrors(['error' => 'Hubo un problema al crear el contacto: ' . $e->getMessage()]); } } /** Loading Loading @@ -117,4 +160,98 @@ private function storeProfilePicture(Request $request) // Retornar null si no hay archivo return null; } private function storeTelefonos($contactoId, $telefonosData) { $telefonos = []; foreach ($telefonosData['numero'] as $index => $numero) { // Verificar si todos los campos del teléfono están vacíos (null o "null") $isEmpty = true; foreach ($telefonosData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } if (!$isEmpty) { $telefonos[] = [ 'contacto_id' => $contactoId, 'prefijo' => $telefonosData['prefijo'][$index], 'lada' => $telefonosData['lada'][$index], 'numero' => $numero, 'tipo' => $telefonosData['tipo'][$index], 'estatus' => $telefonosData['estatus'][$index], 'ext' => $telefonosData['ext'][$index], 'id_radio' => $telefonosData['id_radio'][$index], 'observaciones' => $telefonosData['observaciones'][$index], ]; } } if (!empty($telefonos)) { Telefono::insert($telefonos); return true; } return false; } private function telefonoDataPresent($telefonosData) { foreach ($telefonosData['numero'] as $index => $numero) { foreach ($telefonosData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { return true; } } } return false; } private function storeRedesSociales($contactoId, $redesSocialesData) { $redesSociales = []; foreach ($redesSocialesData['red_social'] as $index => $redSocial) { // Verificar si todos los campos de la red social están vacíos (null o "null") $isEmpty = true; foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { $isEmpty = false; break; } } if (!$isEmpty) { $redesSociales[] = [ 'contacto_id' => $contactoId, 'red_social' => $redSocial, 'tipo_red_social' => $redesSocialesData['tipo_red_social'][$index], ]; } } if (!empty($redesSociales)) { RedesSociales::insert($redesSociales); return true; } return false; } private function redSocialDataPresent($redesSocialesData) { foreach ($redesSocialesData['red_social'] as $index => $redSocial) { foreach ($redesSocialesData as $key => $values) { if (!is_null($values[$index]) && $values[$index] !== "null") { return true; } } } return false; } }