示例#1
0
        public ReportResponse CreateReport(String reportName)
        {
            var request = new ReportRequest
            {
                ReportName = reportName,
                Parameters = Request.GetQueryNameValuePairs().ToDictionary(n=>n.Key, v=>v.Value)
            };

            return ReportQuery.Handle(ActionContext, request);
        }
示例#2
0
        /// <summary>
        /// 受托长辈适应程度评估表
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="request"></param>
        private void RegQuestionEvalOperation(WordDocument doc, ReportRequest request)
        {
            var org = organizationManageService.GetOrg(SecurityHelper.CurrentPrincipal.OrgId);

            var eval = reportManageService.GetRegQuestionEvalRec(request.id, 1);

            var basic = reportManageService.GetBasicInfoById(Convert.ToInt32(eval.Data[0].FEENO));

            doc.ReplaceText("Org", org.Data.OrgName);
            doc.ReplaceText("ResidentNo", basic.Data.ResidentNo == null?"":basic.Data.ResidentNo);
            doc.ReplaceText("Name", basic.Data.RegName);
            doc.ReplaceText("Sex", basic.Data.Sex);
            doc.ReplaceText("Age", (DateTime.Now.Year - Convert.ToDateTime(basic.Data.BirthDate).Year).ToString());
            doc.ReplaceText("InDate", Convert.ToDateTime(basic.Data.InDate).ToShortDateString());
            doc.ReplaceText("EvalResult", eval.Data[0].EVALRESULT);
            doc.ReplaceText("Score", eval.Data[0].SCORE.ToString());//
            if (eval.Data != null && eval.Data.Count > 0)
            {
                DataTable dt1 = BuildTable(reportManageService.GetRegQuestionEvalRec(request.id, 1), 1);
                doc.FillTable(0, dt1, "", "", 0);
                dt1.Dispose();

                DataTable dt2 = BuildTable(reportManageService.GetRegQuestionEvalRec(request.id, 2), 2);
                doc.FillTable(1, dt2, "", "", 0);
                dt2.Dispose();

                var eval3 = reportManageService.GetRegQuestionEvalRec(request.id, 3);
                if (eval3 != null)
                {
                    foreach (var item in eval3.Data)
                    {
                        if (item.ITEMNAME.Trim() == "护理人员")
                        {
                            doc.ReplaceText("ItemValue1", item.ITEMVALUE == null ? "0" : item.ITEMVALUE.ToString());
                        }
                        if (item.ITEMNAME.Trim() == "社工人员")
                        {
                            doc.ReplaceText("ItemValue2", item.ITEMVALUE == null ? "0" : item.ITEMVALUE.ToString());
                        }
                        if (item.ITEMNAME.Trim() == "照服员")
                        {
                            doc.ReplaceText("ItemValue3", item.ITEMVALUE == null ? "0" : item.ITEMVALUE.ToString());
                        }
                        if (item.ITEMNAME.Trim() == "志工")
                        {
                            doc.ReplaceText("ItemValue4", item.ITEMVALUE == null ? "0" : item.ITEMVALUE.ToString());
                        }
                        if (item.ITEMNAME.Trim() == "其他受托长辈")
                        {
                            doc.ReplaceText("ItemValue5", item.ITEMVALUE == null ? "0" : item.ITEMVALUE.ToString());
                        }
                    }
                }

                DataTable dt4 = BuildTable(reportManageService.GetRegQuestionEvalRec(request.id, 4), 4);
                doc.FillTable(3, dt4, "", "", 0);
                dt4.Dispose();

                DataTable dt5 = BuildTable(reportManageService.GetRegQuestionEvalRec(request.id, 5), 5);
                doc.FillTable(4, dt5, "", "", 0);
                dt5.Dispose();
            }

            //if (question == null) return;
            //BindData(question.Data, doc);
        }
        public async Task <IActionResult> AddAsync(ReportRequest reportRequest)
        {
            await _reportRequestRepository.AddAsync(reportRequest);

            return(Ok());
        }
        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));
            }

            string title = "";

            if (criterion.SystemId.HasValue)
            {
                title = (await _systemRepository.GetByIdAsync(criterion.SystemId.Value)).Name;
            }

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

            var askIfFirstTime
                = await GetSiteSettingBoolAsync(criterion, SiteSettingKey.Users.AskIfFirstTime);

            var reportEmailAwardData
                = await _vendorCodeTypeRepository.SiteHasEmailAwards(criterion.SiteId.Value);

            #endregion Reporting initialization

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

            // header row
            var headerRow = new List <object>
            {
                "System Name",
                "Branch Name"
            };

            // first time?

            if (askIfFirstTime)
            {
                headerRow.Add("First Time # Earned");
                headerRow.Add("First Time # Ordered");
                if (reportEmailAwardData)
                {
                    headerRow.Add("First Time # Email Awarded");
                }
            }

            headerRow.Add("# Earned");
            headerRow.Add("# Ordered");
            if (reportEmailAwardData)
            {
                headerRow.Add("# Email Awarded");
            }

            report.HeaderRow = headerRow.ToArray();

            int count = 0;

            // running totals
            int totalEarned       = 0;
            int totalOrdered      = 0;
            int totalEmailAwarded = 0;

            int totalFirstEarned       = 0;
            int totalFirstOrdered      = 0;
            int totalFirstEmailAwarded = 0;

            var branches = criterion.SystemId != null
                ? await _branchRepository.GetBySystemAsync((int)criterion.SystemId)
                : await _branchRepository.GetAllAsync((int)criterion.SiteId);

            var systemIds = branches
                            .OrderBy(_ => _.SystemName)
                            .GroupBy(_ => _.SystemId)
                            .Select(_ => _.First().SystemId);

            foreach (var systemId in systemIds)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                foreach (var branch in branches.Where(_ => _.SystemId == systemId))
                {
                    UpdateProgress(progress,
                                   ++count * 100 / branches.Count(),
                                   $"Processing: {branch.SystemName} - {branch.Name}",
                                   request.Name);

                    criterion.SystemId = systemId;
                    criterion.BranchId = branch.Id;

                    var row = new List <object> {
                        branch.SystemName,
                        branch.Name,
                    };

                    if (askIfFirstTime)
                    {
                        criterion.IsFirstTimeParticipant = true;
                        var firstVendorCodes =
                            await _vendorCodeRepository.GetEarnedCodesAsync(criterion);

                        int firstEarnedCodes = firstVendorCodes.Count;
                        int firstUsedCodes   = firstVendorCodes.Count(_ => _.IsUsed);

                        criterion.IsFirstTimeParticipant = false;

                        row.Add(firstEarnedCodes);
                        row.Add(firstUsedCodes);

                        totalFirstEarned  += firstEarnedCodes;
                        totalFirstOrdered += firstUsedCodes;

                        if (reportEmailAwardData)
                        {
                            int firstEmailAwardCodes = firstVendorCodes
                                                       .Count(_ => _.EmailAwardSent.HasValue);
                            row.Add(firstEmailAwardCodes);
                            totalFirstEmailAwarded += firstEmailAwardCodes;
                        }
                    }

                    var vendorCodes = await _vendorCodeRepository.GetEarnedCodesAsync(criterion);

                    int earnedCodes = vendorCodes.Count;
                    int usedCodes   = vendorCodes.Count(_ => _.IsUsed);

                    totalEarned  += earnedCodes;
                    totalOrdered += usedCodes;

                    row.Add(earnedCodes);
                    row.Add(usedCodes);

                    if (reportEmailAwardData)
                    {
                        int emailAwardCodes = vendorCodes
                                              .Count(_ => _.EmailAwardSent.HasValue);
                        totalEmailAwarded += emailAwardCodes;
                        row.Add(emailAwardCodes);
                    }

                    reportData.Add(row.ToArray());

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }

            report.Data = reportData.ToArray();

            // total row
            var footerRow = new List <object>
            {
                "Total",
                string.Empty
            };

            if (askIfFirstTime)
            {
                footerRow.Add(totalFirstEarned);
                footerRow.Add(totalFirstOrdered);
                if (reportEmailAwardData)
                {
                    footerRow.Add(totalFirstEmailAwarded);
                }
            }

            footerRow.Add(totalEarned);
            footerRow.Add(totalOrdered);
            if (reportEmailAwardData)
            {
                footerRow.Add(totalEmailAwarded);
            }

            report.FooterRow = footerRow.ToArray();

            #endregion Collect data

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

            #endregion Finish up reporting
        }
示例#5
0
        public async Task <FileResult> Operations(ReportRequest reportRequest)
        {
            byte[] bytes = await this.reportService.GenerateOperationsReportAsync(reportRequest);

            return(File(bytes, MediaTypeNames.Text.Xml, "Operations - Reprot.xml"));
        }
        public async Task<ActionResult> CreateReport(string sdatemonth, string sdateday, string sdateyear,
                                         string edatemonth, string edateday, string edateyear,
                                         string period, string detailed, string [] subslist)
        {
            try
            {
                dm.startDateMonth = Convert.ToInt32(sdatemonth);
                dm.startDateDay = Convert.ToInt32(sdateday);
                dm.startDateYear = Convert.ToInt32(sdateyear);

                dm.endDateMonth = Convert.ToInt32(edatemonth);
                dm.endDateDay = Convert.ToInt32(edateday);
                dm.endDateYear = Convert.ToInt32(edateyear);

                dm.detailedReport = (detailed == "d" ? true : false);
                dm.dailyReport = (period == "d" ? true : false);

                if (subslist != null)
                    dm.selectedUserSubscriptions = subslist.ToList();

                if (dm.selectedUserSubscriptions.Count() < 1)
                    throw new Exception("No Azure subscription is selected. Select from list and try again (may use CTRL for multiple selection).");

                DateTime s, e;
                try
                {
                    s = new DateTime(dm.startDateYear, dm.startDateMonth, dm.startDateDay);
                    e = new DateTime(dm.endDateYear, dm.endDateMonth, dm.endDateDay);
                } catch
                {
                    throw new Exception("Invalid date input.");
                }

                TimeSpan ts = e.Subtract(s);
                if (ts.TotalDays > 150)
                    throw new Exception("Time interval can not be greater than 150 (5 month) days");

                if (ts.TotalDays < 1)
                    throw new Exception("Start date can not be later than or equal to the end date.");


                
                
                // now we have all parameters set. Ready to create jobs and send them to Storage queue to be processed by webjob
                ReportRequest rr = new ReportRequest();
                rr.reportDate = DateTime.UtcNow;
                rr.startDate = s;
                rr.endDate = e;
                rr.detailedReport = dm.detailedReport;
                rr.dailyReport = dm.dailyReport;

                foreach (string sid in dm.selectedUserSubscriptions)
                {
                    Subscription subs = dm.userSubscriptionsList[sid];
                    if (subs == null)
                        continue;

                    Report rjd = new Report();
                    rjd.subscriptionID = subs.Id;
                    rjd.organizationID = subs.OrganizationId;
                    rr.repReqs.Add(rjd);
                }

                db.ReportRequests.Add(rr);
                db.SaveChanges();


                var queueMessage = new CloudQueueMessage(JsonConvert.SerializeObject(rr));
                await reportRequestsQueue.AddMessageAsync(queueMessage);
            }
            catch (Exception e)
            {
                //dm.Reset();
                return RedirectToAction("Error", "Home", new { msg = e.Message } );
            }

            return RedirectToAction("Index", "Dashboard");
        }
        public ActionResult PreviewLTC_NursingReport()
        {
            string        templateName = Request["templateName"];
            string        feeNo        = Request["feeNo"];
            string        id           = Request["id"];
            ReportRequest request      = new ReportRequest();

            if (templateName != null)
            {
                switch (templateName)
                {
                case "ADLReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "ADLReport";
                        this.GeneratePDF("ADLReport", this.Operation, request);
                    }
                    break;

                case "MMSEReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "MMSEReport";
                        this.GeneratePDF("MMSEReport", this.Operation, request);
                    }
                    break;

                case "SPMSQReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "SPMSQReport";
                        this.GeneratePDF("SPMSQReport", this.Operation, request);
                    }
                    break;

                case "IADLReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "IADLReport";
                        this.GeneratePDF("IADLReport", this.Operation, request);
                    }
                    break;

                case "ColeScaleReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "ColeScaleReport";
                        this.GeneratePDF("ColeScaleReport", this.Operation, request);
                    }
                    break;

                case "PrsSoreReport":
                    if (!string.IsNullOrEmpty(id))
                    {
                        request.id   = int.Parse(id);
                        request.type = "PrsSoreReport";
                        this.GeneratePDF("PrsSoreReport", this.Operation, request);
                    }
                    break;
                }
            }
            return(View("Preview"));
        }
 /// <summary>
 /// Submits a download request to the Bing Ads reporting service with the specified parameters.
 /// </summary>
 /// <param name="request">Determines various download parameters, for example what entities to download. </param>
 /// <returns>A task that represents the asynchronous operation. The task result will be the submitted download operation.</returns>        
 /// <exception cref="FaultException{TDetail}">Thrown if a fault is returned from the Bing Ads service.</exception>
 /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be refreshed due to an error received from the Microsoft Account authorization server.</exception>  
 public Task<ReportingDownloadOperation> SubmitDownloadAsync(ReportRequest request)
 {
     return SubmitDownloadAsyncImpl(request);
 }
示例#9
0
 public void Update(string id, ReportRequest pIn) => _report.ReplaceOne(p => p.UUID == id, pIn);
示例#10
0
 public ReportRequest Create(ReportRequest report)
 {
     _report.InsertOne(report);
     return(report);
 }
        public async Task <OperationStatus> RunReport(string reportRequestIdString,
                                                      CancellationToken token,
                                                      IProgress <OperationStatus> progress = null)
        {
            if (HasPermission(Permission.ViewAllReporting))
            {
                BaseReport    report   = null;
                ReportRequest _request = null;

                int reportRequestId = 0;
                if (!int.TryParse(reportRequestIdString, out reportRequestId))
                {
                    _logger.LogError($"Couldn't covert report request id {reportRequestIdString} to a number.");
                    return(new OperationStatus
                    {
                        PercentComplete = 100,
                        Status = $"Could not find report request {reportRequestIdString}.",
                        Error = true,
                        Complete = false
                    });
                }

                token.Register(() =>
                {
                    string duration = "";
                    if (report != null && report.Elapsed != null)
                    {
                        duration = $" after {((TimeSpan)report.Elapsed).TotalSeconds.ToString("N2")} seconds";
                    }
                    if (_request != null)
                    {
                        _logger.LogWarning($"Report {reportRequestId} for user {_request.CreatedBy} was cancelled{duration}.");
                    }
                    else
                    {
                        _logger.LogWarning($"Report {reportRequestId} was cancelled{duration}.");
                    }
                });

                try
                {
                    _request = await _reportRequestRepository.GetByIdAsync(reportRequestId)
                               ?? throw new GraException($"Cannot find report request id {reportRequestId}");
                }
                catch (Exception ex)
                {
                    _logger.LogError($"Could not find report request {reportRequestId}: {ex.Message}");
                    return(new OperationStatus
                    {
                        PercentComplete = 0,
                        Status = "Could not find the report request.",
                        Error = true
                    });
                }

                var reportDetails = new Catalog().Get()
                                    .Where(_ => _.Id == _request.ReportId)
                                    .SingleOrDefault();

                if (reportDetails == null)
                {
                    _logger.LogError($"Cannot find report id {_request.ReportId} requested by request {reportRequestId}");
                    return(new OperationStatus
                    {
                        PercentComplete = 0,
                        Status = "Could not find the requested report.",
                        Error = true
                    });
                }

                try
                {
                    report = _serviceProvider.GetService(reportDetails.ReportType) as BaseReport;
                }
                catch (Exception ex)
                {
                    _logger.LogCritical($"Couldn't instantiate report: {ex.Message}");
                    return(new OperationStatus
                    {
                        PercentComplete = 100,
                        Status = "Unable to run report.",
                        Error = true
                    });
                }

                try
                {
                    await report.ExecuteAsync(_request, token, progress);
                }
                catch (Exception ex)
                {
                    return(new OperationStatus
                    {
                        PercentComplete = 100,
                        Status = $"A software error occurred: {ex.Message}.",
                        Error = true
                    });
                }

                if (!token.IsCancellationRequested)
                {
                    return(new OperationStatus
                    {
                        PercentComplete = 100,
                        Status = "Report processing complete.",
                    });
                }
                else
                {
                    return(new OperationStatus
                    {
                        PercentComplete = 100,
                    });
                }
            }
            else
            {
                var requestingUser = GetClaimId(ClaimType.UserId);
                _logger.LogError($"User {requestingUser} doesn't have permission to view all reporting.");
                return(new OperationStatus
                {
                    PercentComplete = 0,
                    Status = "Permission denied.",
                    Error = true
                });
            }
        }
        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 report = new StoredReport
            {
                Title = ReportAttribute?.Name,
                AsOf  = _serviceFacade.DateTimeProvider.Now
            };
            var reportData = new List <object[]>();

            var askIfFirstTime
                = await GetSiteSettingBoolAsync(criterion, SiteSettingKey.Users.AskIfFirstTime);

            #endregion Reporting initialization

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

            // header row
            var headerRow = new List <object>()
            {
                "School Name",
                "School Type",
                "Registered Users"
            };

            if (askIfFirstTime)
            {
                headerRow.Add("First time Participants");
            }

            headerRow.Add("Achievers");

            report.HeaderRow = headerRow.ToArray();

            int count = 0;

            // running totals
            long totalRegistered = 0;
            long totalFirstTime  = 0;
            long totalAchiever   = 0;

            ICollection <School> schools = null;

            if (criterion.SchoolId != null)
            {
                schools = new List <School>()
                {
                    await _schoolRepository.GetByIdAsync((int)criterion.SchoolId)
                };
            }
            else if (criterion.SchoolDistrictId != null)
            {
                schools = await _schoolRepository.GetAllAsync((int)criterion.SiteId,
                                                              criterion.SchoolDistrictId);
            }

            if (schools == null)
            {
                throw new Exception("Could not find any school(s) to report on.");
            }

            foreach (var school in schools)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                UpdateProgress(progress,
                               ++count * 100 / schools.Count(),
                               $"Processing: {school.Name}",
                               request.Name);

                criterion.SchoolDistrictId = null;
                criterion.SchoolId         = school.Id;

                int users = await _userRepository.GetCountAsync(criterion);

                int achievers = await _userRepository.GetAchieverCountAsync(criterion);

                totalRegistered += users;
                totalAchiever   += achievers;

                string schoolTypeName = null;
                if (school.SchoolTypeId.HasValue)
                {
                    var schoolType = await _schoolTypeRepository
                                     .GetByIdAsync(school.SchoolTypeId.Value);

                    schoolTypeName = schoolType.Name;
                }

                var row = new List <object>()
                {
                    school.Name,
                    schoolTypeName,
                    users
                };

                if (askIfFirstTime)
                {
                    int firstTime = await _userRepository.GetFirstTimeCountAsync(criterion);

                    totalFirstTime += firstTime;

                    row.Add(firstTime);
                }

                row.Add(achievers);

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

            report.Data = reportData.ToArray();

            // total row
            var footerRow = new List <object>()
            {
                "Total",
                string.Empty,
                totalRegistered
            };

            if (askIfFirstTime)
            {
                footerRow.Add(totalFirstTime);
            }

            footerRow.Add(totalAchiever);

            report.FooterRow = footerRow.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
        }
示例#13
0
        public async override 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 GetCriterionAsync(request);

            var report = new StoredReport
            {
                Title = ReportAttribute?.Name,
                AsOf  = _serviceFacade.DateTimeProvider.Now
            };

            var reportData = new List <object[]>();
            #endregion Reporting initialization

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

            // header row
            var headerRow = new List <object>()
            {
                "System Name",
                "Branch Name",
                "Program Name",
                "Registered Users",
            };

            var translations      = new Dictionary <string, ICollection <int?> >();
            var translationTotals = new Dictionary <string, long>();

            var programDictionary = (await _programRepository.GetAllAsync((int)criterion.SiteId))
                                    .ToDictionary(_ => _.Id, _ => _.Name);

            foreach (var programId in programDictionary.Keys)
            {
                var pointTranslation = await _pointTranslationRepository
                                       .GetByProgramIdAsync(programId);

                string description = pointTranslation.ActivityDescriptionPlural;

                if (!translations.ContainsKey(description))
                {
                    translations.Add(description, new List <int?> {
                        pointTranslation.Id
                    });
                    translationTotals.Add(description, 0);
                    if (description.Length > 2)
                    {
                        headerRow.Add(description.First().ToString().ToUpper()
                                      + description.Substring(1));
                    }
                    else
                    {
                        headerRow.Add(description);
                    }
                }
                else
                {
                    translations[description].Add(pointTranslation.Id);
                }
            }
            report.HeaderRow = headerRow.ToArray();

            int count = 0;

            // running totals
            long totalRegistered = 0;

            var branches = criterion.SystemId != null
                ? await _branchRepository.GetBySystemAsync((int)criterion.SystemId)
                : await _branchRepository.GetAllAsync((int)criterion.SiteId);

            var systemIds = branches
                            .OrderBy(_ => _.SystemName)
                            .GroupBy(_ => _.SystemId)
                            .Select(_ => _.First().SystemId);

            int totalItems = branches.Count() * programDictionary.Count();

            foreach (var systemId in systemIds)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                foreach (var branch in branches.Where(_ => _.SystemId == systemId))
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    foreach (var programId in programDictionary.Keys)
                    {
                        UpdateProgress(progress,
                                       ++count * 100 / totalItems,
                                       $"Processing: {branch.SystemName} - {branch.Name}",
                                       request.Name);

                        criterion.SystemId  = systemId;
                        criterion.BranchId  = branch.Id;
                        criterion.ProgramId = programId;

                        int users = await _userRepository.GetCountAsync(criterion);

                        totalRegistered += users;

                        var row = new List <object>()
                        {
                            branch.SystemName,
                            branch.Name,
                            programDictionary[programId],
                            users
                        };

                        foreach (var translationName in translations.Keys)
                        {
                            long total = await _userLogRepository.TranslationEarningsAsync(criterion,
                                                                                           translations[translationName]);

                            row.Add(total);
                            translationTotals[translationName] += total;
                        }

                        reportData.Add(row.ToArray());

                        if (token.IsCancellationRequested)
                        {
                            break;
                        }
                    }
                }
            }

            report.Data = reportData.ToArray();

            // total row
            var footerRow = new List <object>()
            {
                "Total",
                string.Empty,
                string.Empty,
                totalRegistered,
            };

            foreach (var total in translationTotals.Values)
            {
                footerRow.Add(total);
            }

            report.FooterRow = footerRow.ToArray();
            #endregion Collect data

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

            #endregion Finish up reporting
        }
 private static string GetRequestString(ReportRequest request1)
 {
     return(JsonConvert.SerializeObject(request1));
 }
