コード例 #1
0
        public ServiceOperationResult UpdateAvailability(Guid aircraftAvailabilityId, Guid aircraftId, int?reroutingRadius,
                                                         List <AircraftAvailabilityLocationDto> departureLocations,
                                                         List <AircraftAvailabilityLocationDto> arrivalLocations, List <AircraftAvailabilityPeriodDto> availabileDates,
                                                         decimal?pricePerHour, decimal?minimumAcceptablePrice, bool sellCharterSeat)
        {
            using (FlyJetsDbContext dbContext = new FlyJetsDbContext(_config))
            {
                var operationResult = new ServiceOperationResult();
                operationResult.IsSuccessfull = true;

                var availability = dbContext.AircraftsAvailability
                                   .FirstOrDefault(av => av.Id == aircraftAvailabilityId);

                if (availability == null)
                {
                    operationResult.Errors = new List <ErrorCodes>()
                    {
                        ErrorCodes.NotFound
                    };
                    operationResult.IsSuccessfull = false;

                    return(operationResult);
                }

                availability.AircraftId   = aircraftId;
                availability.PricePerHour = pricePerHour;
                availability.MinimumAcceptablePricePerTrip = minimumAcceptablePrice;
                availability.SellCharterSeat = sellCharterSeat;
                availability.ReroutingRadius = reroutingRadius;

                var oldLocations = dbContext.AircraftAvailabilityLocations
                                   .Where(loc => loc.AircraftAvailabilityId == aircraftAvailabilityId)
                                   .ToList();

                foreach (var location in oldLocations)
                {
                    dbContext.Entry(location).State = EntityState.Deleted;
                }

                availability.Locations = new List <AircraftAvailabilityLocation>();

                if (reroutingRadius.HasValue)
                {
                    var homebaseLoc = (from aircraft in dbContext.Aircrafts
                                       join homebase in dbContext.LocationsTree on aircraft.HomeBaseId equals homebase.Id
                                       where aircraft.Id == aircraftId
                                       select new { Lat = homebase.Lat, Lng = homebase.Lng })
                                      .First();

                    var reroutingLocations = _locationService.GetLocationsWithinXMiles(homebaseLoc.Lat.Value, homebaseLoc.Lng.Value,
                                                                                       reroutingRadius.Value, (byte)LocationsTypes.Airport);

                    foreach (var reroutingLocation in reroutingLocations)
                    {
                        var newLoc = new AircraftAvailabilityLocation()
                        {
                            Id = Guid.NewGuid(),
                            AircraftAvailabilityId = availability.Id,
                            LocationTreeId         = reroutingLocation.Id,
                            IsForDeparture         = true,
                            Rerouting = true
                        };

                        availability.Locations.Add(newLoc);
                    }
                }

                foreach (var departureLocation in departureLocations)
                {
                    var newLoc = new AircraftAvailabilityLocation()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = availability.Id,
                        LocationTreeId         = departureLocation.LocationTreeId,
                        IsForDeparture         = true,
                        Rerouting = false
                    };

                    availability.Locations.Add(newLoc);
                }

                foreach (var arrivalLocation in arrivalLocations)
                {
                    var newLoc = new AircraftAvailabilityLocation()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = availability.Id,
                        LocationTreeId         = arrivalLocation.LocationTreeId,
                        IsForDeparture         = false,
                        Rerouting = false
                    };

                    availability.Locations.Add(newLoc);
                }

                var oldPeriods = dbContext.AircraftsAvailabilityPeriods
                                 .Where(p => p.AircraftAvailabilityId == aircraftAvailabilityId)
                                 .ToList();

                foreach (var period in oldPeriods)
                {
                    dbContext.Entry(period).State = EntityState.Deleted;
                }

                availability.Periods = new List <AircraftAvailabilityPeriod>();

                foreach (var availableDate in availabileDates)
                {
                    availability.Periods.Add(new AircraftAvailabilityPeriod()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = availability.Id,
                        From = availableDate.From,
                        To   = availableDate.To
                    });
                }

                dbContext.SaveChanges();

                return(operationResult);
            }
        }
コード例 #2
0
        public ServiceOperationResult CreateAvailability(Guid aircraftId, int?reroutingRadius,
                                                         List <AircraftAvailabilityLocationDto> departureLocations,
                                                         List <AircraftAvailabilityLocationDto> arrivalLocations, List <AircraftAvailabilityPeriodDto> availabileDates,
                                                         decimal?pricePerHour, decimal?minimumAcceptablePrice, bool sellCharterSeat)
        {
            using (var dbContext = new FlyJetsDbContext(_config))
            {
                ServiceOperationResult result = new ServiceOperationResult();

                result.IsSuccessfull = true;

                var newAvailability = new AircraftAvailability()
                {
                    Id           = Guid.NewGuid(),
                    AircraftId   = aircraftId,
                    PricePerHour = pricePerHour,
                    MinimumAcceptablePricePerTrip = minimumAcceptablePrice,
                    CreatedOn       = DateTime.UtcNow,
                    CreatedById     = _accountId,
                    SellCharterSeat = sellCharterSeat,
                    ReroutingRadius = reroutingRadius,
                    Available       = true
                };

                newAvailability.Locations = new List <AircraftAvailabilityLocation>();

                if (reroutingRadius.HasValue)
                {
                    var homebaseLoc = (from aircraft in dbContext.Aircrafts
                                       join homebase in dbContext.LocationsTree on aircraft.HomeBaseId equals homebase.Id
                                       where aircraft.Id == aircraftId
                                       select new { Lat = homebase.Lat, Lng = homebase.Lng })
                                      .First();

                    var reroutingLocations = _locationService.GetLocationsWithinXMiles(homebaseLoc.Lat.Value, homebaseLoc.Lng.Value,
                                                                                       reroutingRadius.Value, (byte)LocationsTypes.Airport);

                    foreach (var reroutingLocation in reroutingLocations)
                    {
                        var newLoc = new AircraftAvailabilityLocation()
                        {
                            Id = Guid.NewGuid(),
                            AircraftAvailabilityId = newAvailability.Id,
                            LocationTreeId         = reroutingLocation.Id,
                            IsForDeparture         = true,
                            Rerouting = true
                        };

                        newAvailability.Locations.Add(newLoc);
                    }
                }

                foreach (var departureLocation in departureLocations)
                {
                    var newLoc = new AircraftAvailabilityLocation()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = newAvailability.Id,
                        LocationTreeId         = departureLocation.LocationTreeId,
                        IsForDeparture         = true,
                        Rerouting = false
                    };

                    newAvailability.Locations.Add(newLoc);
                }

                foreach (var arrivalLocation in arrivalLocations)
                {
                    var newLoc = new AircraftAvailabilityLocation()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = newAvailability.Id,
                        LocationTreeId         = arrivalLocation.LocationTreeId,
                        IsForDeparture         = false,
                        Rerouting = false
                    };

                    newAvailability.Locations.Add(newLoc);
                }

                newAvailability.Periods = new List <AircraftAvailabilityPeriod>();

                foreach (var availableDate in availabileDates)
                {
                    newAvailability.Periods.Add(new AircraftAvailabilityPeriod()
                    {
                        Id = Guid.NewGuid(),
                        AircraftAvailabilityId = newAvailability.Id,
                        From = availableDate.From,
                        To   = availableDate.To
                    });
                }

                dbContext.AircraftsAvailability.Add(newAvailability);
                dbContext.SaveChanges();

                return(result);
            }
        }