// List Hospital Campuses for Adding a new PatientEcard:
        public ActionResult Add()
        {
            ListPatientEcards viewmodel = new ListPatientEcards();

            viewmodel.HospitalCampuses = db.HospitalCampuses.ToList();
            return(View(viewmodel));
        }
        // List Patient Ecards:
        public ActionResult List(string searchkey = "", string delivered = "", string campus = "", int pagenum = 0)
        {
            ListPatientEcards viewmodel = new ListPatientEcards();

            viewmodel.HospitalCampuses = db.HospitalCampuses.ToList();

            Debug.WriteLine("The searchkey is " + searchkey);

            if (searchkey != "")
            {
                List <PatientEcard> PatientEcards = db.PatientEcards
                                                    .Where(patientecard =>
                                                           patientecard.SenderFirstname.Contains(searchkey) ||
                                                           patientecard.SenderLastname.Contains(searchkey) ||
                                                           patientecard.PatientFirstname.Contains(searchkey) ||
                                                           patientecard.PatientLastname.Contains(searchkey) ||
                                                           patientecard.CardMessage.Contains(searchkey) ||
                                                           patientecard.PatientRoom.Contains(searchkey)
                                                           ).OrderByDescending(p => p.DateSubmitted).ThenBy(d => d.CardDelivered).ToList();
                viewmodel.PatientEcards = PatientEcards;
            }
            else if (delivered != "")
            {
                bool deliveredbool = bool.Parse(delivered);
                List <PatientEcard> PatientEcards = db.PatientEcards.Where(patientcard => patientcard.CardDelivered == deliveredbool).OrderByDescending(p => p.DateSubmitted).ThenBy(d => d.CardDelivered).ToList();
                viewmodel.PatientEcards = PatientEcards;
            }
            else if (campus != "")
            {
                int campusid = int.Parse(campus);
                List <PatientEcard> PatientEcards = db.PatientEcards.Where(patientcard => patientcard.CampusID == campusid).OrderByDescending(p => p.DateSubmitted).ThenBy(d => d.CardDelivered).ToList();
                viewmodel.PatientEcards = PatientEcards;
            }
            else
            {
                List <PatientEcard> PatientEcards = db.PatientEcards.OrderByDescending(p => p.DateSubmitted).ThenBy(d => d.CardDelivered).ToList();
                viewmodel.PatientEcards = PatientEcards;
            }



            // Pagination for List of Patient eCards:

            // "perpage": number of records per page
            int perpage    = 3;
            int eventcount = viewmodel.PatientEcards.Count();
            // "maxpage": -1 to offset index starting at 0
            int maxpage = (int)Math.Ceiling((decimal)eventcount / perpage) - 1;

            // "maxpage": max number of pages. Obtained by taking total number of records divided by the number of records perpage (round up)
            if (maxpage < 0)
            {
                maxpage = 0;
            }
            // "pagenum": current page
            if (pagenum < 0)
            {
                pagenum = 0;
            }
            if (pagenum > maxpage)
            {
                pagenum = maxpage;
            }
            // "start": describes which record we start on. Obtained by multiplying the number of records per page by the total number of pages:
            int start = (int)(perpage * pagenum);

            // Get maxpage value so to only display pagination if there are more than 3 records in the PatientEcards table:
            ViewData["maxpage"]     = maxpage;
            ViewData["pagenum"]     = pagenum;
            ViewData["pagesummary"] = "";
            if (maxpage > 1)
            {
                ViewData["pagesummary"] = (pagenum + 1) + " of " + (maxpage + 1);
                if (searchkey != "")
                {
                    List <PatientEcard> PatientEcards = db.PatientEcards
                                                        .Where(patientecard =>
                                                               patientecard.SenderFirstname.Contains(searchkey) ||
                                                               patientecard.SenderLastname.Contains(searchkey) ||
                                                               patientecard.PatientFirstname.Contains(searchkey) ||
                                                               patientecard.PatientLastname.Contains(searchkey) ||
                                                               patientecard.CardMessage.Contains(searchkey) ||
                                                               patientecard.PatientRoom.Contains(searchkey)
                                                               ).OrderBy(p => p.DateSubmitted).ThenBy(d => d.CardDelivered)
                                                        .Skip(start)
                                                        .Take(perpage)
                                                        .ToList();
                    viewmodel.PatientEcards = PatientEcards;
                }
                else if (delivered != "")
                {
                    bool deliveredbool = bool.Parse(delivered);
                    List <PatientEcard> PatientEcards = db.PatientEcards.Where(patientcard => patientcard.CardDelivered == deliveredbool).OrderBy(d => d.CardDelivered).ThenByDescending(p => p.DateSubmitted)
                                                        .Skip(start)
                                                        .Take(perpage)
                                                        .ToList();
                    viewmodel.PatientEcards = PatientEcards;
                }
                else if (campus != "")
                {
                    int campusid = int.Parse(campus);
                    List <PatientEcard> PatientEcards = db.PatientEcards.Where(patientcard => patientcard.CampusID == campusid).OrderBy(d => d.CardDelivered).ThenByDescending(p => p.DateSubmitted)
                                                        .Skip(start)
                                                        .Take(perpage)
                                                        .ToList();
                    viewmodel.PatientEcards = PatientEcards;
                }
                else
                {
                    List <PatientEcard> PatientEcards = db.PatientEcards.OrderBy(d => d.CardDelivered).ThenByDescending(p => p.DateSubmitted)
                                                        .Skip(start)
                                                        .Take(perpage)
                                                        .ToList();
                    viewmodel.PatientEcards = PatientEcards;
                }
                // End of LINQ pagination algorithm
            }

            return(View(viewmodel));
        }