public ActionResult Index()
        {
            //Default
            int maxRowsToShow = new ViewModels.vmFilterCertificates().RecordCount;


            ViewBag.FilterCertificates = new ViewModels.vmFilterCertificates();

            return(View(db.Applications
                        .OrderByDescending(e => e.AppID)
                        .Where(e => ((e.ProcessApplication != null && !e.ProcessApplication.IsDeleted) || e.ProcessApplication == null))
                        .Take(maxRowsToShow)
                        .ToList()));
        }
        public ActionResult Index(ViewModels.vmFilterCertificates vmFilterCertificates)
        {
            //Start of region SetFilterParameters
            #region SetFilterParameters
            if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Any date submitted"))
            {
                vmFilterCertificates.SubmittedDateStartSearch = null;
                vmFilterCertificates.SubmittedDateEndSearch   = null;
            }

            if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Submitted this week"))
            {
                vmFilterCertificates.SubmittedDateStartSearch = vmFilterCertificates.DefaultSubmittedDateStartSearch;
                vmFilterCertificates.SubmittedDateEndSearch   = vmFilterCertificates.DefaultSubmittedDateEndSearch;

                vmFilterCertificates.EventDateStartSearch = null;
                vmFilterCertificates.EventDateEndSearch   = null;
            }


            if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Any event date"))
            {
                vmFilterCertificates.EventDateStartSearch = null;
                vmFilterCertificates.EventDateEndSearch   = null;
            }

            //if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Events next week"))
            //if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Events next 7 days"))
            if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Events this week"))
            {
                vmFilterCertificates.EventDateStartSearch = vmFilterCertificates.DefaultEventDateStartSearch;
                vmFilterCertificates.EventDateEndSearch   = vmFilterCertificates.DefaultEventDateEndSearch;

                vmFilterCertificates.SubmittedDateStartSearch = null;
                vmFilterCertificates.SubmittedDateEndSearch   = null;
            }

            if (Request.Form["submit"] != null && Request.Form["submit"].Equals("Events next week"))
            {
                vmFilterCertificates.EventDateStartSearch = vmFilterCertificates.DefaultEventDateStartSearch.AddDays(7);
                vmFilterCertificates.EventDateEndSearch   = vmFilterCertificates.DefaultEventDateEndSearch.AddDays(7);

                vmFilterCertificates.SubmittedDateStartSearch = null;
                vmFilterCertificates.SubmittedDateEndSearch   = null;
            }
            #endregion
            //End of region SetFilterParameters

            ModelState.Clear();

            ViewBag.FilterCertificates = vmFilterCertificates;



            //These submits are displayed as hyperlinks
            if ((Request.Form["application_action"] != null) && ((Request.Form["application_action"].ToLower().Contains("payment")) || (Request.Form["application_action"].ToLower().Contains("cert")) ||
                                                                 (Request.Form["application_action"].ToLower().Contains("reminder")) ||
                                                                 (Request.Form["application_action"].ToLower().Contains("inspect")) ||
                                                                 (Request.Form["application_action"].ToLower().Contains("approvenotification")) //Notification approval added Oct 2016
                                                                 ))
            {
                string id       = Request.Form["application_action"];
                string strAppId = String.Empty;
                int    appId    = 0;

                for (int i = 0; i < id.Length; i++)
                {
                    if (Char.IsDigit(id[i]))
                    {
                        strAppId = String.Concat(strAppId, id[i].ToString());
                    }
                }

                if (Int32.TryParse(strAppId, out appId))
                {
                    //See if there is an existing payment record
                    Models.ProcessApplication processApplication =
                        db.ProcessApplications.Where(e => e.Application.AppID == appId).FirstOrDefault();

                    if (processApplication == null)
                    {
                        processApplication = new Models.ProcessApplication()
                        {
                            Application = db.Applications.Where(e => e.AppID == appId).FirstOrDefault(),

                            // InspectionRequired = "false"  //TODO Make this nullable perhaps or not and maybe a boolean
                        };
                        //Assign guid
                        processApplication.GUID = db.Applications.Where(e => e.AppID == appId).FirstOrDefault().GUID;

                        db.ProcessApplications.Add(processApplication);
                        db.SaveChanges();
                    }

                    if (id.ToLower().Contains("payment"))
                    {
                        //Add or remove
                        if (id.ToLower().Contains("record"))
                        {
                            processApplication.PaymentRecieved = true;
                            //Use the description field as string to accomodate additional
                            //'not required' description.
                            processApplication.PaymentReceivedDescription = "Yes";
                            db.SaveChanges();
                        }

                        if (id.ToLower().Contains("remove"))
                        {
                            processApplication.PaymentRecieved = false;
                            //Use the description field as string to accomodate additional
                            //'not required' description.
                            processApplication.PaymentReceivedDescription = "No";
                            db.SaveChanges();
                        }
                        //New method added 28 May 2015
                        if (id.ToLower().Contains("not required"))
                        {
                            processApplication.PaymentRecieved            = false; //Assume if payment not required, then not received.
                            processApplication.PaymentReceivedDescription = "Not required.";
                            db.SaveChanges();
                        }
                    }
                    else if (id.ToLower().Contains("cert"))
                    {
                        if (id.ToLower().Contains("record"))
                        {
                            processApplication.CertificateIssuedDate = DateTime.Now;
                            db.SaveChanges();
                        }
                        else if (id.ToLower().Contains("remove"))
                        {
                            processApplication.CertificateIssuedDate = null;
                            db.SaveChanges();
                        }
                    }
                    else if (id.ToLower().Contains("reminder"))
                    {
                        if (id.ToLower().Contains("issue"))
                        {
                            processApplication.ReminderSent = DateTime.Now.Date;
                            db.SaveChanges();

                            //Put information in viewbag so email can be sent.
                            ViewBag.SendEmail = true;
                            //put model in the viewbag so that the email partial view can use this.

                            var applicationId = processApplication.Application.AppID.Value;

                            ViewBag.ApplicationId = applicationId;
                        }
                        else if (id.ToLower().Contains("revoke"))
                        {
                            processApplication.ReminderSent = null;
                            db.SaveChanges();
                        }
                    }

                    /*This is changed from boolean field requires inspection
                     * to string field consisting of
                     * Green Team, Red Team, Not Required.
                     * Display one of the following:
                     * 1.  Green Team
                     * 2.  Red Team
                     * 3.  Not Required
                     * 4.  Default Display = Undecided and G, R, N as hyperlinks
                     * 5. Items 1, 2 and 3 are hyperlinks that return to default.
                     */
                    //else if (id.ToLower().Contains("inspect"))
                    //{
                    //    if (id.ToLower().Contains("will"))
                    //    {
                    //        processApplication.InspectionRequired = true;
                    //        db.SaveChanges();
                    //    }
                    //    else if (id.ToLower().Contains("wont"))
                    //    {
                    //        processApplication.InspectionRequired = false;
                    //        db.SaveChanges();
                    //    }
                    //}
                    else if (id.ToLower().Contains("inspect"))
                    {
                        /*
                         * This can contain one of the following values:
                         * Green, Red, NotRequired
                         */


                        if (id.ToLower().Contains("notrequired"))
                        {
                            processApplication.InspectionRequired = "Not Required";
                        }
                        else if (id.ToLower().Contains("green"))
                        {
                            processApplication.InspectionRequired = "Green Team";
                        }
                        else if (id.ToLower().Contains("red"))
                        {
                            processApplication.InspectionRequired = "Red Team";
                        }
                        else if (id.ToLower().Contains("undecided"))
                        {
                            processApplication.InspectionRequired = String.Empty;
                        }

                        db.SaveChanges();
                    }
                    else if (id.ToLower().Contains("approve"))
                    {
                        //Put information in viewbag so email can be sent.
                        ViewBag.SendEmailApproveNotification = true;

                        var applicationId = processApplication.Application.AppID.Value;

                        ViewBag.ApplicationId = applicationId;

                        processApplication.NotificationApproved = true;
                        processApplication.NotificationSentDate = DateTime.Now;
                        db.SaveChanges();
                    }
                }
            }

            return(View(db.Applications
                        .Where(e => e.SubmittedDate != null)
                        .OrderByDescending(e => e.AppID)
                        .ToList()
                        .Where(e => Admin.Helpers.ApplicationFilter.FilterCertificates(e, vmFilterCertificates))
                        .Take(vmFilterCertificates.RecordCount)
                        .ToList()));
        }