示例#1
0
        public Regimen getRegimenByIdReserva(Reserva reserva)
        {
            Regimen       regimen          = null;
            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            sqlCommand.Parameters.AddWithValue("@idReserva", reserva.getIdReserva());
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT idRegimen FROM LOS_BORBOTONES.Reserva WHERE idReserva = @idReserva";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            if (reader.Read())
            {
                int idRegimen = reader.GetInt32(reader.GetOrdinal("idRegimen"));
                RepositorioRegimen repoRegimen = new RepositorioRegimen();
                regimen = repoRegimen.getById(idRegimen);
            }

            sqlConnection.Close();

            return(regimen);
        }
示例#2
0
        public override Hotel getById(int id)
        {
            RepositorioCategoria      repositorioCategoria      = new RepositorioCategoria();
            RepositorioRegimen        repositorioRegimen        = new RepositorioRegimen();
            RepositorioCierreTemporal repositorioCierreTemporal = new RepositorioCierreTemporal();
            RepositorioDireccion      repositorioDireccion      = new RepositorioDireccion();
            RepositorioReserva        repositorioReserva        = new RepositorioReserva();

            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;
            Hotel         hotel = null;

            sqlCommand.Parameters.AddWithValue("@idHotel", id);
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM LOS_BORBOTONES.Hotel WHERE idHotel = @idHotel";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            if (reader.Read())
            {
                int      idHotel     = reader.GetInt32(reader.GetOrdinal("idHotel"));
                String   nombre      = reader.GetString(reader.GetOrdinal("Nombre"));
                String   mail        = reader.SafeGetString(reader.GetOrdinal("Mail"));
                String   telefono    = reader.SafeGetString(reader.GetOrdinal("Telefono"));
                DateTime fechaInicio = reader.GetDateTime(reader.GetOrdinal("FechaInicioActividades"));
                int      idCategoria = reader.GetInt32(reader.GetOrdinal("idCategoria"));
                int      idDireccion = reader.GetInt32(reader.GetOrdinal("idDireccion"));

                Categoria categoria = repositorioCategoria.getById(idCategoria);

                Direccion direccion = repositorioDireccion.getById(idDireccion);



                hotel = new Hotel(idHotel, categoria, direccion, nombre, mail, telefono, fechaInicio);
            }
            else
            {
                //Si no encuentro elemento con ese ID tiro una excepción
                throw new NoExisteIDException("No existe hotel con el ID asociado");
            }

            //Cierro Primera Consulta
            sqlConnection.Close();

            return(hotel);
        }
示例#3
0
        override public Reserva getById(int idReserva)
        {
            RepositorioHotel         repoHotel         = new RepositorioHotel();
            RepositorioRegimen       repoRegimen       = new RepositorioRegimen();
            RepositorioCliente       repoCliente       = new RepositorioCliente();
            RepositorioEstadia       repoEstadia       = new RepositorioEstadia();
            RepositorioEstadoReserva repoEstadoReserva = new RepositorioEstadoReserva();

            //Elementos de la Reserva a devolver
            Reserva reserva;


            decimal  codigoReserva = 0;
            decimal  diasAlojados  = 0;
            DateTime fechaCreacion = Utils.getSystemDatetimeNow();
            DateTime fechaDesde    = Utils.getSystemDatetimeNow();
            DateTime fechaHasta    = Utils.getSystemDatetimeNow();

            //Configuraciones de la consulta
            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            //Primera Consulta
            sqlCommand.Parameters.AddWithValue("@idReserva", idReserva);
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM LOS_BORBOTONES.Reserva WHERE idReserva = @idReserva";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                codigoReserva = reader.GetDecimal(reader.GetOrdinal("CodigoReserva"));
                diasAlojados  = reader.GetDecimal(reader.GetOrdinal("DiasAlojados"));
                fechaDesde    = reader.GetDateTime(reader.GetOrdinal("FechaDesde"));
                fechaHasta    = reader.GetDateTime(reader.GetOrdinal("FechaHasta"));
                fechaCreacion = reader.GetDateTime(reader.GetOrdinal("FechaCreacion"));
            }

            //Cierro Primera Consulta
            sqlConnection.Close();

            //Armo la reserva completa
            reserva = new Reserva(idReserva, null, null, null, null, codigoReserva, diasAlojados, fechaCreacion, fechaDesde, fechaHasta, null);

            return(reserva);
        }
