Beispiel #1
0
 public DataFilterParameter(string name, string caption, Type type, string defaultValue, FilterConditionType conditionType)
 {
     this.name          = name;
     this.caption       = caption;
     this.type          = type;
     this.defaultValue  = defaultValue;
     this.conditionType = conditionType;
 }
Beispiel #2
0
 public XPathTemplateParameter(string name, string caption, string type, string defaultValue, FilterConditionType conditionType)
 {
     this.name          = name;
     this.caption       = caption;
     this.type          = type;
     this.defaultValue  = defaultValue;
     this.conditionType = conditionType;
 }
Beispiel #3
0
 public DataFilterCondition(
     DataFilterParameter parameter,
     FilterConditionType conditionType,
     string conditionOperator,
     string operand)
     : this(parameter, conditionType, conditionOperator, operand, null)
 {
 }
Beispiel #4
0
 public DataFilterCondition(
     DataFilterParameter parameter,
     FilterConditionType conditionType,
     string conditionOperator,
     string leftOperand,
     string rightOperand)
 {
     this.parameter         = parameter;
     this.conditionType     = conditionType;
     this.conditionOperator = conditionOperator;
     this.leftOperand       = leftOperand;
     this.rightOperand      = rightOperand;
 }
 public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
     if (value is FilterConditionType)
     {
         FilterConditionType queryOperaterType = (FilterConditionType)value;
         if (queryOperaterType == FilterConditionType.Custom)
         {
             return("Custom (Regex)");
         }
         return(queryOperaterType.ToString());
     }
     else
     {
         return(Binding.DoNothing);
     }
 }
Beispiel #6
0
        public FilterCondition(Int64 fieldId, String fieldName, DataType dataType, Object data, FilterConditionType conditionType, FilterSelector selector)
        {
            this.field_id       = fieldId;
            this.field_name     = fieldName;
            this.condition_type = conditionType;
            this.selector_type  = selector;
            this.data_type      = dataType;

            try
            {
                switch (this.data_type)
                {
                case Filters.DataType.DateTime:
                    try
                    {
                        this.data = (DateTime)data;
                    }
                    catch
                    {
                        this.data = DateTime.Parse(data.ToString());
                    }
                    break;

                case Filters.DataType.Numeric:
                    try
                    {
                        this.data = (Int64)data;
                    }
                    catch
                    {
                        this.data = Int64.Parse(data.ToString());
                    }
                    break;

                default:
                    this.data = (String)data;
                    break;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Invalid cast of data '" + data + "' to type '" + dataType.ToString() + "'", ex);
            }

            switch (this.data_type)
            {
            case Filters.DataType.DateTime:
                switch (this.condition_type)
                {
                case FilterConditionType.NotEqual:
                case FilterConditionType.Greater:
                case FilterConditionType.Less:
                case FilterConditionType.GreaterOrEqual:
                case FilterConditionType.LessOrEqual:
                case FilterConditionType.Equal:
                    break;

                default:
                    throw new Exception("Invalid condition (" + this.condition_type.ToString() + ") of data type (" + this.data_type.ToString() + ")");
                    break;
                }
                break;

            case Filters.DataType.Numeric:
                switch (condition_type)
                {
                case FilterConditionType.Equal:
                case FilterConditionType.NotEqual:
                case FilterConditionType.Greater:
                case FilterConditionType.Less:
                case FilterConditionType.GreaterOrEqual:
                case FilterConditionType.LessOrEqual:
                    break;

                default:
                    throw new Exception("Invalid condition (" + this.condition_type.ToString() + ") of data type (" + this.data_type.ToString() + ")");
                    break;
                }
                break;

            default:
                switch (condition_type)
                {
                case FilterConditionType.Contains:
                case FilterConditionType.EndWith:
                case FilterConditionType.NotContains:
                case FilterConditionType.NotEqual:
                case FilterConditionType.StartWith:
                case FilterConditionType.Equal:
                    break;

                default:
                    throw new Exception("Invalid condition (" + this.condition_type.ToString() + ") of data type (" + this.data_type.ToString() + ")");
                    break;
                }
                break;
            }
        }
Beispiel #7
0
 public void AddFilter(Int64 fieldId, String fieldName, DataType dataType, String text, FilterConditionType conditionType, FilterSelector selector)
 {
     AddFilter(new FilterCondition(fieldId, fieldName, dataType, text, conditionType, selector));
 }
Beispiel #8
0
        public void AddCondition(String groupId, String groupSelector, Int64 fieldId, String fieldName, String dataType, String text, String conditionType, String selector)
        {
            FilterSelector gs = FilterSelector.OR;

            switch (groupSelector.ToLower())
            {
            case "and":
                gs = FilterSelector.AND;
                break;

            case "or":
                gs = FilterSelector.OR;
                break;
            }

            FilterSelector s = FilterSelector.OR;

            switch (selector.ToLower())
            {
            case "and":
                s = FilterSelector.AND;
                break;

            case "or":
                s = FilterSelector.OR;
                break;
            }


            FilterConditionType c = FilterConditionType.Equal;

            switch (conditionType.ToLower())
            {
            case "contains":
                c = FilterConditionType.Contains;
                break;

            case "endwith":
                c = FilterConditionType.EndWith;
                break;

            case "equal":
                c = FilterConditionType.Equal;
                break;

            case "notcontains":
                c = FilterConditionType.NotContains;
                break;

            case "notequal":
                c = FilterConditionType.NotEqual;
                break;

            case "startwith":
                c = FilterConditionType.StartWith;
                break;

            case "greater":
                c = FilterConditionType.Greater;
                break;

            case "less":
                c = FilterConditionType.Less;
                break;

            case "greaterorequal":
                c = FilterConditionType.GreaterOrEqual;
                break;

            case "lessorequal":
                c = FilterConditionType.LessOrEqual;
                break;
            }

            DataType dt = DataType.Text;

            switch (dataType.ToLower())
            {
            case "datetime":
            case "date":
                dt = DataType.DateTime;
                break;

            case "numeric":
                dt = DataType.Numeric;
                break;

            default:
                dt = DataType.Text;
                break;
            }


            AddCondition(groupId, gs, fieldId, fieldName, dt, text, c, s);
        }
Beispiel #9
0
        public void AddCondition(String groupId, FilterSelector groupSelector, Int64 fieldId, String fieldName, DataType dataType, String text, FilterConditionType conditionType, FilterSelector selector)
        {
            FilterGroup g = filter_groups.Find(g1 => (g1.GroupId == groupId));

            if (g == null)
            {
                g = new FilterGroup(groupId, groupSelector);
                filter_groups.Add(g);
            }

            g.AddFilter(fieldId, fieldName, dataType, text, conditionType, selector);
        }
Beispiel #10
0
        private String GetFilterTemplate(List <FieldData> fieldList, Int64 fieldId, String fieldValue, String condition)
        {
            String defaultDataType = "";
            String dtValue         = MessageResource.FormatDate(DateTime.Now, true);
            String timeValue       = "00:00:00";
            String txtValue        = "";
            String numValue        = "";

            FilterConditionType dtCondition  = FilterConditionType.Equal;
            FilterConditionType txtCondition = FilterConditionType.Equal;
            FilterConditionType numCondition = FilterConditionType.Equal;

            String filterTemplate = "<div id=\"{0}\"><input type=\"hidden\" name=\"filter_id\" value=\"{0}\" /><input type=\"hidden\" name=\"filter_{0}_group\" value=\"{1}\" /><div class=\"filter\" filter-id=\"{0}\"><table><tbody><tr><td class=\"col1\">";

            filterTemplate += "<select class=\"filter-field\" id=\"filter_{0}_field_id\" name=\"filter_{0}_field_id\">";
            foreach (FieldData fd in fieldList)
            {
                if ((defaultDataType == "") || (fd.field_id == fieldId))
                {
                    defaultDataType = fd.data_type;
                }

                if (fd.field_id == fieldId)
                {
                    switch (fd.data_type.ToLower())
                    {
                    case "datetime":
                        try
                        {
                            if (fieldValue == "now")
                            {
                                dtValue = "now";
                            }
                            else
                            {
                                DateTime tmp = DateTime.Parse(fieldValue);
                                dtValue   = MessageResource.FormatDate(tmp, true);
                                timeValue = MessageResource.FormatTime(tmp);
                            }
                        }
                        catch { }

                        foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.DateTime))
                        {
                            if (ft.ToString().ToLower() == condition.ToLower())
                            {
                                dtCondition = ft;
                            }
                        }

                        break;

                    case "numeric":
                        numValue = fieldValue;

                        foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Numeric))
                        {
                            if (ft.ToString().ToLower() == condition.ToLower())
                            {
                                numCondition = ft;
                            }
                        }
                        break;

                    default:
                        txtValue = fieldValue;

                        foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Text))
                        {
                            if (ft.ToString().ToLower() == condition.ToLower())
                            {
                                txtCondition = ft;
                            }
                        }
                        break;
                    }
                }

                filterTemplate += "<option value=\"" + fd.field_id + "\" data-type=\"" + fd.data_type.ToLower() + "\" " + (fd.field_id == fieldId ? "selected" : "") + ">" + fd.name + "</option>";
            }
            filterTemplate += "</select>";
            filterTemplate += "</td><td class=\"col2\">";

            filterTemplate += "<div class=\"dt-check dt-datetime " + (defaultDataType == "datetime" ? "" : "dt-off") + "\"><select name=\"filter_{0}_condition_datetime\">";
            foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.DateTime))
            {
                filterTemplate += "<option value=\"" + ft.ToString().ToLower() + "\" " + (dtCondition == ft ? "selected" : "") + ">" + MessageResource.GetMessage(ft.ToString().ToLower(), ft.ToString()) + "</option>";
            }
            filterTemplate += "</select></div>";
            filterTemplate += "<div class=\"dt-check dt-numeric " + (defaultDataType == "numeric" ? "" : "dt-off") + "\"><select name=\"filter_{0}_condition_numeric\">";
            foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Numeric))
            {
                filterTemplate += "<option value=\"" + ft.ToString().ToLower() + "\" " + (numCondition == ft ? "selected" : "") + ">" + MessageResource.GetMessage(ft.ToString().ToLower(), ft.ToString()) + "</option>";
            }
            filterTemplate += "</select></div>";
            filterTemplate += "<div class=\"dt-check dt-string " + (defaultDataType == "string" ? "" : "dt-off") + "\"><select name=\"filter_{0}_condition_string\">";
            foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Text))
            {
                filterTemplate += "<option value=\"" + ft.ToString().ToLower() + "\" " + (txtCondition == ft ? "selected" : "") + ">" + MessageResource.GetMessage(ft.ToString().ToLower(), ft.ToString()) + "</option>";
            }
            filterTemplate += "</select></div>";

            filterTemplate += "</td><td class=\"col3\">";

            filterTemplate += "<div class=\"dt-check dt-datetime " + (defaultDataType == "datetime" ? "" : "dt-off") + "\"><div display=\"block\" class=\"filter-now\"><input name=\"filter_{0}_now\" type=\"checkbox\" " + (dtValue == "now" ? "checked" : "") + " state=\"false\" />" + MessageResource.GetMessage("use_now", "Use Now() function") + "</div><input class=\"  " + (dtValue == "now" ? "dt-off date-mask-off" : "date-mask") + "\" name=\"filter_{0}_text_date\" type=\"text\" placeholder=\"Digite a data. Ex. dd/mm/yyyy\" value=\"" + dtValue + "\" /><input class=\"time-mask " + (dtValue == "now" ? "dt-off" : "") + "\" name=\"filter_{0}_text_time\" type=\"text\" placeholder=\"Digite a hora. Ex. hh:mm:ss\" value=\"" + timeValue + "\" /></div>";
            filterTemplate += "<div class=\"dt-check dt-numeric " + (defaultDataType == "numeric" ? "" : "dt-off") + "\"><input name=\"filter_{0}_text_numeric\" type=\"text\" placeholder=\"Digite o valor numérico\" value=\"" + numValue + "\" /></div>";
            filterTemplate += "<div class=\"dt-check dt-string " + (defaultDataType == "string" ? "" : "dt-off") + "\"><input name=\"filter_{0}_text_string\" type=\"text\" placeholder=\"Digite o texto\" value=\"" + txtValue + "\" /></div>";

            filterTemplate += "</td><td class=\"col4\"><div class=\"ico icon-close floatright\"></div><div class=\"ico icon-plus floatright\"></div></td></tr></tbody></table><div class=\"clear-block\"></div></div><div class=\"filter-selector-wrapper\">{2}</div></div>";

            return(filterTemplate);
        }
