Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetHasValidPostponement ( 
 | 
  output Strings feedback_o, 
 | 
  output Strings sanitycheckfeedback_o 
 | 
) declarative remote as Boolean 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Indicate if the poseponement is valid 
 | 
    value := true; 
 | 
     
 | 
    message := ''; 
 | 
    psEnd := guard( this.PostponementSpecification().End().Date(), Date::MinDate() ); 
 | 
     
 | 
    // If this SalesDemandInPeriod has PostponedSalesDemand and the EndDate is out of the valid postponement period 
 | 
    if( this.HasPostponedSalesDemand() 
 | 
        and this.EndDate() > psEnd ) 
 | 
    { 
 | 
      value := false; 
 | 
      // Get the effective PostponementSpecification 
 | 
      postponementspec := guard( this.MasterSalesDemand().SalesSegment_MP().EffectivePostponementSpecification(), null( PostponementSpecification ) ); 
 | 
      // Generate PostponementSpecification's horizon in string, e.g. 3 Months, 1 Day, etc. 
 | 
      displayEnd := guard( [String] postponementspec.HorizonNrOfTimeUnit() 
 | 
                           + " " 
 | 
                           + postponementspec.HorizonTimeUnit() 
 | 
                           + ifexpr( postponementspec.HorizonNrOfTimeUnit() > 1, 's', '' ), "" ); 
 | 
             
 | 
      message := Translations::MP_BaseSalesDemandInPeriod_GetHasValidDemandManagement_OverPostponementHorizon( displayEnd ); 
 | 
    } 
 | 
     
 | 
    // If precondition is violated, insert the feedback message into feedback_o and sanitycheckfeedback_o 
 | 
    if( not isnull( feedback_o ) 
 | 
        and not value ) 
 | 
    {  
 | 
      instance := Translations::MP_BaseSalesDemandInPeriod_Instance( this.SalesSegmentName(), this.StartDate() ); 
 | 
      feedback_o.Add( SanityCheckMessage::GetFormattedMessage( instance, message ) ); 
 | 
      sanitycheckfeedback_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryPlanningIssue() ); 
 | 
    } 
 | 
     
 | 
    return value; 
 | 
  *] 
 | 
} 
 |