lazhen
2025-01-09 8afe90b633046db39042aada36b88193062f8cff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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();
      }
    }
  *]
}