示例#1
0
        public virtual ActionResult SiteDetails(int id,
                                                int?page = null, string sort = null, bool?sortAsc = null)
        {
            var site = Repositories.Sites.FindById(id);

            if (site == null)
            {
                return(new NotFoundResult());
            }

            var siteVisits            = site.Visits.OrderByDescending(v => v.Visited);
            var allSiteSpecies        = Repositories.Trees.ListMeasuredSpeciesBySiteId(site.Id);
            var siteSpeciesDataSource = allSiteSpecies.SortAndPageInMemory(
                column =>
            {
                if ("BotanicalName".Equals(column))
                {
                    return(s => s.ScientificName);
                }
                if ("CommonName".Equals(column))
                {
                    return(s => s.CommonName);
                }
                if ("MaxHeight".Equals(column))
                {
                    return(s => s.MaxHeight);
                }
                if ("MaxGirth".Equals(column))
                {
                    return(s => s.MaxGirth);
                }
                if ("MaxCrownSpread".Equals(column))
                {
                    return(s => s.MaxCrownSpread);
                }
                throw new NotImplementedException();
            },
                sort, sortAsc, page, 10);
            var siteSpeciesGridModel = new EntityGridModel <SiteMeasuredSpecies>(siteSpeciesDataSource)
            {
                RowsPerPage = 10
            };

            if (Request.IsAjaxRequest())
            {
                return(PartialView("SiteSpeciesGridPartial2", siteSpeciesGridModel));
            }

            var model = new BrowseSiteModel
            {
                Id               = id,
                Details          = Mapper.Map <Site, BrowseSiteDetailsModel>(site),
                Location         = Mapper.Map <Site, BrowseSiteLocationModel>(site),
                PhotoSummaries   = Mapper.Map <IEnumerable <SiteVisit>, IList <BrowsePhotoSumaryModel> >(siteVisits.Where(v => v.Photos.Any())),
                Visits           = Mapper.Map <IEnumerable <SiteVisit>, IList <BrowseSiteVisitModel> >(siteVisits),
                SiteSpeciesModel = siteSpeciesGridModel
            };

            return(View(model));
        }
示例#2
0
        public virtual ActionResult Species(int?page = null, string sort = null, bool?sortAsc = null,
                                            string botanicalNameFilter = "", string commonNameFilter = "")
        {
            SpeciesBrowser browser = new SpeciesBrowser
            {
                PageIndex           = page ?? 0,
                PageSize            = 40,
                BotanicalNameFilter = botanicalNameFilter,
                CommonNameFilter    = commonNameFilter,
                SortAscending       = !sortAsc.HasValue || sortAsc.Value,
                SortProperty        = "BotanicalName".Equals(sort) ? SpeciesBrowser.Property.BotanicalName
                    : "CommonName".Equals(sort) ? SpeciesBrowser.Property.CommonName
                    : "MaxHeight".Equals(sort) ? SpeciesBrowser.Property.MaxHeight
                    : "MaxGirth".Equals(sort) ? SpeciesBrowser.Property.MaxGirth
                    : "MaxCrownSpread".Equals(sort) ? SpeciesBrowser.Property.MaxCrownSpread
                    : SpeciesBrowser.Property.BotanicalName
            };
            var model     = Repositories.Trees.ListAllMeasuredSpecies <GlobalMeasuredSpecies>(browser);
            var gridModel = new EntityGridModel <GlobalMeasuredSpecies>(model)
            {
                RowsPerPage = 40
            };

            if (Request.IsAjaxRequest())
            {
                return(PartialView("GlobalSpeciesGridPartial", gridModel));
            }

            return(View(gridModel));
        }
