Quintiq file version 2.0
|
#parent: #root
|
StaticMethod GetDateOfNextOccurrence (
|
TimeZone timezone_i,
|
Date date_i,
|
Duration startTimeOfDay_i,
|
Duration endTimeOfDay_i,
|
Duration duration_i,
|
Date earliestStart_i,
|
Boolean onMonday_i,
|
Boolean onTuesday_i,
|
Boolean onWednesday_i,
|
Boolean onThursday_i,
|
Boolean onFriday_i,
|
Boolean onSaturday_i,
|
Boolean onSunday_i
|
) declarative remote as Date
|
{
|
TextBody:
|
[*
|
nextDate := Date::MinDate();
|
date := date_i;
|
startOfNextWeek := date.StartOfNextWeek();
|
|
while( nextDate.IsInfinite() and
|
date < startOfNextWeek )
|
{
|
// Start with the first occurrence that *ends* after earliestStart_i, it can start before it.
|
// When using only the date, i.e. the start of the occurrence, an occurrence is sometimes missing at the beginning.
|
// Calculate endOfOccurrence, taking timezone and DSL into account.
|
endOfOccurrence := LibCal_Util::CalculateEndTime( timezone_i, date, startTimeOfDay_i, duration_i );
|
|
if( endOfOccurrence > earliestStart_i.DateTime( timezone_i ) )
|
{
|
dayOfWeek := date.DayOfWeek();
|
|
if( ( dayOfWeek = monday and onMonday_i ) or
|
( dayOfWeek = tuesday and onTuesday_i ) or
|
( dayOfWeek = wednesday and onWednesday_i ) or
|
( dayOfWeek = thursday and onThursday_i ) or
|
( dayOfWeek = friday and onFriday_i ) or
|
( dayOfWeek = saturday and onSaturday_i ) or
|
( dayOfWeek = sunday and onSunday_i ) )
|
{
|
nextDate := date;
|
}
|
}
|
|
date := date + 1;
|
}
|
|
return nextDate;
|
*]
|
}
|