示例#4
0
        public override List <Hotel> getAll()
        {
            RepositorioCategoria      repositorioCategoria      = new RepositorioCategoria();
            RepositorioRegimen        repositorioRegimen        = new RepositorioRegimen();
            RepositorioCierreTemporal repositorioCierreTemporal = new RepositorioCierreTemporal();
            RepositorioDireccion      repositorioDireccion      = new RepositorioDireccion();
            RepositorioReserva        repositorioReserva        = new RepositorioReserva();

            List <Hotel>  hoteles          = new List <Hotel>();
            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;
            Hotel         hotel = null;

            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText =
                "SELECT idHotel,Nombre,Mail,Telefono,FechaInicioActividades,idCategoria,idDireccion FROM LOS_BORBOTONES.Hotel AS HOT;";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                int      idHotel     = reader.GetInt32(reader.GetOrdinal("idHotel"));
                String   nombre      = reader.GetString(reader.GetOrdinal("Nombre"));
                String   mail        = reader.SafeGetString(reader.GetOrdinal("Mail"));
                String   telefono    = reader.SafeGetString(reader.GetOrdinal("Telefono"));
                DateTime fechaInicio = reader.GetDateTime(reader.GetOrdinal("FechaInicioActividades"));
                int      idCategoria = reader.GetInt32(reader.GetOrdinal("idCategoria"));
                int      idDireccion = reader.GetInt32(reader.GetOrdinal("idDireccion"));

                Categoria categoria = repositorioCategoria.getById(idCategoria);

                Direccion direccion = repositorioDireccion.getById(idDireccion);

                hotel = new Hotel(idHotel, categoria, direccion, nombre, mail, telefono,
                                  fechaInicio);
                hoteles.Add(hotel);
            }

            //Cierro Primera Consulta
            sqlConnection.Close();


            return(hoteles);
        }
示例#5
0
        public List <Hotel> getByQuery(String nombreHotel, int?estrellas, String ciudad, String pais)
        {
            RepositorioCategoria      repositorioCategoria      = new RepositorioCategoria();
            RepositorioRegimen        repositorioRegimen        = new RepositorioRegimen();
            RepositorioCierreTemporal repositorioCierreTemporal = new RepositorioCierreTemporal();
            RepositorioDireccion      repositorioDireccion      = new RepositorioDireccion();
            RepositorioReserva        repositorioReserva        = new RepositorioReserva();

            List <Hotel>  hoteles          = new List <Hotel>();
            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText =
                "SELECT DISTINCT(HOT.idHotel),HOT.Nombre,HOT.Mail,HOT.Telefono,HOT.FechaInicioActividades,HOT.idCategoria,HOT.idDireccion FROM LOS_BORBOTONES.Hotel AS HOT" +
                " JOIN LOS_BORBOTONES.Categoria AS CAT ON CAT.idCategoria= HOT.idCategoria" +
                " JOIN LOS_BORBOTONES.Direccion AS DIR ON DIR.idDireccion = HOT.idDireccion" + getCondiciones(nombreHotel, estrellas, ciudad, pais, sqlCommand) + ";";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                int      idHotel     = reader.GetInt32(reader.GetOrdinal("idHotel"));
                String   nombre      = reader.GetString(reader.GetOrdinal("Nombre"));
                String   mail        = reader.SafeGetString(reader.GetOrdinal("Mail"));
                String   telefono    = reader.SafeGetString(reader.GetOrdinal("Telefono"));
                DateTime fechaInicio = reader.GetDateTime(reader.GetOrdinal("FechaInicioActividades"));
                int      idCategoria = reader.GetInt32(reader.GetOrdinal("idCategoria"));
                int      idDireccion = reader.GetInt32(reader.GetOrdinal("idDireccion"));

                Categoria categoria = repositorioCategoria.getById(idCategoria);

                Direccion direccion = repositorioDireccion.getById(idDireccion);

                Hotel hotel = new Hotel(idHotel, categoria, direccion, nombre, mail, telefono, fechaInicio);
                hoteles.Add(hotel);
            }

            //Cierro Primera Consulta
            sqlConnection.Close();
            return(hoteles);
        }
示例#6
0
        //metodo para traer el monto de una reserva
        public Decimal getMonto(Reserva reserva)
        {
            /*El valor de la habitación se obtiene a través de su precio base (ver abm de régimen)
             * multiplicando la cantidad de personas que se alojarán en la habitación (tipo de habitación) y
             * luego de ello aplicando un incremento en función de la categoría del Hotel (cantidad de
             * estrellas)*/
            Decimal               total          = 0;
            RepositorioRegimen    repoRegimen    = new RepositorioRegimen();
            RepositorioHabitacion repoHabitacion = new RepositorioHabitacion();

            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            //traigo el monto del regimen
            Decimal montoRegimen = repoRegimen.getMonto(reserva.getRegimen().getIdRegimen());

            sqlCommand.Parameters.AddWithValue("@idReserva", reserva.getIdReserva());
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT idHabitacion FROM LOS_BORBOTONES.Reserva_X_Habitacion_X_Cliente WHERE idReserva = @idReserva";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                Habitacion     habitacion     = repoHabitacion.getById(reader.GetInt32(reader.GetOrdinal("idHabitacion")));
                TipoHabitacion tipoHabitacion = habitacion.getTipoHabitacion();

                total = montoRegimen * tipoHabitacion.getPorcentual();
            }

            sqlConnection.Close();

            //falta la suma por cantidad de estrellas
            Hotel     hotel            = reserva.getHotel();
            Categoria categoria        = hotel.getCategoria();
            Decimal   recargaEstrellas = categoria.getRecargaEstrellas();

            //Devuelve el monto total de las habitaciones para esa reserva.
            total = total + recargaEstrellas;

            return(total);
        }
示例#7
0
        public Reserva getIdByIdEstadia(int idEstadia)
        {
            Reserva                  reserva           = null;
            RepositorioRegimen       repoRegimen       = new RepositorioRegimen();
            RepositorioHotel         repoHotel         = new RepositorioHotel();
            RepositorioEstadia       repoEstadia       = new RepositorioEstadia();
            RepositorioCliente       repoClientes      = new RepositorioCliente();
            RepositorioEstadoReserva repoEstadoReserva = new RepositorioEstadoReserva();

            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            sqlCommand.Parameters.AddWithValue("@idEstadia", idEstadia);
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM LOS_BORBOTONES.Reserva WHERE idEstadia = @idEstadia";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                int           idReserva     = reader.GetInt32(reader.GetOrdinal("idReserva"));
                decimal       codigoReserva = reader.GetDecimal(reader.GetOrdinal("CodigoReserva"));
                decimal       diasAlojados  = reader.GetDecimal(reader.GetOrdinal("DiasAlojados"));
                DateTime      fechaDesde    = reader.SafeGetDateTime(reader.GetOrdinal("FechaDesde"));
                DateTime      fechaHasta    = reader.SafeGetDateTime(reader.GetOrdinal("FechaHasta"));
                DateTime      fechaCreacion = reader.SafeGetDateTime(reader.GetOrdinal("FechaCreacion"));
                Hotel         hotel         = repoHotel.getById(reader.GetInt32(reader.GetOrdinal("idHotel")));;
                Regimen       regimen       = repoRegimen.getById(reader.GetInt32(reader.GetOrdinal("idRegimen")));
                Estadia       estadia       = repoEstadia.getById(reader.GetInt32(reader.GetOrdinal("idEstadia")));
                Cliente       cliente       = repoClientes.getById(reader.GetInt32(reader.GetOrdinal("idCliente")));
                EstadoReserva estado        = repoEstadoReserva.getByIdReserva(idReserva);
                reserva = new Reserva(idReserva, hotel, estadia, regimen, cliente, codigoReserva, diasAlojados, fechaCreacion, fechaDesde, fechaHasta, estado);
            }
            sqlConnection.Close();

            return(reserva);
        }
