| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod ValidateInput ( | 
|   output String feedback_o, | 
|   output String sanitycheckfeedback_o, | 
|   MacroPlan macroplan, | 
|   Product_MP product, | 
|   StockingPoint_MP stockingpoint, | 
|   Real inventoryquantity, | 
|   Date date, | 
|   Date manufactureddate | 
| ) declarative remote as Boolean | 
| { | 
|   Description: 'Check for input obtained from UI and methods' | 
|   TextBody: | 
|   [* | 
|     feedback_o := ''; | 
|     sanitycheckfeedback_o := ''; | 
|      | 
|     // Populate variable | 
|     gp := macroplan.GlobalParameters_MP(); | 
|     min_mfgdate := InventorySupply::GetMinimumManufacturedDate( product, macroplan, date ); | 
|     pispspec := select(  product,  | 
|                          PISPSpecification, spec,  | 
|                          spec.StockingPoint_MP() = stockingpoint ); | 
|      | 
|     hasshelflife := product.HasShelfLife() | 
|                     and guard( not pispspec.IsExcludeShelfLifeAndMaturation(), true ); | 
|                      | 
|     hasshelflifeormaturation := product.HasShelfLifeOrMaturation() | 
|                     and guard( not pispspec.IsExcludeShelfLifeAndMaturation(), true );      | 
|                        | 
|     // Check if product is null | 
|     if( isnull( product ) ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsNullProduct(); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if stocking point is null | 
|     else if( isnull( stockingpoint ) ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsNullStockingPoint(); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if date is valid | 
|     else if( not ( date >= stockingpoint.Start() | 
|                    and date <= stockingpoint.End() ) ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsInvalidDate( date, | 
|                                                                                   stockingpoint.Start(), | 
|                                                                                   stockingpoint.End() ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if the entered manufactured date will result in product expiry in pispip | 
|     else if( hasshelflife | 
|              and manufactureddate < min_mfgdate ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsExpiredManufacturedDate( min_mfgdate ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning(); | 
|     } | 
|     // Check if product has shelf-life or maturation, and is manufactured in the future | 
|     else if( hasshelflifeormaturation | 
|              and manufactureddate > date ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsFutureManufacturedDate( manufactureddate, date ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if inventory quantity is entered | 
|     else if( inventoryquantity = Real::MinReal() ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_IsEmpty(); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|     // Check if inventory quantity is valid | 
|     else if( inventoryquantity <> 0 | 
|              and not GlobalParameters_MP::GetIsValueWithinRange( inventoryquantity, | 
|                                                                  gp.AbsoluteUpperLimit(), | 
|                                                                  gp.AbsoluteLowerLimit() ) ) | 
|     { | 
|       feedback_o := Translations::MP_InventorySupply_ValidateInput_InvalidQuantity( inventoryquantity, gp.AbsoluteLowerLimit(), gp.AbsoluteUpperLimit() ); | 
|       sanitycheckfeedback_o := SanityCheckCategoryLevel::GetSanityCheckCategoryDataIssue(); | 
|     } | 
|      | 
|     // Add feedback text if any of the precondition above is violated | 
|     if( feedback_o <> '' ) | 
|     { | 
|       instance := InventorySupply::GetInstanceText( product, stockingpoint, date ); | 
|       feedback_o := SanityCheckMessage::GetFormattedMessage( instance, feedback_o ); | 
|     } | 
|      | 
|     return feedback_o = ''; | 
|   *] | 
| } |