public async Task <IActionResult> Post(DebtPaymentViewModel model) { if (ModelState.IsValid) { // Check the debt var debt = await _db.Debts.FindAsync(model.DebtId); if (debt == null) { return(NotFound()); } // Check the total of the debt var totalPayments = _db.DebtPayment.Where(d => d.DebtId == model.DebtId).Sum(d => d.Amount); if ((totalPayments + model.Amount) > debt.Amount) { return(BadRequest(new { Message = $"Total amount of the debt is {debt.Amount} and with the current payment the total will be higher than the debt amount", IsSuccess = false })); } var debtPayment = await _db.DebtPayment.AddAsync(new DebtPayment { Amount = model.Amount, CreatedDate = DateTime.UtcNow, DebtId = model.DebtId, PaymentDate = model.PaymentDate.ToUniversalTime(), Id = Guid.NewGuid().ToString() }); if ((model.Amount + totalPayments) == debt.Amount) { debt.IsPaid = true; } await _db.SaveChangesAsync(); debtPayment.Entity.Debt = null; return(Ok(new HttpSingleResponse <DebtPayment> { Message = "Debt payment added successfully", IsSuccess = true, Value = debtPayment.Entity })); } return(BadRequest(new { Message = "Some properties are not valid", IsSuccess = false })); }
public async Task <IActionResult> Put(DebtPaymentViewModel model) { if (ModelState.IsValid) { // Get the debt var debt = await _db.Debts.FindAsync(model.DebtId); if (debt == null) { return(NotFound()); } // Check the total of the debt var totalPayments = _db.DebtPayment.Where(d => d.DebtId == model.DebtId && d.Id != model.Id).Sum(d => d.Amount); if ((totalPayments + model.Amount) > debt.Amount) { return(BadRequest(new { Message = $"Total amount of the debt is {debt.Amount} and with the current payment the total will be higher than the debt amount", IsSuccess = false })); } var payment = await _db.DebtPayment.FindAsync(model.Id); if (payment == null) { return(NotFound()); } if ((payment.Amount + totalPayments) == debt.Amount) { debt.IsPaid = true; } // update the property payment.Amount = model.Amount; payment.PaymentDate = model.PaymentDate.ToUniversalTime(); await _db.SaveChangesAsync(); return(Ok(new HttpSingleResponse <DebtPayment> { IsSuccess = true, Message = "Debt payment edited", Value = payment })); } return(BadRequest(new { Message = "Some properties are not valid", IsSuccess = false })); }