/// <summary>
 /// Установка определенной скидки на строку заказа с прикреплением указанного основания скидки
 /// </summary>
 /// <param name="reason">Основание скидки</param>
 /// <param name="discount">Скидка</param>
 /// <param name="unit">Скидка в процентах или рублях</param>
 /// <param name="orderItem">Строка заказа</param>
 private void SetCustomDiscount(DiscountReason reason, decimal discount, DiscountUnits unit, OrderItem orderItem)
 {
     orderItem.IsDiscountInMoney = unit == DiscountUnits.money;
     orderItem.DiscountSetter    = discount;
     orderItem.DiscountReason    = reason;
 }
 /// <summary>
 /// Устанавливает основание скидки с введенными значениями в рублях или процентах для всего заказа
 /// </summary>
 /// <param name="reason">Основание скидки</param>
 /// <param name="discount">Скидки</param>
 /// <param name="unit">Скидка в процентах или рублях</param>
 /// <param name="orderItems">Список строк заказа</param>
 public void SetCustomDiscountForOrder(DiscountReason reason, decimal discount, DiscountUnits unit, IList <OrderItem> orderItems)
 {
     foreach (var item in orderItems)
     {
         SetCustomDiscountForOrderItem(reason, discount, unit, item);
     }
 }
        /// <summary>
        /// Установка определенной скидки на строку заказа с прикреплением указанного основания скидки,
        /// после проверки возможности этого действия
        /// </summary>
        /// <param name="reason">Основание скидки</param>
        /// <param name="discount">Скидка</param>
        /// <param name="unit">Скидка в процентах или рублях</param>
        /// <param name="orderItem">Строка заказа</param>
        private void SetCustomDiscountForOrderItem(DiscountReason reason, decimal discount, DiscountUnits unit, OrderItem orderItem)
        {
            if (!CanSetDiscount(reason, orderItem))
            {
                return;
            }

            SetCustomDiscount(reason, discount, unit, orderItem);
        }