private AcadreServiceV7.ContactSearchResponseType GetCreateAcadreContact(string CPR)
        {
            var Contact = new AcadreServiceV7.ContactSearchResponseType();

            Contact.ContactTypeName = "Person";
            var searchContactCriterion = new AcadreServiceV7.SearchContactCriterionType2();

            searchContactCriterion.ContactTypeName = "Person";
            searchContactCriterion.SearchTerm      = CPR;
            var foundContacts = contactService.SearchContacts(searchContactCriterion);

            if (foundContacts.Length > 0)
            {
                // contact already exists, read GUID and name
                Contact = foundContacts.First();
            }
            else
            {
                // forsøger at finde CPR i CPR Broker
                SimplePerson simplePerson;
                try
                {
                    simplePerson = CPRBrokerService.GetSimplePersonByCPR(CPR);
                }
                catch (Exception e)
                {
                    throw new Exception("CPR-nummeret (" + CPR + ") kunne ikke findes i CPR-registret", e);
                }
                // contact doesn't exist - create it and assign GUID
                var contact = new AcadreServiceV7.PersonType2();
                contact.PersonCivilRegistrationIdentifierStatusCode = "0";
                contact.PersonCivilRegistrationIdentifier           = CPR;
                contact.PersonNameForAddressingName = Contact.ContactTitle = simplePerson.FullName;
                Contact.GUID = contactService.CreateContact(contact);
            }
            return(Contact);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="personNameForAddressingName"></param>
        /// <param name="personCivilRegistrationNumber"></param>
        /// <param name="caseFileTypeCode"></param>
        /// <param name="accessCode"></param>
        /// <param name="caseFileTitleText"></param>
        /// <param name="journalizingCode"></param>
        /// <param name="facet"></param>
        /// <param name="caseResponsible"></param>
        /// <param name="administrativeUnit"></param>
        /// <param name="caseContent"></param>
        /// <param name="caseFileDisposalCode"></param>
        /// <param name="deletionCode"></param>
        /// <param name="caseRestrictedFromPublicText"></param>
        /// <returns></returns>
        public static string CreateCase(
            /* Case party's name */
            string personNameForAddressingName,
            /* Case party's CPR number */
            string personCivilRegistrationNumber,

            /* Case type. One of the following:
             * "EMSAG" (emnesag)
             * "BGSAG" (borgersag)
             * "EJSAG" (ejendomssag)
             * "PERSAG" (personalesag)
             * "BYGGESAG" (byggesag) */
            string caseFileTypeCode,

            /* Security code. One of the following:
             * "BO" (borgersag)
             * "KK" (kommunekode)
             * "LP" (lukket punkt)
             * "PP" (personpunkt) */
            string accessCode,
            /* Case title */
            string caseFileTitleText,
            /* KLE journalizing code (http://www.kle-online.dk/emneplan/00/) */
            string journalizingCode,
            /* KLE facet for the specified journalizing code */
            string facet,

            /* Username of the user creating this case; get from Active Directory
             * (the AcadreServiceFactory.GetConfigurationService7().GetUserList(...) method will
             * return a full list) */
            string caseResponsible,

            /* Identifier of the administrative unit; should probably be "80" for "Løn og personale"
             * (the AcadreServiceFactory.GetConfigurationService7().GetAdminUnitList(...) method
             * will return a full list) */
            string administrativeUnit,
            /* Case content */
            string caseContent,

            /* Discard code. One of the following(?):
             * "B" (bevares),
             * "K" (kasseres),
             * "K5" (kasseres efter 5 år),
             * "K10" (kasseres efter 10 år)
             * "K20" (kasseres efter 20 år) */
            string caseFileDisposalCode,
            /* Deletion code; "P1800D" seems to be the standard value here */
            string deletionCode,
            string caseRestrictedFromPublicText
            )
        {
            var caseService          = Acadre.AcadreServiceFactory.GetCaseService7();
            var contactService       = Acadre.AcadreServiceFactory.GetContactService7();
            var configurationService = Acadre.AcadreServiceFactory.GetConfigurationService7();

            // look up contact by cprnumber
            var searchContactCriterion = new AcadreServiceV7.SearchContactCriterionType2();

            searchContactCriterion.ContactTypeName = "Person";
            searchContactCriterion.SearchTerm      = personCivilRegistrationNumber;

            AcadreServiceV7.ContactSearchResponseType[] foundContacts =
                contactService.SearchContacts(searchContactCriterion);

            string contactGUID;

            if (foundContacts.Length > 0)
            {
                // contact already exists, read GUID and name
                contactGUID = foundContacts.First().GUID;
            }
            else
            {
                // contact doesn't exist - create it and assign GUID
                var contact = new AcadreServiceV7.PersonType2();
                contact.PersonCivilRegistrationIdentifierStatusCode = "0";
                contact.PersonCivilRegistrationIdentifier           = personCivilRegistrationNumber;
                contact.PersonNameForAddressingName = personNameForAddressingName;
                contactGUID = contactService.CreateContact(contact);
            }

            // create the case
            var createCaseRequest = new AcadreServiceV7.CreateCaseRequestType();

            AcadreServiceV7.CaseFileType3 caseFile = new AcadreServiceV7.CaseFileType3();
            caseFile.CaseFileTypeCode         = caseFileTypeCode;
            caseFile.Year                     = DateTime.Now.Year.ToString();
            caseFile.CreationDate             = DateTime.Now;
            caseFile.CaseFileTitleText        = personCivilRegistrationNumber; // must be set to contact cpr number for BGSAG
            caseFile.TitleUnofficialIndicator = false;
            caseFile.TitleAlternativeText     = personNameForAddressingName;   // must be set to contact name for BGSAG
            caseFile.RestrictedFromPublicText = caseRestrictedFromPublicText;
            caseFile.CaseFileStatusCode       = "B";
            caseFile.CaseFileDisposalCode     = caseFileDisposalCode;
            caseFile.DeletionCode             = deletionCode;
            caseFile.AccessCode               = accessCode;

            caseFile.AdministrativeUnit = new AcadreServiceV7.AdministrativeUnitType[]
            {
                new AcadreServiceV7.AdministrativeUnitType()
                {
                    AdministrativeUnitReference = administrativeUnit
                }
            };

            caseFile.CustomFieldCollection = new AcadreServiceV7.CustomField[]
            {
                new AcadreServiceV7.CustomField()
                {
                    Name = "df1", Value = caseContent
                }
                , new AcadreServiceV7.CustomField()
                {
                    Name = "df25", Value = contactGUID
                }
            };

            caseFile.Classification = new AcadreServiceV7.ClassificationType
            {
                Category = new AcadreServiceV7.CategoryType[] {
                    new AcadreServiceV7.CategoryType()
                    {
                        Principle = "KL Koder", Literal = journalizingCode
                    }
                    , new AcadreServiceV7.CategoryType()
                    {
                        Principle = "Facetter", Literal = facet
                    }
                }
            };

            caseFile.Party = new AcadreServiceV7.PartyType[] { new AcadreServiceV7.PartyType()
                                                               {
                                                                   CreationDate                 = DateTime.Now
                                                                   , ContactReference           = contactGUID
                                                                   , PublicAccessLevelReference = "3"
                                                                   , IsPrimary = true
                                                               } };

            var userList = configurationService.GetUserList(
                new AcadreServiceV7.EmptyRequestType()).ToList();
            var user = userList.SingleOrDefault(u => u.Initials == caseResponsible);

            if (user != null)
            {
                caseFile.CaseFileManagerReference = user.Id;
            }

            createCaseRequest.CaseFile = caseFile;

            var createCaseResponse = caseService.CreateCase(createCaseRequest);

            // check for multicase (samlesag) response.
            if (createCaseResponse.CreateCaseAndAMCResult == AcadreServiceV7.CreateCaseAndAMCResultType.CaseNotCreatedAndListAMCReceived)
            {
                // create the case in all the multicases
                createCaseRequest.MultiCaseIdentifiers = createCaseResponse.MultiCaseIdentifiers;
                createCaseResponse = createCaseResponse = caseService.CreateCase(createCaseRequest);
            }

            return(createCaseResponse.CaseFileIdentifier);
        }
        public string CreateCase(
            /* Case party's name */
            string personNameForAddressingName,
            /* Case party's CPR number */
            string personCivilRegistrationNumber,

            /* Case type. One of the following:
             * "EMSAG" (emnesag)
             * "BGSAG" (borgersag)
             * "EJSAG" (ejendomssag)
             * "PERSAG" (personalesag)
             * "BYGGESAG" (byggesag)
             * "BUSAG" (Børn og unge sag)*/
            string caseFileTypeCode,

            /* Security code. One of the following:
             * "BO" (borgersag)
             * "KK" (kommunekode)
             * "LP" (lukket punkt)
             * "PP" (personpunkt) */
            string accessCode,
            /* Case title */
            string caseFileTitleText,
            /* KLE journalizing code (http://www.kle-online.dk/emneplan/00/) */
            string journalizingCode,
            /* KLE facet for the specified journalizing code */
            string facet,

            /* Username of the user creating this case; get from Active Directory
             * (the AcadreServiceFactory.GetConfigurationService7().GetUserList(...) method will
             * return a full list) */
            string caseResponsible,

            /* Identifier of the administrative unit; should probably be "80" for "Løn og personale"
             * (the AcadreServiceFactory.GetConfigurationService7().GetAdminUnitList(...) method
             * will return a full list) */
            string administrativeUnit,
            /* Case content */
            string caseContent,

            /* Discard code. One of the following(?):
             * "B" (bevares),
             * "K" (kasseres),
             * "K5" (kasseres efter 5 år),
             * "K10" (kasseres efter 10 år)
             * "K20" (kasseres efter 20 år) */
            string caseFileDisposalCode,
            /* Deletion code; "P1800D" seems to be the standard value here */
            string deletionCode,
            string caseRestrictedFromPublicText,
            string SpecialistID,
            string RecommendationID,
            string CategoryID,
            string SubType
            )
        {
            // look up contact by cprnumber
            var searchContactCriterion = new AcadreServiceV7.SearchContactCriterionType2();

            searchContactCriterion.ContactTypeName = "Person";
            searchContactCriterion.SearchTerm      = personCivilRegistrationNumber;

            AcadreServiceV7.ContactSearchResponseType[] foundContacts =
                contactService.SearchContacts(searchContactCriterion);

            var PrimaryContact = GetCreateAcadreContact(personCivilRegistrationNumber);
            var simplePerson   = CPRBrokerService.GetSimplePersonByCPR(personCivilRegistrationNumber);

            // create the case
            var createCaseRequest = new AcadreServiceV7.CreateCaseRequestType();

            AcadreServiceV7.CaseFileType3 caseFile;
            if (caseFileTypeCode == "BUSAG")
            {
                AcadreServiceV7.BUCaseFileType BUcaseFile = new AcadreServiceV7.BUCaseFileType();
                try
                {
                    BUcaseFile.SpecialistId          = int.Parse(SpecialistID); // Faggruppe
                    BUcaseFile.SpecialistIdSpecified = true;
                }
                catch
                {
                    BUcaseFile.SpecialistIdSpecified = false;
                }
                try
                {
                    BUcaseFile.RecommendationId          = int.Parse(RecommendationID); // Henvendelse
                    BUcaseFile.RecommendationIdSpecified = true;
                }
                catch
                {
                    BUcaseFile.RecommendationIdSpecified = false;
                }
                try
                {
                    BUcaseFile.CategoryId          = int.Parse(CategoryID); // Kategori
                    BUcaseFile.CategoryIdSpecified = true;
                }
                catch
                {
                    BUcaseFile.CategoryIdSpecified = false;
                }
                caseFile = BUcaseFile;
            }
            else
            {
                caseFile = new AcadreServiceV7.CaseFileType3();
            }
            caseFile.SubType          = SubType; // SubType from input argument
            caseFile.CaseFileTypeCode = caseFileTypeCode;
            caseFile.Year             = DateTime.Now.Year.ToString();
            caseFile.CreationDate     = DateTime.Now;
            if (((IEnumerable <string>) new string[3]
            {
                "BUSAG",
                "BGSAG",
                "PERSAG"
            }).Contains(CaseFileTypeCode))
            {
                var KLECategory = configurationService.GetCategoryList(new AcadreServiceV7.EmptyRequestType()).ToList().Where(x => x.Principle.Literal == "KL Koder" && x.Literal == journalizingCode).FirstOrDefault();
                if (KLECategory == null)
                {
                    throw (new Exception("kunne ikke finde KLE nummer"));
                }
                string KLEtitle = KLECategory.Title;
                caseFile.CaseFileTitleText = string.Format("{0} - {1} - {2}", personCivilRegistrationNumber, simplePerson.FullName, KLEtitle);
            }
            else
            {
                caseFile.CaseFileTitleText = caseFileTitleText;
            }
            caseFile.CaseFileTitleText        = personCivilRegistrationNumber; // must be set to contact cpr number for BGSAG
            caseFile.TitleUnofficialIndicator = false;
            caseFile.TitleAlternativeText     = simplePerson.FullName;         // must be set to contact name for BGSAG
            caseFile.RestrictedFromPublicText = caseRestrictedFromPublicText;
            caseFile.CaseFileStatusCode       = "B";
            caseFile.CaseFileDisposalCode     = caseFileDisposalCode;
            caseFile.DeletionCode             = deletionCode;
            caseFile.AccessCode = accessCode;

            caseFile.AdministrativeUnit = new AcadreServiceV7.AdministrativeUnitType[]
            {
                new AcadreServiceV7.AdministrativeUnitType()
                {
                    AdministrativeUnitReference = administrativeUnit
                }
            };

            caseFile.CustomFieldCollection = new AcadreServiceV7.CustomField[]
            {
                new AcadreServiceV7.CustomField()
                {
                    Name = "df1", Value = caseContent
                }
                , new AcadreServiceV7.CustomField()
                {
                    Name = "df25", Value = PrimaryContact.GUID
                }
            };

            caseFile.Classification = new AcadreServiceV7.ClassificationType
            {
                Category = new AcadreServiceV7.CategoryType[] {
                    new AcadreServiceV7.CategoryType()
                    {
                        Principle = "KL Koder", Literal = journalizingCode
                    }
                    , new AcadreServiceV7.CategoryType()
                    {
                        Principle = "Facetter", Literal = facet
                    }
                }
            };

            if (caseFileTypeCode == "BUSAG")
            {
                var child = CPRBrokerService.GetChild(personCivilRegistrationNumber);
                // Forældre skal også med som kontakter
                var parents = new List <SimplePerson>();
                parents.AddRange(child.Mom ?? new SimplePerson[] { }); parents.AddRange(child.Dad ?? new SimplePerson[] { });
                var parentsGUI = new List <string>();
                foreach (var parent in parents)
                {
                    parentsGUI.Add(GetCreateAcadreContact(parent.CPR).GUID);
                }
                // Barnet tilføjes som primær part og forældre tilføjes som parter
                caseFile.Party    = new AcadreServiceV7.PartyType[1 + parentsGUI.Count];
                caseFile.Party[0] = new AcadreServiceV7.PartyType()
                {
                    CreationDate               = DateTime.Now,
                    ContactReference           = PrimaryContact.GUID,
                    PublicAccessLevelReference = "3",
                    IsPrimary = true
                };
                int i = 1;
                foreach (var parentGUI in parentsGUI)
                {
                    caseFile.Party[i] = new AcadreServiceV7.PartyType()
                    {
                        CreationDate               = DateTime.Now,
                        ContactReference           = parentGUI,
                        PublicAccessLevelReference = "3",
                        IsPrimary = false
                    };
                    i++;
                }
            }
            else
            {
                caseFile.Party = new AcadreServiceV7.PartyType[] { new AcadreServiceV7.PartyType()
                                                                   {
                                                                       CreationDate                 = DateTime.Now
                                                                       , ContactReference           = PrimaryContact.GUID
                                                                       , PublicAccessLevelReference = "3"
                                                                       , IsPrimary = true
                                                                   } }
            };

            var userList = configurationService.GetUserList(
                new AcadreServiceV7.EmptyRequestType()).ToList();
            var user = userList.SingleOrDefault(u => u.Initials == caseResponsible);

            if (user != null)
            {
                caseFile.CaseFileManagerReference = user.Id;
            }

            createCaseRequest.CaseFile = caseFile;

            var createCaseResponse = caseService.CreateCase(createCaseRequest);

            // check for multicase (samlesag) response.
            if (createCaseResponse.CreateCaseAndAMCResult == AcadreServiceV7.CreateCaseAndAMCResultType.CaseNotCreatedAndListAMCReceived)
            {
                // create the case in all the multicases
                createCaseRequest.MultiCaseIdentifiers = createCaseResponse.MultiCaseIdentifiers;
                createCaseResponse = createCaseResponse = caseService.CreateCase(createCaseRequest);
            }

            return(createCaseResponse.CaseFileIdentifier);
        }
        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);
        }