private static Tuple <Response, List <T> > GetPayloadList <T>(ServerRowModel payload) { var journals = Utils.PostWebApi("FinanceWebApi", JournalUrl, payload); Task.WaitAll(journals); var response = JsonConvert.DeserializeObject <Response>(journals.Result); var serializedPayload = JsonConvert.SerializeObject(response.payload); var result = JsonConvert.DeserializeObject <List <T> >(serializedPayload); return(new Tuple <Response, List <T> >(response, result)); }
private static string CreateGroupBySql(ServerRowModel obj) { if (IsDoingGrouping(obj.rowGroupCols, obj.groupKeys)) { List <string> colsToGroupBy = new List <string>(); int count = obj.groupKeys.Count == 0 ? 0 : obj.groupKeys.Count; var rowGroupCol = obj.rowGroupCols[count]; colsToGroupBy.Add($"[{rowGroupCol.field}]"); StringBuilder query = new StringBuilder(" group by "); query.Append(string.Join(",", colsToGroupBy.Select(x => x)) + " "); return(query.ToString()); } else { // select all columns return(""); } }
public static int GetRowCount(ServerRowModel request, DataTable results) { if (results.Rows.Count == 0) { return(0); } int currentLastRow = request.startRow + results.Rows.Count; if (currentLastRow < request.endRow) { return(currentLastRow); } else { return(-1); } }
internal void TaxLotReport() { try { IReport report = new SpreadSheet(); ServerRowModel layout = new ServerRowModel(); var layoutJSON = GetLayout("Taxlot Status"); layout.gridColDefs = JsonConvert.DeserializeObject <List <GridColDef> >(layoutJSON.ColumnState); layout.filterModel = JsonConvert.DeserializeObject <ExpandoObject>(layoutJSON.FilterState); layout.externalFilterModel = JsonConvert.DeserializeObject <ExpandoObject>(layoutJSON.ExternalFilterState); layout.sortModel = JsonConvert.DeserializeObject <List <SortModel> >(layoutJSON.SortState); var queryObject = ServerSideRowModelHelper.BuildSqlFromGridLayouts(layout, "tax_lot_status"); //var query = $@"SELECT * FROM tax_lot_status"; var dataTable = sqlHelper.GetDataTable(queryObject.Item1, CommandType.Text, queryObject.Item2.ToArray()); report.Generate(dataTable); } catch (Exception ex) { throw ex; } }
public static Tuple <string, string, List <SqlParameter> > BuildSql(ServerRowModel obj, string from, bool fetchWhere = false) { List <SqlParameter> sqlParams = new List <SqlParameter>(); Tuple <string, string, int> whereSql = CreateWhereSql(obj, sqlParams); if (fetchWhere) { return(new Tuple <string, string, List <SqlParameter> >(whereSql.Item1, "", sqlParams)); } else { string selectSql = CreateSelectSql(obj, from); string fromSql = $" FROM [{from}] "; string limitSql = CreateLimitSql(obj, sqlParams); string orderBySql = CreateOrderBySql(obj); string groupBySql = CreateGroupBySql(obj); string havingSql = CreateHavingSql(obj, sqlParams, whereSql.Item3); string message = !string.IsNullOrWhiteSpace(whereSql.Item2) ? whereSql.Item2 : null; string query = "select * from (" + selectSql + fromSql + whereSql.Item1 + groupBySql + havingSql + ") t " + orderBySql + limitSql; return(new Tuple <string, string, List <SqlParameter> >(query, message, sqlParams)); } }
private static string CreateHavingSql(ServerRowModel obj, List <SqlParameter> sqlParams, int index) { StringBuilder query = new StringBuilder(""); bool isGrouping = IsDoingGrouping(obj.rowGroupCols, obj.groupKeys); if (isGrouping) { var externalFiltersHavingClause = ExtractExternalFilters(obj, ref sqlParams, index, true); if (externalFiltersHavingClause.Count > 0) { query.Append(" having "); return(query.Append($"{string.Join(" and ", externalFiltersHavingClause.Select(x => x))}").ToString()); } else { return(""); } } else { return(""); } }
public object GetTotalCount(ServerRowModel obj) { return(controller.GetTotalCount(obj)); }
public object GetServerSideJournals(ServerRowModel obj) { return(controller.serverSideJournals(obj)); }
private static Tuple <string, string, int> CreateWhereSql(ServerRowModel obj, List <SqlParameter> sqlParams) { List <string> whereParts = new List <string>(); int index = 0; StringBuilder message = new StringBuilder(); List <string> duplicateFilterList = new List <string>(); StringBuilder query = new StringBuilder(""); if (obj.groupKeys.Count > 0) { foreach (var item in obj.groupKeys) { string colName = obj.rowGroupCols[index].id; sqlParams.Add(new SqlParameter($"{colName}{index}", item)); whereParts.Add($" [{colName}] = @{colName}{index} "); index++; } } var filterDict = (IDictionary <string, dynamic>)(obj.filterModel); var externalFilterDict = (IDictionary <string, dynamic>)(obj.externalFilterModel); var externalFilters = ExtractExternalFilters(obj, ref sqlParams, index); if (filterDict != null) { foreach (var col in filterDict) { string columnName = col.Key; var value = (IDictionary <string, object>)(col.Value); List <string> filterModelWhereList = new List <string>(); //only extract in grid filters which are not present in external filters. External filters have precedence over internal. if (!externalFilterDict.Keys.Contains(columnName, StringComparer.CurrentCultureIgnoreCase)) { index = ExtractInGridFilters(sqlParams, whereParts, index, columnName, value, filterModelWhereList); } else { duplicateFilterList.Add(columnName); } } } if (duplicateFilterList.Count > 0 && obj.pageNumber == 1) { message.Append($"External filter(s) already present for {string.Join(" and ", duplicateFilterList.Select(x => x))}"); } if (whereParts.Count > 0) { whereParts.AddRange(externalFilters); query.Append(" where " + string.Join(" and ", whereParts.Where(x => !string.IsNullOrEmpty(x)).Select(x => x))); return(new Tuple <string, string, int>(query.ToString(), message.ToString(), index)); } if (externalFilters.Count > 0) { query.Append(" where " + string.Join(" and ", externalFilters.Select(x => x))); return(new Tuple <string, string, int>(query.ToString(), message.ToString(), index)); } return(new Tuple <string, string, int>(" ", message.ToString(), index)); }
private static string CreateLimitSql(ServerRowModel obj, List <SqlParameter> sqlParams) { sqlParams.Add(new SqlParameter("pageNumber", obj.pageNumber)); sqlParams.Add(new SqlParameter("pageSize", obj.pageSize)); return(" OFFSET(@pageNumber -1) * @pageSize ROWS FETCH NEXT @pageSize ROWS ONLY"); }
private static string CreateOrderBySql(ServerRowModel obj) { var grouping = IsDoingGrouping(obj.rowGroupCols, obj.groupKeys); List <string> sortParts = new List <string>(); bool groupSortsPresent = false; int count = obj.groupKeys.Count == 0 ? 0 : obj.groupKeys.Count; if ((obj.sortModel.Count == obj.rowGroupCols.Count && obj.rowGroupCols.Count > 0 && obj.groupKeys.Count == 0)) { //when the complete group is clicked for sorting. just sort by the root level node initially. Rest of the sorting will be applied as the user drills down. // do nothing } else if (obj.sortModel.Count > 0) { var modifiedRowGroupCols = obj.rowGroupCols.Select(x => x.id).ToList(); if (obj.groupKeys.Count == 0) { modifiedRowGroupCols.RemoveRange(0, modifiedRowGroupCols.Count); } else { //modifiedRowGroupCols.RemoveRange(0, count); modifiedRowGroupCols = modifiedRowGroupCols.Skip(count).Take(1).ToList(); } foreach (var item in obj.sortModel) { if (grouping && modifiedRowGroupCols.IndexOf(item.colId) < 0) { //ignore because these groupings are not focused right now } else { if (!SortByAbsoluteValue(obj.absoluteSorting, item.colId)) { sortParts.Add($"[{item.colId}] {item.sort}"); } else { sortParts.Add($"ABS([{item.colId}]) {item.sort}"); } groupSortsPresent = true; } } } if ((grouping && obj.sortModel.Count == 0) || (!groupSortsPresent && grouping)) { var rowGroupCol = obj.rowGroupCols[count]; var direction = obj.sortModel.Where(x => x.colId == rowGroupCol.field).FirstOrDefault(); //check if sorting is being performed on an aggreagte column if (obj.sortModel.Count > 0) { foreach (var item in obj.sortModel) { if (obj.valueCols.Any(x => x.field == item.colId)) { if (!SortByAbsoluteValue(obj.absoluteSorting, item.colId)) { sortParts.Add($"[{item.colId}] {item.sort}"); } else { sortParts.Add($"ABS([{item.colId}]) {item.sort}"); } } } } if (sortParts.Count == 0) { if (direction != null) { sortParts.Add($"[{rowGroupCol.field}] {direction.sort}"); } else { sortParts.Add($"[{rowGroupCol.field}]"); } } } if (sortParts.Count > 0) { return(" order by " + string.Join(",", sortParts.Select(x => x))); } else { return(" order by [when] desc"); } }
public object GetTotalCount(ServerRowModel obj) { throw new NotImplementedException(); }
public object serverSideJournals(ServerRowModel obj) { throw new NotImplementedException(); }