예제 #1
0
        /// <summary>
        /// Crear objeto Reserva con los datos requeridos para su creación en la base de datos.
        /// </summary>
        /// <param name="filtroReserva"></param>
        private Reserva CrearReserva(ReservaVueloFilter filtroReserva)
        {
            Reserva reserva = new Reserva()
            {
                FechaReserva      = DateTime.Now,
                IdUsuario         = filtroReserva.IdUsuario,
                IdVuelo           = filtroReserva.IdVuelo,
                ValorTotalReserva = filtroReserva.TiquetePasajero.Sum(item => item.ValorTiquete),
                TiquetePasajero   = filtroReserva.TiquetePasajero
                                    .Select(tiquete => new TiquetePasajero()
                {
                    IdTipoAsiento = tiquete.IdTipoAsiento,
                    ValorTiquete  = tiquete.ValorTiquete,
                    Pasajero      = new Pasajero()
                    {
                        Apellido  = tiquete.Pasajero.Apellido,
                        Cedula    = tiquete.Pasajero.Cedula,
                        Celular   = tiquete.Pasajero.Celular,
                        Correo    = tiquete.Pasajero.Correo,
                        Direccion = tiquete.Pasajero.Direccion,
                        Nombre    = tiquete.Pasajero.Nombre,
                        Sexo      = tiquete.Pasajero.Sexo,
                        Telefono  = tiquete.Pasajero.Telefono,
                    }
                }).ToList()
            };

            return(reserva);
        }
예제 #2
0
        /// <summary>
        /// Reservar Vuelo.
        /// </summary>
        /// <param name="reservaVuelo"></param>
        public void ReservarVuelo(ReservaVueloFilter filtroReserva)
        {
            IReservaRepository reservaRepository = DependencyInjectionContainer.Resolve <IReservaRepository>();
            ILoginRepository   loginRepository   = DependencyInjectionContainer.Resolve <ILoginRepository>();
            IReservaDomain     reservaDomain     = DependencyInjectionContainer.Resolve <IReservaDomain>();

            Reserva reserva = new Reserva();

            //Consultar Reservas previas del usuario.
            List <Reserva> reservasPrevias = reservaRepository.ConsultarReservas(filtroReserva.IdUsuario, filtroReserva.FechaVuelo);

            //Validar datos del usuario y reservas previas.
            Usuario usuario = loginRepository.ConsultarUsuario(filtroReserva.IdUsuario);

            reserva = reservaDomain.ValidarReserva(filtroReserva, reservasPrevias, usuario);

            if (reserva != null)
            {
                //Crear la reserva del vuelo
                reservaRepository.ReservarVuelo(reserva);
            }
            else
            {
                throw new BussinesException(Messages.ErrorReservaVuelo);
            }
        }
예제 #3
0
        public void ReservarVueloTest()
        {
            ReservaApplication target = new ReservaApplication();

            List <TiquetePasajeroFilter> tiquetesPasajero = new List <TiquetePasajeroFilter>();

            tiquetesPasajero.Add(new TiquetePasajeroFilter()
            {
                IdTipoAsiento = 3,
                ValorTiquete  = 70000,
                Pasajero      = new PasajeroFilter()
                {
                    Apellido  = "Pelaez",
                    Cedula    = "1037587268",
                    Celular   = "3016199800",
                    Correo    = "*****@*****.**",
                    Direccion = "Carrera 78 # 48-51",
                    Nombre    = "Miguel",
                    Sexo      = "M",
                    Telefono  = "2998547"
                }
            });

            tiquetesPasajero.Add(new TiquetePasajeroFilter()
            {
                IdTipoAsiento = 3,
                ValorTiquete  = 70000,
                Pasajero      = new PasajeroFilter()
                {
                    Apellido  = "Perez",
                    Cedula    = "1037587269",
                    Celular   = "3016199801",
                    Correo    = "*****@*****.**",
                    Direccion = "Carrera 78 # 48-52",
                    Nombre    = "Juan",
                    Sexo      = "M",
                    Telefono  = "2998548"
                }
            });

            ReservaVueloFilter filtro = new ReservaVueloFilter
            {
                FechaVuelo      = new DateTime(2016, 12, 15, 7, 15, 0),
                IdUsuario       = 1,
                IdVuelo         = 1,
                TiquetePasajero = tiquetesPasajero
            };

            try
            {
                target.ReservarVuelo(filtro);
            }
            catch (BussinesException ex)
            {
                //Excepción esperada según alguna regla de negocio.
                Assert.IsNotNull(ex);
            }
        }
예제 #4
0
        /// <summary>
        /// Validar datos del usuario y reservas previas.
        /// </summary>
        /// <param name="filtroReserva"></param>
        /// <param name="reservasPrevias"></param>
        /// <returns></returns>
        public Reserva ValidarReserva(ReservaVueloFilter filtroReserva, List <Reserva> reservasPrevias, Usuario usuario)
        {
            //Validar que el usuario sea mayor de edad
            if ((DateTime.Today.Year - usuario.FechaNacimiento.Year) < int.Parse(ConfigurationKeys.GetKeyAppSettings("EdadMayorEdad")))
            {
                throw new BussinesException(Messages.ErrorUsuarioMenorEdad);
            }

            //Validar que el usuario no tenga un vuelo previamente reservado para el mismo día.
            if (reservasPrevias.Count > 0)
            {
                throw new BussinesException(Messages.ErrorReservasPrevias);
            }

            //Si supera todas las validaciones se crea la reserva.
            return(CrearReserva(filtroReserva));
        }
예제 #5
0
        public IActionResult ReservaVuelo([FromBody] ReservaVueloFilter reservaFiltro)
        {
            try
            {
                if (reservaFiltro.IdUsuario == 0 || reservaFiltro.IdVuelo == 0 || !reservaFiltro.TiquetePasajero.Any())
                {
                    return(BadRequest(BadRequestError));
                }

                new ReservaApplication().ReservarVuelo(reservaFiltro);
                return(Ok());
            }
            catch (Exception ex)
            {
                logger.Error(ex, InternalServerErrorReservarVuelo);
                return(StatusCode((int)HttpStatusCode.InternalServerError, InternalServerErrorReservarVuelo));
            }
        }