public void update(MoneyBill moneyBill) { _context.Update(moneyBill); _context.SaveChanges(); }
public double withdrawMoney(double value) { double withdrawValue = value; double remainder = 0; if (!_moneyBillRepository.list().Any()) //so cria se não existir { MoneyBill moneyBill100 = new MoneyBill(); moneyBill100.value = 100.0; _moneyBillRepository.update(moneyBill100); MoneyBill moneyBill50 = new MoneyBill(); moneyBill50.value = 50.0; _moneyBillRepository.update(moneyBill50); MoneyBill moneyBill20 = new MoneyBill(); moneyBill20.value = 20.0; _moneyBillRepository.update(moneyBill20); MoneyBill moneyBill5 = new MoneyBill(); moneyBill5.value = 5.0; _moneyBillRepository.update(moneyBill5); MoneyBill moneyBill2 = new MoneyBill(); moneyBill2.value = 2.0; _moneyBillRepository.update(moneyBill2); } var moneyBillsList = new List <MoneyBill>(); foreach (var moneyBill in _moneyBillRepository.list()) { moneyBillsList.Add(moneyBill); } for (var i = 0; i < moneyBillsList.Count; i++) { if (value == moneyBillsList[i].value) { //se o valor do saque for igual ao value da nota moneyBillsList[i].quantity += 1; value -= moneyBillsList[i].value; _moneyBillRepository.update(moneyBillsList[i]); i = -1; } else if (value == 6) { //se o valor da retirada for impar, tenta tirar o 5 primeiro moneyBillsList[4].quantity += 1; value -= moneyBillsList[4].value; _moneyBillRepository.update(moneyBillsList[4]); } else if (value > moneyBillsList[i].value) { //se o valor do saque for maior, adiciona essa nota para ser sacada moneyBillsList[i].quantity += 1; value -= moneyBillsList[i].value; _moneyBillRepository.update(moneyBillsList[i]); i = -1; } } if (value != 0) { //se valor inicial do saque - o valor atual do saque for diferente de 0: tem resto remainder = value; for (var j = 0; j < moneyBillsList.Count(); j++) { if (remainder >= moneyBillsList[j].value) { //ve se tem como tirar alguma nota com o resto moneyBillsList[j].quantity += 1; remainder -= moneyBillsList[j].value; _moneyBillRepository.update(moneyBillsList[j]); } else { break; } } //retorna o valor de saque (o resto que sobrou não foi retirado) return(withdrawValue - remainder); } else { //retorna o valor de saque (foi retirado todo o valor solicitado) return(withdrawValue); } }