| Quintiq file version 2.0 | 
| #parent: #root | 
| Method GetHasFulfilledTarget ( | 
|   output Strings feedback_o, | 
|   output Strings sanitycheckfeedbacks_o | 
| ) declarative remote as Boolean | 
| { | 
|   Description: 'Returns true if the planned percentage reaches the target perpcentage' | 
|   TextBody: | 
|   [* | 
|     // TYG2 Dec-01-2016 (created) | 
|     gp := this.MacroPlan().GlobalParameters_MP(); | 
|     isvalid := true; | 
|      | 
|     if( this.IsEnabled() and isnull( this.Product_MP() ) ) | 
|     { | 
|       isvalid := ( this.PlannedPercentage() >= this.TargetPercentage() | 
|                  or gp.GetIsBalanceWithinTolerance( this.PlannedPercentage(), this.TargetPercentage() ) ); | 
|     } | 
|      | 
|     if( not isnull( feedback_o ) and not isvalid ) | 
|     { | 
|       gp := this.MacroPlan().GlobalParameters_MP(); | 
|       objectType := Translations::MP_GlobalParameters_KPIFulfillmentTargetName(); | 
|       instance := Translations::MP_ServiceLevel_Instance( objectType, MacroPlan::GetSubstituteName( this.Name() ) ); | 
|       message := Translations::MP_ServiceLevel_ViolateHasFulfilledTarget( this, gp.NumberOfDecimals() ); | 
|       feedback_o.Add( SanityCheckMessage::GetFormattedMessage( instance, message ) ); | 
|       sanitycheckfeedbacks_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryPlanningWarning() );    | 
|     } | 
|      | 
|     return isvalid; | 
|   *] | 
| } |