示例#8
0
        public List <Reserva> getByIdHotel(int idHotel)
        {
            RepositorioHotel         repoHotel         = new RepositorioHotel();
            RepositorioRegimen       repoRegimen       = new RepositorioRegimen();
            RepositorioCliente       repoCliente       = new RepositorioCliente();
            RepositorioEstadia       repoEstadia       = new RepositorioEstadia();
            RepositorioEstadoReserva repoEstadoReserva = new RepositorioEstadoReserva();

            List <Reserva> reservas = new List <Reserva>();

            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            sqlCommand.Parameters.AddWithValue("@idHotel", idHotel);
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM LOS_BORBOTONES.Reserva WHERE idHotel = @idHotel";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                int      idReserva     = reader.GetInt32(reader.GetOrdinal("idReserva"));
                decimal  codigoReserva = reader.GetDecimal(reader.GetOrdinal("CodigoReserva"));
                DateTime fechaCreacion = reader.GetDateTime(reader.GetOrdinal("FechaCreacion"));
                DateTime fechaDesde    = reader.GetDateTime(reader.GetOrdinal("FechaDesde"));
                DateTime fechaHasta    = reader.GetDateTime(reader.GetOrdinal("FechaHasta"));
                decimal  diasAlojados  = reader.GetDecimal(reader.GetOrdinal("DiasAlojados"));
                Reserva  reserva       = new Reserva(idReserva, null, null, null, null, codigoReserva, diasAlojados, fechaCreacion, fechaDesde, fechaHasta, null);
                reservas.Add(reserva);
            }

            sqlConnection.Close();

            return(reservas);
        }
        public int facturar(List <Estadia> estadias, List <ConsumibleParaMostrar> consumiblesXEstadia, String tipoPago, String nombreTarjeta, decimal nroTarjeta, int codSegTarjeta, int vencTarjeta)
        {
            int idFactura     = 0;
            int resultado     = 0;
            int numeroFactura = 0;
            RepositorioEstadia     repoEstadia     = new RepositorioEstadia();
            RepositorioReserva     repoReserva     = new RepositorioReserva();
            RepositorioItemFactura repoItemFactura = new RepositorioItemFactura();
            Estadia estadia = null;
            Reserva reserva = null;

            //suponemos que hay solo 1 estadia por estrategia enunciado, pero lo dejo aca como para hacer mas si necesito.
            estadia = estadias.First();

            //traigo la reserva y comparo los dias que sean los mismos los de la reserva que los que tuve efectivamente la estadia
            reserva = repoReserva.getIdByIdEstadia(estadia.getIdEstadia());

            List <ItemFactura> itemsFactura = new List <ItemFactura>();
            float total  = 0;
            int   puntos = 0;

            //float cant = 1;//pongo cant siempre en 1 ya que no marco mas que 1 solo consumible y lo mismo con la habitacion
            float    monto         = 0;//va a ser siempre el precio del cons ya que no marco mas que 1 solo consumible
            DateTime fecha         = Utils.getSystemDatetimeNow();
            int      idItemFactura = 0;

            //int idConsumible = 0;

            //traigo el numero de factura asi le sumo 1 que sera el nuevo.
            numeroFactura = getLastNumeroFactura() + 1;

            //traigo regimen para sumarlo o ver si es all inclusive
            RepositorioRegimen repoRegimen  = new RepositorioRegimen();
            Regimen            regimen      = reserva.getRegimen();
            Boolean            allInclusive = false;

            if (regimen.getCodigoRegimen().Equals("RGAI"))
            {
                allInclusive = true;
            }

            //traigo el total
            //hago for each de los consumibles y sumo total y puntos
            ItemFactura itemFactura = null;
            float       montoTotal  = 0;

            foreach (ConsumibleParaMostrar cm in consumiblesXEstadia)
            {
                int cantidad = cm.getCantidad();

                //SI ES ALL INCLUSIVE NO SUMAN PARA EL TOTAL DE LA FACTURA
                if (!allInclusive)
                {
                    monto = cm.getConsumible().getPrecio();
                }
                else
                {
                    monto = 0;
                }

                itemFactura = new ItemFactura(idItemFactura, cm.getConsumible().getIdConsumible(), cm.getCantidad(), monto, fecha, idFactura);
                itemsFactura.Add(itemFactura);
                montoTotal = monto * cm.getCantidad() + montoTotal;
            }

            if (allInclusive)
            {
                //es all inclusive, hago un solo itemFactura all inclusive y no se cobra nada
                int idConsumible = 6;//poner el idConsumible del all inclusive
                monto = 0;
                //necesito un nuevo campo que sea descripcion por regimen de estadia
                itemFactura = new ItemFactura(idItemFactura, idConsumible, 1, monto, fecha, idFactura);
                itemsFactura.Add(itemFactura);
            }

            //sumo la habitacion x los dias alojados
            float montoHabitacion = 0;
            float totalHabitacion = 0;

            //conseguir el montoHabitacion de la reserva
            montoHabitacion = (float)repoReserva.getMonto(reserva);

            if (reserva.getDiasAlojados() == estadia.getCantidadNoches())
            {
                float diasAlojados = (float)reserva.getDiasAlojados();
                //se quedo toda la estadia hago solo un item factura con los dias x el monto
                totalHabitacion = montoHabitacion * diasAlojados;
                int idConsumible = 5;     //con 5 marco que es la habitacion
                itemFactura = new ItemFactura(idItemFactura, idConsumible, diasAlojados, montoHabitacion, fecha, idFactura);
                itemsFactura.Add(itemFactura);
            }
            else
            {
                //no se quedo toda la estadia hago un item factura con los diasAlojados x el monto y aparte un item por cada dia que quedo.

                float diasAlojados      = (float)estadia.getCantidadNoches();
                float diasAlojadosTotal = (float)reserva.getDiasAlojados();

                totalHabitacion = montoHabitacion * diasAlojadosTotal;
                int idConsumible = 5; //con 5 marco que es la habitacion
                itemFactura = new ItemFactura(idItemFactura, idConsumible, diasAlojados, montoHabitacion, fecha, idFactura);
                itemsFactura.Add(itemFactura);

                float gap = (float)(reserva.getDiasAlojados() - estadia.getCantidadNoches());
                itemFactura = new ItemFactura(idItemFactura, idConsumible, gap, montoHabitacion, fecha, idFactura);
                itemsFactura.Add(itemFactura);
            }


            //sumo los puntos
            float dias = (float)reserva.getDiasAlojados();

            puntos = (int)(montoHabitacion * dias) / 20; //puntos de habitacion
            puntos = puntos + (int)(montoTotal / 10);    //puntos de consumibles
            total  = totalHabitacion + montoTotal;
            Factura factura = new Factura(idFactura, estadia, reserva, numeroFactura, fecha, total, puntos, tipoPago, itemsFactura, nombreTarjeta, nroTarjeta, codSegTarjeta, vencTarjeta);

            idFactura = this.create(factura);
            if (idFactura != 0)
            {
                foreach (ItemFactura item in itemsFactura)
                {
                    //hago el set de idFactura para el create
                    item.setIdFactura(idFactura);
                }
                repoItemFactura.createTodos(itemsFactura);
                //hacer update de la estadia avisando que ya facture
                repoEstadia.facturado(estadia.getIdEstadia());
                repoEstadia.updateEstadoFacturado(reserva.getIdReserva());
                resultado = 1;
            }
            else
            {
                resultado = 2; //falla creando factura
            }
            return(resultado);
        }
