Пример #1
0
        private QueryBuilder BuildSort(JObject query, string cultureCode)
        {
            var sort      = Select.Sort;
            var sortArray = query["Sort"] as JArray;

            if (sortArray != null && sortArray.Any())
            {
                foreach (JObject item in sortArray)
                {
                    string fieldName  = item["Field"].ToString();
                    string fieldOrder = item["Order"].ToString();
                    sort.Add(FieldConfigUtils.CreateSortRule(_indexConfig, cultureCode, fieldName, fieldOrder == "desc"));
                }
            }
            else
            {
                sort.Add(new SortRule()
                {
                    Field      = "createdondate",
                    FieldType  = FieldTypeEnum.DATETIME,
                    Descending = true
                });
            }
            return(this);
        }
Пример #2
0
        public QueryBuilder BuildSort(string Sorts, string cultureCode)
        {
            var Sort = Select.Sort;

            if (!string.IsNullOrEmpty(Sorts))
            {
                var sortArray = Sorts.Split(',');

                foreach (var item in sortArray)
                {
                    bool   reverse      = false;
                    var    sortElements = item.Split(' ');
                    string fieldName    = sortElements[0];
                    if (sortElements.Length > 1 && sortElements[1].ToLower() == "desc")
                    {
                        reverse = true;
                    }
                    Sort.Add(FieldConfigUtils.CreateSortRule(IndexConfig, cultureCode,
                                                             fieldName,
                                                             reverse
                                                             ));
                }
            }
            return(this);
        }
Пример #3
0
        public static Select MergeQuery(FieldConfig config, Select select, RestSelect restSelect, string cultureCode)
        {
            var query = select.Query;

            select.PageSize  = restSelect.PageSize;
            select.PageIndex = restSelect.PageIndex;
            if (restSelect.Query != null && restSelect.Query.FilterRules != null)
            {
                foreach (var rule in restSelect.Query.FilterRules)
                {
                    if (rule.FieldOperator == OperatorEnum.IN)
                    {
                        if (rule.MultiValue != null)
                        {
                            query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                            rule.Field,
                                                                            rule.FieldOperator,
                                                                            rule.MultiValue.Select(v => new StringRuleValue(v.ToString()))
                                                                            ));
                        }
                    }
                    else if (rule.FieldOperator == OperatorEnum.BETWEEN)
                    {
                        // not yet implemented
                    }
                    else
                    {
                        if (rule.Value != null)
                        {
                            query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                            rule.Field,
                                                                            rule.FieldOperator,
                                                                            new StringRuleValue(rule.Value.ToString())
                                                                            ));
                        }
                    }
                }
            }

            if (restSelect.Sort != null && restSelect.Sort.Any())
            {
                select.Sort.Clear();
                foreach (var sort in restSelect.Sort)
                {
                    select.Sort.Add(FieldConfigUtils.CreateSortRule(config, cultureCode,
                                                                    sort.Field,
                                                                    sort.Descending
                                                                    ));
                }
            }
            return(select);
        }
Пример #4
0
 private void BuildQueryStringFilter(NameValueCollection queryString, FilterGroup workFlowFilter)
 {
     if (queryString != null)
     {
         foreach (string key in queryString)
         {
             if (IndexConfig != null && IndexConfig.Fields != null && IndexConfig.Fields.Any(f => f.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase)))
             {
                 var    indexConfig = IndexConfig.Fields.Single(f => f.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase));
                 string val         = queryString[key];
                 workFlowFilter.AddRule(new FilterRule()
                 {
                     Field         = indexConfig.Key,
                     Value         = new StringRuleValue(val),
                     FieldOperator = OperatorEnum.EQUAL,
                     FieldType     = FieldConfigUtils.GetFieldType(indexConfig.Value != null ? indexConfig.Value.IndexType : string.Empty)
                 });
             }
         }
     }
 }
Пример #5
0
        public QueryBuilder BuildSort(JObject query, string cultureCode)
        {
            var Sort      = Select.Sort;
            var sortArray = query["Sort"] as JArray;

            if (sortArray != null && sortArray.Any())
            {
                foreach (JObject item in sortArray)
                {
                    string fieldName  = item["Field"].ToString();
                    string fieldOrder = item["Order"].ToString();
                    Sort.Add(FieldConfigUtils.CreateSortRule(IndexConfig, cultureCode, fieldName, fieldOrder == "desc"));
                }
            }
            else
            {
                string fieldName  = "createdondate";
                string fieldOrder = "desc";
                Sort.Add(FieldConfigUtils.CreateSortRule(IndexConfig, cultureCode, fieldName, fieldOrder == "desc"));
            }
            return(this);
        }
Пример #6
0
        private QueryBuilder BuildFilter(JObject query, bool addWorkflowFilter, int userId, string cultureCode, IList <UserRoleInfo> roles, NameValueCollection queryString = null)
        {
            var  workFlowFilter      = Select.Filter;
            var  vExcludeCurrentItem = query["ExcludeCurrentItem"] as JValue;
            bool excludeCurrentItem  = false;

            if (vExcludeCurrentItem != null && vExcludeCurrentItem.Type == JTokenType.Boolean)
            {
                excludeCurrentItem = (bool)vExcludeCurrentItem.Value;
            }
            if (excludeCurrentItem && queryString?["id"] != null)
            {
                workFlowFilter.AddRule(new FilterRule()
                {
                    Field         = "id",
                    Value         = new StringRuleValue(queryString["id"]),
                    FieldOperator = OperatorEnum.NOT_EQUAL
                });
            }
            var  vCurrentUserItems = query["CurrentUserItems"] as JValue;
            bool currentUserItems  = false;

            if (vCurrentUserItems != null && vCurrentUserItems.Type == JTokenType.Boolean)
            {
                currentUserItems = (bool)vCurrentUserItems.Value;
            }
            if (currentUserItems)
            {
                workFlowFilter.AddRule(new FilterRule()
                {
                    Field         = "userid",
                    Value         = new StringRuleValue(userId.ToString()),
                    FieldOperator = OperatorEnum.EQUAL
                });
            }
            var filter = query["Filter"] as JObject;

            if (filter != null)
            {
                foreach (var item in filter.Properties())
                {
                    var fieldConfig = FieldConfigUtils.GetField(IndexConfig, item.Name);
                    if (item.Value is JValue) // text, int
                    {
                        var val = item.Value.ToString();
                        if (fieldConfig != null && fieldConfig.IndexType == "boolean")
                        {
                            bool bval;
                            if (bool.TryParse(val, out bval))
                            {
                                workFlowFilter.AddRule(new FilterRule()
                                {
                                    Field     = item.Name,
                                    FieldType = FieldTypeEnum.BOOLEAN,
                                    Value     = new BooleanRuleValue(bval)
                                });
                            }
                        }
                        else if (fieldConfig != null && fieldConfig.IndexType == "float")
                        {
                            float fval;
                            if (float.TryParse(val, out fval))
                            {
                                workFlowFilter.AddRule(new FilterRule()
                                {
                                    Field     = item.Name,
                                    FieldType = FieldTypeEnum.FLOAT,
                                    Value     = new FloatRuleValue(fval)
                                });
                            }
                        }
                        else if (!string.IsNullOrEmpty(val))
                        {
                            workFlowFilter.AddRule(FieldConfigUtils.CreateFilterRule(IndexConfig, cultureCode,
                                                                                     item.Name,
                                                                                     OperatorEnum.START_WITH,
                                                                                     new StringRuleValue(val)
                                                                                     ));
                        }
                    }
                    else if (item.Value is JArray) // enum
                    {
                        var arr = (JArray)item.Value;
                        if (arr.Children().Any())
                        {
                            var arrGroup = new FilterGroup();

                            foreach (var arrItem in arr.Children())
                            {
                                if (arrItem is JValue)
                                {
                                    var val = (JValue)arrItem;
                                    arrGroup.AddRule(FieldConfigUtils.CreateFilterRule(IndexConfig, cultureCode,
                                                                                       item.Name,
                                                                                       OperatorEnum.EQUAL,
                                                                                       new StringRuleValue(val.ToString())
                                                                                       ));
                                }
                            }
                            workFlowFilter.FilterGroups.Add(arrGroup);
                        }
                        else if (queryString?[item.Name] != null)
                        {
                            workFlowFilter.AddRule(FieldConfigUtils.CreateFilterRule(IndexConfig, cultureCode,

                                                                                     item.Name,
                                                                                     OperatorEnum.EQUAL,
                                                                                     new StringRuleValue(queryString[item.Name])
                                                                                     ));
                        }
                    }
                    else if (item.Value is JObject) // range
                    {
                        var valObj    = (JObject)item.Value;
                        var startDays = valObj["StartDays"] as JValue;
                        var endDays   = valObj["EndDays"] as JValue;
                        if ((startDays?.Value != null) || (endDays?.Value != null))
                        {
                            var startDate = DateTime.MinValue;
                            var endDate   = DateTime.MaxValue;
                            var useTime   = false;
                            try
                            {
                                useTime = (bool)(valObj["UseTime"] as JValue).Value;
                            }
                            catch (Exception)
                            {
                            }
                            DateTime currentDateTime = useTime ? DateTime.Now : DateTime.Today;
                            try
                            {
                                startDate = currentDateTime.AddDays(-(long)startDays.Value);
                            }
                            catch (Exception)
                            {
                            }
                            try
                            {
                                endDate = currentDateTime.AddDays((long)endDays.Value);
                            }
                            catch (Exception)
                            {
                            }
                            workFlowFilter.AddRule(new FilterRule()
                            {
                                Field         = item.Name,
                                FieldType     = FieldTypeEnum.DATETIME,
                                LowerValue    = new DateTimeRuleValue(startDate),
                                UpperValue    = new DateTimeRuleValue(endDate),
                                FieldOperator = OperatorEnum.BETWEEN
                            });
                        }
                    }
                }
            }
            BuildQueryStringFilter(queryString, workFlowFilter);
            if (addWorkflowFilter)
            {
                AddWorkflowFilter(workFlowFilter);
                AddRolesFilter(workFlowFilter, roles);
            }
            //Filter = Filter.FilterRules.Any() || Filter.FilterGroups.Any() > 0 ? q : null;
            return(this);
        }
        public static Select MergeJpListQuery(FieldConfig config, Select select, List <StatusDTO> statuses, string cultureCode)
        {
            var query = select.Query;

            foreach (StatusDTO status in statuses)
            {
                switch (status.action)
                {
                case "paging":
                {
                    int number;
                    //  string value (it could be number or "all")
                    int.TryParse(status.data.number, out number);
                    select.PageSize  = number;
                    select.PageIndex = status.data.currentPage;
                    break;
                }

                case "filter":
                {
                    if (status.data != null)
                    {
                        if (status.type == "textbox" && !string.IsNullOrEmpty(status.name) && !string.IsNullOrEmpty(status.data.value))
                        {
                            var names = status.name.Split(',');
                            if (names.Length == 1)
                            {
                                query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                status.name,
                                                                                OperatorEnum.START_WITH,
                                                                                new StringRuleValue(status.data.value)
                                                                                ));
                            }
                            else
                            {
                                var group = new FilterGroup()
                                {
                                    Condition = ConditionEnum.OR
                                };
                                foreach (var n in names)
                                {
                                    group.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                    n,
                                                                                    OperatorEnum.START_WITH,
                                                                                    new StringRuleValue(status.data.value)
                                                                                    ));
                                }
                                query.FilterGroups.Add(group);
                            }
                        }
                        else if ((status.type == "checkbox-group-filter" || status.type == "button-filter-group" || status.type == "combined") && !string.IsNullOrEmpty(status.name))
                        {
                            if (status.data.filterType == "pathGroup" && status.data != null && status.data.pathGroup != null && status.data.pathGroup.Count > 0 && status.data.pathGroup[0] != "*")
                            {
                                query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                status.name,
                                                                                OperatorEnum.IN,
                                                                                status.data.pathGroup.Select(s => new StringRuleValue(s))
                                                                                ));
                            }
                        }
                        else if ((status.type == "filter-select" || status.type == "filter-drop-down") && !string.IsNullOrEmpty(status.name))
                        {
                            if (status.data.filterType == "path" && !string.IsNullOrEmpty(status.data.path) && (status.data.path != "*"))
                            {
                                query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                status.name,
                                                                                OperatorEnum.EQUAL,
                                                                                new StringRuleValue(status.data.path)
                                                                                ));
                            }
                        }
                        else if (status.type == "autocomplete" && !string.IsNullOrEmpty(status.data.path) && !string.IsNullOrEmpty(status.data.value))
                        {
                            var names = status.data.path.Split(',');
                            if (names.Length == 1)
                            {
                                query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                status.data.path,
                                                                                OperatorEnum.START_WITH,
                                                                                new StringRuleValue(status.data.value)
                                                                                ));
                            }
                            else
                            {
                                var group = new FilterGroup()
                                {
                                    Condition = ConditionEnum.OR
                                };
                                foreach (var n in names)
                                {
                                    group.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                                    n,
                                                                                    OperatorEnum.START_WITH,
                                                                                    new StringRuleValue(status.data.value)
                                                                                    ));
                                }
                                query.FilterGroups.Add(group);
                            }
                        }
                    }
                    break;
                }

                case "sort":
                {
                    select.Sort.Clear();
                    select.Sort.Add(FieldConfigUtils.CreateSortRule(config, cultureCode,
                                                                    status.data.path,
                                                                    status.data.order == "desc"
                                                                    ));
                    break;
                }
                }
            }
            return(select);
        }
