public async Task <ActionResult> List(FilterIndividualModel filter)
        {
            var response = await WepApiMethod.SendApiAsync <DataTableResponse>(HttpVerbs.Post, $"Administration/Individual/GetAll", filter);

            return(Content(JsonConvert.SerializeObject(response.Data), "application/json"));
        }
        public IHttpActionResult GetAllLearners(FilterIndividualModel request)
        {
            var users = db.UserRole.Where(u => u.UserAccount.User.Display &&
                                          u.Role.Name == RoleNames.eLearningLearner).Select(x => x.UserAccount.User);

            if (users == null)
            {
                return(NotFound());
            }

            var totalCount = users.Count();

            //advance search
            var query = users.Where(s => (request.Name == null || s.Name.Contains(request.Name)) &&
                                    (request.ICNo == null || s.ICNo.Contains(request.ICNo)) &&
                                    (request.Email == null || s.Email.Contains(request.Email)) &&
                                    (request.MobileNo == null || s.MobileNo.Contains(request.MobileNo))
                                    );

            //quick search
            if (!string.IsNullOrEmpty(request.search.value))
            {
                var value = request.search.value.Trim();

                query = query.Where(p => p.Name.Contains(value) ||
                                    p.ICNo.Contains(value) ||
                                    p.Email.Contains(value) ||
                                    p.MobileNo.Contains(value)
                                    );
            }

            var filteredCount = query.Count();

            //order
            if (request.order != null)
            {
                string sortBy        = request.columns[request.order[0].column].data;
                bool   sortAscending = request.order[0].dir.ToLower() == "asc";

                switch (sortBy)
                {
                case "Name":

                    if (sortAscending)
                    {
                        query = query.OrderBy(o => o.Name);
                    }
                    else
                    {
                        query = query.OrderByDescending(o => o.Name);
                    }

                    break;

                case "ICNo":

                    if (sortAscending)
                    {
                        query = query.OrderBy(o => o.ICNo);
                    }
                    else
                    {
                        query = query.OrderByDescending(o => o.ICNo);
                    }

                    break;

                case "Email":

                    if (sortAscending)
                    {
                        query = query.OrderBy(o => o.Email);
                    }
                    else
                    {
                        query = query.OrderByDescending(o => o.Email);
                    }

                    break;

                case "MobileNo":

                    if (sortAscending)
                    {
                        query = query.OrderBy(o => o.MobileNo);
                    }
                    else
                    {
                        query = query.OrderByDescending(o => o.MobileNo);
                    }

                    break;

                default:
                    query = query.OrderByDescending(o => o.Name);
                    break;
                }
            }
            else
            {
                query = query.OrderByDescending(o => o.Name);
            }

            var data = query.Skip(request.start).Take(request.length)
                       .Select(s => new IndividualModel
            {
                Id       = s.Id,
                Name     = s.Name,
                Email    = s.Email,
                ICNo     = s.ICNo,
                MobileNo = s.MobileNo,
                Status   = s.UserAccount.IsEnable
            }).ToList();

            return(Ok(new DataTableResponse
            {
                draw = request.draw,
                recordsTotal = totalCount,
                recordsFiltered = filteredCount,
                data = data.ToArray()
            }));
        }