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 }); }
public ScheduledFlight(FlightRoute flightRoute, FlightRuleService flightRuleService, AvailablePlaneService availablePlaneService) { FlightRoute = flightRoute; FlightRuleService = flightRuleService; AvailablePlaneService = availablePlaneService; Passengers = new List <Passenger>(); }
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); }