private static Tuple <decimal, string> CalculateAgreementPriceLine(
                IEnumerable <SalesLine> salesLines,
                SalesLine salesLine,
                PriceContext priceContext,
                Dictionary <string, IList <TradeAgreement> > agreementsByItemId,
                DiscountParameters discountParameters,
                Dictionary <string, decimal> itemQuantites)
            {
                var quantity = salesLine.Quantity;

                // count all occurrences for this item if this is a transaction
                if (priceContext.PriceCalculationMode == PricingCalculationMode.Transaction)
                {
                    itemQuantites.TryGetValue(salesLine.ItemId, out quantity);

                    if (quantity == decimal.Zero)
                    {
                        quantity = 1m;
                    }
                }

                var activeDate = (salesLine.SalesDate != null) ? salesLine.SalesDate.Value : priceContext.ActiveDate;

                return(GetActiveTradeAgreementPriceAndGroup(
                           agreementsByItemId,
                           discountParameters,
                           priceContext.CurrencyCode,
                           salesLine.ItemId,
                           salesLine.OriginalSalesOrderUnitOfMeasure,
                           Discount.GetUnitOfMeasure(salesLine),
                           salesLine.Variant,
                           salesLine.UnitOfMeasureConversion,
                           quantity,
                           priceContext.CustomerAccount,
                           priceContext.CustomerPriceGroup,
                           PriceContextHelper.GetApplicablePriceGroupsForPrice(priceContext, salesLine.CatalogIds),
                           salesLines,
                           priceContext,
                           activeDate));
            }