public async Task CanGetNoEvacuationFilesByRelatedNeedsAssessmentIdOnly() { var caseQuery = new EvacuationFilesQuery { NeedsAssessmentId = TestNeedsAssessmentId }; var queryResult = await caseRepository.QueryCase(caseQuery); queryResult.Items.ShouldBeEmpty(); }
public async Task CanGetEvacuationFilessByLinkedRegistrantId() { var caseQuery = new EvacuationFilesQuery { LinkedRegistrantId = TestContactId }; var files = (await caseRepository.QueryCase(caseQuery)).Items.Cast<EvacuationFile>().ToArray(); files.ShouldNotBeEmpty(); files.ShouldAllBe(f => f.HouseholdMembers.Any(m => m.LinkedRegistrantId == TestContactId)); }
public async Task CanGetNoEvacuationFilessByFileIdAndRegistrant() { var caseQuery = new EvacuationFilesQuery { FileId = "nofileid", PrimaryRegistrantId = TestContactId }; var queryResult = await caseRepository.QueryCase(caseQuery); queryResult.Items.ShouldBeEmpty(); }
public async Task CanGetEvacuationFilesByFileId() { var caseQuery = new EvacuationFilesQuery { FileId = TestEssFileNumber }; var queryResult = await caseRepository.QueryCase(caseQuery); queryResult.Items.ShouldHaveSingleItem(); var evacuationFile = (EvacuationFile)queryResult.Items.ShouldHaveSingleItem(); evacuationFile.Id.ShouldBe(TestEssFileNumber); }
public async Task CanCreateEvacuationFile() { var primaryContact = await GetContactByUserId(TestContactUserId); var originalFile = CreateTestFile(primaryContact); var fileId = (await caseRepository.ManageCase(new SubmitEvacuationFileNeedsAssessment { EvacuationFile = originalFile })).Id; var caseQuery = new EvacuationFilesQuery { FileId = fileId }; (await caseRepository.QueryCase(caseQuery)).Items.ShouldHaveSingleItem(); }
public async Task CanGetEvacuationFilesByPrimaryRegistrantUserid() { var primaryContactId = TestContactId; var caseQuery = new EvacuationFilesQuery { PrimaryRegistrantId = primaryContactId, }; var files = (await evacuationRepository.Query(caseQuery)).Items.Cast <EvacuationFile>().ToArray(); files.ShouldNotBeEmpty(); files.ShouldAllBe(f => f.HouseholdMembers.Any(m => m.LinkedRegistrantId == primaryContactId)); files.ShouldAllBe(f => f.PrimaryRegistrantId == primaryContactId); }
public async Task CanGetEvacuationFilesByPrimaryRegistrantUserid() { var primaryContact = await GetContactByUserId(TestUserId); var caseQuery = new EvacuationFilesQuery { PrimaryRegistrantId = primaryContact.Id, Limit = 5 }; var queryResult = await caseRepository.QueryCase(caseQuery); queryResult.Items.ShouldNotBeEmpty(); queryResult.Items.Cast <EvacuationFile>().ShouldAllBe(f => f.PrimaryRegistrantId == primaryContact.Id); }
public async Task CanGetEvacuationFilesByFileId() { var fileId = TestEssFileNumber; var caseQuery = new EvacuationFilesQuery { FileId = fileId }; var queryResult = await evacuationRepository.Query(caseQuery); queryResult.Items.ShouldHaveSingleItem(); var evacuationFile = queryResult.Items.ShouldHaveSingleItem(); evacuationFile.Id.ShouldBe(fileId); }
public async Task CanGetEvacuationFilesByFileIdAndRelatedNeedsAssessmentId() { var caseQuery = new EvacuationFilesQuery { FileId = TestEssFileNumber, NeedsAssessmentId = TestNeedsAssessmentId }; var queryResult = await evacuationRepository.Query(caseQuery); queryResult.Items.ShouldHaveSingleItem(); var evacuationFile = (EvacuationFile)queryResult.Items.ShouldHaveSingleItem(); evacuationFile.Id.ShouldBe(TestEssFileNumber); evacuationFile.NeedsAssessment.Id.ShouldBe(TestNeedsAssessmentId); }
public async Task <IEnumerable <EvacuationFile> > Read(EvacuationFilesQuery query) { var readCtx = essContextFactory.CreateReadOnly(); //get all matching files var files = (await QueryHouseholdMemberFiles(readCtx, query)) .Concat(await QueryEvacuationFiles(readCtx, query)) .Concat(await QueryNeedsAssessments(readCtx, query)); //secondary filter after loading the files if (!string.IsNullOrEmpty(query.FileId)) { files = files.Where(f => f.era_name == query.FileId); } if (query.RegistraionDateFrom.HasValue) { files = files.Where(f => f.createdon.Value.UtcDateTime >= query.RegistraionDateFrom.Value); } if (query.RegistraionDateTo.HasValue) { files = files.Where(f => f.createdon.Value.UtcDateTime <= query.RegistraionDateTo.Value); } if (query.IncludeFilesInStatuses.Any()) { files = files.Where(f => query.IncludeFilesInStatuses.Any(s => (int)s == f.era_essfilestatus)); } if (query.Limit.HasValue) { files = files.OrderByDescending(f => f.era_name).Take(query.Limit.Value); } //ensure files will be loaded only once and have a needs assessment files = files .Where(f => f.statecode == (int)EntityState.Active && f._era_currentneedsassessmentid_value.HasValue) .Distinct(new LambdaComparer <era_evacuationfile>((f1, f2) => f1.era_evacuationfileid == f2.era_evacuationfileid, f => f.era_evacuationfileid.GetHashCode())); return((await ParallelLoadEvacuationFilesAsync(readCtx, files)).Select(f => MapEvacuationFile(f, query.MaskSecurityPhrase)).ToArray()); }
private static async Task <IEnumerable <era_evacuationfile> > QueryNeedsAssessments(EssContext ctx, EvacuationFilesQuery query) { var shouldQueryNeedsAssessments = !string.IsNullOrEmpty(query.NeedsAssessmentId) && !string.IsNullOrEmpty(query.FileId); if (!shouldQueryNeedsAssessments) { return(Array.Empty <era_evacuationfile>()); } var needsAssessmentQuery = ctx.era_needassessments .Expand(na => na.era_EvacuationFile) .Where(n => n.era_needassessmentid == Guid.Parse(query.NeedsAssessmentId)); return((await((DataServiceQuery <era_needassessment>)needsAssessmentQuery).GetAllPagesAsync()).Select(na => { na.era_EvacuationFile.era_CurrentNeedsAssessmentid = na; return na.era_EvacuationFile; }).Where(f => f.era_name == query.FileId).ToArray()); }
private static async Task <IEnumerable <era_evacuationfile> > QueryEvacuationFiles(EssContext ctx, EvacuationFilesQuery query) { var shouldQueryFiles = string.IsNullOrEmpty(query.NeedsAssessmentId) && (!string.IsNullOrEmpty(query.FileId) || !string.IsNullOrEmpty(query.ExternalReferenceId) || query.RegistraionDateFrom.HasValue || query.RegistraionDateTo.HasValue); if (!shouldQueryFiles) { return(Array.Empty <era_evacuationfile>()); } var filesQuery = ctx.era_evacuationfiles.Expand(f => f.era_CurrentNeedsAssessmentid).Where(f => f.statecode == (int)EntityState.Active); if (!string.IsNullOrEmpty(query.FileId)) { filesQuery = filesQuery.Where(f => f.era_name == query.FileId); } if (!string.IsNullOrEmpty(query.ExternalReferenceId)) { filesQuery = filesQuery.Where(f => f.era_paperbasedessfile == query.ExternalReferenceId); } if (query.RegistraionDateFrom.HasValue) { filesQuery = filesQuery.Where(f => f.createdon >= query.RegistraionDateFrom.Value); } if (query.RegistraionDateTo.HasValue) { filesQuery = filesQuery.Where(f => f.createdon <= query.RegistraionDateTo.Value); } return((await((DataServiceQuery <era_evacuationfile>)filesQuery).GetAllPagesAsync()).ToArray()); }
private static async Task <IEnumerable <era_evacuationfile> > QueryHouseholdMemberFiles(EssContext ctx, EvacuationFilesQuery query) { var shouldQueryHouseholdMembers = string.IsNullOrEmpty(query.FileId) && string.IsNullOrEmpty(query.NeedsAssessmentId) && (!string.IsNullOrEmpty(query.LinkedRegistrantId) || !string.IsNullOrEmpty(query.PrimaryRegistrantId) || !string.IsNullOrEmpty(query.HouseholdMemberId)); if (!shouldQueryHouseholdMembers) { return(Array.Empty <era_evacuationfile>()); } var memberQuery = ctx.era_householdmembers.Expand(m => m.era_EvacuationFileid).Where(m => m.statecode == (int)EntityState.Active); if (!string.IsNullOrEmpty(query.PrimaryRegistrantId)) { memberQuery = memberQuery.Where(m => m.era_isprimaryregistrant == true && m._era_registrant_value == Guid.Parse(query.PrimaryRegistrantId)); } if (!string.IsNullOrEmpty(query.HouseholdMemberId)) { memberQuery = memberQuery.Where(m => m.era_householdmemberid == Guid.Parse(query.HouseholdMemberId)); } if (!string.IsNullOrEmpty(query.LinkedRegistrantId)) { memberQuery = memberQuery.Where(m => m._era_registrant_value == Guid.Parse(query.LinkedRegistrantId)); } return((await((DataServiceQuery <era_householdmember>)memberQuery).GetAllPagesAsync()).Select(m => m.era_EvacuationFileid).ToArray()); }
public async Task <IEnumerable <EvacuationFile> > ReadAll(EvacuationFilesQuery query) { IEnumerable <Guid?> fileIds = Array.Empty <Guid?>(); var queryContacts = !string.IsNullOrEmpty(query.FirstName) || !string.IsNullOrEmpty(query.LastName) || !string.IsNullOrEmpty(query.DateOfBirth) || !string.IsNullOrEmpty(query.PrimaryRegistrantId); var queryFiles = !string.IsNullOrEmpty(query.FileId) || query.IncludeFilesInStatuses.Any() || query.RegistraionDateFrom.HasValue || query.RegistraionDateTo.HasValue; if (queryContacts) { var contactQuery = essContext.contacts .Where(c => c.statecode == (int)EntityState.Active); //if (!string.IsNullOrEmpty(query.PrimaryRegistrantUserId)) contactQuery = contactQuery.Where(c => c.era_bcservicescardid.Equals(query.PrimaryRegistrantUserId, StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(query.PrimaryRegistrantId)) { contactQuery = contactQuery.Where(c => c.contactid == Guid.Parse(query.PrimaryRegistrantId)); } if (!string.IsNullOrEmpty(query.LastName)) { contactQuery = contactQuery.Where(c => c.lastname.Equals(query.LastName, StringComparison.OrdinalIgnoreCase)); } if (!string.IsNullOrEmpty(query.FirstName)) { contactQuery = contactQuery.Where(c => c.firstname.Equals(query.FirstName, StringComparison.OrdinalIgnoreCase)); } if (!string.IsNullOrEmpty(query.DateOfBirth)) { contactQuery = contactQuery.Where(c => c.birthdate.Equals(Date.Parse(query.DateOfBirth))); } if (!query.IncludeHouseholdMembers) { contactQuery = contactQuery.Where(m => m.era_registranttype == (int)RegistrantType.Primary); } var matchingContactIds = (await((DataServiceQuery <contact>)contactQuery).GetAllPagesAsync()).Select(c => c.contactid).ToArray(); var householdMembersQuery = essContext.era_needsassessmentevacuees .Expand(m => m.era_NeedsAssessmentID) .Where(m => m.statecode == (int)EntityState.Active); var matchingContactFileIds = matchingContactIds .Select(id => householdMembersQuery .Where(m => m.era_RegistrantID.contactid == id && m.era_NeedsAssessmentID != null) .ToArray() .Select(m => m.era_NeedsAssessmentID?._era_evacuationfile_value)) .SelectMany(f => f) .ToArray(); //merge matching file ids fileIds = fileIds.Any() ? fileIds.Union(matchingContactFileIds) : fileIds.Concat(matchingContactFileIds); } if (queryFiles) { var fileQuery = essContext.era_evacuationfiles.Where(f => f.statecode == (int)EntityState.Active); if (!string.IsNullOrEmpty(query.FileId)) { fileQuery = fileQuery.Where(f => f.era_name == query.FileId); } if (query.RegistraionDateFrom.HasValue) { fileQuery = fileQuery.Where(f => f.createdon >= query.RegistraionDateFrom.Value); } if (query.RegistraionDateTo.HasValue) { fileQuery = fileQuery.Where(f => f.createdon <= query.RegistraionDateTo.Value); } if (query.IncludeFilesInStatuses.Any()) { fileQuery = fileQuery.Where(f => query.IncludeFilesInStatuses.Any(s => (int)s == f.statuscode)); } var matchingFileIds = (await((DataServiceQuery <era_evacuationfile>)fileQuery).GetAllPagesAsync()).Select(f => f.era_evacuationfileid).ToArray(); //merge matching file ids fileIds = fileIds.Any() ? fileIds.Union(matchingFileIds) : fileIds.Concat(matchingFileIds); } essContext.DetachAll(); if (query.Limit.HasValue) { fileIds = fileIds.OrderByDescending(id => id).Take(query.Limit.Value); } var evacuationFiles = fileIds.Distinct().OrderByDescending(id => id).Select(id => GetEvacuationFileById(id.Value, query.MaskSecurityPhrase).GetAwaiter().GetResult()).ToArray(); essContext.DetachAll(); return(evacuationFiles); }
public async Task CanMapEvacuationFile() { var now = DateTime.UtcNow; var primaryContact = await GetContactByUserId(TestUserId); var originalFile = CreateTestFile(primaryContact); var fileId = (await caseRepository.ManageCase(new SaveEvacuationFile { EvacuationFile = originalFile })).CaseId; var caseQuery = new EvacuationFilesQuery { FileId = fileId }; var evacuationFile = (EvacuationFile)(await caseRepository.QueryCase(caseQuery)).Items.ShouldHaveSingleItem(); // Evacuation file evacuationFile.EvacuatedFromAddress.ShouldNotBeNull(); evacuationFile.Id.ShouldBe(fileId); evacuationFile.EvacuatedFromAddress.AddressLine1.ShouldBe(originalFile.EvacuatedFromAddress.AddressLine1); evacuationFile.EvacuatedFromAddress.AddressLine2.ShouldBe(originalFile.EvacuatedFromAddress.AddressLine2); evacuationFile.EvacuatedFromAddress.CommunityCode.ShouldBe(originalFile.EvacuatedFromAddress.CommunityCode); evacuationFile.EvacuatedFromAddress.CountryCode.ShouldBe(originalFile.EvacuatedFromAddress.CountryCode); evacuationFile.EvacuatedFromAddress.StateProvinceCode.ShouldBe(originalFile.EvacuatedFromAddress.StateProvinceCode); evacuationFile.EvacuatedFromAddress.PostalCode.ShouldBe(originalFile.EvacuatedFromAddress.PostalCode); evacuationFile.EvacuationDate.ShouldBeInRange(now, DateTime.UtcNow); evacuationFile.PrimaryRegistrantId.ShouldBe(primaryContact.Id); // Needs Assessments evacuationFile.NeedsAssessments.ShouldHaveSingleItem(); for (var i = 0; i < originalFile.NeedsAssessments.Count(); i++) { var originalNeedsAssessment = originalFile.NeedsAssessments.ElementAt(i); var needsAssessment = evacuationFile.NeedsAssessments.ElementAt(i); needsAssessment.Insurance.ShouldBe(originalNeedsAssessment.Insurance); needsAssessment.CanEvacueeProvideClothing.ShouldBe(originalNeedsAssessment.CanEvacueeProvideClothing); needsAssessment.CanEvacueeProvideFood.ShouldBe(originalNeedsAssessment.CanEvacueeProvideFood); needsAssessment.CanEvacueeProvideIncidentals.ShouldBe(originalNeedsAssessment.CanEvacueeProvideIncidentals); needsAssessment.CanEvacueeProvideLodging.ShouldBe(originalNeedsAssessment.CanEvacueeProvideLodging); needsAssessment.CanEvacueeProvideTransportation.ShouldBe(originalNeedsAssessment.CanEvacueeProvideTransportation); needsAssessment.HaveMedication.ShouldBe(originalNeedsAssessment.HaveMedication); needsAssessment.HasPetsFood.ShouldBe(originalNeedsAssessment.HasPetsFood); needsAssessment.HaveSpecialDiet.ShouldBe(originalNeedsAssessment.HaveSpecialDiet); needsAssessment.SpecialDietDetails.ShouldBe(originalNeedsAssessment.SpecialDietDetails); needsAssessment.HouseholdMembers.Count().ShouldBe(originalNeedsAssessment.HouseholdMembers.Count()); for (var j = 0; j < originalNeedsAssessment.HouseholdMembers.Count(); j++) { var originalHouseholdMember = originalNeedsAssessment.HouseholdMembers.OrderBy(m => m.DateOfBirth).ElementAt(i); var householdMember = needsAssessment.HouseholdMembers.Where(m => !m.IsPrimaryRegistrant).OrderBy(m => m.DateOfBirth).ElementAt(i); householdMember.DateOfBirth.ShouldBe(originalHouseholdMember.DateOfBirth); householdMember.FirstName.ShouldBe(originalHouseholdMember.FirstName); householdMember.LastName.ShouldBe(originalHouseholdMember.LastName); householdMember.Gender.ShouldBe(originalHouseholdMember.Gender); householdMember.Initials.ShouldBe(originalHouseholdMember.Initials); householdMember.PreferredName.ShouldBe(originalHouseholdMember.PreferredName); householdMember.IsUnder19.ShouldBe(originalHouseholdMember.IsUnder19); householdMember.Id.ShouldNotBeNull(); } needsAssessment.Pets.Count().ShouldBe(originalNeedsAssessment.Pets.Count()); for (var j = 0; j < originalNeedsAssessment.Pets.Count(); j++) { var originalPet = originalNeedsAssessment.Pets.OrderBy(p => p.Type).ElementAt(i); var pet = needsAssessment.Pets.OrderBy(p => p.Type).ElementAt(i); pet.Quantity.ShouldBe(originalPet.Quantity); pet.Type.ShouldBe(originalPet.Type); } } }
public async Task CanMapEvacuationFile() { var now = DateTime.UtcNow; var primaryContact = await GetContactByUserId(TestContactUserId); var originalFile = CreateTestFile(primaryContact); var fileId = (await caseRepository.ManageCase(new SubmitEvacuationFileNeedsAssessment { EvacuationFile = originalFile })).Id; var caseQuery = new EvacuationFilesQuery { FileId = fileId }; var evacuationFile = (EvacuationFile)(await caseRepository.QueryCase(caseQuery)).Items.ShouldHaveSingleItem(); // Evacuation file evacuationFile.EvacuatedFrom.ShouldNotBeNull(); evacuationFile.Id.ShouldBe(fileId); evacuationFile.EvacuatedFrom.AddressLine1.ShouldBe(originalFile.EvacuatedFrom.AddressLine1); evacuationFile.EvacuatedFrom.AddressLine2.ShouldBe(originalFile.EvacuatedFrom.AddressLine2); evacuationFile.EvacuatedFrom.CommunityCode.ShouldBe(originalFile.EvacuatedFrom.CommunityCode); evacuationFile.EvacuatedFrom.PostalCode.ShouldBe(originalFile.EvacuatedFrom.PostalCode); evacuationFile.EvacuationDate.ShouldBeInRange(now.AddSeconds(-1), DateTime.UtcNow); evacuationFile.PrimaryRegistrantId.ShouldBe(primaryContact.Id); evacuationFile.RegistrationLocation.ShouldBe(originalFile.RegistrationLocation); evacuationFile.TaskId.ShouldBe(originalFile.TaskId); if (originalFile.TaskId != null) evacuationFile.TaskLocationCommunityCode.ShouldNotBeNull(); evacuationFile.HouseholdMembers.Count().ShouldBe(originalFile.NeedsAssessment.HouseholdMembers.Count()); // Needs Assessment var originalNeedsAssessment = originalFile.NeedsAssessment; var needsAssessment = evacuationFile.NeedsAssessment; needsAssessment.Insurance.ShouldBe(originalNeedsAssessment.Insurance); needsAssessment.CanProvideClothing.ShouldBe(originalNeedsAssessment.CanProvideClothing); needsAssessment.CanProvideFood.ShouldBe(originalNeedsAssessment.CanProvideFood); needsAssessment.CanProvideIncidentals.ShouldBe(originalNeedsAssessment.CanProvideIncidentals); needsAssessment.CanProvideLodging.ShouldBe(originalNeedsAssessment.CanProvideLodging); needsAssessment.CanProvideTransportation.ShouldBe(originalNeedsAssessment.CanProvideTransportation); needsAssessment.TakeMedication.ShouldBe(originalNeedsAssessment.TakeMedication); needsAssessment.HaveMedicalSupplies.ShouldBe(originalNeedsAssessment.HaveMedicalSupplies); needsAssessment.HavePetsFood.ShouldBe(originalNeedsAssessment.HavePetsFood); needsAssessment.HaveSpecialDiet.ShouldBe(originalNeedsAssessment.HaveSpecialDiet); needsAssessment.SpecialDietDetails.ShouldBe(originalNeedsAssessment.SpecialDietDetails); needsAssessment.HouseholdMembers.Count().ShouldBe(originalNeedsAssessment.HouseholdMembers.Count()); needsAssessment.HouseholdMembers.Where(m => m.IsPrimaryRegistrant).ShouldHaveSingleItem().LinkedRegistrantId.ShouldBe(primaryContact.Id); for (var j = 0; j < originalNeedsAssessment.HouseholdMembers.Count(); j++) { var originalHouseholdMember = originalNeedsAssessment.HouseholdMembers.OrderBy(m => m.DateOfBirth).ElementAt(j); var householdMember = needsAssessment.HouseholdMembers.OrderBy(m => m.DateOfBirth).ElementAt(j); householdMember.DateOfBirth.ShouldBe(originalHouseholdMember.DateOfBirth); householdMember.FirstName.ShouldBe(originalHouseholdMember.FirstName); householdMember.LastName.ShouldBe(originalHouseholdMember.LastName); householdMember.Gender.ShouldBe(originalHouseholdMember.Gender); householdMember.Initials.ShouldBe(originalHouseholdMember.Initials); householdMember.IsUnder19.ShouldBe(originalHouseholdMember.IsUnder19); householdMember.Id.ShouldNotBeNull(); householdMember.LinkedRegistrantId.ShouldBe(originalHouseholdMember.LinkedRegistrantId); if (householdMember.LinkedRegistrantId != null) { householdMember.HasAccessRestriction.ShouldNotBeNull().ShouldBe(primaryContact.RestrictedAccess); householdMember.IsVerifiedRegistrant.ShouldNotBeNull().ShouldBe(primaryContact.Verified); } else { householdMember.HasAccessRestriction.ShouldBeNull(); householdMember.IsVerifiedRegistrant.ShouldBeNull(); } } needsAssessment.Pets.Count().ShouldBe(originalNeedsAssessment.Pets.Count()); for (var j = 0; j < originalNeedsAssessment.Pets.Count(); j++) { var originalPet = originalNeedsAssessment.Pets.OrderBy(p => p.Type).ElementAt(j); var pet = needsAssessment.Pets.OrderBy(p => p.Type).ElementAt(j); pet.Quantity.ShouldBe(originalPet.Quantity); pet.Type.ShouldBe(originalPet.Type); pet.Id.ShouldNotBeNullOrEmpty(); } }