From 585969a6d3de5609bae7e3eb074ca0db41c67de3 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 16 Jan 2020 19:05:41 +0000 Subject: [PATCH] --- server/AyaNova/biz/WidgetBiz.cs | 50 ++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/server/AyaNova/biz/WidgetBiz.cs b/server/AyaNova/biz/WidgetBiz.cs index 19f438ee..3ab729bc 100644 --- a/server/AyaNova/biz/WidgetBiz.cs +++ b/server/AyaNova/biz/WidgetBiz.cs @@ -8,6 +8,7 @@ using EnumsNET; using AyaNova.Util; using AyaNova.Api.ControllerHelpers; using AyaNova.Models; +using System.Collections.Generic; namespace AyaNova.Biz { @@ -291,22 +292,32 @@ namespace AyaNova.Biz var qFrom = "FROM AWIDGET"; - //WHERE CLAUSE and SORT CLAUSE - FILTER / SORT - var qWhereAndOrderBy = string.Empty; + //FILTER AND SORT + DataFilter TheFilter = null; if (listOptions.DataFilterId > 0) { - var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId); + TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId); + } - //BUILD WHERE AND APPEND IT - qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId); + //WHERE CLAUSE - FILTER + var qWhere = string.Empty; + if (listOptions.DataFilterId > 0) + { + qWhere = SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId); + } + + //ORDER BY CLAUSE - SORT + var qOrderBy = string.Empty; + if (listOptions.DataFilterId > 0) + { //BUILD ORDER BY AND APPEND IT - qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter); + qOrderBy = SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter); } else { //GET DEFAULT ORDER BY - qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DefaultGetManyOrderBy(); + qOrderBy = SqlFilterOrderByBuilder.DefaultGetManyOrderBy(); } //LIMIT AND OFFSET CLAUSE - PAGING @@ -315,27 +326,32 @@ namespace AyaNova.Biz var qLimitOffset = $"LIMIT {listOptions.Limit} OFFSET {listOptions.Offset}"; //PUT IT ALL TOGETHER - var qQuery = $"{qSelectColumns} {qFrom} {qWhereAndOrderBy} {qLimitOffset}"; + var qDataQuery = $"{qSelectColumns} {qFrom} {qWhereAndOrderBy} {qLimitOffset}"; + var qCountQuery = $""; + + List items = new List(); //RUN THE QUERY using (var command = ct.Database.GetDbConnection().CreateCommand()) { ct.Database.OpenConnection(); - command.CommandText = qQuery; + command.CommandText = qDataQuery; using (var dr = command.ExecuteReader()) { while (dr.Read()) { - //Build return here row by row - ; + object[] row = new object[dr.FieldCount]; + dr.GetValues(row); + items.Add(row); } } } long totalRecordCount = 10; - string items = string.Empty; + /* + "SELECT id AS df, name, serial, dollaramount, roles, startdate, active FROM AWIDGET ORDER BY ID DESC LIMIT 2 OFFSET 1" //PAGED FETCH LIST QUERY SELECT a.id, a.active, a.xmin, a.count, a.customfields, a.dollaramount, a.enddate, a.name, a.notes, a.roles, a.serial, a.startdate, a.tags FROM ( @@ -381,10 +397,6 @@ namespace AyaNova.Biz //BUILD THE PAGING LINKS PORTION var pageLinks = new PaginationLinkBuilder(Url, routeName, null, listOptions, totalRecordCount).PagingLinksObject(); - - //BUILD THE RETURN BASED ON TEMPLATE and MINI CONDITIONAL FORMAT - - //BUILD THE COLUMNS RETURN PROPERTY JSON FRAGMENT string ColumnsJSON = string.Empty; if (listOptions.Mini) @@ -403,13 +415,7 @@ namespace AyaNova.Biz //TODO: Genericize the above block of building return when it's working as this code needs to be central and optimized as much as possible - //New return code - // dynamic ret = new JObject(); - // ret.items = new JArray.fromobj(items); - // ret.pageLinks = pageLinks; - // ret.columns=ColumnsJSON; - // return ret.ToString(); ApiPagedResponse pr = new ApiPagedResponse(items, pageLinks, ColumnsJSON); return pr; }