Beispiel #1
0
        public string GetFareFamiliesNames()
        {
            if ((FareFamiliesDescriptions == null || !FareFamiliesDescriptions.Any()) ||
                (PriceBreakdown == null || !PriceBreakdown.Any()))
            {
                return(null);
            }

            var result = new StringBuilder();

            foreach (var price in PriceBreakdown)
            {
                var tariffs = price.PassengerTypePriceBreakdown.SelectMany(pf => pf.Tariffs).Cast <AirTariff>();
                foreach (var tariff in tariffs)
                {
                    var ffDescr = FareFamiliesDescriptions.Find(d => d.ID == tariff.FareFamilyDescID);
                    if (ffDescr != null)
                    {
                        result.Append(ffDescr.Name);
                    }
                    result.Append(';');
                }
            }

            return(result.ToString());
        }
Beispiel #2
0
        /// <summary>
        /// Получение тарифа для определённого пассажира из брони
        /// </summary>
        /// <param name="passengerID">ИД пассажира в брони, для которого требуется получить тариф</param>
        /// <returns>Тариф для указанного пассажира</returns>
        public BaseTariff GetTariffForPassenger(int passengerID)
        {
            if (PriceBreakdown != null && PriceBreakdown.Count > 0)
            {
                var pricePart = PriceBreakdown.Find(pb => pb.PassengerTypePriceBreakdown != null && pb.PassengerTypePriceBreakdown.Any(ptc => ptc.IsLinkedToTraveller(passengerID)));
                if (pricePart != null)
                {
                    return(pricePart.PassengerTypePriceBreakdown.Find(ptc => ptc.IsLinkedToTraveller(passengerID)).Tariffs[0]);
                }
            }

            return(null);
        }
Beispiel #3
0
        private Money GetPrice(int travellerRef, int serviceRef, Func <PassengerTypePriceBreakdown, Money> selector)
        {
            var breakdowns = PriceBreakdown
                             .Where(pb => pb.PassengerTypePriceBreakdown != null && pb.IsLinkedToService(serviceRef))
                             .SelectMany(pb => pb.PassengerTypePriceBreakdown)
                             .Where(ptpb => ptpb.IsLinkedToTraveller(travellerRef));

            if (breakdowns.Any())
            {
                return(breakdowns.Sum(selector));
            }

            return(null);
        }
Beispiel #4
0
        /// <summary>
        /// Получение тарифа для определённого сегмента услуги, в случае если подобная привязка допустима
        /// </summary>
        /// <param name="segmentID">ИД сегмента в услуге, для которого требуется получить тариф</param>
        /// <returns>Тариф для указанной услуги</returns>
        public BaseTariff GetTariffForSegment(int segmentID)
        {
            if (PriceBreakdown != null && PriceBreakdown.Count > 0)
            {
                var pricePart = PriceBreakdown.Find(pb => pb.IsLinkedToSegment(segmentID));
                if (pricePart != null)
                {
                    if (pricePart.PassengerTypePriceBreakdown != null && pricePart.PassengerTypePriceBreakdown.Count > 0)
                    {
                        return(pricePart.PassengerTypePriceBreakdown[0].GetTariffForSegment(segmentID));
                    }
                }
            }

            return(null);
        }
