public ActionResult RemoveMetaColumn(long metaReportId, long metaColumnId, Models.ViewType viewType)
        {
            ViewBag.MenuItem = CurrentMenuItem;

            var metaReport = _unitOfWork.Repository <MetaReport>()
                             .Queryable()
                             .SingleOrDefault(r => r.Id == metaReportId);

            var model = new MetaReportAttributeModel()
            {
                MetaReportId     = metaReport.Id,
                ReportDefinition = metaReport.ReportDefinition,
                ReportName       = metaReport.ReportName,
                ViewType         = viewType
            };

            ExtractMetaDataForAttribute(metaReport, model);

            XmlDocument meta = new XmlDocument();

            meta.LoadXml(metaReport.MetaDefinition);

            // Get node to be removed
            XmlNode rootNode   = meta.SelectSingleNode("//MetaReport");
            XmlNode typeNode   = null;
            XmlNode removeNode = null;

            switch (viewType)
            {
            case Models.ViewType.List:
                typeNode   = rootNode.SelectSingleNode("//List");
                removeNode = typeNode.SelectSingleNode(String.Format("ListItem[@MetaColumnId='{0}']", metaColumnId));
                typeNode.RemoveChild(removeNode);

                break;

            case Models.ViewType.Summary:
                typeNode   = rootNode.SelectSingleNode("//Summary");
                removeNode = typeNode.SelectSingleNode(String.Format("SummaryItem[@MetaColumnId='{0}']", metaColumnId));
                typeNode.RemoveChild(removeNode);

                break;

            case Models.ViewType.Filter:
                typeNode   = rootNode.SelectSingleNode("//Filter");
                removeNode = typeNode.SelectSingleNode(String.Format("FilterItem[@MetaColumnId='{0}']", metaColumnId));
                typeNode.RemoveChild(removeNode);

                break;

            default:
                break;
            }

            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();

            HttpCookie cookie = new HttpCookie("PopUpMessage");

            cookie.Value = "Column removed successfully";
            Response.Cookies.Add(cookie);

            return(Redirect("/Reports/ReportAttributeItem?metaReportId=" + metaReportId.ToString() + "&viewType=" + viewType.ToString()));
        }
        public ActionResult ReportAttributeItem(long metaReportId, Models.ViewType viewType)
        {
            ViewBag.MenuItem     = CurrentMenuItem;
            ViewBag.PopUpMessage = PreparePopUpMessage();

            var metaReport = _unitOfWork.Repository <MetaReport>()
                             .Queryable()
                             .SingleOrDefault(r => r.Id == metaReportId);

            var model = new MetaReportAttributeModel()
            {
                MetaReportId     = metaReport.Id,
                ReportDefinition = metaReport.ReportDefinition,
                ReportName       = metaReport.ReportName,
                ViewType         = viewType
            };

            if (metaReport != null)
            {
                ExtractMetaDataForAttribute(metaReport, model);

                IOrderedQueryable <MetaColumn> metaColumns = _unitOfWork.Repository <MetaColumn>().Queryable()
                                                             .Where(mc => mc.Table.Id == model.CoreEntity)
                                                             .OrderBy(mc => mc.ColumnName);
                List <SelectListItem> listMetaColumns = new List <SelectListItem>();

                // Add new item to relevant list
                switch (model.ViewType)
                {
                case Models.ViewType.List:
                    foreach (MetaColumn metaColumn in metaColumns)
                    {
                        // ensure not selected
                        if (!model.ListItems.Any(li => li.MetaColumnId == metaColumn.Id))
                        {
                            listMetaColumns.Add(new SelectListItem()
                            {
                                Text = metaColumn.ColumnName, Value = metaColumn.Id.ToString()
                            });
                        }
                    }
                    if (listMetaColumns.Count == 0)
                    {
                        listMetaColumns.Add(new SelectListItem()
                        {
                            Text = "-- ALL COLUMNS ASSIGNED --", Value = "0"
                        });
                    }

                    break;

                case Models.ViewType.Summary:
                    foreach (MetaColumn metaColumn in metaColumns)
                    {
                        // ensure not selected
                        if (!model.StratifyItems.Any(li => li.MetaColumnId == metaColumn.Id))
                        {
                            listMetaColumns.Add(new SelectListItem()
                            {
                                Text = metaColumn.ColumnName, Value = metaColumn.Id.ToString()
                            });
                        }
                    }
                    if (listMetaColumns.Count == 0)
                    {
                        listMetaColumns.Add(new SelectListItem()
                        {
                            Text = "-- ALL COLUMNS ASSIGNED --", Value = "0"
                        });
                    }

                    break;

                case Models.ViewType.Filter:
                    if (metaColumns.Count() > 0)
                    {
                        listMetaColumns.Add(new SelectListItem()
                        {
                            Text = "-- Please select a column --", Value = "0"
                        });
                        foreach (MetaColumn metaColumn in metaColumns)
                        {
                            // ensure not selected
                            if (!model.FilterItems.Any(li => li.MetaColumnId == metaColumn.Id))
                            {
                                listMetaColumns.Add(new SelectListItem()
                                {
                                    Text = metaColumn.ColumnName, Value = metaColumn.Id.ToString()
                                });
                            }
                        }
                    }
                    if (listMetaColumns.Count == 0)
                    {
                        listMetaColumns.Add(new SelectListItem()
                        {
                            Text = "-- ALL COLUMNS ASSIGNED --", Value = "0"
                        });
                    }

                    break;

                default:
                    break;
                }

                ViewBag.MetaColumns = listMetaColumns;
            }

            ViewBag.Relationships = new[]
            {
                new SelectListItem {
                    Value = "And", Text = "And", Selected = true
                },
                new SelectListItem {
                    Value = "Or", Text = "Or"
                }
            };

            ViewBag.Operators = new[]
            {
                new SelectListItem {
                    Value = "", Text = "-- Please select an operator --", Selected = true
                }
            };

            ViewData.Model = model;

            return(View());
        }