yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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;
  *]
}