Exemplo n.º 1
0
        private static async Task ParallelLoadEvacueeAsync(EssContext ctx, era_evacuationfile file, CancellationToken ct)
        {
            ctx.AttachTo(nameof(EssContext.era_evacuationfiles), file);

            var loadTasks = new List <Task>();

            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_animal_ESSFileid), ct));
            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_TaskId), ct));
            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId), ct));
            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_EvacuatedFromID), ct));

            if (file.era_CurrentNeedsAssessmentid == null)
            {
                loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_CurrentNeedsAssessmentid), ct));
            }

            await Task.WhenAll(loadTasks);

            var householdMembers = (await((DataServiceQuery <era_householdmember>)ctx.era_householdmembers
                                          .Expand(m => m.era_Registrant)
                                          .Where(m => m._era_evacuationfileid_value == file.era_evacuationfileid))
                                    .GetAllPagesAsync(ct))
                                   .ToArray();

            householdMembers.AsParallel().ForAll(m => m.era_EvacuationFileid = file);
            file.era_era_evacuationfile_era_householdmember_EvacuationFileid = new Collection <era_householdmember>(householdMembers);
            if (file.era_TaskId != null)
            {
                file.era_TaskId.era_JurisdictionID = ctx.LookupJurisdictionByCode(file.era_TaskId._era_jurisdictionid_value?.ToString());
            }
        }
        private static async Task ParallelLoadSupportAsync(EssContext ctx, era_evacuationfile file)
        {
            ctx.AttachTo(nameof(EssContext.era_evacuationfiles), file);

            var loadTasks = new List <Task>();

            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_TaskId))));
            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_EvacuatedFromID))));

            loadTasks.Add(Task.Run(async() =>
            {
                await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId));

                foreach (var support in file.era_era_evacuationfile_era_evacueesupport_ESSFileId)
                {
                    ctx.AttachTo(nameof(EssContext.era_evacueesupports), support);

                    var loadSubTasks = new List <Task>();
                    loadSubTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(support, nameof(era_evacueesupport.era_SupplierId))));
                    loadSubTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(support, nameof(era_evacueesupport.era_GroupLodgingCityID))));
                    loadSubTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(support, nameof(era_evacueesupport.era_era_householdmember_era_evacueesupport))));
                    await Task.WhenAll(loadSubTasks.ToArray());

                    ctx.Detach(support);
                }
            }));

            await Task.WhenAll(loadTasks.ToArray());
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        private void VerifyEvacuationFileInvariants(EvacuationFile evacuationFile, era_evacuationfile currentFile = null)
        {
            //Check invariants
            if (string.IsNullOrEmpty(evacuationFile.PrimaryRegistrantId))
            {
                throw new ArgumentNullException($"The file has no associated primary registrant");
            }
            if (evacuationFile.NeedsAssessment == null)
            {
                throw new ArgumentNullException($"File {evacuationFile.Id} must have a needs assessment");
            }

            if (evacuationFile.Id == null)
            {
                if (evacuationFile.NeedsAssessment.HouseholdMembers.Count(m => m.IsPrimaryRegistrant) != 1)
                {
                    throw new InvalidOperationException($"File {evacuationFile.Id} must have a single primary registrant household member");
                }
            }
            else
            {
                if (evacuationFile.NeedsAssessment.HouseholdMembers.Count(m => m.IsPrimaryRegistrant) > 1)
                {
                    throw new InvalidOperationException($"File {evacuationFile.Id} can not have multiple primary registrant household members");
                }

                if (currentFile != null && currentFile.era_era_evacuationfile_era_householdmember_EvacuationFileid != null &&
                    currentFile.era_era_evacuationfile_era_householdmember_EvacuationFileid.Any(m => m.era_isprimaryregistrant == true) &&
                    evacuationFile.NeedsAssessment.HouseholdMembers.Any(m => m.IsPrimaryRegistrant && string.IsNullOrEmpty(m.Id)))
                {
                    throw new InvalidOperationException($"File {evacuationFile.Id} can not have multiple primary registrant household members");
                }
            }
        }
        private static async Task ParallelLoadEvacueeAsync(EssContext ctx, era_evacuationfile file)
        {
            ctx.AttachTo(nameof(EssContext.era_evacuationfiles), file);

            var loadTasks = new List <Task>();

            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_animal_ESSFileid))));
            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_TaskId))));
            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId))));
            loadTasks.Add(Task.Run(async() => await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_EvacuatedFromID))));

            loadTasks.Add(Task.Run(async() =>
            {
                await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid));

                if (file.era_CurrentNeedsAssessmentid == null)
                {
                    await ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_CurrentNeedsAssessmentid));
                }

                foreach (var member in file.era_era_evacuationfile_era_householdmember_EvacuationFileid)
                {
                    if (member._era_registrant_value.HasValue)
                    {
                        ctx.AttachTo(nameof(EssContext.era_householdmembers), member);
                        await ctx.LoadPropertyAsync(member, nameof(era_householdmember.era_Registrant));
                        ctx.Detach(member);
                    }
                }
            }));
            await Task.WhenAll(loadTasks.ToArray());
        }
