public bool Withdraw(IReadOnlyCashTransaction cashTransaction) { bool isValid = true; foreach (var key in _billInventory.Keys) { isValid = isValid && (_billInventory[key] >= cashTransaction.BillCount(key)); if (isValid == false) { break; } } // Only set the inventory if the withdraw can happen. if (isValid == true) { foreach (var bill in UnitedStatesTender.GetAllDefinedTenders()) { if (_billInventory.ContainsKey(bill)) { _billInventory[bill] = _billInventory[bill] - cashTransaction.BillCount(bill); } } } return(isValid); }
public static WithdrawalResult CreateFailureResult(string failureReason, IReadOnlyCashTransaction transactionDetails) { if (string.IsNullOrWhiteSpace(failureReason)) { throw new ArgumentException("Cannont be blank or empty", nameof(failureReason)); } return(new WithdrawalResult(false, failureReason, transactionDetails)); }
public void ResetInventory(IReadOnlyCashTransaction restock) { foreach (var key in UnitedStatesTender.GetAllDefinedTenders()) { if (_billInventory.ContainsKey(key)) { _billInventory[key] = restock.BillCount(key); } } }
protected void DisplayBalance(IReadOnlyCashTransaction balance) { Console.WriteLine("Machine Balance:"); var ordered = UnitedStatesTender.GetAllDefinedTenders().OrderByDescending(tender => tender.Value); foreach (var bill in ordered) { Console.WriteLine($"${bill.Value} - {balance.BillCount(bill)}"); } }
public static WithdrawalResult CreateSuccessResult(IReadOnlyCashTransaction transactionDetails) { return(new WithdrawalResult(true, string.Empty, transactionDetails)); }
private WithdrawalResult(bool isSuccess, string failureReason, IReadOnlyCashTransaction transactionDetails) { _isSuccess = isSuccess; _failureReason = failureReason; _details = transactionDetails; }
public void Restock(IReadOnlyCashTransaction restock) { _atmInventory.ResetInventory(restock); }