示例#3
0
        public virtual ActionResult Locations(int?page           = null, string sort = null, bool?sortAsc = null,
                                              string stateFilter = "", string countyFilter = "", string siteFilter = "")
        {
            SiteBrowser browser = new SiteBrowser
            {
                PageIndex     = page ?? 0,
                PageSize      = 40,
                StateFilter   = stateFilter,
                CountyFilter  = countyFilter,
                SiteFilter    = siteFilter,
                SortAscending = !sortAsc.HasValue || sortAsc.Value,
                SortProperty  = "State".Equals(sort) ? SiteBrowser.Property.State
                    : "Site".Equals(sort) ? SiteBrowser.Property.Site
                    : "County".Equals(sort) ? SiteBrowser.Property.County
                    : "RHI5".Equals(sort) ? SiteBrowser.Property.RHI5
                    : "RHI10".Equals(sort) ? SiteBrowser.Property.RHI10
                    : "RGI5".Equals(sort) ? SiteBrowser.Property.RGI5
                    : "RGI10".Equals(sort) ? SiteBrowser.Property.RGI10
                    : "LastMeasurement".Equals(sort) ? SiteBrowser.Property.LastMeasurement
                    : (SiteBrowser.Property?)null
            };

            var model     = Repositories.Sites.ListAllSites(browser);
            var gridModel = new EntityGridModel <Site>(model)
            {
                RowsPerPage = 40
            };

            if (Request.IsAjaxRequest())
            {
                return(PartialView("LocationsGridPartial", gridModel));
            }

            return(View(gridModel));
        }
示例#4
0
        public IActionResult GridView(DataListModel args)
        {
            EntityGridModel model = new EntityGridModel();

            args.CopyTo(model);
            return(GridView(model));
        }
示例#5
0
        public IActionResult Export([FromBody] EntityGridModel model)
        {
            QueryView.Domain.QueryView queryView = null;
            if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindById(model.QueryViewId.Value);
            }
            else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value);
            }
            else if (model.EntityName.IsNotEmpty())
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName);
            }
            else
            {
                return(NotFound());
            }
            if (queryView == null)
            {
                return(NotFound());
            }
            OrderExpression orderExp = null;

            if (model.IsSortBySeted)
            {
                orderExp = new OrderExpression(model.SortBy, model.SortDirection == 0 ? OrderType.Ascending : OrderType.Descending);
            }
            string path = _dataExporter.ToExcelFile(queryView, model.Filter, orderExp, queryView.Name, model.ExportType == 1, includeIndex: model.IncludeIndex, title: model.ExportTitle);

            if (path.IsEmpty())
            {
                return(JError(T["list_nodata"]));
            }
            return(JOk(path));
        }
示例#6
0
        public IActionResult RenderGridView([FromBody] EntityGridModel model)
        {
            QueryView.Domain.QueryView queryView = null;
            if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindById(model.QueryViewId.Value);
            }
            else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value);
            }
            else if (model.EntityName.IsNotEmpty())
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName);
            }
            else
            {
                return(NotFound());
            }
            if (queryView == null)
            {
                return(NotFound());
            }
            if (!queryView.IsDefault && queryView.AuthorizationEnabled)
            {
                if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray()))
                {
                    return(Unauthorized());
                }
            }
            model.QueryView = queryView;
            model.EntityId  = queryView.EntityId;

            FetchDescriptor fetch = new FetchDescriptor
            {
                Page        = model.Page,
                PageSize    = model.PageSize,
                FetchConfig = queryView.FetchConfig,
                GetAll      = !model.PagingEnabled
            };

            if (model.IsSortBySeted)
            {
                QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0);
                fetch.Sort = sort;
            }
            //查询关键字
            if (model.Q.IsNotEmpty())
            {
                fetch.Keyword = model.Q;
                fetch.Field   = model.QField;
            }
            var canFetch = true;

            //filter by relationship
            if (model.RelationShipName.IsNotEmpty())
            {
                var relationship = _relationShipFinder.FindByName(model.RelationShipName);
                if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty))
                {
                    if (model.Filter == null)
                    {
                        model.Filter = new FilterExpression();
                    }
                    var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId);
                    model.Filter.AddCondition(condition);
                }
                model.RelationShipMeta = relationship;
            }
            if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty)))
            {
                //如果被引用ID为空,则不查询数据
                canFetch = false;
            }
            fetch.Filter = model.Filter;
            if (canFetch)
            {
                fetch.User = CurrentUser;
                var datas = _fetchService.Execute(fetch);
                if (model.OnlyData)
                {
                    //var serializer = new DataContractJsonSerializer(typeof(User), new DataContractJsonSerializerSettings()
                    //{
                    //    UseSimpleDictionaryFormat = true//去掉Key和Value
                    //});
                    //return new JsonResult() { Data = datas.Items.SerializeToJson(), JsonRequestBehavior = JsonRequestBehavior.AllowGet };
                    return(Content(datas.SerializeToJson()));
                }
                model.Grid             = _gridService.Build(queryView, _fetchService.QueryResolver.EntityList, _fetchService.QueryResolver.AttributeList);
                model.EntityList       = _fetchService.QueryResolver.EntityList;
                model.AttributeList    = _fetchService.QueryResolver.AttributeList;
                model.RelationShipList = _fetchService.QueryResolver.RelationShipList;
                model.Items            = datas.Items;
                model.TotalItems       = datas.TotalItems;
            }
            else
            {
                _fetchService.GetMetaDatas(fetch);
                model.Grid             = _gridService.Build(queryView, _fetchService.QueryResolver.EntityList, _fetchService.QueryResolver.AttributeList);
                model.EntityList       = _fetchService.QueryResolver.EntityList;
                model.AttributeList    = _fetchService.QueryResolver.AttributeList;
                model.RelationShipList = _fetchService.QueryResolver.RelationShipList;
                model.Items            = new List <dynamic>();
                model.TotalItems       = 0;
            }
            var buttons = _ribbonbuttonFinder.Find(model.EntityId.Value, RibbonButtonArea.SubGrid);

            if (buttons.NotEmpty())
            {
                buttons             = buttons.OrderBy(x => x.DisplayOrder).ToList();
                model.RibbonButtons = buttons;
            }
            if (model.IsSortBySeted == false)
            {
                if (_fetchService.QueryExpression.Orders.NotEmpty())
                {
                    model.SortBy        = _fetchService.QueryExpression.Orders[0].AttributeName;
                    model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType;
                }
            }
            return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model));
        }
