This commit is contained in:
2018-12-10 17:38:47 +00:00
parent 221f8f8091
commit 1321e224b8
4 changed files with 17 additions and 7 deletions

View File

@@ -355,12 +355,11 @@ namespace AyaNova
var ct = context.RequestServices.GetService<AyContext>(); var ct = context.RequestServices.GetService<AyContext>();
//get the user record //get the user record
var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, id = m.Id, localeId = m.LocaleId, tzOffset = m.UserOptions.TimeZoneOffset }).First(); var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, id = m.Id, localeId = m.LocaleId }).First();
context.Request.HttpContext.Items["AY_ROLES"] = u.roles; context.Request.HttpContext.Items["AY_ROLES"] = u.roles;
context.Request.HttpContext.Items["AY_USERNAME"] = u.name; context.Request.HttpContext.Items["AY_USERNAME"] = u.name;
context.Request.HttpContext.Items["AY_USER_ID"] = u.id; context.Request.HttpContext.Items["AY_USER_ID"] = u.id;
context.Request.HttpContext.Items["AY_LOCALE_ID"] = u.localeId; context.Request.HttpContext.Items["AY_LOCALE_ID"] = u.localeId;
context.Request.HttpContext.Items["AY_USER_TZ_OFFSET"] = u.tzOffset;

View File

@@ -3,13 +3,15 @@ using System;
using System.Globalization; using System.Globalization;
using System.Text; using System.Text;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System.Linq;
using Microsoft.EntityFrameworkCore;
namespace AyaNova.Biz namespace AyaNova.Biz
{ {
public static class FilterSqlCriteriaBuilder public static class FilterSqlCriteriaBuilder
{ {
//"SELECT *, xmin FROM AWIDGET name Like 'BoolDataFilterTest%' AND active = true AND " //"SELECT *, xmin FROM AWIDGET name Like 'BoolDataFilterTest%' AND active = true AND "
public static string DataFilterToSQLCriteria(AyaNova.Models.DataFilter dataFilter, FilterOptions filterOptions, decimal timeZoneOffset) public static string DataFilterToSQLCriteria(AyaNova.Models.DataFilter dataFilter, FilterOptions filterOptions, long userId)
{ {
if (string.IsNullOrWhiteSpace(dataFilter.Filter)) if (string.IsNullOrWhiteSpace(dataFilter.Filter))
@@ -38,7 +40,7 @@ namespace AyaNova.Biz
var dataType = filterOptions.Flds.Find(x => x.Fld == fld).Type; var dataType = filterOptions.Flds.Find(x => x.Fld == fld).Type;
sb.Append(DataFilterToColumnCriteria(fld, dataType, opType, val, tagList, timeZoneOffset)); sb.Append(DataFilterToColumnCriteria(fld, dataType, opType, val, tagList, userId));
if (i < FilterArray.Count - 1) if (i < FilterArray.Count - 1)
{ {
sb.Append(" AND "); sb.Append(" AND ");
@@ -51,7 +53,7 @@ namespace AyaNova.Biz
/// <summary> /// <summary>
/// Translate DataFilter to Postgres friendly SQL criteria /// Translate DataFilter to Postgres friendly SQL criteria
/// </summary> /// </summary>
private static string DataFilterToColumnCriteria(string sColumn, string sDataType, string sOperator, string sValue, List<string> sTags, decimal timeZoneOffset)//, bool IsCompound) private static string DataFilterToColumnCriteria(string sColumn, string sDataType, 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();
@@ -274,11 +276,20 @@ namespace AyaNova.Biz
//suitable for the database to handle as all database dates are in UTC //suitable for the database to handle as all database dates are in UTC
//Local display and parsing will be considered a CLIENT issue at all times //Local display and parsing will be considered a CLIENT issue at all times
//HOWEVER, if it's a relative date filter TOKEN like "nextMonth" then the users time zone offset will be taken into consideration
//So this is the core date time to work off of
DateTime RelativeNow=DateTime.Now; DateTime RelativeNow=DateTime.Now;
if (sValue.StartsWith("{[") && sValue.EndsWith("]}")) if (sValue.StartsWith("{[") && sValue.EndsWith("]}"))
{ {
//Need to adjust RelativeNow to users time frame
//Fetch useroptions object and relative time offset
AyaNova.Models.AyContext ct = AyaNova.Util.ServiceProviderProvider.DBContext;
var u = ct.User.AsNoTracking().Where(a => a.Id == userId).Select(m => new { roles = m.Roles, name = m.Name, id = m.Id, localeId = m.LocaleId }).First();
#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
System.DateTime dtAfter; System.DateTime dtAfter;

View File

@@ -186,7 +186,7 @@ namespace AyaNova.Biz
var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == pagingOptions.DataFilterId); var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == pagingOptions.DataFilterId);
//BUILD WHERE AND APPEND IT //BUILD WHERE AND APPEND IT
q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions()); q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId);
//TESTING: //TESTING:
//LOG THE CRIT AND QUERY //LOG THE CRIT AND QUERY