chenqinghong
2024-05-07 3ec06a830367465068963156dcc1d8e522571c13
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
58
Quintiq file version 2.0
#parent: #root
Method GetHasValidContinuousLevels (
  output String feedback_o,
  Boolean iswebapp
) declarative remote as Boolean
{
  Description: 'Method to check whether the KPIWeight levels are continuous and start from level 1.'
  TextBody:
  [*
    
    isvalid := true;
    
    uniquevalues := selectuniquevalues( this, KPIWeight, weight, weight.Level() > 0, weight.Level() );
    
    sortedvalues := selectsortedset( uniquevalues, Elements, level, true, level );
    
    if( uniquevalues.Size() > 0 )   // There is at least a goal activated. We allow the optimizer run without any goal too.
    {
      delimiter := ", ";
      maxlevel := sortedvalues.Element( sortedvalues.Size() - 1 );
      isvalid := sortedvalues.Size() = maxlevel
      newlevels := construct( Strings );
      
      if( not isvalid )
      {   
        levels := sortedvalues.ToString( delimiter );
        
        if( iswebapp )
        {
          //web client level start from Constraint, priority 1,2..     
          traverse( levels.Tokenize( delimiter ), Elements, e )
          {
            i := [Number]e;
            
            if ( i >1 ) 
            {
              i := i-1;  
              newlevels.Add( [String]i );
            }
            else
            {
              newlevels.Add( Translations::ScenarioManager_StrategyLevel_Constraints() );
            }
          }
          levels := newlevels.ToString( delimiter );
         
          feedback_o := Translations::Strategy_ValidateInput_IsLevelContinuousWebApp( levels );
        }
        else
        {
          feedback_o := Translations::Strategy_ValidateInput_IsLevelContinuous( levels );
        }
      }
    }
    return isvalid;
  *]
}