/// <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); }