Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
 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);
 }
Пример #6
0
        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);
        }
Пример #7
0
        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}");
        }