Пример #1
0
        public HomeIndexViewModel AssembleHomeIndexViewModel(string userId)
        {
            var homeIndexViewModel = new HomeIndexViewModel();

            var userTimeZone = _userSettingsService.Get(userId).TimeZone;

            SetDefaultDatesWhenEmpty(homeIndexViewModel, userTimeZone);

            return AssembleHomeIndexViewModel(homeIndexViewModel, userId);
        }
Пример #2
0
        public void Test_Populates_The_Legenda()
        {
            var createdOnMin = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE));
            var createdOnMax = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow.AddDays(3), TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE));

            var homeIndexViewModel = new HomeIndexViewModel(createdOnMin, createdOnMax);

            var actual = HomeAssemblerFactory.SetupHomeAssembler().AssembleHomeIndexViewModel(homeIndexViewModel, It.IsAny<string>());

            Assert.IsNotNull(actual.Legenda);
        }
Пример #3
0
        public void Test_AssembleHomeIndexViewModel_Populates_The_Tag_Property()
        {
            var createdOnMin = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE));
            var createdOnMax = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow.AddDays(3), TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE));

            var homeIndexViewModel = new HomeIndexViewModel(createdOnMin, createdOnMax);

            var actual = GetHomeAssembler().AssembleHomeIndexViewModel(homeIndexViewModel, It.IsAny<string>());

            foreach (var entryGroup in actual.EntryGroups)
            {
                foreach (var entry in entryGroup.Entries)
                    Assert.IsFalse(string.IsNullOrEmpty(entry.Tag));
            }
        }
Пример #4
0
        public void Test_AssembleHomeIndexViewModel_Groups_Entries_Correctly()
        {
            var createdOnMin = new DateTime(2011, 10, 18, 0, 0, 0, DateTimeKind.Local);
            var createdOnMax = new DateTime(2011, 10, 21, 0, 0, 0, DateTimeKind.Local);

            var homeIndexViewModel = new HomeIndexViewModel(createdOnMin, createdOnMax);

            var actual = GetHomeAssembler().AssembleHomeIndexViewModel(homeIndexViewModel, It.IsAny<string>());

            var firstEntryGroup = actual.EntryGroups.First();
            var secondEntryGroup = actual.EntryGroups.ElementAt(1);
            var thirdEntryGroup = actual.EntryGroups.ElementAt(2);

            Assert.AreEqual(1, firstEntryGroup.Entries.Count());
            Assert.AreEqual(3, secondEntryGroup.Entries.Count());
            Assert.AreEqual(1, thirdEntryGroup.Entries.Count());
        }
Пример #5
0
        public void Test_AssembleHomeIndexViewModel_Calculates_EntryPercentages_Correctly()
        {
            var createdOnMin = new DateTime(2011, 10, 18, 0, 0, 0, DateTimeKind.Local);
            var createdOnMax = new DateTime(2011, 10, 21, 0, 0, 0, DateTimeKind.Local);

            var homeIndexViewModel = new HomeIndexViewModel(createdOnMin, createdOnMax);

            var actual = GetHomeAssembler().AssembleHomeIndexViewModel(homeIndexViewModel, It.IsAny<string>());

            var firstEntryGroup = actual.EntryGroups.First();
            var secondEntryGroup = actual.EntryGroups.ElementAt(1);
            var thirdEntryGroup = actual.EntryGroups.ElementAt(2);

            Assert.AreEqual(85, Convert.ToInt32(firstEntryGroup.Entries.First().Percentage));
            Assert.AreEqual(15, Convert.ToInt32(secondEntryGroup.Entries.First().Percentage));
            Assert.AreEqual(50, Convert.ToInt32(secondEntryGroup.Entries.ElementAt(1).Percentage));
            Assert.AreEqual(35, Convert.ToInt32(secondEntryGroup.Entries.ElementAt(2).Percentage));
            Assert.AreEqual(100, Convert.ToInt32(thirdEntryGroup.Entries.First().Percentage));
        }
Пример #6
0
        public ActionResult Index(HomeIndexViewModel indexViewModel)
        {
            if (ViewData.ModelState.IsValid)
            {
                var model = _homeAssembler.AssembleHomeIndexViewModel(indexViewModel, UserId);

                ViewData.Model = model;
                ViewBag.EntryGroups = model.EntryGroups;

                var userSession = _sessionStore.GetUserSession();
                userSession.HomeIndexFrom = indexViewModel.From;
                userSession.HomeIndexTo = indexViewModel.To;
                _sessionStore.SaveUserSession(userSession);
            }
            else
            {
                ViewData.Model = indexViewModel;
                ViewBag.EntryGroups = indexViewModel.EntryGroups;
            }

            return View();
        }
Пример #7
0
        // TODO: Wow, this got ugly fast. Can this be simplified?
        public HomeIndexViewModel AssembleHomeIndexViewModel(HomeIndexViewModel homeIndexViewModelIn, string userId)
        {
            var indexViewModelResult = new HomeIndexViewModel(homeIndexViewModelIn.From, homeIndexViewModelIn.To);

            var userTimeZone = _userSettingsService.Get(userId).TimeZone;

            SetDefaultDatesWhenEmpty(indexViewModelResult, userTimeZone);

            // You have to take the userTimeZoneOffset into account, otherwise we end up with too little data
            var userTimeZoneOffsetToTakeIntoAccountFrom =
                userTimeZone.BaseUtcOffset.TotalSeconds < 0 ? new TimeSpan() : userTimeZone.BaseUtcOffset;
            var userTimeZoneOffsetToTakeIntoAccountTo =
                userTimeZone.BaseUtcOffset.TotalSeconds > 0 ? userTimeZone.BaseUtcOffset : new TimeSpan();
            // Get the entries based on universal time
            var entries = _entryService.GetEntries(
                indexViewModelResult.From.Value.ToUniversalTime().Subtract(userTimeZoneOffsetToTakeIntoAccountFrom),
                indexViewModelResult.To.Value.ToUniversalTime().Add(userTimeZoneOffsetToTakeIntoAccountTo),
                userId);
            var start = indexViewModelResult.From.Value;
            var stop = indexViewModelResult.To.Value;

            LoadLegenda(indexViewModelResult, entries);

            while (start < stop)
            {
                var startOfTheDay = start.Date;
                var endOfTheDay = start.Date.AddDays(1);

                foreach (var entry in entries)
                {
                    var entryCreatedOnUserTimeZone = TimeZoneInfo.ConvertTimeFromUtc(entry.CreatedOn, userTimeZone);
                    var entryStoppedOnUserTimeZone = (DateTime?)DateTime.MaxValue;
                    if (entry.StoppedOn.HasValue)
                        entryStoppedOnUserTimeZone = TimeZoneInfo.ConvertTimeFromUtc(entry.StoppedOn.Value, userTimeZone);

                    if (entryStoppedOnUserTimeZone < startOfTheDay ||
                        entryCreatedOnUserTimeZone > endOfTheDay)
                        continue;

                    HomeIndexViewModelEntry viewModelEntry = null;

                    if (entryCreatedOnUserTimeZone <= startOfTheDay && entryStoppedOnUserTimeZone >= endOfTheDay)
                    {
                        viewModelEntry = new HomeIndexViewModelEntry(100, startOfTheDay, endOfTheDay);
                    }
                    else if (entryCreatedOnUserTimeZone <= startOfTheDay)
                    {
                        var diff = entryStoppedOnUserTimeZone.Value.Subtract(startOfTheDay);
                        var diffPercent = (diff.TotalSeconds / SECONDS_IN_DAY) * 100;

                        viewModelEntry = new HomeIndexViewModelEntry(
                            diffPercent, startOfTheDay, entryStoppedOnUserTimeZone.Value);
                    }
                    else if (entryStoppedOnUserTimeZone.Value >= endOfTheDay)
                    {
                        var diff = endOfTheDay.Subtract(entryCreatedOnUserTimeZone);
                        var diffPercent = (diff.TotalSeconds / SECONDS_IN_DAY) * 100;

                        viewModelEntry = new HomeIndexViewModelEntry(
                            diffPercent, entryCreatedOnUserTimeZone, endOfTheDay);
                    }
                    else
                    {
                        var diff = entryStoppedOnUserTimeZone.Value.Subtract(entryCreatedOnUserTimeZone);
                        var diffPercent = (diff.TotalSeconds / SECONDS_IN_DAY) * 100;

                        viewModelEntry = new HomeIndexViewModelEntry(
                            diffPercent, entryCreatedOnUserTimeZone, entryStoppedOnUserTimeZone.Value);
                    }

                    viewModelEntry.Tag = entry.Tag == null ? string.Empty : entry.Tag.TitleCasedName;
                    viewModelEntry.Color = entry.Tag == null ? string.Empty : entry.Tag.Color;
                    viewModelEntry.Title = string.Format("{0} ({1}-{2}): {3}",
                        new object[] { viewModelEntry.Tag, viewModelEntry.Start.ToShortTimeString(), viewModelEntry.End.ToShortTimeString(), entry.Description });

                    if (indexViewModelResult.EntryGroups.Any(eg => eg.Date == startOfTheDay))
                    {
                        var oldEntryGroup = indexViewModelResult.EntryGroups.Where(eg => eg.Date == startOfTheDay).First();
                        var newEntryGroup = new HomeIndexViewModelEntryGroup(oldEntryGroup.Date);

                        newEntryGroup.Entries = oldEntryGroup.Entries;
                        newEntryGroup.Entries.Add(viewModelEntry);

                        indexViewModelResult.EntryGroups.RemoveAll(eg => eg.Date == startOfTheDay);
                        indexViewModelResult.EntryGroups.Add(newEntryGroup);
                    }
                    else
                    {
                        var entryGroup = new HomeIndexViewModelEntryGroup(startOfTheDay);

                        entryGroup.Entries.Add(viewModelEntry);
                        indexViewModelResult.EntryGroups.Add(entryGroup);
                    }
                }

                start = start.AddDays(1);
            }

            return indexViewModelResult;
        }
Пример #8
0
        public HomeIndexViewModel AssembleHomeIndexViewModel(string userId, DateTime from, DateTime to)
        {
            var homeIndexViewModel = new HomeIndexViewModel(from, to);

            return AssembleHomeIndexViewModel(homeIndexViewModel, userId);
        }
Пример #9
0
        private void SetDefaultDatesWhenEmpty(HomeIndexViewModel indexViewModelResult, TimeZoneInfo userTimeZone)
        {
            var nowDate = _timeService.GetNow();
            var defaultFromDate = nowDate.AddDays(-14);
            var defaultToDate = nowDate.AddDays(1);

            if (!indexViewModelResult.From.HasValue)
                indexViewModelResult.From = TimeZoneInfo.ConvertTimeFromUtc(defaultFromDate, userTimeZone).Date;
            if (!indexViewModelResult.To.HasValue)
                indexViewModelResult.To = TimeZoneInfo.ConvertTimeFromUtc(defaultToDate, userTimeZone).Date;
        }
Пример #10
0
        private void LoadLegenda(HomeIndexViewModel indexViewModel, IEnumerable<Entry> entries)
        {
            var tags =  entries.Select(e => e.Tag).Distinct();

            indexViewModel.Legenda =
                tags.Select(t => new HomeIndexViewModelLegendaTag(t.TitleCasedName, t.Color))
                    .OrderBy(t => t.Name)
                    .ToList();
        }