| Quintiq file version 2.0 | 
| #parent: #root | 
| FunctionOverride CalcIsValid | 
| { | 
|   TextBody: | 
|   [* | 
|     // Check if all related objects has valid data | 
|     // Starting with the Account, Actual, Campaign, BaseConversionFactor and -RecipeIngredient, Currency, DependentDemand | 
|     // Feedback, Fulfillment, Globalparameters and Group related data | 
|     value := guard( this.Account_MP().IsValidData(), true ) | 
|              and guard( this.ActualProductInStockingPointInPeriod().IsValidData(), true ) | 
|              and guard( this.ActualUnitPeriod().IsValidData(), true ) | 
|              and guard( this.BaseConversionFactor().IsValidData(), true ) | 
|              and guard( this.BaseRecipeIngredient().IsValidData(), true )          | 
|              and guard( this.Currency_MP().IsValidData(), true ) | 
|              and guard( this.CurrencyRate_MP().IsValidData(), true ) | 
|              and guard( this.DependentDemand().IsValidData(), true ) | 
|              and guard( this.FeedbackPeriodTaskOperation().IsValidData(), true ) | 
|              and guard( this.FeedbackProductInTrip().IsValidData(), true ) | 
|              and guard( this.Fulfillment().IsValidData(), true ) | 
|              and guard( this.GlobalParameters_MP().IsValidData(), true ) | 
|              and guard( this.Group().IsValidData(), true ) | 
|              //Check campaign related data | 
|              and guard( this.Campaign_MP().IsValidData(), true ) | 
|              and guard( this.CampaignType_MP().IsValidData(), true ) | 
|              and guard( this.TransitionType_MP().IsValidData(), true ) | 
|              // also check the Ingredient, Inventory and Lane data | 
|              and guard( this.Ingredient().IsValidData(), true ) | 
|              and guard( this.InventoryValueAndCost().IsValidData(), true ) | 
|              and guard( this.InventorySpecification().IsValidData(), true ) | 
|              and guard( this.SafetyStock().IsValidData(), true ) | 
|              and guard( this.InventorySupply().IsValidData(), true ) | 
|              and guard( this.InventorySupplyCost().IsValidData(), true ) | 
|              and guard( this.Lane().IsValidData(), true ) | 
|              and guard( this.LaneLeg().IsValidData(), true ) | 
|              and guard( this.LaneCost().IsValidData(), true ) | 
|              and guard( this.LaneLegCost().IsValidData(), true ) | 
|              // we shouldn't forget MacroPlan itself, nor the Period, PISP, Postponed and Priority data | 
|              and guard( this.MacroPlan().IsValidData(), true ) | 
|              and guard( this.PeriodSpecification_MP().IsValidData(), true ) | 
|              and guard( this.PeriodTaskOperation().IsValidData(), true ) | 
|              and guard( this.PISPAccount().IsValidData(), true ) | 
|              and guard( this.PISPSpecification().IsValidData(), true ) | 
|              and guard( this.PostponedSalesDemandCost().IsValidData(), true ) | 
|              and guard( this.PostponementSpecification().IsValidData(), true ) | 
|              and guard( this.Priority().IsValidData(), true ) | 
|             // Product related data  | 
|              and guard( this.Product_MP().IsValidData(), true ) | 
|              and guard( this.ProductValueAndCost().IsValidData(), true ) | 
|              and guard( this.ProductInLane().IsValidData(), true ) | 
|              and guard( this.ProductInStockingPoint_MP().IsValidData(), true ) | 
|              and guard( this.PISPIPSanityCheckAttribute().ProductInStockingPointInPeriodPlanning().IsValidData(), true ) | 
|              and guard( this.ProductInTrip().IsValidData(), true ) | 
|              and guard( this.ProductLevel_MP().IsValidData(), true ) | 
|             // Also check Recipe, Routing and RoutingStep data | 
|              and guard( this.Recipe().IsValidData(), true ) | 
|              and guard( this.RecipeWithEffectiveDate().IsValidData(), true ) | 
|              and guard( this.Routing().IsValidData(), true ) | 
|              and guard( this.RoutingStep().IsValidData(), true ) | 
|             // various operation related data | 
|              and guard( this.Operation().IsValidData(), true ) | 
|              and guard( this.OperationCost().IsValidData(), true ) | 
|              and guard( this.OperationInCampaignType().IsValidData(), true ) | 
|              and guard( this.OperationInput().IsValidData(), true ) | 
|              and guard( this.OperationInputGroup().IsValidData(), true ) | 
|              and guard( this.OperationInputSet().IsValidData(), true ) | 
|              and guard( this.OperationLink().IsValidData(), true ) | 
|              and guard( this.OperationOutput().IsValidData(), true ) | 
|              // SalesDemand, -Level and -segment. But also ShiftDay and -Pattern | 
|              and guard( this.SalesDemandBase().IsValidData(), true ) | 
|              and guard( this.SalesLevel_MP().IsValidData(), true ) | 
|              and guard( this.SalesSegment_MP().IsValidData(), true ) | 
|              and guard( this.ShiftDay().IsValidData(), true ) | 
|              and guard( this.ShiftPattern().IsValidData(), true ) | 
|              // A wide variety of StockingPoint data is also checked | 
|              and guard( this.StockingPoint_MP().IsValidData(), true ) | 
|              and guard( this.StockingPointInLane().IsValidData(), true ) | 
|              and guard( this.StockingPointCost().IsValidData(), true ) | 
|              and guard( this.StockingPointAccount().IsValidData(), true ) | 
|              and guard( this.StockingPointCapacity().IsValidData(), true ) | 
|              and guard( this.StockingPointInPeriod().IsValidData(), true ) | 
|              and guard( this.StockingPointUnit().IsValidData(), true ) | 
|              // As is SupplySpecification, ServiceLevel, FullFillmentTarget, Transport and trip data | 
|              and guard( this.SupplySpecification().IsValidData(), true ) | 
|              and guard( this.ServiceLevel().IsValidData(), true ) | 
|              and guard( this.FulfillmentTarget().IsValidData(), true ) | 
|              and guard( this.TransportCapacity().IsValidData(), true ) | 
|              and guard( this.TransportAvailability().IsValidData(), true ) | 
|              and guard( this.Trip().IsValidData(), true ) | 
|             // fianlly, the unit data is checked | 
|              and guard( this.Unit().IsValidData(), true ) | 
|              and guard( this.UnitCost().IsValidData(), true ) | 
|              and guard( this.UnitAccount().IsValidData(), true ) | 
|              and guard( this.UnitAvailability().IsValidData(), true ) | 
|              and guard( this.UnitCalendarElement().IsValidData(), true ) | 
|              and guard( this.UnitCapacity().IsValidData(), true ) | 
|              and guard( this.UnitOfMeasure_MP().IsValidData(), true ) | 
|              and guard( this.FulfillmentRestriction().IsValidData(), true ) | 
|              and guard( this.SubsetInOptimizerPuzzle().IsValidData(), true ); | 
|      | 
|     this.IsValid( value ); | 
|   *] | 
| } |