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
  | Quintiq file version 2.0 
 |  #parent: #root 
 |  Method CreateTestData 
 |  { 
 |    Description: 'Create test data in MacroPlan and 2 new optimizer strategies in ScenarioManager' 
 |    TextBody: 
 |    [* 
 |      keys := DatasetController::Find( DatasetFindOptions::Construct( this.GetUTFDatasetname() ) ); 
 |      if ( keys.Size() = 0 )      
 |      { 
 |         wait := stream[Void]::Wait( Duration::Seconds( 15 ) ); 
 |         this->After( wait )->CreateTestData() 
 |      } 
 |      else 
 |      {                              
 |       opt := DatasetFindOptions::Construct( this.GetUTFDatasetname() );                                
 |       mp := MDSMacroPlan::Find( opt );   
 |       mp->( macroplan ) 
 |       { 
 |          macroplan.PeriodSpecification_MP( relflush ); 
 |          uom := macroplan.FindUnitOfMeasure( "Ton" ); 
 |          currency := macroplan.FindCurrency( "EUR" ); 
 |          sop := macroplan.StartOfPlanning().Date(); 
 |          sopyear := sop.Year(); 
 |          unitname := "Production"; 
 |          spname := "SP"; 
 |          isfromdb := false; 
 |          jan5Start := Date::Construct( sopyear, 1, 5 ); 
 |          jan8Start := Date::Construct( sopyear, 1, 8 ); 
 |          priority := "Normal"; 
 |          salessegmentname := "All sales segment"; 
 |           
 |          gp := macroplan.GlobalParameters_MP(); 
 |          gp.IsUsableIfExpiredWithinPeriod( true ); 
 |          gp.IsUsableIfMatureWithinPeriod( true ); 
 |           
 |          PeriodSpecification_MP::Create( "wk", macroplan, "Week", 1, macroplan.StartOfPlanning(), 2, 6, false, true, isfromdb );  
 |          //Create 2 Products 
 |          outputA := Product_MP::Create( macroplan, "Output A","","Output A", uom.Name(), false, "", true, 7.0, false, 0.0, false, false, false, isfromdb ); 
 |          outputB := Product_MP::Create( macroplan, "Output B","","Output B", uom.Name(), false, "", true, 7.0, false, 0.0, false, false, false, isfromdb ); 
 |          // Create entities ( Unit and Stockingpoint ) 
 |          unit := Unit::Create( unitname, macroplan, unitname , uom, null( Unit ), "Infinite", "", null( SupplyChainView ), 0,0, isfromdb ); 
 |          sp := StockingPoint_MP::Create( spname, macroplan,unit, spname, "ORANGE SP", uom, currency, false, Date::MinDate(), Date::MaxDate(),null( Group ), "", "", "", "", isfromdb ); 
 |          // Create stockingpoint capacity 
 |          sp.SetCapacityFromPeriodOnwards( Date::Construct( sopyear -1, 12, 18 ), 100.0 ); 
 |           
 |          // Create ActualProductInStockingPointInPeriod 
 |          ActualProductInStockingPointInPeriod::Create( macroplan, outputB, sp, Date::Construct( sopyear -1, 12, 26 ), Date::Construct( sopyear -1, 12, 25 ), 100.0, "", isfromdb ); 
 |          // Create routing, routingstep, operation and operation cost 
 |          routing := Routing::Create( macroplan, unitname, unitname, Date::MinDate(), Date::MaxDate(), true, isfromdb ) 
 |          units := construct( Units ); 
 |          units.Add( unit); 
 |          operations := routing.CreateRoutingStepAndAddUnits( units ); 
 |          operation := operations.Element( 0 ); 
 |          account := select(  macroplan, Account_MP, acc, acc.Name() = 'Operating cost', true ); 
 |          OperationCost::Create( "1", operation, account, "Volume", sop, "Day", 1, 10.0, isfromdb );  
 |          OperationBOM::Create( operation, outputA.ID(), spname, false, 1, false, 1.0, 1.0, 1.0, isfromdb, false ); 
 |          OperationBOM::Create( operation, outputB.ID(), spname, false, 1, false, 1.0, 1.0, 1.0, isfromdb, false );  
 |          // Create 3 Forecasts 
 |          Forecast::Create( outputA, sp, "1", jan5Start, jan5Start + 1, 100.0, 1000.0, priority, salessegmentname,currency.ID(), uom.Name(),0.0, false, isfromdb ); 
 |          Forecast::Create( outputA, sp, "2", jan8Start, jan8Start + 7, 100.0, 1.0, priority, salessegmentname,currency.ID(), uom.Name(),0.0, false, isfromdb ); 
 |          Forecast::Create( outputB, sp, "3", sop, jan8Start, 100.0, 1.0, priority, salessegmentname,currency.ID(), uom.Name(),0.0, false, isfromdb ); 
 |           
 |          // Create 2 new strategies 
 |          scenariomanager := this.GetScenarioManagerStream() 
 |          scenariomanager->( sm ) 
 |          { 
 |           // Copy from default strategy 
 |            strategy1 := this->CopyStategy( 'Default', sm, "Early expired 1" ) 
 |            strategy := strategy1->( strategy1) 
 |            { 
 |              // Deactivate all the goals 
 |              traverse( strategy1, KPIWeight.KPI, kpi ) 
 |              { 
 |                this.DeactivateGoal( strategy1, kpi.Name() ); 
 |              } 
 |              // Only activate the following goals 
 |              this.ActivateGoal( strategy1, "Stocking point capacity", 1, 1.0 ); 
 |              this.ActivateGoal( strategy1, "Unit capacity", 1, 1.0 ); 
 |              this.ActivateGoal( strategy1, "Fulfillment", 2, 1.0 ); 
 |              this.ActivateGoal( strategy1, "Inventory holding cost", 3, 1.0 ); 
 |              this.ActivateGoal( strategy1, "Operating cost", 3, 1.0 ); 
 |              this.ActivateGoal( strategy1, "Sales", 3, 1.0 ); 
 |              return strategy1; 
 |              
 |            } 
 |           strategy->( strategy1) 
 |           { 
 |              // Copy strategy Early expired 1 into Early expired 2 
 |              strategy2 := this.CopyStategy( "Early expired 1", sm, "Early expired 2" ); 
 |              // Activate the following goal on top of goals from Early expired 1 
 |              this.ActivateGoal( strategy2, "Total expired quantity", 1, 1.0 ); 
 |           } 
 |         } 
 |       }  
 |      } 
 |    *] 
 |    InterfaceProperties { Accessibility: 'Module' } 
 |  } 
 |  
  |