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

@@ -6,13 +6,16 @@ namespace AyaNova.Biz
{
if (string.IsNullOrWhiteSpace(listKey))
return null;
switch (listKey)
{
//All listkeys are always lower case
case "widget":
return WidgetBiz.FilterOptions();
case "user":
return UserBiz.FilterOptions();
default:
return null;//not found

View File

@@ -151,6 +151,7 @@ namespace AyaNova.Biz
//Also all list keys are lower case for consistency
FilterOptions f = new FilterOptions("user");
f.
AddField("id", "ID", AyDataType.Integer).
AddField("name", "CommonName", AyDataType.Text).
AddField("active", "CommonActive", AyDataType.Bool).
AddField("tags", "Tags", AyDataType.Tags).
@@ -219,11 +220,11 @@ namespace AyaNova.Biz
.CountAsync();
#pragma warning restore EF1000
var cleanedItems = new System.Object[] { };
foreach (User item in items)
int itemCount = items.Count();//totalRecordCount doesn't skip and take so not usable here
var cleanedItems = new System.Object[itemCount];
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();
@@ -421,12 +422,7 @@ namespace AyaNova.Biz
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

View File

@@ -17,27 +17,6 @@ namespace AyaNova.Biz
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)
{
@@ -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)
internal async Task<ApiPagedResponse<Widget>> GetManyAsync(IUrlHelper Url, string routeName, PagingOptions pagingOptions)
{
pagingOptions.Offset = pagingOptions.Offset ?? PagingOptions.DefaultOffset;
pagingOptions.Limit = pagingOptions.Limit ?? PagingOptions.DefaultLimit;
//BUILD THE QUERY
//base query
var q = "SELECT *, xmin FROM AWIDGET ";
@@ -182,7 +182,7 @@ namespace AyaNova.Biz
q = q + FilterSqlCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, WidgetBiz.FilterOptions(), UserId);
//BUILD ORDER BY AND APPEND IT
q = q + FilterSqlOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
q = q + FilterSqlOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
}
else
{

View File

@@ -1441,5 +1441,6 @@
"WidgetEndDate":"Enddatum",
"WidgetNotes":"Notizen",
"RowsPerPage":"Zeilen pro Seite",
"Tags":"Kategorien"
"Tags":"Kategorien",
"ID":"ID"
}

View File

@@ -1440,7 +1440,8 @@
"WidgetEndDate":"End",
"WidgetNotes":"Notes",
"RowsPerPage":"Rows per page",
"Tags":"Tags"
"Tags":"Tags",
"ID":"ID"
}

View File

@@ -1441,5 +1441,6 @@
"WidgetEndDate":"Fecha de fin",
"WidgetNotes":"Notas",
"RowsPerPage":"Filas por página",
"Tags":"Etiquetas"
"Tags":"Etiquetas",
"ID":"ID"
}

View File

@@ -1440,5 +1440,6 @@
"WidgetEndDate":"Date de fin",
"WidgetNotes":"Notes",
"RowsPerPage":"Lignes par page",
"Tags":"Balises"
"Tags":"Balises",
"ID":"ID"
}

View File

@@ -315,7 +315,7 @@ namespace raven_integration
/// <summary>
/// <summary>
///
/// </summary>
[Fact]
@@ -331,35 +331,48 @@ namespace raven_integration
dynamic d = new JObject();
d.name = Util.Uniquify(ObjectNameStart);
d.startDate = DateTime.Now;
d.endDate = DateTime.Now.AddHours(1);
d.active = false;
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);
FirstInOrdertId = a.ObjectResponse["data"]["id"].Value<long>();
d = new JObject();
d.name = Util.Uniquify(ObjectNameStart);
d.startDate = DateTime.Now.AddHours(1);
d.endDate = DateTime.Now.AddHours(2);
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
d.login = Util.Uniquify("LOGIN");
d.password = Util.Uniquify("PASSWORD");
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);
SecondInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
ThirdInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
d = new JObject();
d.name = Util.Uniquify(ObjectNameStart);
d.startDate = DateTime.Now.AddHours(2);
d.endDate = DateTime.Now.AddHours(3);
a = await Util.PostAsync("Widget", await Util.GetTokenAsync("manager", "l3tm3in"), d.ToString());
d.login = Util.Uniquify("LOGIN");
d.password = Util.Uniquify("PASSWORD");
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);
ThirdInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
SecondInOrderId = a.ObjectResponse["data"]["id"].Value<long>();
//CREATE FILTER
d = new JObject();
d.name = Util.Uniquify(ObjectNameStart);
d["public"] = true;
d.listKey = "widget";
d.listKey = "user";
//FILTER IN BY NAME FOR TESTING THIS RUN ONLY
dynamic dfilter = new JArray();
@@ -371,12 +384,21 @@ namespace raven_integration
dfilter.Add(DataFilterNameStart);
d.filter = dfilter.ToString();
//SORT ORDER ###################
dynamic dsortarray = new JArray();
//SORT ORDER ###################
//sort by active then by ID
dynamic dsort = new JObject();
dsort.fld = "startdate";
dsort.fld = "active";
dsort.dir = "+";
dsortarray.Add(dsort);
dsort = new JObject();
dsort.fld = "id";
dsort.dir = "+";
dsortarray.Add(dsort);
d.sort = dsortarray.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>();
//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.ValidateHTTPStatusCode(a, 200);
@@ -398,13 +420,13 @@ namespace raven_integration
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);
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);
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);
//DELETE DATAFILTER