From d1faf35a663f502468774a78117d1a695dc96e1b Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 11 Dec 2018 00:37:17 +0000 Subject: [PATCH] --- .../AyaNova/biz/FilterSqlCriteriaBuilder.cs | 80 ++++++++++--------- server/AyaNova/biz/WidgetBiz.cs | 16 ++-- .../DataFilter/DataFilterFilteringLists.cs | 14 ++-- 3 files changed, 57 insertions(+), 53 deletions(-) diff --git a/server/AyaNova/biz/FilterSqlCriteriaBuilder.cs b/server/AyaNova/biz/FilterSqlCriteriaBuilder.cs index 5d73ad9e..2e1eddd2 100644 --- a/server/AyaNova/biz/FilterSqlCriteriaBuilder.cs +++ b/server/AyaNova/biz/FilterSqlCriteriaBuilder.cs @@ -282,9 +282,11 @@ namespace AyaNova.Biz //So this is the core date time to work off of DateTime RelativeToday = DateTime.Today; DateTime RelativeNow = DateTime.Now; - // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); - // log.LogInformation("RelativeToday (before adjustment):"); - // log.LogInformation(RelativeToday.ToString()); + ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); + log.LogInformation("RelativeToday (before adjustment):"); + log.LogInformation(RelativeToday.ToString()); + log.LogInformation("RelativeNow (before adjustment):"); + log.LogInformation(RelativeNow.ToString()); if (sValue.StartsWith("{[") && sValue.EndsWith("]}")) @@ -295,19 +297,21 @@ namespace AyaNova.Biz var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { tz = m.UserOptions.TimeZoneOffset }).First(); //Add this value to any time's hours to convert to user local time - Double TimeZoneAdjustment=((double)u.tz)*-1; + Double TimeZoneAdjustment = ((double)u.tz) * -1; //Stock times used for many of the tokens: RelativeToday = RelativeToday.AddHours(TimeZoneAdjustment);//flip the sign to adjust towards UTC RelativeNow = RelativeNow.AddHours(TimeZoneAdjustment);//flip the sign to adjust towards UTC - // //TESTING: - // //LOG THE CRIT AND QUERY - // // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); - // log.LogInformation("RelativeToday (adjusted):"); - // log.LogInformation(RelativeToday.ToString()); - // log.LogInformation("Offset used:"); - // log.LogInformation(u.tz.ToString()); + //TESTING: + //LOG THE CRIT AND QUERY + // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("FilterSqlCriteriaBuilder::DataFilterToColumnCriteria"); + log.LogInformation("RelativeToday (adjusted):"); + log.LogInformation(RelativeToday.ToString()); + log.LogInformation("RelativeNow (adjusted):"); + log.LogInformation(RelativeNow.ToString()); + log.LogInformation("Offset used:"); + log.LogInformation(u.tz.ToString()); #region Build criteria for date RANGE TOKEN specified //Used as the basis point @@ -450,7 +454,7 @@ namespace AyaNova.Biz //case 1155 dtAfter = dtAfter.AddSeconds(-1); //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); break; case FilterSpecialToken.FourteenDayWindow: @@ -473,14 +477,14 @@ namespace AyaNova.Biz case FilterSpecialToken.Past: //Forever up to Now dtAfter = new DateTime(1753, 1, 2, 00, 00, 00); - dtBefore = RelativeNow; + dtBefore = DateTime.UtcNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Future: //From Now to forever (999 years from now) - dtAfter = RelativeNow; - dtBefore = RelativeNow.AddYears(999); + dtAfter = DateTime.UtcNow; + dtBefore = DateTime.UtcNow.AddYears(999); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; @@ -490,7 +494,7 @@ namespace AyaNova.Biz //To zero hour January 1 this year dtBefore = new DateTime(RelativeNow.Year, 1, 1, 0, 0, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); - break; + break; case FilterSpecialToken.ThisYear: //From zero hour january 1 this year @@ -502,9 +506,9 @@ namespace AyaNova.Biz case FilterSpecialToken.InTheLast3Months: //From Now minus 3 months - dtAfter = RelativeNow.AddMonths(-3);//relative now is already adjusted for time zone so no need to adjust it again + dtAfter = DateTime.UtcNow.AddMonths(-3); //To Now - dtBefore = RelativeNow; + dtBefore = DateTime.UtcNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; @@ -537,7 +541,7 @@ namespace AyaNova.Biz case 3: //Then we need the dates of the last quarter of last year //From zero hour October 1st last year - dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);; + dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; //To zero hour January 1 this year dtBefore = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); break; @@ -547,7 +551,7 @@ namespace AyaNova.Biz case 6: //Then we need this year first quarter JAN-FEB-MAR //From zero hour january 1 this year - 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 April 1 this year dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); break; @@ -557,7 +561,7 @@ namespace AyaNova.Biz case 9: //Then we need this year Second quarter APR-MAY-JUN //From zero hour April 1 this year - 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); ; //To zero hour July 1 this year dtBefore = new DateTime(RelativeNow.Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); break; @@ -565,7 +569,7 @@ namespace AyaNova.Biz //We're in the fourth quarter //Then we need this year Third quarter JUL-AUG-SEP //From zero hour July 1 this year - 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); ; //To zero hour Oct 1 this year dtBefore = new DateTime(RelativeNow.Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); break; @@ -575,7 +579,7 @@ namespace AyaNova.Biz break; case FilterSpecialToken.YearToDate: //From zero hour january 1 this year - 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 dtBefore = RelativeNow; BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); @@ -588,7 +592,7 @@ namespace AyaNova.Biz case 2: case 3: //Jan 1st to now - 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); ; dtBefore = RelativeNow; break; //Second Quarter to date @@ -596,7 +600,7 @@ namespace AyaNova.Biz case 5: case 6: //April 1st to now - 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 = RelativeNow; break; //Third quarter to date @@ -604,13 +608,13 @@ namespace AyaNova.Biz case 8: case 9: //From July 1 - 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 = RelativeNow; break; default: //Fourth quarter to date //From Oct 1 this year - 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 = RelativeNow; break; } @@ -638,42 +642,42 @@ namespace AyaNova.Biz BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q1ThisYear: - 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); ; dtBefore = new DateTime(RelativeNow.Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q2ThisYear: - 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, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q3ThisYear: - 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, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q4ThisYear: - 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.AddYears(1).Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q1LastYear: - dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);; + dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 1, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 4, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q2LastYear: - dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);; + dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 4, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 7, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q3LastYear: - dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);; + dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 7, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; dtBefore = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; case FilterSpecialToken.Q4LastYear: - dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment);; + dtAfter = new DateTime(RelativeNow.AddYears(-1).Year, 10, 1, 00, 00, 00).AddSeconds(-1).AddHours(TimeZoneAdjustment); ; dtBefore = new DateTime(RelativeNow.Year, 1, 1, 00, 00, 00).AddHours(TimeZoneAdjustment); BuildBetweenTwoDatesFragment(sColumn, sb, dtAfter, dtBefore); break; @@ -842,18 +846,18 @@ namespace AyaNova.Biz } - //This is only used by the token date query code above and that code doesn't convert to UTC time to match the DB so this function will handle that + //This is only used by the token date query code above and that code does convert to UTC time to match the DB so this function will not need to handle that //The other non tokenized date criteria builders are all working with dates that come from the client in UTC already and they don't use this method //so nothing required there private static void BuildBetweenTwoDatesFragment(string sColumn, StringBuilder sb, DateTime dtAfter, DateTime dtBefore) { sb.Append(">'"); - sb.Append(PostgresDateFormat(dtAfter.ToUniversalTime())); + sb.Append(PostgresDateFormat(dtAfter)); sb.Append("' AND "); sb.Append(sColumn); sb.Append(" "); sb.Append("<'"); - sb.Append(PostgresDateFormat(dtBefore.ToUniversalTime())); + sb.Append(PostgresDateFormat(dtBefore)); sb.Append("'"); } diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index c7f0e860..4e5476d5 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -188,14 +188,14 @@ namespace AyaNova.Biz //BUILD WHERE AND APPEND IT q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId); - // //TESTING: - // //TODO: remove this from production build - // //LOG THE CRIT AND QUERY - // ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("WidgetBiz::GetManyAsync"); - // log.LogInformation("Filter criteria:"); - // log.LogInformation(TheFilter.Filter); - // log.LogInformation("Generated SQL:"); - // log.LogInformation(q); + //TESTING: + //TODO: remove this from production build + //LOG THE CRIT AND QUERY + ILogger log = AyaNova.Util.ApplicationLogging.CreateLogger("WidgetBiz::GetManyAsync"); + log.LogInformation("Filter criteria:"); + log.LogInformation(TheFilter.Filter); + log.LogInformation("Generated SQL:"); + log.LogInformation(q); } //BUILD ORDER BY AND APPEND IT diff --git a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs index c3748c04..d9e706fd 100644 --- a/test/raven-integration/DataFilter/DataFilterFilteringLists.cs +++ b/test/raven-integration/DataFilter/DataFilterFilteringLists.cs @@ -1647,9 +1647,9 @@ namespace raven_integration //Excluded widget w.name = Util.Uniquify(WidgetNameStart); - //8 days ago will be outside the 14 day window - w.startDate = DateTime.Now.AddDays(-8).ToUniversalTime(); - w.endDate = DateTime.Now.AddDays(-8).AddHours(1).ToUniversalTime(); + //9 days ago will be outside the 14 day window + w.startDate = DateTime.Now.AddDays(-9).ToUniversalTime(); + w.endDate = DateTime.Now.AddDays(-9).AddHours(1).ToUniversalTime(); a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString()); @@ -2154,8 +2154,8 @@ namespace raven_integration dynamic w = new JObject(); w.name = Util.Uniquify(WidgetNameStart); //#### - w.startDate = DateTime.Now.AddMonths(-3).AddMinutes(5).ToUniversalTime(); - w.endDate = DateTime.Now.AddMonths(-3).AddMinutes(5).AddHours(1).ToUniversalTime(); + w.startDate = DateTime.UtcNow.AddMonths(-3).AddMinutes(5); + w.endDate = DateTime.UtcNow.AddMonths(-3).AddMinutes(5).AddHours(1); ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString()); Util.ValidateDataReturnResponseOk(a); @@ -2164,8 +2164,8 @@ namespace raven_integration //Excluded widget w.name = Util.Uniquify(WidgetNameStart); //#### - w.startDate = DateTime.Now.AddMonths(-3).AddMinutes(-5).ToUniversalTime(); - w.endDate = DateTime.Now.AddMonths(-3).AddMinutes(-5).AddHours(1).ToUniversalTime(); + w.startDate = DateTime.UtcNow.AddMonths(-3).AddMinutes(-5); + w.endDate = DateTime.UtcNow.AddMonths(-3).AddMinutes(-5).AddHours(1); a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), w.ToString()); Util.ValidateDataReturnResponseOk(a);