lazhen
2024-10-11 cbf2cc895f1d1e7dcf522a462e77709d92667747
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
Quintiq file version 2.0
#parent: #root
StaticMethod SetUnitShiftPattern (
  MacroPlan macroPlan,
  UnitPeriodTimes unitPeriodTimes,
  ShiftPattern shiftPattern
)
{
  TextBody:
  [*
    // Akari Oct-10-2024 (created)
    firstElement := minselect( unitPeriodTimes, Elements, e, true, e.Start() );
    
    start := macroPlan.Start();
    timeunit := macroPlan.StartOfPlanningPeriod().TimeUnit();
    maintenance := Duration::Zero();
    efficiency := 1.0;
    allocation := 1.0;
    
    maxloadpercentage := macroPlan.GlobalParameters_MP().DefaultMaxLoadPercentage();
    nrofunitopen := 1;
    minloadthreshold := 0.0;
    
    if( not isnull( firstElement ) ){
      // To inherit the value from last unit availability while creating a new unit availability
      unitavailability := firstElement.UnitAvailability();
      start := firstElement.Start();
    
      if( not isnull( unitavailability ) ){
        timeunit := unitavailability.TimeUnit();
        maintenance := unitavailability.Maintenance();
        efficiency := unitavailability.Efficiency();
        allocation := unitavailability.Allocation();
    
        maxloadpercentage := unitavailability.MaximumLoadPercentage();
        nrofunitopen := unitavailability.NrOfUnitsOpen();
        minloadthreshold := unitavailability.MinimumLoadThreshold();
      }else{
        timeunit := firstElement.Period_MP().TimeUnit();
        maintenance := firstElement.Maintenance();
        efficiency := firstElement.Efficiency();
        allocation := firstElement.Allocation();
    
        maxloadpercentage := firstElement.MaximumLoadPercentage();
        nrofunitopen := firstElement.NrOfOpen();
        minloadthreshold := firstElement.MinimumLoadThreshold();
      }
    }
    
    isbatchedit := unitPeriodTimes.Size() > 1;
    UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
                                                        not isbatchedit or false,
                                                        timeunit,
                                                        maintenance,
                                                        not isbatchedit or false,
                                                        efficiency,
                                                        false,
                                                        allocation,
                                                        not isbatchedit or true,
                                                        shiftPattern,
                                                        not isbatchedit or false,
                                                        maxloadpercentage,
                                                        not isbatchedit or false,
                                                        nrofunitopen,
                                                        false,
                                                        not isbatchedit or false,
                                                        minloadthreshold
                                                       );
  *]
}