This commit is contained in:
@@ -2,13 +2,9 @@ using System.Linq;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Microsoft.AspNetCore.JsonPatch;
|
|
||||||
using EnumsNET;
|
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using AyaNova.Util;
|
using AyaNova.Util;
|
||||||
using AyaNova.Api.ControllerHelpers;
|
using AyaNova.Api.ControllerHelpers;
|
||||||
using AyaNova.Biz;
|
|
||||||
using AyaNova.Models;
|
using AyaNova.Models;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,16 +2,47 @@ using System.Collections.Generic;
|
|||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace AyaNova.Biz
|
namespace AyaNova.Biz
|
||||||
{
|
{
|
||||||
public static class FilterSqlCriteriaBuilder
|
public static class FilterSqlCriteriaBuilder
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static string DataFilterToSQLCriteria(AyaNova.Models.DataFilter dataFilter, FilterOptions filterOptions)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(dataFilter.Filter))
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
//iterate the datafilter and concatenate a sql query from it
|
||||||
|
var FilterArray = JArray.Parse(dataFilter.Filter);
|
||||||
|
for (int i = 0; i < FilterArray.Count; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
var filterItem = FilterArray[i];
|
||||||
|
var fld = filterItem["fld"].Value<string>();
|
||||||
|
var opType = filterItem["op"].Value<string>();
|
||||||
|
var val = filterItem["value"].Value<string>();
|
||||||
|
var dataType = filterOptions.Flds.Find(x => x.Fld == fld).Type;
|
||||||
|
|
||||||
|
sb.Append(DataFilterToColumnCriteria(fld, dataType, opType, val));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Translate DataFilter to Postgres friendly SQL criteria
|
/// Translate DataFilter to Postgres friendly SQL criteria
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static string GridToSqlCriteria(string sColumn, string sDataType, string sOperator, string sValue, bool IsCompound)
|
private static string DataFilterToColumnCriteria(string sColumn, string sDataType, string sOperator, string sValue)//, bool IsCompound)
|
||||||
{
|
{
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
@@ -73,44 +104,44 @@ namespace AyaNova.Biz
|
|||||||
//so....
|
//so....
|
||||||
//Special addition to handle nulls
|
//Special addition to handle nulls
|
||||||
|
|
||||||
if (!IsCompound)
|
// if (!IsCompound)
|
||||||
|
// {
|
||||||
|
switch (sOperator)
|
||||||
{
|
{
|
||||||
switch (sOperator)
|
case "Equals":
|
||||||
{
|
//no change on equals for nulls
|
||||||
case "Equals":
|
break;
|
||||||
//no change on equals for nulls
|
case "GreaterThan":
|
||||||
break;
|
//no change on greater than for nulls
|
||||||
case "GreaterThan":
|
//(nulls are going to be assumed to be always at the
|
||||||
//no change on greater than for nulls
|
//less than end of the scale)
|
||||||
//(nulls are going to be assumed to be always at the
|
break;
|
||||||
//less than end of the scale)
|
case "GreaterThanOrEqualTo":
|
||||||
break;
|
//no change on greater than for nulls
|
||||||
case "GreaterThanOrEqualTo":
|
//(nulls are going to be assumed to be always at the
|
||||||
//no change on greater than for nulls
|
//less than end of the scale)
|
||||||
//(nulls are going to be assumed to be always at the
|
break;
|
||||||
//less than end of the scale)
|
case "LessThan":
|
||||||
break;
|
sb.Append("Is Null OR ");
|
||||||
case "LessThan":
|
sb.Append(sColumn);
|
||||||
sb.Append("Is Null OR ");
|
sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
break;
|
||||||
sb.Append(" ");
|
case "LessThanOrEqualTo":
|
||||||
break;
|
sb.Append("Is Null OR ");
|
||||||
case "LessThanOrEqualTo":
|
sb.Append(sColumn);
|
||||||
sb.Append("Is Null OR ");
|
sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
break;
|
||||||
sb.Append(" ");
|
case "Like":
|
||||||
break;
|
//No change on like
|
||||||
case "Like":
|
break;
|
||||||
//No change on like
|
case "NotEquals":
|
||||||
break;
|
//This is the big one:
|
||||||
case "NotEquals":
|
sb.Append("Is Null OR ");
|
||||||
//This is the big one:
|
sb.Append(sColumn);
|
||||||
sb.Append("Is Null OR ");
|
sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
break;
|
||||||
sb.Append(" ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// }
|
||||||
|
|
||||||
#region Build for specific type
|
#region Build for specific type
|
||||||
switch (sDataType)
|
switch (sDataType)
|
||||||
@@ -304,7 +335,7 @@ namespace AyaNova.Biz
|
|||||||
dtBefore = System.DateTime.Today.AddDays(1);
|
dtBefore = System.DateTime.Today.AddDays(1);
|
||||||
//dtBefore=dtBefore.AddSeconds(1);
|
//dtBefore=dtBefore.AddSeconds(1);
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -320,7 +351,7 @@ namespace AyaNova.Biz
|
|||||||
dtBefore = System.DateTime.Today.AddDays(2);
|
dtBefore = System.DateTime.Today.AddDays(2);
|
||||||
//dtBefore=dtBefore.AddSeconds(1);
|
//dtBefore=dtBefore.AddSeconds(1);
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -348,7 +379,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = dtAfter.AddSeconds(-1);
|
dtAfter = dtAfter.AddSeconds(-1);
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -385,7 +416,7 @@ namespace AyaNova.Biz
|
|||||||
}
|
}
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -416,7 +447,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = dtAfter.AddSeconds(-1);
|
dtAfter = dtAfter.AddSeconds(-1);
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -440,7 +471,7 @@ namespace AyaNova.Biz
|
|||||||
// 'yyyy-mm-ddTHH:MM:SS'
|
// 'yyyy-mm-ddTHH:MM:SS'
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -460,7 +491,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = dtAfter.AddSeconds(-1);
|
dtAfter = dtAfter.AddSeconds(-1);
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -483,7 +514,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = dtAfter.AddSeconds(-1);
|
dtAfter = dtAfter.AddSeconds(-1);
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -504,7 +535,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = dtAfter.AddSeconds(-1);
|
dtAfter = dtAfter.AddSeconds(-1);
|
||||||
|
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
//sb.Append(" ");
|
//sb.Append(" ");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
@@ -522,7 +553,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = new DateTime(1753, 1, 2, 00, 00, 00);
|
dtAfter = new DateTime(1753, 1, 2, 00, 00, 00);
|
||||||
dtBefore = System.DateTime.Now;
|
dtBefore = System.DateTime.Now;
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -536,7 +567,7 @@ namespace AyaNova.Biz
|
|||||||
dtAfter = System.DateTime.Now;
|
dtAfter = System.DateTime.Now;
|
||||||
dtBefore = System.DateTime.Now.AddYears(999);
|
dtBefore = System.DateTime.Now.AddYears(999);
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -551,7 +582,7 @@ namespace AyaNova.Biz
|
|||||||
//To zero hour January 1 this year
|
//To zero hour January 1 this year
|
||||||
dtBefore = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00);
|
dtBefore = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00);
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -566,7 +597,7 @@ namespace AyaNova.Biz
|
|||||||
//To zero hour Jan 1 next year
|
//To zero hour Jan 1 next year
|
||||||
dtBefore = new DateTime(DateTime.Now.AddYears(1).Year, 1, 1, 00, 00, 00);
|
dtBefore = new DateTime(DateTime.Now.AddYears(1).Year, 1, 1, 00, 00, 00);
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -581,7 +612,7 @@ namespace AyaNova.Biz
|
|||||||
//To Now
|
//To Now
|
||||||
dtBefore = DateTime.Now;
|
dtBefore = DateTime.Now;
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -596,7 +627,7 @@ namespace AyaNova.Biz
|
|||||||
//To Now
|
//To Now
|
||||||
dtBefore = DateTime.Now;
|
dtBefore = DateTime.Now;
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -611,7 +642,7 @@ namespace AyaNova.Biz
|
|||||||
//To Now
|
//To Now
|
||||||
dtBefore = DateTime.Now;
|
dtBefore = DateTime.Now;
|
||||||
sb.Append(">'");
|
sb.Append(">'");
|
||||||
sb.Append(PostgresDateFormat(dtAfter));
|
sb.Append(PostgresDateFormat(dtAfter));
|
||||||
sb.Append("') AND (");
|
sb.Append("') AND (");
|
||||||
sb.Append(sColumn);
|
sb.Append(sColumn);
|
||||||
sb.Append(" ");
|
sb.Append(" ");
|
||||||
@@ -817,12 +848,12 @@ namespace AyaNova.Biz
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
public static DateTime ZeroMilliseconds(DateTime d)
|
private static DateTime ZeroMilliseconds(DateTime d)
|
||||||
{
|
{
|
||||||
if (d.Millisecond == 0) return d;
|
if (d.Millisecond == 0) return d;
|
||||||
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, DateTimeKind.Utc);
|
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, DateTimeKind.Utc);
|
||||||
}
|
}
|
||||||
public static DateTime MaxMilliseconds(DateTime d)
|
private static DateTime MaxMilliseconds(DateTime d)
|
||||||
{
|
{
|
||||||
if (d.Millisecond == 0) return d;
|
if (d.Millisecond == 0) return d;
|
||||||
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, 999, DateTimeKind.Utc);
|
return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, 999, DateTimeKind.Utc);
|
||||||
@@ -833,7 +864,7 @@ namespace AyaNova.Biz
|
|||||||
/// https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE
|
/// https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string PostgresDateFormat(DateTime theDate)
|
private static string PostgresDateFormat(DateTime theDate)
|
||||||
{
|
{
|
||||||
//If this was used it should be like this for a UTC date to iso8601
|
//If this was used it should be like this for a UTC date to iso8601
|
||||||
// ISO8601 with 7 decimal places
|
// ISO8601 with 7 decimal places
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ namespace AyaNova.Biz
|
|||||||
var q = "SELECT *, xmin FROM AWIDGET ";
|
var q = "SELECT *, xmin FROM AWIDGET ";
|
||||||
|
|
||||||
//BUILD WHERE AND APPEND IT
|
//BUILD WHERE AND APPEND IT
|
||||||
|
q=q+FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(theFilter,WidgetBiz.FilterOptions);
|
||||||
|
|
||||||
//BUILD ORDER BY AND APPEND IT
|
//BUILD ORDER BY AND APPEND IT
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user