Exemplo n.º 6
0
        private void UpdateSupport(era_evacuationfile file, era_evacueesupport support)
        {
            var existingSupport = essContext.era_evacueesupports
                                  .Where(s => s.era_name == support.era_name)
                                  .SingleOrDefault();

            if (existingSupport == null)
            {
                throw new Exception($"Support {support.era_name} not found");
            }
            if (existingSupport._era_evacuationfileid_value != file.era_evacuationfileid)
            {
                throw new Exception($"Support {support.era_name} not found in file {file.era_name}");
            }

            essContext.LoadProperty(existingSupport, nameof(era_evacueesupport.era_era_householdmember_era_evacueesupport));
            var currentHouseholdMembers = existingSupport.era_era_householdmember_era_evacueesupport.ToArray();

            essContext.Detach(existingSupport);
            //foreach (var member in existingSupport.era_era_householdmember_era_evacueesupport) essContext.Detach(member);

            support.era_evacueesupportid = existingSupport.era_evacueesupportid;
            essContext.AttachTo(nameof(EssContext.era_evacueesupports), support);

            var teamMember = essContext.era_essteamusers.ByKey(support._era_issuedbyid_value).GetValue();

            essContext.SetLink(support, nameof(era_evacueesupport.era_IssuedById), teamMember);

            essContext.UpdateObject(support);
            //remove household members no longer part of the support
            RemoveHouseholdMembersFromSupport(support, currentHouseholdMembers.Where(m => !support.era_era_householdmember_era_evacueesupport.Any(im => im.era_householdmemberid == m.era_householdmemberid)));
            //add household members to support
            AssignHouseholdMembersToSupport(support, support.era_era_householdmember_era_evacueesupport.Where(m => !currentHouseholdMembers.Any(im => im.era_householdmemberid == m.era_householdmemberid)));
            AssignSupplierToSupport(support);
        }
Exemplo n.º 7
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);
            }
        }
Exemplo n.º 8
0
 private void RemovePets(era_evacuationfile file)
 {
     foreach (var pet in file.era_era_evacuationfile_era_animal_ESSFileid)
     {
         essContext.AttachTo(nameof(essContext.era_animals), pet);
         essContext.DeleteObject(pet);
     }
 }
Exemplo n.º 9
0
 private void AddPets(era_evacuationfile file)
 {
     foreach (var pet in file.era_era_evacuationfile_era_animal_ESSFileid)
     {
         essContext.AddToera_animals(pet);
         essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_animal_ESSFileid), pet);
         essContext.SetLink(pet, nameof(era_animal.era_ESSFileid), file);
     }
 }
Exemplo n.º 10
0
 private void RemovePets(era_evacuationfile file)
 {
     essContext.LoadProperty(file, nameof(era_evacuationfile.era_era_evacuationfile_era_animal_ESSFileid));
     foreach (var pet in file.era_era_evacuationfile_era_animal_ESSFileid)
     {
         essContext.DeleteObject(pet);
         essContext.DeleteLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_animal_ESSFileid), pet);
     }
 }
