public List <DateTime> GetPublicHolidayByYears(List <int> years, PublicHoliday holiday)
        {
            if (string.IsNullOrEmpty(holiday.Name))
            {
                throw new ArgumentException("Cannot process a custom holidays without a name.");
            }

            if (string.IsNullOrEmpty(holiday.ReferenceHolidayName))
            {
                throw new ArgumentException("You cannot have an empty ReferenceHolidayName for BasedOnOtherHoliday types.");
            }

            if (holiday.NumberOfDaysFromReference == null)
            {
                throw new ArgumentException("You cannot have an empty NumberOfDaysFromReference for BasedOnOtherHoliday types.");
            }

            var holidayDatesList = new List <DateTime>();

            if (years == null)
            {
                return(holidayDatesList);
            }

            foreach (var referenceDate in holiday.ReferenceHolidayDates)
            {
                if (years.Any(x => x == referenceDate.Year))
                {
                    holidayDatesList.Add(referenceDate.AddDays(holiday.NumberOfDaysFromReference ?? 0));
                }
            }

            return(holidayDatesList);
        }
        public List <DateTime> GetPublicHolidayByYears(List <int> years, PublicHoliday holiday)
        {
            if (string.IsNullOrEmpty(holiday.Name))
            {
                throw new ArgumentException("Cannot process a custom holidays without a name.");
            }

            var publicHolidaysList = new List <DateTime>();

            if (years == null)
            {
                return(publicHolidaysList);
            }

            foreach (var year in years)
            {
                var publicHolidayDate = new DateTime(year, holiday.Month, holiday.Day);
                if (holiday.MustHappenOnAWeekDay && publicHolidayDate.DayOfWeek > DayOfWeek.Friday)
                {
                    var daysToAdd = publicHolidayDate.DayOfWeek == DayOfWeek.Saturday ? 2 : 1;
                    publicHolidayDate = publicHolidayDate.AddDays(daysToAdd);
                }

                publicHolidaysList.Add(publicHolidayDate);
            }

            return(publicHolidaysList);
        }
Пример #3
0
        public IPublicHolidayCalculator GetCalculator(PublicHoliday holiday)
        {
            IPublicHolidayCalculator calculator = null;

            switch (holiday.HolidayType)
            {
            case PublicHolidayType.FixedDate:
                calculator = new FixedDayCalculator();
                break;

            case PublicHolidayType.BasedOnAnotherHoliday:
                calculator = new BasedOnOtherHolidayCalculator();
                break;

            case PublicHolidayType.RepeatEveryXYear:
                calculator = new YearRepetitionCalculator();
                break;

            case PublicHolidayType.Easter:
                calculator = new EasterCalculator();
                break;

            case PublicHolidayType.SpecificDayInWeek:
                calculator = new SpecificWeekDayCalculator();
                break;

            default:
                throw new ArgumentException();
            }

            return(calculator);
        }
