Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsForOperationDependentDemandInPeriod ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  Description: 
 | 
  [* 
 | 
    A constraint to calculate the dependent demand quantity of an input per bucket. 
 | 
    Specially for dependent demand belonging to operation with pre-processing duration. 
 | 
  *] 
 | 
  TextBody: 
 | 
  [* 
 | 
    // dependent demand quantity per bucket = sum of all dependent demands that fall at that bucket 
 | 
    // Specially for dependent demand belonging to operation with pre-processing duration. 
 | 
     
 | 
    constddperiodname := typeof( MPOperationDependentDemandPeriodQtyConstraint ); 
 | 
     
 | 
    scalefactor_operationdemandqty_constddperiod := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), constddperiodname ); 
 | 
    scalefactor_partialoperationdemandqty_constddperiod := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), constddperiodname ); 
 | 
     
 | 
    scalefactor_rhs_constddperiod := this.ScaleConstraintRHS( constddperiodname, 1.0 ); 
 | 
     
 | 
    traverse( scope.GetOperationInOptimizerRunConst(), Elements, operation, operation.HasLeadTime() ) 
 | 
    { 
 | 
      // Only select the input where the product is included. 
 | 
      traverse( operation, OperationInput, input, input.HasRegularProductforOptimizer() or input.GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) ) 
 | 
      { 
 | 
        if ( this.GetPeriodsFromPeriodTaskOperation() )  
 | 
        { 
 | 
          traverse( operation, PeriodTaskOperationInScope, pto ) // these are the period GetPeriodsForOperation( scope, operation ) would supple 
 | 
          { 
 | 
            ptperiod := pto.UnitPeriod().Period_MP();  
 | 
             
 | 
            traverse( pto, DependentDemand.ProductInStockingPointInPeriodPlanningLeaf.Period_MP, ddperiod )  
 | 
            { 
 | 
              this.InitConstraintsForOperationDependentDemandInPeriod_AddConstraint( program, 
 | 
                                                                                     ptperiod,  
 | 
                                                                                     ddperiod,  
 | 
                                                                                     input,  
 | 
                                                                                     scalefactor_operationdemandqty_constddperiod,  
 | 
                                                                                     scalefactor_partialoperationdemandqty_constddperiod,  
 | 
                                                                                     scalefactor_rhs_constddperiod );  
 | 
            }     
 | 
          } 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
          periods := this.GetPeriodsForOperation( scope, operation ); 
 | 
       
 | 
          // Need to select all relevant periods. These are the periods in which the operation can run and their dependent demand periods 
 | 
          traverse( periods, Elements, ptperiod ) 
 | 
          { 
 | 
            ddperiods := construct( Period_MPs, constcontent ); 
 | 
            CapacityPlanningSuboptimizer::GetOperationDependentDemandPeriods( ptperiod, operation, &ddperiods, this.GetPeriodsFromPeriodTaskOperation() ); 
 | 
       
 | 
            traverse( ddperiods, Elements, ddperiod ) 
 | 
            {      
 | 
              this.InitConstraintsForOperationDependentDemandInPeriod_AddConstraint( program, 
 | 
                                                                                   ptperiod,  
 | 
                                                                                   ddperiod ,  
 | 
                                                                                   input,  
 | 
                                                                                   scalefactor_operationdemandqty_constddperiod,  
 | 
                                                                                   scalefactor_partialoperationdemandqty_constddperiod,  
 | 
                                                                                   scalefactor_rhs_constddperiod );  
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |