| Quintiq file version 2.0 | 
| #parent: #root | 
| Method GetIsBlendedValueLessThanMaximum ( | 
|   output Strings feedback_o, | 
|   output Strings sanitycheckfeedbacks_o | 
| ) declarative remote as Boolean | 
| { | 
|   Description: 'Returns true if the input blended value is within the maximum value as stated in the recipe used.' | 
|   TextBody: | 
|   [* | 
|     // Adhi Aug-4-2015 (created) | 
|     checkvalid := true; | 
|     gp := this.MacroPlan().GlobalParameters_MP(); | 
|      | 
|     // Get the recipe from operationoutput | 
|     outputrecipe := select( this, NewSupply.ProductInStockingPointInPeriodPlanningLeaf.RecipeWithEffectiveDate.Recipe, recipe, true ); | 
|      | 
|     // Do check for every ingredient in the recipe | 
|     traverse( outputrecipe, BaseRecipeIngredient, recipeingredient ) | 
|     { | 
|        blendedvalue := this.GetBlendedValue( recipeingredient ); | 
|      | 
|        isvalid := blendedvalue <= recipeingredient.Maximum() | 
|                   or gp.GetIsBalanceWithinTolerance( blendedvalue, recipeingredient.Maximum() ); | 
|      | 
|        // If one failed, consider invalid. Do not put isvalid in the traverse above because we want to gather all messages. | 
|        checkvalid := checkvalid and isvalid; | 
|      | 
|        if( not isnull( feedback_o ) and not isvalid ) | 
|        { | 
|           instance := PeriodTaskOperation::GetInstanceText( this ); | 
|           percentage := GlobalParameters_MP::GetPercentageDifference( blendedvalue, recipeingredient.Maximum() ); | 
|           message := Translations::MP_PeriodTaskOperation_ViolateIsBlendedValueLessThanMaximum( blendedvalue, recipeingredient, percentage ); | 
|           feedback_o.Add( SanityCheckMessage::GetFormattedMessage( instance, message ) ); | 
|           sanitycheckfeedbacks_o.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryPlanningIssue() ); | 
|        } | 
|     } | 
|      | 
|     return checkvalid; | 
|   *] | 
| } |