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); }
/// <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); }