This commit is contained in:
2018-12-10 22:47:34 +00:00
parent c675f97355
commit 2f2c65da96
2 changed files with 80 additions and 79 deletions

View File

@@ -281,9 +281,10 @@ namespace AyaNova.Biz
//So this is the core date time to work off of //So this is the core date time to work off of
DateTime RelativeToday = DateTime.Today; DateTime RelativeToday = DateTime.Today;
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); DateTime RelativeNow = DateTime.Now;
log.LogInformation("RelativeToday (before adjustment):"); // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria");
log.LogInformation(RelativeToday.ToString()); // log.LogInformation("RelativeToday (before adjustment):");
// log.LogInformation(RelativeToday.ToString());
if (sValue.StartsWith("{[") && sValue.EndsWith("]}")) if (sValue.StartsWith("{[") && sValue.EndsWith("]}"))
@@ -293,14 +294,15 @@ namespace AyaNova.Biz
AyaNova.Models.AyContext ct = AyaNova.Util.ServiceProviderProvider.DBContext; AyaNova.Models.AyContext ct = AyaNova.Util.ServiceProviderProvider.DBContext;
var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { tz = m.UserOptions.TimeZoneOffset }).First(); var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { tz = m.UserOptions.TimeZoneOffset }).First();
RelativeToday = RelativeToday.AddHours(((double)u.tz)*-1);//flip the sign to adjust towards UTC RelativeToday = RelativeToday.AddHours(((double)u.tz)*-1);//flip the sign to adjust towards UTC
RelativeNow = RelativeNow.AddHours(((double)u.tz)*-1);//flip the sign to adjust towards UTC
//TESTING: // //TESTING:
//LOG THE CRIT AND QUERY // //LOG THE CRIT AND QUERY
// ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); // // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria");
log.LogInformation("RelativeToday (adjusted):"); // log.LogInformation("RelativeToday (adjusted):");
log.LogInformation(RelativeToday.ToString()); // log.LogInformation(RelativeToday.ToString());
log.LogInformation("Offset used:"); // log.LogInformation("Offset used:");
log.LogInformation(u.tz.ToString()); // log.LogInformation(u.tz.ToString());
#region Build criteria for date RANGE TOKEN specified #region Build criteria for date RANGE TOKEN specified
//Used as the basis point //Used as the basis point
@@ -404,7 +406,7 @@ namespace AyaNova.Biz
break; break;
case FilterSpecialToken.LastMonth: case FilterSpecialToken.LastMonth:
//start with the first day of this month //start with the first day of this month
dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, 00, 00, 00); dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
//subtract a Month //subtract a Month
dtAfter = dtAfter.AddMonths(-1); dtAfter = dtAfter.AddMonths(-1);
@@ -420,7 +422,7 @@ namespace AyaNova.Biz
break; break;
case FilterSpecialToken.ThisMonth: case FilterSpecialToken.ThisMonth:
//start with the first day of this month //start with the first day of this month
dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, 00, 00, 00); dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
//Add one month to dtAfter to get end date //Add one month to dtAfter to get end date
dtBefore = dtAfter.AddMonths(1); dtBefore = dtAfter.AddMonths(1);
@@ -443,13 +445,12 @@ namespace AyaNova.Biz
//case 1155 //case 1155
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(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.FourteenDayWindow: case FilterSpecialToken.FourteenDayWindow:
//start with today zero hour //start with today zero hour
dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, RelativeToday.Day, 00, 00, 00); dtAfter = new DateTime(RelativeToday.Year, RelativeToday.Month, RelativeToday.Day, RelativeToday.Hour, RelativeToday.Minute, 00);
dtAfter = dtAfter.AddDays(-7); dtAfter = dtAfter.AddDays(-7);
//Add 15 days to get end date (zero hour so not really 15 full days) //Add 15 days to get end date (zero hour so not really 15 full days)
@@ -467,54 +468,54 @@ namespace AyaNova.Biz
case FilterSpecialToken.Past: case FilterSpecialToken.Past:
//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 = System.DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Future: case FilterSpecialToken.Future:
//From Now to forever (999 years from now) //From Now to forever (999 years from now)
dtAfter = System.DateTime.Now; dtAfter = RelativeNow;
dtBefore = System.DateTime.Now.AddYears(999); dtBefore = RelativeNow.AddYears(999);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.LastYear: case FilterSpecialToken.LastYear://NOTRIGHT
//From zero hour january 1 a year ago //From zero hour january 1 a year ago
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
//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(RelativeNow.Year, 1, 1, RelativeToday.Hour, RelativeToday.Minute, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.ThisYear: case FilterSpecialToken.ThisYear:
//From zero hour january 1 this year //From zero hour january 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
//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(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.InTheLast3Months: case FilterSpecialToken.InTheLast3Months:
//From Now minus 3 months //From Now minus 3 months
dtAfter = DateTime.Now.AddMonths(-3); dtAfter = RelativeNow.AddMonths(-3);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.InTheLast6Months: case FilterSpecialToken.InTheLast6Months:
//From Now minus 6 months //From Now minus 6 months
dtAfter = DateTime.Now.AddMonths(-6); dtAfter = RelativeNow.AddMonths(-6);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.InTheLastYear: case FilterSpecialToken.InTheLastYear:
//From Now minus 365 days //From Now minus 365 days
dtAfter = DateTime.Now.AddDays(-365); dtAfter = RelativeNow.AddDays(-365);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
@@ -523,7 +524,7 @@ namespace AyaNova.Biz
case FilterSpecialToken.LastQuarter: case FilterSpecialToken.LastQuarter:
//First determine what quarter we are in now, then get the date range for the quarter before that //First determine what quarter we are in now, then get the date range for the quarter before that
switch (DateTime.Now.Month) switch (RelativeNow.Month)
{ {
//are we in the first quarter? //are we in the first quarter?
case 1: case 1:
@@ -531,9 +532,9 @@ namespace AyaNova.Biz
case 3: case 3:
//Then we need the dates of the last quarter of last year //Then we need the dates of the last quarter of last year
//From zero hour October 1st last year //From zero hour October 1st last year
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 10, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00);
//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(RelativeNow.Year, 1, 1, 00, 00, 00);
break; break;
//are we in the second quarter? //are we in the second quarter?
case 4: case 4:
@@ -541,9 +542,9 @@ namespace AyaNova.Biz
case 6: case 6:
//Then we need this year first quarter JAN-FEB-MAR //Then we need this year first quarter JAN-FEB-MAR
//From zero hour january 1 this year //From zero hour january 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
//To zero hour April 1 this year //To zero hour April 1 this year
dtBefore = new DateTime(DateTime.Now.Year, 4, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00);
break; break;
//Are we in the third quarter? //Are we in the third quarter?
case 7: case 7:
@@ -551,17 +552,17 @@ namespace AyaNova.Biz
case 9: case 9:
//Then we need this year Second quarter APR-MAY-JUN //Then we need this year Second quarter APR-MAY-JUN
//From zero hour April 1 this year //From zero hour April 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 4, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00);
//To zero hour July 1 this year //To zero hour July 1 this year
dtBefore = new DateTime(DateTime.Now.Year, 7, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00);
break; break;
default: default:
//We're in the fourth quarter //We're in the fourth quarter
//Then we need this year Third quarter JUL-AUG-SEP //Then we need this year Third quarter JUL-AUG-SEP
//From zero hour July 1 this year //From zero hour July 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 7, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00);
//To zero hour Oct 1 this year //To zero hour Oct 1 this year
dtBefore = new DateTime(DateTime.Now.Year, 10, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00);
break; break;
} }
@@ -569,106 +570,106 @@ namespace AyaNova.Biz
break; break;
case FilterSpecialToken.YearToDate: case FilterSpecialToken.YearToDate:
//From zero hour january 1 this year //From zero hour january 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
//To now //To now
dtBefore = System.DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.QuarterToDate: case FilterSpecialToken.QuarterToDate:
switch (DateTime.Now.Month) switch (RelativeNow.Month)
{ {
//FirstQuarter to date //FirstQuarter to date
case 1: case 1:
case 2: case 2:
case 3: case 3:
//Jan 1st to now //Jan 1st to now
dtAfter = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
dtBefore = DateTime.Now; dtBefore = RelativeNow;
break; break;
//Second Quarter to date //Second Quarter to date
case 4: case 4:
case 5: case 5:
case 6: case 6:
//April 1st to now //April 1st to now
dtAfter = new DateTime(DateTime.Now.Year, 4, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00);
dtBefore = DateTime.Now; dtBefore = RelativeNow;
break; break;
//Third quarter to date //Third quarter to date
case 7: case 7:
case 8: case 8:
case 9: case 9:
//From July 1 //From July 1
dtAfter = new DateTime(DateTime.Now.Year, 7, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00);
dtBefore = DateTime.Now; dtBefore = RelativeNow;
break; break;
default: default:
//Fourth quarter to date //Fourth quarter to date
//From Oct 1 this year //From Oct 1 this year
dtAfter = new DateTime(DateTime.Now.Year, 10, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00);
dtBefore = DateTime.Now; dtBefore = RelativeNow;
break; break;
} }
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Past90Days: case FilterSpecialToken.Past90Days:
//From Now minus 90 days //From Now minus 90 days
dtAfter = DateTime.Now.AddDays(-90); dtAfter = RelativeNow.AddDays(-90);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Past30Days: case FilterSpecialToken.Past30Days:
//From Now minus 30 days //From Now minus 30 days
dtAfter = DateTime.Now.AddDays(-30); dtAfter = RelativeNow.AddDays(-30);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Past24Hours: case FilterSpecialToken.Past24Hours:
//From Now minus 24 hours //From Now minus 24 hours
dtAfter = DateTime.Now.AddHours(-24); dtAfter = RelativeNow.AddHours(-24);
//To Now //To Now
dtBefore = DateTime.Now; dtBefore = RelativeNow;
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q1ThisYear: case FilterSpecialToken.Q1ThisYear:
dtAfter = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.Year, 4, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q2ThisYear: case FilterSpecialToken.Q2ThisYear:
dtAfter = new DateTime(DateTime.Now.Year, 4, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.Year, 7, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q3ThisYear: case FilterSpecialToken.Q3ThisYear:
dtAfter = new DateTime(DateTime.Now.Year, 7, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.Year, 10, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q4ThisYear: case FilterSpecialToken.Q4ThisYear:
dtAfter = new DateTime(DateTime.Now.Year, 10, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.AddYears(1).Year, 1, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.AddYears(1).Year, 1, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q1LastYear: case FilterSpecialToken.Q1LastYear:
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 1, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.AddYears(-1).Year, 4, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 4, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q2LastYear: case FilterSpecialToken.Q2LastYear:
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 4, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 4, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.AddYears(-1).Year, 7, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 7, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q3LastYear: case FilterSpecialToken.Q3LastYear:
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 7, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 7, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.AddYears(-1).Year, 10, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;
case FilterSpecialToken.Q4LastYear: case FilterSpecialToken.Q4LastYear:
dtAfter = new DateTime(DateTime.Now.AddYears(-1).Year, 10, 1, 00, 00, 00); dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00);
dtBefore = new DateTime(DateTime.Now.Year, 1, 1, 00, 00, 00); dtBefore = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00);
BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore);
break; break;

View File

@@ -188,14 +188,14 @@ namespace AyaNova.Biz
//BUILD WHERE AND APPEND IT //BUILD WHERE AND APPEND IT
q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId); q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId);
//TESTING: // //TESTING:
//TODO: remove this from production build // //TODO: remove this from production build
//LOG THE CRIT AND QUERY // //LOG THE CRIT AND QUERY
ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("WidgetBiz::GetManyAsync"); // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("WidgetBiz::GetManyAsync");
log.LogInformation("Filter criteria:"); // log.LogInformation("Filter criteria:");
log.LogInformation(TheFilter.Filter); // log.LogInformation(TheFilter.Filter);
log.LogInformation("Generated SQL:"); // log.LogInformation("Generated SQL:");
log.LogInformation(q); // log.LogInformation(q);
} }
//BUILD ORDER BY AND APPEND IT //BUILD ORDER BY AND APPEND IT