This commit is contained in:
2020-01-22 20:58:28 +00:00
parent abb5051826
commit 23c0264127
3 changed files with 73 additions and 47 deletions

View File

@@ -5,6 +5,9 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOiIxNTcxODU5OTU0IiwiZXhwIjoiMTU3MjQ
## IMMEDIATE ITEMS ## IMMEDIATE ITEMS
TODO: DataFilter how to distinguish between filtering on specific ID value or on value column
- Might need to add a filter on ID type of thing maybe?
- Wait and see...YAGNI scenario maybe
INTEGRATION TEST UPDATE Update tests when appropriate (when it's working fully and not mocked) INTEGRATION TEST UPDATE Update tests when appropriate (when it's working fully and not mocked)
UPDATE SPEC DOCS with new format and names etc or at least remove nonsense as necessary UPDATE SPEC DOCS with new format and names etc or at least remove nonsense as necessary

View File

@@ -27,7 +27,7 @@ namespace AyaNova.DataList
//check rights //check rights
if (listOptions.Mini) if (listOptions.Mini)
{ {
if (!UserRoles.HasAnyFlags(DataList.MiniListAllowedRoles)) if (!UserRoles.HasAnyFlags(DataList.MiniListAllowedRoles))
throw new System.UnauthorizedAccessException("User roles insufficient for this mini format datalist"); throw new System.UnauthorizedAccessException("User roles insufficient for this mini format datalist");
} }
@@ -82,7 +82,7 @@ namespace AyaNova.DataList
{ {
TheFilter = await ct.DataListFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId); TheFilter = await ct.DataListFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId);
//WHERE CLAUSE - FILTER //WHERE CLAUSE - FILTER
qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, DataList.FieldDefinitions, UserId); qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, TheFilter, DataList.FieldDefinitions, UserId);
//ORDER BY CLAUSE - SORT //ORDER BY CLAUSE - SORT
//BUILD ORDER BY AND APPEND IT //BUILD ORDER BY AND APPEND IT
qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter); qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
@@ -129,7 +129,16 @@ namespace AyaNova.DataList
//PROCESS THE DF DEFAULT FIRST COLUMN //PROCESS THE DF DEFAULT FIRST COLUMN
//first column is always the underlying id value of the default record to open for this row in the client ui //first column is always the underlying id value of the default record to open for this row in the client ui
row.Add(new AyaFieldData() { v = dr.GetInt64(0) }); if (!dr.IsDBNull(0))
{
row.Add(new AyaFieldData() { v = dr.GetInt64(0) });
}
else
{
#if (DEBUG)
throw new System.ArgumentNullException($"DEV ERROR in DataListFetcher.cs: fetching df column for {DataListKey} df value is null, expecting long int record value");
#endif
}
//GetOrdinal by name is flakey in npgsql so just going by field definition and ordinal numerically //GetOrdinal by name is flakey in npgsql so just going by field definition and ordinal numerically
int nCurrentColumnPointer = 1;//start at 1 int nCurrentColumnPointer = 1;//start at 1
@@ -146,7 +155,9 @@ namespace AyaNova.DataList
if (f.SqlIdColumnName != null)//skip over df column id, it's not there if (f.SqlIdColumnName != null)//skip over df column id, it's not there
{ {
AyaField.i = dr.GetInt64(nCurrentColumnPointer); if (!dr.IsDBNull(nCurrentColumnPointer))
AyaField.i = dr.GetInt64(nCurrentColumnPointer);
nCurrentColumnPointer++; nCurrentColumnPointer++;
} }
row.Add(AyaField); row.Add(AyaField);

View File

