示例#1
0
        public AirItinerary GetRandomItinerary(string fromAirport, string toAirport, DateTime dateTime)
        {
            var itinerary = new AirItinerary
                                {
                                    AirFare = new AirFare
                                                  {

                                                  },
                                    Flights = new List<Flight>(),
                                };

            int flightNum = Rand.Next(1, 4);

            for (int number = 0; number < flightNum; number++)
            {
                int layoverMinutes = Rand.Next(60, 240);
                itinerary.Flights.Add(
                    GetRandomFlight(
                        number == 0 ? fromAirport : itinerary.Flights[itinerary.Flights.Count - 1].ToAirportCode,
                        flightNum > number + 1
                            ? _airportCityDictionary.ElementAt(Rand.Next(_airportCityDictionary.Count)).Key
                            : toAirport,
                        number == 0
                            ? dateTime
                            : itinerary.Flights[itinerary.Flights.Count - 1].ArrivalDateTime.AddMinutes(layoverMinutes),
                        0));

            }
            itinerary.Provider = itinerary.Flights[0].AirlineName;
            decimal baseFare = decimal.Round(new decimal(Rand.Next(1000, 3000)), 2);
            var passengerFare = new PassengerFare
                                    {
                                        BaseFare = baseFare,
                                        Markups = new List<FareComponent>
                                                      {
                                                          new FareComponent
                                                              {
                                                                  Amount = baseFare*15/100,
                                                                  Name = "Markup",
                                                                  Type = "Markup"
                                                              }
                                                      },
                                        Fees = new List<FareComponent>
                                                   {
                                                       new FareComponent
                                                           {Amount = 250, Name = "Service Fee", Type = "Fee"}
                                                   },
                                        Taxes = new List<FareComponent>
                                                    {
                                                        new FareComponent
                                                            {
                                                                Amount = decimal.Round(baseFare*125/1000),
                                                                Name = "Tax",
                                                                Type = "Tax"
                                                            }
                                                    }
                                    };

            itinerary.AirFare.PassengerFares = new List<PassengerFare>
                                                   {
                                                       passengerFare
                                                   };
            return itinerary;
        }
        private static bool SavePassengerFare(int flightId, PassengerFare passengerFare)
        {
            var db = new MySqlDatabase(DbConfiguration.ReservationDB);
            var cmd = CommandBuilder.BuildInsertPassengerFareCommand(flightId, passengerFare.PassengerType,
                                                                     passengerFare.Quantity,
                                                                     passengerFare.ClassOfService,
                                                                     passengerFare.FareBasisCode, passengerFare.Currency,
                                                                     passengerFare.BaseFare,
                                                                     passengerFare.TotalTax, passengerFare.TotalFees,
                                                                     passengerFare.TotalMarkup, passengerFare.TotalFare,
                                                                     db.Connection);
            db.ExecuteNonQuery(cmd);

            var components = new List<FareComponent>();

            components.AddRange(passengerFare.Fees);
            components.AddRange(passengerFare.Markups);
            components.AddRange(passengerFare.Taxes);

            return components.TrueForAll(x => SaveFareComponent(flightId, passengerFare.PassengerType, x));
        }
        private static AirFare ParsePassengerFareBreadowns(JetModel.PTCFareBreakdownType[] fareBreakdown, int adultCount, int childCount, int infantCount, bool useQuantityFromResponse)
        {
            if (fareBreakdown == null || fareBreakdown.Length == 0)
                return null;
            AirFare airFare = new AirFare();
            airFare.PassengerFares = new List<PassengerFare>();
            foreach (JetModel.PTCFareBreakdownType paxFbt in fareBreakdown)
            {
                if (paxFbt.PassengerFare == null) return null;
                PassengerFare paxFare = new PassengerFare();
                paxFare.PassengerType = ParsePassengerCode(paxFbt.PassengerTypeQuantity.Code);
                if(useQuantityFromResponse)
                {
                    paxFare.Quantity = Int32.Parse(paxFbt.PassengerTypeQuantity.Quantity);
                }
                else
                {
                    if (paxFare.PassengerType == PassengerType.Adult)
                        paxFare.Quantity = adultCount;
                    else if (paxFare.PassengerType == PassengerType.Child)
                        paxFare.Quantity = childCount;
                    else if (paxFare.PassengerType == PassengerType.Infant)
                        paxFare.Quantity = infantCount;
                }

                paxFare.BaseFare = paxFbt.PassengerFare.BaseFare.Amount;
                paxFare.Currency = paxFbt.PassengerFare.BaseFare.CurrencyCode;
                paxFare.Taxes = new List<FareComponent>();
                if (paxFbt.PassengerFare.Taxes != null)
                {
                    foreach (JetModel.AirTaxType tax in paxFbt.PassengerFare.Taxes)
                    {
                        FareComponent taxComponant = new FareComponent()
                                                         {
                                                             Amount = tax.Amount,
                                                             Type = tax.TaxCode
                                                         };
                        paxFare.Taxes.Add(taxComponant);
                    }
                }
                if (paxFbt.FareBasisCodes != null)
                {
                    foreach (string code in paxFbt.FareBasisCodes)
                    {
                        paxFare.FareBasisCode = (!string.IsNullOrEmpty(paxFare.FareBasisCode) ? paxFare.FareBasisCode + "," : string.Empty) + code;
                    }
                }
                if (paxFbt.FareInfo != null)
                {
                    foreach (JetModel.FareReference info in paxFbt.FareInfo[0].FareReference)
                    {
                        paxFare.ClassOfService = (!string.IsNullOrEmpty(paxFare.ClassOfService) ? paxFare.ClassOfService + "," : string.Empty) +
                                         info.ResBookDesigCode;
                        paxFare.CabinClass = (!string.IsNullOrEmpty(paxFare.CabinClass) ? paxFare.CabinClass + "," : string.Empty) + info.Value;
                    }
                }
                airFare.PassengerFares.Add(paxFare);
            }
            return airFare;
        }