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