//http://stackoverflow.com/questions/11774741/load-partial-view-depending-on-dropdown-selection-in-mvc3 public async Task <ActionResult> ListingPartial(int categoryID) { // Custom fields var customFieldCategoryQuery = await _customFieldCategoryService.Query(x => x.CategoryID == categoryID).Include(x => x.MetaField.ListingMetas).SelectAsync(); var customFieldCategories = customFieldCategoryQuery.ToList(); var customFieldModel = new CustomFieldListingModel() { MetaCategories = customFieldCategories }; return(PartialView("_CategoryCustomFields", customFieldModel)); }
public async Task <ActionResult> ListingUpdate(int?id) { if (CacheHelper.Categories.Count == 0) { TempData[TempDataKeys.UserMessageAlertState] = "bg-danger"; TempData[TempDataKeys.UserMessage] = "[[[There are not categories available yet.]]]"; } Listing item; var model = new ListingUpdateModel() { Categories = CacheHelper.Categories }; if (id.HasValue) { item = await _listingService.FindAsync(id); if (item == null) { return(new HttpNotFoundResult()); } // Pictures var pictures = await _listingPictureservice.Query(x => x.ListingID == id).SelectAsync(); var picturesModel = pictures.Select(x => new PictureModel() { ID = x.PictureID, Url = ImageHelper.GetListingImagePath(x.PictureID), ListingID = x.ListingID, Ordering = x.Ordering }).OrderBy(x => x.Ordering).ToList(); model.Pictures = picturesModel; } else { item = new Listing() { CategoryID = CacheHelper.Categories.Any() ? CacheHelper.Categories.FirstOrDefault().ID : 0, Created = DateTime.Now.Date, LastUpdated = DateTime.Now.Date, Expiration = DateTime.Now.AddDays(30), Enabled = true, Active = true, } }; // Item model.ListingItem = item; // Custom fields var customFieldCategoryQuery = await _customFieldCategoryService.Query(x => x.CategoryID == item.CategoryID).Include(x => x.MetaField.ListingMetas).SelectAsync(); var customFieldCategories = customFieldCategoryQuery.ToList(); var customFieldModel = new CustomFieldListingModel() { ListingID = item.ID, MetaCategories = customFieldCategories }; model.CustomFields = customFieldModel; model.Users = UserManager.Users.ToList(); model.UserID = item.UserID; model.CategoryID = item.CategoryID; model.ListingTypeID = item.ListingTypeID; // Listing types model.ListingTypes = CacheHelper.ListingTypes.Where(x => x.CategoryListingTypes.Any(y => y.CategoryID == model.CategoryID)).ToList(); return(View(model)); }
private async Task GetSearchResult(SearchListingModel model) { IEnumerable <Listing> items = null; List <MetaFieldSearchModel> metaFields = model.CustomFields; // Category if (model.CategoryID != 0) { items = await _listingService.Query(x => x.CategoryID == model.CategoryID) .Include(x => x.ListingPictures) .Include(x => x.Category) .Include(x => x.ListingType) .Include(x => x.AspNetUser) .Include(x => x.ListingReviews) .Include(x => x.ListingMetas) .SelectAsync(); // Set listing types model.ListingTypes = CacheHelper.ListingTypes.Where(x => x.CategoryListingTypes.Any(y => y.CategoryID == model.CategoryID)).ToList(); //Custom fields which are searchable for selected category var customFieldCategoryQuery = await _customFieldCategoryService.Query(x => x.CategoryID == model.CategoryID && x.MetaField.Searchable).Include(x => x.MetaField.ListingMetas).SelectAsync(); var customFieldCategories = customFieldCategoryQuery.ToList(); model.CustomFields = customFieldCategoryQuery.Select(x => new MetaFieldSearchModel { ID = x.MetaField.ID, Name = x.MetaField.Name, Placeholder = x.MetaField.Placeholder, ControlTypeID = x.MetaField.ControlTypeID, Options = x.MetaField.Options, Ordering = x.MetaField.Ordering }).OrderBy(ob => ob.Ordering).ToList(); } else { model.ListingTypes = CacheHelper.ListingTypes; // All Custom fields which are searchable var metaFieldQuery = await _metaFieldService.Query(x => x.Searchable).SelectAsync(); model.CustomFields = metaFieldQuery.Select(x => new MetaFieldSearchModel { ID = x.ID, Name = x.Name, Placeholder = x.Placeholder, ControlTypeID = x.ControlTypeID, Options = x.Options, Ordering = x.Ordering }).OrderBy(ob => ob.Ordering).ToList(); } // Set default Listing Type if it's not set or listing type is not set if (model.ListingTypes.Count > 0 && (model.ListingTypeID == null || !model.ListingTypes.Any(x => model.ListingTypeID.Contains(x.ID)))) { model.ListingTypeID = new List <int>(); model.ListingTypeID.Add(model.ListingTypes.FirstOrDefault().ID); } // Search Text if (!string.IsNullOrEmpty(model.SearchText)) { model.SearchText = model.SearchText.ToLower(); // Search by title, description, location if (items != null) { items = items.Where(x => x.Title.ToLower().Contains(model.SearchText) || x.Description.ToLower().Contains(model.SearchText) || x.Location.ToLower().Contains(model.SearchText)); } else { items = await _listingService.Query( x => x.Title.ToLower().Contains(model.SearchText) || x.Description.ToLower().Contains(model.SearchText) || x.Location.ToLower().Contains(model.SearchText)) .Include(x => x.ListingPictures) .Include(x => x.Category) .Include(x => x.AspNetUser) .Include(x => x.ListingReviews) .SelectAsync(); } } // Latest if (items == null) { items = await _listingService.Query().OrderBy(x => x.OrderByDescending(y => y.Created)) .Include(x => x.ListingPictures) .Include(x => x.Category) .Include(x => x.AspNetUser) .Include(x => x.ListingReviews) .Include(x => x.ListingMetas) .SelectAsync(); } // Filter items by Listing Type items = items.Where(x => model.ListingTypeID.Contains(x.ListingTypeID)).ToList(); // Location if (!string.IsNullOrEmpty(model.Location)) { items = items.Where(x => !string.IsNullOrEmpty(x.Location) && x.Location.IndexOf(model.Location, StringComparison.OrdinalIgnoreCase) != -1); } // Custom fields if (metaFields != null) { metaFields.RemoveAll(x => x.Options == null); // ignore any blank default values if (metaFields.Count > 0) { var metaFieldSelected = metaFields.Select(x => new { x.ID, x.Options }).ToList(); //var metaFieldTest = items.Select(i => i.ListingMetas).ToList(); //debug test.... foreach (var metaField in metaFields) { items = items.Where(x => x.ListingMetas.Any(y => metaField.ID == y.FieldID && metaField.Options.Contains(y.Value))).ToList(); model.CustomFields.FirstOrDefault(x => x.ID == metaField.ID).Selected = metaField.Options; } } } // Picture if (model.PhotoOnly) { items = items.Where(x => x.ListingPictures.Count > 0); } /// Price if (model.PriceFrom.HasValue) { items = items.Where(x => x.Price >= model.PriceFrom.Value); } if (model.PriceTo.HasValue) { items = items.Where(x => x.Price <= model.PriceTo.Value); } // Show active and enabled only var itemsModelList = new List <ListingItemModel>(); foreach (var item in items.Where(x => x.Active && x.Enabled).OrderByDescending(x => x.Created)) { itemsModelList.Add(new ListingItemModel() { ListingCurrent = item, UrlPicture = item.ListingPictures.Count == 0 ? ImageHelper.GetListingImagePath(0) : ImageHelper.GetListingImagePath(item.ListingPictures.OrderBy(x => x.Ordering).FirstOrDefault().PictureID) }); } var breadCrumb = GetParents(model.CategoryID).Reverse().ToList(); model.BreadCrumb = breadCrumb; model.Categories = CacheHelper.Categories; model.Listings = itemsModelList; model.ListingsPageList = itemsModelList.ToPagedList(model.PageNumber, model.PageSize); model.Grid = new ListingModelGrid(model.ListingsPageList.AsQueryable()); }