示例#15
0
        public List <GoogleApisAnalyticsReportingResponseModel> GetData(GoogleApisAnalyticsReportingRequestModel model)
        {
            var responseModel = new List <GoogleApisAnalyticsReportingResponseModel>();

            try {
                using (var analyticsreporting = GoogleServiceAccount.AuthenticateServiceAccountFromKey()) {
                    //set parameters
                    var dateRange = new DateRange()
                    {
                        StartDate = model.StartDate.ToString("yyyy-MM-dd"), EndDate = model.EndDate.ToString("yyyy-MM-dd")
                    };
                    var dimensions = new List <Dimension>()
                    {
                        new Dimension {
                            Name = "ga:date"
                        },
                        new Dimension {
                            Name = "ga:pagePath"
                        }
                    };
                    var metrics = new List <Metric>()
                    {
                        new Metric {
                            Expression = "ga:pageviews", Alias = "PV"
                        },
                        new Metric {
                            Expression = "ga:uniquePageviews", Alias = "UV"
                        }
                    };

                    var filters = "";
                    if (!string.IsNullOrEmpty(model.PagePath))
                    {
                        filters = string.Format("ga:pagePath=={0}", model.PagePath);
                    }

                    var orderBys = new List <OrderBy>()
                    {
                        new OrderBy {
                            FieldName = "ga:date", SortOrder = "descending"
                        }
                    };

                    //request report
                    var reportRequest = new ReportRequest {
                        ViewId     = viewId,
                        DateRanges = new List <DateRange>()
                        {
                            dateRange
                        },
                        Dimensions        = dimensions,
                        Metrics           = metrics,
                        FiltersExpression = filters,
                        //Segments = segments,
                        OrderBys = orderBys
                    };

                    //result
                    var requests = new List <ReportRequest>();
                    requests.Add(reportRequest);

                    // Create the GetReportsRequest object.
                    var getReport = new GetReportsRequest()
                    {
                        ReportRequests = requests
                    };

                    // Call the batchGet method.
                    var response = analyticsreporting.Reports.BatchGet(getReport).Execute();

                    //mapper viewModels
                    foreach (Report report in response.Reports)
                    {
                        var rows = (List <ReportRow>)report.Data.Rows;
                        if (rows == null)
                        {
                            throw new Exception("데이터가 없습니다.");
                        }
                        foreach (ReportRow row in rows)
                        {
                            responseModel.Add(new GoogleApisAnalyticsReportingResponseModel {
                                Date            = row.Dimensions[0],
                                PagePath        = row.Dimensions[1],
                                PageViews       = row.Metrics[0].Values[0],
                                UniquePageviews = row.Metrics[0].Values[1]
                            });
                        }
                    }
                }
            } catch (Exception e) {
            }

            return(responseModel);
        }
        // Request the report and returns the ReportRequestId that can be used to check report
        // status and then used to download the report.

        private async Task<string> SubmitGenerateReportAsync(ReportRequest report)
        {
            var request = new SubmitGenerateReportRequest
            {
                ReportRequest = report
            };

            return (await Service.CallAsync((s, r) => s.SubmitGenerateReportAsync(r),request)).ReportRequestId;
        }
示例#17
0
 public void Remove(ReportRequest pIn) => _report.DeleteOne(p => p.UUID == pIn.UUID);
示例#18
0
 public async Task SaveToDatabase(ReportRequest reportRequest)
 {
     reportRequest.Id = Guid.NewGuid().ToString();
     await this.container.CreateItemAsync(reportRequest);
 }
