public override ReportsDateRangeParameter GetDateRange()
        {
            var now   = TimeService.CurrentDateTime.Date;
            var start = new DateTimeOffset(now.Year, now.Month, 1, 0, 0, 0, TimeSpan.Zero);
            var end   = start.AddMonths(1).AddDays(-1);

            return(ReportsDateRangeParameter
                   .WithDates(start, end)
                   .WithSource(ReportsSource.ShortcutThisMonth));
        }
 private static bool ensureDateRangeIsCorrect(
     ReportsDateRangeParameter dateRange,
     ReportsCalendarDayViewModel expectedStart,
     ReportsCalendarDayViewModel expectedEnd)
 => dateRange.StartDate.Year == expectedStart.CalendarMonth.Year &&
 dateRange.StartDate.Month == expectedStart.CalendarMonth.Month &&
 dateRange.StartDate.Day == expectedStart.Day &&
 dateRange.EndDate.Year == expectedEnd.CalendarMonth.Year &&
 dateRange.EndDate.Month == expectedEnd.CalendarMonth.Month &&
 dateRange.EndDate.Day == expectedEnd.Day;
Example #3
0
        public override ReportsDateRangeParameter GetDateRange()
        {
            var thisYear = TimeService.CurrentDateTime.Year;
            var start    = new DateTimeOffset(thisYear, 1, 1, 0, 0, 0, TimeSpan.Zero);
            var end      = start.AddYears(1).AddDays(-1);

            return(ReportsDateRangeParameter
                   .WithDates(start, end)
                   .WithSource(ReportsSource.ShortcutThisYear));
        }
        public void UpdateSelection(ReportsDateRangeParameter selectedDateRange)
        {
            if (selectedDateRange == null)
            {
                return;
            }

            currentSelectedDateRange = selectedDateRange;
            CollectionView.CollectionViewLayout.InvalidateLayout();
            CollectionView.ReloadData();
        }
        public override ReportsDateRangeParameter GetDateRange()
        {
            var now        = TimeService.CurrentDateTime.Date;
            var difference = (now.DayOfWeek - beginningOfWeek.ToDayOfWeekEnum() + 7) % 7;
            var start      = now.AddDays(-(difference + 7));
            var end        = start.AddDays(6);

            return(ReportsDateRangeParameter
                   .WithDates(start, end)
                   .WithSource(ReportsSource.ShortcutLastWeek));
        }
