/// <summary>
 /// 取得本站與到達站間的票價
 /// </summary>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static int GetFaresPrice(this Station THIS, Station arrival, TrainLevels trainType, FareTypes fareType) {
     return THIS.GetFaresPriceAsync(arrival, trainType, fareType).GetAwaiter().GetResult();
 }
        public List <FareTypes> BuildFares(Flight flightItem, bool IsRerpice)
        {
            List <FareTypes> fareTypes = new List <FareTypes>();

            if (flightItem != null)
            {
                var fTypes = (flightItem.FlightFares.OrderByDescending(x => x.Cabin).ThenBy(x => x.WebFareAmount).GroupBy(x => new { x.FareTypeId, x.SolutionID }).ToList());
                if (fTypes != null)
                {
                    foreach (var fType in fTypes)
                    {
                        FareTypes fareType = new FareTypes();
                        fareType.FareTypeID               = fType.FirstOrDefault().FareTypeName;
                        fareType.FareTypeName             = fType.FirstOrDefault().FareTypeName;
                        fareType.ContainsCircularFlight   = IsCircularFlight(flightItem).Value;
                        fareType.ContainsConnectionFlight = IsConnectionFlight(flightItem).Value;
                        fareType.FareInformation          = BuildFlightFareInformation(fType, IsRerpice);
                        fareType.Fare = BuildFlightFare(fareType.FareInformation);
                        //fareType.Fare.SolutionId = Convert.ToString(fType.Key.SolutionID);
                        //fareType.Fare.Combinables = BuildCombinableList(fType.Key.SolutionID);
                        fareType.FareCarrier = fType.FirstOrDefault().FareCarrier;
                        //fareType.TicketDesignator = fType.FirstOrDefault().TicketDesignator;
                        //fareType.HashCode = fType.FirstOrDefault().HashCode;
                        fareType.LfId = Convert.ToString(flightItem.LFID);
                        //fareType.PfIds = GetPhysicalFlightIds(flightItem, fType.FirstOrDefault().Bookingcodes, fType.FirstOrDefault().Cabin);
                        fareType.Route = String.Format("{0}_{1}", flightItem.Origin, flightItem.Destination);
                        fareType.Cabin = (fType.FirstOrDefault().FareTypeName.IndexOf('J') != -1 ? Cabin.business : fType.FirstOrDefault().FareTypeName.IndexOf('Y') != -1 ? Cabin.economy : fType.FirstOrDefault().FareTypeName.IndexOf('F') != -1 ? Cabin.first : Cabin.first);
                        //if (fType.FirstOrDefault(x => x.PassengerTypeId == Enums.PassengerTypes.Adult) != null)
                        //{
                        //    fareType.IncludedServices = BuildIncludedServices(fType.FirstOrDefault(a => a.PassengerTypeId == Enums.PassengerTypes.Adult) ?? fType.FirstOrDefault());
                        //}
                        //else if (IsRerpice && fType.FirstOrDefault(x => x.PassengerTypeId == Enums.PassengerTypes.Child) != null)
                        //{
                        //    fareType.IncludedServices = BuildIncludedServices(fType.FirstOrDefault(a => a.PassengerTypeId == Enums.PassengerTypes.Child) ?? fType.FirstOrDefault());
                        //}
                        fareType.IsSoldOut        = fType.FirstOrDefault().IsSoldOut();
                        fareType.Fare.IsPromoFare = fType.FirstOrDefault().IsPromoFare;
                        //fareType.Fare.IsPromoCodeApplied = fType.FirstOrDefault().IsPromoCodeApplied;
                        //fareType.Fare.IsStopOverFare = (fType.FirstOrDefault(a => a.PassengerTypeId == Enums.PassengerTypes.Adult) ?? fType.FirstOrDefault()).IsStopOverFare;
                        fareType.SeatsLeft = fType.FirstOrDefault().SeatsAvailable;
                        //if (fareType.Cabin == Cabin.business && fType.FirstOrDefault().SeatsAvailable <= _settingsTasks.SeatThresholdBusiness)
                        //{
                        //    fareType.SeatsLeft = fType.FirstOrDefault().SeatsAvailable;
                        //}
                        //else if (fareType.Cabin == Cabin.economy && fType.FirstOrDefault().SeatsAvailable <= _settingsTasks.SeatThresholdEconomy)
                        //{
                        //    fareType.SeatsLeft = fType.FirstOrDefault().SeatsAvailable;
                        //}
                        fareType.SecureHash = new HashService().GenerateHash(new
                        {
                            LfId            = fareType.LfId,
                            FareTypeID      = fareType.FareTypeID,
                            FareTypeName    = fareType.FareTypeName,
                            Cabin           = fareType.Cabin,
                            Fare            = fareType.Fare,
                            FareInformation = fareType.FareInformation,
                            scToken         = this.IsInclude && this._securityData != null && !string.IsNullOrEmpty(this._securityData.SabreToken) ? this._securityData.SabreToken : string.Empty
                        });

                        fareType.OrderId = getFareOrderId(fType.FirstOrDefault().FareBrandId);
                        fareTypes.Add(fareType);
                    }
                }
            }

            return(fareTypes.OrderBy(a => a.OrderId).ToList());
        }
