public IEnumerable <ChildCase> GetChildCases(int CaseID)
        {
            List <ChildCase> childCases = new List <ChildCase>();

            AcadreServiceV7.BUCaseFileType Case = (AcadreServiceV7.BUCaseFileType)caseService.GetCase(CaseID.ToString());
            string CPR = Case.CaseFileTitleText.Substring(0, 10);

            AcadreServiceV7.AdvancedSearchCaseCriterionType2 searchCriterion = new AcadreServiceV7.AdvancedSearchCaseCriterionType2();
            searchCriterion.CaseFileTitleText = CPR;
            searchCriterion.CaseFileTypeCode  = CaseFileTypeCode;
            var userList = configurationService.GetUserList(new AcadreServiceV7.EmptyRequestType()).ToList();

            foreach (AcadreServiceV7.CaseSearchResponseType foundCase in caseService.SearchCases(searchCriterion))
            {
                Case = (AcadreServiceV7.BUCaseFileType)caseService.GetCase(foundCase.CaseFileReference);
                var user = userList.SingleOrDefault(ut => ut.Id == Case.CaseFileManagerReference);
                if (user == null)
                {
                    user = new AcadreServiceV7.UserType()
                    {
                        Initials = "", Name = ""
                    };
                }
                childCases.Add(new ChildCase
                {
                    CaseID               = int.Parse(foundCase.CaseFileReference),
                    CaseContent          = Case.CustomFields.df1,
                    ChildCPR             = CPR,
                    CaseNumberIdentifier = Case.CaseFileNumberIdentifier,
                    CaseManagerInitials  = user.Initials,
                    CaseManagerName      = user.Name,
                    Note      = Case.Note,
                    ChildName = Case.TitleAlternativeText,
                    IsClosed  = Case.CaseFileStatusCode == "A"
                });
            }
            return(childCases);
        }
        public IEnumerable <ChildCase> SearchChildren(SearchCriterion searchCriterion)
        {
            // Acadre PWS metoden er begrænset af at der kun kan fremsøges 100 sager af gangen. Derfor suppleres der i disse tilfælde med Acadre PWI
            // Følgende parametre kan ikke søges efter gennem API:
            // 1. KLE
            // 2. PrimaryContactsName (men der kan godt søges efter specifik Primær kontakt ID)

            List <ChildCase> childCases = new List <ChildCase>();
            var userList    = configurationService.GetUserList(new AcadreServiceV7.EmptyRequestType()).ToList(); // Herfra kan CaseManager aflæses. Listen indeholder alle brugere i Acadre som ikke er ophørte.
            var UnknownUser = new AcadreServiceV7.UserType()
            {
                Initials = "", Name = "", Id = ""
            };

            AcadreServiceV7.AdvancedCaseSearchRequestType3 advancedCaseSearchRequestType = new AcadreServiceV7.AdvancedCaseSearchRequestType3();

            // For at sænke risikoen for at ramme de max 100 sager, så splittes søgningen op i åbne og lukkede sager
            string[] StatusCodes;
            if (searchCriterion.IsClosed.HasValue)
            {
                if (searchCriterion.IsClosed.Value)
                {
                    StatusCodes = new string[] { "A" }
                }
                ;
                else
                {
                    StatusCodes = new string[] { "B" }
                };
            }
            else
            {
                StatusCodes = new string[] { "A", "B" }; //StatusCodes = new string[] { "A", "B", "P", "S" };
            }
            // Sagstype er det samme for alle børnesager
            advancedCaseSearchRequestType.TypeCode = CaseFileTypeCode;

            // Afdeling er obligatorisk søgekriterie
            if (searchCriterion.AcadreOrgID != 0)
            {
                advancedCaseSearchRequestType.AdministrativeUnitId = searchCriterion.AcadreOrgID.ToString();
            }

            // Sagsansvarlig er valgfrit søgekriterie
            if (searchCriterion.CaseManagerInitials != null)
            {
                var user = userList.SingleOrDefault(ut => ut.Initials == searchCriterion.CaseManagerInitials);
                if (user != null)
                {
                    advancedCaseSearchRequestType.ResponsibleUserId = user.Id;
                }
                else
                {
                    return(childCases);
                }
            }

            // Der kan desværre ikke søges efter kontakter med navn fordi Acadre PWS ikke kan returnere mere end 100 personer.
            string[] foundContactsGUI = new string[] { null };
            if (searchCriterion.PrimaryContactsName != "" && searchCriterion.ChildCPR == "*")
            {
                var searchContactCriterion = new AcadreServiceV7.SearchContactCriterionType2();
                //AcadreServiceV7.ContactType contactType = new AcadreServiceV7.ContactType();
                searchContactCriterion.ContactTypeName = "Person";
                searchContactCriterion.SearchTerm      = searchCriterion.PrimaryContactsName;
                foundContactsGUI = contactService.SearchContacts(searchContactCriterion).Select(x => x.GUID).ToArray();
                if (foundContactsGUI.Length == 0)
                {
                    return(childCases);
                }
                else if (foundContactsGUI.Length > 10)
                {
                    // Brug Acadre PWI i stedet
                    var AcadreCases = PWIservice.SearchCases(searchCriterion);
                    // Add to list
                    foreach (var AcadreCase in AcadreCases)
                    {
                        var user = userList.SingleOrDefault(ut => ut.Id == AcadreCase.ResponsibleUserId.ToString()) ?? UnknownUser;

                        childCases.Add(new ChildCase()
                        {
                            CaseID              = AcadreCase.Id,
                            ChildName           = AcadreCase.Description,
                            ChildCPR            = AcadreCase.Title,
                            CaseManagerInitials = user.Initials,
                            CaseManagerName     = user.Name,
                            CaseContent         = AcadreCase.Content,
                            IsClosed            = AcadreCase.Status.IsClosed,
                            Note = "",
                            CaseNumberIdentifier = AcadreCase.Year.ToString().Substring(2, 2) + "/" + AcadreCase.SequenceNumber
                        });
                    }
                    return(childCases);
                }
            }

            // CPR er valgfrit søgekriterie
            advancedCaseSearchRequestType.Title = searchCriterion.ChildCPR;


            var foundCases = new List <AcadreServiceV7.CaseFileType3>();

            foreach (var PrimaryContactGUI in foundContactsGUI)
            {
                if (PrimaryContactGUI != null)
                {
                    advancedCaseSearchRequestType.CustomFields = new AcadreServiceV7.CustomField[] {
                        new AcadreServiceV7.CustomField {
                            Value = searchCriterion.CaseContent, Name = "df1"
                        },
                        new AcadreServiceV7.CustomField {
                            Value = PrimaryContactGUI, Name = "df25"
                        }
                    }
                }
                ;
                else
                {
                    advancedCaseSearchRequestType.CustomFields = new AcadreServiceV7.CustomField[] {
                        new AcadreServiceV7.CustomField {
                            Value = searchCriterion.CaseContent, Name = "df1"
                        }
                    }
                };
                foreach (var StatusCode in StatusCodes)
                {
                    advancedCaseSearchRequestType.StatusCode = StatusCode;
                    var result = caseService.AdvancedCaseSearch(advancedCaseSearchRequestType);
                    if (result.Length == 100)
                    {
                        // Brug Acadre PWI i stedet
                        var AcadreCases = PWIservice.SearchCases(searchCriterion);
                        // Add to list
                        foreach (var AcadreCase in AcadreCases)
                        {
                            var user = userList.SingleOrDefault(ut => ut.Id == AcadreCase.ResponsibleUserId.ToString()) ?? UnknownUser;

                            childCases.Add(new ChildCase()
                            {
                                CaseID              = AcadreCase.Id,
                                ChildName           = AcadreCase.Description,
                                ChildCPR            = AcadreCase.Title.Substring(0, 10),
                                CaseManagerInitials = user.Initials,
                                CaseManagerName     = user.Name,
                                CaseContent         = AcadreCase.Content,
                                IsClosed            = AcadreCase.Status.IsClosed,
                                Note = "",
                                CaseNumberIdentifier = AcadreCase.Year.ToString().Substring(2, 2) + "/" + AcadreCase.SequenceNumber
                            });
                        }
                        return(childCases);
                    }
                    foundCases.AddRange(result);
                }
            }


            if (!(searchCriterion.KLE == null))
            {
                foundCases.RemoveAll(x => !x.Classification.Category.Where(y => y.Equals("KL Koder")).Select(y => y.Literal).Contains(searchCriterion.KLE));
            }


            foreach (AcadreServiceV7.BUCaseFileType foundCase in foundCases)
            {
                var user = userList.SingleOrDefault(ut => ut.Id == foundCase.CaseFileManagerReference) ?? UnknownUser;

                childCases.Add(new ChildCase()
                {
                    CaseID              = int.Parse(foundCase.CaseFileIdentifier),
                    ChildName           = foundCase.TitleAlternativeText,
                    ChildCPR            = foundCase.CaseFileTitleText.Substring(0, 10),
                    CaseManagerInitials = user.Initials,
                    CaseManagerName     = user.Name,
                    CaseContent         = foundCase.CustomFields.df1,
                    IsClosed            = foundCase.CaseFileStatusCode == "A",
                    Note = foundCase.Note,
                    CaseNumberIdentifier = foundCase.CaseFileNumberIdentifier
                });
            }

            return(childCases);
        }
        // Changes the Responsible CaseManager on all the childrens cases where the CaseManagerInitials = oldCaseManagerInitials. If oldCaseManagerInitials is "" then all child cases CaseManager is changed to newCaseManagerInitials.
        public void ChangeChildResponsible(string oldCaseManagerInitials, string newCaseManagerInitials, int newAcadreOrgID, int CaseID)
        {
            var userList = configurationService.GetUserList(new AcadreServiceV7.EmptyRequestType()).ToList();
            var newUser  = userList.SingleOrDefault(ut => ut.Initials == newCaseManagerInitials);

            if (newUser == null)
            {
                throw new Exception("Der fandtes ikke en bruger i Acadre med initialerne " + newCaseManagerInitials);
            }

            AcadreServiceV7.BUCaseFileType Case = (AcadreServiceV7.BUCaseFileType)caseService.GetCase(CaseID.ToString());
            if (!Case.CustomFieldCollection.Single(x => x.Name == "df1").Value.Contains("Løbende "))
            {
                Case.CaseFileManagerReference = newUser.Id;
                Case.AdministrativeUnit       = new AcadreServiceV7.AdministrativeUnitType[]
                {
                    new AcadreServiceV7.AdministrativeUnitType()
                    {
                        AdministrativeUnitReference = newAcadreOrgID.ToString()
                    }
                };
                try
                {
                    caseService.UpdateCase(Case);
                }
                catch (Exception e)
                {
                    throw new Exception("Kunne ikke opdatere Acadre sagen", e);
                }
                return;
            }
            string CPR = Case.CaseFileTitleText.Substring(0, 10);

            AcadreServiceV7.AdvancedSearchCaseCriterionType2 searchCriterion = new AcadreServiceV7.AdvancedSearchCaseCriterionType2();
            searchCriterion.CaseFileTitleText = CPR + "*";
            searchCriterion.CaseFileTypeCode  = CaseFileTypeCode;

            foreach (AcadreServiceV7.CaseSearchResponseType foundCase in caseService.SearchCases(searchCriterion))
            {
                Case = (AcadreServiceV7.BUCaseFileType)caseService.GetCase(foundCase.CaseFileReference);
                var user = userList.SingleOrDefault(ut => ut.Id == Case.CaseFileManagerReference);
                if (user == null)
                {
                    user = new AcadreServiceV7.UserType {
                        Initials = ""
                    }
                }
                ;
                if (user.Initials == oldCaseManagerInitials || oldCaseManagerInitials == "" || user.Initials == "")
                {
                    Case.CaseFileManagerReference = newUser.Id;
                    Case.AdministrativeUnit       = new AcadreServiceV7.AdministrativeUnitType[]
                    {
                        new AcadreServiceV7.AdministrativeUnitType()
                        {
                            AdministrativeUnitReference = newAcadreOrgID.ToString()
                        }
                    };
                    try
                    {
                        caseService.UpdateCase(Case);
                    }
                    catch (Exception e)
                    {
                        throw new Exception("Kunne ikke opdatere Acadre sagen", e);
                    }
                }
            }
        }