示例#19
0
        public List <RCHErrorReportDetail> FetchRCHErrorReport(ReportRequest rData)
        {
            var allData = _supportData.FetchRCHErrorReport(rData);

            return(allData);
        }
        protected void Operation(WordDocument doc, ReportRequest request)
        {
            long id       = request.id;
            var  codeType = request.type;

            doc.ReplaceText("Org", GetOrgName(SecurityHelper.CurrentPrincipal.OrgId));
            IReportManageService reportManageService = IOCContainer.Instance.Resolve <IReportManageService>();
            var question = reportManageService.GetQuestion(id);

            if (question.Id == 0)
            {
                InitData(typeof(Question), doc);
                switch (codeType)
                {
                case "ADLReport":
                    InitValue(31, 40, doc);
                    break;

                case "MMSEReport":
                    InitValue(41, 70, doc);
                    break;

                case "SPMSQReport":
                    InitValue(71, 80, doc);
                    break;

                case "IADLReport":
                    InitValue(81, 88, doc);
                    break;

                case "ColeScaleReport":
                    InitValue(89, 89, doc);
                    break;

                case "PrsSoreReport":
                    InitValue(123, 128, doc);
                    break;
                }

                return;
            }
            List <Dictionary <string, string> > list = new List <Dictionary <string, string> >();
            var dict = new Dictionary <string, string>();

            BindData(question, doc, dict);
            var answers = reportManageService.GetAnswers(question.Id).ToList();

            switch (codeType)
            {
            case "ADLReport":
                for (var i = 31; i <= 40; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    dict.Add("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;

            case "MMSEReport":
                for (var i = 41; i <= 70; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    doc.ReplaceText("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;

            case "SPMSQReport":
                for (var i = 71; i <= 80; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    dict.Add("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;

            case "IADLReport":
                for (var i = 81; i <= 88; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    dict.Add("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;

            case "ColeScaleReport":
                for (var i = 89; i <= 89; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    dict.Add("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;

            case "PrsSoreReport":
                for (var i = 123; i <= 128; i++)
                {
                    var answer = answers.Find(o => o.Id == i);
                    dict.Add("Value" + i, answer != null ? answer.Value : "未填");
                }
                break;
            }


            list.Add(dict);
            doc.FillTable(0, list, doc, codeType);
        }
示例#21
0
        public List <SSTCorrectionReportDetail> FetchSSTErrorReport(ReportRequest rData)
        {
            var allData = _supportData.FetchSSTErrorReport(rData);

            return(allData);
        }
示例#22
0
        //
        // GET: /Report/
        public ActionResult Index(string application, [FromUri] ReportRequest request)
        {
            // this is necessary for opening the report in a new window
            if (request.ReportName == null)
            {
                return(View("Index"));
            }

            if (request.SearchDTO == null)
            {
                request.SearchDTO = new PaginatedSearchRequestDto();
            }

            request.SearchDTO.ShouldPaginate = false;
            request.Key.Mode     = SchemaMode.input;
            request.Key.Platform = ClientPlatform.Web;

            var dataResponse = _dataController.Get(application, request);
            var data         = new DataTable();

            if (dataResponse is ApplicationListResult)
            {
                var listData = ((ApplicationListResult)dataResponse).ResultObject;
                var schema   = ((ApplicationListResult)dataResponse).Schema;
                data = ReportUtil.ConvertMapListToTable(
                    listData.Select(f => f.Attributes).ToList(),
                    schema
                    );
            }
            else if (dataResponse is ApplicationDetailResult)
            {
                var detailData = ((ApplicationDetailResult)dataResponse).ResultObject;
                var schema     = ((ApplicationDetailResult)dataResponse).Schema;
                data = ReportUtil.ConvertMapListToTable(
                    new List <IDictionary <string, object> >()
                {
                    detailData.Attributes
                },
                    schema
                    );
            }

            var rdlc   = ReportUtil.GetDescriptorPath(request.ReportName);
            var dsName = ReportUtil.GetDataSetName(request.ReportName);

            var parameters = new Dictionary <string, string>();

            if (request.SearchDTO != null && !String.IsNullOrEmpty(request.SearchDTO.SearchParams) &&
                !String.IsNullOrEmpty(request.SearchDTO.SearchValues))
            {
                parameters = (Dictionary <string, string>)
                             PopulateReportParamters(request.SearchDTO.SearchParams, request.SearchDTO.SearchValues);
            }
            //Adding SCIM to parameters for IncidentPerLocationSCIMReport
            string scimMatch = "SCIM";
            Regex  regex     = new Regex(scimMatch, RegexOptions.IgnoreCase);

            if (regex.IsMatch(request.ReportName) && parameters.ContainsKey("commodities_description_header"))
            {
                string[] arrTemp = parameters["commodities_description_header"].Split('-');
                parameters.Add("system_header", arrTemp[0] + '-' + arrTemp[1]);
                parameters.Add("component_header", (arrTemp.Length > 2) ? arrTemp[2] : MISSING);
                parameters.Add("item_header", (arrTemp.Length > 3) ? arrTemp[3] : MISSING);
                parameters.Add("module_header", (arrTemp.Length > 4) ? ModuleFieldValue(arrTemp) : MISSING);
            }
            else if (request.ReportName.Equals("ITCReport") && parameters.ContainsKey("persongroup_description_header"))
            {
                var strbld = new StringBuilder();
                foreach (var location in parameters["persongroup_description_header"].Split(','))
                {
                    var siteAndCostCenter = location.Split('-');
                    strbld.Append("HLAG-");
                    strbld.Append(siteAndCostCenter[0]);
                    strbld.Append(" - ");
                    strbld.Append(siteAndCostCenter[1]);
                    strbld.Append(", ");
                }
                if (strbld.Length > 2)
                {
                    strbld.Remove(strbld.Length - 2, 2);
                }
                parameters["persongroup_description_header"] = strbld.ToString();

                var user = SecurityFacade.CurrentUser();
                parameters["requestor"] = user.FirstName + " " + user.LastName;
            }

            return(View("Index", new ReportModel(rdlc, dsName, data, parameters)));
        }
示例#23
0
 internal override ReportResponse HandleSignals(ReportRequest request)
 {
     _response = _ardResponseFac.InvalidRequest <ReportResponse>(ErrorEnum.ShouldNotSendSignals, CommandEnum.Process);
     LogOnDashAsync($"{_proxy.Info.UniqueName} sent signals but should be processing a {OrderUnderProcess.RecipeName} (ref: {OrderUnderProcess.Reference}).");
     return((ReportResponse)_response);
 }
 /// <summary>
 /// Submits a download request to the Bing Ads reporting service with the specified parameters.
 /// </summary>
 /// <param name="request">Determines various download parameters, for example what entities to download. </param>
 /// <returns>A task that represents the asynchronous operation. The task result will be the submitted download operation.</returns>
 /// <exception cref="FaultException{TDetail}">Thrown if a fault is returned from the Bing Ads service.</exception>
 /// <exception cref="OAuthTokenRequestException">Thrown if tokens can't be refreshed due to an error received from the Microsoft Account authorization server.</exception>
 public Task <ReportingDownloadOperation> SubmitDownloadAsync(ReportRequest request)
 {
     return(SubmitDownloadAsyncImpl(request));
 }
示例#25
0
        public List <DimensionResult4Columns> GetDimensionsAndMetricsUneven(string authenticationJson, string viewId, List <Dimension> dimensions, List <Metric> metrics, string startDate, string endDate, string filter = "", OrderBy orderBy = null)
        {
            var browserSessions = new List <DimensionResult4Columns>();

            var credential = Google.Apis.Auth.OAuth2.GoogleCredential.FromJson(authenticationJson)
                             .CreateScoped(new[] { Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService.Scope.AnalyticsReadonly });

            using (var analytics = new Google.Apis.AnalyticsReporting.v4.AnalyticsReportingService(new Google.Apis.Services.BaseClientService.Initializer
            {
                HttpClientInitializer = credential
            }))
            {
                // Create the DateRange object.
                DateRange dateRange = new DateRange()
                {
                    StartDate = startDate, EndDate = endDate
                };

                // Create the ReportRequest object.
                // Create the ReportRequest object.
                ReportRequest reportRequest = new ReportRequest
                {
                    ViewId     = viewId,
                    DateRanges = new List <DateRange>()
                    {
                        dateRange
                    },
                    Dimensions        = dimensions, // new List<Dimension>() { browser, campaign, age },
                    FiltersExpression = filter,
                    PageSize          = 10000,
                    OrderBys          = new List <OrderBy>()
                    {
                        orderBy
                    },
                    Metrics = metrics, // new List<Metric>() { sessions, pageviews }
                };

                List <ReportRequest> requests = new List <ReportRequest>();
                requests.Add(reportRequest);

                // Create the GetReportsRequest object.
                GetReportsRequest getReport = new GetReportsRequest()
                {
                    ReportRequests = requests
                };

                // Call the batchGet method.
                GetReportsResponse response = analytics.Reports.BatchGet(getReport).Execute();

                var rows = response.Reports.FirstOrDefault().Data.Rows;
                foreach (var row in rows)
                {
                    if ((row.Dimensions.Count() == 3 || row.Dimensions.Count() == 4) && row.Metrics.Count() == 1)
                    {
                        browserSessions.Add(new DimensionResult4Columns()
                        {
                            FirstColumn  = row.Dimensions[0],
                            SecondColumn = row.Dimensions[1],
                            ThirdColumn  = row.Dimensions[2],
                            Value        = row.Metrics.FirstOrDefault().Values[0]
                        });
                    }
                }
            }

            return(browserSessions);
        }
        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));
            }

            int count = 0;
            var asof  = _serviceFacade.DateTimeProvider.Now;

            var askIfFirstTime
                = await GetSiteSettingBoolAsync(criterion, SiteSettingKey.Users.AskIfFirstTime);

            #endregion Reporting initialization

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

            var programTotals = new Dictionary <int, (int users, int firstTime, int achievers)>();

            var programReports = new List <StoredReport>();

            var programs = await _programRepository.GetAllAsync((int)criterion.SiteId);

            var branches = await _branchRepository.GetAllAsync((int)criterion.SiteId);

            int totalItems = branches.Count() * programs.Count();

            foreach (var program in programs)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                var report = new StoredReport
                {
                    Title = program.Name,
                    AsOf  = asof
                };
                var reportData = new List <object[]>();

                // header row
                var headerRow = new List <object> {
                    "Library System",
                    "Library",
                    "Signups"
                };

                if (askIfFirstTime)
                {
                    headerRow.Add("First time Participants");
                }

                headerRow.Add("Achievers");

                report.HeaderRow = headerRow.ToArray();

                int programTotalUsers     = 0;
                int programTotalFirstTime = 0;
                int programTotalAchievers = 0;

                var systemIds = branches
                                .OrderBy(_ => _.SystemName)
                                .GroupBy(_ => _.SystemId)
                                .Select(_ => _.First().SystemId);
                foreach (var systemId in systemIds)
                {
                    foreach (var branch in branches.Where(_ => _.SystemId == systemId))
                    {
                        if (totalItems > 0)
                        {
                            UpdateProgress(progress,
                                           ++count * 100 / totalItems,
                                           $"{program.Name} - {branch.SystemName}",
                                           request.Name);
                        }

                        criterion.BranchId  = branch.Id;
                        criterion.ProgramId = program.Id;

                        int users = await _userRepository.GetCountAsync(criterion);

                        int achievers = await _userRepository.GetAchieverCountAsync(criterion);

                        var row = new List <object> {
                            branch.SystemName,
                            branch.Name,
                            users
                        };

                        if (askIfFirstTime)
                        {
                            int firstTime = await _userRepository.GetFirstTimeCountAsync(criterion);

                            programTotalFirstTime += firstTime;

                            row.Add(firstTime);
                        }

                        row.Add(achievers);

                        programTotalUsers     += users;
                        programTotalAchievers += achievers;

                        reportData.Add(row.ToArray());

                        if (token.IsCancellationRequested)
                        {
                            break;
                        }
                    } // foreach branch

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                } // foreach system

                report.Data = reportData.ToArray();

                var footerRow = new List <object>
                {
                    "Total",
                    string.Empty,
                    programTotalUsers,
                };

                if (askIfFirstTime)
                {
                    footerRow.Add(programTotalFirstTime);
                }

                footerRow.Add(programTotalAchievers);

                report.FooterRow = footerRow.ToArray();

                programTotals.Add(program.Id, (programTotalUsers, programTotalFirstTime, programTotalAchievers));

                double completion = 0;
                if (programTotalUsers > 0)
                {
                    completion = (double)programTotalAchievers * 100 / programTotalUsers;
                }

                var endDate = criterion.EndDate ?? asof;

                report.FooterText = new string[]
                {
                    $"Completion rate: {completion:N2}%",
                    $"This report was run on {asof:g} and contains data up to {endDate:g}."
                };

                programReports.Add(report);
            } // foreach program

            var summaryReport = new StoredReport
            {
                Title = "Summary",
                AsOf  = asof
            };
            var summaryReportData = new List <object[]>();

            var summaryHeader = new List <object>()
            {
                "Program",
                "Signups",
            };

            if (askIfFirstTime)
            {
                summaryHeader.Add("First time Participants");
            }

            summaryHeader.Add("Achievers");
            summaryHeader.Add("Achiever Points");

            summaryReport.HeaderRow = summaryHeader.ToArray();

            int signupTotal    = 0;
            int firstTimeTotal = 0;
            int achieverTotal  = 0;

            foreach (var program in programs)
            {
                var(users, firstTime, achievers) = programTotals[program.Id];

                var summaryRow = new List <object>
                {
                    program.Name,
                    users
                };

                if (askIfFirstTime)
                {
                    summaryRow.Add(firstTime);
                }

                summaryRow.Add(achievers);
                summaryRow.Add(program.AchieverPointAmount);

                summaryReportData.Add(summaryRow.ToArray());

                signupTotal    += users;
                firstTimeTotal += firstTime;
                achieverTotal  += achievers;
            }

            summaryReport.Data = summaryReportData.ToArray();

            var summaryFooter = new List <object>()
            {
                "Total",
                signupTotal,
            };

            if (askIfFirstTime)
            {
                summaryFooter.Add(firstTimeTotal);
            }

            summaryFooter.Add(achieverTotal);
            summaryFooter.Add(string.Empty);

            summaryReport.FooterRow = summaryFooter.ToArray();

            double totalCompletion = 0;
            if (signupTotal > 0)
            {
                totalCompletion = (double)achieverTotal * 100 / signupTotal;
            }

            summaryReport.FooterText = new string[] {
                $"Completion rate: {totalCompletion:N2}%"
            };
            #endregion Collect data

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

            #endregion Finish up reporting
        }
示例#27
0
        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));
            }

            string title = "";

            if (criterion.SystemId.HasValue)
            {
                title = (await _systemRepository.GetByIdAsync(criterion.SystemId.Value)).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[] {
                criterion.SystemId.HasValue ? "System Name" : "Branch Name"
            };

            var programs = await _programRepository.GetAllAsync(criterion.SiteId.Value);

            foreach (var program in programs)
            {
                report.HeaderRow = report.HeaderRow.Append(program.Name);
            }

            report.HeaderRow = report.HeaderRow.Append("Total");

            int count = 0;

            var users = await _userRepository.GetUsersByCriterionAsync(criterion);

            if (criterion.SystemId.HasValue)
            {
                users = users.Where(_ => _.SystemId == criterion.SystemId);
                var branches = await _branchRepository.GetBySystemAsync(criterion.SystemId.Value);

                foreach (var branch in branches)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    UpdateProgress(progress,
                                   ++count * 100 / branches.Count(),
                                   $"Processing: {branch.SystemName} - {branch.Name}",
                                   request.Name);

                    var branchUsers          = users.Where(_ => _.BranchId == branch.Id);
                    IEnumerable <object> row = new object[]
                    {
                        branch.Name
                    };
                    foreach (var program in programs)
                    {
                        row = row.Append(branchUsers.Where(_ => _.ProgramId == program.Id).Count());
                    }
                    row = row.Append(branchUsers.Count());
                    reportData.Add(row.ToArray());
                }
            }
            else
            {
                var systems = await _systemRepository.GetAllAsync(criterion.SiteId.Value);

                foreach (var system in systems)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    UpdateProgress(progress,
                                   ++count * 100 / systems.Count(),
                                   $"Processing: {system.Name}",
                                   request.Name);

                    var systemUsers          = users.Where(_ => _.SystemId == system.Id);
                    IEnumerable <object> row = new object[]
                    {
                        system.Name
                    };
                    foreach (var program in programs)
                    {
                        row = row.Append(systemUsers.Where(_ => _.ProgramId == program.Id).Count());
                    }
                    row = row.Append(systemUsers.Count());
                    reportData.Add(row.ToArray());
                }
            }

            report.Data = reportData.ToArray();

            IEnumerable <object> footerRow = new object[]
            {
                "Total"
            };
            foreach (var program in programs)
            {
                footerRow = footerRow.Append(users.Where(_ => _.ProgramId == program.Id).Count());
            }
            footerRow = footerRow.Append(users.Count());

            report.FooterRow = footerRow.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
        }
