Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsGoalsForDriverStaffing ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  Description: 'Init constraints goals for account depends on staffing' 
 | 
  TextBody: 
 | 
  [* 
 | 
    if( runcontext.UseShiftOptimization() ) 
 | 
    { 
 | 
      constname := typeof( MPDriverStaffingConstraint ); 
 | 
       
 | 
      scalefactor_spisused_spisused := this.ScaleConstraintTerm( typeof( MPShiftPatternIsUsedVariable ), constname ); 
 | 
      scalefactor_staffing_spisused := this.ScaleConstraintTerm( typeof( MPDriverStaffingVariable ), constname ); 
 | 
       
 | 
      driver := select( this, MacroPlan.AccountCostDriver, driver, driver.Name() = Translations::MP_AccountAssignmentCostDriverStaffing() ); 
 | 
      traverse( scope.GetAccountsInOptimizerRunConst(), Elements, account, account.HasStaffingAssignment() ) 
 | 
      { 
 | 
        // Staffing constraint UoM : Monetary 
 | 
        staffingconstr := program.DriverStaffingConstraints().New( account, driver ); 
 | 
        staffingconstr.Sense( "=" ); 
 | 
        staffingconstr.RHSValue( 0.0 );  
 | 
         
 | 
        staffingconstr.NewTerm( 1.0 * scalefactor_staffing_spisused, program.DriverStaffingVariables().Get( account, driver ) ); 
 | 
        traverse( account, AccountAssignment, aa, aa.AccountCostDriver() = driver and aa.AccountCost( relsize ) > 0 ) 
 | 
        { 
 | 
          traverse( aa, astype( UnitAccount ).Unit.PlanningUnitPeriod.astype( UnitPeriodTimeBase ), up, up.IsInScopeForShiftOptimization( scope ) ) 
 | 
          { 
 | 
            traverse( this.MacroPlan(), ShiftPattern, sp ) 
 | 
            { 
 | 
              cost := up.GetStaffingBaseCostForShiftPattern( aa, null( AccountCost ), sp ); 
 | 
              spisusedvar := program.ShiftPatternIsUsedVariables().Find( sp, up ); 
 | 
               
 | 
              if( not isnull( spisusedvar ) ) 
 | 
              { 
 | 
                staffingconstr.NewTerm( -cost * scalefactor_spisused_spisused, spisusedvar ); 
 | 
              } 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |