Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetHasValidInputOuputProductLevel ( 
 | 
  output Strings feedback_o, 
 | 
  output Strings sanitycheckfeedback_o 
 | 
) declarative remote as Boolean 
 | 
{ 
 | 
  Description: 'Check whether both input and output product for the operation are from same product level.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    products := selectuniquevalues( this, OperationInput.ProductInStockingPoint_MP.Product_MP, product, true, product.IsLeaf() ) 
 | 
     
 | 
    isvalid := products.Size() <=1; 
 | 
     
 | 
    if ( isvalid ) 
 | 
    { 
 | 
      isvalid := products.Size() =0  
 | 
                 or forall( this, OperationOutput.ProductInStockingPoint_MP.Product_MP, product, true, product.IsLeaf() = products.Element( 0 ) );   
 | 
    } 
 | 
     
 | 
    if( not isnull( feedback_o ) and not isvalid ) 
 | 
    { 
 | 
      name := MacroPlan::GetSubstituteName( this.Name() ); 
 | 
      routingstep := MacroPlan::GetSubstituteName( this.RoutingStepName() ); 
 | 
      routing := MacroPlan::GetSubstituteName( this.RoutingID() ); 
 | 
      unitname := MacroPlan::GetSubstituteName( this.Unit().Name() ); 
 | 
      feedback_o.Add( SanityCheckMessage::GetFormattedMessage( Translations::MP_Operation_Instance( name, routingstep, routing, unitname ),  
 | 
                                                                Translations::MP_Operation_ViolateHaveDifferentInputOutputProductLevel() ) ); 
 | 
      sanitycheckfeedback_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue() );  
 | 
    } 
 | 
     
 | 
    return isvalid; 
 | 
  *] 
 | 
} 
 |