using DevExpress.Web.Mvc; using EnVisage.Code.BLL; using EnVisage.Code.HtmlHelpers; using EnVisage.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using EnVisage.Code; using Envisage.Code.DAL; using EnVisage.Code.DAL; using DevExpress.Xpo; using Envisage.Code.BLL; using System.IO; using DevExpress.XtraReports.UI; using DevExpress.XtraReports.Native; namespace EnVisage.Controllers { [Authorize] public class ReportingController : Controller { // // GET: /Reporting/ [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Read)] public ActionResult Index() { return View(); } [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Read)] public ActionResult Viewer(string id) { var report = ReportManager.LoadReport(new ReportCallbackModel() { ReportId = id }); var model = new ReportModel { ReportId = id, Report = report }; return View("BaseReportView", model); } [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Read)] public ActionResult Summary() { var report = ReportManager.LoadReport(new ReportCallbackModel() { ReportId = Constants.REPORT_SUMMARY_ID }); var model = new ReportModel { ReportId = Constants.REPORT_SUMMARY_ID, Report = report }; return View("BaseReportView", model); } [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Read)] public ActionResult Test() { var report = ReportManager.LoadReport(new ReportCallbackModel() { ReportId = Constants.REPORT_TEST_ID }); var model = new ReportModel { ReportId = Constants.REPORT_TEST_ID, Report = report }; return View("BaseReportView", model); } [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Read)] public ActionResult ForecastRevenue() { var report = ReportManager.LoadReport(new ReportCallbackModel() { ReportId = Constants.REPORT_FOREREVENUE_ID }); var model = new ReportModel { ReportId = Constants.REPORT_FOREREVENUE_ID, Report = report }; return View("BaseReportView", model); } public ActionResult ForecastNonRevenue() { var report = ReportManager.LoadReport(new ReportCallbackModel() { ReportId = Constants.REPORT_NONFOREREVENUE_ID }); var model = new ReportModel { ReportId = Constants.REPORT_NONFOREREVENUE_ID, Report = report }; return View("BaseReportView", model); } #region Callback handlers public ActionResult CallbackPanelPartial(ReportCallbackModel model) { var report = ReportManager.LoadReport(model); //we have to reset RequestParameters, otherwise report witl request parameters again but should reload sorted data without additional button click report.RequestParameters = false; return PartialView("_CallbackPanelPartial", report); } #endregion #region Designer Actions [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public ActionResult List() { using (var session = SessionFactory.Create()) { var reports = session.Query() .Select(x => new ReportListItemModel { Id = x.Oid.ToString(), Name = x.Name }) .ToArray(); var firstReport = reports.FirstOrDefault(); var model = new ReportListModel { SelectedReportId = firstReport != null ? firstReport.Id : string.Empty, Reports = reports }; return View(model); } } [HttpPost] [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public ActionResult Delete(int id) { using (var session = SessionFactory.Create()) { var report = session.GetObjectByKey(id); session.Delete(report); session.CommitChanges(); } return RedirectToAction("List"); } [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public ActionResult Add(string name) { return View("Designer", new DesignModel { NewName = name, Report = GetNewReport(), DataSource = CustomDataSourceSerializer.GetDataSource() }); } [HttpPost] [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public ActionResult Edit(int id) { using (var session = SessionFactory.Create()) { var reportEntity = session.GetObjectByKey(id); using (var stream = new MemoryStream(reportEntity.Layout)) { var report = XtraReport.FromStream(stream, true); return View("Designer", new DesignModel { Id = id.ToString(), Report = report }); } } } [HttpPost] [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public JsonResult AddNewReport(string name) { var layout = ReportDesignerExtension.GetReportXml("reportDesigner"); using (var session = SessionFactory.Create()) { var reportEntity = new UserReport(session) { Name = name, Layout = layout }; session.CommitChanges(); return Json(reportEntity.Oid); } } [HttpPost] [AreaSecurityAttribute(area = Areas.Reports, level = AccessLevel.Write)] public JsonResult UpdateReport(int id) { var layout = ReportDesignerExtension.GetReportXml("reportDesigner"); using (var session = SessionFactory.Create()) { var reportEntity = session.GetObjectByKey(id); reportEntity.Layout = layout; session.CommitChanges(); return Json(reportEntity.Oid); } } static DevExpress.XtraReports.UI.XtraReport GetNewReport() { var report = new ReportBase(); report.Extensions[SerializationService.Guid] = CustomDataSourceSerializer.Name; return report; } #endregion } }