/// <inheritdoc/> public async override Task <IEnumerable <Models.Examination> > Handle(ExaminationsRetrievalQuery param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } var predicate = _examinationQueryBuilder.GetPredicate(param, false); switch (param.FilterOrderBy) { case ExaminationsOrderBy.Urgency: var key = DateTime.Now.Date.UrgencyKey(); return(_store .Query() .WithPagination(param.FilterPageNumber, param.FilterPageSize) .Where(predicate) .OrderByDescending(x => x.UrgencySort[key]) .ToListAsync() .Result); case ExaminationsOrderBy.CaseCreated: return(_store.Query().WithPagination(param.FilterPageNumber, param.FilterPageSize).Where(predicate).OrderBy(x => x.CreatedAt).ToListAsync().Result); case null: return(_store.Query().WithPagination(param.FilterPageNumber, param.FilterPageSize).Where(predicate).ToListAsync().Result); default: throw new ArgumentOutOfRangeException(nameof(param.FilterOrderBy)); } }
public virtual async Task EmptyQueryWithOrderByUrgency_ReturnsAllOpenCasesInOrder() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery( PermissedLocations(), null, "", ExaminationsOrderBy.Urgency, 1, 10, "", OpenClosedCases.Open); // Act var results = (await Service.Handle(examinationsDashboardQuery)).ToList(); // Assert results.Should().NotBeNull(); results.Count().Should().Be(9); results.ElementAt(0).ExaminationId.Should().Be("examination7"); results.ElementAt(1).ExaminationId.Should().Be("examination8"); results.ElementAt(2).ExaminationId.Should().Be("examination9"); results.ElementAt(3).ExaminationId.Should().Be("examination6"); results.ElementAt(4).ExaminationId.Should().Be("examination5"); results.ElementAt(5).ExaminationId.Should().Be("examination2"); results.ElementAt(6).ExaminationId.Should().Be("examination10"); results.ElementAt(7).ExaminationId.Should().Be("examination11"); results.ElementAt(8).ExaminationId.Should().Be("examination1"); }
public async Task <ActionResult <GetExaminationsResponse> > GetExaminations([FromQuery] GetExaminationsRequest filter) { if (filter == null) { return(BadRequest(new GetExaminationsResponse())); } var permissedLocations = (await LocationsWithPermission(Permission.GetExaminations)).ToList(); var examinationsQuery = new ExaminationsRetrievalQuery( permissedLocations, filter.CaseStatus, filter.LocationId, filter.OrderBy, filter.PageNumber, filter.PageSize, filter.UserId, filter.OpenCases); var examinations = await _examinationsRetrievalService.Handle(examinationsQuery); var dashboardOverview = await _examinationsDashboardService.Handle(examinationsQuery); var response = new GetExaminationsResponse { CountOfTotalCases = dashboardOverview.TotalCases, CountOfUrgentCases = dashboardOverview.CountOfUrgentCases, CountOfCasesHaveUnknownBasicDetails = dashboardOverview.CountOfHaveUnknownBasicDetails, CountOfCasesUnassigned = dashboardOverview.CountOfUnassigned, CountOfCasesReadyForMEScrutiny = dashboardOverview.CountOfReadyForMEScrutiny, CountOfCasesHaveBeenScrutinisedByME = dashboardOverview.CountOfHaveBeenScrutinisedByME, CountOfCasesPendingAdditionalDetails = dashboardOverview.CountOfPendingAdditionalDetails, CountOfCasesPendingDiscussionWithQAP = dashboardOverview.CountOfPendingDiscussionWithQAP, CountOfCasesPendingDiscussionWithRepresentative = dashboardOverview.CountOfPendingDiscussionWithRepresentative, CountOfCasesHaveFinalCaseOutstandingOutcomes = dashboardOverview.CountOfHaveFinalCaseOutstandingOutcomes, Examinations = examinations.Select(e => Mapper.Map <PatientCardItem>(e)).ToList(), CountOfFilteredCases = dashboardOverview.CountOfFilteredCases, }; var locations = (await _locationRetrievalByQueryHandler.Handle( new LocationsRetrievalByQuery(null, null, false, false, permissedLocations))).ToList(); var onlyMeOffices = locations.Where(l => l.IsMeOffice).ToList(); var allLocations = (await _locationsRetrievalByQueryHandler.Handle(new LocationsParentsQuery(onlyMeOffices.Select(x => x.LocationId)))).ToList(); var flatternedLocations = allLocations.SelectMany(x => x.Value); var distinctLocationIds = flatternedLocations.Select(x => x.LocationId).Distinct(); var distinctLocations = distinctLocationIds.Select(id => flatternedLocations.First(x => x.LocationId == id)); var orderedDistinctLocations = distinctLocations.OrderBy(x => x.NationalLocationId) .ThenBy(x => x.RegionLocationId) .ThenBy(x => x.TrustLocationId) .ThenBy(x => x.SiteLocationId).ToList(); response.AddLookup(LocationFilterLookupKey, Mapper.Map <IEnumerable <Location>, IEnumerable <LocationLookup> >(orderedDistinctLocations)); response.AddLookup(UserFilterLookupKey, await GetUserLookupForLocations(locations)); return(Ok(response)); }
public virtual async Task EmptyQueryReturnsAllOpenCases() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery(PermissedLocations(), null, "", null, 1, 10, "", OpenClosedCases.Open); // Act var results = await Service.Handle(examinationsDashboardQuery); // Assert results.Should().NotBeNull(); Assert.Equal(9, results.Count()); }
public virtual async Task ReadyForMEScrutinyCasesReturnsCorrectCount() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery(PermissedLocations(), CaseStatus.ReadyForMEScrutiny, "", null, 1, 10, "", OpenClosedCases.Open); // Act var results = await Service.Handle(examinationsDashboardQuery); // Assert results.Should().NotBeNull(); Assert.Equal(1, results.Count()); }
public virtual async Task HaveFinalCaseOutstandingOutcomesQueryReturnsCorrectCount() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery(PermissedLocations(), CaseStatus.HaveFinalCaseOutstandingOutcomes, "", null, 1, 10, "", OpenClosedCases.Open); // Act var results = await Service.Handle(examinationsDashboardQuery); // Assert results.Should().NotBeNull(); Assert.Equal(0, results.Count()); }
public virtual async Task PendingDiscussionWithRepresentativeQueryReturnsCorrectCount() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery(PermissedLocations(), CaseStatus.PendingDiscussionWithRepresentative, "", null, 1, 10, "", OpenClosedCases.Open); // Act var results = await Service.Handle(examinationsDashboardQuery); // Assert results.Should().NotBeNull(); Assert.Equal(9, results.Count()); }
public virtual async Task HaveBeenScrutinisedByMEQueryReturnsCorrectCount() { // Arrange var examinationsDashboardQuery = new ExaminationsRetrievalQuery(PermissedLocations(), CaseStatus.HaveBeenScrutinisedByME, "", null, 1, 10, "", OpenClosedCases.Open); // Act var results = await Service.Handle(examinationsDashboardQuery); // Assert results.Should().NotBeNull(); Assert.Single(results); }
public Expression <Func <Models.Examination, bool> > GetPredicate(ExaminationsRetrievalQuery queryObject, bool isDashboardCount) { var permissedLocationFilter = GetPermissedLocationPredicate(queryObject.PermissedLocations); var locationFilter = GetLocationPredicate(queryObject.FilterLocationId); var caseStatusFilter = GetCaseStatusPredicate(queryObject.FilterCaseStatus); var userIdFilter = GetUserIdPredicate(queryObject.FilterUserId); var openCases = GetOpenCasesPredicate(queryObject.FilterOpenCases); var predicate = permissedLocationFilter .And(locationFilter) .And(userIdFilter) .And(openCases); if (!isDashboardCount) { predicate = predicate.And(caseStatusFilter); } return(predicate); }
public virtual async Task ReadyForMEScrutinyAndLocationCasesReturnsCorrectCount() { // Arrange var permissedLocations = new[] { "expectedLocation" }; var examinationsDashboardQuery = new ExaminationsRetrievalQuery( permissedLocations, CaseStatus.ReadyForMEScrutiny, "expectedLocation", null, 1, 10, string.Empty, OpenClosedCases.Open); // Act var results = (await Service.Handle(examinationsDashboardQuery)).ToList(); // Assert results.Should().NotBeNull(); Assert.Single(results); }
public virtual async Task FilterByLocationsReturnsCorrectCasesWhenNoFilter() { // Arrange const string expectedLocationId = ""; var examinationsDashboardQuery = new ExaminationsRetrievalQuery( PermissedLocations(), null, expectedLocationId, null, 1, 10, string.Empty, OpenClosedCases.Open); // Act var results = (await Service.Handle(examinationsDashboardQuery)).ToList(); // Assert results.Should().NotBeNull(); Assert.Equal(9, results.Count()); }