private PagedRecords GetRecords(
            Entity entity,
            NameValueCollection request,
            TableInfo tableInfo,
            Action<IList<BaseFilter>> filtersMutator)
        {
            var filterRecord = create_filter_record(entity, request);
            var filters = _filterFactory.BuildFilters(filterRecord).ToList();
            if (filtersMutator != null)
            {
                filtersMutator(filters);
            }
            var pagedRecords = _entitiesSource.GetRecords(
                entity,
                filters,
                tableInfo.SearchQuery,
                tableInfo.Order,
                tableInfo.OrderDirection,
                false,
                tableInfo.Page,
                tableInfo.PerPage);
            pagedRecords.Filters = filters;

            return pagedRecords;
        }
 public PagedRecords GetRecords(
     Entity entity,
     NameValueCollection request,
     TableInfo tableInfo)
 {
     return GetRecords(entity, request, tableInfo, null);
 }
 public EntitiesChangesModel(
     Entity entity,
     PagedRecords pagedRecords,
     TableInfo tableInfo,
     string url)
     : base(entity, pagedRecords, tableInfo, url)
 {
 }
        public virtual ActionResult Index(string entityName, TableInfo tableInfo)
        {
            var entity = Admin.EntitiesTypes
                .FirstOrDefault(x => x.Name == entityName);
            if (entity == null)
            {
                throw new NoNullAllowedException("entity is null");
            }
            entity.Fill(Request);
            var filters = _filterFactory.BuildFilters(entity).ToList();
            var pagedRecords = _entitiesSource.GetRecords(
                entity,
                filters,
                tableInfo.SearchQuery,
                tableInfo.Order,
                tableInfo.OrderDirection,
                false,
                tableInfo.Page,
                tableInfo.PerPage);
            if (pagedRecords.Records.IsNullOrEmpty() && tableInfo.Page > 1)
            {
                return RedirectToAction(
                    "Index",
                    PrepareRouteValues(
                        entityName,
                        "1",
                        filters,
                        tableInfo));
            }

            var url = Url.Action(
                "Index",
                PrepareRouteValues(
                    entityName,
                    "-page-",
                    filters,
                    tableInfo))
                .Replace("-page-", "{0}");

            var model = new EntitiesIndexModel
            {
                Data = pagedRecords.Records,
                Columns = entity.DisplayProperties
                    .Select(x => new Column(x, tableInfo.Order, tableInfo.OrderDirection)).ToList(),
                Entity = entity,
                Pager =
                    new PagerInfo(url, tableInfo.PerPage, tableInfo.Page, pagedRecords.TotalItems),
                Filters = filters.Where(x => x.DisplayInUI).ToList(),
                TableInfo = tableInfo,
                Configuration = _configuration
            };

            return View(model);
        }
 public EntitiesIndexModel(
     Entity entity,
     PagedRecords pagedRecords,
     TableInfo tableInfo,
     string url)
 {
     Data = pagedRecords.Records;
     Columns = entity.DisplayProperties
         .Select(x => new Column(x, tableInfo.Order, tableInfo.OrderDirection)).ToList();
     Entity = entity;
     Pager =
         new PagerInfo(url, tableInfo.PerPage, tableInfo.Page, pagedRecords.TotalItems);
     Filters = pagedRecords.Filters.Where(x => x.DisplayInUI).ToList();
     TableInfo = tableInfo;
 }
        public IList<ChangeRow> GetLastChanges(int quantity)
        {
            var changeEntity = _admin.ChangeEntity;
            if (changeEntity == null)
            {
                return new List<ChangeRow>();
            }

            var tableInfo = new TableInfo
            {
                Page = 1,
                PerPage = quantity,
                Order = nameof(IEntityChange.ChangedOn),
                OrderDirection = "desc"
            };
            var pagedRecords = GetRecords(changeEntity, null, tableInfo);

            return pagedRecords.Records.Select(x => new ChangeRow(x)).ToList();
        }
 public PagedRecords GetChanges(
     Entity entityChangesFor,
     string key,
     NameValueCollection request,
     TableInfo tableInfo)
 {
     var changeEntity = _admin.ChangeEntity;
     return GetRecords(changeEntity, request, tableInfo, filters =>
     {
         if (key.IsNullOrWhiteSpace() == false)
         {
             filters.Add(new ForeignEntityFilter(changeEntity["EntityKey"], key));
         }
         if (entityChangesFor != null)
         {
             filters.Add(new ChangeEntityFilter(changeEntity["EntityName"], entityChangesFor.Name));
         }
     });
 }
        public virtual ActionResult Changes(string entityName, string key, TableInfo tableInfo)
        {
            var entityChangesFor = _admin.GetEntity(entityName);
            var pagedRecords = _recordsService
                .GetChanges(entityChangesFor, key, Request.Form, tableInfo);
            if (pagedRecords.Records.IsNullOrEmpty() && tableInfo.Page > 1)
            {
                return RedirectToAction(
                    "Changes",
                    PrepareRouteValues(
                        entityName,
                        "1",
                        pagedRecords.Filters,
                        tableInfo));
            }

            var url = Url.Action(
                "Changes",
                PrepareRouteValues(
                    entityName,
                    "-page-",
                    pagedRecords.Filters,
                    tableInfo))
                .Replace("-page-", "{0}");

            var model = new EntitiesChangesModel(
                _admin.ChangeEntity,
                pagedRecords,
                tableInfo,
                url)
            {
                EntityChangesFor = entityChangesFor,
                Key = key,
                Configuration = _configuration,
                ChangeEnabled = _admin.ChangeEntity != null
            };

            return View(model);
        }
        public virtual ActionResult Index(string entityName, TableInfo tableInfo)
        {
            var entity = _admin.GetEntity(entityName);
            if (entity == null)
            {
                throw new NoNullAllowedException("entity is null");
            }
            var pagedRecords = _recordsService.GetRecords(entity, Request.Form, tableInfo);
            if (pagedRecords.Records.IsNullOrEmpty() && tableInfo.Page > 1)
            {
                return RedirectToAction(
                    "Index",
                    PrepareRouteValues(
                        entityName,
                        "1",
                        pagedRecords.Filters,
                        tableInfo));
            }

            var url = Url.Action(
                "Index",
                PrepareRouteValues(
                    entityName,
                    "-page-",
                    pagedRecords.Filters,
                    tableInfo))
                .Replace("-page-", "{0}");

            var model = new EntitiesIndexModel(entity, pagedRecords, tableInfo, url)
            {
                Configuration = _configuration,
                ChangeEnabled = _admin.ChangeEntity != null
            };

            return View(model);
        }
        protected virtual RouteValueDictionary PrepareRouteValues(
            string entityName,
            string page,
            IEnumerable<BaseFilter> filters,
            TableInfo tableInfo)
        {
            var routeValues = new Dictionary<string, object>
            {
                { "entityName", entityName },
                { _configuration.PageRequestName, page },
                { _configuration.PerPageRequestName, tableInfo.PerPage }
            };

            if (!tableInfo.SearchQuery.IsNullOrEmpty())
            {
                routeValues.Add(_configuration.SearchQueryRequestName, tableInfo.SearchQuery);
            }

            if (!tableInfo.Order.IsNullOrEmpty() && !tableInfo.OrderDirection.IsNullOrEmpty())
            {
                routeValues.Add(_configuration.OrderRequestName, tableInfo.Order);
                routeValues.Add(_configuration.OrderDirectionRequestName, tableInfo.OrderDirection);
            }

            foreach (var filter in filters.Where(x => x.DisplayInUI && !x.Value.IsNullOrEmpty()))
            {
                routeValues.Add(filter.Property.Name, filter.Value);
            }

            return new RouteValueDictionary(routeValues);
        }
        public virtual ActionResult Changes(string entityName, TableInfo tableInfo)
        {
            var entityChangesFor = AdminInitialise.EntitiesTypes
                .FirstOrDefault(x => x.Name == entityName);
            if (entityChangesFor == null)
            {
                throw new NoNullAllowedException("entity is null");
            }
            var changeEntity = AdminInitialise.ChangeEntity;
            var filters = PrepareFilters(changeEntity);
            var pagedRecords = _entitiesSource.GetChangesRecords(
                entityChangesFor,
                tableInfo.Page,
                tableInfo.PerPage,
                filters,
                tableInfo.SearchQuery,
                tableInfo.Order,
                tableInfo.OrderDirection);
            if (pagedRecords.Records.IsNullOrEmpty() && tableInfo.Page > 1)
            {
                return RedirectToAction(
                    "Changes",
                    PrepareRouteValues(
                        entityName,
                        "1",
                        filters,
                        tableInfo));
            }

            var url = Url.Action(
                "Changes",
                PrepareRouteValues(
                    entityName,
                    "-page-",
                    filters,
                    tableInfo))
                .Replace("-page-", "{0}");
            var model = new EntitiesChangesModel
            {
                Data = pagedRecords.Records,
                Columns = changeEntity.DisplayProperties
                    .Select(x => new Column(x, tableInfo.Order, tableInfo.OrderDirection)).ToList(),
                Entity = changeEntity,
                EntityChangesFor = entityChangesFor,
                Pager =
                    new PagerInfo(url, tableInfo.PerPage, tableInfo.Page, pagedRecords.TotalItems),
                Filters = filters,
                TableInfo = tableInfo,
                Configuration = _configuration
            };

            return View(model);
        }
        public virtual ActionResult Changes(string entityName, string key, TableInfo tableInfo)
        {
            var entityChangesFor = Admin.EntitiesTypes
                .FirstOrDefault(x => x.Name == entityName);
            if (entityChangesFor == null)
            {
                throw new NoNullAllowedException("entity is null");
            }
            var changeEntity = Admin.ChangeEntity;
            changeEntity.Fill(Request);
            var filters = _filterFactory.BuildFilters(Admin.ChangeEntity).ToList();
            if (key.IsNullOrWhiteSpace() == false)
            {
                filters.Add(new ForeignEntityFilter(changeEntity["EntityKey"], key));
            }
            filters.Add(new ChangeEntityFilter(changeEntity["EntityName"], entityName));
            var pagedRecords = _entitiesSource.GetRecords(
                changeEntity,
                filters,
                tableInfo.SearchQuery,
                tableInfo.Order,
                tableInfo.OrderDirection,
                false,
                tableInfo.Page,
                tableInfo.PerPage);
            if (pagedRecords.Records.IsNullOrEmpty() && tableInfo.Page > 1)
            {
                return RedirectToAction(
                    "Changes",
                    PrepareRouteValues(
                        entityName,
                        "1",
                        filters,
                        tableInfo));
            }

            var url = Url.Action(
                "Changes",
                PrepareRouteValues(
                    entityName,
                    "-page-",
                    filters,
                    tableInfo))
                .Replace("-page-", "{0}");
            var model = new EntitiesChangesModel
            {
                Data = pagedRecords.Records,
                Columns = changeEntity.DisplayProperties
                    .Select(x => new Column(x, tableInfo.Order, tableInfo.OrderDirection)).ToList(),
                Entity = changeEntity,
                EntityChangesFor = entityChangesFor,
                Pager =
                    new PagerInfo(url, tableInfo.PerPage, tableInfo.Page, pagedRecords.TotalItems),
                Filters = filters.Where(x => x.DisplayInUI).ToList(),
                TableInfo = tableInfo,
                Configuration = _configuration,
                Key = key
            };

            return View(model);
        }