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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Quintiq file version 2.0
#parent: #root
StaticMethod ValidateInput (
  String name,
  ScenarioManager sm,
  Strategy strategy,
  Real massscalingfactor,
  Real monetaryscalingfactor,
  Real timescalingfactor,
  Real timeaccountscalingfactor,
  Real inventoryholdingscalingfactor,
  Number defaultnumberofperiodsavgdemand,
  Number numberofperiodssmartplan,
  Boolean isslidinghorizon,
  Number numberofperiodsinwindow,
  Number numberofperiodsperslide,
  Boolean ismetaoptimizer,
  Boolean isfirstleveloverride,
  Boolean islastleveloverride,
  Number firstfocuslevel,
  Number lastfocuslevel,
  Number maxtimealliterations,
  Number maxnumberelecampaigncombi,
  Boolean iscollapse,
  Real collapselevelweight
) declarative remote as String
{
  Description: 'Called by designer'
  TextBody:
  [*
    // Validate input for Strategy
    feedback := '';
    
    // Check if name is entered
    if( name = '' )
    {
      feedback := Translations::Strategy_ValidateInput_IsNameEmpty();
    }
    // Check if the name is unique
    else if( exists( sm, Strategy, s,
                     s <> strategy and s.Name() = name ) )
    {
      feedback := Translations::Strategy_ValidateInput_IsNameExists( name );
    }
    // Check if mass scaling factor not less than zero
    else if( massscalingfactor <= 0.0 )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidMassScalingFactor();
    }
    // Check if monetory scaling factor not less than zero
    else if( monetaryscalingfactor <= 0.0 )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidMonetaryScalingFactor();
    }
    // Check if time scaling factor not less than zero
    else if( timescalingfactor <= 0.0 )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidTimeScalingFactor();
    }
    // Check if time account scaling factor not less than zero
    else if( timeaccountscalingfactor <= 0.0 )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidTimeAccountScalingFactor();
    }
    // Check if inventory holding scaling factor not less than zero
    else if( inventoryholdingscalingfactor <= 0.0 )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidInventoryHoldingScalingFactor();
    }
    //default number of periods average demand
    else if( defaultnumberofperiodsavgdemand <= 0 )
    {
      feedback := Translations::MP_GlobalParameters_MP_ValidateInput_InvalidNumberOfPeriodsForAvgSD( defaultnumberofperiodsavgdemand );
    }
    else if( numberofperiodssmartplan <= 0 )
    {
      feedback := Translations::MP_GlobalParameters_MP_ValidateInput_InsufficientPeriods( numberofperiodssmartplan );
    }
    else if( isslidinghorizon and numberofperiodsinwindow <= 0 )
    {
      feedback := Translations::MP_GlobalParameters_MP_ValidateInput_InsufficientPeriodsInWindow( numberofperiodsinwindow );
    }
    else if( isslidinghorizon and numberofperiodsperslide <= 0 )
    {
      feedback := Translations::MP_GlobalParameters_MP_ValidateInput_InsufficientPeriodsPerSlide( numberofperiodsperslide );
    }
    else if( isslidinghorizon and numberofperiodsinwindow < numberofperiodsperslide )
    {
      feedback := Translations::MP_GlobalParameters_MP_ValidateInput_TooManyPeriodsInSlide( numberofperiodsinwindow, numberofperiodsperslide );
    }
    // Check MetaOptimizer inputs
    
    // Check if first level focus is not less than 0
    if( ismetaoptimizer and isfirstleveloverride and firstfocuslevel < 0.0 )
    {
      feedback := ifexpr( firstfocuslevel.IsFinite(),
                          Translations::Strategy_ValidateInput_InvalidFirstFocusLevel( firstfocuslevel ),
                          Translations::Strategy_ValidateInput_IsEmptyInput( Translations::Strategy_Input_FirstFocusLevel() ) );
    }
    
    // Check if first level focus is not less than 1
    else if( ismetaoptimizer and islastleveloverride and lastfocuslevel <= 0.0 )
    {
      feedback := ifexpr( lastfocuslevel.IsFinite(),
                          Translations::Strategy_ValidateInput_InvalidLastFocusLevel( lastfocuslevel ),
                          Translations::Strategy_ValidateInput_IsEmptyInput( Translations::Strategy_Input_LastFocusLevel() ) );
    }
    
    // Check if first level focus > last level focus
    else if( ismetaoptimizer and isfirstleveloverride and islastleveloverride and firstfocuslevel > lastfocuslevel )
    {
      feedback := Translations::Strategy_ValidateInput_InvalidLastFocusLevelGreaterThanFirstFocusLevel( firstfocuslevel, lastfocuslevel );
    }
    
    // Check if maximum time for all iterations is not less than 1
    else if( ismetaoptimizer and maxtimealliterations <= 0.0 )
    {
      feedback := ifexpr( maxtimealliterations.IsFinite(),
                          Translations::Strategy_ValidateInput_InvalidMaximumTimeAllIterations( maxtimealliterations ),
                          Translations::Strategy_ValidateInput_IsEmptyInput( Translations::Strategy_Input_MaximumTimeAllIterations() ) );
    }
    else if ( ismetaoptimizer and iscollapse and collapselevelweight <= 0.0 ) 
    {
      feedback := ifexpr( collapselevelweight.IsFinite(), 
                          Translations::Strategy_ValidateInput_InvalidCollapseLevelWeight( collapselevelweight ), 
                          Translations::Strategy_ValidateInput_IsEmptyInput( Translations::Strategy_Input_CollapseWeight() ) ); 
                           
    }
    
    // Check if maximum number of elements in campaign combi is not less than 1
    else if( maxnumberelecampaigncombi <= 0.0 )
    {
      feedback := ifexpr( maxnumberelecampaigncombi.IsFinite(),
                          Translations::Strategy_ValidateInput_InvalidMaximumNumberElementsCampaignCombi( maxnumberelecampaigncombi ),
                          Translations::Strategy_ValidateInput_IsEmptyInput( Translations::Strategy_Input_MaximumNumberOfElementInCampaignCombi() ) );
    }
    
    return feedback;
  *]
}