| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride GetHasValidCost ( | 
|   output Strings feedback_o, | 
|   output Strings sanitychkfeedback | 
| ) declarative remote as Boolean | 
| { | 
|   TextBody: | 
|   [* | 
|     operationstartdate := maxvalue( this.ValidFrom(), this.MacroPlan().StartOfPlanning().Date() ); | 
|      | 
|     valid := this.OperationCost( relsize ) > 0 | 
|               and this.FirstOperationCost().Start() <= operationstartdate; | 
|      | 
|     if( not isnull( feedback_o ) and not valid ) | 
|     { | 
|       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_Process_ViolateHasValidCost( this.DefinitionName(), operationstartdate ) ) ); | 
|       sanitychkfeedback.Add( SanityCheckCategoryLevel::GetSanityCheckCategoryDataWarning() ); | 
|     } | 
|      | 
|     return valid | 
|   *] | 
| } |