private static void SetupAirlineData()
        {
            _flightRuleService     = new FlightRuleService();
            _availablePlaneService = new AvailablePlaneService();

            _availablePlaneService.Planes = new List <Plane>();
            _availablePlaneService.Planes.Add(new Plane {
                Id = 124, Name = "Bombardier Q400", NumberOfSeats = 15
            });
            _availablePlaneService.Planes.Add(new Plane {
                Id = 125, Name = "ATR 640", NumberOfSeats = 20
            });

            var londonToParis = new FlightRoute("London", "Paris")
            {
                BaseCost                 = 50,
                BasePrice                = 100,
                LoyaltyPointsGained      = 5,
                MinimumTakeOffPercentage = 0.7
            };

            _scheduledFlight = new ScheduledFlight(
                londonToParis,
                _flightRuleService,
                _availablePlaneService);

            _scheduledFlight.SetAircraftForRoute(new Plane {
                Id = 123, Name = "Antonov AN-2", NumberOfSeats = 12
            });
        }
Example #2
0
 public ScheduledFlight(FlightRoute flightRoute,
                        FlightRuleService flightRuleService,
                        AvailablePlaneService availablePlaneService)
 {
     FlightRoute           = flightRoute;
     FlightRuleService     = flightRuleService;
     AvailablePlaneService = availablePlaneService;
     Passengers            = new List <Passenger>();
 }
Example #3
0
        public string GetSummary()
        {
            double costOfFlight               = 0;
            double profitFromFlight           = 0;
            var    totalLoyaltyPointsAccrued  = 0;
            var    totalLoyaltyPointsRedeemed = 0;
            var    totalExpectedBaggage       = 0;
            var    seatsTaken      = 0;
            var    employeesAboard = 0;

            var result = "Flight summary for " + FlightRoute.Title;

            foreach (var passenger in Passengers)
            {
                switch (passenger.Type)
                {
                case (PassengerType.General):
                {
                    profitFromFlight += FlightRoute.BasePrice;
                    totalExpectedBaggage++;
                    break;
                }

                case (PassengerType.LoyaltyMember):
                {
                    if (passenger.IsUsingLoyaltyPoints)
                    {
                        var loyaltyPointsRedeemed = Convert.ToInt32(Math.Ceiling(FlightRoute.BasePrice));
                        passenger.LoyaltyPoints    -= loyaltyPointsRedeemed;
                        totalLoyaltyPointsRedeemed += loyaltyPointsRedeemed;
                    }
                    else
                    {
                        totalLoyaltyPointsAccrued += FlightRoute.LoyaltyPointsGained;
                        profitFromFlight          += FlightRoute.BasePrice;
                    }
                    totalExpectedBaggage += 2;
                    break;
                }

                case (PassengerType.Discounted):
                {
                    profitFromFlight +=
                        FlightRoute.BasePrice.applyDiscount((int)DiscontType.HalfPrice);
                    break;
                }

                case (PassengerType.AirlineEmployee):
                {
                    totalExpectedBaggage += 1;
                    employeesAboard++;
                    break;
                }

                default:
                    throw new ArgumentOutOfRangeException();
                }
                costOfFlight += FlightRoute.BaseCost;
                seatsTaken++;
            }

            result += _verticalWhiteSpace;

            result += "Total passengers: " + seatsTaken;
            result += _newLine;
            result += Indentation + "General sales: " + Passengers.Count(p => p.Type == PassengerType.General);
            result += _newLine;
            result += Indentation + "Loyalty member sales: " + Passengers.Count(p => p.Type == PassengerType.LoyaltyMember);
            result += _newLine;
            result += Indentation + "Discounted sales: " + Passengers.Count(p => p.Type == PassengerType.Discounted);
            result += _newLine;
            result += Indentation + "Airline employee comps: " + Passengers.Count(p => p.Type == PassengerType.AirlineEmployee);

            result += _verticalWhiteSpace;
            result += "Total expected baggage: " + totalExpectedBaggage;

            result += _verticalWhiteSpace;

            result += "Total revenue from flight: " + profitFromFlight;
            result += _newLine;
            result += "Total costs from flight: " + costOfFlight;
            result += _newLine;

            var profitSurplus = profitFromFlight - costOfFlight;

            result += (profitSurplus > 0 ? "Flight generating profit of: " : "Flight losing money of: ") + profitSurplus;

            result += _verticalWhiteSpace;

            result += "Total loyalty points given away: " + totalLoyaltyPointsAccrued + _newLine;
            result += "Total loyalty points redeemed: " + totalLoyaltyPointsRedeemed + _newLine;

            result += _verticalWhiteSpace;

            var canFlightProceed = FlightRuleService.Get(
                profitSurplus,
                costOfFlight,
                seatsTaken,
                employeesAboard,
                Aircraft,
                FlightRoute);

            if (canFlightProceed)
            {
                result += "THIS FLIGHT MAY PROCEED";
            }
            else
            {
                result += "FLIGHT MAY NOT PROCEED";

                if (seatsTaken > Aircraft.NumberOfSeats)
                {
                    result += checkForPlanesWithMoreSeats(seatsTaken);
                }
            }

            return(result);
        }