private void AddNeedsAssessment(era_evacuationfile file, era_needassessment needsAssessment) { essContext.AddToera_needassessments(needsAssessment); essContext.SetLink(file, nameof(era_evacuationfile.era_CurrentNeedsAssessmentid), needsAssessment); essContext.AddLink(file, nameof(era_evacuationfile.era_needsassessment_EvacuationFile), needsAssessment); essContext.SetLink(needsAssessment, nameof(era_needassessment.era_EvacuationFile), file); essContext.SetLink(needsAssessment, nameof(era_needassessment.era_Jurisdictionid), essContext.LookupJurisdictionByCode(needsAssessment._era_jurisdictionid_value?.ToString())); if (needsAssessment._era_reviewedbyid_value.HasValue) { var teamMember = essContext.era_essteamusers.ByKey(needsAssessment._era_reviewedbyid_value).GetValue(); essContext.SetLink(needsAssessment, nameof(era_needassessment.era_ReviewedByid), teamMember); essContext.AddLink(teamMember, nameof(era_essteamuser.era_era_essteamuser_era_needassessment_ReviewedByid), needsAssessment); } foreach (var member in needsAssessment.era_era_householdmember_era_needassessment) { if (member.era_householdmemberid.HasValue) { //update member essContext.AttachTo(nameof(essContext.era_householdmembers), member); essContext.UpdateObject(member); } else { //create member member.era_householdmemberid = Guid.NewGuid(); essContext.AddToera_householdmembers(member); } AssignHouseholdMember(file, member); AssignHouseholdMember(needsAssessment, member); } }
private void CreateHouseholdMember(era_evacuationfile eraEvacuationFile, era_needassessment eraNeedsAssessment, era_householdmember member) { member.era_householdmemberid = Guid.NewGuid(); var contact = member.era_Registrant; if (contact.contactid.HasValue) { //TODO: figure out a nicer way to handle already tracked primary contact handling var trackedContact = (contact)essContext.EntityTracker.Entities.SingleOrDefault(e => e.Entity is contact c && c.contactid == contact.contactid).Entity; if (trackedContact != null) { contact = trackedContact; } else { essContext.AttachTo(nameof(essContext.contacts), contact); } } else { contact.contactid = Guid.NewGuid(); contact.era_authenticated = false; contact.era_verified = false; contact.era_registrationdate = DateTimeOffset.UtcNow; essContext.AddTocontacts(contact); } essContext.AddToera_householdmembers(member); essContext.AddLink(member, nameof(era_householdmember.era_era_householdmember_era_needassessment), eraNeedsAssessment); //essContext.AddLink(eraNeedsAssessment, nameof(era_needassessment.era_era_householdmember_era_needassessment), member); essContext.SetLink(member, nameof(era_householdmember.era_EvacuationFileid), eraEvacuationFile); essContext.SetLink(member, nameof(era_householdmember.era_Registrant), contact); essContext.AddLink(contact, nameof(contact.era_contact_era_householdmember_Registrantid), member); }
private void CreatePet(era_needassessment eraNeedsAssessment, era_needsassessmentanimal pet) { pet.era_needsassessmentanimalid = Guid.NewGuid(); essContext.AddToera_needsassessmentanimals(pet); essContext.SetLink(pet, nameof(era_needsassessmentanimal.era_NeedsAssessment), eraNeedsAssessment); essContext.AddLink(eraNeedsAssessment, nameof(eraNeedsAssessment.era_era_needassessment_era_needsassessmentanimal_NeedsAssessment), pet); }
private void CreateNeedsAssessment(era_evacuationfile eraEvacuationFile, era_needassessment eraNeedsAssessment, IEnumerable <era_householdmember> members, IEnumerable <era_needsassessmentanimal> pets) { eraNeedsAssessment.era_needassessmentid = Guid.NewGuid(); eraNeedsAssessment.era_needsassessmentdate = DateTimeOffset.UtcNow; essContext.AddToera_needassessments(eraNeedsAssessment); essContext.AddLink(eraEvacuationFile, nameof(eraEvacuationFile.era_needsassessment_EvacuationFile), eraNeedsAssessment); foreach (var member in members) { CreateHouseholdMember(eraEvacuationFile, eraNeedsAssessment, member); } foreach (var pet in pets) { CreatePet(eraNeedsAssessment, pet); } }
private void AssignHouseholdMember(era_needassessment needsAssessment, era_householdmember member) { essContext.AddLink(member, nameof(era_householdmember.era_era_householdmember_era_needassessment), needsAssessment); //essContext.AddLink(needsAssessment, nameof(era_needassessment.era_era_householdmember_era_needassessment), member); }
private era_evacuationfile CreateEvacuationFile(EssContext essContext, contact primaryContact, string fileId, string?paperFileNumber = null) { var file = new era_evacuationfile() { era_evacuationfileid = Guid.NewGuid(), era_name = fileId, era_evacuationfiledate = DateTime.UtcNow, era_securityphrase = EvacuationFileSecurityPhrase, era_paperbasedessfile = paperFileNumber }; essContext.AddToera_evacuationfiles(file); essContext.SetLink(file, nameof(era_evacuationfile.era_TaskId), this.activeTask); var needsAssessment = new era_needassessment { era_needassessmentid = Guid.NewGuid(), era_needsassessmenttype = (int)NeedsAssessmentTypeOptionSet.Preliminary, era_insurancecoverage = (int)InsuranceOptionOptionSet.Unknown }; essContext.AddToera_needassessments(needsAssessment); essContext.SetLink(file, nameof(era_evacuationfile.era_CurrentNeedsAssessmentid), needsAssessment); essContext.AddLink(file, nameof(era_evacuationfile.era_needsassessment_EvacuationFile), needsAssessment); essContext.SetLink(file, nameof(era_evacuationfile.era_Registrant), primaryContact); var primaryMember = new era_householdmember { era_householdmemberid = Guid.NewGuid(), era_dateofbirth = primaryContact.birthdate, era_firstname = primaryContact.firstname, era_lastname = primaryContact.lastname, era_gender = primaryContact.gendercode, era_initials = primaryContact.era_initial, era_isprimaryregistrant = true }; var householdMembers = Enumerable.Range(1, Random.Shared.Next(1, 5)).Select(i => new era_householdmember { era_householdmemberid = Guid.NewGuid(), era_dateofbirth = new Date(2000 + i, i, i), era_firstname = $"{testPrefix}-member-first-{i}", era_lastname = $"{testPrefix}-member-last-{i}", era_gender = Random.Shared.Next(1, 3), era_isprimaryregistrant = false }).Prepend(primaryMember) .Append(new era_householdmember { era_householdmemberid = Guid.NewGuid(), era_dateofbirth = new Date(1998, 1, 2), era_firstname = $"{testPrefix}-member-no-registrant-first", era_lastname = $"{testPrefix}-member-no-registrant-last", era_gender = Random.Shared.Next(1, 3), era_isprimaryregistrant = false }).ToArray(); foreach (var member in householdMembers) { essContext.AddToera_householdmembers(member); essContext.SetLink(member, nameof(era_householdmember.era_EvacuationFileid), file); essContext.AddLink(member, nameof(era_householdmember.era_era_householdmember_era_needassessment), needsAssessment); if (member.era_isprimaryregistrant == true) { essContext.SetLink(member, nameof(era_householdmember.era_Registrant), primaryContact); essContext.SetLink(file, nameof(era_evacuationfile.era_Registrant), primaryContact); } } file.era_era_evacuationfile_era_householdmember_EvacuationFileid = new Collection <era_householdmember>(householdMembers); return(file); }
public async Task <string> CreateRegistrationAnonymous(AnonymousRegistration registration) { var now = DateTimeOffset.Now; #pragma warning disable CA5394 // Do not use insecure randomness var essFileNumber = new Random().Next(999999999); //temporary ESS file number random generator #pragma warning restore CA5394 // Do not use insecure randomness // evacuation file var file = new era_evacuationfile { era_evacuationfileid = Guid.NewGuid(), era_essfilenumber = essFileNumber, era_evacuationfiledate = now, era_addressline1 = registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.AddressLine1, era_addressline2 = registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.AddressLine2, era_city = registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.AddressLine1, era_Jurisdiction = Lookup(registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.Jurisdiction), era_province = registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.StateProvince.StateProvinceCode, era_country = registration.PreliminaryNeedsAssessment.EvacuatedFromAddress.Country.CountryCode, era_collectionandauthorization = registration.RegistrationDetails.InformationCollectionConsent, era_sharingrestriction = registration.RegistrationDetails.RestrictedAccess, era_phonenumberrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Phone), era_emailrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Email), era_secrettext = registration.RegistrationDetails.SecretPhrase, }; // registrant var registrant = new contact { contactid = Guid.NewGuid(), era_registranttype = 174360000, era_authenticated = false, era_verified = false, era_registrationdate = now, firstname = registration.RegistrationDetails.PersonalDetails.FirstName, lastname = registration.RegistrationDetails.PersonalDetails.LastName, era_preferredname = registration.RegistrationDetails.PersonalDetails.PreferredName, era_initial = registration.RegistrationDetails.PersonalDetails.Initials, gendercode = LookupGender(registration.RegistrationDetails.PersonalDetails.Gender), birthdate = FromDateTime(DateTime.Parse(registration.RegistrationDetails.PersonalDetails.DateOfBirth)), era_collectionandauthorization = registration.RegistrationDetails.InformationCollectionConsent, era_sharingrestriction = registration.RegistrationDetails.RestrictedAccess, address1_line1 = registration.RegistrationDetails.PrimaryAddress.AddressLine1, address1_line2 = registration.RegistrationDetails.PrimaryAddress.AddressLine2, address1_city = registration.RegistrationDetails.PrimaryAddress.Jurisdiction.JurisdictionName, address1_country = registration.RegistrationDetails.PrimaryAddress.Country.CountryCode, era_City = Lookup(registration.RegistrationDetails.PrimaryAddress.Jurisdiction), era_ProvinceState = Lookup(registration.RegistrationDetails.PrimaryAddress.StateProvince), era_Country = Lookup(registration.RegistrationDetails.PrimaryAddress.Country), address1_postalcode = registration.RegistrationDetails.PrimaryAddress.PostalCode, address2_line1 = registration.RegistrationDetails.MailingAddress.AddressLine1, address2_line2 = registration.RegistrationDetails.MailingAddress.AddressLine2, address2_city = registration.RegistrationDetails.MailingAddress.Jurisdiction.JurisdictionName, address2_country = registration.RegistrationDetails.MailingAddress.Country.CountryName, era_MailingCity = Lookup(registration.RegistrationDetails.MailingAddress.Jurisdiction), era_MailingProvinceState = Lookup(registration.RegistrationDetails.MailingAddress.StateProvince), era_MailingCountry = Lookup(registration.RegistrationDetails.MailingAddress.Country), address2_postalcode = registration.RegistrationDetails.MailingAddress.PostalCode, emailaddress1 = registration.RegistrationDetails.ContactDetails.Email, address1_telephone1 = registration.RegistrationDetails.ContactDetails.Phone, era_phonenumberrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Phone), era_emailrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Email), era_secrettext = registration.RegistrationDetails.SecretPhrase }; // members var members = (registration.PreliminaryNeedsAssessment.FamilyMembers ?? Array.Empty <PersonDetails>()).Select(fm => new contact { contactid = Guid.NewGuid(), era_registranttype = 174360001, era_authenticated = false, era_verified = false, era_registrationdate = now, firstname = fm.FirstName, lastname = fm.LastName, era_preferredname = fm.PreferredName, era_initial = fm.Initials, gendercode = LookupGender(fm.Gender), birthdate = FromDateTime(DateTime.Parse(fm.DateOfBirth)), era_collectionandauthorization = registration.RegistrationDetails.InformationCollectionConsent, era_sharingrestriction = registration.RegistrationDetails.RestrictedAccess, address1_line1 = registration.RegistrationDetails.PrimaryAddress.AddressLine1, address1_line2 = registration.RegistrationDetails.PrimaryAddress.AddressLine2, address1_city = registration.RegistrationDetails.PrimaryAddress.Jurisdiction.JurisdictionName, address1_country = registration.RegistrationDetails.PrimaryAddress.Country.CountryCode, era_City = Lookup(registration.RegistrationDetails.PrimaryAddress.Jurisdiction), era_ProvinceState = Lookup(registration.RegistrationDetails.PrimaryAddress.StateProvince), era_Country = Lookup(registration.RegistrationDetails.PrimaryAddress.Country), address1_postalcode = registration.RegistrationDetails.PrimaryAddress.PostalCode, address2_line1 = registration.RegistrationDetails.MailingAddress.AddressLine1, address2_line2 = registration.RegistrationDetails.MailingAddress.AddressLine2, address2_city = registration.RegistrationDetails.MailingAddress.Jurisdiction.JurisdictionName, address2_country = registration.RegistrationDetails.MailingAddress.Country.CountryName, era_MailingCity = Lookup(registration.RegistrationDetails.MailingAddress.Jurisdiction), era_MailingProvinceState = Lookup(registration.RegistrationDetails.MailingAddress.StateProvince), era_MailingCountry = Lookup(registration.RegistrationDetails.MailingAddress.Country), address2_postalcode = registration.RegistrationDetails.MailingAddress.PostalCode, emailaddress1 = registration.RegistrationDetails.ContactDetails.Email, address1_telephone1 = registration.RegistrationDetails.ContactDetails.Phone, era_phonenumberrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Phone), era_emailrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Email), era_secrettext = registration.RegistrationDetails.SecretPhrase }); // needs assessment var needsAssessment = new era_needassessment { era_needassessmentid = Guid.NewGuid(), era_needsassessmentdate = now, era_EvacuationFile = file, era_needsassessmenttype = 174360000, era_foodrequirement = Lookup(registration.PreliminaryNeedsAssessment.RequiresFood), era_clothingrequirement = Lookup(registration.PreliminaryNeedsAssessment.RequiresClothing), era_dietaryrequirement = registration.PreliminaryNeedsAssessment.HaveSpecialDiet, era_incidentalrequirement = Lookup(registration.PreliminaryNeedsAssessment.RequiresIncidentals), era_lodgingrequirement = Lookup(registration.PreliminaryNeedsAssessment.RequiresLodging), era_transportationrequirement = Lookup(registration.PreliminaryNeedsAssessment.RequiresTransportation), era_medicationrequirement = registration.PreliminaryNeedsAssessment.HaveMedication, era_insurancecoverage = Lookup(registration.PreliminaryNeedsAssessment.Insurance), era_collectionandauthorization = registration.RegistrationDetails.InformationCollectionConsent, era_sharingrestriction = registration.RegistrationDetails.RestrictedAccess, era_phonenumberrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Phone), era_emailrefusal = string.IsNullOrEmpty(registration.RegistrationDetails.ContactDetails.Email) }; // pets var pets = (registration.PreliminaryNeedsAssessment.Pets ?? Array.Empty <Pet>()).Select(p => new era_evacuee { era_evacueeid = Guid.NewGuid(), era_needsassessment = needsAssessment, era_amountofpets = Convert.ToInt32(p.Quantity), era_typeofpet = p.Type }); // set enity data and entity links in Dynamics // save evacuation file to dynamics dynamicsClient.AddToera_evacuationfiles(file); // save needs assessment to dynamics dynamicsClient.AddToera_needassessments(needsAssessment); // link evacuation file to needs assessment dynamicsClient.AddLink(file, nameof(file.era_needsassessment_EvacuationFile), needsAssessment); // save registrant to dynamics dynamicsClient.AddTocontacts(registrant); var evacueeRegistrant = new era_evacuee { era_evacueeid = Guid.NewGuid(), era_needsassessment = needsAssessment, era_Registrant = registrant }; dynamicsClient.AddToera_evacuees(evacueeRegistrant); // link registrant and needs assessment to evacuee record dynamicsClient.AddLink(registrant, nameof(registrant.era_contact_evacuee_Registrant), evacueeRegistrant); dynamicsClient.AddLink(needsAssessment, nameof(needsAssessment.era_era_needassessment_era_evacuee_needsassessment), evacueeRegistrant); // save members to dynamics foreach (var member in members) { dynamicsClient.AddTocontacts(member); var evacueeMember = new era_evacuee { era_evacueeid = Guid.NewGuid(), era_needsassessment = needsAssessment, era_Registrant = member }; dynamicsClient.AddToera_evacuees(evacueeMember); // link members and needs assessment to evacuee record dynamicsClient.AddLink(member, nameof(member.era_contact_evacuee_Registrant), evacueeMember); dynamicsClient.AddLink(needsAssessment, nameof(needsAssessment.era_era_needassessment_era_evacuee_needsassessment), evacueeMember); } // save pets to dynamics foreach (var pet in pets) { var petMember = new era_evacuee { era_evacueeid = Guid.NewGuid(), era_needsassessment = needsAssessment, era_typeofpet = pet.era_typeofpet, era_amountofpets = pet.era_amountofpets }; dynamicsClient.AddToera_evacuees(petMember); try { // link pet to evacuee record dynamicsClient.AddLink(needsAssessment, nameof(needsAssessment.era_era_needassessment_era_evacuee_needsassessment), petMember); } catch (ArgumentNullException) { logger.LogError("ArgumentNullException linking entities"); throw; } catch (InvalidOperationException) { logger.LogError("InvalidOperationException linking entities"); throw; } } //post as batch is not accepted by SSG. Sending with default option (multiple requests to the server stopping on the first failure) //var results = await dynamicsClient.SaveChangesAsync(SaveChangesOptions.BatchWithSingleChangeset); var results = await dynamicsClient.SaveChangesAsync(SaveChangesOptions.ContinueOnError); //var newEvacuationFileId = ((era_evacuationfile)results // .Select(r => (EntityDescriptor)((ChangeOperationResponse)r).Descriptor) // .Single(ed => ed.Entity is era_evacuationfile).Entity).era_evacuationfileid; //var essFileNumber = dynamicsClient.era_evacuationfiles // .Where(ef => ef.era_evacuationfileid == newEvacuationFileId) // .Single().era_essfilenumber; return($"E{essFileNumber:D9}"); }