diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 4c76b99..d267487 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; +use Illuminate\Support\Facades\DB; use Illuminate\View\View; use Faker\Factory as Faker; @@ -47,6 +48,10 @@ public function store(Request $request): RedirectResponse $username = $faker->unique()->userName; $rol_id = 1; + DB::beginTransaction(); + + try { + $user = User::create([ 'nombre_usuario' => $username, 'email' => $request->email, @@ -64,6 +69,9 @@ public function store(Request $request): RedirectResponse $persona->sexo = $request->genero; $persona->save(); + $user->persona_id = $persona->persona_id; + $user->save(); + $personaId = $persona->persona_id; $user->persona_id = $personaId; @@ -71,6 +79,12 @@ public function store(Request $request): RedirectResponse Auth::login($user); + DB::commit(); + return redirect(RouteServiceProvider::HOME); + } catch (\Exception $e) { + DB::rollBack(); + return redirect()->back()->withErrors(['error' => 'Hubo un error al registrar el usuario']); + } } } diff --git a/app/Http/Controllers/DashController.php b/app/Http/Controllers/DashController.php index 9cd9a6d..6000720 100644 --- a/app/Http/Controllers/DashController.php +++ b/app/Http/Controllers/DashController.php @@ -7,6 +7,7 @@ use Illuminate\Support\Facades\DB; use Carbon\Carbon; use ArielMejiaDev\LarapexCharts\LarapexChart; +use Illuminate\Support\Facades\Auth; class DashController extends Controller @@ -115,7 +116,7 @@ public function index() ] ]); */ - + //dd(Auth::user()->role->rol); return view('barebone', compact('conteo_hoy','chart', 'conteo_permitido', 'conteo_denegado', 'porcentaje_perm', 'porcentaje_deneg')); } @@ -148,5 +149,33 @@ public function pollAccessCount(Request $request) usleep(500000); } + + } + + public function miActividad() + { + setlocale(LC_TIME, 'es_ES.UTF-8'); + Carbon::setLocale('es'); + + $areas = EventosAcceso::accesosUser(); + + // mapeado del array areas para convertir el formato de fecha y hora al convencional + $areasFormateadas = $areas->map(function($area){ + $area->created_at = Carbon::parse($area->created_at)->translatedFormat('j \d\e F \d\e Y h:i A'); + return $area; + }); + + //obtener el último acceso del usuario + $ultimoAcceso = EventosAcceso::where('usuario_id', Auth::user()->usuario_id) + ->orderBy('created_at', 'desc') + ->first(); + + // formatear el tiempo transcurrido desde el último acceso + // la funcion de carbon diffForHumans() Formatea la fecha del último acceso para que se muestre como "hace 2 horas" o similar. + $ultimoAccesoFormat = $ultimoAcceso + ? Carbon::parse($ultimoAcceso->created_at)->diffForHumans() + : 'No se ha registrado ningún acceso'; + + return view('dashboard-u', compact('areasFormateadas', 'ultimoAccesoFormat')); } } diff --git a/app/Http/Controllers/EventosController.php b/app/Http/Controllers/EventosController.php index 090193a..606e363 100644 --- a/app/Http/Controllers/EventosController.php +++ b/app/Http/Controllers/EventosController.php @@ -13,6 +13,7 @@ use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Auth; class EventosController extends Controller { @@ -24,4 +25,12 @@ public function index() return view('pages-control.historial', compact('eventos')); } + + public function miHistorial() + { + $user_id = Auth::user()->usuario_id; + $eventos = EventosAcceso::accesosUsers($user_id); + + return view('pages-control.mi-historial', compact('eventos')); + } } diff --git a/app/Http/Controllers/SolicitudController.php b/app/Http/Controllers/SolicitudController.php new file mode 100644 index 0000000..c7561da --- /dev/null +++ b/app/Http/Controllers/SolicitudController.php @@ -0,0 +1,168 @@ +usuario_id = Auth::user()->usuario_id; + $solicitud->mensaje = $request->mensaje; + $solicitud->area_id = $request->area; + $solicitud->mensaje = $request->mensaje; + $solicitud->save(); + + $usuarios = $request->usuarios; + + foreach ($usuarios as $user) + { + $solicitud_usuario = new SolicitudUsuarios(); + $solicitud_usuario->solicitud_id = $solicitud->solicitud_id; + $solicitud_usuario->usuario_id = $user; + $solicitud_usuario->updated_at = now(); + $solicitud_usuario->save(); + } + + return redirect()->back()->with('success', 'Se acaba de enviar tu solicitud'); + + + } + + public function index() + { + setlocale(LC_TIME, 'es_ES.UTF-8'); + Carbon::setLocale('es'); + + $solicitudes = DB::table('solicitudes as a') + ->join('usuarios as b', 'a.usuario_id', '=', 'b.usuario_id') + ->join('persona as c', 'b.usuario_id', '=', 'c.usuario_id') + ->join('areas as e', 'a.area_id', '=', 'e.area_id') + ->select('c.nombre', 'c.ape_materno', 'c.ape_paterno', 'a.created_at', 'a.solicitud_id', 'a.estado') + ->get(); + + /* foreach($solicitudes as $solicitud) { + + $solicitudes_usuario = DB::table('solicitud_usuarios as s') + ->join('solicitudes as b', 's.solicitud_id', '=', 'b.solicitud_id') + ->join('usuarios as u', 's.usuario_id', '=', 'u.usuario_id') + ->join('persona as p', 'u.usuario_id', '=', 'p.usuario_id') + ->select('b.area_id', 's.usuario_id') + ->where('s.solicitud_id', $solicitud->solicitud_id) + ->get(); + + } */ + + $solicitudes_format = collect($solicitudes)->map(function($solicitud){ + return [ + 'nombre' => $solicitud->nombre . ' ' . $solicitud->ape_materno . ' '. $solicitud->ape_paterno, + 'id' => $solicitud->solicitud_id, + 'estado' => $solicitud->estado, + 'fecha' => $solicitud->created_at + ? Carbon::parse($solicitud->created_at)->diffForHumans() + : 'No se ha registrado fecha', + ]; + }); + + $solicitudes_array = $solicitudes_format->toArray(); + + + + + return view('pages-control.solicitudes.buzon', compact('solicitudes_array')); + + } + + public function verSolicitud(String $id) + { + setlocale(LC_TIME, 'es_ES.UTF-8'); + Carbon::setLocale('es'); + + $solicitud = DB::table('solicitudes as a') + ->join('usuarios as b', 'a.usuario_id', '=', 'b.usuario_id') + ->join('persona as c', 'b.usuario_id', '=', 'c.usuario_id') + ->join('areas as e', 'a.area_id', '=', 'e.area_id') + ->where('a.solicitud_id', $id) + ->select('c.nombre', 'c.ape_materno', 'c.ape_paterno', 'a.created_at', 'a.solicitud_id', 'a.estado', 'a.created_at', 'a.fecha_deseada', + 'a.mensaje', 'a.area_id') + ->first(); + + $fecha_creacion = Carbon::parse($solicitud->created_at)->translatedFormat('j \d\e F \d\e Y'); + $fecha_deseada = Carbon::parse($solicitud->fecha_deseada)->translatedFormat('j \d\e F \d\e Y'); + + $usuarios = DB::table('solicitud_usuarios as s') + ->join('solicitudes as b', 's.solicitud_id', '=', 'b.solicitud_id') + ->join('usuarios as u', 's.usuario_id', '=', 'u.usuario_id') + ->join('persona as p', 'u.usuario_id', '=', 'p.usuario_id') + ->join('roles as r', 'u.rol_id', '=', 'r.rol_id') + ->select(DB::raw('CONCAT(p.nombre, " ", p.ape_materno, " ", p.ape_paterno) AS full_name'), 'r.rol', 'b.area_id', 's.usuario_id',) + ->where('s.solicitud_id', $solicitud->solicitud_id) + ->get(); + + + // dd($usuarios); + + return view('pages-control.solicitudes.ver-solicitud', compact('solicitud', 'fecha_creacion', 'fecha_deseada', 'usuarios')); + + } + + public function concederPermisos(Request $request) + { + // Valida los datos recibidos + $request->validate([ + 'selected_items' => 'array', // Asegúrate de que sea un array + 'selected_items.*' => 'integer' // Cada elemento del array debe ser un entero + ]); + + // Obtén los IDs seleccionados + $users = $request->input('selected_items', []); + $area = $request->area; + + // dd($users); + + foreach($users as $user) + { + $autorizacion = new Autorizaciones; + $autorizacion->usuario_id = $user; + $autorizacion->area_id = $area; + $now = now(); // Obtener la fecha y hora actual + $autorizacion->created_at = $now; + $autorizacion->updated_at = $now; + $autorizacion->expires_at = Carbon::create($request->fecha); + $autorizacion->save(); + + } + + $solicitud = Solicitud::find($request->solicitud); + $solicitud->estado = 'ACEPTADA'; + $solicitud->save(); + + return redirect()->back()->with('success', 'Los usuarios ahora tienen acceso a esta área'); + + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 0079688..67328cd 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -63,5 +63,6 @@ class Kernel extends HttpKernel 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + 'checkRole' => \App\Http\Middleware\CheckRole::class, ]; } diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php new file mode 100644 index 0000000..75e0890 --- /dev/null +++ b/app/Http/Middleware/CheckRole.php @@ -0,0 +1,32 @@ +route('login'); + } + + $user = Auth::user(); + + if ($user->role->rol !== $role) { + return redirect('/user-info'); + } + + return $next($request); + } +} diff --git a/app/Models/EventosAcceso.php b/app/Models/EventosAcceso.php index edb7046..440eb1b 100644 --- a/app/Models/EventosAcceso.php +++ b/app/Models/EventosAcceso.php @@ -149,6 +149,40 @@ public static function accesosHoy() return $sql->get(); } + + public static function accesosUsers($user_id = null) + { + $sql = DB::table('eventos_acceso as e') + ->join('usuarios as u', 'e.usuario_id', '=', 'u.usuario_id') + ->join('persona as p', 'u.usuario_id', '=', 'p.usuario_id') + ->join('areas as a', 'e.area_id', '=', 'a.area_id') + ->select(DB::raw('CONCAT(p.nombre, " ", p.ape_materno, " ", p.ape_paterno) AS full_name'), 'a.nombre', 'e.permiso', 'e.fecha_hora') + ->where('e.usuario_id', $user_id) + ->orderBy('e.fecha_hora', 'desc'); + + return $sql->get(); + } + + public static function accesosUser() + { + $fechaInicio = now()->startOfWeek(); + $fechaFin = now()->endOfWeek(); + + $sql = DB::table('eventos_acceso as e') + ->join('usuarios as u', 'e.usuario_id', '=', 'u.usuario_id') + ->join('areas as a', 'e.area_id', '=', 'a.area_id') + ->select('a.nombre', 'e.created_at', + DB::raw("(SELECT COUNT(*) FROM eventos_acceso + WHERE eventos_acceso.usuario_id = u.usuario_id AND eventos_acceso.area_id = a.area_id + AND eventos_acceso.created_at BETWEEN '$fechaInicio' AND '$fechaFin') as conteo + ") + ) + ->where('u.usuario_id', '=', auth()->user()->usuario_id) + ->orderBy('e.created_at', 'desc') + ->limit(3); + + return $sql->get(); + } } diff --git a/app/Models/Notificacion.php b/app/Models/Notificacion.php new file mode 100644 index 0000000..d65d5dc --- /dev/null +++ b/app/Models/Notificacion.php @@ -0,0 +1,20 @@ +hasMany(SolicitudUsuario::class, 'usuario_id'); + } +} diff --git a/app/Models/SolicitudUsuarios.php b/app/Models/SolicitudUsuarios.php new file mode 100644 index 0000000..fae5f9f --- /dev/null +++ b/app/Models/SolicitudUsuarios.php @@ -0,0 +1,25 @@ +belongsTo(Solicitud::class, 'usuario_id'); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 033aa98..1201db6 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -41,6 +41,11 @@ public function autorizaciones() return $this->hasMany(Autorizaciones::class, 'usuario_id'); } + public function role() + { + return $this->belongsTo(Role::class, 'rol_id'); + } + /** * The attributes that should be hidden for serialization. * diff --git a/config/database.php b/config/database.php index e2b12eb..8100693 100644 --- a/config/database.php +++ b/config/database.php @@ -60,6 +60,8 @@ 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('DB_SSLCA') ? base_path('storage/certs/' . env('DB_SSLCA')) : null, + PDO::ATTR_PERSISTENT => true, + PDO::ATTR_TIMEOUT => 10, ]) : [], ], diff --git a/resources/views/components/menu/vertical-menu.blade.php b/resources/views/components/menu/vertical-menu.blade.php index 0455144..634bffe 100644 --- a/resources/views/components/menu/vertical-menu.blade.php +++ b/resources/views/components/menu/vertical-menu.blade.php @@ -21,6 +21,7 @@ + @if (!Request::is('collapsible-menu/*'))
Student
+{{ Auth::user()->role->rol }}
Library
-June 20, 2024 - 10:30 AM
+{{ $a->nombre }}
+{{ $a->created_at }}
Cafeteria
-June 19, 2024 - 12:45 PM
-Gym
-June 18, 2024 - 4:20 PM
-Library
-45 visits
-Cafeteria
-67 visits
-Gym
-23 visits
+{{ $a->nombre }}
+Visitas: {{ $a->conteo }}
Puedes mirar y responder solicitudes
John Doe
- Requested on July 25, 2024De: {{ $s['nombre'] }}
+ @if ($s['estado'] === 'PENDIENTE') + PENDIENTE