Пример #1
0
        public async Task <ActionResult <IEnumerable <PistaDispViewModel> > > Get([FromBody] PistaBuscar pistaBuscar)
        {
            if (pistaBuscar.Deporte == null || pistaBuscar.Socio == null)
            {
                return(NotFound(new Result(404, false, "No ha introducido los parámetros necesarios").GetResultJson()));
            }

            var deportExist = await context.Deportes.FirstOrDefaultAsync(x => x.Nombre.Trim().ToLower() == pistaBuscar.Deporte.Trim().ToLower());

            if (deportExist == null)
            {
                return(NotFound(new Result(404, false, "El deporte ingresado no existe en la BD").GetResultJson()));
            }

            var pistaExist = await context.Pistas.FirstOrDefaultAsync(x => x.Deporte.Nombre.Trim().ToLower() == pistaBuscar.Deporte.Trim().ToLower());

            if (pistaExist == null)
            {
                return(NotFound(new Result(404, false, "No existen pistas en la BD para el deporte ingresado").GetResultJson()));
            }

            var pistas = await UtilPista.GetPistaDisponible(context, pistaBuscar);

            if (pistas == null)
            {
                return(NoContent());
            }

            List <PistaDispViewModel> lista = new List <PistaDispViewModel>();

            foreach (var pista in pistas)
            {
                PistaDispViewModel pistaDisp = new PistaDispViewModel
                {
                    Numero           = pista.Key.Numero,
                    Descripcion      = pista.Key.Descripcion,
                    Localizacion     = pista.Key.Localizacion,
                    DeporteNombre    = pista.Key.Deporte.Nombre,
                    HorasDisponibles = pista.Value
                };
                lista.Add(pistaDisp);
            }

            return(Ok(lista));
        }
        private static List <int> ObtenerHorasDisponibles(ApplicationDbContext context, PistaBuscar pistaBuscar)
        {
            var horasReservasSocio = context.Reservas.Include(x => x.Socio)
                                     .Where(x => x.Socio.Mail.Trim().ToLower().Contains(pistaBuscar.Socio.Trim().ToLower()))
                                     .Where(x => x.Fecha.Equals(pistaBuscar.Fecha)).ToList();

            List <int> horasDisponibles = new List <int> {
                8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
            };

            foreach (Reserva reserva in horasReservasSocio)
            {
                if (reserva != null)
                {
                    horasDisponibles.Remove(reserva.Hora);
                }
            }

            return(horasDisponibles);
        }
 private static async Task <List <Reserva> > GetReservasSocioDiaDeporte(ApplicationDbContext context, PistaBuscar pistaBuscar)
 {
     return(await context.Reservas.Include(s => s.Socio).Where(s => s.Socio.Mail == pistaBuscar.Socio)
            .Include(p => p.Pista).Where(p => p.Pista.Deporte.Nombre == pistaBuscar.Deporte)
            .Where(r => r.Fecha.Equals(pistaBuscar.Fecha)).ToListAsync());
 }
 private static async Task <List <Pista> > GetPistas(ApplicationDbContext context, PistaBuscar pistaBuscar)
 {
     return(await context.Pistas.Include(x => x.Deporte).Include(x => x.Reservas)
            .Where(x => x.Deporte.Nombre == pistaBuscar.Deporte).ToListAsync());
 }
        internal static async Task <Dictionary <Pista, List <int> > > GetPistaDisponible(ApplicationDbContext context, PistaBuscar pistaBuscar)
        {
            List <Reserva> reservasSocioDiaDeporte = await GetReservasSocioDiaDeporte(context, pistaBuscar);

            if (reservasSocioDiaDeporte.Count > 2)
            {
                return(null);
            }

            List <Pista> pistas = await GetPistas(context, pistaBuscar);

            var estructuraSalida = new Dictionary <Pista, List <int> >();

            foreach (Pista pista in pistas)
            {
                List <int> horasDisponiblesSocio = ObtenerHorasDisponibles(context, pistaBuscar);

                if (pista.Reservas != null)
                {
                    pista.Reservas.ForEach(x =>
                    {
                        if (horasDisponiblesSocio.Contains(x.Hora))
                        {
                            horasDisponiblesSocio.Remove(x.Hora);
                        }
                    });
                }

                estructuraSalida.Add(pista, horasDisponiblesSocio);
            }

            return(estructuraSalida);
        }