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
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
Quintiq file version 2.0
#parent: #root
Method RunSmartPlan (
  Boolean issmartplan,
  Boolean issmartplanforperiodtask,
  ProductInStockingPointInPeriodPlannings smartplanpispips,
  Boolean hastotalsupplyuser,
  Real totalsupplyuser,
  Boolean isupstreamsmartplan,
  Boolean ismiddleoutsmartplan,
  Boolean isonlyplanonestepupstream,
  Strategy strategy,
  Boolean isoverridemanualplanning,
  Period_MP periodstart,
  Period_MP periodend,
  Boolean isusingselectedunits,
  Units units,
  Process_MP process,
  Boolean reusestrategymacroplan
)
{
  Description: 'Save the Smart plan settings and run the optimizer'
  TextBody:
  [*
    // The first step in a middle-out smart plan is a downstream smart plan 
    
    isupstreamsmartplan := isupstreamsmartplan and not ismiddleoutsmartplan;
    
    // Update the smartplan information
    if( isoverridemanualplanning )
    {
      ProductInStockingPointInPeriod::ResetSupplies( smartplanpispips, true, false );
    }
    
    if( smartplanpispips.Size() = 1 )
    {
      // Set pispip hastotalsupplyuser and totalsupplyuser at the beginning of the smartplan run
      // Be aware that this.HasTotalSupplyUser is set to true on OptimizerPostProcesssing method for the future optimizer runs
      // If this is an upstream smart plan, set the total required user supply
      // Otherwise set the total available user supply.
      pispip := smartplanpispips.Element( 0 );
      if( isupstreamsmartplan )
      {
        pispip.UpdateTotalSupplyUser( hastotalsupplyuser, totalsupplyuser );
      }
      else
      {
        pispip.UpdateTotalAvailableSupplyUser( hastotalsupplyuser, totalsupplyuser );
      }
    }
    
    
    ispostprocessing := false;
    forcenoautoscaling := false; 
    
    this.RunOptimizer( issmartplan, 
                       issmartplanforperiodtask, 
                       hastotalsupplyuser, 
                       totalsupplyuser, 
                       smartplanpispips,
                       isupstreamsmartplan, 
                       ismiddleoutsmartplan, 
                       isonlyplanonestepupstream,
                       ispostprocessing,
                       forcenoautoscaling, 
                       strategy,
                       isoverridemanualplanning,
                       periodstart, periodend,
                       false, // isinventoryoptimizationrun
                       isusingselectedunits,
                       units,
                       process, 
                       this.OptimizerPuzzleWorld() );
  *]
}