Exemplo n.º 1
0
        override public Boolean exists(Reserva reserva)
        {
            int idReserva = 0;
            int idEstadia = 0;

            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 idReserva FROM LOS_BORBOTONES.Reserva WHERE idReserva = @idReserva";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                idReserva = reader.GetInt32(reader.GetOrdinal("idReserva"));
            }

            sqlConnection.Close();

            Estadia estadia = null;

            estadia = reserva.getEstadia();

            //valido por el idEstadia que tiene en la base
            sqlCommand.Parameters.AddWithValue("@idEstadia", estadia.getIdEstadia());
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection  = sqlConnection;
            sqlCommand.CommandText = "SELECT idEstadia FROM LOS_BORBOTONES.Reserva WHERE idEstadia = @idEstadia";

            sqlConnection.Open();

            reader = sqlCommand.ExecuteReader();

            while (reader.Read())
            {
                idEstadia = reader.GetInt32(reader.GetOrdinal("idEstadia"));
            }

            sqlConnection.Close();

            //Devuelve verdadero si el ID coincide o si el IdEstadia coincide
            return(idReserva != 0 || estadia.getIdEstadia().Equals(idEstadia));
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //traigo la estadia con sus items de factura si la estadia ya tiene checkout hecho.
            int idEstadia = 0;
            RepositorioEstadia       repositorioEstadia = new RepositorioEstadia();
            RepositorioEstadoReserva repoEstadoReserva  = new RepositorioEstadoReserva();

            Estadia       estadia       = null;
            EstadoReserva estadoReserva = null;

            if (textIdEstadia.Text != "")
            {
                idEstadia = int.Parse(textIdEstadia.Text);

                estadia = repositorioEstadia.getById(idEstadia);
                RepositorioReserva repoReserva = new RepositorioReserva();
                Reserva            reserva     = repoReserva.getIdByIdEstadia(idEstadia);
                //buscar por estado reserva que este con check out ya realizado
                estadoReserva = repoEstadoReserva.getByIdEstadia(idEstadia);
                if (estadoReserva == null)
                {
                    MessageBox.Show("La estadia ingresada no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if ((!estadoReserva.getTipoEstado().Equals("RCE") && !estadoReserva.getTipoEstado().Equals("RCCR")) | estadia.getFacturada() == true | reserva.getHotel().getIdHotel() != this.sesion.getHotel().getIdHotel())
                {
                    if (estadoReserva.getTipoEstado().Equals("RCI"))
                    {
                        MessageBox.Show("Todavia no se realizo el checkout de la estadia ingresada.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else if (estadoReserva.getTipoEstado().Equals("RF"))
                    {
                        MessageBox.Show("La estadia ya fue facturada.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else if (estadia.getFacturada() == true)
                    {
                        MessageBox.Show("La estadia ingresada ya fue facturada.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else if (reserva.getHotel().getIdHotel() != this.sesion.getHotel().getIdHotel())
                    {
                        MessageBox.Show("La estadia ingresada no corresponde al hotel al cual el usuario esta logueado.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        MessageBox.Show("La estadia ingresada no esta en estado para facturarse", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    //lleno los datos de la estadia aca se puede ver la cantidad de noches que de verdad se alojo.
                    //List<Estadia> estadias = new List<Estadia>();
                    estadias.Add(estadia);
                    dataGridView1.DataSource = estadias;
                    dataGridView1.AutoResizeColumns();
                    dataGridView1.ClearSelection();
                    //lleno los consumibles por estadia en el datagrid2
                    //List<Consumible> consumiblesXEstadia = new List<Consumible>();
                    //repositorioEstadia.getConsumiblesXIdEstadia(estadia.getIdEstadia()).ForEach(i => consumiblesXEstadia.Add(new ConsumibleParaMostrar(i, );
                    consumiblesXEstadia      = repoConsumibles.getByQuery(estadia.getIdEstadia());
                    dataGridView2.DataSource = consumiblesXEstadia;
                    dataGridView2.AutoResizeColumns();
                    dataGridView2.ClearSelection();
                }
            }
            else
            {
                MessageBox.Show("Por favor ingresar ID de estadia.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        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);
        }