Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod GetOperationDependentDemandPeriods ( 
 | 
  const Period_MP ptperiod, 
 | 
  const Process_MP process, 
 | 
  constcontent output owning Period_MPs periods_o, 
 | 
  Boolean getfromperiodtask 
 | 
) const 
 | 
{ 
 | 
  Description: 'Return the periods of dependent demand of period task.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    macroplan := ptperiod.MacroPlan();  
 | 
     
 | 
    if ( getfromperiodtask )  
 | 
    { 
 | 
      pto := select(  process.astype( Operation ), PeriodTaskOperation, pto, pto.UnitPeriod().Period_MP() = ptperiod );  
 | 
      traverse( pto, DependentDemand, dd )  
 | 
      { 
 | 
        periods_o.Add( dd.ProductInStockingPointInPeriodPlanningLeaf().Period_MP() );  
 | 
      } 
 | 
      periods_o := periods_o.Unique();  
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      if ( process.HasLeadTime() )  
 | 
      { 
 | 
        startofdd := Process_MP::GetDependentDemandEarliestStart( ptperiod, process.LeadTime(), macroplan.GlobalParameters_MP(), process ); 
 | 
        endofdd := Process_MP::GetDependentDemandEnd( startofdd, ptperiod, process ); 
 | 
       
 | 
        periodstart := ptperiod;  
 | 
        done := false; 
 | 
        hitinperiod := false;   
 | 
       
 | 
        while( not done and periodstart.End() >= startofdd ) // once end < start we definitable know we will not hit periods with overlap anymore 
 | 
        { 
 | 
          if ( periodstart.IsInPeriod( startofdd, endofdd ) ) 
 | 
          { 
 | 
            hitinperiod := true; // once we go out of period again we know we will be done    
 | 
            periods_o.Add( periodstart );  
 | 
          } 
 | 
          else 
 | 
          { 
 | 
            done := hitinperiod 
 | 
          } 
 | 
          periodstart := periodstart.PreviousPlanningPeriod();  
 | 
          done := done or isnull( periodstart );  
 | 
        } 
 | 
      } 
 | 
      else // no lead time process 
 | 
      { 
 | 
        periods_o.Add( ptperiod );  
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |