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()); }
/// <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); }
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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); } }
private bool IsExcluded(PriceBreakdown pricePart, int[] excludedServicesID) { return(excludedServicesID != null && excludedServicesID.Any(id => pricePart.IsLinkedToService(id))); }
/// <summary> /// Получение всех брекдаунов цен для услуги /// </summary> /// <param name="serviceID">ИД услуги</param> /// <returns>Брекдауны для указанной усулги, пустой массив если ни одного не найдено</returns> public List <PriceBreakdown> GetServicePrice(int serviceID) { return(PriceBreakdown.FindAll(pb => pb.IsLinkedToService(serviceID))); }
private IEnumerable <PriceBreakdown> GetPriceBreakdownsForCalculatingTotalPrice() { return(PriceBreakdown.Where(p => !p.IncludedInMainServicePrice)); }
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); }