public IQueryable <TEntity> Apply(IQueryable <TEntity> query)
        {
            // query = query.Where(x => x.Name == "Oxford Suite");
            var processor = new SearchOptionsProcessor <T, TEntity>(Search);

            return(processor.Apply(query));
        }
Example #2
0
        public async Task <JqueryDataTablesPagedResults <ViewModels.Todo> > GetDataAsync(JqueryDataTablesParameters table)
        {
            ViewModels.Todo[] items = null;
            IQueryable <Todo> query = _context.Todos.Where(d => d.DeletedDate == null).OrderByDescending(d => d.CreatedDate).AsNoTracking();

            query = SearchOptionsProcessor <ViewModels.Todo, Todo> .Apply(query, table.Columns);

            query = SortOptionsProcessor <ViewModels.Todo, Todo> .Apply(query, table);

            var size = await query.CountAsync();

            if (table.Length > 0)
            {
                items = await query
                        .Skip((table.Start / table.Length) *table.Length)
                        .Take(table.Length)
                        .ProjectTo <ViewModels.Todo>(_mappingConfiguration)
                        .ToArrayAsync();
            }
            else
            {
                items = await query
                        .ProjectTo <ViewModels.Todo>(_mappingConfiguration)
                        .ToArrayAsync();
            }

            return(new JqueryDataTablesPagedResults <ViewModels.Todo>
            {
                Items = items,
                TotalSize = size
            });
        }
        public async Task <JqueryDataTablesPagedResults <Demo> > GetDataAsync(JqueryDataTablesParameters table)
        {
            IQueryable <DemoEntity> query = _context.Demos
                                            .AsNoTracking()
                                            .Include(x => x.DemoNestedLevelOne)
                                            .ThenInclude(y => y.DemoNestedLevelTwo);

            query = new SearchOptionsProcessor <Demo, DemoEntity>().Apply(query, table.Columns);
            query = new SortOptionsProcessor <Demo, DemoEntity>().Apply(query, table);

            var size = await query.CountAsync();

            var items = await query
                        .AsNoTracking()
                        .Skip((table.Start / table.Length) * table.Length)
                        .Take(table.Length)
                        .ProjectTo <Demo>(_mappingConfiguration)
                        .ToArrayAsync();

            return(new JqueryDataTablesPagedResults <Demo>
            {
                Items = items,
                TotalSize = size
            });
        }
        public static IQueryable <TEntity> ApplySearching <TModel, TEntity>(
            this IQueryable <TEntity> query,
            QueryParameters <TModel> queryParams
            )
        {
            var processor = new SearchOptionsProcessor <TModel>(queryParams.SearchOptions.SearchTerms);

            return(processor.Apply <TEntity>(query));
        }
Example #5
0
        public void GetAllTerms_NullSearchQuery_ShouldReturnEmptyList()
        {
            // Arrange
            var processor = new SearchOptionsProcessor <Recipe>(null);

            // Act
            var terms = processor.GetAllTerms();

            // Assert
            Assert.Empty(terms);
        }
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            var processor    = new SearchOptionsProcessor <T, TEntity>(Search);
            var validTerms   = processor.GetValidTerms().Select(x => x.Name);
            var invalidTerms = processor.GetAllTerms()
                               .Where(x => !validTerms.Any(v => v.Equals(x.Name, StringComparison.OrdinalIgnoreCase)))
                               .Select(x => x.Name);

            foreach (var term in invalidTerms)
            {
                yield return(new ValidationResult($"Invalid search term {term}", new[] { nameof(Search) }));
            }
        }
Example #7
0
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            var processor = new SearchOptionsProcessor <T, TEntity>(Search);

            var validTerms = processor.GetValidTerms().Select(x => x.Name);

            var invalidTerms = processor.GetAllTerms().Select(x => x.Name).Except(validTerms, StringComparer.CurrentCultureIgnoreCase);

            foreach (var term in invalidTerms)
            {
                yield return(new ValidationResult($"Invalid search term '{term}'.", new[] { nameof(Search) }));
            }
        }
