admin
2025-01-22 7e31442f0e9b07764e9c6a9680d3d4aeba5fe1de
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
Quintiq file version 2.0
#parent: #root
StaticMethod GetProcessQuantity (
  Period_MP period,
  Operations operations,
  ProductInStockingPoint_MPs pisps,
  Boolean isdependentdemand,
  output String tooltip
) declarative remote as Real
{
  Description: 'Return quantities of operations to pisps in a period or pisp to operations in a period'
  TextBody:
  [*
    value := 0.0;
    
    // Insert table tag for tooltip
    // Routing step name
    routingstep := select( operations, Elements.RoutingStep, rs, true );
    tooltip := "<table>";
    tooltip := tooltip + '<tr><td><b>Routing step: </b></td><td>' 
               + routingstep.Name() + '</td></tr>';
    
    // Routing name
    tooltip := tooltip + '<tr><td><b>Routing: </b></td><td>' 
               + routingstep.Routing().Name() + '</td></tr>';
    
    // Period
    tooltip := tooltip + '<tr><td><b>Period: </b></td><td>' 
               + period.StartDate().Format( 'D-MM-Y' ) + ' until ' + period.EndDate().Format( 'D-MM-Y' ) + '</td></tr>'; 
    
    // A separating line
    tooltip := tooltip + '</table><hr>';
    
    // Units and products headers
    tooltip := tooltip + '<table><tr><td><b>Unit:</b></td><td><b>' 
               + select( operations, Elements.OperationOutput, e, true ).ProductInStockingPoint_MP().Product_MP().Name() + ' quantity: </b></td></tr>';
    
    if( isdependentdemand )
    {
      traverse( operations, Elements.PeriodTask_MP.DependentDemand, dd, 
                exists( pisps, Elements, e, e = dd.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP() )
                and dd.Start() >= period.Start()
                and dd.End() <= period.End() )
                {
                    value := value + dd.Quantity();
                    tooltip := tooltip + '<tr><td>' + dd.PeriodTask_MP().Process_MP().Name() + '</td><td>' 
                               + dd.Quantity().AsQUILL() + '</td></tr>';              
                }
    }
    else
    {
      traverse(  operations, Elements.PeriodTask_MP.NewSupply, ns, 
                 exists( pisps, Elements, e, e = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP() )
                 and ns.Start() >= period.Start()
                 and ns.End() <= period.End() )
                 {
                    value := value + ns.Quantity();
                    tooltip := tooltip + '<tr><td>' + ns.PeriodTask_MP().Process_MP().Name() + '</td><td>' 
                               + ns.Quantity().AsQUILL() + '</td></tr>';                
                 }  
    }
    
    // Sum for multi operation routing step
    if( operations.Size() > 1 )
    {
      tooltip := tooltip + '<tr><td><b>All</td><td>' + value.AsQUILL() + '</td></tr></table>';
    }
    
    return value;
  *]
}