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));
        }
Exemple #2
0
        public DataWrapper GetMakesByCategoryId(int categoryId)
        {
            var makes = CarsForSaleService.GetMakesDomainByCategoryId(categoryId)
                        .OrderBy(m => m.Description)
                        .ToList();

            return(DataWrapper(new
            {
                category_id = categoryId,
                makes
            },
                               makes.Count()));
        }
Exemple #3
0
        public DataWrapper GetModelsByMakeId(int makeId)
        {
            var models = CarsForSaleService.GetModelsDomainByMakeId(makeId)
                         .OrderBy(m => m.Description)
                         .ToList();

            return(DataWrapper(new
            {
                make_id = makeId,
                models
            },
                               models.Count()));
        }
Exemple #4
0
        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));
        }
Exemple #6
0
        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
                };
            }));
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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()));
        }
Exemple #9
0
        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));
        }