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') +
Fecha | +Hora Salida | +Hora Regreso | +Destino | +Estado | +
---|---|---|---|---|
{{ $solicitud->fecha_solicitud }} | +{{ $solicitud->hora_salida }} | +{{ $solicitud->hora_regreso }} | +{{ $solicitud->destino }} | ++ + {{ ucfirst($solicitud->estado) }} + + | +