public ActionResult Make(string makeSeoName) { const string assetsPrefix = "carsforsale.make"; var makeTranslator = UriTokenTranslators.GetMakeTranslatorBySeoName(makeSeoName); if (makeTranslator == null) { return(HttpNotFound()); } var metadata = MetadataService.GetMetadataForPage(HttpContext); var vspModelsTask = VehicleSpecService.GetModelsByMakeAsync(makeSeoName); // availableModels => represents models we actually have inventory for var availableModelsTask = CarsForSaleService.GetModelsDomainByMakeIdAsync(makeTranslator.AbtMakeId); vspModelsTask.Wait(); availableModelsTask.Wait(); var vspModels = vspModelsTask.Result; var availableModels = availableModelsTask.Result.Select(m => m.Description).ToList(); var models = vspModels .Where(m => availableModels.Contains(m.Name)) .Select(mo => new MakeViewModel.Dto.Model { MatchValue = String.Format("{0}~{1}", mo.AbtMakeId, mo.Name), Name = mo.Name, SeoName = mo.SeoName }); var viewModel = new MakeViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), TrackMeta = new TrackMeta(metadata) { Make = makeTranslator.Name }, AdvertMeta = new AdvertMeta(new { make = makeTranslator.Name }), OfferMeta = new OfferMeta(new { make = makeTranslator.Name }), Make = new MakeViewModel.Dto.Make { Name = makeTranslator.Name, SeoName = makeTranslator.SeoName }, Models = models }; return(View("Make", viewModel)); }
public DataWrapper GetMakesByCategoryId(int categoryId) { var makes = CarsForSaleService.GetMakesDomainByCategoryId(categoryId) .OrderBy(m => m.Description) .ToList(); return(DataWrapper(new { category_id = categoryId, makes }, makes.Count())); }
public DataWrapper GetModelsByMakeId(int makeId) { var models = CarsForSaleService.GetModelsDomainByMakeId(makeId) .OrderBy(m => m.Description) .ToList(); return(DataWrapper(new { make_id = makeId, models }, models.Count())); }
public DataWrapper GetMakesWithInventoryCount() { var filterMakes = CarsForSaleService.FilterDomains.Makes; var makes = CarsForSaleService.GetAllMakesWithInventoryCount() .Select(m => new { description = m.Key, match_value = filterMakes.First(fm => fm.Description == m.Key).MatchValue, count = m.Value }); return(DataWrapper(makes, makes.Count())); }
public ActionResult Index() { const string assetsPrefix = "carsforsale.index"; const int numberOfMakesToInitiallyShow = 36; var metadata = MetadataService.GetMetadataForPage(HttpContext); var makesTask = VehicleSpecService.GetAllMakesAsync(); var topMakeNames = CarsForSaleService.GetTopMakesWithInventoryCount(numberOfMakesToInitiallyShow); var categories = CarsForSaleService.FilterDomains.Categories; makesTask.Wait(); var makes = makesTask.Result; makes = makes.Where(m => !CarsForSaleService.MakesBlackList.Contains(m.Name)).ToList(); var viewModel = new IndexViewModel(assetsPrefix, metadata) { InlineHeadScript = AssetService.GetInlineHeadScript(), InlineHeadStyles = AssetService.GetInlineHeadStyles(assetsPrefix), AdvertMeta = new AdvertMeta(), TrackMeta = new TrackMeta(metadata), Makes = makes.Select(ma => new IndexViewModel.Dto.Make { CanShow = topMakeNames.ContainsKey(ma.Name), MatchValue = ma.AbtMakeId.ToString(CultureInfo.InvariantCulture), Name = ma.Name, SeoName = ma.SeoName }), Categories = categories.Select(cat => new IndexViewModel.Dto.Category { MatchValue = cat.MatchValue, Name = cat.Description }) }; return(View("Index", viewModel)); }
private static Task <Counts> GetMakeModelLevelMatchCounts(AvailabilityPingContext pingCtx) { if (pingCtx.MakeId.IsNullOrEmpty() || pingCtx.Model.IsNullOrEmpty()) { return(Task.Run(() => new Counts())); } return(Task.Run(() => { var newMakesTask = CarsForSaleService.SearchAsync(new SearchCriteria { Zipcode = pingCtx.Zipcode, MakeModelComboFilter = new MakeModelComboFilter(String.Empty, String.Format("{0}~{1}", pingCtx.MakeId, pingCtx.Model)), TrimIdFilter = new TrimIdFilter(pingCtx.TrimId), NewStatusFilter = new NewStatusFilter(NewStatusFilter.Status.New) }); var usedMakesTask = CarsForSaleService.SearchAsync(new SearchCriteria { Zipcode = pingCtx.Zipcode, MakeModelComboFilter = new MakeModelComboFilter(String.Empty, String.Format("{0}~{1}", pingCtx.MakeId, pingCtx.Model)), TrimIdFilter = new TrimIdFilter(pingCtx.TrimId), NewStatusFilter = new NewStatusFilter(NewStatusFilter.Status.Used) }); newMakesTask.Wait(); usedMakesTask.Wait(); var newMakes = newMakesTask.Result; var usedMakes = usedMakesTask.Result; return new Counts { NewCars = newMakes.InventoryCount, UsedCars = usedMakes.InventoryCount }; })); }
public DataWrapper FreeAutoCheckReport([FromBody] string queryStr) { var query = JsonConvert.DeserializeObject <AutoCheckQuery>(queryStr); var carForSale = CarsForSaleService.GetCarForSaleByDealerIdByInventoryId(query.DealerId, query.InventoryId); WebClient client = new WebClient(); var values = new NameValueCollection { { "VIN", carForSale.Vin }, { "CID", "7005279" }, { "PWD", "64ox9JFm" }, { "SID", carForSale.Dealer.AutoCheckId.ToString() } }; byte[] responseArray = client.UploadValues("https://www.autocheck.com/DealerWebLink.jsp", values); var autoCheckResponse = new AutoCheckResponse { AutoCheckData = Encoding.ASCII.GetString(responseArray) }; return(DataWrapper(autoCheckResponse)); }
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 DataWrapper GetSuggested([FromBody] string jsonString) { SuggestedQuery query; try { query = JsonConvert.DeserializeObject <SuggestedQuery>(jsonString); } catch { throw new HttpResponseException(HttpStatusCode.NotFound); } #region - STEP 1: Create search-criteria model var searchCriteria = new SearchCriteria { Zipcode = query.Zipcode, vdpPrice = query.VdpPrice, vdpMileage = query.VdpMileage, 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), PriceRangeFilter = new PriceRangeFilter(query.Filters.PriceRange), MileageRangeFilter = new MileageRangeFilter(query.Filters.MileageRange), YearRangeFilter = new YearRangeFilter(query.Filters.YearRange), DealersExclusion = new DealersExclusion(query.Exclusions.Dealers) }; #endregion #region - STEP 2: Query service and create response model var searchResults = CarsForSaleService.SuggestedSearchAsync(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.SuggestedSearchAsync(searchCriteria).Result; } var response = new Response { Zipcode = query.Zipcode, InventoryCount = searchResults.InventoryCount, 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), } }) }; #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); 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)); }