Пример #4
0
        public async Task LeaveRequest(IDialogContext context, LuisResult result)
        {
            PublicHoliday leaveDuration = ExtractDataFromDateEntities(context, result);

            if (leaveDuration.IsInputSingle)
            {
                var leaveRequestFormDialog = new FormDialog <LeaveRequestBasicForm>
                                                 (new LeaveRequestBasicForm(leaveDuration.Single_Date, leaveDuration.Single_Date),
                                                 leaveRequestBasicForm.BuildForm,
                                                 FormOptions.PromptInStart);
                context.Call(leaveRequestFormDialog, AddRequestedLeaves);
            }
            else if (leaveDuration.IsInputRange)
            {
                var leaveRequestFormDialog = new FormDialog <LeaveRequestBasicForm>
                                                 (new LeaveRequestBasicForm(leaveDuration.Start_Date, leaveDuration.End_Date),
                                                 leaveRequestBasicForm.BuildForm,
                                                 FormOptions.PromptInStart);
                context.Call(leaveRequestFormDialog, AddRequestedLeaves);
            }
            else
            {
                var leaveRequestFormDialog = new FormDialog <LeaveRequestBasicForm>
                                                 (new LeaveRequestBasicForm(),
                                                 leaveRequestBasicForm.BuildForm,
                                                 FormOptions.PromptInStart);
                context.Call(leaveRequestFormDialog, AddRequestedLeaves);
            }
        }
        /// <summary>
        /// If the public holiday falls on weekend identify the next weekday as holiday.
        /// </summary>
        /// <param name="year"></param>
        /// <returns></returns>
        public List <PublicHoliday> GetDayBasedHolidays(int year)
        {
            List <PublicHoliday> publicHolidays = GetFixedHolidays(year);

            for (int i = 0; i < publicHolidays.Count; i++)
            {
                PublicHoliday holiday = publicHolidays[i];
                if ((holiday.HolidayDate == new DateTime(year, 1, 1) ||
                     holiday.HolidayDate == new DateTime(year, 1, 26) ||
                     holiday.HolidayDate == new DateTime(year, 4, 25) ||
                     holiday.HolidayDate == new DateTime(year, 12, 25) ||
                     holiday.HolidayDate == new DateTime(year, 12, 26)
                     ) && holiday.IsWeekend())
                {
                    int addDays = 1;
                    while (holiday.HolidayDate.AddDays(addDays).DayOfWeek < DayOfWeek.Monday || publicHolidays.Exists(t => t.HolidayDate == holiday.HolidayDate.AddDays(addDays) && !holiday.IsWeekend()))
                    {
                        addDays++;
                    }
                    string holidayName = String.Concat(holiday.Name, " ", holiday.HolidayDate.AddDays(addDays).DayOfWeek.ToString());

                    publicHolidays.Add(new PublicHoliday(holiday.HolidayDate.AddDays(addDays), holidayName));
                }
            }
            return(publicHolidays);
        }
Пример #6
0
        public void BusinessDaysBetweenTwoDatesCustomHolidays_WhenPasseValidDatesAndCustomHoliday_ThenReturnsCorrectCount()
        {
            // Arrange
            var firstDate       = new DateTime(2020, 4, 20);
            var secondDate      = new DateTime(2020, 4, 30);
            var anzacDayHoliday = new PublicHoliday {
                Name = "Anzac Day", Month = 4, Day = 25, MustHappenOnAWeekDay = true
            };
            var holidayList = new List <PublicHoliday> {
                anzacDayHoliday
            };
            var anzacDayDateIn2020 = new List <DateTime> {
                new DateTime(2020, 4, 27)
            };
            var year = new List <int> {
                2020
            };
            var calculator = new FixedDayCalculator();

            _dateHelper.GetYearsBetweenDates(firstDate, secondDate).Returns(year);
            _publicHolidayCalculatorFactory.GetCalculator(anzacDayHoliday).Returns(calculator);

            var target = new DateCounter(_publicHolidayCalculatorFactory, _dateHelper, _logger);

            // Act
            var actual = target.BusinessDaysBetweenTwoDates(firstDate, secondDate, holidayList);

            // Assert
            actual.Should().Be(6);
            _dateHelper.Received(1).GetYearsBetweenDates(firstDate, secondDate);
            _publicHolidayCalculatorFactory.Received(1).GetCalculator(anzacDayHoliday);
        }
