haorenhui
2023-10-30 6d6cc10d9e8e242661da7fd655dec155a09d676c
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
Quintiq file version 2.0
#parent: #root
StaticMethod CheckNoGap (
  const LibOpt_Scope scope
) const
{
  TextBody:
  [*
    if ( scope.Run().OptimizationConst().astype( Optimization ).DebugMode() ) 
    {
      traverse( scope.GetProductInStockingPointInOptimizerRunConst(), Elements, pisp, pisp.IsLeaf() ) 
      {
        current := pisp.FirstPlanningPISPIP();
        state := 0;  
        while(  not isnull( current ) ) 
        {
          if ( scope.Contains( current.PISPIPInOptimizerRun() ) and state = 0 ) 
          {
            state := 1; // in scope block started
            assert( current = pisp.EarliestPISPIPInScope(), 'wrong earliest pispip for ', pisp.Name() );  
          }
          if ( not scope.Contains( current.PISPIPInOptimizerRun() )  and state = 1 ) 
          {
            state := 2; // in scope block exited - anything encounter in scope now -> error 
            if ( not current.PreviousPlanningPISPIP() = pisp.LatestPISPIPInScope() ) 
            {
              traverse( pisp, ProductInStockingPointInPeriodPlanning, pispip ) 
              {
                debuginfo(  pispip.Start(), scope.Contains( pispip.PISPIPInOptimizerRun() ), pispip.DefinitionName() ); 
              }
            }
            assert(  current.PreviousPlanningPISPIP() = pisp.LatestPISPIPInScope(), 'wrong latest pispip for ', pisp.Name() ); 
          }
          if ( scope.Contains( current.PISPIPInOptimizerRun() ) and state = 2 ) 
          {
            error( 'failed no gaps property for ', pisp.Name(), current.Start() ); 
          }
          current := current.NextPlanningPISPIP(); 
        }
      }
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
}