Exemplo n.º 1
0
        private static void ApplyBusinessRuleForTime(INotificationHandler notificationHandler, RuleHoliday ruleHoliday, int year, out DateTime?holidayDate)
        {
            string[] bussinesRules = ruleHoliday.BussinessRule.Split(",");

            holidayDate = null;

            if (bussinesRules != null && bussinesRules.Length >= 3)
            {
                if (bussinesRules[2] == "nearest")
                {
                    bussinesRules.ApplyNearestBusinessRule(year, out holidayDate);
                }
                else if (bussinesRules[2] == "workday")
                {
                    bussinesRules.ApplyWorkdayBusinessRule(year, out holidayDate);
                }
                else if (bussinesRules[2] == "!sunday")
                {
                    bussinesRules.ApplyNotSundayBusinessRule(year, out holidayDate);
                }
                else if (bussinesRules[2] == "after")
                {
                    int      times     = bussinesRules[0].ToWeekTimes();
                    int      dayOfWeek = bussinesRules[1].ToDayOfWeek();
                    DateTime date;

                    if (bussinesRules[3] == "easter")
                    {
                        date = year.GetEasterSunday();

                        for (int i = 0; i < times; i++)
                        {
                            date = date.GetDayAfterDate((DayOfWeek)dayOfWeek);
                        }

                        holidayDate = date;
                    }
                    else
                    {
                        var notification = new DomainNotification(ruleHoliday.Id.ToString(), $"A regra {ruleHoliday.BussinessRule} do {ruleHoliday.CountryIsoCode} não foi implementada.");
                        notificationHandler.NotifyError(notification);
                    }
                }
                else
                {
                    int weekNumber = bussinesRules[0].ToWeekNumber();
                    int dayOfWeek  = bussinesRules[1].ToDayOfWeek();
                    int month      = bussinesRules[2].ToMonth();

                    if (weekNumber != -1 && dayOfWeek != -1 && month != -1)
                    {
                        DateTime date = year.GetWeekDayOfMonth(month, (DayOfWeek)dayOfWeek, weekNumber);
                        holidayDate = date;
                    }
                }
            }
        }
Exemplo n.º 2
0
        private static List <Holiday> GetHolidaysFromRules(INotificationHandler notificationHandler, List <RuleHoliday> rulesHolidays, int start, int end, int year, IUserLogged userLogged)
        {
            List <Holiday> holidays = null;

            if (rulesHolidays != null && rulesHolidays.Count() > 0)
            {
                holidays = new List <Holiday>();

                try
                {
                    Guid        userId      = userLogged.GetUserId();
                    RuleHoliday ruleHoliday = null;
                    DateTime?   holidayDate = null;

                    for (int i = start, j = end; i < j; i++)
                    {
                        ruleHoliday = rulesHolidays[i];
                        holidayDate = null;

                        if (ruleHoliday.BussinessRule.HasValue())
                        {
                            if (!ApplyBusinessRuleForDate(notificationHandler, ruleHoliday, year, out holidayDate))
                            {
                                ApplyBusinessRuleForTime(notificationHandler, ruleHoliday, year, out holidayDate);
                            }
                        }
                        else
                        {
                            if (ruleHoliday.Month.HasValue && ruleHoliday.Day.HasValue)
                            {
                                holidayDate = new DateTime(year, ruleHoliday.Month.Value, ruleHoliday.Day.Value);
                            }
                        }

                        if (holidayDate == null)
                        {
                            var notification = new DomainNotification(ruleHoliday.Id.ToString(), $"O feriado {ruleHoliday.NativeHolidayName} do {ruleHoliday.CountryIsoCode} não tem data.");
                            notificationHandler.NotifyError(notification);
                        }
                        else
                        {
                            var holiday = Holiday.CreateHoliday(null, EntityStatus.Active, ActionType.Register, userId, ruleHoliday.CountryId, ruleHoliday.StateId, holidayDate.Value, ruleHoliday.HolidayType, ruleHoliday.Optional, ruleHoliday.NativeHolidayName, ruleHoliday.EnglishHolidayName, ruleHoliday.CountryIsoCode, ruleHoliday.StateIsoCode, ruleHoliday.CityName, ruleHoliday.CityCode);
                            holidays.Add(holiday);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            return(holidays);
        }
Exemplo n.º 3
0
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void

        public static async void FireAndForgetSafeAsync(this Task task, INotificationHandler handler = null)
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void
        {
            try
            {
                await task;
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception ex)
            {
                handler?.NotifyError(ex);
            }
#pragma warning restore CA1031 // Do not catch general exception types
        }
Exemplo n.º 4
0
 /// <summary>
 /// Notifies the occurrence of an error.
 /// </summary>
 /// <param name="propertyName">Who the message refers to.</param>
 /// <param name="errorMessage">Message text.</param>
 protected void NotifyError(string propertyName, string errorMessage)
 {
     _notificationHandler.NotifyError(new DomainNotification(propertyName, errorMessage));
 }
Exemplo n.º 5
0
        private static bool ApplyBusinessRuleForDate(INotificationHandler notificationHandler, RuleHoliday ruleHoliday, int year, out DateTime?holidayDate)
        {
            bool     businessRuleApplied = false;
            DateTime date = DateTime.MinValue;

            if (ruleHoliday.BussinessRule == "ascensionday")
            {
                date = year.GetAscensionDay();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "ashwednesday")
            {
                date = year.GetAshWednesday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "assumptionday")
            {
                date = year.GetAshWednesday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "carnivalmonday")
            {
                date = year.GetCarnivalMonday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "carnivaltuesday")
            {
                date = year.GetCarnivalTuesday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "corpuschristi")
            {
                date = year.GetCorpusChristi();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "easter" || ruleHoliday.BussinessRule == "eastersunday")
            {
                date = year.GetEasterSunday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "eastermonday")
            {
                date = year.GetEasterSunday();
                date = date.AddDays(1);
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "eastertuesday")
            {
                date = year.GetEasterSunday();
                date = date.AddDays(2);
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "goodfriday")
            {
                date = year.GetGoodFriday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "holysaturday")
            {
                date = year.GetHolySaturday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "holythursday")
            {
                date = year.GetHolyThursday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "maundythursday")
            {
                date = year.GetMaundyThursday();
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "pentecostmonday")
            {
                date = year.GetPentecostDay();
                date = date.AddDays(1);
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "pentecosttuesday")
            {
                date = year.GetPentecostDay();
                date = date.AddDays(2);
                businessRuleApplied = true;
            }
            else if (ruleHoliday.BussinessRule == "whitmonday")
            {
                date = year.GetWhitsunDay();
                date = date.AddDays(1);
                businessRuleApplied = true;
            }

            holidayDate = null;

            if (businessRuleApplied)
            {
                holidayDate = new DateTime(year, date.Month, date.Day);
            }

            if (!ruleHoliday.BussinessRule.Contains(",") && !businessRuleApplied)
            {
                var notification = new DomainNotification(ruleHoliday.Id.ToString(), $"A regra {ruleHoliday.BussinessRule} do {ruleHoliday.CountryIsoCode} não foi implementada.");
                notificationHandler.NotifyError(notification);
            }

            return(businessRuleApplied);
        }