Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
        }
Пример #9
0
 public Task <FlightViewModel> CreateFlightViewModel(FlightSummary summary)
 {
     return(Task.FromResult(new FlightViewModel(summary, mediaStore, this)));
 }
Пример #10
0
 public (bool isValid, List <string> messages) Validate(FlightSummary flightSummary, ScheduledFlight scheduledFlight)
 => (flightSummary.SeatsTaken / (double)scheduledFlight.Aircraft.NumberOfSeats > scheduledFlight.FlightRoute.MinimumTakeOffPercentage, null);
Пример #11
0
 public (bool isValid, List <string> messages) Validate(FlightSummary flightSummary, ScheduledFlight scheduledFlight)
 => (flightSummary.ProfitSurplus > 0, null);
Пример #12
0
        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());
        }