Exemple #1
0
        public System.Threading.Tasks.Task BindModelAsync(Microsoft.AspNetCore.Mvc.ModelBinding.ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
            {
                throw new ArgumentNullException(nameof(bindingContext));
            }

            var filterLogic = bindingContext.ValueProvider.GetValue("filter[logic]");
            //           if (filterLogic == ValueProviderResult.None)
            //                      return Task.CompletedTask;

//?page=1&pageSize=20&sort[0][field]=Date&sort[0][dir]=asc&filter[logic]=and&filter[filters][0][field]=Date&filter[filters][0][operator]=gte&filter[filters][0][value]=4/1/2018
//?page=1&pageSize=20&sort[0][field]=Name&sort[0][dir]=asc&filter[logic]=and&filter[filters][0][field]=Name&filter[filters][0][operator]=contains&filter[filters][0][value]=schuebel
//&filter[logic]=and&filter[filters][0][field]=Name&filter[filters][0][operator]=contains&filter[filters][0][value]=schuebel
            var page      = bindingContext.ValueProvider.GetValue("page").FirstValue;// bindingContext.ModelName);
            var pageSize  = bindingContext.ValueProvider.GetValue("pageSize").FirstValue;
            var filtering = GetFilterObjects(bindingContext, filterLogic.FirstValue);
            var sorting   = GetSortObjects(bindingContext);

            var result = new coreevent.SearchRequest {
                Page                = int.Parse(page ?? "0"),
                PageSize            = int.Parse(pageSize ?? "25"),
                FilterObjectWrapper = filtering,
                SortObjects         = sorting
            };

            bindingContext.Result = ModelBindingResult.Success(result);
            return(Task.CompletedTask);
        }
        public ActionResult <IEnumerable <coreevent.Person> > Get([ModelBinder(binderType: typeof(SearchBinder))] coreevent.SearchRequest srch)
        {
            try {
                var evts = _personService.GetAllPersons().ToList();
                if ((srch == null) || (srch != null &&
                                       srch.FilterObjectWrapper.FilterObjects.Count == 0 &&
                                       srch.SortObjects.Count == 0 &&
                                       srch.Page == 0 &&
                                       srch.PageSize == 25))
                {    //return Ok(evts);
                    HttpContext.Response.Headers.Add("Paging-TotalRecords", JsonConvert.SerializeObject(evts.Count));
                    return(Ok(evts));
                }
                else
                {
                    //Most javascript grids are 1 based page
                    if (srch.Page > 0)
                    {
                        srch.Page--;
                    }
                    var    fp        = new coreevent.FilterParsing <coreevent.Person>();
                    string filtering = "true";
                    try {
                        filtering = fp.GetFiltering(srch);
                    } catch (Exception fex) {
                        ModelState.AddModelError("Person:Get:FilterParse", fex.Message);
                        return(BadRequest(ModelState));
                    }

                    var sorting = "true";
                    try {
                        sorting = coreevent.FilterParsing <coreevent.Person> .GetSorting(srch);
                    } catch (Exception sex) {
                        ModelState.AddModelError("Person:Get:SortParse", sex.Message);
                        return(BadRequest(ModelState));
                    }
                    IQueryable <coreevent.Person> query = evts.AsQueryable().Where(filtering).OrderBy(sorting);

                    int RowCount = 0;
                    var newList  = new List <coreevent.Person>();
                    try {
                        RowCount = query.Count();
                        int skip = srch.Page * srch.PageSize;
                        newList = query.Skip(skip).Take(srch.PageSize).ToList();
                    }
                    catch {}

                    // Setting Header
                    HttpContext.Response.Headers.Add("Paging-TotalRecords", JsonConvert.SerializeObject(RowCount));

                    //var newList = query.ToList();
                    // var newRes = new FilterDTO<IEnumerable<coreevent.Person>>() { total=RowCount, data=newList };
                    //new { total = mdl.RowCount, data = res }
                    return(Ok(newList));
                }
            }
            catch (Exception ex) {
                ModelState.AddModelError("Person:Get", ex.Message);
                return(BadRequest(ModelState));
            }
        }
        public ActionResult <IEnumerable <coreevent.Event> > Get([ModelBinder(binderType: typeof(SearchBinder))] coreevent.SearchRequest srch)
        {
            try {
                //need to pull back all for all request or adjusting birthday dates for queires
                var evts = _eventService.GetAllEvents().ToList();
                if ((srch == null) || (srch != null &&
                                       srch.FilterObjectWrapper.FilterObjects.Count == 0 &&
                                       srch.SortObjects.Count == 0 &&
                                       srch.Page == 0 &&
                                       srch.PageSize == 25))
                {      //return Ok(evts);
                    HttpContext.Response.Headers.Add("Paging-TotalRecords", JsonConvert.SerializeObject(evts.Count));
                    return(Ok(evts));
                }
                else
                {
                    foreach (var item in evts)
                    {
                        if ((item.RepeatYearly == true) || (item.TopicId == 1 && item.Date != null))
                        {
                            item.Date = new DateTime(DateTime.Now.Year, item.Date.Value.Month, item.Date.Value.Day);
                        }
                    }

                    //Most javascript grids are 1 based page
                    if (srch.Page > 0)
                    {
                        srch.Page--;
                    }
                    var    fp        = new coreevent.FilterParsing <coreevent.Event>();
                    string filtering = "true";
                    try {
                        filtering = fp.GetFiltering(srch);
                    } catch (Exception fex) {
                        ModelState.AddModelError("Person:Get:FilterParse", fex.Message);
                        return(BadRequest(ModelState));
                    }

                    var sorting = "true";
                    try {
                        sorting = coreevent.FilterParsing <coreevent.Event> .GetSorting(srch);
                    } catch (Exception sex) {
                        ModelState.AddModelError("Person:Get:SortParse", sex.Message);
                        return(BadRequest(ModelState));
                    }

                    //if filter and date range
                    if (srch.FilterObjectWrapper.FilterObjects.Count == 2)
                    {
                        if (srch.FilterObjectWrapper.FilterObjects.ElementAt(0).Field1 == "Date" && srch.FilterObjectWrapper.FilterObjects.ElementAt(1).Field1 == "Date" &&
                            srch.FilterObjectWrapper.FilterObjects.ElementAt(0).Value1 != "" && srch.FilterObjectWrapper.FilterObjects.ElementAt(1).Value1 != "")
                        {
                            var startDate = ParseConvertDate(srch.FilterObjectWrapper.FilterObjects.ElementAt(0).Value1);
                            var endtDate  = ParseConvertDate(srch.FilterObjectWrapper.FilterObjects.ElementAt(1).Value1);
                            var cevt      = _eventService.GetCalculatedEventsByDateRange(startDate, endtDate);
                            evts.AddRange(cevt);
                        }
                    }

                    IQueryable <coreevent.Event> query = evts.AsQueryable().Where(filtering).OrderBy(sorting);

                    int RowCount = 0;
                    var newList  = new List <coreevent.Event>();
                    try {
                        RowCount = query.Count();
                        int skip = srch.Page * srch.PageSize;
                        newList = query.Skip(skip).Take(srch.PageSize).ToList();
                    }
                    catch {}

                    //var newList = query.ToList();
                    HttpContext.Response.Headers.Add("Paging-TotalRecords", JsonConvert.SerializeObject(RowCount));
                    //new { total = mdl.RowCount, data = res }
                    return(Ok(newList));
                }
            }
            catch (Exception ex) {
                ModelState.AddModelError("Person:Get", ex.Message);
                return(BadRequest(ModelState));
            }
        }