public ActionResult AdvancedSearchResult(string sortOrder, string currentFilter, int?page) { var user = User.Identity.Name; var login = AccountService.GetLoginByEmail(user); var IsUserServiceSupplier = CompanyService.IsUserServiceSupplier(login.UserName); bool isOwner = false; AdvancedMarketJobSearchModel model = (AdvancedMarketJobSearchModel)TempData["AdvancedSearch"] ?? new AdvancedMarketJobSearchModel(); model.Page = page ?? 1; if (model.Suburb == null) { model.Suburb = ""; } if (model.SuburbList == null) { model.SuburbList = new List <string>(); } if (model.Title == null) { model.Title = ""; } string newFilter = currentFilter; if (!String.IsNullOrEmpty(currentFilter)) { Dictionary <string, string> keyValuePairs = currentFilter.Split(',') .Select(value => value.Split('=')) .ToDictionary(pair => pair[0], pair => pair[1]); if (keyValuePairs["Title"] != "") { model.Title = keyValuePairs["Title"]; } if (keyValuePairs["MaxBudget"] != "") { model.MaxBudget = Convert.ToInt32(keyValuePairs["MaxBudget"]); } if (keyValuePairs["MinBudget"] != "") { model.MinBudget = Convert.ToInt32(keyValuePairs["MinBudget"]); } for (int j = 0; keyValuePairs.ContainsKey(("Suburb" + j)); j++) { model.SuburbList.Add(keyValuePairs["Suburb" + j]); } } else { newFilter = "MaxBudget=" + model.MaxBudget.ToString() + "," + "MinBudget=" + model.MinBudget + "," + "Title=" + model.Title.ToString(); for (int i = 0; i < model.SuburbList.Count; i++) { newFilter = newFilter + ",Suburb" + i + "=" + model.SuburbList[i]; } } var jobs = JobService.AdvancedSearchMarketJob(model, sortOrder); var rvr = new RouteValueDictionary(new { SearchString = model.SearchString, ReturnUrl = model.ReturnUrl }); var sortOrders = new List <SortOrderModel>(); sortOrders.Add(new SortOrderModel { SortOrder = "Latest First", ActionName = "AdvancedSearchResult", RouteValues = rvr.AddRouteValue("SortOrder", "Latest First") }); sortOrders.Add(new SortOrderModel { SortOrder = "Earliest First", ActionName = "AdvancedSearchResult", RouteValues = rvr.AddRouteValue("SortOrder", "Earliest First") }); sortOrders.Add(new SortOrderModel { SortOrder = "Request Status", ActionName = "AdvancedSearchResult", RouteValues = rvr.AddRouteValue("SortOrder", "Request Status") }); model.SortOrders = sortOrders; model.SearchCount = jobs.SearchCount; TempData["CurrentLink"] = isOwner ? "MarketJobsOwner" : "MarketJobs"; if (jobs.SearchCount == 0) { ViewBag.SearchCount = 0; } model.PagedInput = new PagedInput { ActionName = "AdvancedSearchResult", ControllerName = "Home", PagedLinkValues = new RouteValueDictionary(new { SortOrder = model.SortOrder, currentFilter = newFilter, ReturnUrl = model.ReturnUrl }) }; if (String.IsNullOrWhiteSpace(currentFilter)) { model.Page = 1; } model.PageCount = jobs.Items.PageCount; model.Items = jobs.Items; ViewBag.IsOwnerView = isOwner; ViewBag.IsUserServiceSupply = CompanyService.IsUserServiceSupplier(user); ViewBag.IsProfileComplete = CompanyService.IsProfileComplete(login); model.IsUserServiceSupply = CompanyService.IsUserServiceSupplier(user); model.IsProfileComplete = CompanyService.IsProfileComplete(login); return(View(model)); }
public static SearchResult AdvancedSearchMarketJob(AdvancedMarketJobSearchModel model, string sortOder) { using (var db = new KeysEntities()) { var allJobRequests = db.TenantJobRequest.Where(x => x.JobStatusId == 1); var data = allJobRequests.Select(x => new JobMarketModel { Id = x.Id, PropertyId = x.PropertyId, Title = x.Title, JobDescription = x.JobDescription, MaxBudget = x.MaxBudget, MediaFiles = x.TenantJobRequestMedia.Select(y => new MediaModel { Data = y.NewFileName, Id = y.Id, NewFileName = y.NewFileName, OldFileName = y.OldFileName, Status = "load", }).ToList(), //}, Address = new AddressViewModel { AddressId = x.Property.Address.AddressId, CountryId = x.Property.Address.CountryId, Number = x.Property.Address.Number.Replace(" ", ""), Street = x.Property.Address.Street.Trim(), City = x.Property.Address.City.Trim(), Suburb = x.Property.Address.Suburb.Trim() ?? "", PostCode = x.Property.Address.PostCode.Replace(" ", ""), }, PropertyAddress = x.Property.Address.Number.ToString() + " " + x.Property.Address.Street.ToString() + " " + x.Property.Address.Suburb.ToString() + " " + x.Property.Address.City.ToString(), CreatedOn = x.CreatedOn, }).AsQueryable(); var allItems = data.OrderByDescending(x => x.CreatedOn).ToPagedList(model.Page, 10); allItems.ToList().ForEach(x => x.MediaFiles.ForEach(y => y.InjectMediaModelViewProperties())); // code for search and filtering should be here switch (sortOder) { case "JobDesc": data = data.OrderBy(s => s.JobDescription); break; case "JobDesc_desc": data = data.OrderBy(s => s.JobDescription); break; case "Date": data = data.OrderBy(s => s.CreatedOn); break; case "Date_desc": data = data.OrderByDescending(s => s.CreatedOn); //data = data.OrderByDescending(s => DateTime.Parse(s.PostedDate)); break; case "MaxBudget": data = data.OrderBy(s => s.MaxBudget); break; case "maxBudget_desc": data = data.OrderByDescending(s => s.MaxBudget); break; case "Title": data = data.OrderBy(s => s.Title); break; case "Title_Desc": data = data.OrderByDescending(s => s.Title); break; default: data = data.OrderByDescending(s => s.CreatedOn); break; } if (model.SuburbList.Count > 0) { data = from r in data where model.SuburbList.Contains(r.Address.Suburb) select r; } data = from r in data where ((r.MaxBudget >= (model.MinBudget ?? r.MaxBudget)) && (r.MaxBudget <= (model.MaxBudget ?? r.MaxBudget))) select r; var items = data.OrderBy(x => x.CreatedOn).ToPagedList(model.Page, 10); items.ToList().ForEach(x => x.MediaFiles.ForEach(y => y.InjectMediaModelViewProperties())); var count = items.Count; var result = new SearchResult { SearchCount = items.Count, Items = count == 0 ? allItems : items }; return(result); } }
public ActionResult AdvanceSearch(string sortOrder, int?page, AdvancedMarketJobSearchModel advancedSearch) { TempData["AdvancedSearch"] = advancedSearch; return(RedirectToAction("AdvancedSearchResult")); }