public ActionResult Create(Invoice_ViewModel newInvoice)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //Calculate the total amount of the entered invoice
                    double amount = (newInvoice.BaseInvoiceViewModel.Price * newInvoice.BaseInvoiceViewModel.Quantity)
                        + newInvoice.BaseInvoiceViewModel.Tax;

                    //Check if the entered amount will not exceed the limit.
                    if (!ValidateInvoiceEntry(amount))
                    {
                        //Calculate what the invoice balance would be if this order would be added.
                        double newAmount = amount + GetCurrentInvoiceSum();

                        //Throw a validation error that the new invoice exceeds the limit.
                        ModelState.AddModelError("CustomerError", "Invoice limit exceeded: Adding this order of $"
                            + amount + " would create an exceeding invoice balance of $" + newAmount);
                        return View(newInvoice);
                    }

                    Customer customer = AddCustomerToDB(newInvoice);

                    //Grab the "customerID" for the foreign key association
                    int customerID = customer.CustomerID;

                    AddNewInvoiceToDB(newInvoice, customerID);

                    return RedirectToAction("Index");
                }

            }
            catch (Exception ex)
            {
                return View("Error", new HandleErrorInfo(ex, "Create", "Invoice"));
            }

            return View(newInvoice);
        }
        private Invoice SetupInvoiceObject(Invoice_ViewModel data, int customerID, int invoiceID, DateTime createdDate)
        {
            Invoice invoice = (new Invoice
            {
                CustomerID = customerID,
                InvoiceID = invoiceID,
                InvoiceCreationDate = createdDate,
                InvoiceDueDate = data.BaseInvoiceViewModel.InvoiceDueDate,
                ProductName = data.BaseInvoiceViewModel.ProductName,
                ProductDescription = data.BaseInvoiceViewModel.ProductDescription,
                Price = data.BaseInvoiceViewModel.Price,
                Quantity = data.BaseInvoiceViewModel.Quantity,
                Tax = data.BaseInvoiceViewModel.Tax

            });

            return invoice;
        }
        private Customer SetupCustomerObject(Invoice_ViewModel data, int customerID)
        {
            Customer cust = (new Customer
            {
                CustomerID = customerID,
                FirstName = data.BaseCustomerViewModel.FirstName,
                LastName = data.BaseCustomerViewModel.LastName,
                Email = data.BaseCustomerViewModel.Email
            });

            return cust;
        }
        private void ProcessEdit(Invoice_ViewModel data)
        {
            //Get both ID's
            int customerID = data.BaseInvoiceViewModel.CustomerID;
            int invoiceID = data.BaseInvoiceViewModel.InvoiceID;

            //Get the created date
            DateTime createdDate =  GetInvoiceCreatedDate(invoiceID);

            //Setup the model object to save it in the DB
            var invoice = SetupInvoiceObject(data, customerID, invoiceID, createdDate);
            var customer = SetupCustomerObject(data, customerID);

            db.Entry(invoice).State = EntityState.Modified;
            db.Entry(customer).State = EntityState.Modified;
            db.SaveChanges();
        }
 private void AddNewInvoiceToDB(Invoice_ViewModel data, int customerID)
 {
     Invoice invoice = SetupInvoiceObject(data, customerID);
     db.Invoices.Add(invoice);
     db.SaveChanges();
 }
        //Takes entered data from the viewmodel and adds an entry to the DB
        private Customer AddCustomerToDB(Invoice_ViewModel data)
        {
            //Create a customer model object using our viewmodel.
            Customer customer = SetupCustomerObject(data);
            db.Customers.Add(customer);
            db.SaveChanges();

            return customer;
        }
        public ActionResult Edit(Invoice_ViewModel data)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    //Calculate the total amount of the entered invoice
                    double amount = (data.BaseInvoiceViewModel.Price * data.BaseInvoiceViewModel.Quantity)
                        + data.BaseInvoiceViewModel.Tax;

                    //Check if the entered amount will not exceed the limit.
                    if (!ValidateInvoiceEntry(amount))
                    {
                        //Calculate what the invoice balance would be if this order would be added.
                        double newAmount = amount + GetCurrentInvoiceSum();

                        //Throw a validation error that the new invoice exceeds the limit.
                        ModelState.AddModelError("CustomerError", "Invoice limit exceeded: Adding this order of $"
                            + amount + " would create an exceeding invoice balance of $" + newAmount);
                        return View(data);
                    }

                    //Complete the edit request
                    ProcessEdit(data);

                    return RedirectToAction("Index");
                }
            }
            catch (Exception ex)
            {
                return View("Error", new HandleErrorInfo(ex, "Edit", "Invoice"));
            }

            return View(data);
        }