public async Task <GroupInfo> GetGroupInfoByIdAsync(int id)
 {
     if (!HasPermission(Permission.ViewParticipantDetails) &&
         !HasPermission(Permission.ViewAllReporting))
     {
         _logger.LogError($"User {GetClaimId(ClaimType.UserId)} doesn't have permission to view group info.");
         throw new GraException("Permission denied.");
     }
     return(await _groupInfoRepository.GetByIdAsync(id));
 }
Example #2
0
        public override async Task ExecuteAsync(ReportRequest request,
                                                CancellationToken token,
                                                IProgress <JobStatus> progress = null)
        {
            #region Reporting initialization
            request = await StartRequestAsync(request);

            var criterion
                = await _serviceFacade.ReportCriterionRepository.GetByIdAsync(request.ReportCriteriaId)
                  ?? throw new GraException($"Report criteria {request.ReportCriteriaId} for report request id {request.Id} could not be found.");

            if (criterion.SiteId == null)
            {
                throw new ArgumentException(nameof(criterion.SiteId));
            }

            var groupInfo = await _groupInfoRepository.GetByIdAsync(criterion.GroupInfoId.Value);

            string title = groupInfo.Name;

            var report = new StoredReport
            {
                Title = title,
                AsOf  = _serviceFacade.DateTimeProvider.Now
            };
            var reportData = new List <object[]>();
            #endregion Reporting initialization

            #region Collect data
            UpdateProgress(progress, 1, "Starting report...", request.Name);

            // header row
            report.HeaderRow = new object[] {
                "Name",
                "Age",
                "Vendor Code",
            };

            var head = await _userRepository.GetByIdAsync(groupInfo.UserId);

            var users = await _userRepository.GetHouseholdAsync(groupInfo.UserId);

            users = users.Prepend(head);

            foreach (var user in users)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                var vendorCode = await _vendorCodeRepository.GetUserVendorCode(user.Id);

                var row = new List <object> {
                    user.FullName,
                    user.Age,
                    vendorCode?.IsDonated == false ? vendorCode.Code : ""
                };

                reportData.Add(row.ToArray());
            }

            report.Data = reportData.ToArray();

            #endregion Collect data

            #region Finish up reporting
            if (!token.IsCancellationRequested)
            {
                ReportSet.Reports.Add(report);
            }
            await FinishRequestAsync(request, !token.IsCancellationRequested);

            #endregion Finish up reporting
        }
        public override async Task ExecuteAsync(ReportRequest request,
                                                CancellationToken token,
                                                IProgress <OperationStatus> progress = null)
        {
            #region Reporting initialization
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            request = await StartRequestAsync(request);

            var criterion
                = await _serviceFacade.ReportCriterionRepository.GetByIdAsync(request.ReportCriteriaId)
                  ?? throw new GraException($"Report criteria {request.ReportCriteriaId} for report request id {request.Id} could not be found.");

            if (criterion.SiteId == null)
            {
                throw new ArgumentNullException(nameof(criterion.SiteId));
            }

            var groupInfo = await _groupInfoRepository.GetByIdAsync(criterion.GroupInfoId.Value);

            string title = groupInfo.Name;

            var report = new StoredReport
            {
                Title = title,
                AsOf  = _serviceFacade.DateTimeProvider.Now
            };
            var reportData = new List <object[]>();
            #endregion Reporting initialization

            #region Collect data
            UpdateProgress(progress, 1, "Starting report...", request.Name);

            // header row
            report.HeaderRow = new object[] {
                "Name",
                "Vendor Code",
            };

            var head = await _userRepository.GetByIdAsync(groupInfo.UserId);

            var users = await _userRepository.GetHouseholdAsync(groupInfo.UserId);

            users = users.Prepend(head);

            foreach (var user in users)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                var vendorCode = await _vendorCodeRepository.GetUserVendorCode(user.Id);

                var row = new List <object> {
                    user.FullName,
                    vendorCode?.IsDonated == false ? vendorCode.Code : ""
                };

                reportData.Add(row.ToArray());
            }

            report.Data = reportData.ToArray();

            #endregion Collect data

            #region Finish up reporting
            _logger.LogInformation($"Report {GetType().Name} with criterion {criterion.Id} ran in {StopTimer()}");

            request.Success = !token.IsCancellationRequested;

            if (request.Success == true)
            {
                ReportSet.Reports.Add(report);
                request.Finished   = _serviceFacade.DateTimeProvider.Now;
                request.ResultJson = Newtonsoft.Json.JsonConvert.SerializeObject(ReportSet);
            }
            await _serviceFacade.ReportRequestRepository.UpdateSaveNoAuditAsync(request);

            #endregion Finish up reporting
        }