Untitled
unknown
plain_text
2 years ago
17 kB
1
Indexable
Never
<?php namespace App\Http\Controllers; use App\Models\AsistenciaRegistros; use App\Models\EventosRegistros; use App\Models\TiposDeRegistros; use App\Models\UsuarioConteos; use App\Models\UsuarioPremios; use App\Models\UsuarioRegistros; use DateTime; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; date_default_timezone_set('America/Mexico_City'); class UsuarioRegistrosController extends Controller { public function lista_api(Request $request){ if($request->ajax()){ return datatables()->eloquent(UsuarioRegistros::query()->where('users_id', '=', Auth::user()->id)->with('EventosRegistros', 'EventosRegistros.Eventos' ,'TiposDeRegistros')->orderBy('created_at', 'desc')) ->addColumn('Fecha', function ($row) { $Fecha = $row->created_at; return $Fecha; }) ->addColumn('estado', function ($row) { if($row->habilitado == 0){ $estado = '<span class="badge bg-primary">Registrado</span>'; }else{ $estado = '<span class="badge bg-danger">Cancelado</span>'; } return $estado; }) ->addColumn('btn', function ($row) { if($row->habilitado == 0){ $FechaHoraActual = NOW(); if($row->EventosRegistros->fechaHoraEditar < $FechaHoraActual){ $actionBtn = "-"; }else{ $actionBtn = "<div class='btn-group btn-group-sm' role='group'>"; $actionBtn = $actionBtn . "<a href='" . route('mis_actividades.desactivar', ['idUsuarioRegistros' => $row->id]) . "' class='btn btn-danger'>Desvincular</a>"; $actionBtn = $actionBtn . "</div>"; } }else{ $actionBtn = "-"; } return $actionBtn; }) ->rawColumns(['btn', 'Fecha', 'estado']) ->toJson(); } return redirect()->route('mis_actividades.lista'); } public function lista(){ return view('misActividades.lista-historial'); } public function activas_api(Request $request){ if($request->ajax()){ return datatables() ->eloquent(UsuarioRegistros::query() ->where('users_id', '=', Auth::user()->id) ->with('EventosRegistros', 'EventosRegistros.Eventos' ,'TiposDeRegistros') ->join('eventos_registros', 'eventos_registros.id', '=', 'usuario_registros.eventos_registros_id') ->join('tipos_de_registros', 'tipos_de_registros.id', '=', 'usuario_registros.tipos_de_registros_id') ->join('eventos', 'eventos.id', '=', 'eventos_registros.eventos_id') ->where('eventos_registros.habilitado', '=', 0) ->where('usuario_registros.habilitado', '=', 0) ->select('usuario_registros.id as idRegistros', 'usuario_registros.created_at as FechaRegistro', 'usuario_registros.habilitado as HabilitadoRegistro', 'eventos_registros.fechaHoraEditar as FechaHoraEditar', 'eventos_registros.nombre as NombreActividad', 'eventos_registros.descripcion as DescripcionActividad', 'tipos_de_registros.nombre as NombreCategoria', 'eventos.nombre as NombreEvento')) ->addColumn('Fecha', function ($row) { $Fecha = $row->FechaRegistro; return $Fecha; }) ->addColumn('estado', function ($row) { if($row->HabilitadoRegistro == 0){ $estado = '<span class="badge bg-primary">Registrado</span>'; }else{ $estado = '<span class="badge bg-danger">Cancelado</span>'; } return $estado; }) ->addColumn('btn', function ($row) { if($row->HabilitadoRegistro == 0){ $FechaHoraActual = NOW(); if($row->FechaHoraEditar < $FechaHoraActual){ $actionBtn = "-"; }else{ $actionBtn = "<div class='btn-group btn-group-sm' role='group'>"; $actionBtn = $actionBtn . "<a href='" . route('mis_actividades.desactivar', ['idUsuarioRegistros' => $row->idRegistros]) . "' class='btn btn-danger'>Desvincular</a>"; $actionBtn = $actionBtn . "</div>"; } }else{ $actionBtn = "-"; } return $actionBtn; }) ->rawColumns(['btn', 'Fecha', 'estado']) ->toJson(); } return redirect()->route('mis_actividades.lista'); } public function activas(){ return view('misActividades.activas'); } public function asistencias_api(Request $request){ if($request->ajax()){ return datatables() ->eloquent(AsistenciaRegistros::query() ->with('TiposDeRegistros', 'EventosRegistros', 'EventosRegistros.Eventos') ->where('users_id', '=', Auth::user()->id)) ->addColumn('Fecha', function ($row) { $Fecha = $row->created_at; return $Fecha; }) ->addColumn('BtnCancelar', function ($row) { if( $row->habilitado == 1){ $actionBtn = '<span class="badge bg-danger">Cancelado</span>'; }else{ $actionBtn = '<span class="badge bg-primary">Activo</span>'; } return $actionBtn; }) ->rawColumns(['Fecha', 'BtnCancelar']) ->toJson(); } return redirect()->route('asistencias.lista'); } public function asistencias(){ return view('misActividades.asistencias'); } public function premios_api(Request $request){ if($request->ajax()){ return datatables() ->eloquent(UsuarioPremios::query() ->with('TiendaVinculos', 'TiendaVinculos.TiendaPremios', 'TiendaVinculos.TiendaCategorias') ->where('users_id', '=', Auth::user()->id)) ->addColumn('Gachapon', function ($row) { $Garchapon = $row->TiendaVinculos->TiendaCategorias->nombre; return $Garchapon; }) ->addColumn('Premio', function ($row) { $Premio = $row->TiendaVinculos->TiendaPremios->nombre; return $Premio; }) ->addColumn('Puntos', function ($row) { $Puntos = $row->TiendaVinculos->TiendaCategorias->puntos; return $Puntos; }) ->addColumn('Fecha', function ($row) { $Fecha = $row->created_at; return $Fecha; }) ->addColumn('Estado', function ($row) { if( $row->finalizar == 1){ $actionBtn = '<span class="badge bg-info">Finalizado</span>'; }else{ $actionBtn = '<span class="badge bg-primary">Pendiente</span>'; } return $actionBtn; }) ->rawColumns(['Estado']) ->toJson(); } return redirect()->route('mis_actividades.premios'); } public function premios(){ return view('misActividades.lista-premios'); } public function lista_api_actividades(int $idTipoDeCategorias){ $ValidarTipoDeRegistros = TiposDeRegistros::find($idTipoDeCategorias); if(!$ValidarTipoDeRegistros || $ValidarTipoDeRegistros->filtroUsuario == 1){ return response(404)->header('Content-type', 'text/plain'); } $ListaDeActividades = EventosRegistros::where('habilitado', '=', 0) ->where('tipos_de_registros_id', '=', $idTipoDeCategorias) ->get(); return response(json_encode($ListaDeActividades), 200)->header('Content-type', 'text/plain'); } public function nuevo(){ $info['ListaCategorias'] = TiposDeRegistros::where('habilitado', '=', 0)->where('filtroUsuario', '=', 0)->orderBy('nombre', 'ASC')->get(); return view('misActividades.crear', $info); } public function ValidarHorarioActividad($horario_inicio, $horario_fin) { $usuario_id = auth()->user()->id; $usuario_registros = UsuarioRegistros::where('usuario_id', $usuario_id)->get(); foreach ($usuario_registros as $registro) { $actividad = EventosRegistros::find($registro->eventos_registros_id); if (($horario_inicio >= $actividad->horario_inicio && $horario_inicio <= $actividad->horario_fin) || ($horario_fin >= $actividad->horario_inicio && $horario_fin <= $actividad->horario_fin)) { return false; // El horario choca con una actividad ya registrada } } return true; // No hay choque de horarios con ninguna actividad registrada por el usuario actual } public function nuevo_post(Request $request){ $request->validate([ 'TipoDeActividad' => 'required|numeric', 'Actividad' => 'required|numeric', ], [ 'TipoDeActividad.required' => 'La categoría de actividad es requerida.', 'TipoDeActividad.numeric' => 'La categoría de actividad tiene un dato no válido.', 'Actividad.required' => 'La actividad es requerida.', 'Actividad.numeric' => 'La actividad tiene un dato no válido.', ]); $ValidarTipoDeActividad = TiposDeRegistros::find($request->TipoDeActividad); $ValidarActividad = EventosRegistros::find($request->Actividad); if( !$ValidarTipoDeActividad ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Categoría de actividad inválida.'); }else if( $ValidarTipoDeActividad->habilitado == 1 ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Categoría de actividad está desactivada y no puede utilizarse.'); }else if ( $ValidarTipoDeActividad->filtroUsuario == 1 ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Categoría de actividad no está disponible para usuarios.'); } if( !$ValidarActividad ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Actividad inválida.'); }else if( $ValidarActividad->habilitado == 1 ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Está actividad está desactivada y no puede utilizarse.'); }else if ( ($ValidarActividad->maxUsuarios <= $ValidarActividad->vinculosActuales) && $ValidarActividad->maxUsuarios != "-1" ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'La actividad se encuentra llena y no permite más registros.'); } //Revisa si el horario es válido if( !$ValidarHorarioActividad){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'El horario de la actividad que elegiste interfiere con una actividad previamente registrada.'); } $ValidarConteo = UsuarioConteos::where('users_id', '=', Auth::user()->id) ->where('tipos_de_registros_id', '=', $request->TipoDeActividad)->first(); $ValidarRegistroActividadDoble = UsuarioRegistros::where('users_id', '=', Auth::user()->id) ->where('tipos_de_registros_id', '=', $request->TipoDeActividad) ->where('eventos_registros_id', '=', $request->Actividad) ->where('habilitado', '=', 0) ->first(); if($ValidarRegistroActividadDoble){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'No puedes registrarte dos veces a una actividad.'); } $FechaHoraActual = NOW(); if($ValidarActividad->fechaHoraVinculo < $FechaHoraActual){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'El tiempo para registrarse en esa actividad ya expiró.'); } if( $ValidarActividad->tipos_de_registros_id != $request->TipoDeActividad ){ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'La actividad no corresponde con la categoría de actividad.'); } if($ValidarConteo){ if( ($ValidarTipoDeActividad->maxCantidad > $ValidarConteo->Cantidad) || $ValidarTipoDeActividad->maxCantidad == -1){ $ConteoActual = $ValidarConteo->Cantidad + 1; $ValidarConteo->update([ 'Cantidad' => $ConteoActual ]); $NuevoUsuarioRegistros = UsuarioRegistros::create([ 'users_id' => Auth::user()->id, 'tipos_de_registros_id' => $request->TipoDeActividad, 'eventos_registros_id' => $request->Actividad, ]); $ActualizarActividadVinculos = $ValidarActividad->vinculosActuales + 1; $ValidarActividad->update([ 'vinculosActuales' => $ActualizarActividadVinculos, ]); }else{ return redirect()->route('mis_actividades.nuevo')->with('mensaje', 'Ya alcanzaste el límite de registros para esa categoría de actividad.'); } }else{ $ConteoNuevo = UsuarioConteos::create([ 'users_id' => Auth::user()->id, 'tipos_de_registros_id' => $request->TipoDeActividad, 'Cantidad' => 1, ]); $NuevoUsuarioRegistros = UsuarioRegistros::create([ 'users_id' => Auth::user()->id, 'tipos_de_registros_id' => $request->TipoDeActividad, 'eventos_registros_id' => $request->Actividad, ]); $ActualizarActividadVinculos = $ValidarActividad->vinculosActuales + 1; $ValidarActividad->update([ 'vinculosActuales' => $ActualizarActividadVinculos, ]); } return redirect()->route('mis_actividades.lista')->with('mensaje', 'Registro de actividad correctamente.'); } public function desactivar(int $idUsuarioRegistros){ $ActividadValidar = UsuarioRegistros::with('EventosRegistros')->where('id', '=', $idUsuarioRegistros)->where('users_id', '=', Auth::user()->id)->first(); if( !$ActividadValidar ){ return redirect()->route('mis_actividades.lista')->with('mensaje', 'No existe esa actividad o no tienes permiso para realizar esa acción.'); } $FechaHoraActual = NOW(); if($ActividadValidar->EventosRegistros->fechaHoraEditar < $FechaHoraActual){ return redirect()->route('mis_actividades.lista')->with('mensaje', 'El tiempo para desvincularse en esa actividad ya expiró.'); } $ValidarConteo = UsuarioConteos::where('users_id', '=', Auth::user()->id) ->where('tipos_de_registros_id', '=', $ActividadValidar->tipos_de_registros_id)->first(); $ConteoActual = $ValidarConteo->Cantidad - 1; $ValidarConteo->update([ 'Cantidad' => $ConteoActual ]); $ActualizarVinculosEventosRegistros = EventosRegistros::find($ActividadValidar->eventos_registros_id); $ActualizarActividadVinculos = $ActualizarVinculosEventosRegistros->vinculosActuales - 1; $ActualizarVinculosEventosRegistros->update([ 'vinculosActuales' => $ActualizarActividadVinculos, ]); $ActividadValidar->update([ 'habilitado' => 1, ]); return redirect()->route('mis_actividades.lista')->with('mensaje', 'Te desvinculaste de la actividad.'); } }