Похоже, вы загружаете клиента. Оплата здесь
ClientPayments clientPayment = db.ClientPayments.FirstOrDefault(cp => cp.InvoiceNumberID == id);
Теперь вы установили ссылку на новый ClientPayments, больше не загруженный
clientPayment = new ClientPayments();
Здесь вы устанавливаете InvoiceNumberID, но не более
clientPayment.InvoiceNumberID = id;
Теперь ваша настройка TotalPayments для InvoiceAmount (clientPayment.PaymentAmount равна 0 или равна нулю)
var TotalPayments = (clientPayment.PaymentAmount + InvoiceAmount);
Затем вы устанавливаете clientPayment.PaymentAmount позже, но после того, как уже настроили TotalPayment.
Я что-то упустил?
EDIT:
Я думаю, что ты близок. Я не думаю, что вы хотите FirstOrDefault, когда вы получаете свои платежи из базы данных. Я думаю, что вы хотите сумму.
Итак, если вы только что получили сумму платежей, используйте что-то вроде этого:
var totalPaid = ClientPayments.Where(cp => cp.InvoiceNumberID == id).Sum(cp => cp.PaymentAmount);
Теперь у вас есть общая сумма из базы данных.
Кроме того, что это? InvoiceAmount == 115? 115 - это то, что называется магическим числом. Это ничего не значит для тех, кто читает ваш код. Попробуйте использовать константу или перечисление.
Например,
const int totalInvoiceAmount = 115;
Тогда ваш код будет читать,
if (InvoiceAmount == totalAmountOwed){...}
Тогда я думаю, что вы можете продолжить и создать свой новый ClientPayment, как вы сделали. Затем установите значения соответственно.
Похоже, вам нужно получить сумму, которую платит пользователь, и прибавить ее к общей сумме, которую мы получили ранее. Затем вы можете сравнить эту сумму с остатком, чтобы определить, должен ли счет быть «подтвержден» или «оплачен полностью»