Exemplo n.º 11
0
        private void CreateEvacueeSupports(EssContext essContext, era_evacuationfile file, contact contact, era_essteamuser creator, string prefix)
        {
            var referralSupportTypes  = new[] { 174360001, 174360002, 174360003, 174360004, 174360007 };
            var etransferSupportTypes = new[] { 174360000, 174360005, 174360006, 174360008 };

            var referrals = referralSupportTypes.Select((t, i) => new era_evacueesupport
            {
                era_evacueesupportid    = Guid.NewGuid(),
                era_suppliernote        = $"{prefix}-ref-{i}",
                era_validfrom           = DateTime.UtcNow.AddDays(-3),
                era_validto             = DateTime.UtcNow.AddDays(3),
                era_supporttype         = t,
                era_supportdeliverytype = 174360000, //referral
                statuscode = 1,                      //active
                statecode  = 0
            }).ToArray();
            var etransfers = etransferSupportTypes.Select((t, i) => new era_evacueesupport
            {
                era_evacueesupportid    = Guid.NewGuid(),
                era_suppliernote        = $"{prefix}-etr-{i}",
                era_validfrom           = DateTime.UtcNow.AddDays(-3),
                era_validto             = DateTime.UtcNow.AddDays(3),
                era_supporttype         = t,
                era_supportdeliverytype = 174360001, //etransfer
                era_totalamount         = 100m,
                statuscode = 174360002,              //approved
                statecode  = 0
            }).ToArray();

            foreach (var support in referrals)
            {
                essContext.AddToera_evacueesupports(support);
                essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId), support);
                essContext.SetLink(support, nameof(era_evacueesupport.era_IssuedById), creator);
            }

            foreach (var support in etransfers)
            {
                essContext.AddToera_evacueesupports(support);
                essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId), support);
                essContext.SetLink(support, nameof(era_evacueesupport.era_IssuedById), creator);
                essContext.SetLink(support, nameof(era_evacueesupport.era_PayeeId), contact);
            }

            var supports         = referrals.Concat(etransfers).ToArray();
            var householdMembers = file.era_era_evacuationfile_era_householdmember_EvacuationFileid.ToArray();

            foreach (var support in supports)
            {
                var supportHouseholdMembers = householdMembers.TakeRandom();
                foreach (var member in supportHouseholdMembers)
                {
                    essContext.AddLink(member, nameof(era_householdmember.era_era_householdmember_era_evacueesupport), support);
                }
            }
        }
Exemplo n.º 12
0
        private void AssignToTask(era_evacuationfile file, string taskId)
        {
            if (string.IsNullOrEmpty(taskId))
            {
                return;
            }
            var task = essContext.era_tasks.Where(t => t.era_name == taskId).SingleOrDefault();

            if (task == null)
            {
                throw new ArgumentException($"Task {taskId} not found");
            }
            essContext.AddLink(task, nameof(era_task.era_era_task_era_evacuationfileId), file);
        }
Exemplo n.º 13
0
 private void AssignHouseholdMember(era_evacuationfile file, era_householdmember member)
 {
     if (member._era_registrant_value != null)
     {
         var registrant = essContext.contacts.Where(c => c.contactid == member._era_registrant_value).SingleOrDefault();
         if (registrant == null)
         {
             throw new ArgumentException($"Household member has registrant id {member._era_registrant_value} which was not found");
         }
         essContext.AddLink(registrant, nameof(contact.era_contact_era_householdmember_Registrantid), member);
     }
     essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid), member);
     essContext.SetLink(member, nameof(era_householdmember.era_EvacuationFileid), file);
 }
