public DataWrapper GetInventory([FromBody] string jsonString) { Query query; try { query = JsonConvert.DeserializeObject <Query>(jsonString); } catch { throw new HttpResponseException(HttpStatusCode.NotFound); } #region - STEP 1: Create search-criteria model var searchCriteria = new SearchCriteria { Zipcode = query.Zipcode, MaxPrice = query.MaxPrice, MaxMileage = query.MaxMileage, RadiusMiles = query.RadiusMiles, Skip = query.Page.Skip, Take = query.Page.Take, Sort = new SearchCriteria.Dto.Sort(query.Sort.By, query.Sort.Direction), MakeModelComboFilter = new MakeModelComboFilter(query.Filters.MakeIds, query.Filters.MakeIdModels), CategoryMakeComboFilter = new CategoryMakeComboFilter(query.Filters.CategoryIds, query.Filters.CategoryIdMakes), PriceRangeFilter = new PriceRangeFilter(query.Filters.PriceRange), MileageRangeFilter = new MileageRangeFilter(query.Filters.MileageRange), YearRangeFilter = new YearRangeFilter(query.Filters.YearRange), FuelTypeFilter = new FuelTypeFilter(query.Filters.FuelTypeIds), OptionBitsFilter = new OptionBitsFilter(query.Filters.OptionIds) }; #endregion #region - STEP 2: Query service and create response model var searchResults = CarsForSaleService.SearchAsync(searchCriteria).Result; // if we have a page requested that no longer has any inventory, // we will reset the page to 1, requery, and return page number one's results. if (!searchResults.CarsForSale.Any() && query.Page.Current > 1) { query.Page.Current = 1; searchCriteria.Skip = query.Page.Skip; searchResults = CarsForSaleService.SearchAsync(searchCriteria).Result; } List <int> autonationDealers = LeadService.GetLeadAutonationUsedCarDealers(); var response = new Response { Zipcode = query.Zipcode, InventoryCount = searchResults.InventoryCount, MaxPrice = searchResults.MaxPrice, MaxMileage = searchResults.MaxMileage, MinPrice = searchResults.MinPrice, MinMileage = searchResults.MinMileage, PriceGroupQuantities = searchResults.PriceGroupQuantities, MileageGroupQuantities = searchResults.MileageGroupQuantities, Page = new Page { Current = searchResults.Page.Current, ItemsPerPage = searchResults.Page.ItemsPerPage, TotalPages = searchResults.Page.TotalPages }, CarsForSale = searchResults.CarsForSale .Select(c => new CarForSale { Id = c.Id, Vin = c.Vin, MakeId = c.MakeId, Make = c.Make, Model = c.Model, Year = c.Year, IsNewStatus = c.IsNewStatus, CityMpg = c.CityMpg, HighwayMpg = c.HighwayMpg, Mileage = c.Mileage.ToString("#,###"), HasMissingMileage = c.Mileage <= 0, AskingPrice = c.HasValidAskingPrice ? c.AskingPrice.ToString("#,###") : String.Empty, HasMissingPrice = !c.HasValidAskingPrice, Cylinders = c.Cylinders.ToString(CultureInfo.InvariantCulture), ExteriorColor = c.ExteriorColor, InteriorColor = c.InteriorColor, DriveType = c.DriveType, TransmissionType = c.TransmissionType, Distance = c.DistanceInMiles, PrimaryImageUrl = c.PrimaryImage.IsNotNullOrEmpty() ? c.PrimaryImage : String.Empty, Details = (query.IsDetailPage ? c.VehicleDetails : null), Dealer = new Dealer { Id = c.Dealer.Id, Name = c.Dealer.Name, Phone = c.Dealer.Phone, City = c.Dealer.City, State = c.Dealer.State, IsTrusted = c.Dealer.IsPremiumPlacement, Message = (query.IsDetailPage ? c.Dealer.Message : null), Latitude = c.Dealer.Latitude, Longitude = c.Dealer.Longitude, AutonationDealer = autonationDealers.Contains(c.Dealer.Id) }, DealerHours = new DealerHours { SalesMonOpen = GetDealerHour(c.Dealer.Id, "SalesMonOpen"), SalesMonClose = GetDealerHour(c.Dealer.Id, "SalesMonClose"), SalesTueOpen = GetDealerHour(c.Dealer.Id, "SalesTueOpen"), SalesTueClose = GetDealerHour(c.Dealer.Id, "SalesTueClose"), SalesWedOpen = GetDealerHour(c.Dealer.Id, "SalesWedOpen"), SalesWedClose = GetDealerHour(c.Dealer.Id, "SalesWedClose"), SalesThrOpen = GetDealerHour(c.Dealer.Id, "SalesThrOpen"), SalesThrClose = GetDealerHour(c.Dealer.Id, "SalesThrClose"), SalesFriOpen = GetDealerHour(c.Dealer.Id, "SalesFriOpen"), SalesFriClose = GetDealerHour(c.Dealer.Id, "SalesFriClose"), SalesSatOpen = GetDealerHour(c.Dealer.Id, "SalesSatOpen"), SalesSatClose = GetDealerHour(c.Dealer.Id, "SalesSatClose"), SalesSunOpen = GetDealerHour(c.Dealer.Id, "SalesSunOpen"), SalesSunClose = GetDealerHour(c.Dealer.Id, "SalesSunClose") } }) }; #endregion #region - Handle additional data for the vehicle detail page (singles) if (query.IsDetailPage && response.CarsForSale.Any()) { var car = response.CarsForSale.ToList()[0]; var additionalData = CarsForSaleService.GetCarForSaleByDealerIdByInventoryId(car.Dealer.Id, car.Id); if (additionalData != null) { car.SellerNotes = additionalData.SellerNotes; car.ImageUrls = additionalData.ImageUrls; car.Details = additionalData.VehicleDetails; car.Dealer.Message = additionalData.Dealer.Message; } response.CarsForSale = new List <CarForSale> { car }; } #endregion return(DataWrapper(response, response.CarsForSale.Count())); }
public ActionResult VehicleDetails(string q) { const string assetsPrefix = "carsforsale.vehicledetails"; // If no query on querystring, redirect to /cars-for-sale/ landing page. q = q ?? String.Empty; var parts = q.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length < 2) { return(RedirectToRoute("CarsForSale_Index")); } var dealerId = Int32.Parse(parts[0]); var inventoryId = Int32.Parse(parts[1]); var carForSale = CarsForSaleService.GetCarForSaleByDealerIdByInventoryId(dealerId, inventoryId); // If inventory_id no longer exists, redirect to /cars-for-sale/results/ page. if (carForSale == null) { return(RedirectToRoute("CarsForSale_Results", new { q = String.Join("|", parts.Skip(2)) })); } List <int> autonationDealers = LeadService.GetLeadAutonationUsedCarDealers(); List <DealerHours> autonationDealerHours = LeadService.GetLeadAutonationUsedCarDealerHours(dealerId) as List <DealerHours>; DealerHours hours = autonationDealerHours.FirstOrDefault(); const string na = "NA"; string salesMonOpen = na, salesMonClose = na, salesTueOpen = na, salesTueClose = na, salesWedOpen = na, salesWedClose = na, salesThrOpen = na, salesThrClose = na, salesFriOpen = na, salesFriClose = na, salesSatOpen = na, salesSatClose = na, salesSunOpen = na, salesSunClose = na; if (autonationDealerHours != null && autonationDealerHours.Any()) { salesMonOpen = hours.SalesMonOpen.Length > 1 ? hours.SalesMonOpen : na; salesMonClose = hours.SalesMonClose.Length > 1 ? hours.SalesMonClose : na; salesTueOpen = hours.SalesTueOpen.Length > 1 ? hours.SalesTueOpen : na; salesTueClose = hours.SalesTueClose.Length > 1 ? hours.SalesTueClose : na; salesWedOpen = hours.SalesWedOpen.Length > 1 ? hours.SalesWedOpen : na; salesWedClose = hours.SalesWedClose.Length > 1 ? hours.SalesWedClose : na; salesThrOpen = hours.SalesThrOpen.Length > 1 ? hours.SalesThrOpen : na; salesThrClose = hours.SalesThrClose.Length > 1 ? hours.SalesThrClose : na; salesFriOpen = hours.SalesFriOpen.Length > 1 ? hours.SalesFriOpen : na; salesFriClose = hours.SalesFriClose.Length > 1 ? hours.SalesFriClose : na; salesSatOpen = hours.SalesSatOpen.Length > 1 ? hours.SalesSatOpen : na; salesSatClose = hours.SalesSatClose.Length > 1 ? hours.SalesSatClose : na; salesSunOpen = hours.SalesSunOpen != null && hours.SalesSunOpen.Length > 1 ? hours.SalesSunOpen : na; salesSunClose = hours.SalesSunClose != null && hours.SalesSunClose.Length > 1 ? hours.SalesSunClose : na; } var metadata = MetadataService.GetMetadataForPage(HttpContext); var viewModel = new VehicleDetailsViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), TrackMeta = new TrackMeta(metadata) { Make = carForSale.Make, SuperModel = carForSale.Model, Year = carForSale.Year.ToString(CultureInfo.InvariantCulture) }, AdvertMeta = new AdvertMeta(new { make = carForSale.Make, model = carForSale.Model, year = carForSale.Year, category = carForSale.Category }), OfferMeta = new OfferMeta(new { make = carForSale.Make, model = carForSale.Model }), CarForSale = new VehicleDetailsViewModel.Dto.CarForSale { InventoryId = carForSale.Id, MakeId = carForSale.MakeId, Make = carForSale.Make, Model = carForSale.Model, Year = carForSale.Year, Trim = carForSale.Trim, Category = carForSale.Category, Mileage = carForSale.Mileage, HasMissingMileage = carForSale.Mileage <= 0, AskingPrice = carForSale.AskingPrice, HasMissingPrice = carForSale.AskingPrice <= 0, ExteriorColor = carForSale.ExteriorColor, InteriorColor = carForSale.InteriorColor, Cylinders = carForSale.Cylinders.ToString(CultureInfo.InvariantCulture), NumOfDoors = carForSale.NumOfDoors, TransmissionType = carForSale.TransmissionType, ImageUrls = carForSale.ImageUrls, Vin = carForSale.Vin, CityMpg = carForSale.CityMpg, HighwayMpg = carForSale.HighwayMpg, VehicleDetails = carForSale.VehicleDetails, SellerNotes = carForSale.SellerNotes, Dealer = new VehicleDetailsViewModel.Dto.Dealer { Name = carForSale.Dealer.Name, Phone = carForSale.Dealer.Phone, City = carForSale.Dealer.City, State = carForSale.Dealer.State, IsTrusted = carForSale.Dealer.IsPremiumPlacement, Message = carForSale.Dealer.Message, Latitude = carForSale.Dealer.Latitude, Longitude = carForSale.Dealer.Longitude, AutonationDealer = autonationDealers.Contains(carForSale.Dealer.Id) }, DealerHours = new VehicleDetailsViewModel.Dto.DealerHours() { SalesMonOpen = salesMonOpen, SalesMonClose = salesMonClose, SalesTueOpen = salesTueOpen, SalesTueClose = salesTueClose, SalesWedOpen = salesWedOpen, SalesWedClose = salesWedClose, SalesThrOpen = salesThrOpen, SalesThrClose = salesThrClose, SalesFriOpen = salesFriOpen, SalesFriClose = salesFriClose, SalesSatOpen = salesSatOpen, SalesSatClose = salesSatClose, SalesSunOpen = salesSunOpen, SalesSunClose = salesSunClose } } }; var primaryImage = viewModel.CarForSale.ImageUrls.FirstOrDefault(); var inventoryJsonStr = JsonConvert.SerializeObject(new { id = inventoryId, dealerId, city = viewModel.CarForSale.Dealer.City, state = viewModel.CarForSale.Dealer.State, vin = viewModel.CarForSale.Vin, price = viewModel.CarForSale.AskingPrice, mileage = viewModel.CarForSale.Mileage, hasAutocheck = carForSale.Dealer.HasAutoCheckId, year = viewModel.CarForSale.Year, dealerPhone = viewModel.CarForSale.Dealer.Phone, hasValidPhoneNum = viewModel.CarForSale.Dealer.HasValidPhoneNumber, makeId = viewModel.CarForSale.MakeId, make = viewModel.CarForSale.Make, model = viewModel.CarForSale.Model, primaryImage = primaryImage ?? String.Empty }); viewModel.RegisterPageJson(inventoryJsonStr, "ABT.pageJson.inventory"); if (autonationDealers.Contains(carForSale.Dealer.Id)) { return(View("VehicleDetailsBranded", viewModel)); } return(View("VehicleDetails", viewModel)); }