| 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' } | 
| } |