コード例 #1
0
        /// <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));
            }
        }
コード例 #2
0
        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");
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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());
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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());
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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());
        }