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; }
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, })); }
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); }
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); }