Loading app/Http/Controllers/InstitucionesController.php +99 −54 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ public function store(Request $request) } $institucion = Instituciones::create($data); // Manejar los datos de teléfonos // Manejar los datos de teléfonos $telefonosGuardados = $this->storeTelefonos($institucion->id, $telefonosData); Loading @@ -109,20 +108,17 @@ public function store(Request $request) } } public function show(string $id) public function show($id) { $instituciones = Instituciones::findOrFail($id); return view('adminGen.instituciones.show', compact('instituciones')); } public function edit(string $id) public function edit($id) { $subgrupos = Subgrupo::all(); $instituciones = Instituciones::findOrFail($id); $instituciones->load('redesSocialesInst'); // Cargar relaciones si son necesarias // Puedes acceder a las redes sociales cargadas así: $redes = $instituciones->redesSocialesInst; // Esto te dará una colección de redes sociales $subgrupos = Subgrupo::all(); $redes = $instituciones->redes; return view('adminGen.instituciones.edit', compact('instituciones', 'subgrupos', 'redes')); } Loading @@ -136,6 +132,7 @@ public function update(Request $request, string $id) ]); $institucion = Instituciones::findOrFail($id); $user = auth()->user(); $fieldsToCheck = [ 'subgrupo_id', Loading @@ -149,68 +146,116 @@ public function update(Request $request, string $id) $request->replace($requestData); // Actualizar los datos principales de la institución $institucion->update($validatedData); // Manejar la imagen de perfil si se sube una nueva if ($request->hasFile('imagen')) { // Eliminar la imagen de perfil anterior si existe if ($institucion->imagen) { Storage::delete('public/' . $institucion->imagen); // Guardar auditoría de campos simples $changes = []; foreach ($requestData as $key => $value) { if (!is_array($value) && $key !== '_token' && $institucion->$key != $value) { $changes[] = [ 'campo_editado' => $key, 'valor_anterior' => $institucion->$key, 'nuevo_valor' => $value, 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } // Guardar la nueva imagen de perfil $path_file = $this->storeProfilePicture($request); $institucion->imagen = $path_file; $institucion->save(); // Guardar los cambios en la institución } // Manejar los teléfonos if ($request->has('prefijo')) { // Guardar auditoría de teléfonos $telefonosAnteriores = $institucion->telefonos->toArray(); $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) { return [ 'prefijo' => $prefijo, 'lada' => $request->input('lada')[$index] ?? null, 'numero' => $request->input('numero')[$index] ?? null, 'tipo' => $request->input('tipo')[$index] ?? null, 'estatus' => $request->input('estatus')[$index] ?? null, 'ext' => $request->input('ext')[$index] ?? null, 'id_radio' => $request->input('id_radio')[$index] ?? null, 'observaciones' => $request->input('observaciones')[$index] ?? null, 'lada' => $request->input('lada')[$index], 'numero' => $request->input('numero')[$index], 'tipo' => $request->input('tipo')[$index], 'estatus' => $request->input('estatus')[$index], 'ext' => $request->input('ext')[$index], 'id_radio' => $request->input('id_radio')[$index], 'observaciones' => $request->input('observaciones')[$index], ]; })->toArray(); // Eliminar los teléfonos existentes y crear los nuevos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); foreach ($telefonosAnteriores as $index => $telefonoAnterior) { foreach ($telefonoAnterior as $key => $value) { if (isset($telefonos[$index][$key]) && $value != $telefonos[$index][$key]) { $changes[] = [ 'campo_editado' => "telefono_{$index}_{$key}", 'valor_anterior' => $value, 'nuevo_valor' => $telefonos[$index][$key], 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } } } // Manejar las redes sociales if ($request->has('link_inst')) { $redes = collect($request->input('link_inst'))->map(function($url, $index) use ($request) { $red_social_inst = $request->input('red_social_inst')[$index] ?? null; $tipo_RS_inst = $request->input('tipo_red_social')[$index] ?? null; // Guardar auditoría de redes sociales $redesAnteriores = $institucion->redes->toArray(); $redes = collect($request->input('red_social_inst'))->map(function($url, $index) use ($request) { return [ 'red_social_inst' => $red_social_inst, 'link_inst' => $url, 'tipo_RS_inst' => $tipo_RS_inst, 'red_social_inst' => $request->input('red_social_inst')[$index], 'tipo_RS_inst' => $request->input('tipo_RS_inst')[$index], ]; })->toArray(); // Eliminar las redes sociales existentes y crear las nuevas $institucion->redesSocialesInst()->delete(); $institucion->redesSocialesInst()->createMany($redes); foreach ($redesAnteriores as $index => $redAnterior) { foreach ($redAnterior as $key => $value) { if (isset($redes[$index][$key]) && $value != $redes[$index][$key]) { $changes[] = [ 'campo_editado' => "red_{$index}_{$key}", 'valor_anterior' => $value, 'nuevo_valor' => $redes[$index][$key], 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } } } $data = $request->all(); if ($request->hasFile('imagen')) { // Eliminar la foto de perfil anterior si existe if ($institucion->imagen) { Storage::delete(STR::substr($institucion->imagen, 8)); } // Guardar la nueva foto de perfil $path_file = $this->storeProfilePicture($request); if ($path_file) { $data['imagen'] = 'storage/' . $path_file; } else { $data['imagen'] = 'assets/images/instituciones_icon.webp'; } } // Actualizar los datos del usuario $institucion->update($data); return redirect()->route('instituciones.get')->with('success', 'Institución actualizada correctamente'); // Guardar teléfonos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); // Guardar redes sociales $institucion->redes()->delete(); $institucion->redes()->createMany($redes); return redirect()->route('instituciones.get', ['id' => $id])->with('success', 'Institución actualizada correctamente'); } public function destroy(string $id) { try { $instituciones = Instituciones::findOrFail($id); $instituciones->redesSocialesInst()->delete(); $instituciones->delete(); return redirect()->route('instituciones.get')->with('success', 'Institución eliminada correctamente.'); } catch(\Exception $e) { Loading app/Models/Instituciones.php +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,11 @@ public function redesSocialesInst() return $this->hasMany(RedesSocialesInst::class, 'instituciones_id'); } public function redes() { return $this->hasMany(RedesSocialesInst::class, 'instituciones_id'); } public function telefonos() { return $this->hasMany(TelefonoInst::class, 'instituciones_id'); Loading resources/views/adminGen/instituciones/edit.blade.php +7 −7 Original line number Diff line number Diff line Loading @@ -389,14 +389,14 @@ const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-3', 'gap-5', 'form-group', 'relative'); newFormGroup.innerHTML = ` <div> <fieldset> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> </div> <div> </fieldset> <fieldset> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> </div> </fieldset> <div> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" 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"> Loading resources/views/adminGen/instituciones/show.blade.php +89 −240 File changed.Preview size limit exceeded, changes collapsed. Show changes resources/views/components/common/sidebaradmin.blade.php +16 −5 Original line number Diff line number Diff line Loading @@ -173,10 +173,21 @@ class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-wh <li class="menu nav-item"> <a href="/instituciones" class="nav-link group"> <div class="flex items-center"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="12" cy="6" r="4" stroke="#1C274C" stroke-width="1.5"/> <path d="M15 20.6151C14.0907 20.8619 13.0736 21 12 21C8.13401 21 5 19.2091 5 17C5 14.7909 8.13401 13 12 13C15.866 13 19 14.7909 19 17C19 17.3453 18.9234 17.6804 18.7795 18" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M22 22L2 22" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 22V6C17 4.11438 17 3.17157 16.4142 2.58579C15.8284 2 14.8856 2 13 2H11C9.11438 2 8.17157 2 7.58579 2.58579C7 3.17157 7 4.11438 7 6V22" stroke="#1C274C" stroke-width="1.5"/> <path d="M12 22V19" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M10 12H14" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 11H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 14H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 11H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 14H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 8H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 8H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <circle cx="12" cy="7" r="2" stroke="#1C274C" stroke-width="1.5"/> <path d="M20.25 11.5C20.25 11.9142 20.5858 12.25 21 12.25C21.4142 12.25 21.75 11.9142 21.75 11.5H20.25ZM20.1111 8.33706L19.6945 8.96066L19.6945 8.96066L20.1111 8.33706ZM20.6629 8.88886L20.0393 9.30554L20.0393 9.30554L20.6629 8.88886ZM21.75 15.5C21.75 15.0858 21.4142 14.75 21 14.75C20.5858 14.75 20.25 15.0858 20.25 15.5H21.75ZM17.5 8.75C18.2178 8.75 18.6998 8.75091 19.0672 8.78828C19.422 8.82438 19.586 8.8882 19.6945 8.96066L20.5278 7.71346C20.1318 7.44886 19.6925 7.34415 19.219 7.29598C18.758 7.24909 18.1866 7.25 17.5 7.25V8.75ZM21.75 11.5C21.75 10.8134 21.7509 10.242 21.704 9.78102C21.6559 9.30755 21.5511 8.86818 21.2865 8.47218L20.0393 9.30554C20.1118 9.41399 20.1756 9.57796 20.2117 9.93283C20.2491 10.3002 20.25 10.7822 20.25 11.5H21.75ZM19.6945 8.96066C19.831 9.05186 19.9481 9.16905 20.0393 9.30554L21.2865 8.47218C21.0859 8.17191 20.8281 7.91409 20.5278 7.71346L19.6945 8.96066ZM20.25 15.5V22H21.75V15.5H20.25Z" fill="#1C274C"/> <path d="M3.88886 8.33706L4.30554 8.96066L4.30554 8.96066L3.88886 8.33706ZM3.33706 8.88886L3.96066 9.30554L3.96066 9.30554L3.33706 8.88886ZM3.75 20C3.75 19.5858 3.41421 19.25 3 19.25C2.58579 19.25 2.25 19.5858 2.25 20H3.75ZM2.25 16C2.25 16.4142 2.58579 16.75 3 16.75C3.41421 16.75 3.75 16.4142 3.75 16H2.25ZM6.5 7.25C5.81338 7.25 5.24196 7.24909 4.78102 7.29598C4.30755 7.34415 3.86818 7.44886 3.47218 7.71346L4.30554 8.96066C4.41399 8.8882 4.57796 8.82438 4.93283 8.78828C5.30023 8.75091 5.78216 8.75 6.5 8.75V7.25ZM3.75 11.5C3.75 10.7822 3.75091 10.3002 3.78828 9.93283C3.82438 9.57796 3.8882 9.41399 3.96066 9.30554L2.71346 8.47218C2.44886 8.86818 2.34415 9.30755 2.29598 9.78102C2.24909 10.242 2.25 10.8134 2.25 11.5H3.75ZM3.47218 7.71346C3.17191 7.91409 2.91409 8.17191 2.71346 8.47218L3.96066 9.30554C4.05186 9.16905 4.16905 9.05186 4.30554 8.96066L3.47218 7.71346ZM2.25 20V22H3.75V20H2.25ZM2.25 11.5V16H3.75V11.5H2.25Z" fill="#1C274C"/> <path d="M10 15H10.5M14 15H12.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> </svg> <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">Instituciones Públicas</span> Loading Loading
app/Http/Controllers/InstitucionesController.php +99 −54 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ public function store(Request $request) } $institucion = Instituciones::create($data); // Manejar los datos de teléfonos // Manejar los datos de teléfonos $telefonosGuardados = $this->storeTelefonos($institucion->id, $telefonosData); Loading @@ -109,20 +108,17 @@ public function store(Request $request) } } public function show(string $id) public function show($id) { $instituciones = Instituciones::findOrFail($id); return view('adminGen.instituciones.show', compact('instituciones')); } public function edit(string $id) public function edit($id) { $subgrupos = Subgrupo::all(); $instituciones = Instituciones::findOrFail($id); $instituciones->load('redesSocialesInst'); // Cargar relaciones si son necesarias // Puedes acceder a las redes sociales cargadas así: $redes = $instituciones->redesSocialesInst; // Esto te dará una colección de redes sociales $subgrupos = Subgrupo::all(); $redes = $instituciones->redes; return view('adminGen.instituciones.edit', compact('instituciones', 'subgrupos', 'redes')); } Loading @@ -136,6 +132,7 @@ public function update(Request $request, string $id) ]); $institucion = Instituciones::findOrFail($id); $user = auth()->user(); $fieldsToCheck = [ 'subgrupo_id', Loading @@ -149,68 +146,116 @@ public function update(Request $request, string $id) $request->replace($requestData); // Actualizar los datos principales de la institución $institucion->update($validatedData); // Manejar la imagen de perfil si se sube una nueva if ($request->hasFile('imagen')) { // Eliminar la imagen de perfil anterior si existe if ($institucion->imagen) { Storage::delete('public/' . $institucion->imagen); // Guardar auditoría de campos simples $changes = []; foreach ($requestData as $key => $value) { if (!is_array($value) && $key !== '_token' && $institucion->$key != $value) { $changes[] = [ 'campo_editado' => $key, 'valor_anterior' => $institucion->$key, 'nuevo_valor' => $value, 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } // Guardar la nueva imagen de perfil $path_file = $this->storeProfilePicture($request); $institucion->imagen = $path_file; $institucion->save(); // Guardar los cambios en la institución } // Manejar los teléfonos if ($request->has('prefijo')) { // Guardar auditoría de teléfonos $telefonosAnteriores = $institucion->telefonos->toArray(); $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) { return [ 'prefijo' => $prefijo, 'lada' => $request->input('lada')[$index] ?? null, 'numero' => $request->input('numero')[$index] ?? null, 'tipo' => $request->input('tipo')[$index] ?? null, 'estatus' => $request->input('estatus')[$index] ?? null, 'ext' => $request->input('ext')[$index] ?? null, 'id_radio' => $request->input('id_radio')[$index] ?? null, 'observaciones' => $request->input('observaciones')[$index] ?? null, 'lada' => $request->input('lada')[$index], 'numero' => $request->input('numero')[$index], 'tipo' => $request->input('tipo')[$index], 'estatus' => $request->input('estatus')[$index], 'ext' => $request->input('ext')[$index], 'id_radio' => $request->input('id_radio')[$index], 'observaciones' => $request->input('observaciones')[$index], ]; })->toArray(); // Eliminar los teléfonos existentes y crear los nuevos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); foreach ($telefonosAnteriores as $index => $telefonoAnterior) { foreach ($telefonoAnterior as $key => $value) { if (isset($telefonos[$index][$key]) && $value != $telefonos[$index][$key]) { $changes[] = [ 'campo_editado' => "telefono_{$index}_{$key}", 'valor_anterior' => $value, 'nuevo_valor' => $telefonos[$index][$key], 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } } } // Manejar las redes sociales if ($request->has('link_inst')) { $redes = collect($request->input('link_inst'))->map(function($url, $index) use ($request) { $red_social_inst = $request->input('red_social_inst')[$index] ?? null; $tipo_RS_inst = $request->input('tipo_red_social')[$index] ?? null; // Guardar auditoría de redes sociales $redesAnteriores = $institucion->redes->toArray(); $redes = collect($request->input('red_social_inst'))->map(function($url, $index) use ($request) { return [ 'red_social_inst' => $red_social_inst, 'link_inst' => $url, 'tipo_RS_inst' => $tipo_RS_inst, 'red_social_inst' => $request->input('red_social_inst')[$index], 'tipo_RS_inst' => $request->input('tipo_RS_inst')[$index], ]; })->toArray(); // Eliminar las redes sociales existentes y crear las nuevas $institucion->redesSocialesInst()->delete(); $institucion->redesSocialesInst()->createMany($redes); foreach ($redesAnteriores as $index => $redAnterior) { foreach ($redAnterior as $key => $value) { if (isset($redes[$index][$key]) && $value != $redes[$index][$key]) { $changes[] = [ 'campo_editado' => "red_{$index}_{$key}", 'valor_anterior' => $value, 'nuevo_valor' => $redes[$index][$key], 'instituciones_id' => $institucion->id, 'user_id' => $user->id, 'created_at' => now(), 'updated_at' => now(), ]; } } } $data = $request->all(); if ($request->hasFile('imagen')) { // Eliminar la foto de perfil anterior si existe if ($institucion->imagen) { Storage::delete(STR::substr($institucion->imagen, 8)); } // Guardar la nueva foto de perfil $path_file = $this->storeProfilePicture($request); if ($path_file) { $data['imagen'] = 'storage/' . $path_file; } else { $data['imagen'] = 'assets/images/instituciones_icon.webp'; } } // Actualizar los datos del usuario $institucion->update($data); return redirect()->route('instituciones.get')->with('success', 'Institución actualizada correctamente'); // Guardar teléfonos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); // Guardar redes sociales $institucion->redes()->delete(); $institucion->redes()->createMany($redes); return redirect()->route('instituciones.get', ['id' => $id])->with('success', 'Institución actualizada correctamente'); } public function destroy(string $id) { try { $instituciones = Instituciones::findOrFail($id); $instituciones->redesSocialesInst()->delete(); $instituciones->delete(); return redirect()->route('instituciones.get')->with('success', 'Institución eliminada correctamente.'); } catch(\Exception $e) { Loading
app/Models/Instituciones.php +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,11 @@ public function redesSocialesInst() return $this->hasMany(RedesSocialesInst::class, 'instituciones_id'); } public function redes() { return $this->hasMany(RedesSocialesInst::class, 'instituciones_id'); } public function telefonos() { return $this->hasMany(TelefonoInst::class, 'instituciones_id'); Loading
resources/views/adminGen/instituciones/edit.blade.php +7 −7 Original line number Diff line number Diff line Loading @@ -389,14 +389,14 @@ const newFormGroup = document.createElement('div'); newFormGroup.classList.add('grid', 'grid-cols-1', 'md:grid-cols-3', 'gap-5', 'form-group', 'relative'); newFormGroup.innerHTML = ` <div> <fieldset> <label for="red_social_inst">Nombre como se encuentra en la red social:</label> <input id="red_social_inst" name="red_social_inst[]" type="text" class="form-input" /> </div> <div> </fieldset> <fieldset> <label for="link_inst">URL del la red social o página web</label> <input id="link_inst" name="link_inst[]" type="text" class="form-input" /> </div> </fieldset> <div> <label for="tipo_RS_inst">Tipo</label> <select id="tipo_RS_inst" name="tipo_RS_inst[]" 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"> Loading
resources/views/adminGen/instituciones/show.blade.php +89 −240 File changed.Preview size limit exceeded, changes collapsed. Show changes
resources/views/components/common/sidebaradmin.blade.php +16 −5 Original line number Diff line number Diff line Loading @@ -173,10 +173,21 @@ class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-wh <li class="menu nav-item"> <a href="/instituciones" class="nav-link group"> <div class="flex items-center"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="12" cy="6" r="4" stroke="#1C274C" stroke-width="1.5"/> <path d="M15 20.6151C14.0907 20.8619 13.0736 21 12 21C8.13401 21 5 19.2091 5 17C5 14.7909 8.13401 13 12 13C15.866 13 19 14.7909 19 17C19 17.3453 18.9234 17.6804 18.7795 18" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M22 22L2 22" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 22V6C17 4.11438 17 3.17157 16.4142 2.58579C15.8284 2 14.8856 2 13 2H11C9.11438 2 8.17157 2 7.58579 2.58579C7 3.17157 7 4.11438 7 6V22" stroke="#1C274C" stroke-width="1.5"/> <path d="M12 22V19" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M10 12H14" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 11H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 14H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 11H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 14H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M5.5 8H7" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <path d="M17 8H18.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> <circle cx="12" cy="7" r="2" stroke="#1C274C" stroke-width="1.5"/> <path d="M20.25 11.5C20.25 11.9142 20.5858 12.25 21 12.25C21.4142 12.25 21.75 11.9142 21.75 11.5H20.25ZM20.1111 8.33706L19.6945 8.96066L19.6945 8.96066L20.1111 8.33706ZM20.6629 8.88886L20.0393 9.30554L20.0393 9.30554L20.6629 8.88886ZM21.75 15.5C21.75 15.0858 21.4142 14.75 21 14.75C20.5858 14.75 20.25 15.0858 20.25 15.5H21.75ZM17.5 8.75C18.2178 8.75 18.6998 8.75091 19.0672 8.78828C19.422 8.82438 19.586 8.8882 19.6945 8.96066L20.5278 7.71346C20.1318 7.44886 19.6925 7.34415 19.219 7.29598C18.758 7.24909 18.1866 7.25 17.5 7.25V8.75ZM21.75 11.5C21.75 10.8134 21.7509 10.242 21.704 9.78102C21.6559 9.30755 21.5511 8.86818 21.2865 8.47218L20.0393 9.30554C20.1118 9.41399 20.1756 9.57796 20.2117 9.93283C20.2491 10.3002 20.25 10.7822 20.25 11.5H21.75ZM19.6945 8.96066C19.831 9.05186 19.9481 9.16905 20.0393 9.30554L21.2865 8.47218C21.0859 8.17191 20.8281 7.91409 20.5278 7.71346L19.6945 8.96066ZM20.25 15.5V22H21.75V15.5H20.25Z" fill="#1C274C"/> <path d="M3.88886 8.33706L4.30554 8.96066L4.30554 8.96066L3.88886 8.33706ZM3.33706 8.88886L3.96066 9.30554L3.96066 9.30554L3.33706 8.88886ZM3.75 20C3.75 19.5858 3.41421 19.25 3 19.25C2.58579 19.25 2.25 19.5858 2.25 20H3.75ZM2.25 16C2.25 16.4142 2.58579 16.75 3 16.75C3.41421 16.75 3.75 16.4142 3.75 16H2.25ZM6.5 7.25C5.81338 7.25 5.24196 7.24909 4.78102 7.29598C4.30755 7.34415 3.86818 7.44886 3.47218 7.71346L4.30554 8.96066C4.41399 8.8882 4.57796 8.82438 4.93283 8.78828C5.30023 8.75091 5.78216 8.75 6.5 8.75V7.25ZM3.75 11.5C3.75 10.7822 3.75091 10.3002 3.78828 9.93283C3.82438 9.57796 3.8882 9.41399 3.96066 9.30554L2.71346 8.47218C2.44886 8.86818 2.34415 9.30755 2.29598 9.78102C2.24909 10.242 2.25 10.8134 2.25 11.5H3.75ZM3.47218 7.71346C3.17191 7.91409 2.91409 8.17191 2.71346 8.47218L3.96066 9.30554C4.05186 9.16905 4.16905 9.05186 4.30554 8.96066L3.47218 7.71346ZM2.25 20V22H3.75V20H2.25ZM2.25 11.5V16H3.75V11.5H2.25Z" fill="#1C274C"/> <path d="M10 15H10.5M14 15H12.5" stroke="#1C274C" stroke-width="1.5" stroke-linecap="round"/> </svg> <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">Instituciones Públicas</span> Loading