Loading app/Http/Controllers/InstitucionesController.php +50 −30 Original line number Diff line number Diff line Loading @@ -79,9 +79,9 @@ public function store(Request $request) } } public function show(Instituciones $instituciones) public function show(string $id) { // return view('adminGen.instituciones.show', compact('instituciones')); } public function edit(string $id) Loading @@ -104,23 +104,36 @@ public function update(Request $request, string $id) 'imagen' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); $instituciones = Instituciones::findOrFail($id); $instituciones->update($validatedData); $institucion = Instituciones::findOrFail($id); $fieldsToCheck = [ 'subgrupo_id', ]; $requestData = $request->all(); foreach ($fieldsToCheck as $field) { if (isset($requestData[$field]) && $requestData[$field] === "null") { unset($requestData[$field]); } } $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 foto de perfil anterior si existe if ($instituciones->imagen) { Storage::delete('public/' . $instituciones->imagen); // Eliminar la imagen de perfil anterior si existe if ($institucion->imagen) { Storage::delete('public/' . $institucion->imagen); } // Guardar la nueva foto de perfil // Guardar la nueva imagen de perfil $path_file = $this->storeProfilePicture($request); $instituciones->imagen = $path_file; $institucion->imagen = $path_file; $institucion->save(); // Guardar los cambios en la institución } // Actualizar los datos del usuario $instituciones->update($validatedData); // Manejar los teléfonos if ($request->has('prefijo')) { $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) { Loading @@ -136,21 +149,28 @@ public function update(Request $request, string $id) ]; })->toArray(); $instituciones->telefonos()->delete(); $instituciones->telefonos()->createMany($telefonos); // Eliminar los teléfonos existentes y crear los nuevos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); } // Guardar redes sociales // 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; return [ 'red_social_inst' => $request->input('red_social_inst')[$index], // Debe ser el username 'link_inst' => $url, // Debe ser la URL de la red social 'tipo_RS_inst' => $request->input('tipo_red_social')[$index], // Tipo de red social 'red_social_inst' => $red_social_inst, 'link_inst' => $url, 'tipo_RS_inst' => $tipo_RS_inst, ]; }); })->toArray(); $instituciones->redesSocialesInst()->delete(); $instituciones->redesSocialesInst()->createMany($redes->toArray()); // Eliminar las redes sociales existentes y crear las nuevas $institucion->redesSocialesInst()->delete(); $institucion->redesSocialesInst()->createMany($redes); } return redirect()->route('instituciones.get')->with('success', 'Institución actualizada correctamente'); } Loading database/migrations/2024_06_24_175056_create_telefono_insts_table.php +1 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ public function up(): void $table->integer('lada')->nullable(); $table->bigInteger('numero')->nullable(); $table->string('tipo')->nullable(); $table->boolean('estatus')->nullable(); $table->string('estatus')->nullable(); $table->integer('ext')->nullable(); $table->string('observaciones')->nullable(); $table->string('ID_radio')->nullable(); Loading resources/views/adminGen/instituciones/index.blade.php +55 −43 Original line number Diff line number Diff line <x-layout.default> <script src="/assets/js/simple-datatables.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/swiper-bundle.min.css') }}"> <script src="/assets/js/swiper-bundle.min.js"></script> <div x-data="profesion"> <div x-data="instituciones"> <ul class="flex space-x-2 rtl:space-x-reverse"> <li> <a href="{{ route('dashboard') }}" class="text-primary hover:underline">Dashboard</a> <a href="javascript:;" class="text-primary hover:underline">Dashboard</a> </li> <li class="before:content-['/'] before:mr-1 rtl:before:ml-1"> <span>Instituciones</span> </li> </ul> <br> </div> <div class="container"> <h1>Lista de Instituciones</h1> <div class="panel mt-6"> <div class="flex items-center flex-wrap mb-5"> <a href="{{ route('instituciones.create') }}" type="button" class="btn btn-success btn-sm m-1"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> Loading @@ -37,13 +36,13 @@ Crear nueva institución </a> </div> <table class="table table-bordered"> <table id="myTable" class="whitespace-nowrap table-hover"> <thead> <tr> <th>ID</th> <th>Id</th> <th>Nombre</th> <th>Domicilio</th> <th>Aniversario</th> <th>Domicilio</th> <th>Acciones</th> </tr> </thead> Loading @@ -52,10 +51,11 @@ <tr> <td>{{ $institucion->id }}</td> <td>{{ $institucion->nombre }}</td> <td>{{ $institucion->domicilio }}</td> <td>{{ $institucion->aniversario }}</td> <td>{{ $institucion->domicilio }}</td> <td> <div class="flex space-x-2"> <a href="{{ route('instituciones.show', $institucion->id) }}" class="btn btn-primary btn-sm">Ver institución</a> <a href="{{ route('instituciones.edit', $institucion->id) }}" class="btn btn-primary btn-sm">Editar</a> <form action="{{ route('instituciones.destroy', $institucion->id) }}" method="POST" class="inline-block"> @csrf Loading @@ -68,22 +68,22 @@ @endforeach </tbody> </table> </div> </div> <script src="/assets/js/simple-datatables.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/swiper-bundle.min.css') }}"> <script src="/assets/js/swiper-bundle.min.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/highlight.min.css') }}"> <script src="/assets/js/highlight.min.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <link rel="stylesheet" href="/assets/css/jquery.toast.css"> <script src="/assets/js/jquery.toast.js"></script> <script> document.addEventListener('DOMContentLoaded', () => { const datatable = new simpleDatatables.DataTable(, { const datatable = new simpleDatatables.DataTable('#myTable', { perPage: 10, perPageSelect: [10, 20, 30, 50, 100], columns: [{ select: 0, sort: 'asc' }, ], firstLast: true, firstText: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4.5 h-4.5 rtl:rotate-180"><path d="M13 19L7 12L13 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path opacity="0.5" d="M16.9998 19L10.9998 12L16.9998 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>', lastText: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4.5 h-4.5 rtl:rotate-180"><path d="M11 19L17 12L11 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path opacity="0.5" d="M6.99976 19L12.9998 12L6.99976 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>', Loading @@ -98,10 +98,23 @@ }); }); function showToast(message, heading, icon) { $.toast({ heading: heading, text: message, showHideTransition: 'slide', icon: icon, position: 'top-right', loader: false, hideAfter: 10000, allowToastClose: true, textColor: '#676767', }); } document.addEventListener('DOMContentLoaded', function() { @if(session('success')) // Muestra el mensaje de éxito utilizando showMessage showToast("{{ session('success') }}", 'Exito.', 'success') showToast("{{ session('success') }}", 'Exito.', 'success'); @endif @if($errors->any()) Loading @@ -112,5 +125,4 @@ }); </script> </x-layout.default> resources/views/adminGen/instituciones/show.blade.php 0 → 100644 +586 −0 File added.Preview size limit exceeded, changes collapsed. Show changes routes/web.php +26 −8 Original line number Diff line number Diff line Loading @@ -78,11 +78,29 @@ Route::delete('/administracion/usuarios/{id}', [UserController::class, 'destroy'])->name('destroy'); }); Route::middleware('auth:sanctum', config('jetstream.auth_session'), 'verified', CheckBanned::class)->name('instituciones.')->group(function() { Route::get('/instituciones', [InstitucionesController::class, 'index'])->name('get')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/crear', [InstitucionesController::class, 'create'])->name('create')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::post('/instituciones/crear', [InstitucionesController::class, 'store'])->name('store')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/{id}/editar', [InstitucionesController::class, 'edit'])->name('edit')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::put('/instituciones/{id}/editar', [InstitucionesController::class, 'update'])->name('update')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::delete('/instituciones/{id}', [InstitucionesController::class, 'destroy'])->name('destroy')->middleware(CheckRoles::class . ':admingen,admin'); Route::middleware('auth:sanctum', config('jetstream.auth_session'), 'verified', CheckBanned::class) ->name('instituciones.') ->group(function() { Route::get('/instituciones', [InstitucionesController::class, 'index']) ->name('get') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/crear', [InstitucionesController::class, 'create']) ->name('create') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::post('/instituciones/crear', [InstitucionesController::class, 'store']) ->name('store') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/{id}/editar', [InstitucionesController::class, 'edit']) ->name('edit') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::put('/instituciones/{id}/editar', [InstitucionesController::class, 'update']) ->name('update') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::delete('/instituciones/{id}', [InstitucionesController::class, 'destroy']) ->name('destroy') ->middleware(CheckRoles::class . ':admingen,admin'); Route::get('/instituciones/{id}', [InstitucionesController::class, 'show']) ->name('show') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); }); Loading
app/Http/Controllers/InstitucionesController.php +50 −30 Original line number Diff line number Diff line Loading @@ -79,9 +79,9 @@ public function store(Request $request) } } public function show(Instituciones $instituciones) public function show(string $id) { // return view('adminGen.instituciones.show', compact('instituciones')); } public function edit(string $id) Loading @@ -104,23 +104,36 @@ public function update(Request $request, string $id) 'imagen' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); $instituciones = Instituciones::findOrFail($id); $instituciones->update($validatedData); $institucion = Instituciones::findOrFail($id); $fieldsToCheck = [ 'subgrupo_id', ]; $requestData = $request->all(); foreach ($fieldsToCheck as $field) { if (isset($requestData[$field]) && $requestData[$field] === "null") { unset($requestData[$field]); } } $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 foto de perfil anterior si existe if ($instituciones->imagen) { Storage::delete('public/' . $instituciones->imagen); // Eliminar la imagen de perfil anterior si existe if ($institucion->imagen) { Storage::delete('public/' . $institucion->imagen); } // Guardar la nueva foto de perfil // Guardar la nueva imagen de perfil $path_file = $this->storeProfilePicture($request); $instituciones->imagen = $path_file; $institucion->imagen = $path_file; $institucion->save(); // Guardar los cambios en la institución } // Actualizar los datos del usuario $instituciones->update($validatedData); // Manejar los teléfonos if ($request->has('prefijo')) { $telefonos = collect($request->input('prefijo'))->map(function($prefijo, $index) use ($request) { Loading @@ -136,21 +149,28 @@ public function update(Request $request, string $id) ]; })->toArray(); $instituciones->telefonos()->delete(); $instituciones->telefonos()->createMany($telefonos); // Eliminar los teléfonos existentes y crear los nuevos $institucion->telefonos()->delete(); $institucion->telefonos()->createMany($telefonos); } // Guardar redes sociales // 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; return [ 'red_social_inst' => $request->input('red_social_inst')[$index], // Debe ser el username 'link_inst' => $url, // Debe ser la URL de la red social 'tipo_RS_inst' => $request->input('tipo_red_social')[$index], // Tipo de red social 'red_social_inst' => $red_social_inst, 'link_inst' => $url, 'tipo_RS_inst' => $tipo_RS_inst, ]; }); })->toArray(); $instituciones->redesSocialesInst()->delete(); $instituciones->redesSocialesInst()->createMany($redes->toArray()); // Eliminar las redes sociales existentes y crear las nuevas $institucion->redesSocialesInst()->delete(); $institucion->redesSocialesInst()->createMany($redes); } return redirect()->route('instituciones.get')->with('success', 'Institución actualizada correctamente'); } Loading
database/migrations/2024_06_24_175056_create_telefono_insts_table.php +1 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ public function up(): void $table->integer('lada')->nullable(); $table->bigInteger('numero')->nullable(); $table->string('tipo')->nullable(); $table->boolean('estatus')->nullable(); $table->string('estatus')->nullable(); $table->integer('ext')->nullable(); $table->string('observaciones')->nullable(); $table->string('ID_radio')->nullable(); Loading
resources/views/adminGen/instituciones/index.blade.php +55 −43 Original line number Diff line number Diff line <x-layout.default> <script src="/assets/js/simple-datatables.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/swiper-bundle.min.css') }}"> <script src="/assets/js/swiper-bundle.min.js"></script> <div x-data="profesion"> <div x-data="instituciones"> <ul class="flex space-x-2 rtl:space-x-reverse"> <li> <a href="{{ route('dashboard') }}" class="text-primary hover:underline">Dashboard</a> <a href="javascript:;" class="text-primary hover:underline">Dashboard</a> </li> <li class="before:content-['/'] before:mr-1 rtl:before:ml-1"> <span>Instituciones</span> </li> </ul> <br> </div> <div class="container"> <h1>Lista de Instituciones</h1> <div class="panel mt-6"> <div class="flex items-center flex-wrap mb-5"> <a href="{{ route('instituciones.create') }}" type="button" class="btn btn-success btn-sm m-1"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> Loading @@ -37,13 +36,13 @@ Crear nueva institución </a> </div> <table class="table table-bordered"> <table id="myTable" class="whitespace-nowrap table-hover"> <thead> <tr> <th>ID</th> <th>Id</th> <th>Nombre</th> <th>Domicilio</th> <th>Aniversario</th> <th>Domicilio</th> <th>Acciones</th> </tr> </thead> Loading @@ -52,10 +51,11 @@ <tr> <td>{{ $institucion->id }}</td> <td>{{ $institucion->nombre }}</td> <td>{{ $institucion->domicilio }}</td> <td>{{ $institucion->aniversario }}</td> <td>{{ $institucion->domicilio }}</td> <td> <div class="flex space-x-2"> <a href="{{ route('instituciones.show', $institucion->id) }}" class="btn btn-primary btn-sm">Ver institución</a> <a href="{{ route('instituciones.edit', $institucion->id) }}" class="btn btn-primary btn-sm">Editar</a> <form action="{{ route('instituciones.destroy', $institucion->id) }}" method="POST" class="inline-block"> @csrf Loading @@ -68,22 +68,22 @@ @endforeach </tbody> </table> </div> </div> <script src="/assets/js/simple-datatables.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/swiper-bundle.min.css') }}"> <script src="/assets/js/swiper-bundle.min.js"></script> <link rel="stylesheet" href="{{ Vite::asset('resources/css/highlight.min.css') }}"> <script src="/assets/js/highlight.min.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <link rel="stylesheet" href="/assets/css/jquery.toast.css"> <script src="/assets/js/jquery.toast.js"></script> <script> document.addEventListener('DOMContentLoaded', () => { const datatable = new simpleDatatables.DataTable(, { const datatable = new simpleDatatables.DataTable('#myTable', { perPage: 10, perPageSelect: [10, 20, 30, 50, 100], columns: [{ select: 0, sort: 'asc' }, ], firstLast: true, firstText: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4.5 h-4.5 rtl:rotate-180"><path d="M13 19L7 12L13 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path opacity="0.5" d="M16.9998 19L10.9998 12L16.9998 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>', lastText: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4.5 h-4.5 rtl:rotate-180"><path d="M11 19L17 12L11 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path opacity="0.5" d="M6.99976 19L12.9998 12L6.99976 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>', Loading @@ -98,10 +98,23 @@ }); }); function showToast(message, heading, icon) { $.toast({ heading: heading, text: message, showHideTransition: 'slide', icon: icon, position: 'top-right', loader: false, hideAfter: 10000, allowToastClose: true, textColor: '#676767', }); } document.addEventListener('DOMContentLoaded', function() { @if(session('success')) // Muestra el mensaje de éxito utilizando showMessage showToast("{{ session('success') }}", 'Exito.', 'success') showToast("{{ session('success') }}", 'Exito.', 'success'); @endif @if($errors->any()) Loading @@ -112,5 +125,4 @@ }); </script> </x-layout.default>
resources/views/adminGen/instituciones/show.blade.php 0 → 100644 +586 −0 File added.Preview size limit exceeded, changes collapsed. Show changes
routes/web.php +26 −8 Original line number Diff line number Diff line Loading @@ -78,11 +78,29 @@ Route::delete('/administracion/usuarios/{id}', [UserController::class, 'destroy'])->name('destroy'); }); Route::middleware('auth:sanctum', config('jetstream.auth_session'), 'verified', CheckBanned::class)->name('instituciones.')->group(function() { Route::get('/instituciones', [InstitucionesController::class, 'index'])->name('get')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/crear', [InstitucionesController::class, 'create'])->name('create')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::post('/instituciones/crear', [InstitucionesController::class, 'store'])->name('store')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/{id}/editar', [InstitucionesController::class, 'edit'])->name('edit')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::put('/instituciones/{id}/editar', [InstitucionesController::class, 'update'])->name('update')->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::delete('/instituciones/{id}', [InstitucionesController::class, 'destroy'])->name('destroy')->middleware(CheckRoles::class . ':admingen,admin'); Route::middleware('auth:sanctum', config('jetstream.auth_session'), 'verified', CheckBanned::class) ->name('instituciones.') ->group(function() { Route::get('/instituciones', [InstitucionesController::class, 'index']) ->name('get') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/crear', [InstitucionesController::class, 'create']) ->name('create') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::post('/instituciones/crear', [InstitucionesController::class, 'store']) ->name('store') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::get('/instituciones/{id}/editar', [InstitucionesController::class, 'edit']) ->name('edit') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::put('/instituciones/{id}/editar', [InstitucionesController::class, 'update']) ->name('update') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); Route::delete('/instituciones/{id}', [InstitucionesController::class, 'destroy']) ->name('destroy') ->middleware(CheckRoles::class . ':admingen,admin'); Route::get('/instituciones/{id}', [InstitucionesController::class, 'show']) ->name('show') ->middleware(CheckRoles::class . ':admingen,admin,capturista'); });