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