示例#7
0
        public virtual ActionResult StateDetails(int id,
                                                 int?stateSpeciesPage       = null, string stateSpeciesSort = null, bool?stateSpeciesSortAsc = null,
                                                 int?sitesPage              = null, string sitesSort = null, bool?sitesSortAsc = null,
                                                 string parameterNamePrefix = null)
        {
            var state = Repositories.Locations.FindStateById(id);

            if (state == null)
            {
                return(new NotFoundResult());
            }

            var model                  = Mapper.Map <State, BrowseStateModel>(state);
            var allStateSpecies        = Repositories.Trees.ListMeasuredSpeciesByStateId(state.Id);
            var stateSpeciesDataSource = allStateSpecies.SortAndPageInMemory(
                column =>
            {
                if ("BotanicalName".Equals(column))
                {
                    return(s => s.ScientificName);
                }
                if ("CommonName".Equals(column))
                {
                    return(s => s.CommonName);
                }
                if ("MaxHeight".Equals(column))
                {
                    return(s => s.MaxHeight);
                }
                if ("MaxGirth".Equals(column))
                {
                    return(s => s.MaxGirth);
                }
                if ("MaxCrownSpread".Equals(column))
                {
                    return(s => s.MaxCrownSpread);
                }
                throw new NotImplementedException();
            },
                stateSpeciesSort, stateSpeciesSortAsc, stateSpeciesPage, 10);
            var stateSpeciesGridModel = new EntityGridModel <StateMeasuredSpecies>(stateSpeciesDataSource)
            {
                ParameterNamePrefix = "stateSpecies", RowsPerPage = 10
            };

            if (Request.IsAjaxRequest() && "stateSpecies".Equals(parameterNamePrefix))
            {
                return(PartialView("StateSpeciesGridPartial", stateSpeciesGridModel));
            }

            model.StateSpeciesModel = stateSpeciesGridModel;
            var allSites        = Repositories.Sites.FindSitesByStateId(state.Id);
            var sitesDataSource = allSites.SortAndPageInMemory(
                column =>
            {
                if ("Site".Equals(column))
                {
                    return(s => s.Name);
                }
                if ("RHI5".Equals(column))
                {
                    return(s => s.ComputedRHI5);
                }
                if ("RHI10".Equals(column))
                {
                    return(s => s.ComputedRHI10);
                }
                if ("RGI5".Equals(column))
                {
                    return(s => s.ComputedRGI5);
                }
                if ("RGI10".Equals(column))
                {
                    return(s => s.ComputedRGI10);
                }
                throw new NotImplementedException();
            },
                sitesSort, sitesSortAsc, sitesPage, 10);
            var sitesGridModel = new EntityGridModel <Site>(sitesDataSource)
            {
                ParameterNamePrefix = "sites", RowsPerPage = 10
            };

            if (Request.IsAjaxRequest() && "sites".Equals(parameterNamePrefix))
            {
                return(PartialView("SitesGridPartial", sitesGridModel));
            }

            model.SitesModel = sitesGridModel;
            return(View(model));
        }
