public Child GetChildInfo(string CPR)
        {
            int CaseID = 0;

            SearchCriterion searchCriterion = new SearchCriterion()
            {
                ChildCPR    = CPR + "*",
                CaseContent = "Løbende journal*",
                IsClosed    = true
            };
            IEnumerable <ChildCase> childCases = SearchChildren(searchCriterion);

            foreach (var childCase in childCases)
            {
                CaseID = childCase.CaseID;
                if (!childCase.IsClosed) // Hvis sagen ikke er afsluttet så behøver vi ikke at gå resten igennem
                {
                    break;
                }
            }
            if (CaseID != 0)
            {
                return(GetChildInfo(CaseID));
            }
            else
            {
                return(CPRBrokerService.GetChild(CPR));
            }
        }
        public Child GetChildInfo(int CaseID)
        {
            string CPR;
            Child  child = new Child();

            AcadreServiceV7.BUCaseFileType Case = (AcadreServiceV7.BUCaseFileType)caseService.GetCase(CaseID.ToString());
            var user = GetUser(Case.CaseFileManagerReference);

            user = user ?? new AcadreServiceV7.UserType()
            {
                Initials = "", Name = "", Id = Case.CaseFileManagerReference
            };
            child = CPRBrokerService.GetChild(Case.CaseFileTitleText.Substring(0, 10));

            child.Note   = Case.Note;
            child.CaseID = CaseID;
            child.CaseNumberIdentifier = Case.CaseFileNumberIdentifier;
            child.CaseManagerInitials  = user.Initials;
            child.CaseManagerName      = user.Name;
            child.CaseIsClosed         = Case.CaseFileStatusCode == "A";

            if (child.Siblings == null)
            {
                return(child);
            }

            var siblings = child.Siblings.ToArray();

            for (int i = 0; i < child.Siblings.Count(); i++)
            {
                CPR = siblings[i].SimpleChild.CPR;
                SearchCriterion searchCriterion = new SearchCriterion()
                {
                    ChildCPR    = CPR,
                    CaseContent = "Løbende journal*",
                    IsClosed    = true
                };
                IEnumerable <ChildCase> childCases = SearchChildren(searchCriterion);

                foreach (var childCase in childCases)
                {
                    siblings[i].CaseID = childCase.CaseID;
                    siblings[i].Note   = childCase.Note;
                    siblings[i].CaseNumberIdentifier = childCase.CaseNumberIdentifier;
                    siblings[i].CaseManagerInitials  = childCase.CaseManagerInitials;
                    siblings[i].CaseManagerName      = childCase.CaseManagerName;
                    siblings[i].CaseIsClosed         = childCase.IsClosed;
                    if (!childCase.IsClosed) // Hvis sagen ikke er afsluttet så behøver vi ikke at gå resten igennem
                    {
                        break;
                    }
                }
            }
            child.Siblings = siblings.AsEnumerable();
            return(child);
        }
        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);
        }