| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitConstraintsForUnitPeriodCapacities ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   Boolean enableminconst, | 
|   Real totalmincapacity, | 
|   Real totalmaxcapacity, | 
|   const RunContextForCapacityPlanning runcontext, | 
|   const LibOpt_Scope scope, | 
|   const CapacityPlanningSuboptimizer subopt | 
| ) const | 
| { | 
|   Description: 'The constraint to limit the production of period tasks to be within defined capacity' | 
|   TextBody: | 
|   [* | 
|     // defining minimum capacities for unit, Sum of PT Qty + not met >= UP.MinCapacity | 
|     // minconstup constraint UoM: Unit | 
|     minconstup := null(  MPConstraint ); | 
|     if( this.Unit().HasCapacityTypeTimeBase() ) | 
|     { | 
|       minconstup := program.MinUnitCapacityTimeConstraints().New( this ); | 
|     } | 
|     else | 
|     { | 
|       minconstup := program.MinUnitCapacityQtyConstraints().New( this ); | 
|     } | 
|      | 
|     minconstup.Sense( '>=' ); | 
|      | 
|     // RHS UoM: Unit | 
|     minconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( minconstup ), totalmincapacity ) ); | 
|     // Term UoM: Unit | 
|     var := this.GetCapacityNotMetVariable( program );  | 
|      | 
|     minconstup.NewTerm( 1.0 * subopt.ScaleConstraintTerm( typeofexpression(  var ), typeofexpression( minconstup ) ) | 
|                         , var ); | 
|     minconstup.Enabled( enableminconst ) | 
|      | 
|     // defining maximum capacities for unit, Sum of PT Qty <= UP.AvailableCapacity | 
|     // maxconstup constraint UoM: Unit | 
|     maxconstup := null( MPConstraint ); | 
|     if( this.Unit().HasCapacityTypeTimeBase() ) | 
|     { | 
|       maxconstup := program.MaxUnitCapacityTimeConstraints().New( this ); | 
|     } | 
|     else | 
|     { | 
|       maxconstup := program.MaxUnitCapacityQtyConstraints().New( this ); | 
|     } | 
|      | 
|     // When using shift optimization, total capacity depends on the shift patterns selected by the optimizer. | 
|     if( this.IsInScopeForShiftOptimization( scope ) and runcontext.UseShiftOptimization() ){ | 
|       maxconstup.RHSValue( 0 ); | 
|        | 
|       unitperiod := this.astype( UnitPeriodTimeBase ); | 
|       unitperiod.AddTermsForMaximumCapacity( program, subopt, maxconstup, runcontext ); | 
|     } | 
|     else | 
|     { | 
|       // RHS UoM: Unit | 
|       maxconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( maxconstup ), totalmaxcapacity ) ); | 
|     } | 
|      | 
|     maxconstup.Sense( '<=' ); | 
|     maxconstup.Enabled( not this.IsPlannedInfinite() ); | 
|      | 
|     this.InitConstraintsForCapacityUsage( program, minconstup, maxconstup, runcontext, scope, subopt ); | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |