public async Task <IActionResult> ManageFavouriteItems()
        {
            var model = new ManageFavoriteListModel();

            //vendor
            model.AvailableVendor.Add(new SelectListItem {
                Text = "All", Value = "0"
            });
            foreach (var item in (await _selectItemsServices.GetVendorList((int)_workContext.CurrentCustomer.ClientId)))
            {
                model.AvailableVendor.Add(new SelectListItem {
                    Text = item.Vname, Value = item.VendorId.ToString()
                });
            }

            //username
            model.AvailableUsername.Add(new SelectListItem {
                Text = "All", Value = "0"
            });
            foreach (var item in (await _selectItemsServices.GetLogons((int)_workContext.CurrentCustomer.ClientId)))
            {
                model.AvailableUsername.Add(new SelectListItem {
                    Text = item.UserName, Value = item.LogonId.ToString()
                });
            }

            return(View(model));
        }
        public async Task <IActionResult> ManageFavouriteItems(DataSourceRequest command,
                                                               ManageFavoriteListModel model)
        {
            var(favoriteModel, totalCount) = await _selectItemsServices.PrepareManageFavoriteListModel(model, command.Page, command.PageSize);

            var gridModel = new DataSourceResult
            {
                Data  = favoriteModel,
                Total = totalCount
            };

            return(Json(gridModel));
        }
        public async Task <(IEnumerable <ManageFavoriteModel> favoriteModel, int totalCount)> PrepareManageFavoriteListModel(ManageFavoriteListModel model, int pageIndex, int pageSize)
        {
            var query = from b in _bosoRepository.Table
                        join l in _logonRepository.Table on b.LogonId equals l.LogonId
                        join v in _itemRepository.Table on b.VitemId equals v.VitemId
                        join ve in _vendorRepository.Table on b.ClientId equals ve.ClientId
                        where (v.VendorId == ve.VendorId && b.ClientId == (int)_workContext.CurrentCustomer.ClientId && v.Hide != true)
                        select new ManageFavoriteModel
            {
                ClientID     = b.ClientId,
                BOSOID       = b.Bosoid,
                LogonID      = b.LogonId,
                Category     = b.Category,
                AutoVendorID = b.AutoVendorId,
                VName        = ve.Vname,
                UserName     = l.UserName,
                VItemID      = v.VitemId,
                VItem        = v.Vitem,
                VDescription = v.Vdescription
            };

            if (model.txtUserName != "0")
            {
                query = query.Where(c => c.UserName.Contains(_logonRepository.Table.Where(l => l.LogonId == Convert.ToInt32(model.txtUserName)).FirstOrDefault().UserName));
            }

            if (!string.IsNullOrEmpty(model.txtVItem))
            {
                query = query.Where(c => c.VItem.Contains(model.txtVItem));
            }

            if (model.txtVendor != "0")
            {
                query = query.Where(c => c.VName.Contains(_vendorRepository.Table.Where(l => l.VendorId == Convert.ToInt32(model.txtVendor)).FirstOrDefault().Vname));
            }

            //Sorting
            if (model.intSort == 1)
            {
                query = query.OrderBy(c => c.UserName);
            }

            if (model.intSort == 2)
            {
                query = query.OrderBy(c => c.VItem);
            }

            if (model.intSort == 3)
            {
                query = query.OrderBy(c => c.VName);
            }

            var favoriteList = query.ToList();

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

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

            return(favoriteList, totalCount);
        }