Example #1
0
            /// <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);
            }
Example #2
0
            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);
            }