Ejemplo n.º 1
0
        protected virtual StoreScheduleViewModel CreateStoreScheduleViewModel(CreateStoreViewModelParam param)
        {
            if (param.Store.StoreSchedule == null)
            {
                return(null);
            }

            var model        = new StoreScheduleViewModel();
            var storeNowTime = DateTime.Now;

            if (!string.IsNullOrWhiteSpace(param.Store.FulfillmentLocation.TimeZone))
            {
                var storeTimeInfo = TimeZoneInfo.FindSystemTimeZoneById(param.Store.FulfillmentLocation.TimeZone);
                storeNowTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, storeTimeInfo);
            }

            model.OpeningHours          = GetOpeningHours(param, storeNowTime);
            model.OpeningHourExceptions = GetOpeningHourExceptions(param, storeNowTime);

            var todayOpeningTimes =
                StoreScheduleProvider.GetOpeningTimes(param.Store.StoreSchedule, storeNowTime).ToList();

            model.TodayOpeningTimes = todayOpeningTimes.Select(ot => GetScheduleIntervalViewModel(ot, param.CultureInfo)).ToList();

            model.IsOpenNow = IsTimeInIntervals(storeNowTime.TimeOfDay, todayOpeningTimes);

            return(model);
        }
Ejemplo n.º 2
0
        protected virtual List <DailyScheduleExceptionViewModel> GetOpeningHourExceptions(CreateStoreViewModelParam param, DateTime today)
        {
            var exceptions = StoreScheduleProvider.GetOpeningHourExceptions(param.Store.StoreSchedule, today, 1);

            return(exceptions.Select(
                       ex => ViewModelMapper.MapTo <DailyScheduleExceptionViewModel>(new
            {
                ex.StartDate,
                ex.EndDate,
                ex.IsClosed,
                OpeningTime = GetScheduleIntervalViewModel(ex.OpeningTime, param.CultureInfo)
            }, param.CultureInfo))
                   .ToList());
        }
        protected virtual List <DailyScheduleExceptionViewModel> GetOpeningHourExceptions(FulfillmentSchedule schedule, CultureInfo cultureInfo, DateTime today)
        {
            var exceptions = StoreScheduleProvider.GetOpeningHourExceptions(schedule, today, 1);

            return(exceptions.Select(
                       ex => ViewModelMapper.MapTo <DailyScheduleExceptionViewModel>(new
            {
                ex.StartDate,
                ex.EndDate,
                ex.IsClosed,
                OpeningTime = GetScheduleIntervalViewModel(ex.OpeningTime, cultureInfo)
            }, cultureInfo))
                   .ToList());
        }
Ejemplo n.º 4
0
        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);
        }