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;
                }
            });
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
 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);
            }
        }
Beispiel #6
0
        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");
     }
 }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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");
            }
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #13
0
        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());
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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;
            });
        }
Beispiel #16
0
        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);
            });
        }