Добавить суммы из базы данных MVC 3 - PullRequest
0 голосов
/ 08 сентября 2011

В моей базе данных есть таблица счетов и таблица ClientPayments.У меня есть код, который подтверждает, что платеж произошел, и регистрирует его по выбранному счету (пользователь выбирает счет в представлении).Я пытаюсь изменить статус счета-фактуры на «Подтверждено», если общая сумма платежа равна сумме счета-фактуры.Может быть много платежей за один счет, и если сумма платежа меньше суммы счета, статус изменится на «Частично оплачено».Это мой код из контроллера ниже:

public ActionResult Confirm(int id, long InvoiceAmount, string PaymentType, float? InvoiceCustomAmount)
    {
        var invoice = db.Invoice.Find(id);

        //now validate that if the logged in user is authorized to select and confirm this invoice or not.
        ClientPayments clientPayment = db.ClientPayments.FirstOrDefault(cp => cp.InvoiceNumberID == id);

            clientPayment = new ClientPayments();

            clientPayment.InvoiceNumberID = id;

            var TotalPayments = (clientPayment.PaymentAmount + InvoiceAmount);

        if (InvoiceAmount == 115)
        {
            clientPayment.PaymentAmount = (long)InvoiceCustomAmount;
        }
        else
        {
            clientPayment.PaymentAmount = InvoiceAmount;
        }

            clientPayment.PaymentType = PaymentType;
            clientPayment.PaymentDate = DateTime.Now;
            db.ClientPayments.Add(clientPayment);

        if (TotalPayments != invoice.InvoiceAmount)
        {
            invoice.InvoiceStatus = "Partly Paid";
        }
        else
        {
            invoice.InvoiceStatus = "Confirmed";
        }

        // You don´t need this, since "invoice" was retrieved earlier in the method the database context
        // knows that changes have been made to this object when you call "SaveChanges".
        // db.Entry(invoices).State = EntityState.Modified;

        db.SaveChanges();

        return View();
    }

Проблема, с которой я столкнулся, заключается в том, что TotalPayments не дает мою общую сумму платежа - она ​​не суммирует записи, которые уже были добавлены вбаза данных.

Спасибо

1 Ответ

2 голосов
/ 08 сентября 2011

Похоже, вы загружаете клиента. Оплата здесь

   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, как вы сделали. Затем установите значения соответственно.

Похоже, вам нужно получить сумму, которую платит пользователь, и прибавить ее к общей сумме, которую мы получили ранее. Затем вы можете сравнить эту сумму с остатком, чтобы определить, должен ли счет быть «подтвержден» или «оплачен полностью»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...