Пример #1
0
 public Article(string name, string barCode, LogisticUnit unit, IUnitPrice price)
 {
     Name    = name;
     BarCode = barCode;
     Unit    = unit.ThrowIfNull(nameof(unit));
     Price   = price.ThrowIfNull(nameof(price));
 }
Пример #2
0
        private static double GetUnitPriceOfItem(AddItemRequestModel item)
        {
            var        UnitsFactory    = new UnitPriceFactory();
            IUnitPrice unitPriceOfItem = UnitsFactory.GetUnitPrice(item.ItemType);
            var        unitPrice       = unitPriceOfItem.GetUnitPrice();

            return(unitPrice);
        }
        /// <summary>Constructor</summary>
        /// <param name="unitPrice">Unit Price used</param>
        /// <param name="measureItem">Measure Item used</param>
        /// <param name="currencyItem">Currency Item used</param>
        /// <exception cref="PriceException">Thrown when no conversion defined between currency units</exception>
        /// <exception cref="MeasureException">Thrown when Measure Units have different types</exception>
        public ItemPrice(IUnitPrice unitPrice, IMeasureItem measureItem, ICurrencyItem currencyItem = null)
        {
            // unit calculus: [C1] = [C2/M1] * [M2 * (M1/M2)] * [C1/C2]
            // C1, C2 - currency units; M1, M2 - measure units

            Prepare(unitPrice, currencyItem);

            MeasureItem = measureItem.ThrowIfNull(nameof(measureItem));
            MeasureRate = MeasureItem.AmountOf(UnitPrice.MeasureUnit);
            Amount      = MeasureItem.Amount;
        }
        /// <summary>Constructor</summary>
        /// <param name="unitPrice">Unit Price used</param>
        /// <param name="amount">Number of Measure Units (same as MeasureUnit in unitPrice)</param>
        /// <param name="currencyItem">Currency Item used</param>
        /// <exception cref="PriceException">Thrown when no conversion defined between currency units</exception>
        public ItemPrice(IUnitPrice unitPrice, decimal amount = 1, ICurrencyItem currencyItem = null)
        {
            // unit calculus: [C1] = [C2/M1] * [M1] * [C1/C2]
            // C1, C2 - currency units; M1 - measure unit

            Prepare(unitPrice, currencyItem);

            MeasureItem = null;
            MeasureRate = amount;
            Amount      = amount;
        }
        /// <summary>Constructor helper</summary>
        /// <param name="unitPrice">Unit Price used</param>
        /// <param name="currencyItem">Currency Item used</param>
        /// <exception cref="PriceException">Thrown when no conversion defined between currency units</exception>
        private void Prepare(IUnitPrice unitPrice, ICurrencyItem currencyItem)
        {
            UnitPrice    = unitPrice.ThrowIfNull(nameof(unitPrice));
            CurrencyItem = currencyItem;

            VATrate = UnitPrice.VATrate;

            CurrencyUnit = CurrencyItem != null ? CurrencyItem.Unit : UnitPrice.CurrencyUnit;
            if (CurrencyItem != null && CurrencyItem.Base != UnitPrice.CurrencyUnit)
            {
                throw new PriceException(PriceException.NO_CURRENCY_CONVERSION);
            }
        }
        public void Setup()
        {
            _unitPrice        = new UnitPrice();
            _activePromotions = new ActivePromotions();

            _unitPrice.AddPrice('A', 50);
            _unitPrice.AddPrice('B', 30);
            _unitPrice.AddPrice('C', 20);
            _unitPrice.AddPrice('D', 15);

            _activePromotions.AddPromotions("3A", 130);
            _activePromotions.AddPromotions("2B", 45);
        }
 public PromotionEngine(IUnitPrice unitPrice, IActivePromotions activePromotions)
 {
     _unitPrice        = unitPrice;
     _activePromotions = activePromotions;
 }
 public void Cleanup()
 {
     _unitPrice        = null;
     _activePromotions = null;
     _promotionEngine  = null;
 }