using System; using DevExpress.XtraReports.UI; using EnVisage.Models; using System.Web.Script.Serialization; using System.Collections.Generic; using System.Collections; using Envisage.Code.DAL; using EnVisage.Code.DAL; using System.IO; namespace EnVisage.Code.BLL { public class ReportManager { public static XtraReport LoadReport(ReportCallbackModel model) { if (null == model) throw new ArgumentNullException("model"); XtraReport report = null; #region Serializing report parameters to be able to keep sorting params between report partial postbacks var keys = new List(); var values = new List(); if (model.SortFields != null) foreach (var val in model.SortFields) { keys.Add(val.Key); values.Add(val.Value); } var keysXml = keys.Serialize(); var valuesXml = values.Serialize(); #endregion switch (model.ReportId) { case Constants.REPORT_TEST_ID: report = new XtraReport2(); report.Parameters[Constants.REPORT_SORT_FIELD_PARAMETER_NAME].Value = keysXml; report.Parameters[Constants.REPORT_SORT_DIR_PARAMETER_NAME].Value = valuesXml; break; case Constants.REPORT_SUMMARY_ID: report = new EnVisage.Reports.SummaryReport(); report.Parameters[Constants.REPORT_SORT_FIELD_PARAMETER_NAME].Value = keysXml; report.Parameters[Constants.REPORT_SORT_DIR_PARAMETER_NAME].Value = valuesXml; break; case Constants.REPORT_FOREREVENUE_ID: report = new EnVisage.Reports.ForecastRevenueReport(); report.Parameters[Constants.REPORT_SORT_FIELD_PARAMETER_NAME].Value = keysXml; report.Parameters[Constants.REPORT_SORT_DIR_PARAMETER_NAME].Value = valuesXml; break; case Constants.REPORT_NONFOREREVENUE_ID: report = new EnVisage.Reports.ForecastNonRevenueReport(); report.Parameters[Constants.REPORT_SORT_FIELD_PARAMETER_NAME].Value = keysXml; report.Parameters[Constants.REPORT_SORT_DIR_PARAMETER_NAME].Value = valuesXml; break; default: using (var session = SessionFactory.Create()) { var reportEntity = session.GetObjectByKey(Convert.ToInt32(model.ReportId)); if (reportEntity != null && reportEntity.Layout != null) using (var stream = new MemoryStream(reportEntity.Layout)) { report = XtraReport.FromStream(stream, true); } } break; } if (null == report) throw new NullReferenceException("Cannot find report by provided Id: " + model.ReportId); return report; } } }