示例#28
0
        public ActionResult Preview()
        {
            string templateName = Request["templateName"];
            string recId        = Request["recId"];

            ReportRequest request = new ReportRequest();

            if (templateName != null)
            {
                switch (templateName)
                {
                case "DCS1.1":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.1", this.LiftHistoryOperation, request);
                    }
                    break;

                case "DCS1.2":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.2", this.ReferralOperation, request);
                    }
                    break;

                //
                case "DCS1.3":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.3", this.BasicInfoOperation, request);
                    }
                    break;

                case "DCS1.4":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.4", this.RegLifeQualityEvalOperation, request);
                    }
                    break;

                case "DCS1.5":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.5", this.IpdOutOperation, request);
                    }
                    break;

                case "DCS1.7":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.7", this.IpdInOperation, request);
                    }
                    break;

                case "DCS1.6":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.6", this.RegQuestionEvalOperation, request);
                    }
                    break;

                case "DCS1.8":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id = int.Parse(recId);
                        this.GeneratePDF("DCS1.8", this.OnDayLifeOperation, request);
                    }
                    break;

                case "DCS1.9":
                    if (!string.IsNullOrEmpty(recId))
                    {
                        request.id    = int.Parse(recId);
                        request.feeNo = Convert.ToInt32(Request["feeNo"]);
                        this.GeneratePDF("DCS1.9", this.OnSocialEvalOperation, request);
                    }
                    break;
                }
            }
            return(View());
        }