Example #8
0
        public async Task <Notification[]> GetDataAsync(DTParameters table)
        {
            IQueryable <NotificationEntity> query = _context.Notifications;

            query = new SearchOptionsProcessor <Notification, NotificationEntity>().Apply(query, table.Columns);
            query = new SortOptionsProcessor <Notification, NotificationEntity>().Apply(query, table);

            return(await query
                   .AsNoTracking()
                   .Skip(table.Start)
                   .Take(table.Length)
                   .ProjectTo <Notification>(_mappingConfiguration)
                   .ToArrayAsync());
        }
Example #9
0
        public async Task <UserViewModel[]> GetUsersAsync(DTParameters tableParams)
        {
            IQueryable <UserModel> query = _context.Users;

            query = new SearchOptionsProcessor <UserViewModel, UserModel>().Apply(query, tableParams.Columns);
            query = new SortOptionsProcessor <UserViewModel, UserModel>().Apply(query, tableParams);

            UserViewModel[] users = await query
                                    .AsNoTracking()
                                    .Skip(tableParams.Start - 1 * tableParams.Length)
                                    .Take(tableParams.Length)
                                    .ProjectTo <UserViewModel>(_mappingConfiguration)
                                    .ToArrayAsync();

            return(users);
        }
Example #10
0
        public async Task <Demo[]> GetDataAsync(DTParameters table)
        {
            IQueryable <DemoEntity> query = _context.Demos;

            query = new SearchOptionsProcessor <Demo, DemoEntity>().Apply(query, table.Columns);
            query = new SortOptionsProcessor <Demo, DemoEntity>().Apply(query, table);

            var items = await query
                        .AsNoTracking()
                        .Skip(table.Start - 1 * table.Length)
                        .Take(table.Length)
                        .ProjectTo <Demo>(_mappingConfiguration)
                        .ToArrayAsync();

            return(items);
        }
        private IEnumerable <ValidationResult> ValidateSearchOptions()
        {
            if (Search == null)
            {
                yield break;
            }

            var processor = new SearchOptionsProcessor <T>(Search);

            var validTerms   = processor.GetValidTerms().Select(x => x.Name);
            var invalidTerms = processor.GetAllTerms().Select(x => x.Name)
                               .Except(validTerms, StringComparer.OrdinalIgnoreCase);

            foreach (var term in invalidTerms)
            {
                yield return(new ValidationResult($"Invalid search term '{term}'", new[] { nameof(Search) }));
            }
        }
Example #12
0
        public void GetAllTerms_NoSpaces_ShouldAssignToNames()
        {
            // Arrange
            var elements  = new[] { "abc", "def", "G_hi_jkl", "m_desc" };
            var processor = new SearchOptionsProcessor <Recipe>(elements);

            // Act
            var terms = processor.GetAllTerms().ToArray();

            // Assert
            Assert.Equal(elements.Length, terms.Length);
            foreach (var(element, term) in elements.Zip(terms, Tuple.Create))
            {
                Assert.Equal(element, term.Name);
                Assert.True(string.IsNullOrEmpty(term.Operator));
                Assert.True(string.IsNullOrEmpty(term.Value));
                Assert.False(term.ValidSyntax, "Syntax is actually valid");
            }
        }
        public static async Task <JqueryDataTablesResult <T> > GetJqueryDataTablesResultAsync <T, TEntity>(JqueryDataTablesParameters @params, IQueryable <TEntity> query, IConfigurationProvider configurationProvider)
        {
            if (@params == null)
            {
                throw new ArgumentNullException($"{nameof(@params)} cannot be null!");
            }

            if (query == null)
            {
                throw new ArgumentNullException($"{nameof(query)} cannot be null!");
            }

            query = new SearchOptionsProcessor <T, TEntity>().Apply(query, @params.Columns);
            query = new SortOptionsProcessor <T, TEntity>().Apply(query, @params);

            var size = await query.CountAsync();

            if (@params.Length <= 0)
            {
                @params.Length = size;
            }

            var items = await query
                        .Skip((@params.Start / @params.Length) * @params.Length)
                        .Take(@params.Length)
                        .ProjectTo <T>(configurationProvider)
                        .ToArrayAsync();

            var results = new JqueryDataTablesPagedResults <T>
            {
                Items     = items,
                TotalSize = size
            };

            return(new JqueryDataTablesResult <T>
            {
                Draw = @params.Draw,
                Data = results.Items,
                RecordsFiltered = results.TotalSize,
                RecordsTotal = results.TotalSize
            });
        }
