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