yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Quintiq file version 2.0
#parent: #root
Method SynchronizeLaneLeg (
  Lane originallane
)
{
  Description: 'Ensures the newly copied lanelegs have the same attributes as the original.'
  TextBody:
  [*
    // MKO2 Aug-9-2016 (created)
    idholder := this.Unit().MacroPlan().IDHolder();
    
    traverse( originallane, LaneLeg, originallaneleg )
    {
      // select the lane legs on the newly copied lane
      newlaneleg := select( this, LaneLeg, ll, 
                            ll.DestinationStockingPointID() = originallaneleg.DestinationStockingPointID() 
                            and ll.OriginStockingPointID() = originallaneleg.OriginStockingPointID() );
    
      // update lane leg with original attributes
      if( not isnull( newlaneleg ) )
      {
        newlaneleg.Update( newlaneleg.Lane(),
                           originallaneleg.AsOriginStockingPointLeg(),
                           originallaneleg.AsDestinationStockingPointLeg(),
                           originallaneleg.IsEnabled(),
                           originallaneleg.Start(),
                           originallaneleg.End(),
                           originallaneleg.HasUserLeadTime(),
                           originallaneleg.LeadTime(),
                           originallaneleg.HasStandardDeviationLeadTimeLaneLeg(),
                           originallaneleg.StandardDeviationLeadTimeLaneLeg(),
                           originallaneleg.CO2Emission() );
                           
        // duplicate costs on new lane leg
        traverse( originallaneleg, LaneLegCost, cost )
        {
          accountassignment := select( this.Unit(), UnitAccount, ua,
                                       ua.Account_MP() = cost.AccountAssignment().Account_MP()
                                       and ua.CostDriver() = cost.AccountAssignment().CostDriver() );
        
          if( not isnull( accountassignment ) )
          {
            LaneLegCost::Create( idholder.GetLaneLegCostID(),
                                 newlaneleg,
                                 accountassignment.Account_MP(),
                                 accountassignment.CostDriver(),
                                 cost.Start(),
                                 cost.TimeUnit(),
                                 cost.LengthOfTime(),
                                 cost.Cost(),
                                 false );
          }
        }
      }
    }
  *]
}