示例#8
0
        public virtual ActionResult SpeciesDetails(string botanicalName, string commonName, int?siteId = null, int?stateId = null,
                                                   int?stateSpeciesPage       = null, string stateSpeciesSort = null, bool?stateSpeciesSortAsc = null,
                                                   int?treesPage              = null, string treesSort       = null, bool?treesSortAsc = null,
                                                   int?siteSpeciesPage        = null, string siteSpeciesSort = null, bool?siteSpeciesSortAsc = null,
                                                   string parameterNamePrefix = null)
        {
            GlobalMeasuredSpecies globalSpecies = Repositories.Trees.FindMeasuredSpeciesByName(botanicalName, commonName);

            if (globalSpecies == null)
            {
                return(new NotFoundResult());
            }

            var model = new BrowseSpeciesModel {
                GlobalDetails = Mapper.Map <GlobalMeasuredSpecies, BrowseSpeciesDetailsModel>(globalSpecies)
            };
            var allStateSpecies        = Repositories.Trees.ListMeasuredSpeciesForStatesByName(botanicalName, commonName);
            var stateSpeciesDataSource = allStateSpecies.SortAndPageInMemory(
                column =>
            {
                if ("State".Equals(column))
                {
                    return(s => s.State.Name);
                }
                if ("MaxHeight".Equals(column))
                {
                    return(s => s.MaxHeight);
                }
                if ("MaxGirth".Equals(column))
                {
                    return(s => s.MaxGirth);
                }
                if ("MaxCrownSpread".Equals(column))
                {
                    return(s => s.MaxCrownSpread);
                }
                throw new NotImplementedException();
            },
                stateSpeciesSort, stateSpeciesSortAsc, stateSpeciesPage, 10);
            var stateSpeciesGridModel = new EntityGridModel <StateMeasuredSpecies>(stateSpeciesDataSource)
            {
                ParameterNamePrefix = "stateSpecies", RowsPerPage = 10
            };

            if (Request.IsAjaxRequest() && "stateSpecies".Equals(parameterNamePrefix))
            {
                return(PartialView("SpeciesByStateGridPartial", stateSpeciesGridModel));
            }

            model.StateSpeciesModel = stateSpeciesGridModel;
            if (siteId.HasValue)
            {
                SiteMeasuredSpecies siteSpecies = Repositories.Trees.FindMeasuredSpeciesByNameAndSiteId(botanicalName, commonName, siteId.Value);
                if (siteSpecies == null)
                {
                    return(new NotFoundResult());
                }

                stateId           = siteSpecies.Site.State.Id;
                model.SiteDetails = Mapper.Map <SiteMeasuredSpecies, BrowseSpeciesSiteDetailsModel>(siteSpecies);
                var allTrees        = Repositories.Trees.ListByNameAndSiteId(botanicalName, commonName, siteId.Value);
                var treesDataSource = allTrees.SortAndPageInMemory(
                    column =>
                {
                    if ("Height".Equals(column))
                    {
                        return(t => t.Height);
                    }
                    if ("Girth".Equals(column))
                    {
                        return(t => t.Girth);
                    }
                    if ("CrownSpread".Equals(column))
                    {
                        return(t => t.CrownSpread);
                    }
                    throw new NotImplementedException();
                },
                    treesSort, treesSortAsc, treesPage, 10);
                var treesGridModel = new EntityGridModel <Tree>(treesDataSource)
                {
                    ParameterNamePrefix = "trees", RowsPerPage = 10
                };
                if (Request.IsAjaxRequest() && "trees".Equals(parameterNamePrefix))
                {
                    return(PartialView("TreesGridPartial", treesGridModel));
                }

                model.TreesModel = treesGridModel;
            }

            if (stateId.HasValue)
            {
                StateMeasuredSpecies stateSpecies = Repositories.Trees.FindMeasuredSpeciesByNameAndStateId(botanicalName, commonName, stateId.Value);
                if (stateSpecies == null)
                {
                    return(new NotFoundResult());
                }

                model.StateDetails = Mapper.Map <StateMeasuredSpecies, BrowseSpeciesStateDetailsModel>(stateSpecies);
                var allSiteSpecies        = Repositories.Trees.ListMeasuredSpeciesForSitesByNameAndStateId(botanicalName, commonName, stateId.Value);
                var siteSpeciesDataSource = allSiteSpecies.SortAndPageInMemory(
                    column =>
                {
                    if ("Site".Equals(column))
                    {
                        return(s => s.Site.Name);
                    }
                    if ("MaxHeight".Equals(column))
                    {
                        return(s => s.MaxHeight);
                    }
                    if ("MaxGirth".Equals(column))
                    {
                        return(s => s.MaxGirth);
                    }
                    if ("MaxCrownSpread".Equals(column))
                    {
                        return(s => s.MaxCrownSpread);
                    }
                    throw new NotImplementedException();
                },
                    siteSpeciesSort, siteSpeciesSortAsc, siteSpeciesPage, 10);
                var siteSpeciesGridModel = new EntityGridModel <SiteMeasuredSpecies>(siteSpeciesDataSource)
                {
                    ParameterNamePrefix = "siteSpecies", RowsPerPage = 10
                };
                if (Request.IsAjaxRequest() && "siteSpecies".Equals(parameterNamePrefix))
                {
                    return(PartialView("SiteSpeciesGridPartial", siteSpeciesGridModel));
                }

                model.SiteSpeciesModel = siteSpeciesGridModel;
            }

            return(View(model));
        }
        public IActionResult Post([FromBody] EntityGridModel model)
        {
            QueryView.Domain.QueryView queryView = null;
            if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindById(model.QueryViewId.Value);
            }
            else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value);
            }
            else if (model.EntityName.IsNotEmpty())
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName);
            }
            else
            {
                return(NotFound());
            }
            if (queryView == null)
            {
                return(NotFound());
            }
            if (!queryView.IsDefault && queryView.AuthorizationEnabled)
            {
                if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray()))
                {
                    return(Unauthorized());
                }
            }
            model.QueryView = queryView;
            model.EntityId  = queryView.EntityId;

            FetchDescriptor fetch = new FetchDescriptor
            {
                Page        = model.Page,
                PageSize    = model.PageSize,
                FetchConfig = queryView.FetchConfig,
                GetAll      = !model.PagingEnabled
            };

            if (model.IsSortBySeted)
            {
                QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0);
                fetch.Sort = sort;
            }
            //查询关键字
            if (model.Q.IsNotEmpty())
            {
                fetch.Keyword = model.Q;
                fetch.Field   = model.QField;
            }
            var canFetch = true;

            //filter by relationship
            if (model.RelationShipName.IsNotEmpty())
            {
                var relationship = _relationShipFinder.FindByName(model.RelationShipName);
                if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty))
                {
                    if (model.Filter == null)
                    {
                        model.Filter = new FilterExpression();
                    }
                    var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId);
                    model.Filter.AddCondition(condition);
                }
                model.RelationShipMeta = relationship;
            }
            if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty)))
            {
                //如果被引用ID为空,则不查询数据
                canFetch = false;
            }
            fetch.Filter = model.Filter;
            if (canFetch)
            {
                fetch.User = CurrentUser;
                var    fetchDatas     = _fetchService.Execute(fetch);
                object aggregateDatas = null;
                if (queryView.AggregateConfig.IsNotEmpty())
                {
                    var aggFields = new List <AggregateExpressionField>().DeserializeFromJson(queryView.AggregateConfig);
                    if (aggFields.NotEmpty())
                    {
                        var queryExp = new QueryExpression().DeserializeFromJson(queryView.FetchConfig);
                        if (model.Filter != null &&
                            (model.Filter.Conditions.NotEmpty() || (model.Filter.Filters.NotEmpty() && model.Filter.Filters.First().Conditions.NotEmpty())))
                        {
                            queryExp.Criteria.AddFilter(model.Filter);
                        }
                        var aggExp = new AggregateExpression
                        {
                            ColumnSet       = queryExp.ColumnSet,
                            Criteria        = queryExp.Criteria,
                            EntityName      = queryExp.EntityName,
                            LinkEntities    = queryExp.LinkEntities,
                            AggregateFields = aggFields
                        };
                        var aggDatas   = _aggregateService.Execute(aggExp);
                        var attributes = _attributeFinder.FindByName(queryView.EntityId, aggFields.Select(x => x.AttributeName).ToArray());
                        foreach (dynamic item in aggDatas)
                        {
                            var line      = item as IDictionary <string, object>;
                            var attribute = attributes.Find(x => x.Name.IsCaseInsensitiveEqual(line.Keys.First()));
                            item.metadata      = new { attribute.Name, attribute.LocalizedName, attribute.AttributeTypeName, attribute.EntityId, attribute.EntityName, attribute.EntityLocalizedName };
                            item.aggregatetype = aggFields.Find(x => x.AttributeName.IsCaseInsensitiveEqual(attribute.Name)).AggregateType;
                        }
                        aggregateDatas = new { View = new { queryView.QueryViewId, queryView.Name }, Data = aggDatas };
                    }
                }
                return(Content(new { FetchData = fetchDatas, AggregateData = aggregateDatas }.SerializeToJson()));
            }
            if (!model.IsSortBySeted)
            {
                if (_fetchService.QueryExpression.Orders.NotEmpty())
                {
                    model.SortBy        = _fetchService.QueryExpression.Orders[0].AttributeName;
                    model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType;
                }
            }
            return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model));
        }
示例#10
0
        public IActionResult GridView([FromBody] EntityGridModel model)
        {
            QueryView.Domain.QueryView queryView = null;
            if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindById(model.QueryViewId.Value);
            }
            else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value);
            }
            else if (model.EntityName.IsNotEmpty())
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName);
            }
            else
            {
                return(NotFound());
            }
            if (queryView == null)

            {
                return(NotFound());
            }
            if (!queryView.IsDefault && queryView.AuthorizationEnabled)
            {
                if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray()))
                {
                    return(Unauthorized());
                }
            }
            //EntityGridModel model = new EntityGridModel();
            model.QueryView    = queryView;
            model.EntityId     = queryView.EntityId;
            model.QueryViewId  = queryView.QueryViewId;
            model.TargetFormId = queryView.TargetFormId;
            if (model.IsEnabledViewSelector)
            {
                model.QueryViews = _queryViewFinder.QueryAuthorized(n => n.Where(f => f.EntityId == model.EntityId && f.StateCode == RecordState.Enabled)
                                                                    .Sort(s => s.SortAscending(f => f.Name)));
            }
            if (!model.PageSizeBySeted && CurrentUser.UserSettings.PagingLimit > 0)
            {
                model.PageSize = CurrentUser.UserSettings.PagingLimit;
            }
            FetchDescriptor fetch = new FetchDescriptor
            {
                User        = CurrentUser,
                Page        = model.Page,
                PageSize    = model.PageSize,
                FetchConfig = queryView.FetchConfig
            };

            if (model.IsSortBySeted)
            {
                QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0);
                fetch.Sort = sort;
            }
            fetch.Filter = model.Filter;

            if (model.Q.IsNotEmpty())
            {
                fetch.Keyword = model.Q;
                fetch.Field   = model.QField;
            }
            //buttons
            if (model.IsShowButtons)
            {
                FilterContainer <RibbonButton.Domain.RibbonButton> buttonFilter = FilterContainerBuilder.Build <RibbonButton.Domain.RibbonButton>()
                                                                                  .And(w => w.StateCode == RecordState.Enabled && w.EntityId == model.EntityId.Value &&
                                                                                       (w.ShowArea == RibbonButtonArea.ListHead || w.ShowArea == RibbonButtonArea.ListRow));
                if (model.QueryView.IsCustomButton && model.QueryView.CustomButtons.IsNotEmpty())
                {
                    List <Guid> buttonid = new List <Guid>();
                    buttonid = buttonid.DeserializeFromJson(model.QueryView.CustomButtons);
                    buttonFilter.And(w => w.RibbonButtonId.In(buttonid));
                }
                var buttons = _ribbonbuttonFinder.Query(n => n
                                                        .Where(buttonFilter)
                                                        .Sort(s => s.SortAscending(f => f.DisplayOrder)));
                model.RibbonButtons = buttons;
            }

            //var datas = _fetchService.Execute(fetch);
            _fetchDataService.GetMetaDatas(fetch);
            model.Grid             = _gridService.Build(queryView, _fetchDataService.QueryResolver.EntityList, _fetchDataService.QueryResolver.AttributeList);
            model.EntityList       = _fetchDataService.QueryResolver.EntityList;
            model.AttributeList    = _fetchDataService.QueryResolver.AttributeList;
            model.RelationShipList = _fetchDataService.QueryResolver.RelationShipList;
            //model.Items = datas.Items;
            //model.TotalItems = datas.TotalItems;
            //model.TotalPages = datas.TotalPages;
            //aggregation
            if (queryView.AggregateConfig.IsNotEmpty())
            {
                var aggFields = new List <AggregateExpressionField>().DeserializeFromJson(queryView.AggregateConfig);
                if (aggFields.NotEmpty())
                {
                    var aggExp = new AggregateExpression
                    {
                        ColumnSet       = _fetchDataService.QueryExpression.ColumnSet,
                        Criteria        = _fetchDataService.QueryExpression.Criteria,
                        EntityName      = _fetchDataService.QueryExpression.EntityName,
                        LinkEntities    = _fetchDataService.QueryExpression.LinkEntities,
                        AggregateFields = aggFields
                    };
                    var aggDatas = _aggregateService.Execute(aggExp);
                    model.AggregationData = aggDatas.NotEmpty() ? aggDatas.First() : null;
                    model.AggregateFields = aggFields;
                }
            }
            if (model.IsSortBySeted == false)
            {
                if (_fetchDataService.QueryExpression.Orders.NotEmpty())
                {
                    model.SortBy        = _fetchDataService.QueryExpression.Orders[0].AttributeName;
                    model.SortDirection = (int)_fetchDataService.QueryExpression.Orders[0].OrderType;
                }
            }
            //字段权限
            model.NonePermissionFields = _fetchDataService.NonePermissionFields;

            return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model));
        }
示例#11
0
        public IActionResult Post([FromBody] EntityGridModel model)
        {
            QueryView.Domain.QueryView queryView = null;
            if (model.QueryViewId.HasValue && !model.QueryViewId.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindById(model.QueryViewId.Value);
            }
            else if (model.EntityId.HasValue && !model.EntityId.Value.Equals(Guid.Empty))
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityId.Value);
            }
            else if (model.EntityName.IsNotEmpty())
            {
                queryView = _queryViewFinder.FindEntityDefaultView(model.EntityName);
            }
            else
            {
                return(NotFound());
            }
            if (queryView == null)
            {
                return(NotFound());
            }
            if (!queryView.IsDefault && queryView.AuthorizationEnabled)
            {
                if (!_roleObjectAccessService.Exists(queryView.QueryViewId, QueryViewDefaults.ModuleName, CurrentUser.Roles.Select(n => n.RoleId).ToArray()))
                {
                    return(Unauthorized());
                }
            }
            model.QueryView = queryView;
            model.EntityId  = queryView.EntityId;

            FetchDescriptor fetch = new FetchDescriptor
            {
                Page        = model.Page,
                PageSize    = model.PageSize,
                FetchConfig = queryView.FetchConfig,
                GetAll      = !model.PagingEnabled
            };

            if (model.IsSortBySeted)
            {
                QueryColumnSortInfo sort = new QueryColumnSortInfo(model.SortBy, model.SortDirection == 0);
                fetch.Sort = sort;
            }
            //查询关键字
            if (model.Q.IsNotEmpty())
            {
                fetch.Keyword = model.Q;
                fetch.Field   = model.QField;
            }
            var canFetch = true;

            //filter by relationship
            if (model.RelationShipName.IsNotEmpty())
            {
                var relationship = _relationShipFinder.FindByName(model.RelationShipName);
                if (relationship != null && model.ReferencedRecordId.HasValue && !model.ReferencedRecordId.Value.Equals(Guid.Empty))
                {
                    if (model.Filter == null)
                    {
                        model.Filter = new FilterExpression();
                    }
                    var condition = new ConditionExpression(relationship.ReferencingAttributeName, ConditionOperator.Equal, model.ReferencedRecordId);
                    model.Filter.AddCondition(condition);
                }
                model.RelationShipMeta = relationship;
            }
            if (model.RelationShipName.IsNotEmpty() && (!model.ReferencedRecordId.HasValue || model.ReferencedRecordId.Value.Equals(Guid.Empty)))
            {
                //如果被引用ID为空,则不查询数据
                canFetch = false;
            }
            fetch.Filter = model.Filter;
            if (canFetch)
            {
                fetch.User = CurrentUser;
                var datas = _fetchService.Execute(fetch);
                return(Content(datas.SerializeToJson()));
            }
            if (!model.IsSortBySeted)
            {
                if (_fetchService.QueryExpression.Orders.NotEmpty())
                {
                    model.SortBy        = _fetchService.QueryExpression.Orders[0].AttributeName;
                    model.SortDirection = (int)_fetchService.QueryExpression.Orders[0].OrderType;
                }
            }
            return(View($"~/Views/Entity/{WebContext.ActionName}.cshtml", model));
        }