Exemplo n.º 14
0
        private void CreateSupport(era_evacuationfile file, era_evacueesupport support)
        {
            support.era_evacueesupportid = Guid.NewGuid();

            essContext.AddToera_evacueesupports(support);
            essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId), support);
            essContext.AddLink(file.era_CurrentNeedsAssessmentid, nameof(era_needassessment.era_era_needassessment_era_evacueesupport_NeedsAssessmentID), support);
            essContext.SetLink(support, nameof(era_evacueesupport.era_EvacuationFileId), file);
            essContext.SetLink(support, nameof(era_evacueesupport.era_NeedsAssessmentID), file.era_CurrentNeedsAssessmentid);

            var teamMember = essContext.era_essteamusers.Where(tu => tu.era_essteamuserid == support._era_issuedbyid_value).SingleOrDefault();

            essContext.SetLink(support, nameof(era_evacueesupport.era_IssuedById), teamMember);

            AssignSupplierToSupport(support);
            AssignHouseholdMembersToSupport(support, support.era_era_householdmember_era_evacueesupport);
        }
Exemplo n.º 15
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);
            }
        }
Exemplo n.º 16
0
        private era_referralprint CreateReferralPrint(era_evacuationfile file, era_essteamuser member, IEnumerable <era_evacueesupport> supports)
        {
            var referralPrint = new era_referralprint()
            {
                era_referralprintid = Guid.NewGuid(),
                era_name            = testPrefix + "-referral",
            };

            essContext.AddToera_referralprints(referralPrint);
            essContext.SetLink(referralPrint, nameof(era_referralprint.era_ESSFileId), file);
            essContext.SetLink(referralPrint, nameof(era_referralprint.era_RequestingUserId), member);

            foreach (var support in supports)
            {
                essContext.AddLink(referralPrint, nameof(era_referralprint.era_era_referralprint_era_evacueesupport), support);
            }

            return(referralPrint);
        }
Exemplo n.º 17
0
        private IEnumerable <era_evacueesupport> CreateEvacueeSupports(era_evacuationfile file)
        {
            var supports = Enumerable.Range(1, random.Next(1, 5)).Select(i => new era_evacueesupport
            {
                era_evacueesupportid = Guid.NewGuid(),
                era_name             = $"{file.era_name}-support-{i}",
                era_validfrom        = DateTime.UtcNow.AddDays(-3),
                era_validto          = DateTime.UtcNow.AddDays(3),
                era_supporttype      = 174360006
            }).ToArray();

            foreach (var support in supports)
            {
                essContext.AddToera_evacueesupports(support);
                essContext.AddLink(file, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId), support);
            }

            return(supports);
        }
Exemplo n.º 18
0
        private static async Task ParallelLoadSupportAsync(EssContext ctx, era_evacuationfile file, CancellationToken ct)
        {
            ctx.AttachTo(nameof(EssContext.era_evacuationfiles), file);

            var loadTasks = new List <Task>();

            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_TaskId), ct));
            loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_EvacuatedFromID), ct));
            if (file.era_CurrentNeedsAssessmentid == null)
            {
                loadTasks.Add(ctx.LoadPropertyAsync(file, nameof(era_evacuationfile.era_CurrentNeedsAssessmentid), ct));
            }

            var supports = (await((DataServiceQuery <era_evacueesupport>)ctx.era_evacueesupports
                                  .Expand(s => s.era_SupplierId)
                                  .Expand(s => s.era_GroupLodgingCityID)
                                  .Where(s => s._era_evacuationfileid_value == file.era_evacuationfileid))
                            .GetAllPagesAsync(ct))
                           .ToArray();

            supports.AsParallel().ForAll(s => ctx.AttachTo(nameof(EssContext.era_evacueesupports), s));

            loadTasks.AddRange(supports.Select(s => ctx.LoadPropertyAsync(s, nameof(era_evacueesupport.era_era_householdmember_era_evacueesupport), ct)));

            await Task.WhenAll(loadTasks);

            file.era_era_evacuationfile_era_evacueesupport_ESSFileId = new Collection <era_evacueesupport>(supports.ToArray());
            if (file.era_TaskId != null)
            {
                file.era_TaskId.era_JurisdictionID = ctx.LookupJurisdictionByCode(file.era_TaskId._era_jurisdictionid_value?.ToString());
            }
            supports.AsParallel().ForAll(s =>
            {
                if (s.era_SupplierId != null)
                {
                    s.era_SupplierId.era_RelatedCity = ctx.LookupJurisdictionByCode(s.era_SupplierId._era_relatedcity_value.ToString());
                }
                s.era_EvacuationFileId = file;
            });
        }