Example #6
0
        private void selectStartOfSelectionIfNeeded()
        {
            if (startOfSelection == null)
            {
                return;
            }

            var date      = startOfSelection.DateTimeOffset;
            var dateRange = ReportsDateRangeParameter
                            .WithDates(date, date)
                            .WithSource(ReportsSource.Calendar);

            changeDateRange(dateRange);
        }
            public void ReturnsThisWeekWhenStartAndEndOfCurrentWeekAreSeleted(
                int currentYear, int currentMonth, int currentDay,
                int startYear, int startMonth, int startDay,
                int endYear, int endMonth, int endDay)
            {
                var currentDate = new DateTimeOffset(currentYear, currentMonth, currentDay, 0, 0, 0, TimeSpan.Zero);
                var start       = new DateTimeOffset(startYear, startMonth, startDay, 0, 0, 0, TimeSpan.Zero);
                var end         = new DateTimeOffset(endYear, endMonth, endDay, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(currentDate);
                ViewModel.ChangeDateRangeCommand.Execute(
                    ReportsDateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar));

                ViewModel.CurrentDateRangeString.Should().Be($"{Resources.ThisWeek} ▾");
            }
            public async Task ReturnsSelectedDateRangeAsStringIfTheSelectedPeriodIsNotTheCurrentWeek(
                DateTimeOffset start,
                DateTimeOffset end,
                DateFormat dateFormat,
                string expectedResult)
            {
                TimeService.CurrentDateTime.Returns(DateTimeOffset.UtcNow);
                var preferences = Substitute.For <IThreadSafePreferences>();

                preferences.DateFormat.Returns(dateFormat);
                var preferencesSubject = new Subject <IThreadSafePreferences>();

                DataSource.Preferences.Current.Returns(preferencesSubject.AsObservable());
                await ViewModel.Initialize();

                preferencesSubject.OnNext(preferences);

                ViewModel.ChangeDateRangeCommand.Execute(
                    ReportsDateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar));

                ViewModel.CurrentDateRangeString.Should().Be(expectedResult);
            }
        public void UpdateSelectionState(ReportsDateRangeParameter selectedDateRange)
        {
            var dayTextColor = ItemView.Context.SafeGetColor(calculateDayTextColorResource());

            dayView.SetTextColor(dayTextColor);
            dayView.RoundLeft            = Item.IsStartOfSelectedPeriod(selectedDateRange);
            dayView.RoundRight           = Item.IsEndOfSelectedPeriod(selectedDateRange);
            dayView.IsSelected           = Item.IsSelected(selectedDateRange);
            dayView.IsSingleDaySelection = selectedDateRange.StartDate == selectedDateRange.EndDate;

            int calculateDayTextColorResource()
            {
                if (Item.IsSelected(selectedDateRange) || Item.IsToday)
                {
                    return(Android.Resource.Color.White);
                }

                return(Item.IsInCurrentMonth
                    ? Resource.Color.primaryText
                    : Resource.Color.placeholderText);
            }
        }
            public void ReturnsThisWeekWhenStartAndEndOfCurrentWeekAreSeleted(
                int currentYear, int currentMonth, int currentDay,
                int startYear, int startMonth, int startDay,
                int endYear, int endMonth, int endDay)
            {
                var observer = TestScheduler.CreateObserver <string>();

                ViewModel.CurrentDateRangeStringObservable.Subscribe(observer);

                var currentDate = new DateTimeOffset(currentYear, currentMonth, currentDay, 0, 0, 0, TimeSpan.Zero);
                var start       = new DateTimeOffset(startYear, startMonth, startDay, 0, 0, 0, TimeSpan.Zero);
                var end         = new DateTimeOffset(endYear, endMonth, endDay, 0, 0, 0, TimeSpan.Zero);

                TimeService.CurrentDateTime.Returns(currentDate);
                ViewModel.ChangeDateRangeCommand.Execute(
                    ReportsDateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar));

                TestScheduler.Start();
                observer.Messages.AssertEqual(
                    ReactiveTest.OnNext(1, ""),
                    ReactiveTest.OnNext(2, $"{Resources.ThisWeek} ▾")
                    );
            }
            public void SelectingAnyDateRangeDoesNotMakeTheAppCrash(DateTimeOffset a, DateTimeOffset b, DateTimeOffset c)
            {
                var dates = new[] { a, b, c };

                Array.Sort(dates);
                var start = dates[0];
                var now   = dates[1];
                var end   = dates[2];

                TimeService.CurrentDateTime.Returns(now);
                var selectedRange  = ReportsDateRangeParameter.WithDates(start, end).WithSource(ReportsSource.Calendar);
                var customShortcut = new CustomShortcut(selectedRange, TimeService);

                // in this property test it is not possible to use the default ViewModel,
                // because we have to reset it in each iteration of the test
                var viewModel = CreateViewModel();

                viewModel.Prepare();
                viewModel.Initialize().Wait();

                Action usingShortcut = () => viewModel.QuickSelectCommand.Execute(customShortcut);

                usingShortcut.Should().NotThrow();
            }
Example #12
0
        private void onDateRangeChanged(ReportsDateRangeParameter dateRange, IImmutableList <ReportsCalendarBaseQuickSelectShortcut> shortcuts, IImmutableList <ReportsCalendarPageViewModel> months)
        {
            var dateRangeStartDate = dateRange.StartDate;
            var monthToScroll      = months.IndexOf(month =>
                                                    month.CalendarMonth.Month == dateRangeStartDate.Month &&
                                                    month.CalendarMonth.Year == dateRangeStartDate.Year);

            if (monthToScroll == monthsPager.CurrentItem)
            {
                return;
            }

            var dateRangeStartDateIsContainedInCurrentMonthView =
                months[monthsPager.CurrentItem]
                .Days.Any(day => day.DateTimeOffset == dateRangeStartDate);

            if (dateRangeStartDateIsContainedInCurrentMonthView &&
                dateRangeStartDate.Month != dateRange.EndDate.Month)
            {
                return;
            }

            monthsPager.Post(() => monthsPager.SetCurrentItem(monthToScroll, true));
        }
Example #13
0
        private void calendarDayTapped(CalendarDayViewModel tappedDay)
        {
            if (startOfSelection == null)
            {
                var date = tappedDay.DateTimeOffset;

                var dateRange = ReportsDateRangeParameter
                                .WithDates(date, date)
                                .WithSource(ReportsSource.Calendar);
                startOfSelection = tappedDay;
                highlightDateRange(dateRange);
            }
            else
            {
                var startDate = startOfSelection.DateTimeOffset;
                var endDate   = tappedDay.DateTimeOffset;

                var dateRange = ReportsDateRangeParameter
                                .WithDates(startDate, endDate)
                                .WithSource(ReportsSource.Calendar);
                startOfSelection = null;
                changeDateRange(dateRange);
            }
        }
