public static void SendAutoReports(DateTime datetime) { try { var now = DateTime.UtcNow.Date.AddHours(DateTime.UtcNow.Hour); foreach (var t in new DaoFactory(Global.DbID, -1).GetReportDao().GetAutoTemplates()) { try { var tenant = CoreContext.TenantManager.GetTenant(t.Tenant); if (tenant != null && tenant.Status == TenantStatus.Active && CoreContext.PaymentManager.GetTariff(tenant.TenantId).State < TariffState.NotPaid) { CoreContext.TenantManager.SetCurrentTenant(tenant); var cron = new CronExpression(t.Cron) { TimeZone = CoreContext.TenantManager.GetCurrentTenant().TimeZone }; var date = cron.GetTimeAfter(now.AddTicks(-1)); LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Find auto report: {0} - {1}, now: {2}, date: {3}", t.Name, t.Cron, now, date); if (date == now) { var user = CoreContext.UserManager.GetUsers(t.CreateBy); if (user.ID != Constants.LostUser.ID && user.Status == EmployeeStatus.Active) { SecurityContext.AuthenticateMe(user.ID); Thread.CurrentThread.CurrentCulture = user.GetCulture(); Thread.CurrentThread.CurrentUICulture = user.GetCulture(); var result = Report.CreateNewReport(t.ReportType, t.Filter).BuildReport(ReportViewType.EMail, t.Id); var message = new NoticeMessage(user, HttpUtility.HtmlDecode(t.Name), result, "html"); message.AddArgument(new TagValue(CommonTags.SendFrom, CoreContext.TenantManager.GetCurrentTenant().Name)); message.AddArgument(new TagValue(CommonTags.Priority, 1)); LogManager.GetLogger("ASC.Web.Projects.Reports").DebugFormat("Send auto report: {0} to {1}, tenant: {2}", t.Name, user, CoreContext.TenantManager.GetCurrentTenant()); WorkContext.NotifyContext.DispatchEngine.Dispatch(message, "email.sender"); } } } } catch (System.Security.SecurityException se) { LogManager.GetLogger("ASC.Web.Projects.Reports").Info("SendAutoReports", se); } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").ErrorFormat("TemplateId: {0}, Temaplate: {1}\r\n{2}", t.Id, t.Filter.ToXml(), ex); } } } catch (Exception ex) { LogManager.GetLogger("ASC.Web.Projects.Reports").Error("SendAutoReports", ex); } }
protected void Page_Load(object sender, EventArgs e) { Template = Page.EngineFactory.ReportEngine.GetTemplate(int.Parse(Request["tmplId"])); if (Template == null) { Page.RedirectNotFound("Reports.aspx"); } else { var filters = (ReportFilters)LoadControl(PathProvider.GetFileStaticRelativePath("Reports/ReportFilters.ascx")); filters.Report = Report.CreateNewReport(Template.ReportType, Template.Filter); _filter.Controls.Add(filters); InitTmplParam(); Page.Title = HeaderStringHelper.GetPageTitle(string.Format(ReportResource.ReportPageTitle, HttpUtility.HtmlDecode(Template.Name))); } }
public static string BuildReport(ReportType reportType, TaskFilter filter, ReportViewType viewType, int templateID) { //prepare filter if (templateID != 0 && !filter.FromDate.Equals(DateTime.MinValue)) { var interval = filter.ToDate.DayOfYear - filter.FromDate.DayOfYear; switch (reportType) { case ReportType.TasksByUsers: case ReportType.TasksByProjects: { filter.FromDate = TenantUtil.DateTimeNow().Date.AddDays(-interval); filter.ToDate = TenantUtil.DateTimeNow().Date; } break; case ReportType.MilestonesNearest: { filter.FromDate = TenantUtil.DateTimeNow().Date; filter.ToDate = TenantUtil.DateTimeNow().Date.AddDays(interval); } break; } } //exec var report = Report.CreateNewReport(reportType, filter); var data = report.BuildReport().ToList(); if (!data.Any()) { report = Report.CreateNewReport(ReportType.EmptyReport, filter); } return(ReportTransformer.Transform(data.ToList(), report, filter.ViewType, viewType, templateID)); }