From fadf62f5843afff2add2654ea9f9a938dadb8245 Mon Sep 17 00:00:00 2001 From: Rubi Date: Fri, 9 May 2025 10:51:37 -0600 Subject: [PATCH 1/7] Revert "validaciones" This reverts commit 8e4e719aa80f28c7fc41674ccf630d227a16ff05. --- .../Controllers/TiposLicenciasController.php | 23 ------------------- .../views/tiposLicenciaCrearEditar.blade.php | 14 +++++++---- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/app/Http/Controllers/TiposLicenciasController.php b/app/Http/Controllers/TiposLicenciasController.php index a117ab5..8a14ce6 100644 --- a/app/Http/Controllers/TiposLicenciasController.php +++ b/app/Http/Controllers/TiposLicenciasController.php @@ -59,17 +59,6 @@ class TiposLicenciasController extends Controller */ public function store(Request $request) { - // Verificar si ya existe un tipo de licencia con el mismo nombre - $existe = tiposLicencias::where('tipoLicencia', $request->tipoLicencia) - ->where('eliminado', 1) - ->exists(); - - if ($existe) { - return redirect()->route('tiposLicencias.create') - ->with('error', 'Ya existe un tipo de licencia con el nombre "' . $request->tipoLicencia . '". Por favor, ingrese un nombre diferente.') - ->withInput(); - } - $tipoLicencia = new TiposLicencias(); $tipoLicencia->tipoLicencia = $request->tipoLicencia; $tipoLicencia->eliminado = 1; @@ -92,18 +81,6 @@ class TiposLicenciasController extends Controller */ public function update(Request $request, $id) { - // Verificar si ya existe otro tipo de licencia con el mismo nombre - $existe = tiposLicencias::where('tipoLicencia', $request->tipoLicencia) - ->where('id', '!=', $id) - ->where('eliminado', 1) - ->exists(); - - if ($existe) { - return redirect()->route('tiposLicencias.edit', $id) - ->with('error', 'Ya existe un tipo de licencia con el nombre "' . $request->tipoLicencia . '". Por favor, ingrese un nombre diferente.') - ->withInput(); - } - $tipoLicencia = TiposLicencias::findOrFail($id); $tipoLicencia->tipoLicencia = $request->tipoLicencia; if ($request->has('eliminado')) { diff --git a/resources/views/tiposLicenciaCrearEditar.blade.php b/resources/views/tiposLicenciaCrearEditar.blade.php index 2b44c00..140a90e 100644 --- a/resources/views/tiposLicenciaCrearEditar.blade.php +++ b/resources/views/tiposLicenciaCrearEditar.blade.php @@ -17,12 +17,16 @@ - @if(session('error')) -
+ @if($errors->any()) +
- -
- {{ session('error') }} + +
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
From d6a0dc019c36534a2a1b988f1ac3ba66ddfe7c11 Mon Sep 17 00:00:00 2001 From: Rubi Date: Fri, 9 May 2025 11:10:52 -0600 Subject: [PATCH 2/7] hhhh iiii --- routes/web.php | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/web.php b/routes/web.php index dbffc48..77b262f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,6 +10,7 @@ use App\Http\Controllers\TiposLicenciasController; use App\Http\Controllers\CapacidadController; use App\Http\Controllers\PrestamoController; use App\Http\Controllers\DespartamentoController; +use App\Http\Controllers\ReportesController; /* From 7d35710331c55251387da67f2f133c945f1ed721 Mon Sep 17 00:00:00 2001 From: TheSilva7 Date: Fri, 9 May 2025 11:15:15 -0600 Subject: [PATCH 3/7] Vista de Profesor restringi el acceso de las funciones de administrador para aceptar prestamos y que solo se pueda hacer un nuevo prestamo y ya --- .../SolicitudVehiculoController.php | 49 ++++++++++++ app/Http/Kernel.php | 3 + app/Http/Middleware/CheckAdminRole.php | 19 +++++ app/Http/Middleware/CheckProfesorRole.php | 19 +++++ app/Models/SolicitudVehiculo.php | 26 +++++++ app/Models/User.php | 1 + .../2014_10_12_000000_create_users_table.php | 5 +- ...00000_create_solicitud_vehiculos_table.php | 28 +++++++ ...8_175205_add_estado_to_prestamos_table.php | 28 ------- database/seeders/DatabaseSeeder.php | 4 + database/seeders/ProfesorSeeder.php | 22 ++++++ .../profesor/solicitudes/create.blade.php | 78 +++++++++++++++++++ .../profesor/solicitudes/index.blade.php | 51 ++++++++++++ routes/web.php | 34 +++++--- 14 files changed, 326 insertions(+), 41 deletions(-) create mode 100644 app/Http/Controllers/SolicitudVehiculoController.php create mode 100644 app/Http/Middleware/CheckAdminRole.php create mode 100644 app/Http/Middleware/CheckProfesorRole.php create mode 100644 app/Models/SolicitudVehiculo.php create mode 100644 database/migrations/2024_03_27_000000_create_solicitud_vehiculos_table.php delete mode 100644 database/migrations/2025_05_08_175205_add_estado_to_prestamos_table.php create mode 100644 database/seeders/ProfesorSeeder.php create mode 100644 resources/views/profesor/solicitudes/create.blade.php create mode 100644 resources/views/profesor/solicitudes/index.blade.php diff --git a/app/Http/Controllers/SolicitudVehiculoController.php b/app/Http/Controllers/SolicitudVehiculoController.php new file mode 100644 index 0000000..0e0111b --- /dev/null +++ b/app/Http/Controllers/SolicitudVehiculoController.php @@ -0,0 +1,49 @@ +middleware(['auth', 'profesor']); + } + + public function index() + { + $solicitudes = SolicitudVehiculo::where('user_id', auth()->id())->get(); + return view('profesor.solicitudes.index', compact('solicitudes')); + } + + public function create() + { + return view('profesor.solicitudes.create'); + } + + public function store(Request $request) + { + $request->validate([ + 'fecha_solicitud' => 'required|date', + 'hora_salida' => 'required', + 'hora_regreso' => 'required', + 'destino' => 'required|string', + 'motivo' => 'required|string', + ]); + + $solicitud = new SolicitudVehiculo(); + $solicitud->user_id = auth()->id(); + $solicitud->fecha_solicitud = $request->fecha_solicitud; + $solicitud->hora_salida = $request->hora_salida; + $solicitud->hora_regreso = $request->hora_regreso; + $solicitud->destino = $request->destino; + $solicitud->motivo = $request->motivo; + $solicitud->estado = 'pendiente'; + $solicitud->save(); + + return redirect()->route('profesor.solicitudes.index') + ->with('success', 'Solicitud creada exitosamente'); + } +} \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c34cdcf..993626b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -60,8 +60,11 @@ class Kernel extends HttpKernel 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'profesor' => \App\Http\Middleware\CheckProfesorRole::class, + 'admin' => \App\Http\Middleware\CheckAdminRole::class, ]; } diff --git a/app/Http/Middleware/CheckAdminRole.php b/app/Http/Middleware/CheckAdminRole.php new file mode 100644 index 0000000..a5911b8 --- /dev/null +++ b/app/Http/Middleware/CheckAdminRole.php @@ -0,0 +1,19 @@ +check() || auth()->user()->rol !== 'admin') { + return redirect('/')->with('error', 'No tienes permisos de administrador para acceder a esta sección.'); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/CheckProfesorRole.php b/app/Http/Middleware/CheckProfesorRole.php new file mode 100644 index 0000000..27bb597 --- /dev/null +++ b/app/Http/Middleware/CheckProfesorRole.php @@ -0,0 +1,19 @@ +check() || auth()->user()->rol !== 'profesor') { + return redirect('/')->with('error', 'No tienes permiso para acceder a esta sección.'); + } + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Models/SolicitudVehiculo.php b/app/Models/SolicitudVehiculo.php new file mode 100644 index 0000000..8192bfd --- /dev/null +++ b/app/Models/SolicitudVehiculo.php @@ -0,0 +1,26 @@ +belongsTo(User::class); + } +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 57af47e..de57470 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -27,6 +27,7 @@ class User extends Authenticatable 'departamento_id', 'telefono', 'password', + 'rol', ]; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 8d71422..ec9f421 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -3,6 +3,7 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; +use Illuminate\Support\Facades\DB; return new class extends Migration { @@ -23,6 +24,7 @@ return new class extends Migration $table->string('telefono')->nullable(); $table->string('password'); + $table->string('rol')->default('profesor'); $table->rememberToken(); $table->timestamps(); $table->foreign('puesto_id')->references('id')->on('puestos'); @@ -33,7 +35,8 @@ return new class extends Migration DB::table('users')->insert([ 'name'=> 'Administrador', 'email'=> 'admin@admin.com', - 'password'=> bcrypt('12345678') + 'password'=> bcrypt('12345678'), + 'rol' => 'admin' ]); } diff --git a/database/migrations/2024_03_27_000000_create_solicitud_vehiculos_table.php b/database/migrations/2024_03_27_000000_create_solicitud_vehiculos_table.php new file mode 100644 index 0000000..dd48ec7 --- /dev/null +++ b/database/migrations/2024_03_27_000000_create_solicitud_vehiculos_table.php @@ -0,0 +1,28 @@ +id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->date('fecha_solicitud'); + $table->time('hora_salida'); + $table->time('hora_regreso'); + $table->string('destino'); + $table->text('motivo'); + $table->enum('estado', ['pendiente', 'aprobada', 'rechazada'])->default('pendiente'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('solicitud_vehiculos'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_05_08_175205_add_estado_to_prestamos_table.php b/database/migrations/2025_05_08_175205_add_estado_to_prestamos_table.php deleted file mode 100644 index c47e8b3..0000000 --- a/database/migrations/2025_05_08_175205_add_estado_to_prestamos_table.php +++ /dev/null @@ -1,28 +0,0 @@ -enum('estado', ['pendiente', 'aceptado', 'rechazado'])->default('pendiente')->after('chofer'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('prestamos', function (Blueprint $table) { - $table->dropColumn('estado'); - }); - } -}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9f4519..764c0ff 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -18,5 +18,9 @@ class DatabaseSeeder extends Seeder // 'name' => 'Test User', // 'email' => 'test@example.com', // ]); + + $this->call([ + ProfesorSeeder::class, + ]); } } diff --git a/database/seeders/ProfesorSeeder.php b/database/seeders/ProfesorSeeder.php new file mode 100644 index 0000000..e178ed1 --- /dev/null +++ b/database/seeders/ProfesorSeeder.php @@ -0,0 +1,22 @@ + 'Profesor', + 'email' => 'profesor@profesor.com', + 'password' => Hash::make('12345678'), + 'rol' => 'profesor', + 'apellido' => 'Ejemplo', + 'telefono' => '1234567890', + ]); + } +} \ No newline at end of file diff --git a/resources/views/profesor/solicitudes/create.blade.php b/resources/views/profesor/solicitudes/create.blade.php new file mode 100644 index 0000000..f3f10e7 --- /dev/null +++ b/resources/views/profesor/solicitudes/create.blade.php @@ -0,0 +1,78 @@ +@extends('layouts.dashboard') + +@section('content') +
+
+
+
+

Nueva Solicitud de Vehículo

+ + @if($errors->any()) +
+
+
+
    + @foreach($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+
+
+ @endif + +
+ @csrf +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + Cancelar + + +
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/profesor/solicitudes/index.blade.php b/resources/views/profesor/solicitudes/index.blade.php new file mode 100644 index 0000000..deb28ce --- /dev/null +++ b/resources/views/profesor/solicitudes/index.blade.php @@ -0,0 +1,51 @@ +@extends('layouts.dashboard') + +@section('content') +
+
+

Mis Solicitudes de Vehículo

+ + Nueva Solicitud + +
+ + @if(session('success')) + + @endif + +
+ + + + + + + + + + + + @foreach($solicitudes as $solicitud) + + + + + + + + @endforeach + +
FechaHora SalidaHora RegresoDestinoEstado
{{ $solicitud->fecha_solicitud }}{{ $solicitud->hora_salida }}{{ $solicitud->hora_regreso }}{{ $solicitud->destino }} + + {{ ucfirst($solicitud->estado) }} + +
+
+
+@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index dbffc48..e7b1b7b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -10,6 +10,7 @@ use App\Http\Controllers\TiposLicenciasController; use App\Http\Controllers\CapacidadController; use App\Http\Controllers\PrestamoController; use App\Http\Controllers\DespartamentoController; +use App\Http\Controllers\SolicitudVehiculoController; /* @@ -55,18 +56,20 @@ use App\Http\Controllers\DespartamentoController; Route::get('/despartamento/export/excel', [DespartamentoController::class, 'exportExcel'])->name('despartamentos.excel'); Route::get('/despartamento/export/pdf', [DespartamentoController::class, 'exportPDF'])->name('despartamentos.pdf'); - // Primero las rutas de exportación (más específicas) - Route::get('/prestamos/excel', [PrestamoController::class, 'exportExcel'])->name('prestamos.excel'); - Route::get('/prestamos/pdf', [PrestamoController::class, 'exportPDF'])->name('prestamos.pdf'); - Route::get('/prestamos/export/{format}', [PrestamoController::class, 'export'])->name('prestamos.export'); - Route::get('/prestamos/aceptados', [PrestamoController::class, 'aceptados'])->name('prestamos.aceptados'); - Route::post('/prestamos/{id}/aceptar', [PrestamoController::class, 'aceptar'])->name('prestamos.aceptar'); - Route::post('/prestamos/{id}/rechazar', [PrestamoController::class, 'rechazar'])->name('prestamos.rechazar'); - Route::get('/prestamos/historial', [PrestamoController::class, 'historial'])->name('prestamos.historial'); - Route::get('/prestamos/pendientes', [PrestamoController::class, 'pendientes'])->name('prestamos.pendientes'); - Route::get('/prestamos/rechazados', [PrestamoController::class, 'rechazados'])->name('prestamos.rechazados'); - - // Después la ruta de recurso (más general) + // Rutas de préstamos protegidas para administradores + Route::middleware(['auth', 'admin'])->group(function () { + Route::get('/prestamos/aceptados', [PrestamoController::class, 'aceptados'])->name('prestamos.aceptados'); + Route::post('/prestamos/{id}/aceptar', [PrestamoController::class, 'aceptar'])->name('prestamos.aceptar'); + Route::post('/prestamos/{id}/rechazar', [PrestamoController::class, 'rechazar'])->name('prestamos.rechazar'); + Route::get('/prestamos/historial', [PrestamoController::class, 'historial'])->name('prestamos.historial'); + Route::get('/prestamos/pendientes', [PrestamoController::class, 'pendientes'])->name('prestamos.pendientes'); + Route::get('/prestamos/rechazados', [PrestamoController::class, 'rechazados'])->name('prestamos.rechazados'); + Route::get('/prestamos/excel', [PrestamoController::class, 'exportExcel'])->name('prestamos.excel'); + Route::get('/prestamos/pdf', [PrestamoController::class, 'exportPDF'])->name('prestamos.pdf'); + Route::get('/prestamos/export/{format}', [PrestamoController::class, 'export'])->name('prestamos.export'); + }); + + // Ruta general de préstamos (accesible para todos los usuarios autenticados) Route::resource('prestamos', PrestamoController::class); Route::get('/docentes/export/{format}', [DocentesController::class, 'export'])->name('docentes.export'); @@ -94,3 +97,10 @@ use App\Http\Controllers\DespartamentoController; ////corerecion rubi }); + +// Rutas para profesores +Route::middleware(['auth', 'profesor'])->prefix('profesor')->name('profesor.')->group(function () { + Route::get('/solicitudes', [SolicitudVehiculoController::class, 'index'])->name('solicitudes.index'); + Route::get('/solicitudes/create', [SolicitudVehiculoController::class, 'create'])->name('solicitudes.create'); + Route::post('/solicitudes', [SolicitudVehiculoController::class, 'store'])->name('solicitudes.store'); +}); From 886ed8fb87c81f6eec941410623bf86eaafe3dff Mon Sep 17 00:00:00 2001 From: Rubi Date: Mon, 12 May 2025 20:06:36 -0600 Subject: [PATCH 4/7] usuarios aqui implemnete mi dasbord de usuarios, el cual puede agregar fotos y visualizarlas en la misma tabla, ahi esta la tabla y puede hacer las fotos mas grandes para que pueda verlas, hace un reporte y agrega fechas --- app/Http/Controllers/Auth/LoginController.php | 7 + .../Controllers/UserDashboardController.php | 23 ++ .../2024_03_19_create_user_dashboard_user.php | 31 +++ public/css/user-dashboard.css | 85 ++++++++ resources/views/layouts/app.blade.php | 7 +- .../user-dashboard/cuestionario.blade.php | 198 ++++++++++++++++++ .../views/user-dashboard/index.blade.php | 29 +++ routes/web.php | 8 + 8 files changed, 385 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/UserDashboardController.php create mode 100644 database/migrations/2024_03_19_create_user_dashboard_user.php create mode 100644 public/css/user-dashboard.css create mode 100644 resources/views/user-dashboard/cuestionario.blade.php create mode 100644 resources/views/user-dashboard/index.blade.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index fc8a88c..c96f45f 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -37,4 +37,11 @@ class LoginController extends Controller $this->middleware('guest')->except('logout'); $this->middleware('auth')->only('logout'); } + + protected function authenticated($request, $user) + { + if ($user->email === 'usuarios@usuariosgmail.com') { + return redirect('/user-dashboard'); + } + } } diff --git a/app/Http/Controllers/UserDashboardController.php b/app/Http/Controllers/UserDashboardController.php new file mode 100644 index 0000000..e3a307e --- /dev/null +++ b/app/Http/Controllers/UserDashboardController.php @@ -0,0 +1,23 @@ +middleware('auth'); + } + + public function index() + { + // Verificar si el usuario tiene el correo específico + if (auth()->user()->email !== 'usuarios@usuariosgmail.com') { + return redirect('/')->with('error', 'No tienes permiso para acceder a esta sección'); + } + + return view('user-dashboard.index'); + } +} diff --git a/database/migrations/2024_03_19_create_user_dashboard_user.php b/database/migrations/2024_03_19_create_user_dashboard_user.php new file mode 100644 index 0000000..96358b7 --- /dev/null +++ b/database/migrations/2024_03_19_create_user_dashboard_user.php @@ -0,0 +1,31 @@ +where('email', 'usuarios@usuariosgmail.com')->first(); + + if (!$user) { + DB::table('users')->insert([ + 'name' => 'Usuario Dashboard', + 'email' => 'usuarios@usuariosgmail.com', + 'password' => Hash::make('usuario123'), + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } + + public function down() + { + DB::table('users')->where('email', 'usuarios@usuariosgmail.com')->delete(); + } +}; diff --git a/public/css/user-dashboard.css b/public/css/user-dashboard.css new file mode 100644 index 0000000..7dbb1fa --- /dev/null +++ b/public/css/user-dashboard.css @@ -0,0 +1,85 @@ +body.user-dashboard-bg { + background: linear-gradient(120deg, #4158D0 0%, #5068c8 46%, #70e7ff 100%); + min-height: 100vh; +} + +.user-dashboard-header { + font-size: 2.2rem; + font-weight: 900; + color: #fff; + letter-spacing: 1px; + margin-top: 32px; + margin-left: 60px; + margin-bottom: 30px; + text-shadow: 0 2px 8px rgba(65,88,208,0.15); + text-align: left; +} + +.user-dashboard-card { + background: #fff; + border-radius: 24px; + box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15); + padding: 48px 32px; + max-width: 480px; + margin: 60px auto; + text-align: center; +} + +.user-dashboard-title { + font-size: 2.5rem; + font-weight: 800; + color: #2d3748; + margin-bottom: 18px; +} + +.user-dashboard-desc { + color: #6b7280; + font-size: 1.2rem; + margin-bottom: 32px; +} + +.user-dashboard-btn { + background: #4158D0; + color: #fff; + border: none; + border-radius: 8px; + padding: 14px 36px; + font-size: 1.1rem; + font-weight: 600; + box-shadow: 0 2px 8px rgba(65,88,208,0.15); + transition: background 0.2s; + cursor: pointer; +} +.user-dashboard-btn:hover { + background: #C850C0; + color: #fff; +} + +.user-dashboard-logout { + position: absolute; + top: 32px; + right: 60px; + z-index: 10; +} +.user-dashboard-logout-btn { + background: #e53e3e; + color: #fff; + border: none; + border-radius: 8px; + padding: 10px 22px; + font-size: 1rem; + font-weight: 600; + display: flex; + align-items: center; + gap: 8px; + box-shadow: 0 2px 8px rgba(229,62,62,0.15); + transition: background 0.2s; + cursor: pointer; +} +.user-dashboard-logout-btn:hover { + background: #c53030; + color: #fff; +} +.user-dashboard-logout-btn i { + font-size: 1.2rem; +} diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index a33b73f..173b932 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -14,12 +14,13 @@ - - + +
+ @if (!request()->is('user-dashboard') && !request()->is('user-dashboard/cuestionario'))
- + @endif
@yield('content')
diff --git a/resources/views/user-dashboard/cuestionario.blade.php b/resources/views/user-dashboard/cuestionario.blade.php new file mode 100644 index 0000000..4530f04 --- /dev/null +++ b/resources/views/user-dashboard/cuestionario.blade.php @@ -0,0 +1,198 @@ +@extends('layouts.app') + +@section('title', 'Reporte de Usuario - PrestamosTecmm') + + +@section('content') + + + + + + + +
+
+ @csrf + +
+
+
PrestamosTecmm
+
+
+

Reporte de Usuario

+
+
+

+ +
+
+

+ +
+
+

+ +
+
+

+ +
+
+

+ +
+
+

+ +
+ +
+
+
+ + + + + + + + + + + + + + +
Gasolina (salida)VehículoGasolina (regreso)Fecha salidaFecha regresoMotivo
+
+
+ + +@endsection diff --git a/resources/views/user-dashboard/index.blade.php b/resources/views/user-dashboard/index.blade.php new file mode 100644 index 0000000..d4984ea --- /dev/null +++ b/resources/views/user-dashboard/index.blade.php @@ -0,0 +1,29 @@ +@extends('layouts.app') + +@section('title', 'Dashboard - PrestamosTecmm') + + +@section('content') + + + + + + + +
+
+ @csrf + +
+
+
PrestamosTecmm
+
+ +@endsection diff --git a/routes/web.php b/routes/web.php index e7b1b7b..7aa3297 100644 --- a/routes/web.php +++ b/routes/web.php @@ -104,3 +104,11 @@ Route::middleware(['auth', 'profesor'])->prefix('profesor')->name('profesor.')-> Route::get('/solicitudes/create', [SolicitudVehiculoController::class, 'create'])->name('solicitudes.create'); Route::post('/solicitudes', [SolicitudVehiculoController::class, 'store'])->name('solicitudes.store'); }); + +// Ruta para el dashboard de usuarios +Route::get('/user-dashboard', [App\Http\Controllers\UserDashboardController::class, 'index'])->name('user.dashboard'); + +// Ruta para el cuestionario del dashboard de usuario +Route::get('/user-dashboard/cuestionario', function () { + return view('user-dashboard.cuestionario'); +})->middleware('auth'); From 0c56ac8291343e69221ca14eeb43999dffcc7c84 Mon Sep 17 00:00:00 2001 From: Rubi Date: Mon, 12 May 2025 21:52:59 -0600 Subject: [PATCH 5/7] =?UTF-8?q?A=C3=B1adi=20las=20acciones=20completas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit edita, elimina, agrega fotos, lo guarda en una tabla, genera el reporte en pdf con sus respectivas imagenes, ya quedo perron jsjsjs --- .../user-dashboard/cuestionario.blade.php | 219 +++++++++++++++++- .../views/user-dashboard/index.blade.php | 2 + 2 files changed, 209 insertions(+), 12 deletions(-) diff --git a/resources/views/user-dashboard/cuestionario.blade.php b/resources/views/user-dashboard/cuestionario.blade.php index 4530f04..2afcdea 100644 --- a/resources/views/user-dashboard/cuestionario.blade.php +++ b/resources/views/user-dashboard/cuestionario.blade.php @@ -1,7 +1,9 @@ @extends('layouts.app') @section('title', 'Reporte de Usuario - PrestamosTecmm') +@push('head') +@endpush @section('content') @@ -100,6 +102,7 @@ Fecha salida Fecha regreso Motivo + Acciones @@ -108,7 +111,24 @@
+ + + @endsection diff --git a/resources/views/user-dashboard/index.blade.php b/resources/views/user-dashboard/index.blade.php index d4984ea..76e1fd5 100644 --- a/resources/views/user-dashboard/index.blade.php +++ b/resources/views/user-dashboard/index.blade.php @@ -1,7 +1,9 @@ @extends('layouts.app') @section('title', 'Dashboard - PrestamosTecmm') +@push('head') +@endpush @section('content') From 1ef5077c78b921c0f2ac22ceb7398df2d8ba2485 Mon Sep 17 00:00:00 2001 From: TheSilva7 Date: Tue, 20 May 2025 22:41:28 -0600 Subject: [PATCH 6/7] Rol de Servicios Usando el correo de jorge se accede al dashboard de administrador pero con ciertas limitaciones para que solo se pueda usar las funciones que son exclusivas de servicios --- app/Http/Controllers/usuariosController.php | 6 ++++++ app/Http/Kernel.php | 1 + app/Http/Middleware/CheckServiciosRole.php | 19 ++++++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/ServiciosSeeder.php | 24 +++++++++++++++++++++ resources/views/layouts/dashboard.blade.php | 2 +- routes/web.php | 3 +++ 7 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 app/Http/Middleware/CheckServiciosRole.php create mode 100644 database/seeders/ServiciosSeeder.php diff --git a/app/Http/Controllers/usuariosController.php b/app/Http/Controllers/usuariosController.php index c521450..78b64b7 100644 --- a/app/Http/Controllers/usuariosController.php +++ b/app/Http/Controllers/usuariosController.php @@ -80,6 +80,12 @@ class usuariosController extends Controller $usuario->departamento_id = $request->departamento_id; $usuario->telefono = $request->telefono; $usuario->password = bcrypt($request->password); + // Asignar rol si viene en la petición y el usuario autenticado es admin o servicios + if (auth()->user()->rol === 'admin' && $request->has('rol')) { + $usuario->rol = $request->rol; + } elseif (auth()->user()->rol === 'servicios') { + $usuario->rol = 'usuario'; // Solo puede crear usuarios normales + } $usuario->save(); return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.'); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 993626b..81a033f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -66,5 +66,6 @@ class Kernel extends HttpKernel 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'profesor' => \App\Http\Middleware\CheckProfesorRole::class, 'admin' => \App\Http\Middleware\CheckAdminRole::class, + 'servicios' => \App\Http\Middleware\CheckServiciosRole::class, ]; } diff --git a/app/Http/Middleware/CheckServiciosRole.php b/app/Http/Middleware/CheckServiciosRole.php new file mode 100644 index 0000000..87757aa --- /dev/null +++ b/app/Http/Middleware/CheckServiciosRole.php @@ -0,0 +1,19 @@ +check() || auth()->user()->rol !== 'servicios') { + return redirect('/')->with('error', 'No tienes permisos de servicios para acceder a esta sección.'); + } + + return $next($request); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 764c0ff..7688ecf 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -21,6 +21,7 @@ class DatabaseSeeder extends Seeder $this->call([ ProfesorSeeder::class, + ServiciosSeeder::class, ]); } } diff --git a/database/seeders/ServiciosSeeder.php b/database/seeders/ServiciosSeeder.php new file mode 100644 index 0000000..5e37876 --- /dev/null +++ b/database/seeders/ServiciosSeeder.php @@ -0,0 +1,24 @@ + 'jorge@jorge.com' ], + [ + 'name' => 'Jorge', + 'apellido' => 'Servicios', + 'telefono' => '1234567890', + 'password' => Hash::make('servicios123'), + 'rol' => 'servicios', + ] + ); + } +} diff --git a/resources/views/layouts/dashboard.blade.php b/resources/views/layouts/dashboard.blade.php index 36a44bc..80dc624 100644 --- a/resources/views/layouts/dashboard.blade.php +++ b/resources/views/layouts/dashboard.blade.php @@ -73,7 +73,7 @@ class="pl-4 mt-2 space-y-1 text-sm">
  • - + Nuevo Préstamo diff --git a/routes/web.php b/routes/web.php index 7aa3297..c645793 100644 --- a/routes/web.php +++ b/routes/web.php @@ -112,3 +112,6 @@ Route::get('/user-dashboard', [App\Http\Controllers\UserDashboardController::cla Route::get('/user-dashboard/cuestionario', function () { return view('user-dashboard.cuestionario'); })->middleware('auth'); + +// Rutas protegidas para el rol servicios +Route::middleware(['auth', 'servicios'])->resource('prestamos', PrestamoController::class); From 54d76658f8a6e1e723b37516c638809d6e276ece Mon Sep 17 00:00:00 2001 From: TheSilva7 Date: Thu, 22 May 2025 22:15:32 -0600 Subject: [PATCH 7/7] Servicios Funcionaminetos Exclusivos para Jorge y restricciones, agregamos vehiculos al CRUD de prestamos y choferes para cuando marquen la casilla de "requiere chofer?" --- app/Exports/ChoferesExport.php | 24 +++ app/Http/Controllers/ChoferController.php | 97 +++++++++++ app/Http/Controllers/PrestamoController.php | 35 +++- app/Http/Kernel.php | 1 + app/Http/Middleware/AdminOrServiciosRole.php | 23 +++ app/Http/Middleware/CheckAdminRole.php | 5 +- app/Models/Chofer.php | 18 +++ app/Models/prestamo.php | 8 +- app/Providers/AuthServiceProvider.php | 11 +- ...25_03_27_174121_create_prestamos_table.php | 1 + ...8_182126_add_estado_to_prestamos_table.php | 28 ---- ...8_183038_add_estado_to_prestamos_table.php | 28 ---- ...1_191325_add_estado_to_prestamos_table.php | 15 +- ...025_05_22_205902_create_chofers_table.php} | 19 +-- ...12123_add_chofer_id_to_prestamos_table.php | 25 +++ resources/views/choferes.blade.php | 95 +++++++++++ resources/views/choferesCrearEditar.blade.php | 62 +++++++ .../views/exports/choferes-pdf.blade.php | 55 +++++++ resources/views/layouts/dashboard.blade.php | 4 +- resources/views/prestamos.blade.php | 7 + .../views/prestamosCrearEditar.blade.php | 52 +++++- resources/views/tiposLicencia.blade.php | 152 ------------------ .../views/tiposLicenciaCrearEditar.blade.php | 85 ---------- routes/web.php | 72 ++++----- 24 files changed, 556 insertions(+), 366 deletions(-) create mode 100644 app/Exports/ChoferesExport.php create mode 100644 app/Http/Controllers/ChoferController.php create mode 100644 app/Http/Middleware/AdminOrServiciosRole.php create mode 100644 app/Models/Chofer.php delete mode 100644 database/migrations/2025_03_28_182126_add_estado_to_prestamos_table.php delete mode 100644 database/migrations/2025_03_28_183038_add_estado_to_prestamos_table.php rename database/migrations/{2025_03_28_175646_add_estado_to_prestamos_table.php => 2025_05_22_205902_create_chofers_table.php} (53%) create mode 100644 database/migrations/2025_05_22_212123_add_chofer_id_to_prestamos_table.php create mode 100644 resources/views/choferes.blade.php create mode 100644 resources/views/choferesCrearEditar.blade.php create mode 100644 resources/views/exports/choferes-pdf.blade.php delete mode 100644 resources/views/tiposLicencia.blade.php delete mode 100644 resources/views/tiposLicenciaCrearEditar.blade.php diff --git a/app/Exports/ChoferesExport.php b/app/Exports/ChoferesExport.php new file mode 100644 index 0000000..cb9f25a --- /dev/null +++ b/app/Exports/ChoferesExport.php @@ -0,0 +1,24 @@ +get(); + } + + public function headings(): array + { + return [ + 'ID', + 'Nombre', + 'Tipo de Licencia', + ]; + } +} diff --git a/app/Http/Controllers/ChoferController.php b/app/Http/Controllers/ChoferController.php new file mode 100644 index 0000000..94fd693 --- /dev/null +++ b/app/Http/Controllers/ChoferController.php @@ -0,0 +1,97 @@ + null]); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $request->validate([ + 'nombre' => 'required|string|max:255', + 'tipo_licencia' => 'required|string|max:255', + ]); + + Chofer::create($request->all()); + return redirect()->route('choferes.index')->with('success', 'Chofer creado exitosamente.'); + } + + /** + * Display the specified resource. + */ + public function show(Chofer $chofer) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + $chofer = Chofer::findOrFail($id); + return view('choferesCrearEditar', compact('chofer')); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) + { + $request->validate([ + 'nombre' => 'required|string|max:255', + 'tipo_licencia' => 'required|string|max:255', + ]); + + $chofer = Chofer::findOrFail($id); + $chofer->update($request->all()); + return redirect()->route('choferes.index')->with('success', 'Chofer actualizado exitosamente.'); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + $chofer = Chofer::findOrFail($id); + $chofer->delete(); + return redirect()->route('choferes.index')->with('success', 'Chofer eliminado exitosamente.'); + } + + public function exportExcel() + { + return \Maatwebsite\Excel\Facades\Excel::download(new \App\Exports\ChoferesExport, 'choferes.xlsx'); + } + + public function exportPDF() + { + $choferes = \App\Models\Chofer::all(); + $pdf = \PDF::loadView('exports.choferes-pdf', ['choferes' => $choferes]); + return $pdf->download('choferes.pdf'); + } +} diff --git a/app/Http/Controllers/PrestamoController.php b/app/Http/Controllers/PrestamoController.php index 5490623..c06ebbf 100644 --- a/app/Http/Controllers/PrestamoController.php +++ b/app/Http/Controllers/PrestamoController.php @@ -40,7 +40,13 @@ class PrestamoController extends Controller */ public function create() { - return view('prestamosCrearEditar', ['prestamo' => null]); // No se necesita pasar préstamos + $vehiculos = \App\Models\tiposVeiculos::where('status', true)->get(); + $choferes = \App\Models\Chofer::all(); + return view('prestamosCrearEditar', [ + 'prestamo' => null, + 'vehiculos' => $vehiculos, + 'choferes' => $choferes + ]); } /** @@ -48,16 +54,27 @@ class PrestamoController extends Controller */ public function store(Request $request) { + // Validación de datos + $request->validate([ + 'nombre_solicitante' => 'required|string|max:255', + 'chofer_id' => 'required|exists:choferes,id', + 'destino' => 'required|string|max:255', + 'fecha_hora_salida' => 'required|date', + 'fecha_hora_llegada' => 'required|date', + 'motivo' => 'required|string|max:255', + 'domicilio' => 'required|string|max:255', + 'numero_personas' => 'required|integer', + 'vehiculo_id' => 'required|exists:tipos_veiculos,id' + ]); + // Preparar los datos $datos = $request->all(); - $datos['chofer'] = $request->has('chofer') ? 1 : 0; // Convertir 'on' a 1, o ausencia a 0 + $datos['chofer'] = $request->has('chofer') ? 1 : 0; $prestamo = new Prestamo($datos); - $prestamo->estado = 'pendiente'; // Estado inicial + $prestamo->estado = 'pendiente'; $prestamo->save(); - // Aquí puedes agregar notificaciones para los administradores - return redirect()->route('prestamos.index') ->with('success', 'Préstamo solicitado correctamente. Esperando aprobación.'); } @@ -68,7 +85,13 @@ class PrestamoController extends Controller public function edit($id) { $prestamo = Prestamo::findOrFail($id); // Busca el préstamo por ID - return view('prestamosCrearEditar', ['prestamo' => $prestamo]); // Pasa el préstamo a la vista + $vehiculos = \App\Models\tiposVeiculos::where('status', true)->get(); + $choferes = \App\Models\Chofer::all(); + return view('prestamosCrearEditar', [ + 'prestamo' => $prestamo, + 'vehiculos' => $vehiculos, + 'choferes' => $choferes + ]); // Pasa el préstamo a la vista } /** diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 81a033f..0496971 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -67,5 +67,6 @@ class Kernel extends HttpKernel 'profesor' => \App\Http\Middleware\CheckProfesorRole::class, 'admin' => \App\Http\Middleware\CheckAdminRole::class, 'servicios' => \App\Http\Middleware\CheckServiciosRole::class, + 'adminOrServicios' => \App\Http\Middleware\AdminOrServiciosRole::class, ]; } diff --git a/app/Http/Middleware/AdminOrServiciosRole.php b/app/Http/Middleware/AdminOrServiciosRole.php new file mode 100644 index 0000000..87c506f --- /dev/null +++ b/app/Http/Middleware/AdminOrServiciosRole.php @@ -0,0 +1,23 @@ +check() || !in_array(auth()->user()->rol, ['admin', 'servicios'])) { + return redirect()->route('dashboard')->with('error', 'No tienes permisos para acceder a esta sección.'); + } + return $next($request); +} +} \ No newline at end of file diff --git a/app/Http/Middleware/CheckAdminRole.php b/app/Http/Middleware/CheckAdminRole.php index a5911b8..97c5764 100644 --- a/app/Http/Middleware/CheckAdminRole.php +++ b/app/Http/Middleware/CheckAdminRole.php @@ -11,9 +11,10 @@ class CheckAdminRole public function handle(Request $request, Closure $next): Response { if (!auth()->check() || auth()->user()->rol !== 'admin') { - return redirect('/')->with('error', 'No tienes permisos de administrador para acceder a esta sección.'); + return redirect()->route('dashboard') + ->with('error', 'No tienes permisos de administrador para acceder a esta sección.'); } return $next($request); } -} \ No newline at end of file +} diff --git a/app/Models/Chofer.php b/app/Models/Chofer.php new file mode 100644 index 0000000..c185392 --- /dev/null +++ b/app/Models/Chofer.php @@ -0,0 +1,18 @@ +belongsTo(\App\Models\tiposVeiculos::class, 'vehiculo_id'); +} } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 5522aa2..eaca45b 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; // use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; +use Illuminate\Support\Facades\Gate; class AuthServiceProvider extends ServiceProvider { @@ -20,9 +21,11 @@ class AuthServiceProvider extends ServiceProvider * Register any authentication / authorization services. */ public function boot(): void - { - $this->registerPolicies(); +{ + $this->registerPolicies(); - // - } + Gate::define('gestionar-prestamos', function ($user) { + return in_array($user->rol, ['admin', 'servicios']); + }); +} } diff --git a/database/migrations/2025_03_27_174121_create_prestamos_table.php b/database/migrations/2025_03_27_174121_create_prestamos_table.php index 2ceb81f..3ae0b9b 100644 --- a/database/migrations/2025_03_27_174121_create_prestamos_table.php +++ b/database/migrations/2025_03_27_174121_create_prestamos_table.php @@ -21,6 +21,7 @@ return new class extends Migration $table->string('domicilio'); $table->integer('numero_personas'); $table->boolean('chofer')->default(false); // Opción de sí (true) o no (false) + $table->foreignId('vehiculo_id')->constrained('tipos_veiculos')->onDelete('cascade'); $table->timestamps(); }); } diff --git a/database/migrations/2025_03_28_182126_add_estado_to_prestamos_table.php b/database/migrations/2025_03_28_182126_add_estado_to_prestamos_table.php deleted file mode 100644 index af9986e..0000000 --- a/database/migrations/2025_03_28_182126_add_estado_to_prestamos_table.php +++ /dev/null @@ -1,28 +0,0 @@ -string('estado')->default('pendiente'); // pendiente, aceptado, rechazado - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('prestamos', function (Blueprint $table) { - $table->dropColumn('estado'); - }); - } -}; diff --git a/database/migrations/2025_04_01_191325_add_estado_to_prestamos_table.php b/database/migrations/2025_04_01_191325_add_estado_to_prestamos_table.php index c5d3a01..1384d82 100644 --- a/database/migrations/2025_04_01_191325_add_estado_to_prestamos_table.php +++ b/database/migrations/2025_04_01_191325_add_estado_to_prestamos_table.php @@ -9,21 +9,22 @@ return new class extends Migration /** * Run the migrations. */ - public function up(): void + public function up() { Schema::table('prestamos', function (Blueprint $table) { - // $table->enum('estado', ['pendiente', 'aceptado', 'rechazado'])->default('pendiente')->after('chofer'); - // Línea comentada porque la columna ya existe + $table->string('estado')->default('pendiente'); }); } /** * Reverse the migrations. */ - public function down(): void - { - Schema::table('prestamos', function (Blueprint $table) { + public function down() +{ + Schema::table('prestamos', function (Blueprint $table) { + if (Schema::hasColumn('prestamos', 'estado')) { $table->dropColumn('estado'); - }); + } + }); } }; diff --git a/database/migrations/2025_03_28_175646_add_estado_to_prestamos_table.php b/database/migrations/2025_05_22_205902_create_chofers_table.php similarity index 53% rename from database/migrations/2025_03_28_175646_add_estado_to_prestamos_table.php rename to database/migrations/2025_05_22_205902_create_chofers_table.php index af9986e..e81227b 100644 --- a/database/migrations/2025_03_28_175646_add_estado_to_prestamos_table.php +++ b/database/migrations/2025_05_22_205902_create_chofers_table.php @@ -9,20 +9,21 @@ return new class extends Migration /** * Run the migrations. */ - public function up(): void - { - Schema::table('prestamos', function (Blueprint $table) { - // - }); - } + public function up() +{ + Schema::create('choferes', function (Blueprint $table) { + $table->id(); + $table->string('nombre'); + $table->string('tipo_licencia'); + $table->timestamps(); + }); +} /** * Reverse the migrations. */ public function down(): void { - Schema::table('prestamos', function (Blueprint $table) { - // - }); + Schema::dropIfExists('choferes'); } }; diff --git a/database/migrations/2025_05_22_212123_add_chofer_id_to_prestamos_table.php b/database/migrations/2025_05_22_212123_add_chofer_id_to_prestamos_table.php new file mode 100644 index 0000000..c7a6195 --- /dev/null +++ b/database/migrations/2025_05_22_212123_add_chofer_id_to_prestamos_table.php @@ -0,0 +1,25 @@ +foreignId('chofer_id')->nullable()->constrained('choferes')->onDelete('set null'); + }); +} +public function down() +{ + Schema::table('prestamos', function (Blueprint $table) { + $table->dropForeign(['chofer_id']); + $table->dropColumn('chofer_id'); + }); +} +}; diff --git a/resources/views/choferes.blade.php b/resources/views/choferes.blade.php new file mode 100644 index 0000000..43b0e83 --- /dev/null +++ b/resources/views/choferes.blade.php @@ -0,0 +1,95 @@ +@extends('layouts.dashboard') + +@section('content') +
    + @if(session('success')) + + @endif + @if(session('error')) + + @endif +
    +
    +

    Gestión de Choferes

    + +
    +
    +
    +
    + +
    + +
    +
    + + @if(request('busqueda')) + Limpiar + @endif +
    +
    +
    + + + + + + + + + + + @foreach($choferes as $chofer) + + + + + + + @endforeach + +
    IDNombreTipo de LicenciaAcciones
    {{ $chofer->id }} + + {{ $chofer->nombre }} + {{ $chofer->tipo_licencia }} +
    + +
    + @csrf + @method('DELETE') + +
    +
    +
    +
    +
    +
    + +@endsection diff --git a/resources/views/choferesCrearEditar.blade.php b/resources/views/choferesCrearEditar.blade.php new file mode 100644 index 0000000..320a209 --- /dev/null +++ b/resources/views/choferesCrearEditar.blade.php @@ -0,0 +1,62 @@ +{{-- Start of Selection --}} +@extends('layouts.dashboard') + +@section('content') +
    +
    +
    +
    +
    +

    + {{ isset($chofer) ? 'Editar Chofer' : 'Nuevo Chofer' }} +

    +
    + +
    +
    + @if($errors->any()) +
    +
    + +
    +
      + @foreach($errors->all() as $error) +
    • {{ $error }}
    • + @endforeach +
    +
    +
    +
    + @endif +
    + @csrf + @if(isset($chofer)) + @method('PUT') + @endif +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + Cancelar + +
    +
    +
    +
    +
    +
    +
    +@endsection +{{-- End of Selection --}} diff --git a/resources/views/exports/choferes-pdf.blade.php b/resources/views/exports/choferes-pdf.blade.php new file mode 100644 index 0000000..13a5825 --- /dev/null +++ b/resources/views/exports/choferes-pdf.blade.php @@ -0,0 +1,55 @@ + + + + Choferes + + + +
    +

    Reporte de Choferes

    +

    Fecha de generación: {{ date('d/m/Y H:i:s') }}

    +
    + + + + + + + + + + + + @foreach($choferes as $chofer) + + + + + + + @endforeach + +
    IDNombreTipo de LicenciaFecha de Creación
    {{ $chofer->id }}{{ $chofer->nombre }}{{ $chofer->tipo_licencia }}{{ $chofer->created_at->format('d/m/Y') }}
    + + diff --git a/resources/views/layouts/dashboard.blade.php b/resources/views/layouts/dashboard.blade.php index 80dc624..ef64470 100644 --- a/resources/views/layouts/dashboard.blade.php +++ b/resources/views/layouts/dashboard.blade.php @@ -163,9 +163,9 @@
  • - + - Tipos de Licencia + Choferes
  • diff --git a/resources/views/prestamos.blade.php b/resources/views/prestamos.blade.php index a262638..c922cd0 100644 --- a/resources/views/prestamos.blade.php +++ b/resources/views/prestamos.blade.php @@ -86,6 +86,7 @@ Número + Vehiculo Nombre Solicitante Destino Fecha y Hora Salida @@ -110,6 +111,12 @@ {{ $prestamo->nombre_solicitante }} + +
    + + {{ $prestamo->vehiculo->nombre }} +
    +
    diff --git a/resources/views/prestamosCrearEditar.blade.php b/resources/views/prestamosCrearEditar.blade.php index 71ce1ac..8e1fcfa 100644 --- a/resources/views/prestamosCrearEditar.blade.php +++ b/resources/views/prestamosCrearEditar.blade.php @@ -61,6 +61,30 @@ @enderror
    + +
    + +
    + + +
    + @error('vehiculo_id') +

    {{ $message }}

    + @enderror +
    +
    -@endsection \ No newline at end of file + + +@endsection diff --git a/resources/views/tiposLicencia.blade.php b/resources/views/tiposLicencia.blade.php deleted file mode 100644 index af97208..0000000 --- a/resources/views/tiposLicencia.blade.php +++ /dev/null @@ -1,152 +0,0 @@ -@extends('layouts.dashboard') - -@section('content') -
    - - @if(session('success')) - - @endif - - @if(session('error')) - - @endif - -
    - - - - -
    -
    -
    - -
    - -
    -
    - - @if(request('busqueda')) - - Limpiar - - @endif -
    -
    - - -
    - - - - - - - - - - - @foreach($tiposLicencias as $tipoLicencia) - - - - - - - @endforeach - -
    IDTipo de LicenciaEstadoAcciones
    {{ $tipoLicencia->id }} - - {{ $tipoLicencia->tipoLicencia }} - - @if($tipoLicencia->eliminado == 1) - - Activo - - @else - - Inactivo - - @endif - -
    - @if($tipoLicencia->eliminado == 0) - - - - @else - - - -
    - @csrf - @method('DELETE') - -
    - @endif -
    -
    -
    -
    -
    - - -@endsection diff --git a/resources/views/tiposLicenciaCrearEditar.blade.php b/resources/views/tiposLicenciaCrearEditar.blade.php deleted file mode 100644 index 140a90e..0000000 --- a/resources/views/tiposLicenciaCrearEditar.blade.php +++ /dev/null @@ -1,85 +0,0 @@ -{{-- Start of Selection --}} -@extends('layouts.dashboard') - -@section('content') -
    -
    -
    -
    - -
    -

    - {{ isset($tipoLicencia) ? 'Editar Tipo de Licencia' : 'Nuevo Tipo de Licencia' }} -

    -
    - -
    -
    - - - @if($errors->any()) -
    -
    - -
    -
      - @foreach($errors->all() as $error) -
    • {{ $error }}
    • - @endforeach -
    -
    -
    -
    - @endif - - -
    - @csrf - @if(isset($tipoLicencia)) - @method('PUT') - @endif - -
    - -
    - -
    -
    - -
    - -
    - @error('tipoLicencia') -

    {{ $message }}

    - @enderror -
    - - -
    - - Cancelar - - -
    -
    -
    -
    -
    -
    -
    -@endsection -{{-- End of Selection --}} diff --git a/routes/web.php b/routes/web.php index c645793..0e9a917 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,6 +11,7 @@ use App\Http\Controllers\CapacidadController; use App\Http\Controllers\PrestamoController; use App\Http\Controllers\DespartamentoController; use App\Http\Controllers\SolicitudVehiculoController; +use App\Http\Controllers\ChoferController; /* @@ -56,7 +57,7 @@ use App\Http\Controllers\SolicitudVehiculoController; Route::get('/despartamento/export/excel', [DespartamentoController::class, 'exportExcel'])->name('despartamentos.excel'); Route::get('/despartamento/export/pdf', [DespartamentoController::class, 'exportPDF'])->name('despartamentos.pdf'); - // Rutas de préstamos protegidas para administradores + // Rutas de préstamos protegidas solo para administradores (historial, aceptar, rechazar, etc.) Route::middleware(['auth', 'admin'])->group(function () { Route::get('/prestamos/aceptados', [PrestamoController::class, 'aceptados'])->name('prestamos.aceptados'); Route::post('/prestamos/{id}/aceptar', [PrestamoController::class, 'aceptar'])->name('prestamos.aceptar'); @@ -69,49 +70,48 @@ use App\Http\Controllers\SolicitudVehiculoController; Route::get('/prestamos/export/{format}', [PrestamoController::class, 'export'])->name('prestamos.export'); }); - // Ruta general de préstamos (accesible para todos los usuarios autenticados) - Route::resource('prestamos', PrestamoController::class); + // Rutas de gestión de préstamos (crear, editar, eliminar) para admin y servicios + Route::middleware(['auth', 'can:gestionar-prestamos'])->resource('prestamos', PrestamoController::class); + + // Ruta general de préstamos (solo para ver) + Route::middleware(['auth'])->group(function () { + Route::get('/prestamos', [PrestamoController::class, 'index'])->name('prestamos.index'); + Route::get('/prestamos/{id}', [PrestamoController::class, 'show'])->name('prestamos.show'); + }); Route::get('/docentes/export/{format}', [DocentesController::class, 'export'])->name('docentes.export'); Route::get('/docentes/{id}/toggle-status', [DocentesController::class, 'toggleStatus'])->name('docentes.toggle-status'); -// Rutas protegidas que requieren autenticación - - - // Rutas protegidas que requieren autenticación Route::middleware(['auth'])->group(function () { + Route::get('/dashboard', [HomeController::class, 'index'])->name('dashboard'); + Route::get('/usuarios', [usuariosController::class,'index'])->name('usuarios'); + Route::get('/usuarios/nuevo', [usuariosController::class, 'create'])->name('usuarios.create'); + Route::post('/usuarios/store', [usuariosController::class,'store'])->name('usuarios.store'); + Route::get('/usuarios/edit/{id}', [usuariosController::class, 'edit'])->name('usuarios.edit'); + Route::put('/usuarios/{id}', [usuariosController::class, 'update'])->name('usuarios.update'); + Route::delete('/usuarios/destroy/{id}', [usuariosController::class, 'destroy'])->name('usuarios.destroy'); + Route::get('usuarios/excel', [usuariosController::class, 'exportExcel'])->name('usuarios.excel'); + Route::get('usuarios/pdf', [usuariosController::class, 'exportPDF'])->name('usuarios.pdf'); + Route::get('/home', [HomeController::class, 'index'])->name('home'); + }); - Route::get('/dashboard', [HomeController::class, 'index'])->name('dashboard'); - Route::get('/usuarios', [usuariosController::class,'index'])->name('usuarios'); - Route::get('/usuarios/nuevo', [usuariosController::class, 'create'])->name('usuarios.create'); - Route::post('/usuarios/store', [usuariosController::class,'store'])->name('usuarios.store'); - - Route::get('/usuarios/edit/{id}', [usuariosController::class, 'edit'])->name('usuarios.edit'); - Route::put('/usuarios/{id}', [usuariosController::class, 'update'])->name('usuarios.update'); - Route::delete('/usuarios/destroy/{id}', [usuariosController::class, 'destroy'])->name('usuarios.destroy'); - Route::get('usuarios/excel', [usuariosController::class, 'exportExcel'])->name('usuarios.excel'); - Route::get('usuarios/pdf', [usuariosController::class, 'exportPDF'])->name('usuarios.pdf'); - - Route::get('/home', [HomeController::class, 'index'])->name('home'); -////corerecion rubi - -}); + // Rutas para profesores + Route::middleware(['auth', 'profesor'])->prefix('profesor')->name('profesor.')->group(function () { + Route::get('/solicitudes', [SolicitudVehiculoController::class, 'index'])->name('solicitudes.index'); + Route::get('/solicitudes/create', [SolicitudVehiculoController::class, 'create'])->name('solicitudes.create'); + Route::post('/solicitudes', [SolicitudVehiculoController::class, 'store'])->name('solicitudes.store'); + }); -// Rutas para profesores -Route::middleware(['auth', 'profesor'])->prefix('profesor')->name('profesor.')->group(function () { - Route::get('/solicitudes', [SolicitudVehiculoController::class, 'index'])->name('solicitudes.index'); - Route::get('/solicitudes/create', [SolicitudVehiculoController::class, 'create'])->name('solicitudes.create'); - Route::post('/solicitudes', [SolicitudVehiculoController::class, 'store'])->name('solicitudes.store'); -}); + // Ruta para el dashboard de usuarios + Route::get('/user-dashboard', [App\Http\Controllers\UserDashboardController::class, 'index'])->name('user.dashboard'); -// Ruta para el dashboard de usuarios -Route::get('/user-dashboard', [App\Http\Controllers\UserDashboardController::class, 'index'])->name('user.dashboard'); + // Ruta para el cuestionario del dashboard de usuario + Route::get('/user-dashboard/cuestionario', function () { + return view('user-dashboard.cuestionario'); + })->middleware('auth'); -// Ruta para el cuestionario del dashboard de usuario -Route::get('/user-dashboard/cuestionario', function () { - return view('user-dashboard.cuestionario'); -})->middleware('auth'); +Route::resource('choferes', ChoferController::class); -// Rutas protegidas para el rol servicios -Route::middleware(['auth', 'servicios'])->resource('prestamos', PrestamoController::class); +Route::get('choferes/excel', [App\Http\Controllers\ChoferController::class, 'exportExcel'])->name('choferes.excel'); +Route::get('choferes/pdf', [App\Http\Controllers\ChoferController::class, 'exportPDF'])->name('choferes.pdf');