示例#29
0
        /// <summary>
        /// Get all reports configured in App.config
        /// </summary>
        /// <returns></returns>
        public GetReportsResponse GetReport(string viewId)
        {
            var combinedReportResponse = new GetReportsResponse {
                Reports = new List <GAReport>()
            };

            try
            {
                Logger.Info("Processing View Id: " + viewId);
                var config = ReportConfiguration.GetConfig();
                foreach (var item in config.Reports)
                {
                    if (item is Report report)
                    {
                        var stopwatch = new Stopwatch();
                        Logger.Info("Started fetching report: " + report.Name);
                        // Create the Metrics and dimensions object based on configuration.
                        var metrics = report.Metrics.Split(',').Select(m => new Metric {
                            Expression = m
                        }).ToList();
                        var dimensions = report.Dimensions.Split(',').Select(d => new Dimension {
                            Name = d
                        }).ToList();
                        var reportRequest = new ReportRequest
                        {
                            DateRanges    = GetDateRangeFromConfiguration(config),
                            Metrics       = metrics,
                            Dimensions    = dimensions,
                            ViewId        = viewId,
                            SamplingLevel = "LARGE", //https://developers.google.com/analytics/devguides/reporting/core/v4/basics#sampling
                            PageSize      = 10000    //The Analytics Core Reporting API returns a maximum of 10,000 rows per request, no matter how many you ask for. https://developers.google.com/analytics/devguides/reporting/core/v4/rest/v4/reports/batchGet
                        };
                        stopwatch.Start();
                        var reportsResponse = analyticsReportingServiceInstance.Reports.BatchGet(new GetReportsRequest
                        {
                            ReportRequests = new List <ReportRequest> {
                                reportRequest
                            }
                        }).Execute();

                        if (reportsResponse != null)
                        {
                            ((List <GAReport>)combinedReportResponse.Reports).AddRange(reportsResponse.Reports);
                            while (reportsResponse.Reports[0].NextPageToken != null)
                            {
                                reportRequest.PageToken = reportsResponse.Reports[0].NextPageToken;
                                reportsResponse         = analyticsReportingServiceInstance.Reports.BatchGet(new GetReportsRequest
                                {
                                    ReportRequests = new List <ReportRequest> {
                                        reportRequest
                                    }
                                }).Execute();
                                ((List <GAReport>)combinedReportResponse.Reports).AddRange(reportsResponse.Reports);
                            }
                            stopwatch.Stop();
                        }
                        Logger.Info("Finished fetching report: " + report.Name);
                        Logger.Info(string.Format("Time elapsed: {0:hh\\:mm\\:ss}", stopwatch.Elapsed));
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Error in fetching reports: " + ex);
            }
            return(combinedReportResponse);
        }
示例#30
0
        /// <summary>
        /// 社工个案评估与处遇计划表
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="request"></param>
        private void OnSocialEvalOperation(WordDocument doc, ReportRequest request)
        {
            var org = organizationManageService.GetOrg(SecurityHelper.CurrentPrincipal.OrgId);

            doc.ReplaceText("Org", org.Data.OrgName);

            var basic = reportManageService.GetBasicInfoById(Convert.ToInt32(request.feeNo));

            var question = service.QuerySwRegEvalPlan(request.id, Convert.ToInt32(request.feeNo));

            if (question == null)
            {
                return;
            }
            BindData(question.Data.swRegEvalPlanModel, doc);
            doc.ReplaceText("YEAR", Convert.ToDateTime(question.Data.swRegEvalPlanModel.INDATE).Year.ToString());
            doc.ReplaceText("MONTH", Convert.ToDateTime(question.Data.swRegEvalPlanModel.INDATE).Month.ToString());
            doc.ReplaceText("DAY", Convert.ToDateTime(question.Data.swRegEvalPlanModel.INDATE).Day.ToString());
            doc.ReplaceText("AGE", (DateTime.Now.Year - Convert.ToDateTime(question.Data.swRegEvalPlanModel.BIRTHDATE).Year).ToString());

            string imgPath = basic.Data.EcologicalMap;

            if (imgPath != null)
            {
                //string imagePath = string.Format(@"{0}\{1}", mapPath, basic.Data.EcologicalMap);
                //doc.InsertImage("InsertImage", mapPath, 300, 200);
                try
                {
                    string mapPath = Server.MapPath(VirtualPathUtility.GetDirectory("~")) + imgPath.Substring(1);
                    doc.InsertImage("InsertImage", mapPath, 300, 200);
                }
                catch (Exception ex)
                {
                    doc.ReplaceText("InsertImage", "");
                    //应跳转至错误提示页
                }
            }
            else
            {
                doc.ReplaceText("InsertImage", "");
            }


            DataTable dt = new DataTable();

            dt.Columns.Add("c1");
            dt.Columns.Add("c2");
            dt.Columns.Add("c3");
            DataRow r = dt.NewRow();

            r["c1"] = "前次工作目标";
            r["c2"] = "执行情况";
            r["c3"] = "执行成效";
            dt.Rows.Add(r);

            for (var n = 0; n < question.Data.TaskGoalsStrategyModel.Count; n++)
            {
                var dr = dt.NewRow();
                dr["c1"] = question.Data.TaskGoalsStrategyModel[n].QUESTIONTYPE;
                dr["c2"] = question.Data.TaskGoalsStrategyModel[n].CPDIA;
                dr["c3"] = question.Data.TaskGoalsStrategyModel[n].EVALUATIONVALUE;

                dt.Rows.Add(dr);
            }
            doc.FillTable(1, dt, "", "", 0);
            dt.Dispose();

            DataTable dt1 = new DataTable();

            dt1.Columns.Add("c1");
            dt1.Columns.Add("c2");
            dt1.Columns.Add("c3");
            dt1.Columns.Add("c4");
            dt1.Columns.Add("c5");
            dt1.Columns.Add("c6");
            DataRow r1 = dt1.NewRow();

            r1["c1"] = "需求类别";
            r1["c2"] = "项目";
            r1["c3"] = "问题描述";
            r1["c4"] = "处遇目标";
            r1["c5"] = "阻助力分析";
            r1["c6"] = "介入方式或资源连接";
            dt1.Rows.Add(r1);

            for (var n = 0; n < question.Data.TaskGoalsStrategyModel.Count; n++)
            {
                var dr = dt1.NewRow();
                dr["c1"] = question.Data.TaskGoalsStrategyModel[n].QUESTIONTYPE;
                dr["c2"] = question.Data.TaskGoalsStrategyModel[n].CPDIA;
                dr["c3"] = question.Data.TaskGoalsStrategyModel[n].QUESTIONDESC;
                dr["c4"] = question.Data.TaskGoalsStrategyModel[n].TREATMENTGOAL;
                dr["c5"] = question.Data.TaskGoalsStrategyModel[n].QUESTIONANALYSIS;
                dr["c6"] = question.Data.TaskGoalsStrategyModel[n].PLANACTIVITY;
                dt1.Rows.Add(dr);
            }
            doc.FillTable(2, dt1, "", "", 0);
            dt1.Dispose();
        }
示例#31
0
        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));
            }

            string title = "";

            if (criterion.SystemId.HasValue)
            {
                title = (await _systemRepository.GetByIdAsync(criterion.SystemId.Value)).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[] {
                "System Name",
                "Branch Name",
                "# Redeemed",
                "# Ordered"
            };

            int count = 0;

            // running totals
            int totalEarned  = 0;
            int totalOrdered = 0;

            var branches = criterion.SystemId != null
                ? await _branchRepository.GetBySystemAsync((int)criterion.SystemId)
                : await _branchRepository.GetAllAsync((int)criterion.SiteId);

            var systemIds = branches
                            .OrderBy(_ => _.SystemName)
                            .GroupBy(_ => _.SystemId)
                            .Select(_ => _.First().SystemId);

            foreach (var systemId in systemIds)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                foreach (var branch in branches.Where(_ => _.SystemId == systemId))
                {
                    UpdateProgress(progress,
                                   ++count * 100 / branches.Count(),
                                   $"Processing: {branch.SystemName} - {branch.Name}",
                                   request.Name);

                    criterion.SystemId = systemId;
                    criterion.BranchId = branch.Id;

                    var vendorCodes = await _vendorCodeRepository.GetEarnedCodesAsync(criterion);

                    int earnedCodes = vendorCodes.Count;
                    int usedCodes   = vendorCodes.Where(_ => _.IsUsed).Count();

                    totalEarned  += earnedCodes;
                    totalOrdered += usedCodes;

                    var row = new List <object>()
                    {
                        branch.SystemName,
                        branch.Name,
                        earnedCodes,
                        usedCodes
                    };

                    reportData.Add(row.ToArray());

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }

            report.Data = reportData.ToArray();

            // total row
            var footerRow = new List <object>()
            {
                "Total",
                string.Empty,
                totalEarned,
                totalOrdered
            };

            report.FooterRow = footerRow.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
        }
        private async Task<ReportingDownloadOperation> SubmitDownloadAsyncImpl(ReportRequest request)
        {
            var submitRequest = new SubmitGenerateReportRequest {ReportRequest = request,};
            SubmitGenerateReportResponse response;

            using (var apiService = new ServiceClient<IReportingService>(_authorizationData, _apiEnvironment))
            {
                try
                {
                    response = await apiService.CallAsync((s, r) => s.SubmitGenerateReportAsync(r), submitRequest).ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    throw new CouldNotSubmitReportingDownloadException("Submit download operation failed.", e);
                }               
            }

            return new ReportingDownloadOperation(response.ReportRequestId, _authorizationData, response.TrackingId, _apiEnvironment) {StatusPollIntervalInMilliseconds = StatusPollIntervalInMilliseconds};
        }
