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; } } } }
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); }
#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 }
/// <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)); }
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); }