Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod ValidateInput ( 
 | 
  output String feedback_o, 
 | 
  output String sanitycheckfeedback_o, 
 | 
  MacroPlan owner, 
 | 
  String id, 
 | 
  String name, 
 | 
  Unit unit, 
 | 
  Unit parent, 
 | 
  Boolean hasuserstart, 
 | 
  Date start, 
 | 
  Boolean hasuserend, 
 | 
  Date end, 
 | 
  String capacitytype, 
 | 
  UnitOfMeasure_MP unitofmeasure, 
 | 
  Currency_MP currency, 
 | 
  Real minimumquantity, 
 | 
  Boolean hasmaximumquantity, 
 | 
  Real maximumquantity, 
 | 
  Real lotsize, 
 | 
  Boolean hascapacitysmoothing, 
 | 
  Boolean issmoothcapacityoverallperiods, 
 | 
  Number usercapacitysmoothinglength, 
 | 
  Real capacitysmoothingpercentagedelta, 
 | 
  Boolean checkuniqueid 
 | 
) declarative remote as Boolean 
 | 
{ 
 | 
  Description: 'Check if the input is valid' 
 | 
  TextBody: 
 | 
  [* 
 | 
    feedback_o      := ''; 
 | 
    maxnamelength   := GlobalParameters_MP::GetLengthOfNames(); 
 | 
    istransportunit := capacitytype = GlobalParameters_MP::GetCapacityTypeTransportTime() 
 | 
                       or capacitytype = GlobalParameters_MP::GetCapacityTypeTransportQuantity(); 
 | 
     
 | 
    // Check ID 
 | 
    if( checkuniqueid 
 | 
        and exists( owner, Unit, u, u <> unit, u.ID() = id ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsIDExists(); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
       
 | 
    } 
 | 
    else if ( id.Length() =0 ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsInvalidID( 500 ); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Invalid unit 
 | 
    else if( not isnull( unit ) and unit = parent ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsTargetSelf(); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Invalid unit 
 | 
    else if( not isnull( parent ) 
 | 
             and exists( unit, AllChildren, allchildren, 
 | 
             allchildren.AsChildren().ID() = parent.ID() ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsTargetChild(); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Invalid start and end 
 | 
    else if( hasuserend and hasuserstart and start >= end ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsInvalidStartEndDate( end, start ) ; 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Invalid UOM 
 | 
    else if( isnull( unitofmeasure ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsUnitOfMeasureNull(); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
    // Invalid Currency 
 | 
    else if( isnull( currency ) ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsCurrencyNull(); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
    } 
 | 
     
 | 
    // Only check for non-transport unit 
 | 
    else if( not istransportunit ) 
 | 
    { 
 | 
      // Invalid lot size 
 | 
      if( lotsize < 0 ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_ValidateInput_IsNegativeLotSize( lotsize ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
      // Invalid lot size 
 | 
      else if( hasmaximumquantity 
 | 
               and lotsize > maximumquantity ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsLotSizeGreaterThanMaximumQuantity( maximumquantity, lotsize ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
      // Invalid min qty 
 | 
      else if( minimumquantity < 0 ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsNegativeMinimumQuantity( minimumquantity ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
      // Invalid max qty 
 | 
      else if( hasmaximumquantity 
 | 
               and maximumquantity < 0 ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsNegativeMaximumQuantity( maximumquantity ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
      // Invalid max qty 
 | 
      else if( hasmaximumquantity 
 | 
               and minimumquantity > maximumquantity ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsMinimumQuantityGreaterThanMaximumQuantity( maximumquantity, minimumquantity); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
        // Invalid capacity smoothing length 
 | 
      else if( hascapacitysmoothing and not issmoothcapacityoverallperiods and usercapacitysmoothinglength < 2 ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsInvalidSmoothingLength( usercapacitysmoothinglength ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
      // Invalid capacity smoothing percentage delta 
 | 
      else if( hascapacitysmoothing and capacitysmoothingpercentagedelta < 0.0 ) 
 | 
      { 
 | 
        feedback_o := Translations::MP_Unit_ValidateInput_IsNegativeSmoothingDelta( capacitysmoothingpercentagedelta ); 
 | 
        sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); 
 | 
      } 
 | 
    } 
 | 
    // Invalid name 
 | 
    //else if is removed, because this checking need to happen regardless of the capacity type 
 | 
    //as we do not want to overwrite any previous feedback, checking will only be done if feedback_o is still empty at this point 
 | 
    if( ( name = '' or name.Length() > maxnamelength ) and feedback_o = '' ) 
 | 
    { 
 | 
      feedback_o := Translations::MP_Unit_ValidateInput_IsInvalidName( maxnamelength ); 
 | 
      sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning(); 
 | 
    } 
 | 
     
 | 
    // Add instance text 
 | 
    if( feedback_o <> '' ) 
 | 
    { 
 | 
      unitname := MacroPlan::GetSubstituteName( name ); 
 | 
      feedback_o := SanityCheckMessage::GetFormattedMessage( Translations::MP_Unit_Instance( unitname ), 
 | 
                                                             feedback_o ); 
 | 
    } 
 | 
     
 | 
    return feedback_o = ''; 
 | 
  *] 
 | 
} 
 |