コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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)));
            }
        }
コード例 #3
0
        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));
        }