Exemplo n.º 19
0
 private EvacuationFile MapEvacuationFile(era_evacuationfile file, bool maskSecurityPhrase = true) =>
 mapper.Map <EvacuationFile>(file, opt => opt.Items["MaskSecurityPhrase"] = maskSecurityPhrase.ToString());
Exemplo n.º 20
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}");
        }
Exemplo n.º 21
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);
        }
Exemplo n.º 22
0
        public DynamicsTestData(IEssContextFactory essContextFactory)
        {
            var essContext = essContextFactory.Create();

            jurisdictions = essContext.era_jurisdictions.OrderBy(j => j.era_jurisdictionid).ToArray();
            canada        = essContext.era_countries.Where(c => c.era_countrycode == "CAN").Single();
            bc            = essContext.era_provinceterritorieses.Where(c => c.era_code == "BC").Single();
#if DEBUG
            this.testPrefix = $"autotest-dev";
#else
            this.testPrefix = $"autotest-{TestHelper.GenerateNewUniqueId(string.Empty)}";
#endif
            this.activeTaskId   = testPrefix + "-active-task";
            this.inactiveTaskId = testPrefix + "-inactive-task";

            var existingTeam = essContext.era_essteams.Where(t => t.era_name == testPrefix + "-team").SingleOrDefault();
            if (existingTeam != null)
            {
                essContext.LoadProperty(existingTeam, nameof(era_essteam.era_ESSTeam_ESSTeamArea_ESSTeamID));
                this.testTeam = existingTeam;

                this.CreateTeamMember(essContext, testTeam, Guid.NewGuid(), "-second");
                CreateTeamMember(essContext, testTeam, Guid.NewGuid(), "-third");
                CreateTeamMember(essContext, testTeam, Guid.NewGuid(), "-fourth");
            }
            else
            {
                this.testTeam = CreateTeam(essContext, Guid.NewGuid());
            }
            var otherTeam = essContext.era_essteams.Where(t => t.era_name == testPrefix + "-team-other").SingleOrDefault();
            if (otherTeam != null)
            {
                essContext.LoadProperty(otherTeam, nameof(era_essteam.era_ESSTeam_ESSTeamArea_ESSTeamID));
                this.otherTestTeam = otherTeam;
            }
            else
            {
                this.otherTestTeam = CreateTeam(essContext, Guid.NewGuid(), "-other");
            }

            this.activeTask = essContext.era_tasks.Where(t => t.era_name == activeTaskId).SingleOrDefault() ?? CreateTask(essContext, activeTaskId, DateTime.UtcNow);

            this.inactiveTask = essContext.era_tasks.Where(t => t.era_name == activeTaskId).SingleOrDefault() ?? CreateTask(essContext, inactiveTaskId, DateTime.UtcNow.AddDays(-7));

            this.tier4TeamMember = essContext.era_essteamusers.Where(tu => tu.era_firstname == this.testPrefix + "-first" && tu.era_lastname == this.testPrefix + "-last").SingleOrDefault()
                                   ?? CreateTeamMember(essContext, testTeam, Guid.NewGuid());

            this.otherTeamMember = essContext.era_essteamusers.Where(tu => tu.era_firstname == this.testPrefix + "-first-other" && tu.era_lastname == this.testPrefix + "-last-other").SingleOrDefault()
                                   ?? CreateTeamMember(essContext, this.otherTestTeam, Guid.NewGuid(), "-other", EMBC.ESS.Resources.Teams.TeamUserRoleOptionSet.Tier1);

            this.testContact = essContext.contacts.Where(c => c.firstname == this.testPrefix + "-first" && c.lastname == this.testPrefix + "-last").SingleOrDefault() ?? CreateContact(essContext);

            this.supplierA        = essContext.era_suppliers.Where(c => c.era_name == testPrefix + "-supplier-A").SingleOrDefault() ?? CreateSupplier(essContext, "A", this.testTeam);
            this.supplierB        = essContext.era_suppliers.Where(c => c.era_name == testPrefix + "-supplier-B").SingleOrDefault() ?? CreateSupplier(essContext, "B", this.testTeam);
            this.supplierC        = essContext.era_suppliers.Where(c => c.era_name == testPrefix + "-supplier-C").SingleOrDefault() ?? CreateSupplier(essContext, "C", this.otherTestTeam);
            this.inactiveSupplier = essContext.era_suppliers.Where(c => c.era_name == testPrefix + "-supplier-inactive").SingleOrDefault() ?? CreateSupplier(essContext, "inactive", null);

            var evacuationfile = essContext.era_evacuationfiles
                                 .Expand(f => f.era_CurrentNeedsAssessmentid)
                                 .Expand(f => f.era_Registrant)
                                 .Where(f => f.era_name == testPrefix + "-digital").SingleOrDefault();

            if (evacuationfile == null)
            {
                evacuationfile = CreateEvacuationFile(essContext, this.testContact, testPrefix + "-digital");
            }
            else
            {
                essContext.LoadProperty(evacuationfile, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid));
                CreateEvacueeSupports(essContext, evacuationfile, this.testContact, this.tier4TeamMember, testPrefix);
            }

            var paperEvacuationfile = essContext.era_evacuationfiles
                                      .Expand(f => f.era_CurrentNeedsAssessmentid)
                                      .Expand(f => f.era_Registrant)
                                      .Where(f => f.era_name == testPrefix + "-paper").SingleOrDefault();

            if (paperEvacuationfile == null)
            {
                paperEvacuationfile = CreateEvacuationFile(essContext, this.testContact, testPrefix + "-paper", testPrefix + "-paper");
                CreateEvacueeSupports(essContext, paperEvacuationfile, this.testContact, this.tier4TeamMember, testPrefix);
            }
            else
            {
                essContext.LoadProperty(paperEvacuationfile, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid));
            }

            essContext.SaveChanges();

            essContext.DeactivateObject(this.inactiveSupplier, 2);
            essContext.SaveChanges();
            essContext.DetachAll();

            this.testEvacuationfile = essContext.era_evacuationfiles
                                      .Expand(f => f.era_CurrentNeedsAssessmentid)
                                      .Expand(f => f.era_Registrant)
                                      .Where(f => f.era_evacuationfileid == evacuationfile.era_evacuationfileid).Single();

            essContext.LoadProperty(this.testEvacuationfile, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId));
            essContext.LoadProperty(this.testEvacuationfile, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid));

            this.testPaperEvacuationFile = essContext.era_evacuationfiles
                                           .Expand(f => f.era_CurrentNeedsAssessmentid)
                                           .Expand(f => f.era_Registrant)
                                           .Where(f => f.era_evacuationfileid == paperEvacuationfile.era_evacuationfileid).Single();

            essContext.LoadProperty(this.testPaperEvacuationFile, nameof(era_evacuationfile.era_era_evacuationfile_era_evacueesupport_ESSFileId));
            essContext.LoadProperty(this.testPaperEvacuationFile, nameof(era_evacuationfile.era_era_evacuationfile_era_householdmember_EvacuationFileid));

            essContext.DetachAll();
            this.essContextFactory = essContextFactory;
        }
Exemplo n.º 23
0
 private void AssignPrimaryRegistrant(era_evacuationfile file, contact primaryContact)
 {
     essContext.AddLink(primaryContact, nameof(primaryContact.era_evacuationfile_Registrant), file);
     essContext.SetLink(file, nameof(era_evacuationfile.era_Registrant), primaryContact);
 }