public ActionResult Index()
        {
            AListingSearchModel listingSearchModel = new ListingSearchViewModel();

            ViewBag.searchViewModel = listingSearchModel;
            return(View(listingSearchModel));
        }
示例#2
0
        //public async Task<IActionResult> List([FromBody]PaginationViewModel model)
        public async Task <IActionResult> List([FromQuery] string title, [FromQuery] int?page, [FromQuery] int?cityId)
        {
            ListingSearchViewModel model = new ListingSearchViewModel();

            model.Page   = page;
            model.Title  = title;
            model.CityId = cityId;

            int p = model.Page != null?model.Page.GetValueOrDefault() : 1;

            return(Json(await this.service.GetListingPage(ClaimsHelper.GetUserId(this.User), model)));
        }
示例#3
0
        private IQueryable <Listing> GetListingsQuery(string userId, ListingSearchViewModel search)
        {
            IQueryable <Listing> query = this.db.Listings;

            var role = this.identityHelper.GetRoleByUserId(userId);

            if (userId != null && role.Result.Name != "Student")
            {
                query = query.WhereOwnerIs(userId);
            }

            if (search.Title != null)
            {
                query = query.Where(l => l.Title.Contains(search.Title));
            }

            if (search.CityId != null)
            {
                int cityId = search.CityId.GetValueOrDefault();
                query = query.Where(l => l.CityId == cityId);
            }

            return(query);
        }
示例#4
0
 public async Task <List <Listing> > GetListings(string userId, ListingSearchViewModel search)
 {
     return(await this.GetListingsQuery(userId, search).ToListAsync());
 }
示例#5
0
        public async Task <CompanyListingListPageViewModel> GetListingPage(string userId, ListingSearchViewModel search)
        {
            CompanyListingListPageViewModel model = new CompanyListingListPageViewModel();
            var listings = await this.GetListingsQuery(userId, search)
                           .Paginate(10, search.Page != null ? search.Page.GetValueOrDefault() : 1)
                           .ToListAsync();

            model.Listings = listings.Select(l => new ListingViewModel()
            {
                Id    = l.Id,
                Title = l.Title,
            }).ToList();

            model.Page  = search.Page.GetValueOrDefault();
            model.Total = await this.GetListingsQuery(userId, search).CountAsync();

            return(model);
        }
        public ActionResult MainSearch()
        {
            var model = new ListingSearchViewModel();

            return(PartialView("~/Views/Shared/Widgets/Search/_MainSearch.cshtml", model));
        }
        //public ActionResult search(int? page,string order, string text="",int id=0)
        public ActionResult search(ListingSearchViewModel model)
        {
            string priceOrder = "price";
            string townOrder  = "town";

            // model.controller = "listing";
            //    model.action = "search";
            if (ModelState.IsValid)
            {
                //compare max and min price
                if (model.from > model.to)
                {
                    ModelState.AddModelError("", "Max price cannot be less than Min price.");
                }
                Category searchedCategory;
                DateTime now       = DateTime.Now;
                var      predicate = PredicateBuilder.False <Listing>();
                var      listingsQ = from l in db.Listings.Include("Category").Include("images")
                                     where l.Status == "live" && l.Expires > now
                                     select l;

                //using LinqKit predicate dynamic linq to enable 'OR' logical 'Where' chaining
                if (!String.IsNullOrEmpty(model.text))
                {
                    predicate = predicate.Or(c => c.Title.ToLower().Contains(model.text.ToLower()) || c.Description.ToLower().Contains(model.text.ToLower()));
                }
                if (model.from > 0)
                {
                    predicate = predicate.And(c => c.Price >= model.from);
                }
                if (model.to > 0)
                {
                    predicate = predicate.And(c => c.Price <= model.to);
                }
                if (!String.IsNullOrEmpty(model.location))
                {
                    predicate = predicate.And(c => c.Town.ToLower().Contains(model.location.ToLower()));
                }
                //find listigns from this and child categories
                if (model.Category != null && model.Category.CategoryId > 0)
                {
                    List <Category> categoryTree = categoryHelper.allSubCategories(model.Category.CategoryId);
                    if (categoryTree.Count > 0)
                    {
                        SortedDictionary <string, int> crumbs = new SortedDictionary <string, int>();
                        foreach (var leafNodeCategory in categoryTree)
                        {
                            crumbs.Add(leafNodeCategory.Title, leafNodeCategory.CategoryId);
                        }
                        int[] ids = crumbs.Values.ToArray();
                        //string[] titles = crumbs.Keys.ToArray();
                        predicate        = predicate.And(c => ids.Contains(c.CategoryId));
                        searchedCategory = db.Categories.Find(model.cat);
                        //predicate = predicate.Or(c => c.Category.Title.ToLower().Contains(model.text.ToLower()) || c.Category.Controller.ToLower().Contains(model.text.ToLower()) || c.Category.Tags.ToLower().Contains(model.text.ToLower()));
                    }
                }
                //also search for categories like this if id not specified
                if (model.cat <= 0 || model.cat == null)
                {
                    predicate = predicate.Or(c => c.Category.Title.ToLower().Contains(model.text.ToLower()) || c.Category.Controller.ToLower().Contains(model.text.ToLower()) || c.Category.Tags.ToLower().Contains(model.text.ToLower()));
                }
                listingsQ = listingsQ.AsExpandable().Where(predicate);

                //ordering
                listingsQ = listingsQ.OrderByDescending(c => c.Updated);
                if (!String.IsNullOrEmpty(model.order))
                {
                    if (model.order == "price")
                    {
                        listingsQ  = listingsQ.OrderBy(c => c.Price);
                        priceOrder = "price_desc";
                    }

                    if (model.order == "price_desc")
                    {
                        listingsQ  = listingsQ.OrderByDescending(l => l.Price);
                        priceOrder = "price";
                    }

                    if (model.order == "town")
                    {
                        townOrder = "town_desc";
                        listingsQ = listingsQ.OrderBy(l => l.Town);
                    }
                    if (model.order == "town_desc")
                    {
                        townOrder = "town";
                        listingsQ = listingsQ.OrderByDescending(l => l.Town);
                    }
                }
                else
                {
                    listingsQ = listingsQ.OrderByDescending(c => c.Updated);
                }
                ViewBag.searchViewModel = model;
                ViewBag.priceOrder      = priceOrder;
                ViewBag.townOrder       = townOrder;
                ViewBag.sortOrder       = model.order;
                ViewBag.page            = model.page;
                return(View(listingsQ.ToPagedList(1, pagesize)));
            }
            ViewBag.priceOrder = priceOrder;
            ViewBag.townOrder  = townOrder;
            ViewBag.sortOrder  = model.order;
            ViewBag.page       = 1;

            ViewBag.searchViewModel = model;
            List <Listing> type = new List <Listing>();

            return(View(type.ToPagedList(1, pagesize)));
        }