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;
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)); }
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(); }
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)); }
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); } }
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; } } }
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; }
public bool IsSelected(ReportsDateRangeParameter selectedRange) { return(selectedRange != null && selectedRange.StartDate.Date <= DateTimeOffset.Date && selectedRange.EndDate.Date >= DateTimeOffset.Date); }
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(); }
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(); }
private void highlightDateRange(ReportsDateRangeParameter dateRange) { highlightedDateRangeSubject.OnNext(dateRange); }
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; }
private void changeDateRange(ReportsDateRangeParameter dateRange) { LoadReport(workspaceId, dateRange.StartDate, dateRange.EndDate, source); }