Ejemplo n.º 1
0
        public static bool TryCreateReportFromTemplate(ReportTemplate template, Action <ReportState, string> callback, object obj, out ReportState state, bool auto = false)
        {
            var report = CreateNewReport(template.ReportType, template.Filter);

            template.Name = report.FileName;

            var data = report.GetDocbuilderData(template.Id);

            var dataJson    = JsonConvert.SerializeObject(data);
            var columnsJson = JsonConvert.SerializeObject(report.ExtendedReportType.ColumnsName);
            var filterJson  = JsonConvert.SerializeObject(template.Filter);

            var userCulture    = CoreContext.UserManager.GetUsers(template.CreateBy).GetCulture();
            var timeInterval   = GetIntervarl(template.Filter);
            var reportInfoJson = JsonConvert.SerializeObject(new Dictionary <string, object>
            {
                { "Title", report.ReportInfo.Title },
                { "CreatedText", ReportResource.ReportCreated },
                { "CreatedAt", TenantUtil.DateTimeNow().ToString("M/d/yyyy", CultureInfo.InvariantCulture) },
                { "CreatedBy", ProjectsFilterResource.By + " " + CoreContext.UserManager.GetUsers(template.CreateBy).DisplayUserName(false) },
                { "DateFormat", userCulture.DateTimeFormat.ShortDatePattern },
                { "TimeInterval", timeInterval }
            });

            var tmpFileName = DocbuilderReportsUtility.TmpFileName;

            var script = GetDocbuilderMasterTemplate
                         .Replace("${outputFilePath}", tmpFileName)
                         .Replace("${reportData}", dataJson)
                         .Replace("${reportColumn}", columnsJson)
                         .Replace("${reportFilter}", filterJson)
                         .Replace("${reportInfo}", reportInfoJson.Replace("\"", "\\\""))
                         .Replace("${templateBody}", GetDocbuilderTemplate(report.ReportType.ToString(), report.Filter.ViewType));

            state = new ReportState(report.FileName, tmpFileName, script, (int)template.ReportType, auto ? ReportOrigin.ProjectsAuto : ReportOrigin.Projects, callback, obj);

            if (data.Count == 0)
            {
                state.Exception = ReportResource.ErrorEmptyData;
                state.Status    = ReportStatus.Failed;
                return(false);
            }

            DocbuilderReportsUtility.Enqueue(state);

            return(true);
        }
Ejemplo n.º 2
0
        public static ReportState RunGenareteReport(ReportType reportType, ReportTimePeriod timePeriod, Guid[] managers)
        {
            var reportData = GetReportData(reportType, timePeriod, managers);

            if (reportData == null)
            {
                throw new Exception(CRMReportResource.ErrorNullReportData);
            }

            var tmpFileName = DocbuilderReportsUtility.TmpFileName;

            var script = GetReportScript(reportData, reportType, tmpFileName);

            if (string.IsNullOrEmpty(script))
            {
                throw new Exception(CRMReportResource.ErrorNullReportScript);
            }

            var state = new ReportState(GetFileName(reportType), tmpFileName, script, (int)reportType, ReportOrigin.CRM, SaveReportFile, null);

            DocbuilderReportsUtility.Enqueue(state);

            return(state);
        }