Beispiel #11
0
        public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is FilterConditionViewModel)
            {
                FilterConditionViewModel matchCondition = (FilterConditionViewModel)value;
                FilterConditionType      matchType      = matchCondition.MatchType.Key;

                //string logical = "OR";
                //if (matchCondition.Logical)
                //{
                //    logical = "AND";
                //}

                if (matchType == FilterConditionType.DynamicLanguage)
                {
                    return(matchCondition.MatchExpression);
                }
                else if (matchType == FilterConditionType.DateRange)
                {
                    string fromDateString = "\"" + matchCondition.ColumnName + "\"" + ">=" + "\"" + matchCondition.FromDate.ToString() + "\"";
                    string toDateString   = "\"" + matchCondition.ColumnName + "\"" + "<=" + "\"" + matchCondition.ToDate.ToString() + "\"";

                    string contractor = " and ";

                    if (DateTime.Parse(matchCondition.FromDate).ToShortDateString().Equals(new DateTime(1900, 1, 1).ToShortDateString()))
                    {
                        fromDateString = string.Empty;
                        contractor     = string.Empty;
                    }

                    if (DateTime.Parse(matchCondition.ToDate).ToShortDateString().Equals(DateTime.MaxValue.ToShortDateString()))
                    {
                        toDateString = string.Empty;
                        contractor   = string.Empty;
                    }

                    return(string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", fromDateString, contractor, toDateString));
                }
                else if (matchType == FilterConditionType.ValidFeature)
                {
                    return("Features are " + (matchCondition.ValidStatus ? "valid" : "invalid"));
                }
                else
                {
                    string matches = string.Empty;

                    if (FilterHelper.FilterConditionNames.ContainsKey(matchType))
                    {
                        matches = FilterHelper.FilterConditionNames[matchType];
                    }
                    else
                    {
                        matches = "unknown match";
                    }

                    if (matchType == FilterConditionType.IsNotEmpty || matchType == FilterConditionType.IsEmpty)
                    {
                        return(string.Format(CultureInfo.InvariantCulture, "\"{0}\" {1}"
                                             , matchCondition.ColumnName
                                             , matches));
                    }
                    else if (matchCondition.FilterMode == FilterMode.Attributes)
                    {
                        return(string.Format(CultureInfo.InvariantCulture, "\"{0}\" {1} \"{2}\""
                                             , matchCondition.ColumnName
                                             , matches
                                             , matchCondition.MatchExpression));
                    }
                    else
                    {
                        return(string.Format(CultureInfo.InvariantCulture, "\"{0}\" {1} \"{2}\""
                                             , "Caculated Area"
                                             , matches
                                             , matchCondition.MatchExpression));
                    }
                }
            }
            else
            {
                return(Binding.DoNothing);
            }
        }
