yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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' }
}