Example #14
0
        private void onDateRangeChanged(ReportsDateRangeParameter dateRange, List <ReportsCalendarBaseQuickSelectShortcut> shortcuts, List <ReportsCalendarPageViewModel> months)
        {
            var anyShortcutIsSelected = shortcuts.Any(shortcut => shortcut.IsSelected(dateRange));

            if (!anyShortcutIsSelected)
            {
                return;
            }

            var dateRangeStartDate = dateRange.StartDate;
            var monthToScroll      = months.IndexOf(month =>
                                                    month.CalendarMonth.Month == dateRangeStartDate.Month &&
                                                    month.CalendarMonth.Year == dateRangeStartDate.Year);

            if (monthToScroll == monthsPager.CurrentItem)
            {
                return;
            }

            var dateRangeStartDateIsContainedInCurrentMonthView = months[monthsPager.CurrentItem].Days
                                                                  .Any(day => day.DateTimeOffset == dateRangeStartDate);


            if (!dateRangeStartDateIsContainedInCurrentMonthView || dateRangeStartDate.Month == dateRange.EndDate.Month)
            {
                if (hasScrolledDown())
                {
                    pendingPageUpdate = null;
                    monthsPager.SetCurrentItem(monthToScroll, true);
                }
                else
                {
                    pendingPageUpdate = monthToScroll;
                }
            }
        }
Example #15
0
 private void assertDaysInMonthSelected(ReportsCalendarPageViewModel calendarPage, int startindex, int endIndex, ReportsDateRangeParameter highLightDateRange)
 {
     for (int i = startindex; i <= endIndex; i++)
     {
         calendarPage.Days[i].IsSelected(highLightDateRange).Should().BeTrue();
     }
 }
 public void UpdateSelectedDateRange(ReportsDateRangeParameter dateRange)
 {
     currentDateRange = dateRange;
 }
Example #17
0
 public bool IsSelected(ReportsDateRangeParameter selectedRange)
 {
     return(selectedRange != null && selectedRange.StartDate.Date <= DateTimeOffset.Date && selectedRange.EndDate.Date >= DateTimeOffset.Date);
 }
Example #18
0
 public bool IsStartOfSelectedPeriod(ReportsDateRangeParameter selectedRange)
 {
     return(selectedRange != null && selectedRange.StartDate == DateTimeOffset);
 }
 public void UpdateSelectionState(ReportsDateRangeParameter currentDateRange)
 {
     backgroundDrawable.SetColor(Item.IsSelected(currentDateRange) ? Color.ParseColor("#328fff") : Color.ParseColor("#3e3e3e"));
     backgroundDrawable.InvalidateSelf();
 }
Example #20
0
 private void highlightDateRange(ReportsDateRangeParameter dateRange)
 {
     Months.ForEach(month => month.Days.ForEach(day => day.OnSelectedRangeChanged(dateRange)));
 }
 public void UpdateSelection(ReportsDateRangeParameter dateRange)
 {
     currentDateRange = dateRange;
     collectionView.ReloadData();
 }
 public void UpdateDateRange(ReportsDateRangeParameter dateRange)
 {
     this.dateRange = dateRange;
 }
 public void UpdateSelectedShortcut(ReportsDateRangeParameter newDateRange)
 {
     currentDateRange = newDateRange;
     NotifyDataSetChanged();
 }
Example #24
0
 private void highlightDateRange(ReportsDateRangeParameter dateRange)
 {
     highlightedDateRangeSubject.OnNext(dateRange);
 }
Example #25
0
 public bool IsEndOfSelectedPeriod(ReportsDateRangeParameter selectedRange)
 {
     return(selectedRange != null && selectedRange.EndDate.Date == DateTimeOffset.Date);
 }
 public ReportsCalendarRecyclerAdapter(ReportsDateRangeParameter dateRangeParameter)
 {
     DateRangeParameter = dateRangeParameter;
 }
 public void UpdateSelectedRange(ReportsDateRangeParameter newDateRange)
 {
     currentDateRange = newDateRange;
     selectionChanges.OnNext(currentDateRange);
     NotifyDataSetChanged();
 }
 public void UpdateDateRangeParameter(ReportsDateRangeParameter newDateRange)
 {
     DateRangeParameter = newDateRange;
     NotifyDataSetChanged();
 }
 public CustomShortcut(ReportsDateRangeParameter range, ITimeService timeService) : base(timeService, "", ReportPeriod.Unknown)
 {
     this.range = range;
 }
Example #30
0
 private void changeDateRange(ReportsDateRangeParameter dateRange)
 {
     LoadReport(workspaceId, dateRange.StartDate, dateRange.EndDate, source);
 }