Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetTargetPeriod ( 
 | 
  const OutgoingShelfLifeDay oslday 
 | 
) const as const Period_MP 
 | 
{ 
 | 
  Description: 'if a trip leaves from this pispip with lead time oslday.ShelfLifeDays what period does it arrive - this is what we compute' 
 | 
  TextBody: 
 | 
  [* 
 | 
    period := this.Period_MP();  
 | 
     
 | 
    if ( oslday.ShelfLifeDays() > 0 )  
 | 
    { 
 | 
      arbitrarypitdeparting := select( this, Demand_MP.astype( DependentDemand ).ProductInTrip, pit, pit.Trip().GetShelfLifeAgeToAdd() = oslday.ShelfLifeDays() ); 
 | 
      if ( not isnull( arbitrarypitdeparting ) )  
 | 
      { 
 | 
        period := guard( arbitrarypitdeparting.Trip().ArrivalUnitPeriod().Period_MP(), constnull( Period_MP ) ); 
 | 
         
 | 
        // special case with end period lead time logic. Example: A trip with arrival date time 4 Jan 0:00, will have arrival period start end = (Jan 3 0.00 - Jan 4 0.00). 
 | 
        // in this case we should take the next period.  
 | 
        if ( not isnull( period )  
 | 
             and this.ProductInStockingPoint_MP().Product_MP().MacroPlan().GlobalParameters_MP().LaneLeadTimeLogic() = Translations::MP_GlobalParameter_LeadTimeLogic_From_End_Period()   
 | 
             and guard( arbitrarypitdeparting.Trip().Departure() = arbitrarypitdeparting.Trip().DepartureUnitPeriod().Start(), false ) 
 | 
              )  
 | 
        { 
 | 
          period := period.NextPeriod();  
 | 
        }  
 | 
         
 | 
      } 
 | 
    } 
 | 
    return period; 
 | 
  *] 
 | 
} 
 |