public FlightViewModel(FlightSummary summary, IFlightAcademyClient flightAcademyClient, ContentMatcher matcher) { this.summary = summary; this.matcher = matcher; LoadItems = ReactiveCommand.CreateFromObservable(() => Load().ToList()); LoadItems.ThrownExceptions.Subscribe(x => { }); items = LoadItems.ToProperty(this, x => x.Items); }
public FlightViewModel(FlightSummary summary, IMediaStore matcher, IViewModelFactory viewModelFactory) { this.summary = summary; LoadItems = ReactiveCommand.CreateFromObservable(() => matcher .RecordingsBetween(this.summary.Date.ToInterval(this.summary.TotalRunTime)) .SelectMany(file => viewModelFactory.CreateFlightContentViewModel(summary.Id, file)).ToList()); items = LoadItems.ToProperty(this, x => x.Items); isBusy = LoadItems.IsExecuting.ToProperty(this, x => x.IsBusy); Play = ReactiveCommand.CreateFromObservable((FlightContentViewModel e) => e.PlayCommand.Execute()); }
public FlightSummary Process(ScheduledFlight scheduledFlight, Passenger passenger) { var output = new FlightSummary(); if (passenger.Type == PassengerType.Discounted) { output.ProfitFromFlight = scheduledFlight.FlightRoute.BasePrice / 2; } return(output); }
public FlightSummary Process(ScheduledFlight scheduledFlight, Passenger passenger) { var output = new FlightSummary(); if (passenger.Type == PassengerType.AirlineEmployee) { output.TotalExpectedBaggage = 1; } return(output); }
public FlightSummary Process(ScheduledFlight scheduledFlight, Passenger passenger) { var output = new FlightSummary(); if (passenger.Type == PassengerType.General) { output.ProfitFromFlight = scheduledFlight.FlightRoute.BasePrice; output.TotalExpectedBaggage = 1; } return(output); }
/// <summary> /// To get consolidated summary report of a flight /// </summary> /// <returns></returns> public IFlightSummary GetFlightSummaryReport() { var flightReport = new FlightSummary() { AirlinePassengerCount = GetPassengerCountByPassengerType("airline"), //TODO : modify it to read from Passenger Enum Type CanFlightProceed = CanFlightProceed(), GeneralPassengerCount = GetPassengerCountByPassengerType("general"), LoyaltyPassengerCount = GetPassengerCountByPassengerType("loyalty"), TotalAdjustedRevenue = GetTotalAdjustedRevenue(), TotalCostOfFlight = GetTotalCostOfFlight(), TotalLoyaltyPointsRedeemed = GetTotalLoyaltyPointsRedeemed(), TotalNumberOfBags = GetTotalNumberOfBags(), TotalPassengerCount = GetTotalNumberOfPassenger(), TotalUnadjustedTicketRevenue = GetTotalUnadjustedTicketRevenue(), DiscountedPassengerCount = GetPassengerCountByPassengerType("discounted") }; ; return(flightReport); }
public FlightSummary Process(ScheduledFlight scheduledFlight, Passenger passenger) { var output = new FlightSummary(); if (passenger.Type == PassengerType.LoyaltyMember) { if (passenger.IsUsingLoyaltyPoints) { var loyaltyPointsRedeemed = Convert.ToInt32(Math.Ceiling(scheduledFlight.FlightRoute.BasePrice)); passenger.LoyaltyPoints -= loyaltyPointsRedeemed; output.TotalLoyaltyPointsRedeemed += loyaltyPointsRedeemed; } else { output.TotalLoyaltyPointsAccrued += scheduledFlight.FlightRoute.LoyaltyPointsGained; output.ProfitFromFlight += scheduledFlight.FlightRoute.BasePrice; } output.TotalExpectedBaggage = 2; } return(output); }
public (bool isValid, List <string> messages) Validate(FlightSummary flightSummary, ScheduledFlight scheduledFlight) { var isValid = flightSummary.SeatsTaken < scheduledFlight.Aircraft.NumberOfSeats; var messages = new List <string>(); if (!isValid) { var possiblePlanes = _planeRepository.GetSet() .Where(x => x.NumberOfSeats > flightSummary.SeatsTaken) .ToList(); if (possiblePlanes.Count > 0) { messages.Add("Other more suitable aircraft are:"); possiblePlanes.ForEach(p => { messages.Add($"{p.Name} could handle this flight."); }); } } return(isValid, messages); }
public Task <FlightViewModel> CreateFlightViewModel(FlightSummary summary) { return(Task.FromResult(new FlightViewModel(summary, mediaStore, this))); }
public (bool isValid, List <string> messages) Validate(FlightSummary flightSummary, ScheduledFlight scheduledFlight) => (flightSummary.SeatsTaken / (double)scheduledFlight.Aircraft.NumberOfSeats > scheduledFlight.FlightRoute.MinimumTakeOffPercentage, null);
public (bool isValid, List <string> messages) Validate(FlightSummary flightSummary, ScheduledFlight scheduledFlight) => (flightSummary.ProfitSurplus > 0, null);
public string GetSummary() { var flightsummary = new FlightSummary(); var result = new StringBuilder(); result.Append("Flight summary for " + _scheduledFlight.FlightRoute.Title); foreach (var p in _scheduledFlight.Passengers) { foreach (var s in _passengerSummaries) { var output = s.Process(_scheduledFlight, p); flightsummary = flightsummary + output; } // we add them for all types ?! flightsummary.CostOfFlight += _scheduledFlight.FlightRoute.BaseCost; flightsummary.SeatsTaken++; } result.Append(_verticalWhiteSpace); result.Append("Total passengers: " + flightsummary.SeatsTaken); result.Append(_newLine); result.Append(Indentation + "General sales: " + _scheduledFlight.Passengers.Count(p => p.Type == PassengerType.General)); result.Append(_newLine); result.Append(Indentation + "Loyalty member sales: " + _scheduledFlight.Passengers.Count(p => p.Type == PassengerType.LoyaltyMember)); result.Append(_newLine); result.Append(Indentation + "Airline employee comps: " + _scheduledFlight.Passengers.Count(p => p.Type == PassengerType.AirlineEmployee)); // we don't want to change the output in case we don't have any discounted members var discountedPassengers = _scheduledFlight.Passengers.Count(p => p.Type == PassengerType.Discounted); if (discountedPassengers > 0) { result.Append(_newLine); result.Append(Indentation + "Discounted member sales: " + discountedPassengers); } result.Append(_verticalWhiteSpace); result.Append("Total expected baggage: " + flightsummary.TotalExpectedBaggage); result.Append(_verticalWhiteSpace); result.Append("Total revenue from flight: " + flightsummary.ProfitFromFlight); result.Append(_newLine); result.Append("Total costs from flight: " + flightsummary.CostOfFlight); result.Append(_newLine); var surplusMessage = (flightsummary.ProfitSurplus > 0 ? "Flight generating profit of: " : "Flight losing money of: "); result.Append(surplusMessage + flightsummary.ProfitSurplus); result.Append(_verticalWhiteSpace); result.Append("Total loyalty points given away: " + flightsummary.TotalLoyaltyPointsAccrued + _newLine); result.Append("Total loyalty points redeemed: " + flightsummary.TotalLoyaltyPointsRedeemed + _newLine); result.Append(_verticalWhiteSpace); var validationMessage = new List <string>(); var isValid = true; foreach (var v in _flightValidators) { var(vIsValid, vMessage) = v.Validate(flightsummary, _scheduledFlight); isValid = isValid && vIsValid; if (vMessage != null) { validationMessage.AddRange(vMessage); } } result.Append(isValid ? "THIS FLIGHT MAY PROCEED" : "FLIGHT MAY NOT PROCEED"); validationMessage?.ForEach(m => { result.Append(_newLine); result.Append(m); }); return(result.ToString()); }