public ActionResult Edit(Guid id, MetaReportModel model, List <MetaReportItemModel> items, string button) { using (DBEntities context = Settings.CreateDataContext()) { if (!ModelState.IsValid) { return(View(model)); } MetaReport target = null; if (model.Id != Guid.Empty) { target = MetaReportHelper.Get(model.Id, context); if (target == null) { ModelState.AddModelError("", "Запись не найдена!"); return(View(model)); } } else { target = new MetaReport(); target.Id = Guid.NewGuid(); context.AddToMetaReport(target); } MetaReportModel.CreateMap(); Mapper.Map(model, target); if (items != null) { SyncReportItems(target, items, context); } try { context.SaveChanges(); } catch (Exception ex) { var sb = new StringBuilder(Resources.Resource.SaveError + ": " + ex.Message); if (ex.InnerException != null) { sb.AppendLine(ex.InnerException.Message); } ModelState.AddModelError("", sb.ToString()); return(View(model)); } if (button == "SaveAndExit") { return(RedirectToAction("Index")); } else { return(RedirectToAction("Edit", new { target.Id })); } } }
public ActionResult Edit(Guid id, MetaReportModel model, List<MetaReportItemModel> items, string button) { using (DBEntities context = Settings.CreateDataContext()) { if (!ModelState.IsValid) { return View(model); } MetaReport target = null; if (model.Id != Guid.Empty) { target = MetaReportHelper.Get(model.Id, context); if (target == null) { ModelState.AddModelError("", "Запись не найдена!"); return View(model); } } else { target = new MetaReport(); target.Id = Guid.NewGuid(); context.AddToMetaReport(target); } MetaReportModel.CreateMap(); Mapper.Map(model, target); if (items != null) SyncReportItems(target, items, context); try { context.SaveChanges(); } catch (Exception ex) { var sb = new StringBuilder(Resources.Resource.SaveError + ": " + ex.Message); if (ex.InnerException != null) sb.AppendLine(ex.InnerException.Message); ModelState.AddModelError("", sb.ToString()); return View(model); } if (button == "SaveAndExit") return RedirectToAction("Index"); else return RedirectToAction("Edit", new { target.Id }); } }
private void SaveDefinition(CustomiseReportModel model, MetaReport metaReport) { try { // Prepare XML XmlDocument meta = new XmlDocument(); var ns = ""; // urn:pvims-org:v3 XmlNode rootNode = null; XmlAttribute attrib; XmlDeclaration xmlDeclaration = meta.CreateXmlDeclaration("1.0", "UTF-8", null); meta.AppendChild(xmlDeclaration); rootNode = meta.CreateElement("MetaReport", ns); attrib = meta.CreateAttribute("Type"); attrib.InnerText = model.ReportType.ToString(); rootNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("CoreEntity"); attrib.InnerText = model.CoreEntity.ToString(); rootNode.Attributes.Append(attrib); meta.AppendChild(rootNode); var encodedName = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(model.ReportName, false); var encodedDefinition = System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(model.ReportDefinition, false); metaReport.MetaDefinition = meta.InnerXml; metaReport.ReportDefinition = encodedDefinition; metaReport.ReportName = encodedName; metaReport.ReportStatus = (MetaReportStatus)model.ReportStatus; if (model.MetaReportId == 0) { _unitOfWork.Repository <MetaReport>().Save(metaReport); } else { _unitOfWork.Repository <MetaReport>().Update(metaReport); } _unitOfWork.Complete(); } catch (Exception ex) { ModelState.AddModelError("ReportName", String.Format("<li>ERROR: {0}...</li>", ex.Message)); } }
private void ExtractMetaDataForCustom(MetaReport metaReport, CustomiseReportModel model) { int tempi; XmlDocument meta = new XmlDocument(); meta.LoadXml(metaReport.MetaDefinition); // Unpack structures XmlNode rootNode = meta.SelectSingleNode("//MetaReport"); XmlAttribute typeAttr = rootNode.Attributes["Type"]; XmlAttribute entityAttr = rootNode.Attributes["CoreEntity"]; model.CoreEntity = entityAttr != null?int.TryParse(entityAttr.Value, out tempi) ? Convert.ToInt32(entityAttr.Value) : 0 : 0; model.ReportType = typeAttr != null?int.TryParse(typeAttr.Value, out tempi) ? Convert.ToInt32(typeAttr.Value) : 0 : 0; model.ViewType = model.ReportType == 1 ? Models.ViewType.List : Models.ViewType.Summary; }
public ActionResult Edit(Guid?id) { if (id.HasValue) { MetaReport obj = MetaReportHelper.Get(id.Value); if (obj == null) { return(MessageHelper.FormedContentObjectNotFound()); } MetaReportModel.CreateMap(); MetaReportModel model = Mapper.Map <MetaReport, MetaReportModel>(obj); return(View(model)); } else { return(View(new MetaReportModel())); } }
protected void Page_Init(object sender, EventArgs e) { if (HttpContext.Current.User.IsInRole("ReporterAdmin")) { _isPublisher = true; } if (Request.QueryString["id"] != null) { _id = Convert.ToInt32(Request.QueryString["id"]); if (_id > 0) { _metaReport = _db.MetaReports.Single(mr => mr.Id == _id); // Prepare report PrepareStructures(); RenderFilters(); RenderColumns(); } } else { throw new Exception("id not passed as parameter"); } //txtSearchFrom.Value = DateTime.Today.AddDays(-7).ToString("yyyy-MM-dd"); //txtSearchTo.Value = DateTime.Today.ToString("yyyy-MM-dd"); //ListItem item; //var facilityList = (from f in UnitOfWork.Repository<Facility>().Queryable() orderby f.FacilityName ascending select f).ToList(); //foreach (Facility fac in facilityList) //{ // item = new ListItem(); // item.Text = fac.FacilityName; // item.Value = fac.Id.ToString(); // ddlFacility.Items.Add(item); //} }
private void SyncReportItems(MetaReport target, List <MetaReportItemModel> itemModel, DBEntities context) { MetaReportItemModel.CreateMap(); var reportItems = context.MetaReportItem.Where(c => c.MetaReportId == target.Id).ToList(); foreach (var item in itemModel) { var reportItem = reportItems.FirstOrDefault(c => c.Id == item.Id); if (reportItem == null) { reportItem = new MetaReportItem() { Id = item.Id }; Mapper.Map(item, reportItem); reportItem.MetaReportId = target.Id; context.MetaReportItem.AddObject(reportItem); } else { Mapper.Map(item, reportItem); reportItem.MetaReportId = target.Id; } } for (int i = 0; i < reportItems.Count; i++) { var reportItem = reportItems[i]; var item = itemModel.FirstOrDefault(c => c.Id == reportItem.Id); if (item == null) { context.MetaReportItem.DeleteObject(reportItems[i]); reportItems.RemoveAt(i); i--; } } }
private void SaveDefinitionForAttribute(MetaReportAttributeModel model, MetaReport metaReport) { try { // Prepare XML XmlDocument meta = new XmlDocument(); var ns = ""; // urn:pvims-org:v3 XmlNode rootNode = null; XmlNode mainNode = null; XmlNode subNode = null; XmlAttribute attrib; XmlDeclaration xmlDeclaration = meta.CreateXmlDeclaration("1.0", "UTF-8", null); meta.AppendChild(xmlDeclaration); rootNode = meta.CreateElement("MetaReport", ns); attrib = meta.CreateAttribute("Type"); attrib.InnerText = model.ReportType.ToString(); rootNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("CoreEntity"); attrib.InnerText = model.CoreEntity.ToString(); rootNode.Attributes.Append(attrib); if (model.ReportType == 2) { mainNode = meta.CreateElement("Summary", ns); foreach (MetaReportAttributeModel.ListItem strat in model.StratifyItems) { subNode = meta.CreateElement("SummaryItem", ns); attrib = meta.CreateAttribute("MetaColumnId"); attrib.InnerText = strat.MetaColumnId.ToString(); subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("DisplayName"); attrib.InnerText = strat.DisplayName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = strat.AttributeName; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); } else { mainNode = meta.CreateElement("List", ns); foreach (MetaReportAttributeModel.ListItem list in model.ListItems) { subNode = meta.CreateElement("ListItem", ns); attrib = meta.CreateAttribute("MetaColumnId"); attrib.InnerText = list.MetaColumnId.ToString(); subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("DisplayName"); attrib.InnerText = list.DisplayName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = list.AttributeName; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); } mainNode = meta.CreateElement("Filter", ns); foreach (MetaReportAttributeModel.FilterItem filter in model.FilterItems) { subNode = meta.CreateElement("FilterItem", ns); attrib = meta.CreateAttribute("MetaColumnId"); attrib.InnerText = filter.MetaColumnId.ToString(); subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = filter.AttributeName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Operator"); attrib.InnerText = filter.Operator; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Relation"); attrib.InnerText = filter.Relation; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); meta.AppendChild(rootNode); metaReport.MetaDefinition = meta.InnerXml; string sql = string.Empty; if (model.ReportType == 2) { sql = PrepareSummaryQueryForPublication(model); } else { sql = PrepareListQueryForPublication(model); } metaReport.SQLDefinition = sql; _unitOfWork.Repository <MetaReport>().Update(metaReport); _unitOfWork.Complete(); } catch (Exception ex) { ModelState.AddModelError("ReportName", String.Format("<li>ERROR: {0}...</li>", ex.Message)); } }
private void ExtractMetaDataForAttribute(MetaReport metaReport, MetaReportAttributeModel model) { int tempi; XmlDocument meta = new XmlDocument(); meta.LoadXml(metaReport.MetaDefinition); // Unpack structures XmlNode rootNode = meta.SelectSingleNode("//MetaReport"); XmlAttribute typeAttr = rootNode.Attributes["Type"]; XmlAttribute entityAttr = rootNode.Attributes["CoreEntity"]; var coreId = entityAttr != null?int.TryParse(entityAttr.Value, out tempi) ? Convert.ToInt32(entityAttr.Value) : 0 : 0; model.CoreEntity = coreId; model.CoreEntityDisplay = _unitOfWork.Repository <MetaTable>().Queryable().Single(mt => mt.Id == coreId).TableName; var typeId = typeAttr != null?int.TryParse(typeAttr.Value, out tempi) ? Convert.ToInt32(typeAttr.Value) : 0 : 0; model.ReportType = typeId; model.ReportTypeDisplay = typeId == 1 ? "List" : "Summary"; XmlNode mainNode; // List or summary if (typeId == 1) { mainNode = rootNode.SelectSingleNode("//List"); if (mainNode != null) { foreach (XmlNode subNode in mainNode.ChildNodes) { MetaReportAttributeModel.ListItem list = new MetaReportAttributeModel.ListItem(); list.MetaColumnId = Convert.ToInt32(subNode.Attributes["MetaColumnId"].Value); list.AttributeName = subNode.Attributes.GetNamedItem("AttributeName").Value; list.DisplayName = subNode.Attributes.GetNamedItem("DisplayName").Value; model.ListItems.Add(list); } } } else { mainNode = rootNode.SelectSingleNode("//Summary"); if (mainNode != null) { foreach (XmlNode subNode in mainNode.ChildNodes) { MetaReportAttributeModel.ListItem strat = new MetaReportAttributeModel.ListItem(); strat.MetaColumnId = Convert.ToInt32(subNode.Attributes["MetaColumnId"].Value); strat.AttributeName = subNode.Attributes.GetNamedItem("AttributeName").Value; strat.DisplayName = subNode.Attributes.GetNamedItem("DisplayName").Value; model.StratifyItems.Add(strat); } } } // filter mainNode = rootNode.SelectSingleNode("//Filter"); if (mainNode != null) { foreach (XmlNode subNode in mainNode.ChildNodes) { MetaReportAttributeModel.FilterItem filter = new MetaReportAttributeModel.FilterItem(); filter.MetaColumnId = Convert.ToInt32(subNode.Attributes["MetaColumnId"].Value); filter.AttributeName = subNode.Attributes.GetNamedItem("AttributeName").Value; filter.Operator = subNode.Attributes.GetNamedItem("Operator").Value; filter.Relation = subNode.Attributes.GetNamedItem("Relation").Value; model.FilterItems.Add(filter); } } }
public ActionResult CustomiseReport(CustomiseReportModel model) { ViewBag.MenuItem = CurrentMenuItem; var metaReport = _unitOfWork.Repository <MetaReport>() .Queryable() .SingleOrDefault(r => r.Id == model.MetaReportId); if (metaReport == null) { metaReport = new MetaReport(); } ValidateDefinition(model); if (ModelState.IsValid) { SaveDefinition(model, metaReport); HttpCookie cookie = new HttpCookie("PopUpMessage"); cookie.Value = "Report saved successfully"; Response.Cookies.Add(cookie); return(Redirect("/Reports/Index")); } ViewBag.CoreEntities = new List <SelectListItem> { new SelectListItem { Value = "0", Text = "", Selected = true } }; ViewBag.CoreEntities.AddRange(_unitOfWork.Repository <MetaTable>().Queryable() .OrderBy(mt => mt.FriendlyName).Select(mt => new SelectListItem { Value = mt.Id.ToString(), Text = mt.FriendlyName }).ToList()); ViewBag.ReportTypes = new[] { new SelectListItem { Value = "0", Text = "" }, new SelectListItem { Value = "1", Text = "List", Selected = true }, new SelectListItem { Value = "2", Text = "Summary" } }; ViewBag.ReportStatuses = new[] { new SelectListItem { Value = "0", Text = "" }, new SelectListItem { Value = "2", Text = "Unpublished", Selected = true }, new SelectListItem { Value = "1", Text = "Published" } }; return(View(model)); }
private void SyncReportItems(MetaReport target, List<MetaReportItemModel> itemModel, DBEntities context) { MetaReportItemModel.CreateMap(); var reportItems = context.MetaReportItem.Where(c => c.MetaReportId == target.Id).ToList(); foreach (var item in itemModel) { var reportItem = reportItems.FirstOrDefault(c => c.Id == item.Id); if (reportItem == null) { reportItem = new MetaReportItem() { Id = item.Id }; Mapper.Map(item, reportItem); reportItem.MetaReportId = target.Id; context.MetaReportItem.AddObject(reportItem); } else { Mapper.Map(item, reportItem); reportItem.MetaReportId = target.Id; } } for (int i = 0; i < reportItems.Count; i++) { var reportItem = reportItems[i]; var item = itemModel.FirstOrDefault(c => c.Id == reportItem.Id); if (item == null) { context.MetaReportItem.DeleteObject(reportItems[i]); reportItems.RemoveAt(i); i--; } } }
/// <summary> /// Prepare an XML definition containing details of the report (including attributes) /// </summary> /// <param name="metaReportForAttributeUpdate">The meta report attribute payload</param> /// <param name="metaReport">The meta report being updated</param> /// <returns></returns> private void PrepareMetaDefinitionForAttribute(MetaReportForAttributeUpdateDto metaReportForAttributeUpdate, MetaReport metaReport) { // Prepare XML XmlDocument meta = new XmlDocument(); var ns = ""; // urn:pvims-org:v3 XmlNode rootNode = null; XmlNode mainNode = null; XmlNode subNode = null; XmlAttribute attrib; XmlDeclaration xmlDeclaration = meta.CreateXmlDeclaration("1.0", "UTF-8", null); meta.AppendChild(xmlDeclaration); rootNode = meta.CreateElement("MetaReport", ns); attrib = meta.CreateAttribute("Type"); attrib.InnerText = metaReportForAttributeUpdate.ReportType.ToString(); rootNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("CoreEntity"); attrib.InnerText = metaReportForAttributeUpdate.CoreEntity.ToString(); rootNode.Attributes.Append(attrib); if (metaReportForAttributeUpdate.ReportType == MetaReportTypes.Summary) { mainNode = meta.CreateElement("Summary", ns); foreach (var attribute in metaReportForAttributeUpdate.Attributes) { subNode = meta.CreateElement("SummaryItem", ns); attrib = meta.CreateAttribute("DisplayName"); attrib.InnerText = attribute.DisplayName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Aggregate"); attrib.InnerText = attribute.Aggregate; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = attribute.AttributeName; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); } else { mainNode = meta.CreateElement("List", ns); foreach (var attribute in metaReportForAttributeUpdate.Attributes) { subNode = meta.CreateElement("ListItem", ns); attrib = meta.CreateAttribute("DisplayName"); attrib.InnerText = attribute.DisplayName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Aggregate"); attrib.InnerText = string.Empty; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = attribute.AttributeName; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); } mainNode = meta.CreateElement("Filter", ns); foreach (var filter in metaReportForAttributeUpdate.Filters) { subNode = meta.CreateElement("FilterItem", ns); attrib = meta.CreateAttribute("AttributeName"); attrib.InnerText = filter.AttributeName; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Operator"); attrib.InnerText = filter.Operator; subNode.Attributes.Append(attrib); attrib = meta.CreateAttribute("Relation"); attrib.InnerText = filter.Relation; subNode.Attributes.Append(attrib); mainNode.AppendChild(subNode); } rootNode.AppendChild(mainNode); meta.AppendChild(rootNode); metaReport.MetaDefinition = meta.InnerXml; string sql = string.Empty; if (metaReportForAttributeUpdate.ReportType == MetaReportTypes.Summary) { sql = PrepareSummaryQueryForPublication(metaReportForAttributeUpdate); } else { sql = PrepareListQueryForPublication(metaReportForAttributeUpdate); } metaReport.SqlDefinition = sql; }
public async Task <IActionResult> CreateMetaReport( [FromBody] MetaReportForUpdateDto metaReportForUpdate) { if (metaReportForUpdate == null) { ModelState.AddModelError("Message", "Unable to locate payload for new request"); } if (Regex.Matches(metaReportForUpdate.ReportName, @"[a-zA-Z0-9 ]").Count < metaReportForUpdate.ReportName.Length) { ModelState.AddModelError("Message", "Report name contains invalid characters (Enter A-Z, a-z, 0-9, space)"); } var coreEntityFromRepo = await _metaTableRepository.GetAsync(f => f.TableName == metaReportForUpdate.CoreEntity); if (coreEntityFromRepo == null) { ModelState.AddModelError("Message", "Unable to locate core entity"); } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.ReportDefinition)) { if (Regex.Matches(metaReportForUpdate.ReportDefinition, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.ReportDefinition.Length) { ModelState.AddModelError("Message", "Report definition contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (!string.IsNullOrWhiteSpace(metaReportForUpdate.Breadcrumb)) { if (Regex.Matches(metaReportForUpdate.Breadcrumb, @"[-a-zA-Z0-9 .,]").Count < metaReportForUpdate.Breadcrumb.Length) { ModelState.AddModelError("Message", "Bread crumb contains invalid characters (Enter A-Z, a-z, 0-9, space, hyphen, period, comma)"); } } if (_unitOfWork.Repository <MetaReport>().Queryable(). Where(l => l.ReportName == metaReportForUpdate.ReportName) .Count() > 0) { ModelState.AddModelError("Message", "Item with same name already exists"); } if (ModelState.IsValid) { var newMetaReport = new MetaReport() { ReportName = metaReportForUpdate.ReportName, ReportDefinition = metaReportForUpdate.ReportDefinition, Breadcrumb = metaReportForUpdate.Breadcrumb, IsSystem = false, MetaReportGuid = Guid.NewGuid(), ReportStatus = metaReportForUpdate.ReportStatus, MetaDefinition = PrepareMetaDefinition(metaReportForUpdate) }; _metaReportRepository.Save(newMetaReport); var mappedMetaReport = await GetMetaReportAsync <MetaReportIdentifierDto>(newMetaReport.Id); if (mappedMetaReport == null) { return(StatusCode(500, "Unable to locate newly added item")); } return(CreatedAtAction("GetMetaReportByIdentifier", new { id = mappedMetaReport.Id }, CreateLinksForMetaReport <MetaReportIdentifierDto>(mappedMetaReport))); } return(BadRequest(ModelState)); }