Beispiel #5
0
        /// <summary>
        /// Вычисление и проставление полных стоимостей цены и её частей на основании подробностей цены
        /// </summary>
        /// <param name="excludedServicesID">ИД услуг, которые необходимо исключить из полной стоимости</param>
        public void CalculateTotalPrices(params int[] excludedServicesID)
        {
            if (PriceBreakdown != null)
            {
                foreach (var pricePart in PriceBreakdown)
                {
                    if (!IsExcluded(pricePart, excludedServicesID))
                    {
                        pricePart.CalculateTotalPrice();
                    }
                }

                TotalPrice = new Money(
                    PriceBreakdown.FindAll(pb => !IsExcluded(pb, excludedServicesID)).Sum(pb => pb.TotalPrice.Value),
                    PriceBreakdown[0].TotalPrice.Currency);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Получение тарифа для определённого сегмента услуги, в случае если подобная привязка допустима
        /// </summary>
        /// <param name="segmentID">ИД сегмента в услуге, для которого требуется получить тариф</param>
        /// <returns>Тариф для указанной услуги</returns>
        public BaseTariff GetTariffForSegment(int segmentID)
        {
            var pricePart = PriceBreakdown.Find(pb => pb.IsLinkedToSegment(segmentID));

            if (pricePart != null)
            {
                if (pricePart.PassengerTypePriceBreakdown != null)
                {
                    foreach (var passTypePriceBreakdown in pricePart.PassengerTypePriceBreakdown)
                    {
                        var airTariff = passTypePriceBreakdown.GetTariffForSegment(segmentID);
                        if (airTariff != null)
                        {
                            return(airTariff);
                        }
                    }
                }
            }

            return(null);
        }
Beispiel #7
0
 /// <summary>
 /// Получение эквивалентной стоимости для 1 пассажира определённого типа
 /// </summary>
 /// <param name="passengerID">ИД пассажира, для которого требуется получить стоимость</param>
 /// <returns>Стоимость для указанного пассажира. null если нет цены для такого пассажира</returns>
 public Money GetEquivePrice(int passengerID)
 {
     if (PriceBreakdown != null && PriceBreakdown.Any(pi => pi.PassengerTypePriceBreakdown != null && pi.PassengerTypePriceBreakdown.Any(pf => pf.IsLinkedToTraveller(passengerID))))
     {
         Money result = null;
         foreach (var price in PriceBreakdown.FindAll(pb => pb.PassengerTypePriceBreakdown != null && pb.PassengerTypePriceBreakdown.Any(pf => pf.IsLinkedToTraveller(passengerID))))
         {
             var passTypePrice = price.PassengerTypePriceBreakdown.Find(pf => pf.IsLinkedToTraveller(passengerID));
             if (result == null)
             {
                 result = passTypePrice.EquiveFare;
             }
             else
             {
                 result += passTypePrice.EquiveFare;
             }
         }
         return(result);
     }
     else
     {
         return(null);
     }
 }
Beispiel #8
0
 private bool IsExcluded(PriceBreakdown pricePart, int[] excludedServicesID)
 {
     return(excludedServicesID != null && excludedServicesID.Any(id => pricePart.IsLinkedToService(id)));
 }
Beispiel #9
0
 /// <summary>
 /// Получение всех брекдаунов цен для услуги
 /// </summary>
 /// <param name="serviceID">ИД услуги</param>
 /// <returns>Брекдауны для указанной усулги, пустой массив если ни одного не найдено</returns>
 public List <PriceBreakdown> GetServicePrice(int serviceID)
 {
     return(PriceBreakdown.FindAll(pb => pb.IsLinkedToService(serviceID)));
 }
Beispiel #10
0
 private IEnumerable <PriceBreakdown> GetPriceBreakdownsForCalculatingTotalPrice()
 {
     return(PriceBreakdown.Where(p => !p.IncludedInMainServicePrice));
 }
Beispiel #11
0
 private bool IsExcluded(PriceBreakdown pricePart, IEnumerable <int> excludedServicesID)
 {
     return(excludedServicesID.Any(id => pricePart.IsLinkedToService(id)));
 }
        public PriceBreakdown DeepCopy()
        {
            PriceBreakdown result = new PriceBreakdown();

            result.Brand = Brand;
            result.IncludedInMainServicePrice = IncludedInMainServicePrice;
            result.PrivateFareInd             = PrivateFareInd;
            result.Refundable        = Refundable;
            result.ValidatingCompany = ValidatingCompany;
            result.PricingData       = PricingData?.Copy();
            result.PricingDebug      = PricingDebug?.DeepCopy();

            if (TotalPrice != null)
            {
                result.TotalPrice = new Money(TotalPrice);
            }

            if (AgencyMarkup != null)
            {
                result.AgencyMarkup = new Money(AgencyMarkup);
            }

            if (RoundingChargePart != null)
            {
                result.RoundingChargePart = new Money(RoundingChargePart);
            }
            ;
            if (DiscountByPromoAction != null)
            {
                result.DiscountByPromoAction = new Money(DiscountByPromoAction);
            }

            if (SubAgentMarkup != null)
            {
                result.SubAgentMarkup = new Money(SubAgentMarkup);
            }

            if (!ChargeBreakdown.IsNullOrEmpty())
            {
                result.ChargeBreakdown = new ChargePartList(ChargeBreakdown.Select(c => c.Copy()));
            }

            if (!SubAgentChargeBreakdown.IsNullOrEmpty())
            {
                result.SubAgentChargeBreakdown = new ChargePartList(SubAgentChargeBreakdown.Select(s => s.Copy()));
            }

            if (!ServiceRef.IsNullOrEmpty())
            {
                result.ServiceRef = new RefList <int>(ServiceRef);
            }

            if (!SegmentRef.IsNullOrEmpty())
            {
                result.SegmentRef = new RefList <int>(SegmentRef);
            }

            if (!PassengerTypePriceBreakdown.IsNullOrEmpty())
            {
                result.PassengerTypePriceBreakdown = new PassengerTypePriceBreakdownList(PassengerTypePriceBreakdown.Select(p => p.Copy()));
            }

            return(result);
        }