/// <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> /// Получение эквивалентной стоимости для 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); } }
/// <summary> /// Получение всех брекдаунов цен для услуги /// </summary> /// <param name="serviceID">ИД услуги</param> /// <returns>Брекдауны для указанной усулги, пустой массив если ни одного не найдено</returns> public List <PriceBreakdown> GetServicePrice(int serviceID) { return(PriceBreakdown.FindAll(pb => pb.IsLinkedToService(serviceID))); }