public ActionResult MyQuotes(QuotesSearchViewModel model) { var user = User.Identity.Name; var login = AccountService.GetLoginByEmail(user); if (String.IsNullOrWhiteSpace(model.SortOrder)) { model.SortOrder = "Latest Date"; } if (String.IsNullOrWhiteSpace(model.Status)) { model.Status = "opening"; } var res = CompanyService.GetJobQuotes(model, login); model.PagedInput = new PagedInput { ActionName = "MyQuotes", ControllerName = "Manage", PagedLinkValues = new RouteValueDictionary(new { SortOrder = model.SortOrder, SearchString = model.SearchString }) }; var rvr = new RouteValueDictionary(new { SearchString = model.SearchString }); var sortOrders = new List <SortOrderModel>(); sortOrders.Add(new SortOrderModel { SortOrder = "Lowest Amount", ActionName = "MyQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Lowest Amount") }); sortOrders.Add(new SortOrderModel { SortOrder = "Highest Amount", ActionName = "MyQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Highest Amount") }); sortOrders.Add(new SortOrderModel { SortOrder = "Latest Date", ActionName = "MyQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Latest Date") }); sortOrders.Add(new SortOrderModel { SortOrder = "Earliest Date", ActionName = "MyQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Earliest Date") }); model.SortOrders = sortOrders; model.SearchCount = res.SearchCount; if (String.IsNullOrWhiteSpace(model.SearchString)) { model.Page = 1; } model.PageCount = res.Items.PageCount; model.Items = res.Items; model.EditUrl = "/Companies/Manage/EditJobQuote"; model.DeleteUrl = "/Companies/Manage/DeleteJobQuote"; TempData["CurrentLink"] = "MyQuotes"; return(View(model)); }
public static SearchResult GetJobQuotes(QuotesSearchViewModel model, Login login) { using (var db = new KeysEntities()) { var data = db.JobQuote.Where(x => x.ProviderId == login.Id) .Select(q => new { Model = new JobQuoteModel { Id = q.Id, Amount = q.Amount, Note = q.Note, JobRequestId = q.JobRequestId, MediaFiles = q.JobQuoteMedia.Select(y => new MediaModel { Id = y.Id, OldFileName = y.FileName.Substring(36), NewFileName = y.FileName }).ToList(), }, JobDescription = q.TenantJobRequest.JobDescription, CreatedOn = q.CreatedOn, PropertyAddress = q.TenantJobRequest.Property.Address.Number + " " + q.TenantJobRequest.Property.Address.Street + ", " + q.TenantJobRequest.Property.Address.Suburb + ", " + q.TenantJobRequest.Property.Address.City + " - " + q.TenantJobRequest.Property.Address.PostCode, Address = new AddressViewModel { AddressId = q.TenantJobRequest.Property.Address.AddressId, CountryId = q.TenantJobRequest.Property.Address.CountryId, Number = q.TenantJobRequest.Property.Address.Number.Replace(" ", ""), Street = q.TenantJobRequest.Property.Address.Street.Trim(), City = q.TenantJobRequest.Property.Address.City.Trim(), Suburb = q.TenantJobRequest.Property.Address.Suburb.Trim() ?? "", PostCode = q.TenantJobRequest.Property.Address.PostCode.Replace(" ", "") }, Status = q.Status }); if (!String.IsNullOrWhiteSpace(model.Status)) { data = data.Where(x => x.Status.ToLower() == model.Status); } var allItems = data.OrderByDescending(x => x.CreatedOn).ToPagedList(model.Page, 10); switch (model.SortOrder) { case "Lowest Amount": data = data.OrderBy(s => s.Model.Amount); break; case "Highest Amount": data = data.OrderByDescending(s => s.Model.Amount); break; case "Latest Date": data = data.OrderByDescending(s => s.CreatedOn); break; case "Earliest Date": data = data.OrderBy(s => s.CreatedOn); break; default: data = data.OrderByDescending(s => s.CreatedOn); break; } if (!String.IsNullOrWhiteSpace(model.SearchString)) { SearchUtil searchTool = new SearchUtil(); int searchType = searchTool.CheckDisplayType(model.SearchString); string formatString = searchTool.ConvertString(model.SearchString); decimal number; var canParse = Decimal.TryParse(formatString, out number); switch (searchType) { case 1: data = data.Where(x => x.PropertyAddress.ToLower().EndsWith(formatString) || (x.Status ?? "").ToLower().EndsWith(formatString)); if (canParse) { data = data.Where(x => x.Model.Amount.Equals(number)); } break; case 2: data = data.Where(x => x.PropertyAddress.ToLower() == formatString || (x.Status ?? "").ToLower().StartsWith(formatString)); if (canParse) { data = data.Where(x => x.Model.Amount.Equals(number)); } break; case 3: data = data.Where(x => x.PropertyAddress.ToLower().Contains(formatString) || (x.Status ?? "").ToLower().Contains(formatString)); if (canParse) { data = data.Where(x => x.Model.Amount.Equals(number)); } break; } } var items = data.ToPagedList(model.Page, 10); var count = items.Count; items = count == 0 ? allItems : items; items.ToList().ForEach(x => x.Model.MediaFiles.ForEach(y => y.InjectMediaModelViewProperties())); var result = new SearchResult { SearchCount = items.Count, Items = count == 0 ? allItems : items }; return(result); } }
public ActionResult GetJobQuotes(QuotesSearchViewModel model) { if (model.SortOrder == null) { model.SortOrder = "Latest Listing"; } var data = db.JobQuote.Where(x => x.Status.ToLower() == "opening") .Select(x => new { Model = new JobQuoteModel { Id = x.Id, JobRequestId = x.JobRequestId, Amount = x.Amount, Status = x.Status, Note = x.Note, IsViewed = x.IsViewed, MediaFiles = x.JobQuoteMedia.Select(y => new MediaModel { Id = y.Id, OldFileName = y.FileName.Substring(36), NewFileName = y.FileName, }).ToList(), }, CreatedOn = x.CreatedOn, ProviderName = x.ServiceProvider != null ? x.ServiceProvider.Person != null ? x.ServiceProvider.Person.FirstName : "" : "", CompanyName = x.ServiceProvider != null ? x.ServiceProvider.Company != null ? x.ServiceProvider.Company.Name : "" : "", }); if (model.MarketJobId.HasValue) { data = data.Where(x => x.Model.JobRequestId == model.MarketJobId); var mJob = db.TenantJobRequest.FirstOrDefault(x => x.Id == model.MarketJobId); model.MarketJob = mJob.MapTo <MarketJobModel>(); } var allItems = data.OrderByDescending(x => x.CreatedOn).ToPagedList(model.Page, 10); switch (model.SortOrder) { case "Company (A-Z)": data = data.OrderBy(s => s.CompanyName); break; case "Company (Z-A)": data = data.OrderByDescending(s => s.CompanyName); break; case "Lowest Amount": data = data.OrderBy(s => s.Model.Amount); break; case "Highest Amount": data = data.OrderByDescending(s => s.Model.Amount); break; default: data = data.OrderByDescending(s => s.Model.Amount); break; } if (!String.IsNullOrWhiteSpace(model.SearchString)) { SearchTool searchTool = new SearchTool(); int searchType = searchTool.CheckDisplayType(model.SearchString); string formatString = searchTool.ConvertString(model.SearchString); switch (searchType) { case 1: data = data.Where(x => x.Model.Amount.ToString() == formatString || x.CompanyName.ToLower().StartsWith(formatString) || x.Model.Note.ToLower().StartsWith(formatString)); break; case 2: data = data.Where(x => x.Model.Amount.ToString() == formatString || x.CompanyName.ToLower().EndsWith(formatString) || x.Model.Note.ToLower().EndsWith(formatString)); break; case 3: double number; if (Double.TryParse(formatString, out number)) { data = data.Where(y => double.Parse(y.Model.Amount.ToString().Split(',')[0]) <= double.Parse(formatString.Split(',')[0])); } else { data = data.Where(y => y.Model.Note.ToLower().Contains(formatString)); } break; } } var items = data.ToPagedList(model.Page, 10); var count = items.Count; items = count == 0 ? allItems : items; items.ToList().ForEach(x => x.Model.MediaFiles.ForEach(y => y.InjectMediaModelViewProperties())); var result = new SearchResult { SearchCount = items.Count, Items = count == 0 ? allItems : items }; model.PagedInput = new PagedInput { ActionName = "GetJobQuotes", ControllerName = "Home", PagedLinkValues = new RouteValueDictionary(new { SortOrder = model.SortOrder, SearchString = model.SearchString, MarketJobId = model.MarketJobId }) }; var formInputs = new List <SearchInput>(); formInputs.Add(new SearchInput { Name = "MarketJobId", Value = model.MarketJobId.ToString() }); model.InputValues = formInputs; var rvr = new RouteValueDictionary(new { SearchString = model.SearchString, MarketJobId = model.MarketJobId }); var sortOrders = new List <SortOrderModel>(); sortOrders.Add(new SortOrderModel { SortOrder = "Company (A-Z)", ActionName = "GetJobQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Name") }); sortOrders.Add(new SortOrderModel { SortOrder = "Company (Z-A)", ActionName = "GetJobQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Company (Z-A)") }); sortOrders.Add(new SortOrderModel { SortOrder = "Lowest Amount", ActionName = "GetJobQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Lowest Amount") }); sortOrders.Add(new SortOrderModel { SortOrder = "Highest Amount", ActionName = "GetJobQuotes", RouteValues = rvr.AddRouteValue("SortOrder", "Higest Amount") }); model.SortOrders = sortOrders; model.SearchCount = result.SearchCount; if (String.IsNullOrWhiteSpace(model.SearchString)) { model.Page = 1; } model.PageCount = result.Items.PageCount; model.Items = result.Items; var currentJob = db.TenantJobRequest.Where(x => x.Id == model.MarketJobId).FirstOrDefault(); model.Address = currentJob.Property.Address?.ToAddressString() ?? ""; return(View(model)); }