Exemple #3
0
 /// <summary>
 /// 取得本站與到達站間的票價
 /// </summary>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static int GetFaresPrice(this Station THIS, Station arrival, TrainLevels trainType, FareTypes fareType)
 {
     return(THIS.GetFaresPriceAsync(arrival, trainType, fareType).GetAwaiter().GetResult());
 }
 /// <summary>
 /// 非同步取得本站與到達站間的票價
 /// </summary>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static async Task<int> GetFaresPriceAsync(this Station THIS, Station arrival, TrainLevels trainType, FareTypes fareType) {
     return await Fare.GetFaresPriceAsync(THIS, arrival, trainType, fareType);
 }
Exemple #5
0
 /// <summary>
 /// 非同步取得本站與到達站間的票價
 /// </summary>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static async Task <int> GetFaresPriceAsync(this Station THIS, Station arrival, TrainLevels trainType, FareTypes fareType)
 {
     return(await Fare.GetFaresPriceAsync(THIS, arrival, trainType, fareType));
 }
Exemple #6
0
 /// <summary>
 /// 取得兩站點間的票價
 /// </summary>
 /// <param name="starting">起始站</param>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static int GetFaresPrice(Station starting, Station arrival, TrainLevels trainType, FareTypes fareType) {
     return GetFaresPriceAsync(starting, arrival, trainType, fareType).GetAwaiter().GetResult();
 }
Exemple #7
0
 /// <summary>
 /// 非同步取得兩站點間的票價
 /// </summary>
 /// <param name="starting">起始站</param>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static async Task<int> GetFaresPriceAsync(Station starting, Station arrival, TrainLevels trainType, FareTypes fareType) {
     return (await GetFaresAsync(starting, arrival))
         .Where(x => x.TrainType == TrainLevelsConverter.Convert(trainType) && x.FareType == fareType)
         .First().Price;
 }
Exemple #8
0
 /// <summary>
 /// 取得兩站點間的票價
 /// </summary>
 /// <param name="starting">起始站</param>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static int GetFaresPrice(Station starting, Station arrival, TrainLevels trainType, FareTypes fareType)
 {
     return(GetFaresPriceAsync(starting, arrival, trainType, fareType).GetAwaiter().GetResult());
 }
Exemple #9
0
 /// <summary>
 /// 非同步取得兩站點間的票價
 /// </summary>
 /// <param name="starting">起始站</param>
 /// <param name="arrival">到達站</param>
 /// <param name="trainType">列車類型</param>
 /// <param name="fareType">票價類型</param>
 /// <returns>票價</returns>
 public static async Task <int> GetFaresPriceAsync(Station starting, Station arrival, TrainLevels trainType, FareTypes fareType)
 {
     return((await GetFaresAsync(starting, arrival))
            .Where(x => x.TrainType == TrainLevelsConverter.Convert(trainType) && x.FareType == fareType)
            .First().Price);
 }