Loading app/Http/Controllers/ContactoController.php +13 −3 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ use App\Models\cargos; use App\Models\Contacto; use App\Models\CorreoContactos; use App\Models\Grupos; use App\Models\Profesion; use App\Models\Subgrupo; use App\Models\Telefono; Loading Loading @@ -40,7 +41,8 @@ public function create() $cargos = cargos::get(); $caracteristicas = Caracteristicas::get(); $subgrupos = Subgrupo::get(); return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos')); $grupos = Grupos::get(); return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos', 'grupos')); } /** Loading @@ -51,6 +53,7 @@ public function store(Request $request) $request->validate([ 'foto_perfil' => 'image|mimes:jpeg,png,jpg,gif|max:2048', 'nombre' => 'required|max:255|string', 'ap_paterno' => 'required|max:255|string', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); Loading Loading @@ -84,7 +87,6 @@ public function store(Request $request) 'profesion_id', 'cargo_id', 'caracteristica_id', 'subgrupo_id', 'mes_cump', 'dia_cump', //institucion_id Loading @@ -95,7 +97,6 @@ public function store(Request $request) unset($requestData[$field]); } } $request->replace($requestData); $data = $request->all(); Loading Loading @@ -132,6 +133,15 @@ public function store(Request $request) throw new \Exception('Error al guardar los correos electrónicos'); } // Sincronizar subgrupos y grupos if ($request->has('subgrupo_id')) { $contacto->subgrupos()->sync($request->input('subgrupo_id')); } if ($request->has('grupo_id')) { $contacto->grupos()->sync($request->input('grupo_id')); } DB::commit(); return redirect()->route('contacto.get')->with('success', 'Contacto guardado correctamente'); }catch (\Exception $e){ Loading app/Models/Contacto.php +10 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ class Contacto extends Model 'cargo_id', 'caracteristica_id', //'institucion_id', 'subgrupo_id', ]; public function profesion(): BelongsTo Loading Loading @@ -77,4 +76,14 @@ public function listas(): BelongsToMany { return $this->belongsToMany(Lista::class); } public function subgrupos(): BelongsToMany { return $this->belongsToMany(Subgrupo::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id'); } public function grupos(): BelongsToMany { return $this->belongsToMany(Grupos::class, 'contactos_grupos', 'contacto_id', 'grupo_id'); } } app/Models/Grupos.php +5 −0 Original line number Diff line number Diff line Loading @@ -27,5 +27,10 @@ public function listas(): BelongsToMany return $this->belongsToMany(Lista::class); } public function contactos(): BelongsToMany { return $this->belongsToMany(Contacto::class, 'contactos_grupos', 'contacto_id', 'grupo_id'); } public $timestamps = false; } app/Models/Subgrupo.php +5 −0 Original line number Diff line number Diff line Loading @@ -31,4 +31,9 @@ public function listas(): BelongsToMany { return $this->belongsToMany(Lista::class); } public function contactos(): BelongsToMany { return $this->belongsToMany(Contacto::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id'); } } resources/views/adminGen/contactos/create.blade.php +42 −16 Original line number Diff line number Diff line Loading @@ -239,25 +239,15 @@ <br> </div> <div x-show="activeTab === 2"> <div id="dynamicFormContainerGrupos" class="grid grid-cols-2 md:grid-cols-2 gap-5 form-group relative"> <div> <div class="mb-5"> <label for="subgrupo_id">Subgrupos</label> <select id="subgrupo_id" name="subgrupo_id" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($subgrupos as $subgrupo) <option value="{{ $subgrupo->id }}">{{ $subgrupo->nombre }}</option> @endforeach </select> <!-- TODO Intituciones pendientes --> <div class="grid grid-cols-2 md:grid-cols-2 gap-5 form-group relative"> <div id="dynamicFormContainerSubgrupos"> </div> <div id="dynamicFormContainerGrupos"> </div> <button type="button" class="btn btn-primary" id="agregarBtnSubgrupo">Agregar Subgrupo</button> <button type="button" class="btn btn-primary" id="agregarBtnGrupo">Agregar Grupo</button> </div> <br> <button type="button" class="btn btn-primary" id="agregarBtnRed">Agregar</button> <br> </div> <div x-show="activeTab === 3"> Loading Loading @@ -517,9 +507,13 @@ const agregarBtnTel = document.getElementById('agregarBtnTel'); const agregarBtnRed = document.getElementById('agregarBtnRed'); const agregarBtnCorreo = document.getElementById('agregarBtnCorreo'); const agregarBtnSubgrupo = document.getElementById('agregarBtnSubgrupo'); const agregarBtnGrupo = document.getElementById('agregarBtnGrupo'); const dynamicFormContainerTel = document.getElementById('dynamicFormContainerTel'); const dynamicFormContainerRed = document.getElementById('dynamicFormContainerRed'); const dynamicFormContainerCorreo = document.getElementById('dynamicFormContainerCorreo'); const dynamicFormContainerSubgrupos = document.getElementById('dynamicFormContainerSubgrupos'); const dynamicFormContainerGrupos = document.getElementById('dynamicFormContainerGrupos'); agregarBtnTel.addEventListener('click', function() { const newFormGroup = document.createElement('div'); Loading Loading @@ -656,6 +650,38 @@ }); }); agregarBtnSubgrupo.addEventListener('click', function(){ const newFormGroup = document.createElement('div'); newFormGroup.innerHTML = ` <div class="mb-5"> <label for="subgrupo_id">Subgrupo</label> <select id="subgrupo_id" name="subgrupo_id[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($subgrupos as $subgrupo) <option value="{{ $subgrupo->id }}">{{ $subgrupo->nombre }}</option> @endforeach </select> </div> `; dynamicFormContainerSubgrupos.appendChild(newFormGroup); }); agregarBtnGrupo.addEventListener('click', function(){ const newFormGroup = document.createElement('div'); newFormGroup.innerHTML = ` <div class="mb-5"> <label for="grupo_id">Grupo</label> <select id="grupo_id" name="grupo_id[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($grupos as $grupo) <option value="{{ $grupo->id }}">{{ $grupo->nombre }}</option> @endforeach </select> </div> `; dynamicFormContainerGrupos.appendChild(newFormGroup); }); // Añadir evento de clic para eliminar a los grupos iniciales document.querySelectorAll('.removeBtn').forEach(function(btn) { btn.addEventListener('click', function() { Loading Loading
app/Http/Controllers/ContactoController.php +13 −3 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ use App\Models\cargos; use App\Models\Contacto; use App\Models\CorreoContactos; use App\Models\Grupos; use App\Models\Profesion; use App\Models\Subgrupo; use App\Models\Telefono; Loading Loading @@ -40,7 +41,8 @@ public function create() $cargos = cargos::get(); $caracteristicas = Caracteristicas::get(); $subgrupos = Subgrupo::get(); return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos')); $grupos = Grupos::get(); return view('adminGen.contactos.create', compact('conyuges', 'profesiones', 'cargos', 'caracteristicas', 'subgrupos', 'grupos')); } /** Loading @@ -51,6 +53,7 @@ public function store(Request $request) $request->validate([ 'foto_perfil' => 'image|mimes:jpeg,png,jpg,gif|max:2048', 'nombre' => 'required|max:255|string', 'ap_paterno' => 'required|max:255|string', ]); $telefonosData = $request->only(['prefijo', 'lada', 'numero', 'tipo', 'estatus', 'ext', 'id_radio', 'observaciones']); Loading Loading @@ -84,7 +87,6 @@ public function store(Request $request) 'profesion_id', 'cargo_id', 'caracteristica_id', 'subgrupo_id', 'mes_cump', 'dia_cump', //institucion_id Loading @@ -95,7 +97,6 @@ public function store(Request $request) unset($requestData[$field]); } } $request->replace($requestData); $data = $request->all(); Loading Loading @@ -132,6 +133,15 @@ public function store(Request $request) throw new \Exception('Error al guardar los correos electrónicos'); } // Sincronizar subgrupos y grupos if ($request->has('subgrupo_id')) { $contacto->subgrupos()->sync($request->input('subgrupo_id')); } if ($request->has('grupo_id')) { $contacto->grupos()->sync($request->input('grupo_id')); } DB::commit(); return redirect()->route('contacto.get')->with('success', 'Contacto guardado correctamente'); }catch (\Exception $e){ Loading
app/Models/Contacto.php +10 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ class Contacto extends Model 'cargo_id', 'caracteristica_id', //'institucion_id', 'subgrupo_id', ]; public function profesion(): BelongsTo Loading Loading @@ -77,4 +76,14 @@ public function listas(): BelongsToMany { return $this->belongsToMany(Lista::class); } public function subgrupos(): BelongsToMany { return $this->belongsToMany(Subgrupo::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id'); } public function grupos(): BelongsToMany { return $this->belongsToMany(Grupos::class, 'contactos_grupos', 'contacto_id', 'grupo_id'); } }
app/Models/Grupos.php +5 −0 Original line number Diff line number Diff line Loading @@ -27,5 +27,10 @@ public function listas(): BelongsToMany return $this->belongsToMany(Lista::class); } public function contactos(): BelongsToMany { return $this->belongsToMany(Contacto::class, 'contactos_grupos', 'contacto_id', 'grupo_id'); } public $timestamps = false; }
app/Models/Subgrupo.php +5 −0 Original line number Diff line number Diff line Loading @@ -31,4 +31,9 @@ public function listas(): BelongsToMany { return $this->belongsToMany(Lista::class); } public function contactos(): BelongsToMany { return $this->belongsToMany(Contacto::class, 'contactos_subgrupos', 'contacto_id', 'subgrupo_id'); } }
resources/views/adminGen/contactos/create.blade.php +42 −16 Original line number Diff line number Diff line Loading @@ -239,25 +239,15 @@ <br> </div> <div x-show="activeTab === 2"> <div id="dynamicFormContainerGrupos" class="grid grid-cols-2 md:grid-cols-2 gap-5 form-group relative"> <div> <div class="mb-5"> <label for="subgrupo_id">Subgrupos</label> <select id="subgrupo_id" name="subgrupo_id" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($subgrupos as $subgrupo) <option value="{{ $subgrupo->id }}">{{ $subgrupo->nombre }}</option> @endforeach </select> <!-- TODO Intituciones pendientes --> <div class="grid grid-cols-2 md:grid-cols-2 gap-5 form-group relative"> <div id="dynamicFormContainerSubgrupos"> </div> <div id="dynamicFormContainerGrupos"> </div> <button type="button" class="btn btn-primary" id="agregarBtnSubgrupo">Agregar Subgrupo</button> <button type="button" class="btn btn-primary" id="agregarBtnGrupo">Agregar Grupo</button> </div> <br> <button type="button" class="btn btn-primary" id="agregarBtnRed">Agregar</button> <br> </div> <div x-show="activeTab === 3"> Loading Loading @@ -517,9 +507,13 @@ const agregarBtnTel = document.getElementById('agregarBtnTel'); const agregarBtnRed = document.getElementById('agregarBtnRed'); const agregarBtnCorreo = document.getElementById('agregarBtnCorreo'); const agregarBtnSubgrupo = document.getElementById('agregarBtnSubgrupo'); const agregarBtnGrupo = document.getElementById('agregarBtnGrupo'); const dynamicFormContainerTel = document.getElementById('dynamicFormContainerTel'); const dynamicFormContainerRed = document.getElementById('dynamicFormContainerRed'); const dynamicFormContainerCorreo = document.getElementById('dynamicFormContainerCorreo'); const dynamicFormContainerSubgrupos = document.getElementById('dynamicFormContainerSubgrupos'); const dynamicFormContainerGrupos = document.getElementById('dynamicFormContainerGrupos'); agregarBtnTel.addEventListener('click', function() { const newFormGroup = document.createElement('div'); Loading Loading @@ -656,6 +650,38 @@ }); }); agregarBtnSubgrupo.addEventListener('click', function(){ const newFormGroup = document.createElement('div'); newFormGroup.innerHTML = ` <div class="mb-5"> <label for="subgrupo_id">Subgrupo</label> <select id="subgrupo_id" name="subgrupo_id[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($subgrupos as $subgrupo) <option value="{{ $subgrupo->id }}">{{ $subgrupo->nombre }}</option> @endforeach </select> </div> `; dynamicFormContainerSubgrupos.appendChild(newFormGroup); }); agregarBtnGrupo.addEventListener('click', function(){ const newFormGroup = document.createElement('div'); newFormGroup.innerHTML = ` <div class="mb-5"> <label for="grupo_id">Grupo</label> <select id="grupo_id" name="grupo_id[]" class="block w-full py-2 px-3 border border-gray-300 bg-white rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm"> <option value="null" selected>Selecciona una opción</option> @foreach($grupos as $grupo) <option value="{{ $grupo->id }}">{{ $grupo->nombre }}</option> @endforeach </select> </div> `; dynamicFormContainerGrupos.appendChild(newFormGroup); }); // Añadir evento de clic para eliminar a los grupos iniciales document.querySelectorAll('.removeBtn').forEach(function(btn) { btn.addEventListener('click', function() { Loading