Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsForOperationDependentDemandInputGroup ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  Description: 'Initialize constraints for dependent demands which is part of an input group' 
 | 
  TextBody: 
 | 
  [* 
 | 
    constddqtyname := typeof( MPOperationInputGroupDependentDemandQtyConstraint );  
 | 
    constuppername := typeof( MPOperationInputGroupUpperBoundConstraint ); 
 | 
    constlowername := typeof( MPOperationInputGroupLowerBoundConstraint ); 
 | 
    constrelativename := typeof( MPRelativeDurationConstraint ); 
 | 
     
 | 
    scalefactor_periodtask_constddqty := this.ScaleConstraintTerm( typeof( MPPTQtyVariable ), constddqtyname ); 
 | 
    scalefactor_periodtask_constupper := this.ScaleConstraintTerm( typeof( MPPTQtyVariable ), constuppername ); 
 | 
    scalefactor_operationinputgroupover_constupper := this.ScaleConstraintTerm( typeof( MPOperationInputGroupOverVariable ), constuppername ); 
 | 
    scalefactor_periodtask_constlower := this.ScaleConstraintTerm( typeof( MPPTQtyVariable ), constlowername ); 
 | 
    scalefactor_operationinputgroupunder_constlower := this.ScaleConstraintTerm( typeof( MPOperationInputGroupUnderVariable ), constlowername ); 
 | 
    scalefactor_partialoperationdemandqty_constddqty := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), constddqtyname ); 
 | 
    scalefactor_partialoperationdemandqty_constupper := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), constuppername ); 
 | 
    scalefactor_partialoperationdemandqty_constlower := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), constlowername ); 
 | 
    scalefactor_partialoperationdemandqty_constrelative := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), constrelativename ); 
 | 
    scalefactor_operationdemandqty_constddqty := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), constddqtyname ); 
 | 
    scalefactor_operationdemandqty_constupper := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), constuppername ); 
 | 
    scalefactor_operationdemandqty_constlower := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), constlowername ); 
 | 
     
 | 
    usingproportionalleadtimelogic := this.MacroPlan().GlobalParameters_MP().OperationLeadTimeLogic() = Translations::MP_GlobalParameter_LeadTimeLogic_Proportional() 
 | 
     
 | 
    if ( this.GetPeriodsFromPeriodTaskOperation() )  
 | 
    { 
 | 
      traverse( scope.GetOperationInputGroupInOptimizerRunConst(), Elements, group,  
 | 
                  not exists( group, OperationInput, input, 
 | 
                              not input.GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) ) ) //Filter group if one or more input products are excluded 
 | 
        { 
 | 
          operation := group.Operation();  
 | 
          traverse( operation, PeriodTaskOperationInScope, pto )  
 | 
          { 
 | 
            period := pto.UnitPeriod().Period_MP();  
 | 
            this.InitConstraintsForOperationDependentDemandInputGroup_Add( program,  
 | 
                                                                   runcontext,  
 | 
                                                                   scope,  
 | 
                                                                   group,  
 | 
                                                                   period,  
 | 
                                                                   pto,  
 | 
                                                                   scalefactor_periodtask_constddqty, 
 | 
                                                                   scalefactor_periodtask_constupper, 
 | 
                                                                   scalefactor_operationinputgroupover_constupper, 
 | 
                                                                   scalefactor_periodtask_constlower, 
 | 
                                                                   scalefactor_operationinputgroupunder_constlower, 
 | 
                                                                   scalefactor_partialoperationdemandqty_constddqty, 
 | 
                                                                   scalefactor_partialoperationdemandqty_constupper, 
 | 
                                                                   scalefactor_partialoperationdemandqty_constlower, 
 | 
                                                                   scalefactor_partialoperationdemandqty_constrelative, 
 | 
                                                                   scalefactor_operationdemandqty_constddqty, 
 | 
                                                                   scalefactor_operationdemandqty_constupper, 
 | 
                                                                   scalefactor_operationdemandqty_constlower, 
 | 
                                                                   usingproportionalleadtimelogic );  
 | 
          }  
 | 
        } 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      traverse( scope.GetOperationInputGroupInOptimizerRunConst(), Elements, group,  
 | 
                not exists( group, OperationInput, input, 
 | 
                            not input.GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) ) ) //Filter group if one or more input products are excluded 
 | 
      { 
 | 
        operation := group.Operation(); 
 | 
        periods := this.GetPeriodsForOperation( scope, operation ); 
 | 
       
 | 
        traverse( periods, Elements, period ) 
 | 
        { 
 | 
          this.InitConstraintsForOperationDependentDemandInputGroup_Add( program,  
 | 
                                                                         runcontext,  
 | 
                                                                         scope,  
 | 
                                                                         group,  
 | 
                                                                         period,  
 | 
                                                                         null(  PeriodTaskOperation ),  
 | 
                                                                         scalefactor_periodtask_constddqty, 
 | 
                                                                         scalefactor_periodtask_constupper, 
 | 
                                                                         scalefactor_operationinputgroupover_constupper, 
 | 
                                                                         scalefactor_periodtask_constlower, 
 | 
                                                                         scalefactor_operationinputgroupunder_constlower, 
 | 
                                                                         scalefactor_partialoperationdemandqty_constddqty, 
 | 
                                                                         scalefactor_partialoperationdemandqty_constupper, 
 | 
                                                                         scalefactor_partialoperationdemandqty_constlower, 
 | 
                                                                         scalefactor_partialoperationdemandqty_constrelative, 
 | 
                                                                         scalefactor_operationdemandqty_constddqty, 
 | 
                                                                         scalefactor_operationdemandqty_constupper, 
 | 
                                                                         scalefactor_operationdemandqty_constlower, 
 | 
                                                                         usingproportionalleadtimelogic );  
 | 
                                                                          
 | 
        } //end traverse period  
 | 
      } // end traverse group 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |