protected void LoadSpecialDatesAsync(DateTime from, DateTime to) { IsBusy = true; Device.BeginInvokeOnMainThread(async() => { try { if (this.IsInternetAndCloseModal()) { _currentTimesheet = await _timesheetModule.TimesheetService.GetTimesheetBeetweenDates(from, to); var specialDates = await _timesheetModule.CalendarService.GetSpecialDatesBeetweenDatesAsync(_currentTimesheet); specialDates.ForEach(x => SpecialDates.Add(x)); var now = _currentDayMonthYear; var minMonth = new DateTime(now.Year, now.Month, 1); var maxMonth = minMonth.AddMonths(1).AddDays(-1); var calculateActivities = _currentTimesheet.Activities.Where(x => x.Value.Date >= minMonth && x.Value.Date <= maxMonth); ImputedTotal = calculateActivities.Sum(x => x.Value.Imputed); DeviationTotal = calculateActivities.Sum(x => x.Value.Deviation); } IsBusy = false; } catch (Exception e) { IsBusy = false; BaseModule.DialogErrorCustomService.DialogErrorCommonTryAgain(); }finally { IsLoadCalendar = true; } }); }
protected void LoadSpecialDatesAsync(DateTime from, DateTime to) { IsBusy = true; Device.BeginInvokeOnMainThread(async() => { try { Dates.Clear(); _currentTimesheet = await _timesheetModule.TimesheetService.GetTimesheetBeetweenDates(from, to); var specialDates = await _timesheetModule.CalendarService.GetSpecialDatesBeetweenDatesAsync(_currentTimesheet); specialDates.ForEach(x => SpecialDates.Add(x)); IsBusy = false; } catch (Exception ex) { IsBusy = false; Debug.WriteLine($"[Booking] Error: {ex}"); await BaseModule.DialogService.ShowAlertAsync( "An error ocurred, try again", "Error", "Ok"); } }); }
protected void ChangeSelectedDate(DateTime?date) { if (!date.HasValue) { return; } var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date.Value.Date); if (button == null) { return; } buttons.FindAll(b => b.IsSelected).ForEach(b => { var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == b.Date.Value.Date); SetButtonNormal(b, !b.IsOutOfMonth); if (spD != null) { SetButtonSpecial(b, spD); } }); SetButtonSelected(button, !button.IsOutOfMonth); DateClicked?.Invoke(this, new DateTimeEventArgs { DateTime = SelectedDate.Value }); DateCommand?.Execute(SelectedDate.Value); }
public DateTime DateOf(SpecialDates specialDate) { switch (specialDate) { case SpecialDate.NewMillenium: return new DateTime(2000, 1, 1, 0, 0, 0, 0) } }
protected void ChangeCalendar(CalandarChanges changes) { if (changes.HasFlag(CalandarChanges.StartDate)) { Device.BeginInvokeOnMainThread(() => CenterLabel.Text = StartDate.ToString(TitleLabelFormat)); } var start = CalendarStartDate; var beginOfMonth = false; var endOfMonth = false; for (int i = 0; i < buttons.Count; i++) { endOfMonth |= beginOfMonth && start.Day == 1; beginOfMonth |= start.Day == 1; if (i < 7 && WeekdaysShow && changes.HasFlag(CalandarChanges.StartDay)) { labels[i].Text = start.ToString(WeekdaysFormat); } if (changes.HasFlag(CalandarChanges.All)) { buttons[i].Text = string.Format("{0}", start.Day); } else { buttons[i].TextWithoutMeasure = string.Format("{0}", start.Day); } buttons[i].Date = start; var isInsideMonth = beginOfMonth && !endOfMonth; SpecialDate sd = null; if (SpecialDates != null) { sd = SpecialDates.FirstOrDefault(s => s.Date.Date == start.Date); } if ((MinDate.HasValue && start < MinDate) || (MaxDate.HasValue && start > MaxDate)) { SetButtonDisabled(buttons[i]); } else if (SelectedDate.HasValue && start.Date == SelectedDate.Value.Date) { SetButtonSelected(buttons[i], isInsideMonth); } else if (sd != null) { SetButtonSpecial(buttons[i], sd); } else { SetButtonNormal(buttons[i], isInsideMonth); } start = start.AddDays(1); } }
protected void SetLastIcon(DateTime date) { var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date && b.IsEnabled); if (button != null) { var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD, false, true); } }
public DateTime DateOf(SpecialDates specialDate) { switch (specialDate) { case SpecialDates.NewMillennium: return new DateTime(2000,1,1,0,0,0,0); default: throw new ArgumentOutOfRangeException("specialDate"); } }
protected void SetButton(CalendarButton b, bool isFirst = false, bool isLast = false) { if (!SelectedDates.Contains(b.Date.Value.Date)) { SelectedDates.Add(b.Date.Value.Date); } var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == b.Date.Value.Date); SetButtonSelected(b, spD, isFirst, isLast); }
public DateTime DateOf(SpecialDates specialDate) { switch (specialDate) { case SpecialDates.NewMillennium: return(new DateTime(2000, 1, 1, 0, 0, 0, 0)); default: throw new ArgumentOutOfRangeException("specialDate"); } }
protected bool ChangeSelectedDate(DateTime?date, bool clicked = true) { if (!date.HasValue) { return(false); } if (SelectedDates.Count() > 0)//check if there is a selected date { int result = DateTime.Compare((System.DateTime)date, SelectedDates[0]); if (result == 0)//Equal Dates { return(false); } } if (!MultiSelectDates) { buttons.FindAll(b => b.IsSelected).ForEach(b => ResetButton(b)); SelectedDates.Clear(); } SelectedDates.Add(SelectedDate.Value.Date); var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date.Value.Date && b.IsEnabled); if (button == null) { return(false); } var deselect = button.IsSelected; if (button.IsSelected) { ResetButton(button); } else { SelectedDates.Add(SelectedDate.Value.Date); var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD); } if (clicked) { DateClicked?.Invoke(this, new DateTimeEventArgs { DateTime = SelectedDate.Value }); DateCommand?.Execute(SelectedDate.Value); } return(deselect); }
protected void ResetButton(CalendarButton b) { if (b.Date.HasValue) { SelectedDates?.Remove(b.Date.Value.Date); } var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == b.Date.Value.Date); SetButtonNormal(b); if (spD != null) { SetButtonSpecial(b, spD); } }
protected bool ChangeSelectedDate(DateTime?date, bool clicked = true) { if (!date.HasValue) { return(false); } if (!MultiSelectDates) { buttons.FindAll(b => b.IsSelected).ForEach(b => ResetButton(b)); SelectedDates.Clear(); } AddDateIfNotExist(SelectedDate.Value.Date); var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date.Value.Date && b.IsEnabled); if (button == null) { return(false); } var deselect = button.IsSelected; if (button.IsSelected) { ResetButton(button); } else { AddDateIfNotExist(SelectedDate.Value.Date); var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD); } if (clicked) { DateClicked?.Invoke(this, new DateTimeEventArgs { DateTime = SelectedDate.Value }); DateCommand?.Execute(SelectedDate.Value); } return(deselect); }
public void FillSelectedRange(DateTime date) { var firstDate = SelectedDates.OrderBy(d => d.Date).First(); var lastDate = SelectedDates.OrderBy(d => d.Date).Last(); if (date < firstDate) { var isFirst = true; while (date < firstDate.Date) { var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date && b.IsEnabled); if (button != null) { SetButton(button, isFirst); isFirst = false; } date = date.AddDays(1); } if (date < lastDate) { // change button var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date && b.IsEnabled); if (button != null) { var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD); } } } else if (date > lastDate.Date) { var isLast = true; while (date > lastDate.Date) { var button2 = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date && b.IsEnabled); if (button2 != null) { SetButton(button2, false, isLast); isLast = false; } date = date.AddDays(-1); } if (date > firstDate) { // change button var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date && b.IsEnabled); if (button != null) { var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD); } } } // set margin icons SetFirstIcon(SelectedDates.OrderBy(d => d.Date).First()); SetLastIcon(lastDate = SelectedDates.OrderBy(d => d.Date).Last()); }
protected bool ChangeSelectedDate(DateTime?date, bool clicked = true) { if (!date.HasValue) { return(false); } if (!MultiSelectDates) { buttons.FindAll(b => b.IsSelected).ForEach(b => ResetButton(b)); SelectedDates?.Clear(); } if (MinDate.HasValue && date.Value < MinDate.Value) { return(false); } if (buttons.Count == 0) { SelectedDates?.Add(SelectedDate.Value.Date); } var button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == date.Value.Date && b.IsEnabled); if (button == null) { return(false); } var deselect = button.IsSelected; if (button.IsSelected) { if (SelectRange && SelectedDates?.Count() > 2) { UnfillSelectedRange(SelectedDate.Value.Date); } else { ResetButton(button); if (SelectedDates?.Count() == 1) { button = buttons.Find(b => b.Date.HasValue && b.Date.Value.Date == SelectedDates?.First() && b.IsEnabled); if (button != null) { SetButton(button); } } } } else { if (SelectedDates != null) { if (SelectRange && SelectedDates.Any()) { FillSelectedRange(SelectedDate.Value.Date); } else { SelectedDates?.Add(SelectedDate.Value.Date); var spD = SpecialDates?.FirstOrDefault(s => s.Date.Date == button.Date.Value.Date); SetButtonSelected(button, spD); } } } if (clicked) { DateClicked?.Invoke(this, new DateTimeEventArgs { DateTime = SelectedDate.Value }); DateCommand?.Execute(SelectedDate.Value); } return(deselect); }
protected void ChangeCalendar(CalandarChanges changes) { Device.BeginInvokeOnMainThread(() => { Content = null; if (changes.HasFlag(CalandarChanges.StartDate)) { TitleLabel.Text = StartDate.ToString(TitleLabelFormat); if (TitleLabels != null) { var tls = StartDate.AddMonths(1); foreach (var tl in TitleLabels) { (tl as Label).Text = tls.ToString(TitleLabelFormat); tls = tls.AddMonths(1); } } } var start = CalendarStartDate(StartDate).Date; var beginOfMonth = false; var endOfMonth = false; for (int i = 0; i < buttons.Count; i++) { endOfMonth |= beginOfMonth && start.Day == 1; beginOfMonth |= start.Day == 1; if (i < dayLabels.Count && WeekdaysShow && changes.HasFlag(CalandarChanges.StartDay)) { var day = start.ToString(WeekdaysFormat); string showDay = char.ToUpper(day.First()) + day.Substring(1).ToLower(); dayLabels[i].Text = showDay; } ChangeWeekNumbers(start, i); if (changes.HasFlag(CalandarChanges.All)) { buttons[i].Text = string.Format("{0}", start.Day); } else { buttons[i].TextWithoutMeasure = string.Format("{0}", start.Day); } buttons[i].Date = start; buttons[i].IsOutOfMonth = !(beginOfMonth && !endOfMonth); buttons[i].IsEnabled = ShowNumOfMonths == 1 || !buttons[i].IsOutOfMonth; SpecialDate sd = null; if (SpecialDates != null) { sd = SpecialDates.FirstOrDefault(s => s.Date.Date == start.Date); } SetButtonNormal(buttons[i]); if ((MinDate.HasValue && start.Date < MinDate) || (MaxDate.HasValue && start.Date > MaxDate) || (DisableAllDates && sd == null)) { SetButtonDisabled(buttons[i]); } else if (buttons[i].IsEnabled && (SelectedDates?.Select(d => d.Date)?.Contains(start.Date) ?? false)) { SetButtonSelected(buttons[i], sd); } else if (sd != null) { SetButtonSpecial(buttons[i], sd); } start = start.AddDays(1); if (i != 0 && (i + 1) % 42 == 0) { beginOfMonth = false; endOfMonth = false; start = CalendarStartDate(start); } } if (DisableDatesLimitToMaxMinRange) { TitleLeftArrow.IsEnabled = !(MinDate.HasValue && CalendarStartDate(StartDate).Date < MinDate); TitleRightArrow.IsEnabled = !(MaxDate.HasValue && start > MaxDate); } Content = MainView; }); }
internal void FilterDatePickerItem(AyDatePickerItem item) { if (firstInitMinMax) { var _1 = AyCalendarService.FilterDatePickerItem(DateRuleObjects, MinDateReferToElement, MaxDateReferToElement); MinDateCopy = _1.Item1; MaxDateCopy = _1.Item2; firstInitMinMax = false; } if (item.IsNotNull()) { if (MinDateCopy.Count > 0) { foreach (var subitem in MinDateCopy) { if (subitem.HasValue && item.Date < subitem.Value.Date) { item.IsEnabled = false; break; } } } if (MaxDateCopy.Count > 0) { foreach (var subitem in MaxDateCopy) { if (subitem.HasValue && item.Date > subitem.Value.Date) { item.IsEnabled = false; break; } } } //周几限制 if (DateRuleObjects.IsNotNull()) { if (DateRuleObjects.disabledDays.IsNotNull() && DateRuleObjects.disabledDays.Count > 0) { var _1 = item.Date.DayOfWeek.GetHashCode(); foreach (var disabledDay in DateRuleObjects.disabledDays) { if (_1 == disabledDay) { item.IsEnabled = false; break; } } } //限制disabledDate var _validateItemResult = AyCalendarService.ValidateRegexDate(item.Date, this.DisabledDatesStrings, DateRuleObjects.opposite); if (!_validateItemResult) { item.IsEnabled = false; } //高亮日和高亮日期 if (DateRuleObjects.specialDays.IsNotNull() && DateRuleObjects.specialDays.Count > 0) { var _1 = item.Date.DayOfWeek.GetHashCode(); foreach (var specialDay in DateRuleObjects.specialDays) { if (_1 == specialDay) { item.IsHighlight = true; break; } } } if (SpecialDatesStrings.IsNotNull() && SpecialDatesStrings.Count > 0) { foreach (var SpecialDates in SpecialDatesStrings) { bool vaResult = false; if (SpecialDates.IndexOf(":") > -1) { string[] _01 = item.Date.ToString("yyyy-MM-dd HH:mm:ss").Split(' '); string[] _02 = SpecialDates.Split(' '); vaResult = System.Text.RegularExpressions.Regex.IsMatch(_01[0] + " " + _02[1], SpecialDates); } else { vaResult = System.Text.RegularExpressions.Regex.IsMatch(item.Date.ToString("yyyy-MM-dd"), SpecialDates); } if (vaResult) { item.IsHighlight = true; break; } } } } } }
/// <summary> /// Returns a set of regular expressions supported by this parser. /// </summary> /// <param name="provider">An <see cref="IFormatProvider"/>.</param> /// <returns>A set of regular expressions supported by this parser.</returns> public override IEnumerable <string> GetPatterns(IFormatProvider provider) { return(SpecialDates.Select(e => e.GetPattern(provider))); }
protected void ChangeCalendar(CalendarChanges changes) { Device.BeginInvokeOnMainThread(() => { OnStartRenderCalendar?.Invoke(this, EventArgs.Empty); Content = null; if (changes.HasFlag(CalendarChanges.StartDate)) { TitleLabel.Text = StartDate.ToString(TitleLabelFormat); if (TitleLabels != null) { var tls = StartDate.AddMonths(1); foreach (var tl in TitleLabels) { (tl as Label).Text = tls.ToString(TitleLabelFormat); tls = tls.AddMonths(1); } } } var start = CalendarStartDate(StartDate).Date; var beginOfMonth = false; var endOfMonth = false; var hideLastRow = false; for (int i = 0; i < buttons.Count; i++) { endOfMonth |= beginOfMonth && start.Day == 1; beginOfMonth |= start.Day == 1; if (i < dayLabels.Count && WeekdaysShow && changes.HasFlag(CalendarChanges.StartDay)) { if (WeekdaysFormat.ToLower() == "d1") { dayLabels[i].Text = start.ToString("ddd").Substring(0, 1); } else if (WeekdaysFormat.ToLower() == "d2") { dayLabels[i].Text = start.ToString("ddd").Substring(0, 2); } else { dayLabels[i].Text = start.ToString(WeekdaysFormat); } } ChangeWeekNumbers(start, i); if (changes.HasFlag(CalendarChanges.All)) { buttons[i].Text = string.Format("{0}", start.Day); } else { buttons[i].TextWithoutMeasure = string.Format("{0}", start.Day); } buttons[i].Date = start; buttons[i].IsOutOfMonth = !(beginOfMonth && !endOfMonth); buttons[i].IsEnabled = ShowNumOfMonths == 1 || !buttons[i].IsOutOfMonth; if (i == 35 && buttons[i].IsOutOfMonth) { // this means that we are on the bottom row and none of the dates // in it belong to the current month we should hide this row hideLastRow = true; rows.Last().IsVisible = false; } if (i >= 35 && hideLastRow) { buttons[i].IsVisible = false; } else { if (buttons[i].IsOutOfMonth) { buttons[i].IsVisible = ShowOutOfMonthDates; } else { buttons[i].IsVisible = true; } rows.Last().IsVisible = true; } SpecialDate sd = null; if (SpecialDates != null) { sd = SpecialDates.FirstOrDefault(s => s.Date.Date == start.Date); } SetButtonNormal(buttons[i]); if ((MinDate.HasValue && start < MinDate) || (MaxDate.HasValue && start > MaxDate) || (DisableAllDates && sd == null)) { SetButtonDisabled(buttons[i]); } else if (buttons[i].IsEnabled && SelectedDates.Select(d => d.Date).Contains(start.Date)) { SetButtonSelected(buttons[i], sd); } else if (sd != null) { SetButtonSpecial(buttons[i], sd); } start = start.AddDays(1); if (i != 0 && (i + 1) % 42 == 0) { beginOfMonth = false; endOfMonth = false; start = CalendarStartDate(start); } } if (DisableDatesLimitToMaxMinRange) { TitleLeftArrow.IsEnabled = !(MinDate.HasValue && CalendarStartDate(StartDate).Date < MinDate); TitleRightArrow.IsEnabled = !(MaxDate.HasValue && start > MaxDate); } Content = MainView; OnEndRenderCalendar?.Invoke(this, EventArgs.Empty); }); }