Пример #7
0
        public PublicHoliday ExtractDataFromDateEntities(IDialogContext context, LuisResult result)
        {
            holidayData = new PublicHoliday();

            EntityRecommendation Holiday_Date, Holiday_Date_Range;

            //Extracts date range entity from luis result : This case is for user input for a range of dates
            if (result.TryFindEntity("builtin.datetimeV2.daterange", out Holiday_Date_Range))
            {
                holidayData.IsInputRange = true;
                var resolutionValues = (IList <object>)Holiday_Date_Range.Resolution["values"];
                var lastRange        = (IDictionary <string, object>)resolutionValues.Last();
                holidayData.Start_Date = (lastRange).ContainsKey("start") ? Convert.ToDateTime((lastRange)["start"]) : (DateTime?)null;
                holidayData.End_Date   = (lastRange).ContainsKey("end") ? Convert.ToDateTime((lastRange)["end"]) : (DateTime?)null;
            }

            //Extracts single date entity from luis result : This case is for user input for a specific date
            if (result.TryFindEntity("builtin.datetimeV2.date", out Holiday_Date))
            {
                holidayData.IsInputSingle = true;
                var resolutionValues = (IList <object>)Holiday_Date.Resolution["values"];
                holidayData.Single_Date = Convert.ToDateTime(((IDictionary <string, object>)resolutionValues.Last())["value"]);
            }

            return(holidayData);
        }
Пример #8
0
        /// <summary>
        /// Load data method.
        /// </summary>
        /// <returns>Returns - Data</returns>
        private List <PublicHoliday> LoadDataOfDb()
        {
            // Initialization.
            List <PublicHoliday> lst    = new List <PublicHoliday>();
            List <Schedule>      Result = new List <Schedule>();

            try
            {
                Result = db.Schedule.ToList();

                // Read Data.
                foreach (var item in Result)
                {
                    PublicHoliday infoObj = new PublicHoliday();

                    // Setting.
                    infoObj.Sr         = item.id;
                    infoObj.Title      = item.title;
                    infoObj.Desc       = item.discription;
                    infoObj.Start_Date = item.start;
                    infoObj.End_Date   = item.end;

                    // Adding.
                    lst.Add(infoObj);
                }
            }
            catch (Exception ex)
            {
                // info.
                Console.Write(ex);
            }

            // info.
            return(lst);
        }
Пример #9
0
 public static PublicHolidayResponse MapFrom(PublicHoliday publicHoliday)
 {
     return(new PublicHolidayResponse
     {
         Date = publicHoliday.Date,
         Name = publicHoliday.Title
     });
 }
 private bool IsPublicHoliday(PublicHoliday publicHoliday, DateTime date)
 {
     return(publicHoliday.Month == date.Month &&
            ((publicHoliday.FixedDate && publicHoliday.DayInMonth == date.Day) ||
             (publicHoliday.VariableDayInMonth != null &&
              publicHoliday.VariableDayInMonth.DayOfWeek == (int)date.DayOfWeek &&
              publicHoliday.VariableDayInMonth.WeekOfMonth == DateTimeHelper.GetWeekNumberOfMonth(date))));
 }
