This commit is contained in:
2018-12-12 23:26:51 +00:00
parent fa3eab11c2
commit 4060d8900f
8 changed files with 83 additions and 58 deletions

View File

@@ -13,6 +13,9 @@ namespace AyaNova.Biz
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

View File

@@ -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

View File

@@ -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,6 +141,27 @@ 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)

View File

@@ -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"
} }

View File

@@ -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"
} }

View File

@@ -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"
} }

View File

@@ -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"
} }

View File

@@ -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