/// <summary>
        /// Обратный перевод монет между кошельками
        /// </summary>
        /// <param name="otherPurse">Другой баланс</param>
        /// <param name="coins">Монеты разного номинала</param>
        /// <returns>Признак успешной операции</returns>
        public bool PaymentBack(IBaseCoinsRepository otherPurse, Dictionary <CoinType, int> coins)
        {
            bool            overDraftIsNotNeed = true;
            List <CoinType> keys = coins.Keys.ToList();

            foreach (CoinType key in keys)
            {
                if (key == CoinType.unknown)
                {
                    continue;
                }
                int farCoinQuantity = otherPurse.Coins[key].quantity;
                if (farCoinQuantity < coins[key])
                {
                    coins[key] -= farCoinQuantity;
                    SubCoins(otherPurse, key, farCoinQuantity);
                    overDraftIsNotNeed = false;
                }
                else
                {
                    SubCoins(otherPurse, key, coins[key]);
                    coins[key] = 0;
                }
            }
            return(overDraftIsNotNeed);
        }
 /// <summary>
 /// Получить монеты из другого баланса
 /// </summary>
 /// <param name="fromPurse">Опустошаемый кошелек</param>
 /// <param name="coinType">Тип монеты</param>
 /// <param name="quantity">Количество монет указанного номинала</param>
 /// <returns>Признак успешной операции</returns>
 protected bool SubCoins(IBaseCoinsRepository fromPurse, CoinType coinType, int quantity)
 {
     if (fromPurse.SubCoins(coinType, quantity))
     {
         return(AddCoins(coinType, quantity));
     }
     return(false);
 }
 /// <summary>
 /// Перевести монеты на другой баланс
 /// </summary>
 /// <param name="toPurse">Пополняемый кошелек</param>
 /// <param name="coinType">Тип монеты</param>
 /// <param name="quantity">Количество монет указанного номинала</param>
 /// <returns>Признак успешной операции</returns>
 protected bool AddCoins(IBaseCoinsRepository toPurse, CoinType coinType, int quantity)
 {
     if (SubCoins(coinType, quantity))
     {
         return(toPurse.AddCoins(coinType, quantity));
     }
     return(false);
 }