public async Task <IActionResult> CoreItems()
        {
            CoreItemListModel model = new CoreItemListModel();

            ///Dropdownlist
            var costCenters = await _costCenterService.SelectCostCenter((int)_workContext.CurrentCustomer.ClientId,
                                                                        (int)_workContext.CurrentCustomer.UserType,
                                                                        (int)_workContext.CurrentCustomer.LogonId);

            foreach (var item in costCenters)
            {
                model.AvailableCostCenter.Add(new SelectListItem {
                    Text = item.Both, Value = item.Sid.ToString()
                });
            }

            model.AvailableCategory.Add(new SelectListItem {
                Text = "All", Value = "0"
            });
            foreach (var item in (await _selectItemsServices.GetCoreItemCategories()))
            {
                model.AvailableCategory.Add(new SelectListItem {
                    Text = item.Category1, Value = item.Category1
                });
            }

            return(View(model));
        }
        public async Task <IActionResult> CoreItems(DataSourceRequest command,
                                                    CoreItemListModel model)
        {
            var(coreItemsListModel, totalCount) = await _selectItemsServices.PrepareCoreItemListModel(model, command.Page, command.PageSize);

            var gridModel = new DataSourceResult
            {
                Data  = coreItemsListModel.ToList(),
                Total = totalCount
            };

            return(Json(gridModel));
        }
        public async Task <(IEnumerable <CoreItemModel> coreItemsModel, int totalCount)> PrepareCoreItemListModel(CoreItemListModel model, int pageIndex, int pageSize)
        {
            var query = from c in _coreRepository.Table
                        join i in _itemRepository.Table on c.VitemId equals i.VitemId
                        join v in _vendorRepository.Table on i.VendorId equals v.VendorId
                        where c.ClientId == (int)_workContext.CurrentCustomer.ClientId && v.ClientId == (int)_workContext.CurrentCustomer.ClientId
                        select new CoreItemModel
            {
                Category    = c.Category,
                vitemid     = i.VitemId,
                Item        = i.Vitem,
                Description = i.Vdescription,
                Unit        = i.Uom,
                Pkg         = i.Pkg,
                Price       = i.SellingPrice,
                Vendor      = c.Vname,
                GL          = c.Gl
            };

            //Searching
            if (!string.IsNullOrWhiteSpace(model.SearchByCriteria))
            {
                query = query.Where(c => c.Item.Trim().ToLower().Contains(model.SearchByCriteria.Trim().ToLower()) || c.Description.Trim().ToLower().Contains(model.SearchByCriteria.Trim().ToLower()));
            }


            if (model.SearchByCategory != "0")
            {
                query = query.Where(c => c.Category.Trim().ToLower() == model.SearchByCategory.Trim().ToLower());
            }

            //Sorting
            if (model.SortBy == 4)
            {
                query = query.OrderBy(c => c.Category);
            }

            if (model.SortBy == 2)
            {
                query = query.OrderBy(c => c.Description);
            }

            if (model.SortBy == 1)
            {
                query = query.OrderBy(c => c.Item);
            }

            if (model.SortBy == 3)
            {
                query = query.OrderBy(c => c.Vendor);
            }

            var coreItemsListModel = query.ToList();

            int totalCount = coreItemsListModel.Count;
            int pageOffSet = (Convert.ToInt32(pageIndex) - 1) * 10;

            coreItemsListModel = coreItemsListModel.Skip(pageOffSet).Take(Convert.ToInt32(pageSize)).ToList();

            return(coreItemsListModel, totalCount);
        }