/// <summary> /// Builds the set of pricing calculators to use to find price lines. /// </summary> /// <returns>Set of pricing calculators.</returns> private static IEnumerable <IPricingCalculator> GetPricingCalculators() { var calculators = new List <IPricingCalculator>(3); calculators.Add(TradeAgreementCalculator.CreateTradeAgreementCalculator()); calculators.Add(BasePriceCalculator.CreateBasePriceCalculator()); calculators.Add(PriceAdjustmentCalculator.CreatePriceAdjustmentCalculator()); return(calculators); }
internal static PriceResult GetActiveTradeAgreement(IPricingDataAccessor pricingDataManager, DiscountParameters priceParameters, string currencyCode, SalesLine saleItem, decimal quantity, string customerId, string customerPriceGroup, DateTimeOffset dateToCheck) { dateToCheck = saleItem.SalesDate ?? dateToCheck; IEnumerable <PriceGroup> priceGroups = pricingDataManager.GetChannelPriceGroups() as IEnumerable <PriceGroup>; HashSet <string> priceGroupIds = new HashSet <string>(priceGroups.Select(pg => pg.GroupId).Distinct(StringComparer.OrdinalIgnoreCase)); PriceResult result; ProductVariant variantLine = GetVariantFromLineOrDatabase(pricingDataManager, saleItem); variantLine = variantLine ?? new ProductVariant(); Tuple <DateTimeOffset, DateTimeOffset> dateRange = GetMinAndMaxActiveDates(new SalesLine[] { saleItem }, dateToCheck); ReadOnlyCollection <TradeAgreement> agreements = pricingDataManager.ReadPriceTradeAgreements( new HashSet <string> { saleItem.ItemId }, priceGroupIds, customerId, dateRange.Item1, dateRange.Item2, currencyCode, QueryResultSettings.AllRecords) as ReadOnlyCollection <TradeAgreement>; var agreementDict = new Dictionary <string, IList <TradeAgreement> >(StringComparer.OrdinalIgnoreCase); agreementDict.Add(saleItem.ItemId, agreements); result = TradeAgreementCalculator.GetPriceResultOfActiveTradeAgreement( agreementDict, priceParameters, currencyCode, saleItem.ItemId, saleItem.OriginalSalesOrderUnitOfMeasure, Discount.GetUnitOfMeasure(saleItem), variantLine, saleItem.UnitOfMeasureConversion, quantity, customerId, customerPriceGroup, priceGroupIds, new List <SalesLine> { saleItem }, new PriceContext(), dateToCheck); return(result); }