Example #14
0
        public async Task <JsonResult> GetDataAsync <TEntity, TEntityApi>(IQueryable <TEntity> query, JqueryDataTablesParameters param) where TEntity : class
        {
            query = SearchOptionsProcessor <TEntityApi, TEntity> .Apply(query, param.Columns);

            query = SortOptionsProcessor <TEntityApi, TEntity> .Apply(query, param);

            var items = await query
                        .AsNoTracking()
                        .Skip(param.Start)
                        .Take(param.Length)
                        .ProjectTo <TEntityApi>(_mappingConfiguration)
                        .ToArrayAsync();

            return(new JsonResult(new JqueryDataTablesResult <TEntityApi>
            {
                Draw = param.Draw,
                Data = items,
                RecordsFiltered = items.Length,
                RecordsTotal = items.Length
            }));
        }
        public static async Task <JqueryDataTablesExcelResult <T> > GetJqueryDataTablesExcelResultAsync <T, TEntity>(JqueryDataTablesParameters @params, IQueryable <TEntity> query, IConfigurationProvider configurationProvider, bool convertAllData = false, string sheetName = "sheetName", string fileName = "fileName")
        {
            if (@params == null)
            {
                throw new ArgumentNullException($"{nameof(@params)} cannot be null!");
            }

            if (query == null)
            {
                throw new ArgumentNullException($"{nameof(query)} cannot be null!");
            }

            var results = new JqueryDataTablesPagedResults <T>();

            if (convertAllData)
            {
                var items = await query
                            .ProjectTo <T>(configurationProvider)
                            .ToArrayAsync();

                results.Items = items;
            }
            else
            {
                query = new SearchOptionsProcessor <T, TEntity>().Apply(query, @params.Columns);
                query = new SortOptionsProcessor <T, TEntity>().Apply(query, @params);

                var items = await query
                            .Skip((@params.Start / @params.Length) * @params.Length)
                            .Take(@params.Length)
                            .ProjectTo <T>(configurationProvider)
                            .ToArrayAsync();

                results.Items = items;
            }

            return(new JqueryDataTablesExcelResult <T>(results.Items, sheetName, fileName));
        }
        public async Task <IActionResult> LoadTable([FromBody] JqueryDataTablesParameters param)
        {
            try
            {
                HttpContext.Session.SetString(nameof(JqueryDataTablesParameters), JsonSerializer.Serialize(param));
                List <Order_MasterViewModel> list = new List <Order_MasterViewModel>();

                IQueryable <Invoice> query = _dbContext.tbl_Invoice.FromSqlRaw("select custNum  ,invoiceNum  , cast( releaseDate as char)   releaseDate,freight  ,salesManNum  ,salesManNum2  ,billName  ,billAddress1 ,billAddress2 ,billAddress3 ,shipName ,shipAddress1,shipAddress2,shipAddress3,termId  ,carrierCode  ,d2  ,poNum  , cast( orderDate as char) orderDate, cast( shipDate as char) shipDate,  CAST( cancelDate AS CHAR) cancelDate,cast( enterDate as char) enterDate,terminal  ,custNote ,clerk  ,netTotal  ,commision ,d4  ,d6  ,storeNum  ,dept  ,orderType  ,bolNum  ,cast( bolDate as char) bolDate ,tracking1  ,tracking2 ,orderNum  ,cast( invoiceDate as char) invoiceDate  ,isCreditMemo  ,isCreditHold  ,isFreightCollect from  v_Invoice").AsNoTracking();

                query = SearchOptionsProcessor <InvoiceViewModel, Invoice> .Apply(query, param.Columns);

                query = SortOptionsProcessor <InvoiceViewModel, Invoice> .Apply(query, param);

                var size = await query.CountAsync();

                var InvoiceNum = "";
                var OrderNum   = "";
                var BillName   = "";

                var i = 0;
                foreach (var column in param.AdditionalValues)
                {
                    if (i == 0)
                    {
                        InvoiceNum = column;
                    }
                    else if (i == 1)
                    {
                        OrderNum = column;
                    }
                    else
                    {
                        BillName = column;
                    }
                    i++;
                }

                if (InvoiceNum != "" || OrderNum != "" || BillName != "")
                {
                    query = query.Where(w =>
                                        ((InvoiceNum == "" ? true : w.InvoiceNum.Contains(InvoiceNum))) &&
                                        ((OrderNum == "" ? true : w.InvoiceNum.Contains(OrderNum))) &&
                                        ((BillName == "" ? true : w.BillName.Contains(BillName))));
                }


                foreach (var column in param.Columns)
                {
                    if (column.Data == "InvoiceNum")
                    {
                        column.Searchable   = true;
                        column.Search.Value = InvoiceNum;
                    }
                    if (column.Data == "OrderNum")
                    {
                        column.Searchable   = true;
                        column.Search.Value = OrderNum;
                    }
                    if (column.Data == "BillName")
                    {
                        column.Searchable   = true;
                        column.Search.Value = BillName;
                    }
                }
                var items = await query
                            .AsNoTracking()
                            .Skip((param.Start / param.Length) * param.Length)
                            .Take(param.Length)
                            .ProjectTo <InvoiceViewModel>(_mappingConfiguration)
                            .ToArrayAsync();


                var result = new JqueryDataTablesPagedResults <InvoiceViewModel>
                {
                    Items     = items,
                    TotalSize = size
                };

                return(new JsonResult(new JqueryDataTablesResult <InvoiceViewModel>
                {
                    Draw = param.Draw,
                    Data = result.Items,
                    RecordsFiltered = result.TotalSize,
                    RecordsTotal = result.TotalSize
                }));
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
                return(new JsonResult(new { error = "Internal Server Error" }));
            }
        }
