/// <summary>
 /// Create a special day with a code
 /// </summary>
 /// <param name="date"></param>
 /// <param name="dayCode"></param>
 /// <param name="dayType"></param>
 /// <param name="timeCode"></param>
 public SpecialDay(BadiDate date, HolyDayCode dayCode, SpecialDayType dayType, SpecialTimeCode timeCode) : this()
 {
     Date     = date;
     DayType  = dayType;
     DayCode  = dayCode;
     TimeCode = timeCode;
 }
Exemple #2
0
        /// <summary>
        /// A listing of special days in this year
        /// </summary>
        /// <param name="typesWanted">What type's of days?</param>
        /// <param name="holyDaysWanted">If Holy Days are wanted, but not all of them, which ones?</param>
        /// <returns></returns>
        public List <SpecialDay> GetSpecialDays(SpecialDayType typesWanted, HolyDayCode holyDaysWanted = HolyDayCode._NoCode_)
        {
            var final = new List <SpecialDay>();

            if (typesWanted.HasFlag(SpecialDayType.FeastDay))
            {
                for (int i = 0; i < 19; i++)
                {
                    final.Add(new SpecialDay(new BadiDate(_year, i + 1, 1), SpecialDayType.FeastDay));
                }
            }

            if (typesWanted.HasFlag(SpecialDayType.FastingDay))
            {
                for (int i = 0; i < 19; i++)
                {
                    final.Add(new SpecialDay(new BadiDate(_year, 19, i + 1), SpecialDayType.FastingDay));
                }
            }

            if (typesWanted.HasFlag(SpecialDayType.HolyDay_WorkSuspended))
            {
                final.Add(new SpecialDay(new BadiDate(_year, 1, 1), HolyDayCode.NawRuz, SpecialDayType.HolyDay_WorkSuspended));
                final.Add(new SpecialDay(new BadiDate(_year, 2, 13), HolyDayCode.Ridvan1, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.H15));
                final.Add(new SpecialDay(new BadiDate(_year, 3, 2), HolyDayCode.Ridvan9, SpecialDayType.HolyDay_WorkSuspended));
                final.Add(new SpecialDay(new BadiDate(_year, 3, 5), HolyDayCode.Ridvan12, SpecialDayType.HolyDay_WorkSuspended));
                final.Add(new SpecialDay(new BadiDate(_year, 4, 13), HolyDayCode.AscBaha, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.H03));

                if (_year <= 171)
                {
                    final.Add(new SpecialDay(new BadiDate(_year, 4, 7), HolyDayCode.DeclBab, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.SS2));
                    final.Add(new SpecialDay(new BadiDate(_year, 6, 16), HolyDayCode.Martrydom, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.H12));
                    final.Add(new SpecialDay(new BadiDate(_year, 12, 5), HolyDayCode.BirthBab, SpecialDayType.HolyDay_WorkSuspended));
                    final.Add(new SpecialDay(new BadiDate(_year, 13, 9), HolyDayCode.BirthBaha, SpecialDayType.HolyDay_WorkSuspended));
                }
                else
                {
                    final.Add(new SpecialDay(new BadiDate(_year, 4, 8), HolyDayCode.DeclBab, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.SS2));
                    final.Add(new SpecialDay(new BadiDate(_year, 6, 17), HolyDayCode.Martrydom, SpecialDayType.HolyDay_WorkSuspended, SpecialTimeCode.H12));

                    // Get from Twin Holy Birthday compressed code
                    // code is CHAR((month - 11) * 20 + 32 + day)  -- 32 is added to avoid control characters
                    var codeNum = (int)_twinHolyBirthdaysCode[_year - 172] - 32;
                    var month   = 11 + codeNum / 20;
                    var day     = codeNum % 20;
                    final.Add(new SpecialDay(new BadiDate(_year, month, day), HolyDayCode.BirthBab, SpecialDayType.HolyDay_WorkSuspended));

                    day++;
                    if (day > 19)
                    {
                        day = 1;
                        month++;
                    }
                    final.Add(new SpecialDay(new BadiDate(_year, month, day), HolyDayCode.BirthBaha, SpecialDayType.HolyDay_WorkSuspended));
                }
            }

            if (typesWanted.HasFlag(SpecialDayType.HolyDay_Other))
            {
                final.Add(new SpecialDay(new BadiDate(_year, 14, 4), HolyDayCode.Covenant, SpecialDayType.HolyDay_Other));
                final.Add(new SpecialDay(new BadiDate(_year, 14, 6), HolyDayCode.AscAbdul, SpecialDayType.HolyDay_Other, SpecialTimeCode.H01));
            }

            return(final
                   .Where(sd =>
                          holyDaysWanted == HolyDayCode._NoCode_ ||
                          !sd.DayType.HasFlag(SpecialDayType.HolyDay_WorkSuspended | SpecialDayType.HolyDay_Other) ||
                          sd.DayCode.HasFlag(holyDaysWanted))
                   .OrderBy(sd => sd.Date.LocalDate.DayOfYear)
                   .ToList());
        }
Exemple #3
0
 public SpecialDay(DateTime date, SpecialDayType type, string name)
 {
     Date           = date;
     SpecialDayType = type;
     this.name      = name;
 }
 public SpecialDay(DateTime date, SpecialDayType type, string name)
 {
     Date = date;
     SpecialDayType = type;
     this.name = name;
 }
 /// <summary>
 /// Create a special day
 /// </summary>
 /// <param name="date"></param>
 /// <param name="dayType"></param>
 public SpecialDay(BadiDate date, SpecialDayType dayType) : this()
 {
     Date    = date;
     DayType = dayType;
 }