This commit is contained in:
@@ -6,13 +6,16 @@ namespace AyaNova.Biz
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(listKey))
|
if (string.IsNullOrWhiteSpace(listKey))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
switch (listKey)
|
switch (listKey)
|
||||||
{
|
{
|
||||||
//All listkeys are always lower case
|
//All listkeys are always lower case
|
||||||
|
|
||||||
case "widget":
|
case "widget":
|
||||||
return WidgetBiz.FilterOptions();
|
return WidgetBiz.FilterOptions();
|
||||||
|
case "user":
|
||||||
|
return UserBiz.FilterOptions();
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return null;//not found
|
return null;//not found
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ namespace AyaNova.Biz
|
|||||||
//Also all list keys are lower case for consistency
|
//Also all list keys are lower case for consistency
|
||||||
FilterOptions f = new FilterOptions("user");
|
FilterOptions f = new FilterOptions("user");
|
||||||
f.
|
f.
|
||||||
|
AddField("id", "ID", AyDataType.Integer).
|
||||||
AddField("name", "CommonName", AyDataType.Text).
|
AddField("name", "CommonName", AyDataType.Text).
|
||||||
AddField("active", "CommonActive", AyDataType.Bool).
|
AddField("active", "CommonActive", AyDataType.Bool).
|
||||||
AddField("tags", "Tags", AyDataType.Tags).
|
AddField("tags", "Tags", AyDataType.Tags).
|
||||||
@@ -219,11 +220,11 @@ namespace AyaNova.Biz
|
|||||||
.CountAsync();
|
.CountAsync();
|
||||||
#pragma warning restore EF1000
|
#pragma warning restore EF1000
|
||||||
|
|
||||||
|
int itemCount = items.Count();//totalRecordCount doesn't skip and take so not usable here
|
||||||
var cleanedItems = new System.Object[] { };
|
var cleanedItems = new System.Object[itemCount];
|
||||||
foreach (User item in items)
|
for (int i = 0; i < itemCount; i++)
|
||||||
{
|
{
|
||||||
cleanedItems.Append(CleanUserForReturn(item));
|
cleanedItems[i] = CleanUserForReturn(items[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pageLinks = new PaginationLinkBuilder(Url, routeName, null, pagingOptions, totalRecordCount).PagingLinksObject();
|
var pageLinks = new PaginationLinkBuilder(Url, routeName, null, pagingOptions, totalRecordCount).PagingLinksObject();
|
||||||
@@ -421,12 +422,7 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
if (isNew) //Yes, no currentObj
|
if (isNew) //Yes, no currentObj
|
||||||
{
|
{
|
||||||
//Not sure why we would care about this particular rule or why I added it? Maybe it's from widget?
|
|
||||||
// //NEW Users must be active
|
|
||||||
// if (((bool)proposedObj.Active) == false)
|
|
||||||
// {
|
|
||||||
// AddError(ValidationErrorType.InvalidValue, "Active", "New User must be active");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//OwnerId required
|
//OwnerId required
|
||||||
|
|||||||
@@ -17,27 +17,6 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
internal class WidgetBiz : BizObject, IJobObject
|
internal class WidgetBiz : BizObject, IJobObject
|
||||||
{
|
{
|
||||||
public static FilterOptions FilterOptions(long localizeToLocaleId = 0)
|
|
||||||
{
|
|
||||||
//NOTE: All column names are lowercase to conform with Postgres AyaNova DB which uses lowercase for all identifiers
|
|
||||||
//Also all list keys are lower case for consistency
|
|
||||||
FilterOptions f = new FilterOptions("widget");
|
|
||||||
f.
|
|
||||||
AddField("name", "WidgetName", AyDataType.Text).
|
|
||||||
AddField("serial", "WidgetSerial", AyDataType.Integer).
|
|
||||||
AddField("notes", "WidgetNotes", AyDataType.Text).
|
|
||||||
AddField("dollaramount", "WidgetDollarAmount", AyDataType.Decimal).
|
|
||||||
AddField("active", "CommonActive", AyDataType.Bool).
|
|
||||||
AddField("startdate", "WidgetStartDate", AyDataType.Date).
|
|
||||||
AddField("count", "WidgetCount", AyDataType.Integer).
|
|
||||||
AddField("tags", "Tags", AyDataType.Tags).
|
|
||||||
AddField("enddate", "WidgetEndDate", AyDataType.Date);
|
|
||||||
|
|
||||||
if (localizeToLocaleId != 0)
|
|
||||||
f.Localize(localizeToLocaleId);
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
internal WidgetBiz(AyContext dbcontext, long currentUserId, long userLocaleId, AuthorizationRoles UserRoles)
|
internal WidgetBiz(AyContext dbcontext, long currentUserId, long userLocaleId, AuthorizationRoles UserRoles)
|
||||||
{
|
{
|
||||||
@@ -162,13 +141,34 @@ namespace AyaNova.Biz
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static FilterOptions FilterOptions(long localizeToLocaleId = 0)
|
||||||
|
{
|
||||||
|
//NOTE: All column names are lowercase to conform with Postgres AyaNova DB which uses lowercase for all identifiers
|
||||||
|
//Also all list keys are lower case for consistency
|
||||||
|
FilterOptions f = new FilterOptions("widget");
|
||||||
|
f.
|
||||||
|
AddField("id", "ID", AyDataType.Integer).
|
||||||
|
AddField("name", "WidgetName", AyDataType.Text).
|
||||||
|
AddField("serial", "WidgetSerial", AyDataType.Integer).
|
||||||
|
AddField("notes", "WidgetNotes", AyDataType.Text).
|
||||||
|
AddField("dollaramount", "WidgetDollarAmount", AyDataType.Decimal).
|
||||||
|
AddField("active", "CommonActive", AyDataType.Bool).
|
||||||
|
AddField("startdate", "WidgetStartDate", AyDataType.Date).
|
||||||
|
AddField("count", "WidgetCount", AyDataType.Integer).
|
||||||
|
AddField("tags", "Tags", AyDataType.Tags).
|
||||||
|
AddField("enddate", "WidgetEndDate", AyDataType.Date);
|
||||||
|
|
||||||
|
if (localizeToLocaleId != 0)
|
||||||
|
f.Localize(localizeToLocaleId);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
//get many (paged)
|
//get many (paged)
|
||||||
internal async Task<ApiPagedResponse<Widget>> GetManyAsync(IUrlHelper Url, string routeName, PagingOptions pagingOptions)
|
internal async Task<ApiPagedResponse<Widget>> GetManyAsync(IUrlHelper Url, string routeName, PagingOptions pagingOptions)
|
||||||
{
|
{
|
||||||
pagingOptions.Offset = pagingOptions.Offset ?? PagingOptions.DefaultOffset;
|
pagingOptions.Offset = pagingOptions.Offset ?? PagingOptions.DefaultOffset;
|
||||||
pagingOptions.Limit = pagingOptions.Limit ?? PagingOptions.DefaultLimit;
|
pagingOptions.Limit = pagingOptions.Limit ?? PagingOptions.DefaultLimit;
|
||||||
|
|
||||||
//BUILD THE QUERY
|
//BUILD THE QUERY
|
||||||
//base query
|
//base query
|
||||||
var q = "SELECT *, xmin FROM AWIDGET ";
|
var q = "SELECT *, xmin FROM AWIDGET ";
|
||||||
@@ -182,7 +182,7 @@ namespace AyaNova.Biz
|
|||||||
q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId);
|
q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId);
|
||||||
|
|
||||||
//BUILD ORDER BY AND APPEND IT
|
//BUILD ORDER BY AND APPEND IT
|
||||||
q = q + FilterSqlOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
|
q = q + FilterSqlOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1441,5 +1441,6 @@
|
|||||||
"WidgetEndDate":"Enddatum",
|
"WidgetEndDate":"Enddatum",
|
||||||
"WidgetNotes":"Notizen",
|
"WidgetNotes":"Notizen",
|
||||||
"RowsPerPage":"Zeilen pro Seite",
|
"RowsPerPage":"Zeilen pro Seite",
|
||||||
"Tags":"Kategorien"
|
"Tags":"Kategorien",
|
||||||
|
"ID":"ID"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1440,7 +1440,8 @@
|
|||||||
"WidgetEndDate":"End",
|
"WidgetEndDate":"End",
|
||||||
"WidgetNotes":"Notes",
|
"WidgetNotes":"Notes",
|
||||||
"RowsPerPage":"Rows per page",
|
"RowsPerPage":"Rows per page",
|
||||||
"Tags":"Tags"
|
"Tags":"Tags",
|
||||||
|
"ID":"ID"
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1441,5 +1441,6 @@
|
|||||||
"WidgetEndDate":"Fecha de fin",
|
"WidgetEndDate":"Fecha de fin",
|
||||||
"WidgetNotes":"Notas",
|
"WidgetNotes":"Notas",
|
||||||
"RowsPerPage":"Filas por página",
|
"RowsPerPage":"Filas por página",
|
||||||
"Tags":"Etiquetas"
|
"Tags":"Etiquetas",
|
||||||
|
"ID":"ID"
|
||||||
}
|
}
|
||||||
@@ -1440,5 +1440,6 @@
|
|||||||
"WidgetEndDate":"Date de fin",
|
"WidgetEndDate":"Date de fin",
|
||||||
"WidgetNotes":"Notes",
|
"WidgetNotes":"Notes",
|
||||||
"RowsPerPage":"Lignes par page",
|
"RowsPerPage":"Lignes par page",
|
||||||
"Tags":"Balises"
|
"Tags":"Balises",
|
||||||
|
"ID":"ID"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ namespace raven_integration
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -331,35 +331,48 @@ namespace raven_integration
|
|||||||
|
|
||||||
dynamic d = new JObject();
|
dynamic d = new JObject();
|
||||||
d.name = Util.Uniquify(ObjectNameStart);
|
d.name = Util.Uniquify(ObjectNameStart);
|
||||||
d.startDate = DateTime.Now;
|
d.active = false;
|
||||||
d.endDate = DateTime.Now.AddHours(1);
|
d.login = Util.Uniquify("LOGIN");
|
||||||
|
d.password = Util.Uniquify("PASSWORD");
|
||||||
|
d.roles = 0;//norole
|
||||||
|
d.localeId = 1;//random locale
|
||||||
|
d.userType = 3;//non scheduleable
|
||||||
|
|
||||||
ApiResponse a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
ApiResponse a = await Util.PostAsync("User", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
||||||
Util.ValidateDataReturnResponseOk(a);
|
Util.ValidateDataReturnResponseOk(a);
|
||||||
FirstInOrdertId = a.ObjectResponse["data"]["id"].Value<long>();
|
FirstInOrdertId = a.ObjectResponse["data"]["id"].Value<long>();
|
||||||
|
|
||||||
d = new JObject();
|
d = new JObject();
|
||||||
d.name = Util.Uniquify(ObjectNameStart);
|
d.name = Util.Uniquify(ObjectNameStart);
|
||||||
d.startDate = DateTime.Now.AddHours(1);
|
d.login = Util.Uniquify("LOGIN");
|
||||||
d.endDate = DateTime.Now.AddHours(2);
|
d.password = Util.Uniquify("PASSWORD");
|
||||||
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
d.roles = 0;//norole
|
||||||
|
d.localeId = 1;//random locale
|
||||||
|
d.userType = 3;//non scheduleable
|
||||||
|
d.active = true;
|
||||||
|
|
||||||
|
a = await Util.PostAsync("User", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
||||||
Util.ValidateDataReturnResponseOk(a);
|
Util.ValidateDataReturnResponseOk(a);
|
||||||
SecondInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
|
ThirdInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
|
||||||
|
|
||||||
d = new JObject();
|
d = new JObject();
|
||||||
d.name = Util.Uniquify(ObjectNameStart);
|
d.name = Util.Uniquify(ObjectNameStart);
|
||||||
d.startDate = DateTime.Now.AddHours(2);
|
d.login = Util.Uniquify("LOGIN");
|
||||||
d.endDate = DateTime.Now.AddHours(3);
|
d.password = Util.Uniquify("PASSWORD");
|
||||||
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
d.roles = 0;//norole
|
||||||
|
d.localeId = 1;//random locale
|
||||||
|
d.userType = 3;//non scheduleable
|
||||||
|
d.active = false;
|
||||||
|
a = await Util.PostAsync("User", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
||||||
Util.ValidateDataReturnResponseOk(a);
|
Util.ValidateDataReturnResponseOk(a);
|
||||||
ThirdInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
|
SecondInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
|
||||||
|
|
||||||
|
|
||||||
//CREATE FILTER
|
//CREATE FILTER
|
||||||
d = new JObject();
|
d = new JObject();
|
||||||
d.name = Util.Uniquify(ObjectNameStart);
|
d.name = Util.Uniquify(ObjectNameStart);
|
||||||
d["public"] = true;
|
d["public"] = true;
|
||||||
d.listKey = "widget";
|
d.listKey = "user";
|
||||||
|
|
||||||
//FILTER IN BY NAME FOR TESTING THIS RUN ONLY
|
//FILTER IN BY NAME FOR TESTING THIS RUN ONLY
|
||||||
dynamic dfilter = new JArray();
|
dynamic dfilter = new JArray();
|
||||||
@@ -371,12 +384,21 @@ namespace raven_integration
|
|||||||
dfilter.Add(DataFilterNameStart);
|
dfilter.Add(DataFilterNameStart);
|
||||||
d.filter = dfilter.ToString();
|
d.filter = dfilter.ToString();
|
||||||
|
|
||||||
//SORT ORDER ###################
|
|
||||||
dynamic dsortarray = new JArray();
|
dynamic dsortarray = new JArray();
|
||||||
|
|
||||||
|
//SORT ORDER ###################
|
||||||
|
//sort by active then by ID
|
||||||
|
|
||||||
dynamic dsort = new JObject();
|
dynamic dsort = new JObject();
|
||||||
dsort.fld = "startdate";
|
dsort.fld = "active";
|
||||||
dsort.dir = "+";
|
dsort.dir = "+";
|
||||||
dsortarray.Add(dsort);
|
dsortarray.Add(dsort);
|
||||||
|
|
||||||
|
dsort = new JObject();
|
||||||
|
dsort.fld = "id";
|
||||||
|
dsort.dir = "+";
|
||||||
|
dsortarray.Add(dsort);
|
||||||
|
|
||||||
d.sort = dsortarray.ToString();
|
d.sort = dsortarray.ToString();
|
||||||
|
|
||||||
a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
a = await Util.PostAsync("DataFilter", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
|
||||||
@@ -385,7 +407,7 @@ namespace raven_integration
|
|||||||
long DataFilterId = a.ObjectResponse["data"]["id"].Value<long>();
|
long DataFilterId = a.ObjectResponse["data"]["id"].Value<long>();
|
||||||
|
|
||||||
//NOW FETCH WIDGET LIST WITH FILTER
|
//NOW FETCH WIDGET LIST WITH FILTER
|
||||||
a = await Util.GetAsync($"Widget/listwidgets?Offset=0&Limit=999&DataFilterId={DataFilterId.ToString()}", await Util.GetTokenAsync("manager", "l3tm3in"));
|
a = await Util.GetAsync($"User/listusers?Offset=0&Limit=999&DataFilterId={DataFilterId.ToString()}", await Util.GetTokenAsync("manager", "l3tm3in"));
|
||||||
Util.ValidateDataReturnResponseOk(a);
|
Util.ValidateDataReturnResponseOk(a);
|
||||||
Util.ValidateHTTPStatusCode(a, 200);
|
Util.ValidateHTTPStatusCode(a, 200);
|
||||||
|
|
||||||
@@ -398,13 +420,13 @@ namespace raven_integration
|
|||||||
a.ObjectResponse["data"][2]["id"].Value<long>().Should().Be(ThirdInOrderId);
|
a.ObjectResponse["data"][2]["id"].Value<long>().Should().Be(ThirdInOrderId);
|
||||||
|
|
||||||
|
|
||||||
a = await Util.DeleteAsync("Widget/" + FirstInOrdertId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
a = await Util.DeleteAsync("User/" + FirstInOrdertId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
||||||
Util.ValidateHTTPStatusCode(a, 204);
|
Util.ValidateHTTPStatusCode(a, 204);
|
||||||
|
|
||||||
a = await Util.DeleteAsync("Widget/" + SecondInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
a = await Util.DeleteAsync("User/" + SecondInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
||||||
Util.ValidateHTTPStatusCode(a, 204);
|
Util.ValidateHTTPStatusCode(a, 204);
|
||||||
|
|
||||||
a = await Util.DeleteAsync("Widget/" + ThirdInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
a = await Util.DeleteAsync("User/" + ThirdInOrderId.ToString(), await Util.GetTokenAsync("manager", "l3tm3in"));
|
||||||
Util.ValidateHTTPStatusCode(a, 204);
|
Util.ValidateHTTPStatusCode(a, 204);
|
||||||
|
|
||||||
//DELETE DATAFILTER
|
//DELETE DATAFILTER
|
||||||
|
|||||||
Reference in New Issue
Block a user