示例#33
0
        public ReportResponse GetViewResult(ReportRequest request)
        {
            var proxy = _reportService.CreateProxy();

            return(proxy.GetViewResult(request));
        }
示例#34
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 report = new StoredReport
            {
                Title = ReportAttribute?.Name,
                AsOf  = _serviceFacade.DateTimeProvider.Now
            };

            var reportData = new List <object[]>();
            #endregion Reporting initialization

            #region Adjust report criteria as needed
            IEnumerable <int> triggerIds = null;

            if (!string.IsNullOrEmpty(criterion.TriggerList))
            {
                try
                {
                    triggerIds = criterion.TriggerList.Split(',').Select(int.Parse);
                }
                catch (Exception ex)
                {
                    _logger.LogError($"Unable to convert trigger id list to numbers: {ex.Message}");
                    _logger.LogError($"Badge id list: {criterion.TriggerList}");
                }
            }
            else
            {
                throw new GraException("No prizes selected.");
            }
            #endregion Adjust report criteria as needed

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

            // header row
            report.HeaderRow = new object[] {
                criterion.SystemId.HasValue ? "Branch Name" : "System Name",
                "# Redeemed"
            };

            int count = 0;
            int totalRedemptionCount = 0;
            if (criterion.SystemId.HasValue)
            {
                var branches = await _branchRepository.GetBySystemAsync(criterion.SystemId.Value);

                foreach (var branch in branches)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    UpdateProgress(progress,
                                   ++count * 100 / branches.Count(),
                                   $"Processing: {branch.SystemName} - {branch.Name}",
                                   request.Name);

                    var redemptionCount = await _prizeWinnerRepository
                                          .GetBranchPrizeRedemptionCountAsync(branch.Id, triggerIds);

                    totalRedemptionCount += redemptionCount;

                    IEnumerable <object> row = new object[]
                    {
                        branch.Name,
                        redemptionCount
                    };
                    reportData.Add(row.ToArray());
                }
            }
            else
            {
                var systems = await _systemRepository.GetAllAsync(criterion.SiteId.Value);

                foreach (var system in systems)
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    UpdateProgress(progress,
                                   ++count * 100 / systems.Count(),
                                   $"Processing: {system.Name}",
                                   request.Name);

                    var redemptionCount = await _prizeWinnerRepository
                                          .GetSystemPrizeRedemptionCountAsync(system.Id, triggerIds);

                    totalRedemptionCount += redemptionCount;

                    IEnumerable <object> row = new object[]
                    {
                        system.Name,
                        redemptionCount
                    };
                    reportData.Add(row.ToArray());
                }
            }

            report.Data = reportData.ToArray();

            IEnumerable <object> footerRow = new object[]
            {
                "Total",
                totalRedemptionCount
            };
            report.FooterRow = footerRow.ToArray();

            #endregion Collect data

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

            #endregion Finish up reporting
        }
示例#35
0
        public async Task <IHttpActionResult> GetReport(ReportRequest req)
        {
            var result = await _logic.GetReport(req, Request.RequestUri);

            return(Ok(result));
        }
        private async Task<ReportingDownloadOperation> SubmitDownloadAsyncImpl(ReportRequest request)
        {
            var submitRequest = new SubmitGenerateReportRequest {ReportRequest = request,};
            SubmitGenerateReportResponse response;

            using (var apiService = new ServiceClient<IReportingService>(_authorizationData))
            {
                response = await apiService.CallAsync((s, r) => s.SubmitGenerateReportAsync(r), submitRequest).ConfigureAwait(false);
            }

            return new ReportingDownloadOperation(response.ReportRequestId, _authorizationData, response.TrackingId) {StatusPollIntervalInMilliseconds = StatusPollIntervalInMilliseconds};
        }
        /// <summary>
        /// Submit the download request and then use the ReportingDownloadOperation result to
        /// track status yourself using GetStatusAsync.
        /// </summary>
        /// <param name="reportRequest"></param>
        /// <returns></returns>
        private async Task SubmitAndDownload(ReportRequest reportRequest)
        {
            var reportingDownloadOperation = await ReportingService.SubmitDownloadAsync(reportRequest);
            
            ReportingOperationStatus downloadStatus;
            var waitTime = new TimeSpan(0, 0, 5);

            // This sample polls every 5 seconds up to 2 minutes.

            for (int i = 0; i < 24; i++)
            {
                Thread.Sleep(waitTime);

                downloadStatus = await reportingDownloadOperation.GetStatusAsync();

                if (downloadStatus.Status == ReportRequestStatusType.Success)
                {
                    break;
                }
            }

            var resultFilePath = await reportingDownloadOperation.DownloadResultFileAsync(
                FileDirectory,
                ResultFileName,
                decompress: true,
                overwrite: true);   // Set this value true if you want to overwrite the same file.

            OutputStatusMessage(String.Format("Download result file: {0}\n", resultFilePath));
        }