Esempio n. 1
0
        ///-------------------------------------------------------------------------------------------------
        /// <summary>	A DateTime extension method that returns list of events on date. </summary>
        ///
        /// <param name="date">			    The date. </param>
        /// <param name="includeWorkdays">	True to include, false to include workday events. </param>
        /// <param name="includeDaysOff">   True to disable, false to include days off events. </param>
        ///
        /// <returns>	An ImmutableArray&lt;string&gt; </returns>
        ///
        /// <example>
        ///     <code>
        ///     CalendarDateTime.AddYearlyDateEvent("myBirthday", true, 5, 20, false, false);
        ///     var aDate = new DateTime(2018, 5, 20, 5, 30, 0);
        ///     var events = aDate.EventsOnDate(true, true);
        ///     // events = [0] = "myBirthday"
        ///     </code>
        /// </example>
        ///-------------------------------------------------------------------------------------------------
        public static ImmutableArray <string> EventsOnDate(this DateTime date, bool includeWorkdays, bool includeDaysOff)
        {
            date = date.Date;
            var events = new List <string>();

            var yearlyEvents = YearlyEventsDictionary
                               .Where(v => date.IsBetweenEqual(v.Value.DateStart, v.Value.DateEnd) &&
                                      (v.Value.DayOff && includeDaysOff || v.Value.WorkDay && includeWorkdays) &&
                                      v.Value.Date(date.Year) == date)
                               .Select(k => k.Key);

            var monthlyEvents = MonthlyEventsDictionary
                                .Where(v => date.IsBetweenEqual(v.Value.DateStart, v.Value.DateEnd) &&
                                       (v.Value.DayOff && includeDaysOff || v.Value.WorkDay && includeWorkdays) &&
                                       v.Value.Date(date.Year, date.Month) == date)
                                .Select(k => k.Key);

            var weeklyEvents = WeeklyEventsDictionary
                               .Where(v => date.IsBetweenEqual(v.Value.DateStart, v.Value.DateEnd) &&
                                      (v.Value.DayOff && includeDaysOff || v.Value.WorkDay && includeWorkdays) &&
                                      v.Value.IsEventDay(date))
                               .Select(k => k.Key);

            var dateEvents = DateEventsDictionary
                             .Where(v => (v.Value.DayOff && includeDaysOff || v.Value.WorkDay && includeWorkdays) &&
                                    v.Value.Date == date)
                             .Select(k => k.Key);

            events.AddRange(yearlyEvents);
            events.AddRange(monthlyEvents);
            events.AddRange(weeklyEvents);
            events.AddRange(dateEvents);
            return(events.ToImmutableArray());
        }