Example #17
0
        public IQueryable <TEntity> Apply(IQueryable <TEntity> query)
        {
            var processor = new SearchOptionsProcessor <T, TEntity>(Search);

            return(processor.Apply(query));
        }
        public async Task <IActionResult> LoadTable([FromBody] JqueryDataTablesParameters param)
        {
            try
            {
                HttpContext.Session.SetString(nameof(JqueryDataTablesParameters), JsonSerializer.Serialize(param));
                List <Order_MasterViewModel> list = new List <Order_MasterViewModel>();

                var    showAll  = param.AdditionalValues.Last();
                string queryDef = "";
                if (showAll == "true")
                {
                    queryDef = @"SELECT Custnum,orders.ordernum,Orderdate,Credit,Freight, Slnum, Slnum2, D0, NAME, Address1, Address2, Address3, Shipname, Shipaddress1, Shipaddress2, Shipaddress3, Terms, Via,
                                                                              Backorder,Tax,Terminal, Ponum,Shippeddate, Shipdate, Canceldate, Edidate, Custnote, clerk, Poammount, Commission, STATUS, D1, D2, Creditmemo, Storenum,
                                                                              Dept, Ordertype, WeborderId, IsOpenOrder, NoteCount,'a' AS ACTION  FROM orders LEFT JOIN (SELECT Ordernum,COUNT(*)NoteCount,YEAR FROM ordernotes
                                                                              GROUP BY Ordernum,YEAR  ) a ON  (SUBSTRING((orders.Ordernum ),1,6)= a.Ordernum AND  SUBSTRING((orders.Ordernum ),8,2)= a.Year)
                                                                           ";
                }
                else
                {
                    queryDef = @"SELECT Custnum,orders.ordernum,Orderdate,Credit,Freight, Slnum, Slnum2, D0, NAME, Address1, Address2, Address3, Shipname, Shipaddress1, Shipaddress2, Shipaddress3, Terms, Via,
                                                                              Backorder,Tax,Terminal, Ponum,Shippeddate, Shipdate, Canceldate, Edidate, Custnote, clerk, Poammount, Commission, STATUS, D1, D2, Creditmemo, Storenum,
                                                                              Dept, Ordertype, WeborderId, IsOpenOrder, NoteCount,'a' AS ACTION  FROM orders LEFT JOIN (SELECT Ordernum,COUNT(*)NoteCount,YEAR FROM ordernotes
                                                                              GROUP BY Ordernum,YEAR  ) a ON  (SUBSTRING((orders.Ordernum ),1,6)= a.Ordernum AND  SUBSTRING((orders.Ordernum ),8,2)= a.Year)
                                                                              WHERE IsOpenOrder =1                                                                          
                                                                            ";
                }


                IQueryable <Order> query = _dbContext.tbl_Orders.FromSqlRaw(queryDef).AsNoTracking();


                query = SearchOptionsProcessor <Order_MasterViewModel, Order> .Apply(query, param.Columns);

                query = SortOptionsProcessor <Order_MasterViewModel, Order> .Apply(query, param);

                var size = await query.CountAsync();

                var      orderNum         = "";
                var      custnumOrName    = "";
                var      Shipdate         = "";
                DateTime ShipDateD        = DateTime.Now;
                var      i                = 0;
                var      additionalValues = param.AdditionalValues.SkipLast(1);
                foreach (var column in additionalValues)
                {
                    if (i == 0)
                    {
                        orderNum = column;
                    }
                    else if (i == 1)
                    {
                        custnumOrName = column;
                    }
                    else
                    {
                        Shipdate = column;
                        if (Convert.ToString(Shipdate) == "1/1/0001 12:00:00 AM")
                        {
                            Shipdate = "";
                        }
                        if (Shipdate != "")
                        {
                            DateTime.TryParse(Shipdate, out ShipDateD);
                        }
                    }
                    i++;
                }

                if (orderNum != "" || custnumOrName != "" || Shipdate != "")
                {
                    query = query.Where(w =>
                                        ((orderNum == "" ? true : w.ordernum.Contains(orderNum))) &&
                                        ((custnumOrName == "" ? true : (w.Custnum.Contains(custnumOrName) ? true : (w.Name.Contains(custnumOrName))))) &&
                                        ((Shipdate == "" ? true : w.Shipdate == ShipDateD)));
                }


                foreach (var column in param.Columns)
                {
                    if (column.Data == "ordernum")
                    {
                        column.Searchable   = true;
                        column.Search.Value = orderNum;
                    }
                    if (column.Data == "Shipdate")
                    {
                        column.Searchable   = true;
                        column.Search.Value = orderNum;
                    }
                    if (column.Data == "Shipdate")
                    {
                        column.Searchable   = true;
                        column.Search.Value = orderNum;
                    }
                }



                var items = query
                            //.AsNoTracking()
                            .Skip((param.Start / param.Length) * param.Length)
                            .Take(param.Length)
                            .ProjectTo <Order_MasterViewModel>(_mappingConfiguration)
                            .ToArray();


                var result = new JqueryDataTablesPagedResults <Order_MasterViewModel>
                {
                    Items     = items,
                    TotalSize = size
                };

                return(new JsonResult(new JqueryDataTablesResult <Order_MasterViewModel>
                {
                    Draw = param.Draw,
                    Data = result.Items,
                    RecordsFiltered = result.TotalSize,
                    RecordsTotal = result.TotalSize
                }));
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
                return(new JsonResult(new { error = "Internal Server Error" }));
            }
        }
        public async Task <IActionResult> LoadTable([FromBody] JqueryDataTablesParameters param)
        {
            try
            {
                HttpContext.Session.SetString(nameof(JqueryDataTablesParameters), JsonSerializer.Serialize(param));
                IQueryable <EmployeeViewModel_datatable> employees;
                string            queryDef = "call get_careGiverList()";
                DbfunctionUtility dbfunction = new DbfunctionUtility(_appSettings);
                CommanUtility     _commanUtility = new CommanUtility(_appSettings);
                DateTime          startDate = new DateTime(); DateTime endDate = new DateTime(); int i = 0; bool isDateFilter = false;
                DataSet           ds = new DataSet();

                foreach (var column in param.AdditionalValues)
                {
                    if (Convert.ToString(column) != "")
                    {
                        isDateFilter = true;
                        var dateParts = column.Split("/");

                        // var date = dateParts[1] + "/" + dateParts[0] + "/" + dateParts[2];
                        if (i == 0)
                        {
                            DateTime.TryParse(column, out startDate);
                        }
                        else if (i == 1)
                        {
                            DateTime.TryParse(column, out endDate);
                        }
                    }
                    i++;
                }

                if (isDateFilter == false)
                {
                    ds = dbfunction.GetDataset(@"call get_careGiverList()");
                }
                else
                {
                    ds = dbfunction.GetDataset(@"call get_careGiverListByDate('" + startDate.ToString("yyyy/MM/dd") + "','" + endDate.ToString("yyyy/MM/dd") + "') ");
                }

                employees = (from row in ds.Tables[0].AsEnumerable()
                             select new EmployeeViewModel_datatable
                {
                    EmployeeId = Convert.ToInt32(row["Id"]),
                    FirstName = Convert.ToString(row["FirstName"]),
                    MiddleName = Convert.ToString(row["MiddleName"]),
                    LastName = Convert.ToString(row["LastName"]),
                    Email = Convert.ToString(row["Email"]),
                    EmployeeNo = Convert.ToString(row["EmployeeNo"]),
                    UserId = Convert.ToInt32(row["UserId"]),
                    HrGroupName = Convert.ToString(row["HrGroup"]),
                    HrGroupId = Convert.ToInt32(row["HrGroupId"]),
                    PassedTest = Convert.ToInt32(row["PassedTest"]),
                    Totaltest = Convert.ToInt32(row["total_tests_1"]),
                    VideoDuration = Convert.ToString(row["VideoDuration"]) == "" ? (Decimal?)null : Convert.ToDecimal(row["VideoDuration"]),
                    ExamDate = Convert.ToString(row["ExamDate"]) == "" ? (DateTime?)null : Convert.ToDateTime(row["ExamDate"]),
                    ValidEmail = _commanUtility.CheckValidEmail(Convert.ToString(row["Email"]))
                }).AsQueryable();

                if (_rolename.ToLower() == "hr")
                {
                    employees = employees.Where(w => _HrGroupId.Contains("/" + w.HrGroupId.ToString() + "/")).AsQueryable();
                }


                employees = SearchOptionsProcessor <EmployeeViewModel_datatable, EmployeeViewModel_datatable> .Apply(employees, param.Columns);

                employees = SortOptionsProcessor <EmployeeViewModel_datatable, EmployeeViewModel_datatable> .Apply(employees, param);

                var size = employees.Count();


                if (Convert.ToString(param.Search?.Value) != "")
                {
                    var serchValue = param.Search?.Value.ToLower();
                    employees = employees.Where(w =>
                                                (w.FirstName.ToLower().Contains(serchValue) ? true :
                                                 (w.MiddleName.ToLower().Contains(serchValue) ? true :
                                                  ((w.LastName.ToLower().Contains(serchValue) ? true :
                                                    ((w.EmployeeNo.ToLower().Contains(serchValue) ? true :
                                                      ((w.Email.ToLower().Contains(serchValue) ? true :
                                                        ((w.HrGroupName.ToLower().Contains(serchValue) ? true : false))))))))
                                                 )));
                }

                var items = employees
                            .Skip((param.Start / param.Length) * param.Length)
                            .Take(param.Length)
                            .ProjectTo <EmployeeViewModel_datatable>(_mappingConfiguration)
                            .ToArray();


                var result = new JqueryDataTablesPagedResults <EmployeeViewModel_datatable>
                {
                    Items     = items,
                    TotalSize = size
                };

                return(new JsonResult(new JqueryDataTablesResult <EmployeeViewModel_datatable>
                {
                    Draw = param.Draw,
                    Data = result.Items,
                    RecordsFiltered = result.TotalSize,
                    RecordsTotal = result.TotalSize
                }));
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
                return(new JsonResult(new { error = "Internal Server Error" }));
            }
        }
Example #20
0
        public void ParseQuery(string parameter)
        {
            var processor = new SearchOptionsProcessor <T>(SearchTerms);

            SearchTerms = processor.ParseAllTerms(parameter);
        }