Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Function CalcPreviousPeriodLastShiftDay 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    value := 0; 
 | 
    // Skip the calculation if its null 
 | 
    if( not isnull( this.Period_MP() ) ) 
 | 
    { 
 | 
      value := maxvalue( this.StartDate() - this.Period_MP().Start().StartOfWeek().Date(), 0 ); 
 | 
      periodduration := this.Period_MP().Duration().Days(); 
 | 
      // Check if there is ShiftPattern 
 | 
      if( not isnull( this.ShiftPattern() ) ) 
 | 
      { 
 | 
        nrofdays := this.ShiftPattern().NumberOfDays(); 
 | 
        // Check if have pervious and its belong to same ShiftPattern 
 | 
        if( this.HasPreviousAndBelongToSameShiftPattern() ) 
 | 
        { 
 | 
          lastshiftday := this.Previous().astype( UnitPeriodTransportTime ).PreviousPeriodLastShiftDay(); 
 | 
          // Check if the last ShiftDay is equal to nr of days and the sum with period duration is lesser or equal to nr of day 
 | 
          if( not lastshiftday = nrofdays and 
 | 
              lastshiftday + periodduration <= nrofdays ) 
 | 
          { 
 | 
            value := periodduration + lastshiftday; 
 | 
          } 
 | 
          // Check if the last shift day + the period duration is greater than the nr of days 
 | 
          if( lastshiftday + periodduration > nrofdays ) 
 | 
          { 
 | 
            value := periodduration - ( nrofdays - lastshiftday ) 
 | 
          } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
          value := periodduration + value; 
 | 
        } 
 | 
        // If the pre period last shift days greater than nr of days 
 | 
        if( value > nrofdays ) 
 | 
        { 
 | 
          value := value mod nrofdays 
 | 
          if( value = 0 ) 
 | 
          { 
 | 
            value := nrofdays; 
 | 
          } 
 | 
        } 
 | 
        value :=  minvalue( nrofdays, value ); 
 | 
      } 
 | 
    } 
 | 
    this.PreviousPeriodLastShiftDay( value ); 
 | 
  *] 
 | 
} 
 |