示例#10
0
        public List <HabitacionDisponible> getHabitacionesDisponibles(DateTime fechaInicio, DateTime fechaFin, Hotel hotel, TipoHabitacion tipoHabitacion, Regimen regimen, Reserva reserva)
        {
            List <HabitacionDisponible> habitacionesDisponibles = new List <HabitacionDisponible>();
            RepositorioRegimen          repoRegimen             = new RepositorioRegimen();

            String        connectionString = ConfigurationManager.AppSettings["BaseLocal"];
            SqlConnection sqlConnection    = new SqlConnection(connectionString);
            SqlCommand    sqlCommand       = new SqlCommand();
            SqlDataReader reader;

            RepositorioReserva repoReserva = new RepositorioReserva();

            repoReserva.cancelarReservasNoShow(hotel);
            sqlCommand.Parameters.AddWithValue("@fechaInicio", fechaInicio);
            sqlCommand.Parameters.AddWithValue("@fechaFin", fechaFin);

            sqlCommand.Parameters.AddWithValue("@idHotel", hotel.getIdHotel());

            String queryTipoHab = "";

            if (tipoHabitacion != null)
            {
                sqlCommand.Parameters.AddWithValue("@idtipoHabitacion", tipoHabitacion.getIdTipoHabitacion());
                queryTipoHab = "AND HAB.idTipoHabitacion=@idtipoHabitacion ";
            }
            String queryModificarReservaParaTraerLaHabitacionQueYaReserve = reserva == null ? "" : "AND RES.idReserva!=" + reserva.getIdReserva();

            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText =
                "SELECT HAB.idHabitacion,HAB.Activa,HAB.Numero,HAB.Piso,HAB.Ubicacion,Hab.Descripcion,HAB.idHotel,HAB.idTipoHabitacion,REG.idRegimen FROM LOS_BORBOTONES.Habitacion AS HAB " +
                "JOIN LOS_BORBOTONES.Hotel AS HOT ON HOT.idHotel=HAB.idHotel " +
                "JOIN LOS_BORBOTONES.Regimen_X_Hotel AS RXH ON RXH.idHotel=HOT.idHotel " +
                "JOIN LOS_BORBOTONES.Regimen AS REG ON REG.idRegimen = RXH.idRegimen " +
                "JOIN LOS_BORBOTONES.TipoHabitacion AS TIP ON TIP.idTipoHabitacion=HAB.idTipoHabitacion " +
                "WHERE REG.Activo=1 " +
                "AND HAB.idHotel=@idHotel " +
                "AND HAB.Activa=1 " +
                queryTipoHab +
                "AND NOT EXISTS ( " +
                "SELECT * FROM LOS_BORBOTONES.Reserva_X_Habitacion_X_Cliente AS RXHXC " +
                "JOIN LOS_BORBOTONES.Reserva AS RES ON RES.idReserva = RXHXC.idReserva  " +
                "WHERE HAB.idHabitacion= RXHXC.idHabitacion " +
                queryModificarReservaParaTraerLaHabitacionQueYaReserve +
                "AND  (RES.FechaDesde < @fechaFin AND @fechaInicio < RES.FechaHasta  ) " +
                "AND NOT EXISTS( " +
                "SELECT * FROM LOS_BORBOTONES.EstadoReserva AS ESRE " +
                "WHERE RES.idReserva = ESRE.idReserva " +
                "AND ESRE.TipoEstado  IN ('RCR','RCC','RCNS') " +
                ") " +
                ") " +

                "AND NOT EXISTS (SELECT * FROM LOS_BORBOTONES.CierreTemporal AS CIE WHERE CIE.idHotel= HOT.idHotel AND CIE.FechaInicio < @fechaFin AND @fechaInicio < CIE.FechaFin) ";

            if (regimen != null)
            {
                sqlCommand.Parameters.AddWithValue("@idRegimen", regimen.getIdRegimen());
                sqlCommand.CommandText += " AND REG.idRegimen=@idRegimen ";
            }

            sqlCommand.CommandText += " GROUP BY HAB.idHabitacion, REG.idRegimen, HAB.Activa,HAB.Numero,HAB.Piso,HAB.Ubicacion,HAB.idHotel,HAB.idTipoHabitacion,HAB.Descripcion " +
                                      " ORDER BY HAB.idHabitacion;";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                int    qidHabitacion     = reader.GetInt32(reader.GetOrdinal("idHabitacion"));
                int    qidTipoHabitacion = reader.GetInt32(reader.GetOrdinal("idTipoHabitacion"));
                bool   qactiva           = reader.GetBoolean(reader.GetOrdinal("Activa"));
                int    qnumero           = reader.GetInt32(reader.GetOrdinal("Numero"));
                int    qpiso             = reader.GetInt32(reader.GetOrdinal("Piso"));
                int    qidRegimen        = reader.GetInt32(reader.GetOrdinal("idRegimen"));
                String qubicacion        = reader.GetString(reader.GetOrdinal("Ubicacion"));
                String qdescripcion      = reader.SafeGetString(reader.GetOrdinal("Descripcion"));

                Regimen    qregimen    = repoRegimen.getById(qidRegimen);
                Habitacion qhabitacion = new Habitacion(qidHabitacion, qactiva, qnumero, qpiso, qubicacion, qdescripcion);
                habitacionesDisponibles.Add(new HabitacionDisponible(qhabitacion, qregimen));
            }

            //Cierro Primera Consulta
            sqlConnection.Close();
            return(habitacionesDisponibles);
        }