| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod SynchronizeWithTemplate ( | 
|   MacroPlan owner, | 
|   Accounts accounttemplates | 
| ) | 
| { | 
|   Description: 'Synchronize with accounts in scenario manager' | 
|   TextBody: | 
|   [* | 
|     // Reset all account's IsInTemplate flag | 
|     traverse( owner, Account_MP, a ) | 
|     { | 
|       a.IsInTemplate( false ); | 
|     } | 
|      | 
|     // Traverse all passed in accounts and use them as templates to update/create accounts | 
|     traverse( accounttemplates, Elements, template ) | 
|     { | 
|       // Look for the account with the same name as template | 
|       account := select( owner, Account_MP, acct, acct.Name() = template.Name() ); | 
|      | 
|       // Create account if it is not found | 
|       if( isnull( account ) ) | 
|       { | 
|         account := Account_MP::Create( owner, template ); | 
|       } | 
|       // Else, update the matching account | 
|       else | 
|       { | 
|         account.Update( template.AccountTypeName(), | 
|                         template.ParentName(), | 
|                         template.ReportType(), | 
|                         template.DefaultCost(), | 
|                         template.DefaultCostDriver(), | 
|                         template.DefaultLengthOfTime(), | 
|                         template.DefaultTimeUnit(), | 
|                         template.DisplayIndex(), | 
|                         template.IsMaximize(), | 
|                         template.IsUsedByOptimizer() ); | 
|       } | 
|       // Set account's IsInTemplate flag to true | 
|       account.IsInTemplate( true ); | 
|     } | 
|      | 
|     // Delete all accounts that is not is template | 
|     traverse( owner, Account_MP, a, not a.IsInTemplate() ) | 
|     { | 
|       a.Delete(); | 
|     } | 
|      | 
|     // Sort Account_MP according to it's display index | 
|     owner.SortAccount( attribute( Account_MP, DisplayIndexForTemplate ), true ); | 
|   *] | 
| } |