| Quintiq file version 2.0 | 
| #parent: #root | 
| Method AssignParent ( | 
|   Unit parent | 
| ) | 
| { | 
|   Description: 'Assign this unit as a child the given unit.' | 
|   TextBody: | 
|   [* | 
|     // desmondt Jul-2-2015 (created) | 
|     oldparent := this.Parent(); | 
|     newparentid := guard( parent.ID(), '' ); | 
|     hasnewparent := this.ParentUnitID() <> newparentid; | 
|      | 
|     if( this.HasDescendant( parent ) ) | 
|     { | 
|       parent.ParentUnitID( this.ParentUnitID() ); | 
|     } | 
|     this.ParentUnitID( newparentid ); | 
|      | 
|     // Calculate siblings of the product to the new parent | 
|     if( hasnewparent ) | 
|     { | 
|       this.ParentUnitID( newparentid ); | 
|      | 
|       traverse( this, AllChildren.AsChildren, u ) | 
|       { | 
|         u.SetAllParent(); | 
|       } | 
|      | 
|       // Propogate the HasParent attribute to use in setting root product | 
|       Transaction::Transaction().Propagate( attribute( Unit, HasParent ) ); | 
|       this.SetRootUnit(); | 
|       this.SetSiblings(); | 
|      | 
|       // Recalculate siblings for the old parent | 
|       traverse( oldparent, AllChildren, child ) | 
|       { | 
|         child.AsChildren().SetSiblings(); | 
|       } | 
|     } | 
|   *] | 
| } |