Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod ValidateInput ( 
 | 
  output String feedback_o, 
 | 
  output String sanitycheckcategory_o, 
 | 
  MacroPlan owner, 
 | 
  ServiceLevelBase servicelevel, 
 | 
  String name, 
 | 
  Product_MP product, 
 | 
  StockingPoint_MP stockingpoint, 
 | 
  Real targetpercentage, 
 | 
  Date start, 
 | 
  Date end, 
 | 
  String objecttype 
 | 
) declarative remote as Boolean 
 | 
{ 
 | 
  Description: 'Validate inputs for service level.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    feedback_o := '' 
 | 
    sanitycheckcategory_o := ''; 
 | 
     
 | 
    // Check if name is entered 
 | 
    if( name = '' ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_ServiceLevel_ValidateInput_IsInvalidName( objecttype ); 
 | 
      sanitycheckcategory_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Check if target percentage is within the allowed range 
 | 
    else if( targetpercentage <= 50 or targetpercentage >= 100 ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_ServiceLevel_ValidateInput_IsInvalidTargetPercentage( targetpercentage ); 
 | 
      sanitycheckcategory_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Check if start and end combination is valid 
 | 
    else if( start > end ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_ServiceLevel_ValidateInput_IsInvalidStart( objecttype ); 
 | 
      sanitycheckcategory_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Check if the new values for service level's safety stock is overlapping with any existing service level 
 | 
    else if( exists( owner, ServiceLevel, sl, 
 | 
                     sl <> servicelevel 
 | 
                     and sl.Product_MP() = product 
 | 
                     and sl.StockingPoint_MP() = stockingpoint 
 | 
                     and ( start < sl.End() and end > sl.Start() ) ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_ServiceLevel_ValidateInput_IsOverlap( objecttype ); 
 | 
      sanitycheckcategory_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Check if product and stocking point is provided 
 | 
    else if( isnull( product ) and isnull( stockingpoint ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_ServiceLevel_ValidateInput_IsNullPISP( objecttype ); 
 | 
      sanitycheckcategory_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning(); 
 | 
    } 
 | 
     
 | 
    // Add feedback text if any of the preconditions above are violated 
 | 
    if( feedback_o <> '' ) 
 | 
    { 
 | 
      displayname := MacroPlan::GetSubstituteName( name ); 
 | 
      instance := Translations::MP_ServiceLevel_Instance( objecttype, displayname ); 
 | 
      feedback_o := SanityCheckMessage::GetFormattedMessage( instance, feedback_o ); 
 | 
    } 
 | 
     
 | 
    return feedback_o = ''; 
 | 
  *] 
 | 
} 
 |