admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
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
Method FindPeggingCircularity (
  output Process_MPs processes_o
) as String
{
  TextBody:
  [*
    // soh yee Aug-13-2014 (created)
    
    // Cycle examples:
    // Example 1:
    // Scrap + Prime -> Caster -> Ingot + Scrap
    // Example 2:
    // Scrap + Prime -> Caster -> Ingot
    // Ingot -> Furnace -> Molten + Scrap
    
    hascycle := false;
    value := '';
    searchdepth := GlobalParameters_MP::GetSearchDepthForPeggingCircular();
    
    for( i := 1; i <= searchdepth and not hascycle; i++ )
    {
      traverse( this, LastBasePeriod.StockingPointInPeriod.LeafPlanningPISPIPs, pispip, not hascycle )
      {
        hascycle := pispip.GetHasCycle( pispip, processes_o, 0, i );
    
        if( hascycle )
        {
          processes := selectvalues( processes_o, Elements, process, true, process.AsProcess_MP().Name() + ": " + process.Name() );
          value := Translations::MP_MacroPlan_FindPeggingCircularity_CircularityFound( i, pispip.ProductInStockingPoint_MP().Name(), processes.ToString( String::NewLine() ) )
        }
      }
    }
    
    // No cycle is found for all active pispip. Return a not found message
    if( not hascycle )
    {
      value := Translations::MP_MacroPlan_FindPeggingCircularity_CircularityNotFound( searchdepth );
    }
    
    return value;
  *]
}