Beispiel #12
0
        private FilterRule GetFilterByForm(out WebJsonResponse contentRet)
        {
            contentRet = null;

            String name = Request.Form["filter_name"];

            if (String.IsNullOrEmpty(name))
            {
                contentRet = new WebJsonResponse("", MessageResource.GetMessage("invalid_name"), 3000, true);
                return(null);
            }

            String filters = Request.Form["filter_name"];

            if (String.IsNullOrEmpty(name))
            {
                contentRet = new WebJsonResponse("", MessageResource.GetMessage("invalid_name"), 3000, true);
                return(null);
            }

            //Verifica e trata as regras

            if (String.IsNullOrEmpty(Request.Form["filter_id"]))
            {
                contentRet = new WebJsonResponse("", MessageResource.GetMessage("conditions_is_empty"), 3000, true);
                return(null);
            }

            String rData = JSON.Serialize2(new
            {
                jsonrpc    = "1.0",
                method     = "field.list",
                parameters = new
                {
                    page_size = Int32.MaxValue
                },
                id = 1
            });
            //SqlConnection //conn = DB.GetConnection();
            String jData = "";

            try
            {
                using (IAMDatabase database = new IAMDatabase(IAMDatabase.GetWebConnectionString())) jData = WebPageAPI.ExecuteLocal(database, this, rData);
            }
            finally
            {
            }

            List <FieldData> fieldList = new List <FieldData>();
            FieldListResult  flR       = JSON.Deserialize <FieldListResult>(jData);

            if ((flR != null) && (flR.error == null) && (flR.result != null))
            {
                fieldList = flR.result;
            }

            if (fieldList.Count == 0)
            {
                contentRet = new WebJsonResponse("", MessageResource.GetMessage("field_not_found"), 3000, true);
                return(null);
            }

            FilterRule newItem = new FilterRule(name);


            String[] fIds = Request.Form["filter_id"].Split(",".ToCharArray());
            foreach (String fid in fIds)
            {
                if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_group"]))
                {
                    contentRet = new WebJsonResponse("", "Grupo não localizado na condição " + fid, 3000, true);
                    break;
                }

                if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_field_id"]))
                {
                    contentRet = new WebJsonResponse("", "ID do campo não localizado na condição " + fid, 3000, true);
                    break;
                }

                String fGroup = Request.Form["filter_" + fid + "_group"].Split(",".ToCharArray())[0];

                FieldData fieldData = null;
                try
                {
                    Int64 tmp = Int64.Parse(Request.Form["filter_" + fid + "_field_id"].Split(",".ToCharArray())[0]);
                    foreach (FieldData fd in fieldList)
                    {
                        if (fd.field_id == tmp)
                        {
                            fieldData = fd;
                        }
                    }

                    if (fieldData == null)
                    {
                        throw new Exception();
                    }
                }
                catch
                {
                    contentRet = new WebJsonResponse("", "ID do campo inválido na condição " + fid, 3000, true);
                    break;
                }

                FilterSelector filterSelector = FilterSelector.AND;

                if (!String.IsNullOrEmpty(Request.Form["filter_" + fid + "_selector"]))
                {
                    switch (Request.Form["filter_" + fid + "_selector"].Split(",".ToCharArray())[0].ToLower())
                    {
                    case "or":
                        filterSelector = FilterSelector.OR;
                        break;

                    default:
                        filterSelector = FilterSelector.AND;
                        break;
                    }
                }

                FilterConditionType condition = FilterConditionType.Equal;
                switch (fieldData.data_type)
                {
                case "numeric":
                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_condition_numeric"]))
                    {
                        contentRet = new WebJsonResponse("", "Condição de comparação não localizada na condição " + fid, 3000, true);
                        break;
                    }

                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_text_numeric"]))
                    {
                        contentRet = new WebJsonResponse("", "Valor não localizado na condição " + fid, 3000, true);
                        break;
                    }

                    Int64 nValue = 0;
                    try
                    {
                        nValue = Int64.Parse(Request.Form["filter_" + fid + "_text_numeric"].Split(",".ToCharArray())[0]);
                    }
                    catch
                    {
                        contentRet = new WebJsonResponse("", "Valor inválido na condição " + fid, 3000, true);
                        break;
                    }

                    String c1 = Request.Form["filter_" + fid + "_condition_numeric"].Split(",".ToCharArray())[0].ToLower();
                    foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Numeric))
                    {
                        if (c1 == ft.ToString().ToLower())
                        {
                            condition = ft;
                        }
                    }

                    newItem.AddCondition(fGroup, FilterSelector.AND, fieldData.field_id, "", DataType.Numeric, nValue.ToString(), condition, filterSelector);

                    break;

                case "datetime":
                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_condition_datetime"]))
                    {
                        contentRet = new WebJsonResponse("", "Condição de comparação não localizada na condição " + fid, 3000, true);
                        break;
                    }

                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_text_date"]))
                    {
                        contentRet = new WebJsonResponse("", "Valor de data não localizado na condição " + fid, 3000, true);
                        break;
                    }

                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_text_time"]))
                    {
                        contentRet = new WebJsonResponse("", "Valor de hora não localizado na condição " + fid, 3000, true);
                        break;
                    }

                    String dtValue = "";
                    try
                    {
                        if (Request.Form["filter_" + fid + "_text_date"].Split(",".ToCharArray())[0].ToLower() == "now")
                        {
                            dtValue = "now";
                        }
                        else
                        {
                            DateTime tmp = DateTime.Parse(Request.Form["filter_" + fid + "_text_date"].Split(",".ToCharArray())[0] + " " + Request.Form["filter_" + fid + "_text_time"].Split(",".ToCharArray())[0]);
                            dtValue = tmp.ToString("o");
                        }
                    }
                    catch
                    {
                        contentRet = new WebJsonResponse("", "Valor de data e hora inválidos na condição " + fid, 3000, true);
                        break;
                    }

                    String c2 = Request.Form["filter_" + fid + "_condition_datetime"].Split(",".ToCharArray())[0].ToLower();
                    foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.DateTime))
                    {
                        if (c2 == ft.ToString().ToLower())
                        {
                            condition = ft;
                        }
                    }

                    newItem.AddCondition(fGroup, FilterSelector.AND, fieldData.field_id, "", DataType.DateTime, dtValue, condition, filterSelector);

                    break;

                default:
                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_condition_string"]))
                    {
                        contentRet = new WebJsonResponse("", "Condição de comparação não localizada na condição " + fid, 3000, true);
                        break;
                    }

                    if (String.IsNullOrEmpty(Request.Form["filter_" + fid + "_text_string"]))
                    {
                        contentRet = new WebJsonResponse("", "Valor não localizado na condição " + fid, 3000, true);
                        break;
                    }


                    String c3 = Request.Form["filter_" + fid + "_condition_string"].Split(",".ToCharArray())[0].ToLower();
                    foreach (FilterConditionType ft in IAM.Filters.FilterCondition.ConditionByDataType(DataType.Text))
                    {
                        if (c3 == ft.ToString().ToLower())
                        {
                            condition = ft;
                        }
                    }

                    newItem.AddCondition(fGroup, FilterSelector.AND, fieldData.field_id, "", DataType.Text, Request.Form["filter_" + fid + "_text_string"].Split(",".ToCharArray())[0], condition, filterSelector);
                    break;
                }
            }

            //Atualiza os seletores dos grupos caso haja mais de 1 grupo
            if (newItem.FilterGroups.Count > 1)
            {
                foreach (FilterGroup g in newItem.FilterGroups)
                {
                    if (!String.IsNullOrEmpty(Request.Form["group_" + g.GroupId + "_selector"]))
                    {
                        switch (Request.Form["group_" + g.GroupId + "_selector"].Split(",".ToCharArray())[0].ToLower())
                        {
                        case "and":
                            g.Selector = FilterSelector.AND;
                            break;

                        default:
                            g.Selector = FilterSelector.OR;
                            break;
                        }
                    }
                }
            }

            return(newItem);
        }