@@ -11,8 +11,9 @@ namespace AyaNova.DataList
{ {
public static class DataListSqlFilterCriteriaBuilder public static class DataListSqlFilterCriteriaBuilder
{ {
public static string DataFilterToSQLCriteria(AyaNova.Models.DataListFilter dataFilter, List<AyaDataListFieldDefinition> objectFields, long userId) public static string DataFilterToSQLCriteria(List<AyaDataListFieldDefinition> objectFieldsList, AyaNova.Models.DataListFilter dataFilter, List<AyaDataListFieldDefinition> objectFields, long userId)
{ {
//BUGBUG: is using field property name not sql value column or whatever it's supposed to be
if (string.IsNullOrWhiteSpace(dataFilter.Filter)) if (string.IsNullOrWhiteSpace(dataFilter.Filter))
{ {
@@ -40,7 +41,18 @@ namespace AyaNova.DataList
var dataType = objectFields.Find(x => x.FieldKey.ToLowerInvariant() == fld).UiFieldDataType; var dataType = objectFields.Find(x => x.FieldKey.ToLowerInvariant() == fld).UiFieldDataType;
sb.Append("("); sb.Append("(");
sb.Append(DataFilterToColumnCriteria(fld, (AyaUiFieldDataType)dataType, opType, val, tagList, userId));
//Get the correct sql column name
AyaDataListFieldDefinition DataListField = objectFieldsList.FirstOrDefault(x => x.FieldKey == fld);
#if (DEBUG)
//Developers little helper
if (DataListField == null)
{
throw new System.ArgumentNullException($"DEV ERROR in DataListSqlFilterCriteriaBuilder.cs: field {fld} specified in template was NOT found in ObjectFields list");
}
#endif
var SQLValueColumnName=DataListField.GetSqlValueColumnName();
sb.Append(DataFilterToColumnCriteria(SQLValueColumnName, (AyaUiFieldDataType)dataType, opType, val, tagList, userId));
if (i < FilterArray.Count - 1) if (i < FilterArray.Count - 1)
{ {
sb.Append(") AND "); sb.Append(") AND ");
@@ -53,13 +65,13 @@ namespace AyaNova.DataList
/// <summary> /// <summary>
/// Translate DataFilter to Postgres friendly SQL criteria /// Translate DataFilter to Postgres friendly SQL criteria
/// </summary> /// </summary>
private static string DataFilterToColumnCriteria(string sColumn, AyaUiFieldDataType DataType, string sOperator, string sValue, List<string> sTags, long userId)//, bool IsCompound) private static string DataFilterToColumnCriteria(string SqlColumnNameToFilter, AyaUiFieldDataType DataType, string sOperator, string sValue, List<string> sTags, long userId)//, bool IsCompound)
{ {
bool TagFilter = sTags.Count < 0; bool TagFilter = sTags.Count < 0;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
//Column name //Column name
//sb.Append(" "); //sb.Append(" ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
//handle null values separately //handle null values separately
@@ -74,7 +86,7 @@ namespace AyaNova.DataList
sb.Append("Is Null"); sb.Append("Is Null");
sb.Append(" OR "); sb.Append(" OR ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" = ''"); sb.Append(" = ''");
} }
else else
@@ -121,12 +133,12 @@ namespace AyaNova.DataList
break; break;
case DataListFilterComparisonOperator.LessThan: case DataListFilterComparisonOperator.LessThan:
sb.Append("Is Null OR "); sb.Append("Is Null OR ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
break; break;
case DataListFilterComparisonOperator.LessThanOrEqualTo: case DataListFilterComparisonOperator.LessThanOrEqualTo:
sb.Append("Is Null OR "); sb.Append("Is Null OR ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
break; break;
// case "Like": // case "Like":
@@ -135,7 +147,7 @@ namespace AyaNova.DataList
case DataListFilterComparisonOperator.NotEqual: case DataListFilterComparisonOperator.NotEqual:
//This is the big one: //This is the big one:
sb.Append("Is Null OR "); sb.Append("Is Null OR ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
break; break;
} }
@@ -327,21 +339,21 @@ namespace AyaNova.DataList
dtAfter = RelativeToday.AddDays(-1); dtAfter = RelativeToday.AddDays(-1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
dtBefore = RelativeToday;//.AddDays(-1); dtBefore = RelativeToday;//.AddDays(-1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Today: case DataListFilterSpecialToken.Today:
//Between yesterday at midnight and tommorow at midnight //Between yesterday at midnight and tommorow at midnight
dtAfter = RelativeToday.AddSeconds(-1); dtAfter = RelativeToday.AddSeconds(-1);
dtBefore = RelativeToday.AddDays(1); dtBefore = RelativeToday.AddDays(1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Tomorrow: case DataListFilterSpecialToken.Tomorrow:
//Between Tonight at midnight and day after tommorow at midnight //Between Tonight at midnight and day after tommorow at midnight
dtAfter = RelativeToday.AddDays(1); dtAfter = RelativeToday.AddDays(1);
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
dtBefore = RelativeToday.AddDays(2); dtBefore = RelativeToday.AddDays(2);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
//Case 402 //Case 402
@@ -361,7 +373,7 @@ namespace AyaNova.DataList
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
@@ -390,7 +402,7 @@ namespace AyaNova.DataList
dtBefore = dtBefore.AddDays(1); dtBefore = dtBefore.AddDays(1);
} }
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.NextWeek: case DataListFilterSpecialToken.NextWeek:
//Between Next Sunday at midnight and Next Next sunday at midnight //Between Next Sunday at midnight and Next Next sunday at midnight
@@ -413,7 +425,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.LastMonth: case DataListFilterSpecialToken.LastMonth:
//start with the first day of this month //start with the first day of this month
@@ -429,7 +441,7 @@ namespace AyaNova.DataList
// 'yyyy-mm-ddTHH:MM:SS' // 'yyyy-mm-ddTHH:MM:SS'
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.ThisMonth: case DataListFilterSpecialToken.ThisMonth:
//start with the first day of this month //start with the first day of this month
@@ -441,7 +453,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.NextMonth: case DataListFilterSpecialToken.NextMonth:
@@ -460,7 +472,7 @@ namespace AyaNova.DataList
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
//TODO: REMOVE THIS TESTING //TODO: REMOVE THIS TESTING
// log.LogInformation($"NEXT MONTH TOKEN BUILDER IMMEDIATELY BEFORE BUILDING FRAGMENT: BEFORE={dtBefore.ToString()} AND AFTER={dtAfter.ToString()}"); // log.LogInformation($"NEXT MONTH TOKEN BUILDER IMMEDIATELY BEFORE BUILDING FRAGMENT: BEFORE={dtBefore.ToString()} AND AFTER={dtAfter.ToString()}");
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.FourteenDayWindow: case DataListFilterSpecialToken.FourteenDayWindow:
//start with today zero hour //start with today zero hour
@@ -473,7 +485,7 @@ namespace AyaNova.DataList
//case 1155 //case 1155
dtAfter = dtAfter.AddSeconds(-1); dtAfter = dtAfter.AddSeconds(-1);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
@@ -483,14 +495,14 @@ namespace AyaNova.DataList
//Forever up to Now //Forever up to Now
dtAfter = new DateTime(1753, 1, 2, 00, 00, 00); dtAfter = new DateTime(1753, 1, 2, 00, 00, 00);
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Future: case DataListFilterSpecialToken.Future:
//From Now to forever (999 years from now) //From Now to forever (999 years from now)
dtAfter = DateTime.UtcNow; dtAfter = DateTime.UtcNow;
dtBefore = DateTime.UtcNow.AddYears(999); dtBefore = DateTime.UtcNow.AddYears(999);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.LastYear: case DataListFilterSpecialToken.LastYear:
@@ -498,7 +510,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 0, 0, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
//To zero hour January 1 this year //To zero hour January 1 this year
dtBefore = new DateTime(RelativeNow.Year, 1, 1, 0, 0, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 1, 1, 0, 0, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.ThisYear: case DataListFilterSpecialToken.ThisYear:
@@ -506,7 +518,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
//To zero hour Jan 1 next year //To zero hour Jan 1 next year
dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.InTheLast3Months: case DataListFilterSpecialToken.InTheLast3Months:
@@ -514,7 +526,7 @@ namespace AyaNova.DataList
dtAfter = DateTime.UtcNow.AddMonths(-3); dtAfter = DateTime.UtcNow.AddMonths(-3);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.InTheLast6Months: case DataListFilterSpecialToken.InTheLast6Months:
@@ -522,7 +534,7 @@ namespace AyaNova.DataList
dtAfter = DateTime.UtcNow.AddMonths(-6); dtAfter = DateTime.UtcNow.AddMonths(-6);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.InTheLastYear: case DataListFilterSpecialToken.InTheLastYear:
@@ -530,7 +542,7 @@ namespace AyaNova.DataList
dtAfter = DateTime.UtcNow.AddDays(-365); dtAfter = DateTime.UtcNow.AddDays(-365);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
//======================= //=======================
@@ -542,7 +554,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ;
//To now //To now
dtBefore = RelativeNow; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Past90Days: case DataListFilterSpecialToken.Past90Days:
@@ -550,21 +562,21 @@ namespace AyaNova.DataList
dtAfter = DateTime.UtcNow.AddDays(-90); dtAfter = DateTime.UtcNow.AddDays(-90);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Past30Days: case DataListFilterSpecialToken.Past30Days:
//From Now minus 30 days //From Now minus 30 days
dtAfter = DateTime.UtcNow.AddDays(-30); dtAfter = DateTime.UtcNow.AddDays(-30);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.Past24Hours: case DataListFilterSpecialToken.Past24Hours:
//From Now minus 24 hours //From Now minus 24 hours
dtAfter = DateTime.UtcNow.AddHours(-24); dtAfter = DateTime.UtcNow.AddHours(-24);
//To Now //To Now
dtBefore = DateTime.UtcNow; dtBefore = DateTime.UtcNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.January: case DataListFilterSpecialToken.January:
@@ -572,67 +584,67 @@ namespace AyaNova.DataList
dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
//To zero hour feb 1 this year //To zero hour feb 1 this year
dtBefore = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.February: case DataListFilterSpecialToken.February:
dtAfter = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 2, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.March: case DataListFilterSpecialToken.March:
dtAfter = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 3, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.April: case DataListFilterSpecialToken.April:
dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.May: case DataListFilterSpecialToken.May:
dtAfter = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 5, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.June: case DataListFilterSpecialToken.June:
dtAfter = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 6, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.July: case DataListFilterSpecialToken.July:
dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.August: case DataListFilterSpecialToken.August:
dtAfter = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 8, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.September: case DataListFilterSpecialToken.September:
dtAfter = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 9, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.October: case DataListFilterSpecialToken.October:
dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.November: case DataListFilterSpecialToken.November:
dtAfter = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 11, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
dtBefore = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
case DataListFilterSpecialToken.December: case DataListFilterSpecialToken.December:
@@ -640,7 +652,7 @@ namespace AyaNova.DataList
dtAfter = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); dtAfter = new DateTime(RelativeNow.Year, 12, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);
//To zero hour Jan 1 next year //To zero hour Jan 1 next year
dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(SqlColumnNameToFilter, sb, dtAfter, dtBefore);
break; break;
default: default:
@@ -668,7 +680,7 @@ namespace AyaNova.DataList
sb.Append(">='"); sb.Append(">='");
sb.Append(sLowEnd); sb.Append(sLowEnd);
sb.Append("' AND "); sb.Append("' AND ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
sb.Append("<='"); sb.Append("<='");
sb.Append(sHighEnd); sb.Append(sHighEnd);
@@ -701,7 +713,7 @@ namespace AyaNova.DataList
sb.Append("<'"); sb.Append("<'");
sb.Append(sLowEnd); sb.Append(sLowEnd);
sb.Append("' OR "); sb.Append("' OR ");
sb.Append(sColumn); sb.Append(SqlColumnNameToFilter);
sb.Append(" "); sb.Append(" ");
sb.Append(">'"); sb.Append(">'");
sb.Append(sHighEnd); sb.Append(sHighEnd);