| Quintiq file version 2.0 | 
| #parent: #root | 
| Method UpdateCommitLogic | 
| { | 
|   Description: 'Commit logic for global parameters' | 
|   TextBody: | 
|   [* | 
|     /* When the check HasDefaultInventoryHoldingCost is set to TRUE, | 
|        Every existing product will createt a product account with inventory holding as cost driver | 
|        to the account specified in attribute DefaultAccountForInventoryHolding | 
|      | 
|        Every product that is created after the check is set to TRUE will also perform such action. | 
|      | 
|        When the check is set to FALSE, the ProductAccount that does not override the global parameter | 
|        values will have its attribute IsUsed set to FALSE declarative, hence deleting the said | 
|        instance once the method MacroPlan.RunOptimizer() is executed, when running optimizer */ | 
|      | 
|      | 
|     if( this.HasDefaultInventoryHoldingCost() ) | 
|     { | 
|       owner := Account_MP::FindAccountTypeIndex( this.DefaultAccountForInventoryHolding() ) | 
|       if( not isnull( owner ) ) | 
|       { | 
|         products := selectset( this, MacroPlan.Product_MP, p, not p.IsSystem() ); | 
|         traverse( products, Elements.ProductInStockingPoint_MP, pisp, | 
|                   not pisp.IsSystem() | 
|                   and not exists( pisp, PISPAccount, pispa, | 
|                                   pispa.Account_MP() = owner | 
|                                   and pispa.IsInventoryHolding() ) ) | 
|         { | 
|           PISPAccount::Assign( owner, | 
|                                pisp.Product_MP(), | 
|                                pisp.StockingPoint_MP(), | 
|                                Translations::MP_AccountAssignmentCostDriverInventoryHolding() ); | 
|         } | 
|       } | 
|     } | 
|      | 
|     // To set to default leadtime logic if the new leadtime logic is empty | 
|     if( this.LaneLeadTimeLogic() = '' ) | 
|     { | 
|       defaultLaneLeadTimeLogic := GlobalParameters_MP::GetAllLaneLeadTimeLogic().Tokenize( ";" ).Element( 0 ); | 
|       this.LaneLeadTimeLogic( defaultLaneLeadTimeLogic ); | 
|     } | 
|      | 
|     // To set to default leadtime logic if the new leadtime logic is empty | 
|     if( this.OperationLeadTimeLogic() = '' ) | 
|     { | 
|       defaultOperationLeadTimeLogic := GlobalParameters_MP::GetAllOperationLeadTimeLogic().Tokenize( ";" ).Element( 0 ); | 
|       this.OperationLeadTimeLogic( defaultOperationLeadTimeLogic );   | 
|     } | 
|      | 
|     // Reset plan in case of change of lead time strategy | 
|     if( this.HasNewLeadTimeStrategy() ) | 
|     { | 
|       this.MacroPlan().ResetPeriodTasksAndFlushTrips(); | 
|       this.HasNewLeadTimeStrategy( false ); | 
|     } | 
|      | 
|     // Refresh KPIs in case of change of KPI horizon | 
|     if( this.HasNewKPIHorizon() ) | 
|     { | 
|       this.MacroPlan().CalculateKPIScore( false ); | 
|       this.HasNewKPIHorizon( false ); | 
|     } | 
|      | 
|      | 
|     // Update default capacities and availabilities | 
|     this.UpdateDefaultUnitAvailabilities(); | 
|     this.UpdateDefaultTransportCapacities(); | 
|     this.UpdateDefaultUnitCapacities(); | 
|     this.UpdateDefaultStockingPointCapacities(); | 
|   *] | 
| } |