private string[] checkHorasReserva(PistasReservaResponse pistaReservada, string[] ph) { int horaini; //para pistas sin reservas if (pistaReservada.H_ini == null && pistaReservada.H_fin == null) { //ponemos una hora alta para que el bucle siempre ponga libres las horas horaini = 0; } else { //si la hora y la reserva coinciden se guarda horaini = short.Parse(pistaReservada.H_ini.Substring(0, 2)); } //miramos que horas tienen reservadas for (var hora = 8; hora < 20; hora++) { if (hora == horaini) { ph[hora - 8] = "reservada"; ph[hora - 7] = (pistaReservada.Horas > 1 || (hora - 7) == 12) ? "reservada" : "libre"; } else { ph[hora - 8] = (ph[hora - 8] != "reservada" || ph[hora - 8] == null) ? "libre" : "reservada"; } } return(ph); }
//RECUPERAR PISTAS DISPONIBLES PARA RESERVA //recibimos deporte y fecha en datos //devolvemos array de pistas con las horas libres y reservadas para fecha y deporte recibidos public IEnumerable <PistasReservaResponse> pistasParaReserva(PistasReservaRequest datos) { List <PistasReservaResponse> pistasConReserva = new List <PistasReservaResponse>(); List <PistasReservaResponse> listaPistas = null;//lista de pistas disponibles para el deporte List <PistasReservaResponse> response = new List <PistasReservaResponse>(); try { //recuperamos listado pistas using (var context = new BDReservasEntities()) { listaPistas = (from i in context.V_INSTALACIONES_HORARIOS where i.actividad == datos.Actividad where i.pista_operativa == true where i.instalación_operativa == true select new PistasReservaResponse { Pista = i.pista.Trim(), Id_pista = i.id_pista, Horario = i.horario.Trim(), Instalacion = i.instalacion.Trim(), Precio_hora = i.precio_hora, Fecha = datos.Fecha.Trim() }).ToList(); //si no se encuentran pistas se devuelve msje informativo if (listaPistas.Count < 1) { pistasConReserva.Add(new PistasReservaResponse() { Mensaje = "No existen pistas disponibles " }); } else { //recuperamos horas reservadas/libres para cada pista el dia indicado foreach (var p in listaPistas) { List <PistasReservaResponse> tmp = (from i in context.V_RESERVAS_PISTAS where i.pista == p.Pista where i.fecha == datos.Fecha where i.estado != "cancelada" select new PistasReservaResponse { Pista = i.pista.Trim(), Id_pista = i.id_pista, H_ini = i.h_ini.Trim(), H_fin = i.h_fin.Trim(), Horas = (decimal)i.horas, Horario = p.Horario.Trim(), Instalacion = p.Instalacion.Trim(), Precio_hora = p.Precio_hora, Fecha = datos.Fecha, }).ToList(); //si no hay reservas para la pista if (tmp.Count < 1) { List <PistasReservaResponse> vacia = new List <PistasReservaResponse> { p }; pistasConReserva.AddRange(vacia); } else { pistasConReserva.AddRange(tmp); } } string[] ph = new string[13]; string nomPista = ""; PistasReservaResponse pisres = null; //recorremos las pistas con reserva encontradas for (var x = 0; x <= pistasConReserva.Count(); x++) { if (x != pistasConReserva.Count()) { if (pistasConReserva[x].Pista != nomPista)//es pista distinta { if (pisres != null) { pisres.H_ini = null; pisres.H_fin = null; pisres.Horas = 0; response.Add(pisres);//guardamos pista con sus reservas } ph = new string[13]; pisres = null; nomPista = pistasConReserva[x].Pista; pisres = pistasConReserva[x]; ph = this.checkHorasReserva(pistasConReserva[x], ph); pisres.LibresReservadas = ph; } else { ph = this.checkHorasReserva(pistasConReserva[x], ph); pisres.LibresReservadas = ph; } } else { pisres.H_ini = null; pisres.H_fin = null; pisres.Horas = 0; response.Add(pisres);//guardamos pista con sus reservas } } } return(response); } } catch (Exception ex) { response.Add(new PistasReservaResponse() { Mensaje = "No se pudo realizar la consulta. -- " + ex.Message }); return(pistasConReserva); } }