Пример #11
0
        public ActionResult DeleteConfirmed(int id)
        {
            PublicHoliday publicHoliday = db.PublicHolidays.Find(id);

            db.PublicHolidays.Remove(publicHoliday);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Пример #12
0
        public void dleteHoliday(int Id, int UserId)
        {
            PublicHoliday holidayData = _db.PublicHolidays.Where(x => x.Id == Id).FirstOrDefault();

            holidayData.Archived             = true;
            holidayData.UserIDLastModifiedBy = UserId;
            holidayData.LastModified         = DateTime.Now;
            _db.SaveChanges();
        }
Пример #13
0
 public ActionResult Edit([Bind(Include = "Id,Title,Desc,Start_Date,End_Date")] PublicHoliday publicHoliday)
 {
     if (ModelState.IsValid)
     {
         db.Entry(publicHoliday).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(publicHoliday));
 }
Пример #14
0
        public void CheckGlobalSwtichWork()
        {
            var publicHoliday = new PublicHoliday(2020, 01, 30, "Test", "Test", CountryCode.AT, null, null, PublicHolidayType.Public);

            Assert.IsTrue(publicHoliday.Global);

            publicHoliday = new PublicHoliday(2020, 01, 30, "Test", "Test", CountryCode.AT, null, new[] { "AT-1" }, PublicHolidayType.Public);

            Assert.IsFalse(publicHoliday.Global);
        }
Пример #15
0
        public void SaveHolidayData(int CountryId, string CountryName, List <publicHolidayCountyList> HolidayData, int UserId)
        {
            if (CountryId > 0)
            {
                PublicHolidayCountry country = _db.PublicHolidayCountries.Where(x => x.Id == CountryId).FirstOrDefault();
                country.Name = CountryName;
                country.UserIDLastModifiedBy = UserId;
                country.LastModified         = DateTime.Now;
                _db.SaveChanges();

                foreach (var item in HolidayData)
                {
                    PublicHoliday holidayData = new PublicHoliday();
                    holidayData.Name = item.Name;
                    var holidayDate = DateTime.ParseExact(item.Date, inputFormat, CultureInfo.InvariantCulture);
                    holidayData.Date = Convert.ToDateTime(holidayDate.ToString(outputFormat));
                    holidayData.PublicHolidayCountryID = country.Id;
                    holidayData.Archived             = false;
                    holidayData.UserIDCreatedBy      = UserId;
                    holidayData.CreatedDate          = DateTime.Now;
                    holidayData.UserIDLastModifiedBy = UserId;
                    holidayData.LastModified         = DateTime.Now;
                    _db.PublicHolidays.Add(holidayData);
                    _db.SaveChanges();
                }
            }
            else
            {
                PublicHolidayCountry country = new PublicHolidayCountry();
                country.Name                 = CountryName;
                country.Archived             = false;
                country.UserIDCreatedBy      = UserId;
                country.CreatedDate          = DateTime.Now;
                country.UserIDLastModifiedBy = UserId;
                country.LastModified         = DateTime.Now;
                _db.PublicHolidayCountries.Add(country);
                _db.SaveChanges();

                foreach (var item in HolidayData)
                {
                    PublicHoliday holidayData = new PublicHoliday();
                    holidayData.Name = item.Name;
                    var holidayDate = DateTime.ParseExact(item.Date, inputFormat, CultureInfo.InvariantCulture);
                    holidayData.Date = Convert.ToDateTime(holidayDate.ToString(outputFormat));
                    holidayData.PublicHolidayCountryID = country.Id;
                    holidayData.Archived             = false;
                    holidayData.UserIDCreatedBy      = UserId;
                    holidayData.CreatedDate          = DateTime.Now;
                    holidayData.UserIDLastModifiedBy = UserId;
                    holidayData.LastModified         = DateTime.Now;
                    _db.PublicHolidays.Add(holidayData);
                    _db.SaveChanges();
                }
            }
        }
Пример #16
0
        public ActionResult Create([Bind(Include = "Id,Title,Desc,Start_Date,End_Date")] PublicHoliday publicHoliday)
        {
            if (ModelState.IsValid)
            {
                db.PublicHolidays.Add(publicHoliday);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(publicHoliday));
        }
        public void GetCalculator_WhenPassedHoliday_ThenReturnsCorrectCalculator(PublicHoliday publicHoliday, Type typeOfCalculator)
        {
            // Arrange
            var target = new PublicHolidayCalculatorFactory();

            // Act
            var actual = target.GetCalculator(publicHoliday);

            // Assert
            actual.GetType().Should().Be(typeOfCalculator);
        }
Пример #18
0
 public void TestInitialize()
 {
     try
     {
         publicHoliday = new PublicHoliday();
     }
     catch (Exception e)
     {
         Assert.Fail(e.Message);
     }
 }
        public IHttpActionResult GetById(int id)
        {
            PublicHoliday publicHoliday = publicHolidayRepository.ReadById(id);

            if (publicHoliday == null)
            {
                return(NotFound());
            }

            return(Ok(publicHoliday));
        }
Пример #20
0
        /// <summary>
        /// 指定された <see cref="PublicHoliday"/> が祝日なら <c>true</c>、それ以外なら <c>false</c> を返します。
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsPublicHoliday(this PublicHoliday value)
        {
            switch (value)
            {
            case PublicHoliday.None:
                return(false);

            default:
                return(Enum.IsDefined(typeof(PublicHoliday), value));
            }
        }
        public IHttpActionResult Post(PublicHoliday publicHoliday)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            publicHoliday.Date = publicHoliday.Date.AddHours(4);
            publicHolidayRepository.Create(publicHoliday);

            return(CreatedAtRoute("DefaultApi", new { id = publicHoliday.Id }, publicHoliday));
        }
