public void AddQuartersTest() { int currentYear = ClockProxy.Clock.Now.Year; const YearMonth yearStartMonth = YearMonth.April; TimeCalendar calendar = TimeCalendar.New( TimeSpan.Zero, TimeSpan.Zero, yearStartMonth ); DateTime calendarStartDate = new DateTime( currentYear, 4, 1 ); Quarter calendarQuarter = new Quarter( currentYear, YearQuarter.First, calendar ); Assert.AreEqual( calendarQuarter.AddQuarters( 0 ), calendarQuarter ); Quarter prevQ1 = calendarQuarter.AddQuarters( -1 ); Assert.AreEqual( prevQ1.YearQuarter, YearQuarter.Fourth ); Assert.AreEqual( prevQ1.BaseYear, currentYear - 1 ); Assert.AreEqual( prevQ1.Start, calendarStartDate.AddMonths( -3 ) ); Assert.AreEqual( prevQ1.End, calendarStartDate ); Quarter prevQ2 = calendarQuarter.AddQuarters( -2 ); Assert.AreEqual( prevQ2.YearQuarter, YearQuarter.Third ); Assert.AreEqual( prevQ2.BaseYear, currentYear - 1 ); Assert.AreEqual( prevQ2.Start, calendarStartDate.AddMonths( -6 ) ); Assert.AreEqual( prevQ2.End, calendarStartDate.AddMonths( -3 ) ); Quarter prevQ3 = calendarQuarter.AddQuarters( -3 ); Assert.AreEqual( prevQ3.YearQuarter, YearQuarter.Second ); Assert.AreEqual( prevQ3.BaseYear, currentYear - 1 ); Assert.AreEqual( prevQ3.Start, calendarStartDate.AddMonths( -9 ) ); Assert.AreEqual( prevQ3.End, calendarStartDate.AddMonths( -6 ) ); Quarter prevQ4 = calendarQuarter.AddQuarters( -4 ); Assert.AreEqual( prevQ4.YearQuarter, YearQuarter.First ); Assert.AreEqual( prevQ4.BaseYear, currentYear - 1 ); Assert.AreEqual( prevQ4.Start, calendarStartDate.AddMonths( -12 ) ); Assert.AreEqual( prevQ4.End, calendarStartDate.AddMonths( -9 ) ); Quarter prevQ5 = calendarQuarter.AddQuarters( -5 ); Assert.AreEqual( prevQ5.YearQuarter, YearQuarter.Fourth ); Assert.AreEqual( prevQ5.BaseYear, currentYear - 2 ); Assert.AreEqual( prevQ5.Start, calendarStartDate.AddMonths( -15 ) ); Assert.AreEqual( prevQ5.End, calendarStartDate.AddMonths( -12 ) ); Quarter futureQ1 = calendarQuarter.AddQuarters( 1 ); Assert.AreEqual( futureQ1.YearQuarter, YearQuarter.Second ); Assert.AreEqual( futureQ1.BaseYear, currentYear ); Assert.AreEqual( futureQ1.Start, calendarStartDate.AddMonths( 3 ) ); Assert.AreEqual( futureQ1.End, calendarStartDate.AddMonths( 6 ) ); Quarter futureQ2 = calendarQuarter.AddQuarters( 2 ); Assert.AreEqual( futureQ2.YearQuarter, YearQuarter.Third ); Assert.AreEqual( futureQ2.BaseYear, currentYear ); Assert.AreEqual( futureQ2.Start, calendarStartDate.AddMonths( 6 ) ); Assert.AreEqual( futureQ2.End, calendarStartDate.AddMonths( 9 ) ); Quarter futureQ3 = calendarQuarter.AddQuarters( 3 ); Assert.AreEqual( futureQ3.YearQuarter, YearQuarter.Fourth ); Assert.AreEqual( futureQ3.BaseYear, currentYear ); Assert.AreEqual( futureQ3.Start, calendarStartDate.AddMonths( 9 ) ); Assert.AreEqual( futureQ3.End, calendarStartDate.AddMonths( 12 ) ); Quarter futureQ4 = calendarQuarter.AddQuarters( 4 ); Assert.AreEqual( futureQ4.YearQuarter, YearQuarter.First ); Assert.AreEqual( futureQ4.BaseYear, currentYear + 1 ); Assert.AreEqual( futureQ4.Start, calendarStartDate.AddMonths( 12 ) ); Assert.AreEqual( futureQ4.End, calendarStartDate.AddMonths( 15 ) ); Quarter futureQ5 = calendarQuarter.AddQuarters( 5 ); Assert.AreEqual( futureQ5.YearQuarter, YearQuarter.Second ); Assert.AreEqual( futureQ5.BaseYear, currentYear + 1 ); Assert.AreEqual( futureQ5.Start, calendarStartDate.AddMonths( 15 ) ); Assert.AreEqual( futureQ5.End, calendarStartDate.AddMonths( 18 ) ); }
// ---------------------------------------------------------------------- private void SelectPeriod( PeriodSelectType periodSelectType ) { int offset = 0; switch ( periodSelectType ) { case PeriodSelectType.Previous: offset = -1; break; case PeriodSelectType.Current: ResetWorkingPeriod(); return; case PeriodSelectType.Next: offset = 1; break; } switch ( WorkingTimePeriod ) { case TimePeriodMode.Year: Year year = new Year( WorkingPeriodStartDate ); SetWorkingPeriod( year.AddYears( offset ) ); break; case TimePeriodMode.Halfyear: Halfyear halfyear = new Halfyear( WorkingPeriodStartDate ); SetWorkingPeriod( halfyear.AddHalfyears( offset ) ); break; case TimePeriodMode.Quarter: Quarter quarter = new Quarter( WorkingPeriodStartDate ); SetWorkingPeriod( quarter.AddQuarters( offset ) ); break; case TimePeriodMode.Month: Month month = new Month( WorkingPeriodStartDate ); SetWorkingPeriod( month.AddMonths( offset ) ); break; case TimePeriodMode.Week: Week week = new Week( WorkingPeriodStartDate ); SetWorkingPeriod( week.AddWeeks( offset ) ); break; case TimePeriodMode.Day: Day day = new Day( WorkingPeriodStartDate ); SetWorkingPeriod( day.AddDays( offset ) ); break; } }