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
  | Quintiq file version 2.0 
 |  #parent: #root 
 |  Method CreatePeriodTaskOperations ( 
 |    Period_MPs periods 
 |  ) 
 |  { 
 |    TextBody: 
 |    [* 
 |      starttime := OS::PrecisionCounter();  
 |      operations := selectset(  this, MacroPlan.Unit.OperationForOptimization, operation, true, true );  
 |      debuginfo(  'all operations := ', counter(  this, MacroPlan.Unit.Operation, op, true, true ), 'op for optimizer = ', operations.Size() );  
 |      nrperiodtasks_at_start := counter(  operations, Elements.PeriodTaskOperation, pto, true, true );  
 |      debuginfo(  'Start period task creation. Nr pto at start = ', nrperiodtasks_at_start, 'periods = ', periods.Size(), 'operations = ', operations.Size(), 'mult:', periods.Size() * operations.Size()  );  
 |      notvalidnr := 0;  
 |      traverse( periods, Elements, period )  
 |      { 
 |        traverse( operations, Elements, operation, operation.GetIsAvailableForOptimization() )  
 |        { 
 |          unit := operation.Unit();  
 |          unitperiod := UnitPeriod::FindUnitPeriodTypeIndex( unit.ID(), period.Start(), period.End() ); 
 |          availcapacity := unitperiod.GetTotalAvailableCapacity();  
 |          if ( availcapacity <= 0.0 )  
 |          { 
 |            traverse( unitperiod, PeriodTaskOperation, pto, pto.Quantity() = 0.0 )  
 |            { 
 |              pto.Delete();  
 |            } 
 |          } 
 |          if( not unitperiod.IsPeriodFrozen() 
 |              and not availcapacity <= 0.0 
 |              and PeriodTaskOperation::GetIsValidPeriodTask( operation, period ) ) 
 |          { 
 |            pto := PeriodTaskOperation::Create( operation, unitperiod, 0.0, false ); 
 |            if ( isnull( pto ) )  
 |            { 
 |              notvalidnr++;    
 |            } 
 |          } 
 |          else 
 |          { 
 |            notvalidnr++;  
 |          } 
 |        } 
 |      } 
 |      nrperiodtasks_at_end := counter( operations, Elements.PeriodTaskOperation, pto, true, true );  
 |       
 |      durationsecformethod := (OS::PrecisionCounter() - starttime) / OS::PrecisionCounterFrequency();  
 |      debuginfo(  'Nr pto at end = ', nrperiodtasks_at_end );  
 |      debuginfo( 'Created ', nrperiodtasks_at_end - nrperiodtasks_at_start, ' period task operations. Time for method = ', durationsecformethod, 'sec' );  
 |      debuginfo(  'not valid count=', notvalidnr, 'Checksum#1: ', periods.Size() * operations.Size() - notvalidnr, 'Checksum#2', nrperiodtasks_at_end ); 
 |    *] 
 |    InterfaceProperties { Accessibility: 'Module' } 
 |  } 
 |  
  |