Пример #1
0
        private async Task LoadUser(ReportAndContentApi item)
        {
            var user = await DbContext.Users.Where(u => u.Id == CurrentUserId).Select(u => new { u.FullName, u.Email }).FirstAsync();

            item.FromFullName = user.FullName;
            item.FromEmail    = user.Email;
        }
Пример #2
0
        public async Task <IActionResult> Post([FromBody] ReportAndContentApi item)
        {
            if (!ModelState.IsValidUpdated())
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var translate = new Translate();

            await CleanWhiteSpace(item);

            if (!item.ToEmail.EmailsIsValid())
            {
                ModelState.AddModelError("item.ToEmail", translate.Get("REPORT.EMAIL_COMMA_ERROR"));
                return(new BadRequestObjectResult(ModelState));
            }

            await LoadUser(item);

            Report report = null;

            if (item.RelatedId.HasValue)
            {
                report = await ResendReport(item, item.RelatedId.Value);

                if (report == null)
                {
                    return(new NotFoundResult());
                }
            }
            else
            {
                var maxReports = await DbContext.Partitions.Where(p => p.Id == CurrentPartitionId).Select(p => p.MaxReportsPerMonth).FirstAsync();

                // Max Reports count
                if (await DbContext.Reports.Where(r => r.PartitionId == CurrentPartitionId && r.ToDate >= item.Report.ToDate.FirstDayOfMonth() && r.ToDate < item.Report.ToDate.FirstDayOfNextMonth()).CountAsync() >= maxReports)
                {
                    ModelState.AddModelError("", translate.Get("REPORT.MAXIMUM_REPORTS_ERROR"));
                    return(new BadRequestObjectResult(ModelState));
                }

                report = await CreateAndSendReport(item);
            }

            QueueReport(report);
            telemetryClient.TrackEvent("ReportQueued", new Dictionary <string, string> {
                { "UserId", Convert.ToString(CurrentUserId) }, { "PartitionId", CurrentPartitionIdAsString }
            });

            return(Json(new ReportItemApi
            {
                Id = report.Id,
                Status = report.Status,
                Number = report.Number,
                TotalTime = report.TotalTime,
                ToEmail = report.ToEmail,
            }));
        }
Пример #3
0
        private async Task <Report> ResendReport(ReportAndContentApi item, long reportId)
        {
            var report = await DbContext.Reports.Where(r => r.PartitionId == CurrentPartitionId && r.Id == reportId).FirstOrDefaultAsync();

            if (report != null)
            {
                report.Status          = ReportStatus.Resending;
                report.UpdateTimestamp = DateTime.UtcNow;
                report.ToEmail         = item.ToEmail;
                report.FromFullName    = item.FromFullName;
                report.FromEmail       = item.FromEmail;
                report.EmailSubject    = item.EmailSubject;
                report.EmailBody       = item.EmailBody;
                await DbContext.SaveChangesAsync();
            }
            return(report);
        }
Пример #4
0
        private async Task <Report> CreateAndSendReport(ReportAndContentApi item)
        {
            var report = Report.CreateNew(CurrentPartitionId, CurrentUserId, await NextReportNumber());

            report.FromDate  = item.Report.FromDate;
            report.ToDate    = item.Report.ToDate;
            report.TotalTime = item.Report.MonthTotal;
            await MapDeltaValuesAndCleanWhiteSpace(item, report);

            report.ReportData = await new ReportDataApi
            {
                ShowGroupColl  = item.showGroupColl,
                ReportTitle    = item.ReportTitle,
                ReportSubTitle = item.ReportSubTitle,
                ReportText     = item.ReportText,
                Report         = item.Report,
            }.ToJson();

            DbContext.Reports.Add(report);
            await DbContext.SaveChangesAsync();

            return(report);
        }