EnVisageOnline/Main-RMO/Source/EnVisage/Code/BLL/ReportManager.cs

73 lines
3.1 KiB
C#

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<string>();
var values = new List<bool>();
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<UserReport>(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;
}
}
}