Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
18 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 ValidarHorarioDeActividad($horario_inicio, $horario_fin, $usuario_id)
    {
        $resultado = DB::table('actividades')
            ->join('usuarios_actividades', 'actividades.id', '=', 'usuarios_actividades.actividad_id')
            ->where('usuarios_actividades.usuario_id', '=', $usuario_id)
            ->where(function ($query) use ($horario_inicio, $horario_fin) {
                $query->whereBetween('horario_inicio', [$horario_inicio, $horario_fin])
                      ->orWhereBetween('horario_fin', [$horario_inicio, $horario_fin])
                    ->orWhere(function ($query) use ($horario_inicio, $horario_fin) {
                          $query->where('horario_inicio', '<=', $horario_inicio)
                                ->where('horario_fin', '>=', $horario_fin);
                    });
            })
            ->exists();

        return $resultado;
    }



    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.');
        }

        $actividad = EventosRegistros::find($request->Actividad);
        $horario_inicio = $actividad->horario_inicio;
        $horario_fin = $actividad->horario_fin;

        $usuario_id = Auth::id(); // o el ID del usuario que estés validando
        $ValidarHorarioUsuario = $this->ValidarHorarioDeActividad($horario_inicio, $horario_fin, $usuario_id);

        //Revisa si el horario es válido
        if( !$ValidarHorarioUsuario){
            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.');

    }

}