/// <summary>
        /// Adds a new request to the SharePoint site. 
        /// </summary>
        /// <param name="input">A VpnRequest model</param>
        public void addRequest(VpnRequest input)
        {
            List spList = clientContext.Web.Lists.GetByTitle(requestNames.ListName);
            clientContext.Load(spList);

            var itemCreateInfo = new ListItemCreationInformation();
            var listItem = spList.AddItem(itemCreateInfo);

            //pulling up the current user information
            User user = clientContext.Web.EnsureUser(HttpContext.Current.User.Identity.Name);
            clientContext.Load(user);
            clientContext.ExecuteQuery();
            FieldUserValue userValue = new FieldUserValue();
            userValue.LookupId = user.Id;

            //pulling up the manager information
            var manager = clientContext.Web.EnsureUser(input.Manager);
            clientContext.Load(manager);
            clientContext.ExecuteQuery();
            FieldUserValue userValue2 = new FieldUserValue();
            userValue2.LookupId = manager.Id;

            listItem[requestNames.internalCreatedBy] = userValue;
            listItem[requestNames.internalVpnRecipientFirst] = input.VPN_recipientFirst;
            listItem[requestNames.internalVpnRecipientLast] = input.VPN_recipientLast;
            listItem[requestNames.internalWorkPhone] = input.Work_Phone;
            listItem[requestNames.internalEmail] = input.VPN_recipientEmail;
            listItem[requestNames.internalUserCode] = input.VPN_userCode;
            listItem[requestNames.internalManager] = userValue2;
            listItem[requestNames.internalUserDept] = input.VPN_userDept;
            listItem[requestNames.internalUserStatus] = input.VPN_userStatus;
            listItem[requestNames.internalSystemsList] = input.Systems_List;
            listItem[requestNames.internalJustification] = input.VPN_justification;
            listItem[requestNames.internalAccessStart] = input.VPN_accessStart;
            listItem[requestNames.internalAccessEnd] = input.VPN_accessEnd;
            listItem[requestNames.internalCompanyName] = input.Company_Name;
            listItem[requestNames.internalCompanyOther] = input.Company_Other;
            listItem[requestNames.internalOfficeLocation] = input.Office_Location;
            listItem[requestNames.internalOfficeAddress] = input.Office_Address;
            listItem[requestNames.internalMachineOwner] = input.Machine_Owner;
            listItem[requestNames.internalExtCode] = input.Ext_code;
            listItem[requestNames.internalAgency] = input.Agency;

            listItem.Update();
            clientContext.ExecuteQuery();
        }
        //takes in a running list of request and a list of strings
        //takes the list of strings, finds all VPN Requests with the same ID on the SP Server
        //returns an updated list of requests
        //currentRequests = currentRequests + col
        /// <summary>
        /// Takes a running list of VpnRequest and adds more VpnRequests based on ID
        /// </summary>
        /// <param name="currentRequests">A running list of VpnRequests</param>
        /// <param name="col">List of VPN Request IDs</param>
        /// <returns>A list of VPN Requests equivalent to the original list given combined with another VPN Request list (given in ID)</returns>
        private List<VpnRequest> loadList(List<VpnRequest> currentRequests, List<string> col)
        {
            List spList = clientContext.Web.Lists.GetByTitle(requestNames.ListName);
            clientContext.Load(spList);

            //remove any duplicates from col
            col = col.Distinct().ToList();

            //going to traverse the list of strings (which represent VPN Request IDs) to generate a list of ListItems
            List<ListItem> spRequestList = new List<ListItem>();
            foreach(string current in col)
            {
                spRequestList.Add(spList.GetItemById(Int32.Parse(current) - 1000));
            }

            //converting the list of ListItems in to a list of VpnRequests
            foreach(ListItem item in spRequestList)
            {
                try
                {
                    clientContext.Load(item);
                    clientContext.ExecuteQuery();

                    VpnRequest temp = new VpnRequest();
                    temp.VPN_requestID = Int32.Parse((string)item[requestNames.internalID]);
                    temp.DateSubmitted = ((DateTime)item[requestNames.internalCreated]).ToString("MM/dd/yyyy");
                    temp.VPN_requestStatus = (string)item[requestNames.internalRequestStatus];
                    temp.VPN_accessEnd = ((DateTime)item[requestNames.internalAccessEnd]).ToString();
                    temp.VPN_accessStart = ((DateTime)item[requestNames.internalAccessStart]).ToString();
                    temp.VPN_recipientFirst = (string)item[requestNames.internalVpnRecipientFirst];
                    temp.VPN_recipientLast = (string)item[requestNames.internalVpnRecipientLast];
                    temp.Work_Phone = (string)item[requestNames.internalWorkPhone];
                    temp.VPN_recipientEmail = (string)item[requestNames.internalEmail];
                    temp.VPN_userCode = Convert.ToInt32(((double)item[requestNames.internalUserCode]));
                    temp.Manager = ((FieldUserValue)item[requestNames.internalManager]).LookupValue;
                    temp.Systems_List = (string)item[requestNames.internalSystemsList];
                    temp.VPN_justification = (string)item[requestNames.internalJustification];
                    temp.VPN_userDept = (string)item[requestNames.internalUserDept];
                    temp.Company_Name = (string)item[requestNames.internalCompanyName];
                    temp.Company_Other = (string)item[requestNames.internalCompanyOther];
                    temp.Office_Location = (string)item[requestNames.internalOfficeLocation];
                    temp.Office_Address = (string)item[requestNames.internalOfficeAddress];
                    temp.Machine_Owner = (string)item[requestNames.internalMachineOwner];
                    temp.VPN_userStatus = (string)item[requestNames.internalUserStatus];
                    temp.Agency = (string)item[requestNames.internalAgency];
                    temp.VPN_requestor = ((FieldUserValue)item[requestNames.internalCreatedBy]).LookupValue;
                    try
                    {
                        temp.Ext_code = Convert.ToInt32((double)item[requestNames.internalExtCode]);
                        temp.Reviewer_Comments = (string)item[requestNames.internalComments];
                    }
                    catch (System.ArgumentNullException e)
                    {
                        //extension code can be null, so we'll skip over this
                    }catch (System.NullReferenceException f)
                    {
                        //extension code can be null, so we'll skip over this
                    }
                    currentRequests.Add(temp);
                }
                catch (System.ArgumentNullException e)
                {
                    //if something critical is null, we won't add it to the viewbag list
                    continue;
                }
            }
            return currentRequests;
        }
        /// <summary>
        /// (Model Mapping Method) CSOM -> VpnRequest
        /// Converts each ListItem in a ListItemCollection to a VpnRequest.
        /// Adds each VpnRequest to an ongoing list of VpnRequests. 
        /// </summary>
        /// <param name="currentRequests">A running list of VpnRequests</param>
        /// <param name="col">CSOM equivalent to VpnRequest</param>
        /// <returns>A list of VPN Requests</returns>
        private List<VpnRequest> loadList(List<VpnRequest> currentRequests, ListItemCollection col)
        {
            //this method takes a ListItemCollection and converts it into a list of VpnRequest (A model Kevin created)
            //if an ongoing list is passed in, requests are added
            //if there is no ongoing list, pass in an empty List<VpnRequest>
            List spList = clientContext.Web.Lists.GetByTitle(requestNames.ListName);
            clientContext.Load(spList);
            foreach (ListItem item in col)
            {
                try
                {
                    clientContext.Load(item);
                    clientContext.ExecuteQuery();

                    VpnRequest temp = new VpnRequest();
                    temp.VPN_requestID = Int32.Parse((string)item[requestNames.internalID]);
                    temp.DateSubmitted = ((DateTime)item[requestNames.internalCreated]).ToString("MM/dd/yyyy");
                    temp.VPN_requestStatus = (string)item[requestNames.internalRequestStatus];
                    temp.VPN_accessEnd = ((DateTime)item[requestNames.internalAccessEnd]).ToString();
                    temp.VPN_accessStart = ((DateTime)item[requestNames.internalAccessStart]).ToString();
                    temp.VPN_recipientFirst = (string)item[requestNames.internalVpnRecipientFirst];
                    temp.VPN_recipientLast = (string)item[requestNames.internalVpnRecipientLast];
                    temp.Work_Phone = (string)item[requestNames.internalWorkPhone];
                    temp.VPN_recipientEmail = (string)item[requestNames.internalEmail];
                    temp.VPN_userCode = Convert.ToInt32(((double)item[requestNames.internalUserCode]));
                    temp.Manager = ((FieldUserValue)item[requestNames.internalManager]).LookupValue;
                    temp.Systems_List = (string)item[requestNames.internalSystemsList];
                    temp.VPN_justification = (string)item[requestNames.internalJustification];
                    temp.VPN_userDept = (string)item[requestNames.internalUserDept];
                    temp.Company_Name = (string)item[requestNames.internalCompanyName];
                    temp.Company_Other = (string)item[requestNames.internalCompanyOther];
                    temp.Office_Location = (string)item[requestNames.internalOfficeLocation];
                    temp.Office_Address = (string)item[requestNames.internalOfficeAddress];
                    temp.Machine_Owner = (string)item[requestNames.internalMachineOwner];
                    temp.VPN_userStatus = (string)item[requestNames.internalUserStatus];
                    temp.Agency = (string)item[requestNames.internalAgency];
                    temp.VPN_requestor = ((FieldUserValue)item[requestNames.internalCreatedBy]).LookupValue;
                    try
                    {
                        temp.Ext_code = Convert.ToInt32((double)item[requestNames.internalExtCode]);
                        temp.Reviewer_Comments = (string)item[requestNames.internalComments];

                    }
                    catch (System.ArgumentNullException e)
                    {
                        //extension code can be null, so we'll skip over this
                    }
                    catch (System.NullReferenceException f)
                    {

                    }
                    currentRequests.Add(temp);
                }
                catch (System.ArgumentNullException e)
                {
                    //if something critical is null, we won't add it to the viewbag list
                    continue;
                }
            }
            return currentRequests;
        }
        public ActionResult VPNRequest(VpnRequest input)
        {
            //formating some input
            input.VPN_requestStatus = "Pending Manager Approval";
            input.DateSubmitted = DateTime.Now.ToString("M/d/yyyy");

            SpConnectionVPN spConnect = new SpConnectionVPN();
            spConnect.addRequest(input);

            return RedirectToAction("/ThankYou", "Portal");
        }
        public ViewResult ReviewRequestIT(VpnRequest current)
        {
            ViewBag.details = current;
            SpConnectionVPN spConnection = new SpConnectionVPN();
            ViewBag.radiusSelector = spConnection.getVpnRadiusProfileSelect();

            return View("ReviewRequestIT");
        }