| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod ValidateInput ( | 
|   output String feedback_o, | 
|   output String sanitycheckfeedback_o, | 
|   MacroPlan macroplan, | 
|   SalesDemandBase salesdemand, | 
|   SalesSegment_MP salessegment, | 
|   StockingPoint_MP stockingpoint, | 
|   Product_MP product, | 
|   Date start, | 
|   Date end, | 
|   Currency_MP currency, | 
|   UnitOfMeasure_MP unitofmeasure, | 
|   Real quantity, | 
|   Real price, | 
|   Priority priority, | 
|   Real demanduncertaintypercentage, | 
|   Boolean isexcludedfromfulfillmentkpi, | 
|   Boolean validatestartend | 
| ) declarative remote as Boolean | 
| { | 
|   Description: 'Validate user input from dialog' | 
|   TextBody: | 
|   [* | 
|     feedback_o := ''; | 
|     sanitycheckfeedback_o := ''; | 
|      | 
|     gp := macroplan.GlobalParameters_MP(); | 
|     typename := guard( salesdemand.GetTypeName(), 'Sales demand' ); | 
|      | 
|     // Check if sales segment is null | 
|     if( isnull( salessegment ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullSalesSegment( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if stocking point is null | 
|     else if( isnull( stockingpoint ) ) | 
|     { | 
|       // Check if sales demand is null or sales demand have any stocking point id designated | 
|       if( isnull( salesdemand ) | 
|           or salesdemand.StockingPointID() = '' ) | 
|       { | 
|         feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullStockingPoint( typename );  | 
|         sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|       } | 
|       else | 
|       { | 
|         feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNonExistingStockingPoint( salesdemand.StockingPointID(), typename ); | 
|         sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue();    | 
|       } | 
|     } | 
|     // Check if product is null | 
|     else if( isnull( product ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullProduct( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if quantity is valid | 
|     else if( quantity < 0.0 ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNegativeQuantity( quantity ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if currency is null | 
|     else if( isnull( currency ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullCurrency( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if unit of measure is null | 
|     else if( isnull( unitofmeasure ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullUOM( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if price is valid | 
|     else if( price < 0.0 ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNegativePrice( price ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if priority is valid | 
|     else if( not isexcludedfromfulfillmentkpi and isnull( priority ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullPriority( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if demand uncertainty percentage is within the allowed range | 
|     else if( demanduncertaintypercentage < 0.0 or demanduncertaintypercentage > 100.0 ) | 
|     { | 
|       feedback_o := Translations::MP_NumericalValueRange_ValidateInput( "Demand uncertainty percentage", 0.0, 100.0 ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if start and end is valid | 
|     else if( start.IsInfinite() or end.IsInfinite() ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsNullStartOrEnd( typename ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if start and end combination is valid | 
|     else if( validatestartend and start >= end ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_IsInvalidStartEndDate( start, end ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if quantity is valid | 
|     else if( quantity <> 0 | 
|              and not GlobalParameters_MP::GetIsValueWithinRange( quantity, gp.AbsoluteUpperLimit(), gp.AbsoluteLowerLimit() ) ) | 
|     { | 
|       feedback_o := Translations::MP_SalesDemand_ValidateInput_InvalidQuantity( quantity, | 
|                                                                                 gp.AbsoluteUpperLimit(), | 
|                                                                                 gp.AbsoluteLowerLimit() ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning(); | 
|     } | 
|      | 
|     // Add feedback text if any of the preconditions above are violated | 
|     if( feedback_o <> '' ) | 
|     { | 
|       instance := SalesDemandBase::GetInstanceText( product, salessegment, start, end, typename ); | 
|       feedback_o := SanityCheckMessage::GetFormattedMessage( instance, feedback_o ); | 
|     } | 
|      | 
|     return feedback_o = ''; | 
|   *] | 
| } |