Пример #8
0
        public static Select MergeQuery(FieldConfig config, Select select, RestSelect restSelect, string cultureCode)
        {
            var query = select.Query;

            select.PageSize  = restSelect.PageSize;
            select.PageIndex = restSelect.PageIndex;
            if (restSelect.Query != null && restSelect.Query.FilterRules != null)
            {
                foreach (var rule in restSelect.Query.FilterRules)
                {
                    if (rule.FieldOperator == OperatorEnum.IN)
                    {
                        if (rule.MultiValue != null)
                        {
                            query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                            rule.Field,
                                                                            rule.FieldOperator,
                                                                            rule.MultiValue.Select(v => new StringRuleValue(v.ToString()))
                                                                            ));
                        }
                    }
                    else if (rule.FieldOperator == OperatorEnum.BETWEEN)
                    {
                        // not yet implemented
                    }
                    else
                    {
                        if (rule.Value != null)
                        {
                            RuleValue val;
                            if (rule.Value.Type == Newtonsoft.Json.Linq.JTokenType.Boolean)
                            {
                                val = new BooleanRuleValue((bool)rule.Value.Value);
                            }
                            else if (rule.Value.Type == Newtonsoft.Json.Linq.JTokenType.Integer)
                            {
                                val = new IntegerRuleValue((int)rule.Value.Value);
                            }
                            else if (rule.Value.Type == Newtonsoft.Json.Linq.JTokenType.Float)
                            {
                                val = new FloatRuleValue((float)rule.Value.Value);
                            }
                            else
                            {
                                val = new StringRuleValue(rule.Value.ToString());
                            }

                            query.AddRule(FieldConfigUtils.CreateFilterRule(config, cultureCode,
                                                                            rule.Field,
                                                                            rule.FieldOperator,
                                                                            val
                                                                            ));
                        }
                    }
                }
            }

            if (restSelect.Sort != null && restSelect.Sort.Any())
            {
                select.Sort.Clear();
                foreach (var sort in restSelect.Sort)
                {
                    select.Sort.Add(FieldConfigUtils.CreateSortRule(config, cultureCode,
                                                                    sort.Field,
                                                                    sort.Descending
                                                                    ));
                }
            }
            return(select);
        }