public virtual StoreViewModel CreateStoreViewModel(CreateStoreViewModelParam param) { var store = param.Store; var storeViewModel = ViewModelMapper.MapTo <StoreViewModel>(store, param.CultureInfo); storeViewModel.Address = CreateStoreAddressViewModel(param); storeViewModel.LocalizedDisplayName = GetStoreLocalizedDisplayName(storeViewModel, param.CultureInfo); storeViewModel.FulfillmentLocationId = store.FulfillmentLocation.Id; storeViewModel.GoogleDirectionsLink = GetGoogleDirectionsLink(storeViewModel.Address); storeViewModel.GoogleStaticMapUrl = GetGoogleStaticMapUrl(storeViewModel.Address); storeViewModel.Url = StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam() { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, StoreNumber = store.Number, StoreName = storeViewModel.Name }); if (param.SearchPoint != null && storeViewModel.Address.Latitude != null && storeViewModel.Address.Longitude != null) { storeViewModel.DestinationToSearchPoint = Math.Round(GeoCodeCalculator.CalcDistance( storeViewModel.Address.Latitude.Value, storeViewModel.Address.Longitude.Value, param.SearchPoint.Lat, param.SearchPoint.Lng, EarthRadiusMeasurement.Kilometers), 2); } storeViewModel.Schedule = CreateStoreScheduleViewModel(param); return(storeViewModel); }
protected virtual string GetStoreCanonicalUrl(GetStorePageHeaderViewModelParam param, StoreViewModel store) { var relativeUri = StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, StoreNumber = param.StoreNumber, StoreName = store.Name }); if (HttpContext.Current == null) { Log.Error("HttpContext.Current is null"); return(relativeUri); } try { var baseUri = RequestUtils.GetBaseUrl(HttpContext.Current.Request.Url); var url = new Uri(baseUri, relativeUri); return(url.ToString()); } catch (Exception ex) { string fullStackTrace = ex.StackTrace + Environment.StackTrace; Log.Error($"Error retrieving store canonical url. Exception : {ex}, {fullStackTrace}"); return(relativeUri); } }
public virtual async Task <StoreDirectoryViewModel> GetStoreDirectoryViewModelAsync(GetStoresParam viewModelParam) { if (string.IsNullOrWhiteSpace(viewModelParam.Scope)) { throw new ArgumentException("scope"); } if (viewModelParam.CultureInfo == null) { throw new ArgumentNullException("cultureInfo"); } if (string.IsNullOrWhiteSpace(viewModelParam.BaseUrl)) { throw new ArgumentException("baseUrl"); } var model = new StoreDirectoryViewModel(); model.StoreLocatorPageUrl = StoreUrlProvider.GetStoreLocatorUrl(new GetStoreLocatorUrlParam { BaseUrl = viewModelParam.BaseUrl, CultureInfo = viewModelParam.CultureInfo, Page = 1 }); var overtureStores = await StoreRepository.GetStoresAsync(new GetStoresParam { CultureInfo = viewModelParam.CultureInfo, Scope = viewModelParam.Scope, PageNumber = 1, PageSize = int.MaxValue }).ConfigureAwait(false); var sortedResults = SortStoreDirectoryResult(overtureStores.Results); //get result for currect page var totalCount = sortedResults.Count(); var result = sortedResults.Skip((viewModelParam.PageNumber - 1) * viewModelParam.PageSize) .Take(viewModelParam.PageSize).OrderBy(st => st.Name).ToList(); var stores = result.Select(it => StoreViewModelFactory.CreateStoreViewModel(new CreateStoreViewModelParam { Store = it, CultureInfo = viewModelParam.CultureInfo, BaseUrl = viewModelParam.BaseUrl })).ToList(); model.Pagination = BuildPagination(totalCount, viewModelParam); model.Groups = await GetStoreDirectoryGroupsAsync(stores, viewModelParam); foreach (var countryGroup in model.Groups) { countryGroup.Anchors = await GetStoreDirectoryCountryGroupAnchorsAsync(sortedResults, countryGroup, viewModelParam); } return(model); }
protected virtual string BuildUrl(string baseUrl, CultureInfo cultureInfo, Guid currentHomePageId, string storeName, string storeNumber) { return(StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam { StoreNumber = storeNumber, CultureInfo = cultureInfo, BaseUrl = baseUrl, StoreName = storeName, WebsiteId = currentHomePageId })); }
protected virtual string BuildUrl(string baseUrl, CultureInfo cultureInfo, string storeName, string storeNumber) { var storeUrl = StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam { StoreNumber = storeNumber, CultureInfo = cultureInfo, BaseUrl = baseUrl, StoreName = storeName, WebsiteId = SitemapNavigator.CurrentHomePageId }); return(storeUrl); }
public virtual ActionResult StoreLocatorInHeader() { var model = new StoreLocatorInHeaderViewModel { Url = StoreUrlProvider.GetStoreLocatorUrl(new GetStoreLocatorUrlParam { BaseUrl = RequestUtils.GetBaseUrl(Request).ToString(), CultureInfo = ComposerContext.CultureInfo }) }; return(View("StoreLocatorInHeader", model)); }
protected virtual StorePaginationViewModel BuildPagination(int totalCount, GetStoresParam param) { StorePageViewModel prevPage = null, nextPage = null; if (param.PageSize * param.PageNumber < totalCount) { nextPage = new StorePageViewModel { DisplayName = LocalizationProvider.GetLocalizedString(new GetLocalizedParam { Category = "Store", Key = "B_PaginationNext", CultureInfo = param.CultureInfo }), Url = StoreUrlProvider.GetStoresDirectoryUrl(new GetStoresDirectoryUrlParam { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, Page = param.PageNumber + 1 }) }; } if (param.PageNumber > 1) { prevPage = new StorePageViewModel { DisplayName = LocalizationProvider.GetLocalizedString(new GetLocalizedParam { Category = "Store", Key = "B_PaginationPrev", CultureInfo = param.CultureInfo }), Url = StoreUrlProvider.GetStoresDirectoryUrl(new GetStoresDirectoryUrlParam { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, Page = param.PageNumber - 1 }) }; } var pager = new StorePaginationViewModel { PreviousPage = prevPage, NextPage = nextPage }; return(pager); }
public virtual StoreViewModel CreateStoreViewModel(CreateStoreViewModelParam param) { var store = param.Store; var storeViewModel = ViewModelMapper.MapTo <StoreViewModel>(store, param.CultureInfo); storeViewModel.Address = CreateStoreAddressViewModel(param); storeViewModel.LocalizedDisplayName = GetStoreLocalizedDisplayName(storeViewModel, param.CultureInfo); storeViewModel.FulfillmentLocationId = store.FulfillmentLocation.Id; storeViewModel.GoogleDirectionsLink = GetGoogleDirectionsLink(storeViewModel.Address); storeViewModel.GoogleStaticMapUrl = GetGoogleStaticMapUrl(storeViewModel.Address); storeViewModel.Url = StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam() { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, StoreNumber = store.Number, StoreName = storeViewModel.Name }); if (param.SearchPoint != null && storeViewModel.Address.Latitude != null && storeViewModel.Address.Longitude != null) { double earthRadius = GoogleMaps.GoogleMapsSettings.LengthMeasureUnit == Enums.LengthMeasureUnitEnum.km ? EarthRadiusMeasurement.Kilometers : EarthRadiusMeasurement.Miles; storeViewModel.DestinationToSearchPoint = Math.Round(GeoCodeCalculator.CalcDistance( storeViewModel.Address.Latitude.Value, storeViewModel.Address.Longitude.Value, param.SearchPoint.Lat, param.SearchPoint.Lng, earthRadius), 2); storeViewModel.LengthMeasureUnit = GoogleMaps.GoogleMapsSettings.LengthMeasureUnit.ToString(); } storeViewModel.Schedule = CreateStoreScheduleViewModel(param); if (param.Store.FulfillmentLocation != null) { storeViewModel.SupportDelivery = param.Store.FulfillmentLocation.SupportDelivery; storeViewModel.SupportPickUp = param.Store.FulfillmentLocation.SupportPickUp; storeViewModel.InventoryLocationId = param.Store.FulfillmentLocation.InventoryLocationId; } return(storeViewModel); }
protected virtual async Task <List <StoreDirectoryAnchorViewModel> > GetStoreDirectoryCountryGroupAnchorsAsync( IList <Overture.ServiceModel.Customers.Stores.Store> stores, StoreDirectoryGroupViewModel countryGroup, GetStoresParam viewModelParam) { var countryCode = countryGroup.Key.ToString(); var anchors = new SortedDictionary <string, StoreDirectoryAnchorViewModel>(); int ind = 0; foreach (var store in stores) { ind++; var region = store.FulfillmentLocation.Addresses[0].RegionCode; if (store.FulfillmentLocation.Addresses[0].CountryCode != countryCode || anchors.Keys.Contains(region)) { continue; } var pageNumber = GetTotalPages(ind, viewModelParam.PageSize); anchors.Add(region, new StoreDirectoryAnchorViewModel { DisplayName = await CountryService.RetrieveRegionDisplayNameAsync(new RetrieveRegionDisplayNameParam { CultureInfo = viewModelParam.CultureInfo, IsoCode = countryCode, RegionCode = region }), Key = "#" + region, Url = pageNumber == viewModelParam.PageNumber ? string.Empty : StoreUrlProvider.GetStoresDirectoryUrl(new GetStoresDirectoryUrlParam { BaseUrl = viewModelParam.BaseUrl, CultureInfo = viewModelParam.CultureInfo, Page = pageNumber }) }); } return(anchors.Values.ToList()); }
public virtual StoreLocatorViewModel GetEmptyStoreLocatorViewModel(GetEmptyStoreLocatorViewModelParam viewModelParam) { if (string.IsNullOrWhiteSpace(viewModelParam.BaseUrl)) { throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(viewModelParam.BaseUrl)), nameof(viewModelParam)); } if (viewModelParam.CultureInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(viewModelParam.CultureInfo)), nameof(viewModelParam)); } var model = new StoreLocatorViewModel { Stores = new List <StoreViewModel>(), StoresDirectoryUrl = StoreUrlProvider.GetStoresDirectoryUrl(new GetStoresDirectoryUrlParam { CultureInfo = viewModelParam.CultureInfo, BaseUrl = viewModelParam.BaseUrl, Page = 1 }) }; return(model); }
public virtual StoreStructuredDataViewModel CreateStoreStructuredDataViewModel(CreateStoreViewModelParam param) { var store = param.Store; var model = new StoreStructuredDataViewModel { Name = store.Name, Telephone = store.PhoneNumber, Url = StoreUrlProvider.GetStoreUrl(new GetStoreUrlParam() { BaseUrl = param.BaseUrl, CultureInfo = param.CultureInfo, StoreNumber = store.Number, StoreName = store.Name }) }; var address = store.FulfillmentLocation?.Addresses?.FirstOrDefault(); if (address != null) { model.StreetAddress = address.Line1; model.AddressLocality = address.City; model.AddressRegion = address.RegionCode; model.AddressCountry = address.CountryCode; model.PostalCode = address.PostalCode; model.Longitude = address.Longitude; model.Latitude = address.Latitude; if (string.IsNullOrWhiteSpace(model.Telephone)) { model.Telephone = address.PhoneNumber; } } if (store.StoreSchedule != null) { //// fixed datetime formats based on https://developers.google.com/structured-data/local-businesses/ var dataTimeFormat = @"hh\:mm\:ss"; var dateFormat = @"yyyy-MM-dd"; model.OpeningHoursSpecifications = new List <StructuredDataOpeningHoursSpecificationViewModel>(); var groups = store.StoreSchedule.OpeningHours .Where(it => !it.IsClosed) .GroupBy( x => new { x.OpeningTimes.FirstOrDefault()?.BeginingTime, x.OpeningTimes.FirstOrDefault()?.EndingTime }); foreach (var group in groups) { var opens = group.Key.BeginingTime ?? DateTime.Today.TimeOfDay; var closes = group.Key.EndingTime ?? DateTime.Today.AddTicks(-1).AddDays(1).TimeOfDay; var openHourSpec = new StructuredDataOpeningHoursSpecificationViewModel { Opens = opens.ToString(dataTimeFormat), Closes = closes.ToString(dataTimeFormat), DayOfWeeks = new List <DayOfWeek>() }; foreach (var item in group) { openHourSpec.DayOfWeeks.Add(item.Day); } model.OpeningHoursSpecifications.Add(openHourSpec); } var exceptions = StoreScheduleProvider.GetOpeningHourExceptions(store.StoreSchedule, DateTime.Today, 1); foreach (var item in exceptions) { var opens = item.IsClosed ? DateTime.Today.TimeOfDay : item.OpeningTime.BeginingTime; var closes = item.IsClosed ? DateTime.Today.AddSeconds(1).TimeOfDay : item.OpeningTime.EndingTime; var openHourSpec = new StructuredDataOpeningHoursSpecificationViewModel { ValidFrom = item.StartDate.ToString(dateFormat), ValidThrough = item.EndDate.ToString(dateFormat), Opens = opens.ToString(dataTimeFormat), Closes = closes.ToString(dataTimeFormat), }; model.OpeningHoursSpecifications.Add(openHourSpec); } } return(model); }