/// <summary>
 /// Update Case Details by calling Case class methods
 /// </summary>
 /// <param name="UpdatedCase">Case to be updated</param>
 public void SetCaseDetails(Case UpdatedCase)
 {
     UpdatedCase.SetCaseUser(UpdatedCase.CustomerID,UpdatedCase.AssignedTo);
 }
 /// <summary>
 /// Get list of all event history items
 /// </summary>
 /// <param name="CustomerID">CustomerID</param>
 public void GetEventHistory(int CustomerID)
 {
     Case Cases = new Case();
     LeadEventHistory = new EventHistory();
     int CaseID = Cases.GetCaseID(CustomerID);
     LeadEventHistory.GetEventHistory(CaseID);
 }
 /// <summary>
 /// Get details for a Case by calling method in the Case class
 /// </summary>
 /// <param name="CustomerID">CustomerID</param>
 public void GetCaseDetails(int CustomerID)
 {
     this.GetAllUsers();
     Cases = new Case();
     Cases.GetCaseDetails(CustomerID);
 }
        //create a top level SDK object can use for everything
        //
        // GET: /TestEvent/
        public ActionResult Main()
        {
            AquariumEventManagement.EventManagementSoapClient theEventSDKClient = new AquariumEventManagement.EventManagementSoapClient();
            AquariumEventManagement.SessionDetails sd = SDKHelper.GetSessionDetails<AquariumEventManagement.SessionDetails>("User");

            Customer testCustomer = new Customer();
            int CustomerID = testCustomer.GetCustomerID(975033);

            Case testCase = new Case();
            int TestCaseID = testCase.GetCaseID(CustomerID);
            DiaryEvent theTopLevelEvent_AvailableThreadsContainer = new DiaryEvent();
            theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads = new List<DiaryEvent>();

            AquariumEventManagement.EventResult AllowedCaseThreads = theEventSDKClient.GetAllowedCaseEventThreads(sd, TestCaseID);
            //get all the in process

            if(AllowedCaseThreads.AllowedCaseEventThreads.Count() >= 1)
            {

                //add a default event that does f**k all for the drop down list

                string[] EventAndThread;

                for (int i = 0; i < AllowedCaseThreads.AllowedCaseEventThreads.Count(); i++)
                {

                    //split the array
                    EventAndThread = AllowedCaseThreads.AllowedCaseEventThreads[i].Value.Split('|');
                    //get erm....the LeadEventID
                    AquariumEventManagement.EventResult theLeadEvent = theEventSDKClient.GetLeadEvent(sd, Convert.ToInt32(EventAndThread[0]));

                    theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.Add(new DiaryEvent
                    {
                           EventName = AllowedCaseThreads.AllowedCaseEventThreads[i].Text,
                           LeadEventID = Convert.ToInt32(EventAndThread[0]),
                           EventThread = Convert.ToInt32(EventAndThread[1]),
                           LeadEventIDThreadComposite = AllowedCaseThreads.AllowedCaseEventThreads[i].Value,
                           ParentSDKResult = AllowedCaseThreads,
                           EventTypeID = Convert.ToInt32(theLeadEvent.LeadEvent.EventTypeID),
                           WhenCreated = theLeadEvent.LeadEvent.WhenCreated,
                           WhoCreated = Convert.ToInt32(theLeadEvent.LeadEvent.WhoCreated),
                           LeadDocumentID = Convert.ToInt32(theLeadEvent.LeadEvent.LeadDocumentID)

                    });

                }

                //NOW WE WANT TO GET THE NEXT EVENTS, MAYBE?? OR ARE THESE THE NEXT EVENTS??
                for (int i = 0; i < theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.Count(); i++)
                {
                    List<DiaryEvent> NextEvents = GetNextEventsForAllowedEventsThreads(theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.ElementAt(i));

                    theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.ElementAt(0).theNextEventsAfterThisEvent = NextEvents;
                }

                //NOW GET THE LOADED EVENTS, INCLUDING MANDATORY AND HELPER FIELDS
                //GetLoadedNextEventsForLeadEvent(theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.ElementAt(0).theNextEventsAfterThisEvent.ElementAt(0));

                //get the oop events

                //get the note types

                List<DiaryEvent> oopEvents = DiaryEvent.GetOOPEvents(261);

                //List<DiaryEvent> noteTypes = DiaryEvent.GetNoteTypes();

            List<DiaryDetailField> aListOfFields = new List<DiaryDetailField>();
            //aListOfFields = DiaryEvent.GetMandatoryFieldsForLeadEvent(65685, 975033, 1038013);

            }

            return View();
        }
        public ActionResult DiaryNotes(Claim Claim)
        {
            int SearchLeadID = Convert.ToInt32(Session["LeadID"]);
            int CustomerID = Convert.ToInt32(Session["CustomerID"]);

            Case cases = new Case();
            try
            {
                int CaseID = cases.GetCaseID(CustomerID);

                Claim.SetDiaryNotes(Claim.Notes, SearchLeadID, CaseID);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            //TODO: Redirect to view EventsFields
            if (CustomerID != 0)
                return RedirectToAction("Edit", "Claim", new { cusid = CustomerID });
            else
                return null;
        }
        /*
        //to create an OOP
        public DiaryEvent()
        {

        }

        //to Create an 'EventType'
        public DiaryEvent()
        {

        }
         * */
        public static List<DiaryEvent> EventsToDisplayToTheUser(int CustomerID)
        {
            //list to return
            List<DiaryEvent> EventToReturnToTheUser = new List<DiaryEvent>();

            AquariumEventManagement.EventManagementSoapClient theEventSDKClient = new AquariumEventManagement.EventManagementSoapClient();
            AquariumEventManagement.SessionDetails sd = SDKHelper.GetSessionDetails<AquariumEventManagement.SessionDetails>("User");

            Case testCase = new Case();
            int TestCaseID = testCase.GetCaseID(CustomerID);
            DiaryEvent theTopLevelEvent_AvailableThreadsContainer = new DiaryEvent();
            theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads = new List<DiaryEvent>();

            AquariumEventManagement.EventResult AllowedCaseThreads = theEventSDKClient.GetAllowedCaseEventThreads(sd, TestCaseID);
            //get all the in process

            if (AllowedCaseThreads.AllowedCaseEventThreads.Count() >= 1)
            {

                string[] EventAndThread;

                for (int i = 0; i < AllowedCaseThreads.AllowedCaseEventThreads.Count(); i++)
                {

                    //split the array
                    EventAndThread = AllowedCaseThreads.AllowedCaseEventThreads[i].Value.Split('|');
                    //get erm....the LeadEventID
                    //AquariumEventManagement.EventResult theLeadEvent = theEventSDKClient.GetLeadEvent(sd, Convert.ToInt32(EventAndThread[0]));
                    AquariumEventManagement.EventResult theLeadEvent = theEventSDKClient.GetNextEvents(sd, Convert.ToInt32(EventAndThread[0]), Convert.ToInt32(EventAndThread[1]));

                    theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.Add(new DiaryEvent
                    {
                        EventName = AllowedCaseThreads.AllowedCaseEventThreads[i].Text,
                        LeadEventID = Convert.ToInt32(EventAndThread[0]),
                        EventThread = Convert.ToInt32(EventAndThread[1]),
                        LeadEventIDThreadComposite = AllowedCaseThreads.AllowedCaseEventThreads[i].Value,
                        ParentSDKResult = AllowedCaseThreads,
                        EventTypeID = Convert.ToInt32(theLeadEvent.NextEvents[0].NextEventTypeID)
                    });

                }

                // return these to the user a list of Diary events

                }

            EventToReturnToTheUser.Add(new DiaryEvent
            {

                EventTypeID = 10000,
                EventName = "Please select an Event"
                          });

            for (var i = 0; i < theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.Count(); i++)
               {

                    EventToReturnToTheUser.Add(theTopLevelEvent_AvailableThreadsContainer.theAvailableEventsAndTheirThreads.ElementAt(i));

              }

                return EventToReturnToTheUser;
        }