Пример #22
0
        private PublicHoliday DayOfMadrid(int year, CountryCode countryCode, PublicHoliday labourDay)
        {
            var date = new DateTime(year, 5, 2).Shift(saturday => saturday, sunday => sunday.AddDays(1));

            if (labourDay.Date == date)
            {
                date = date.AddDays(1);
            }

            return(new PublicHoliday(date, "Fiesta de la Comunidad de Madrid", "Day of Madrid", countryCode, null, new string[] { "ES-M" }));
        }
        public void GetPublicHolidayByYears_WhenNullName_ThenThrows()
        {
            // Arrange
            var target = new FixedDayCalculator();
            var holiday = new PublicHoliday { Name = null };

            // Act
            Action actual = () => target.GetPublicHolidayByYears(null, holiday);

            // Assert
            actual.Should().Throw<ArgumentException>().WithMessage("Cannot process a custom holidays without a name.");
        }
Пример #24
0
 public PublicHolidayCsv(PublicHoliday item)
 {
     this.Date        = item.Date.ToString("yyyy-MM-dd");
     this.LocalName   = item.LocalName;
     this.Name        = item.Name;
     this.CountryCode = item.CountryCode.ToString();
     this.Fixed       = item.Fixed;
     this.Global      = item.Global;
     this.LaunchYear  = item.LaunchYear;
     this.Type        = item.Type;
     this.Counties    = item.Counties == null ? "" : $"{string.Join(',', item.Counties)}";
 }
Пример #25
0
        public void LongWeekend6()
        {
            var publicHolidays = new PublicHoliday[]
            {
                new PublicHoliday(2020, 01, 11, "Holiday Sunday", "Holiday Sunday", CountryCode.AT),
            };

            ILongWeekendCalculator longWeekendCalculator = new LongWeekendCalculator(WeekendProvider.Universal);
            var longWeekends = longWeekendCalculator.Calculate(publicHolidays);

            Assert.AreEqual(0, longWeekends.Count());
        }
Пример #26
0
        public void updateHoliday(int Id, string Name, string Date, int UserId)
        {
            PublicHoliday holidayData = _db.PublicHolidays.Where(x => x.Id == Id).FirstOrDefault();

            holidayData.Name = Name;
            var holidayDate = DateTime.ParseExact(Date, inputFormat, CultureInfo.InvariantCulture);

            holidayData.Date = Convert.ToDateTime(holidayDate.ToString(outputFormat));
            holidayData.UserIDLastModifiedBy = UserId;
            holidayData.LastModified         = DateTime.Now;
            _db.SaveChanges();
        }
Пример #27
0
        public static List <PublicHoliday> GetMayDay(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.GB).Where(h => h.LocalName == "Early May Bank Holiday").FirstOrDefault();

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
Пример #28
0
        public static List <PublicHoliday> GetBoxingDay(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = new PublicHoliday(new DateTime(Math.Max(startDate.Ticks, endDate.Ticks)).Year, 12, 26, "Boxing Day", "St. Stephen's Day", CountryCode.GB);

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
Пример #29
0
        public static List <PublicHoliday> GetJan2ndScotland(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = new PublicHoliday(new DateTime(Math.Max(startDate.Ticks, endDate.Ticks)).Year, 1, 2, "New Year's Day", "New Year's Day", CountryCode.GB);

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
Пример #30
0
        public static List <PublicHoliday> GetJan2ndScotlandHoliday(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.GB).Where(h => h.LocalName == "New Year's Day" && h.Counties != null && h.Counties.Contains("GB-SCT")).LastOrDefault();

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }