コード例 #1
0
        public GetVuelosDisponiblesResponseMessage Handle(GetVuelosDisponiblesRequestMessage data)
        {
            _vueloQuery.Init();
            if (data.FechaInicio.HasValue)
            {
                DateTime fechaInicio = data.FechaInicio.Value.Date;
                _vueloQuery.AddWhere(q => q.FechaSalida >= fechaInicio);
            }
            if (data.FechaFinal.HasValue)
            {
                DateTime fechaFinal = data.FechaFinal.Value.Date.AddDays(1);
                _vueloQuery.AddWhere(q => q.FechaSalida <= fechaFinal);
            }
            if (data.AeropuertoOrigen.HasValue)
            {
                _vueloQuery.AddWhere(q => q.AeropuertoOrigenId == data.AeropuertoOrigen);
            }
            if (data.AeropuertoDestino.HasValue)
            {
                _vueloQuery.AddWhere(q => q.AeropuertoDestinoId == data.AeropuertoDestino);
            }

            _vueloQuery.IncludeObject(q => q.AeropuertoOrigen);
            _vueloQuery.IncludeObject(q => q.AeropuertoDestino);
            _vueloQuery.IncludeObject(q => q.Avion.Aerolinea);
            _vueloQuery.Sort("DESC", "FechaSalida");
            var vuelos       = _vueloQuery.Execute();
            var vuelosMapper = this._mapper.Map <Domain.Vuelo[], Messages.GetVuelosDisponibles.Vuelo[]>(vuelos.ToArray());

            return(new GetVuelosDisponiblesResponseMessage(Messages.Base.ValidationResult.CreateValidResult(), vuelosMapper));
        }
        public FindVueloParaReservarResponseMessage Handle(FindVueloParaReservarRequestMessage data)
        {
            _vueloQuery.Init();
            _vueloQuery.AddWhere(q => q.Id == data.VueloId);

            _vueloQuery.IncludeObject(q => q.AeropuertoOrigen);
            _vueloQuery.IncludeObject(q => q.AeropuertoDestino);
            _vueloQuery.IncludeObject(q => q.Avion.Aerolinea);
            _vueloQuery.IncludeObject(q => q.Pasajeros);
            var vuelos      = _vueloQuery.Execute();
            var vuelo       = vuelos.FirstOrDefault();
            var vueloMapper = this._mapper.Map <Domain.Vuelo, Messages.FindVueloParaReservar.Vuelo>(vuelo);

            if (vuelo.Pasajeros != null)
            {
                List <int> asientosOcupados = new List <int>();
                foreach (var pasajero in vuelo.Pasajeros)
                {
                    asientosOcupados.Add(pasajero.NumeroAsiento);
                }
                vueloMapper.AsientosOcupados = asientosOcupados.ToArray();
            }
            return(new FindVueloParaReservarResponseMessage(Messages.Base.ValidationResult.CreateValidResult(), vueloMapper));
        }
        public CreateReservacionVueloResponseMessage Handle(CreateReservacionVueloRequestMessage data)
        {
            // obtener la informacion del vuelo
            _vueloQuery.Init();
            _vueloQuery.AddWhere(q => q.Id == data.VueloId);

            _vueloQuery.IncludeObject(q => q.AeropuertoOrigen);
            _vueloQuery.IncludeObject(q => q.AeropuertoDestino);
            _vueloQuery.IncludeObject(q => q.Avion.Aerolinea);
            _vueloQuery.IncludeObject(q => q.Pasajeros);
            var vuelos = _vueloQuery.Execute();
            var vuelo  = vuelos.FirstOrDefault();

            // Obtener la información del cliente
            _clienteQuery.Init();
            _clienteQuery.AddWhere(q => q.Id == data.ClienteId);

            var cliente = _clienteQuery.Execute().FirstOrDefault();

            if (vuelo == null)
            {
                return(new CreateReservacionVueloResponseMessage(new Messages.Base.ValidationResult()
                {
                    IsValid = false, Error = "No hay información del vuelo especificado"
                }));
            }
            if (cliente == null)
            {
                return(new CreateReservacionVueloResponseMessage(new Messages.Base.ValidationResult()
                {
                    IsValid = false, Error = "No hay información del cliente especificado"
                }));
            }
            if (data.Asientos == null || data.Asientos.Count() == 0)
            {
                return(new CreateReservacionVueloResponseMessage(new Messages.Base.ValidationResult()
                {
                    IsValid = false, Error = "No se selecciono ningún asiento"
                }));
            }

            DateTime fechaActual   = DateTime.Now;
            int      hoursLimitBuy = 3;

            if ((vuelo.FechaSalida - fechaActual).Hours <= hoursLimitBuy)
            {
                // verificar que la fecha de salida del vuelo este en el rango de horario de compra
                return(new CreateReservacionVueloResponseMessage(new Messages.Base.ValidationResult()
                {
                    IsValid = false, Error = $"No se puede reservar ya que el vuelo esta proximo a partir. Se necesita reservar en un máximo de {hoursLimitBuy} horas antes de la salida"
                }));
            }

            var operacion = new Domain.Operacion();

            operacion.ClienteId = data.ClienteId;
            operacion.Fecha     = DateTime.Now;
            // obtener la cantidad de asientos por tipo de pasajero
            var totEconomico = data.Asientos.Where(q => q.TipoPasajero == 1).Count();
            var totNormal    = data.Asientos.Where(q => q.TipoPasajero == 2).Count();
            var totEjecutivo = data.Asientos.Where(q => q.TipoPasajero == 3).Count();
            // calcular el costo por cada boleto generado
            var costoNormal    = vuelo.Costo * (1 + vuelo.PorcExtraNormal / 100);
            var costoEjecutivo = costoNormal * (1 + vuelo.PorcExtraEjecutivo / 100);

            operacion.Costo     = totEconomico * vuelo.Costo + totNormal * costoNormal + totEjecutivo * costoEjecutivo;
            operacion.FormaPago = Domain.FormaPago.Efectivo;
            operacion.Pagado    = true;
            _operacionRepository.Add(operacion);

            foreach (var asiento in data.Asientos)
            {
                var pasajero = new Domain.Pasajero();
                pasajero.NumeroAsiento   = asiento.NumeroAsiento;
                pasajero.Folio           = vuelo.Numero.PadLeft(3, '0') + "-" + asiento.NumeroAsiento.ToString().PadLeft(3, '0');
                pasajero.Nombre          = cliente.Nombre;
                pasajero.PrimerApellido  = cliente.PrimerApellido;
                pasajero.SegundoApellido = cliente.SegundoApellido;
                pasajero.TipoPasajero    = (Domain.TipoPasajero)asiento.TipoPasajero;
                pasajero.Operacion       = operacion;
                pasajero.VueloId         = vuelo.Id;

                _pasajeroRepository.Add(pasajero);
            }

            return(new CreateReservacionVueloResponseMessage(Messages.Base.ValidationResult.CreateValidResult()));
        }