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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Quintiq file version 2.0
#parent: #root
Method DataMockupGenerateLanelegs (
  Unit unit,
  Number nroflanelegs,
  Number nrofproductsperlane
)
{
  TextBody:
  [*
    macroplan := this.MacroPlan();
    
    // Create lanes
    lane := Lane::Create( 'Lane',
                          unit,
                          'Lane',
                          true,
                          Date::MinDate(),
                          Date::MaxDate(),
                          Duration::MinDuration(),
                          Duration::MinDuration(),
                          false
                        );
    
    // Create ProductInLane for the number of passed in nrofproductsperlane
    for( i := 0; i < nrofproductsperlane; i++ )
    {
      // Find existing Product_MP
      product := Product_MP::FindProductTypeIndex( 'Product_' + [String] i );
      // Create ProductInLane
      ProductInLane::Create( product,
                             lane,
                             false,
                             false
                           );
    }  
    
    // Create LaneLeg for the number of passed in nroflanelegs
    for( i := 0; i < nroflanelegs; i++ )
    {
      // Randomly select one origin StockingPoint_MP's ID
      originspid := minselect( macroplan, StockingPoint_MP, sp, true, Real::Random() ).ID();
      // Randomly select one destination StockingPoint_MP's ID, given that:
      // destination <> origin
      // and there's no existing laneleg in this lane that has the same origin and destination
      destinationspid := minselect( macroplan, StockingPoint_MP, sp, 
                                    sp.ID() <> originspid
                                    and not exists( lane, LaneLeg, ll, 
                                                    ll.OriginStockingPointID() = originspid
                                                    and ll.DestinationStockingPointID() = sp.ID() ), 
                                    Real::Random() ).ID();
      // Create laneleg
      LaneLeg::Create( lane,
                       originspid,
                       destinationspid,
                       false,
                       Date::MinDate(),
                       Date::MaxDate(),
                       lane.ID() + ' - ' + originspid + ' to ' + destinationspid,
                       true,
                       Duration::Days( 1 ),
                       false,
                       Duration::MinDuration(),
                       0.0,
                       0.0, // CO2 emission for generated lanelegs
                       false
                     );
                       
    }
    
    // Set StockingPointInLane after creating Lane & LaneLeg
    macroplan.InitializeLaneAfterImport();
  *]
}