This commit is contained in:
2022-03-02 19:16:27 +00:00
parent a84846fbd1
commit f18282de38
2 changed files with 35 additions and 6 deletions

View File

@@ -1145,6 +1145,33 @@ namespace AyaNova.DataList
}
////////////////////////////////////////////////////////////////////////
//
/// <summary>
/// Translate KPI tag filter to PostgreSQL friendly SQL criteria
/// </summary>
public static string KPITagFilterToSqlCriteria(string SqlColumnNameToFilter, List<string> sValue, bool bAny)
{
if(sValue.Count==0) return string.Empty;
//if it's an OR (any) query then need to build individual terms, if it's not then it's just an all or AND query and can pass through as is
if (sValue.Count > 0 && bAny == true)
{
StringBuilder sb = new StringBuilder();
sb.Append(" AND ");
sb.Append("(");
foreach (string s in sValue)
{
sb.Append($"({TagDataFilterToColumnCriteria(SqlColumnNameToFilter, DataListFilterComparisonOperator.Contains, s)}) OR ");
}
var ret = sb.ToString();
return ret.Substring(0, ret.LastIndexOf(" OR ")) + ")";
}
else
{
//it's an AND (not any) query so it's just all inclusive but still contains
return " AND " + TagDataFilterToColumnCriteria(SqlColumnNameToFilter, DataListFilterComparisonOperator.Contains, string.Join(",", sValue));
}
}

View File

@@ -27,15 +27,17 @@ namespace AyaNova.KPI
{
var wotags = options.Criteria["wotags"].ToObject<List<string>>();
bool wotagsany = options.Criteria["wotagsany"].ToObject<bool>();
var woitemtags = options.Criteria["woitemtags"].ToObject<List<string>>();
bool woitemtagsany = options.Criteria["woitemtagsany"].ToObject<bool>();
string woTagsWhere = null;
if (wotags.Count > 0)
woTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorder.tags", DataListFilterComparisonOperator.Contains, string.Join(",", wotags));
string woTagsWhere = DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("aworkorder.tags", wotags, wotagsany);
// if (wotags.Count > 0)
// woTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorder.tags", DataListFilterComparisonOperator.Contains, string.Join(",", wotags));
string woItemTagsWhere = null;
if (woitemtags.Count > 0)
woItemTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorderitem.tags", DataListFilterComparisonOperator.Contains, string.Join(",", woitemtags));
string woItemTagsWhere = DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("aworkorderitem.tags", woitemtags, woitemtagsany); ;
// if (woitemtags.Count > 0)
// woItemTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorderitem.tags", DataListFilterComparisonOperator.Contains, string.Join(",", woitemtags));
_dataQuery = @$"SELECT row_to_json(t) as res from (
SELECT distinct(AWORKORDER.ID),