| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod GetProcessQuantity ( | 
|   Period_MP period, | 
|   Lane lane, | 
|   ProductInStockingPoint_MPs pisps, | 
|   ProductInStockingPoint_MP targetpisp, | 
|   Boolean isdependentdemand, | 
|   Boolean isupstream, | 
|   output String tooltip | 
| ) declarative remote as Real | 
| { | 
|   Description: 'Return quantities of a lane to pisps in a period or pisp to a lane in a period' | 
|   TextBody: | 
|   [* | 
|     value := 0.0; | 
|      | 
|     // Insert table tag for tooltip | 
|     // Lane name | 
|     tooltip := "<table>"; | 
|     tooltip := tooltip + '<tr><td><b>Lane: </b></td><td>'  | 
|                + lane.Name() + '</td></tr>'; | 
|      | 
|     // Unit name | 
|     tooltip := tooltip + '<tr><td><b>Unit: </b></td><td>'  | 
|                + lane.Unit().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>'; | 
|      | 
|     // Lanelegs and products headers | 
|     tooltip := tooltip + '<table><tr><td><b>Lane leg:</b></td><td><b>'  | 
|                + select( pisps, Elements, e, true ).Product_MP().Name() + ' quantity: </b></td></tr>'; | 
|      | 
|     if( isdependentdemand ) | 
|     { | 
|       if( not isupstream ) | 
|       { | 
|         traverse( lane, LaneLeg.Trip.PeriodTaskLaneLeg.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 | 
|       { | 
|         lanelegs := selectset( lane, LaneLeg, ll, | 
|                                ll.AsDestinationStockingPointLeg().StockingPoint_MP() = targetpisp.StockingPoint_MP() ); | 
|      | 
|         traverse( lanelegs, Elements.Trip.PeriodTaskLaneLeg.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 | 
|     { | 
|       if( isupstream ) | 
|       { | 
|         traverse( lane, LaneLeg.Trip.PeriodTaskLaneLeg.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>'; | 
|                   } | 
|       } | 
|       else | 
|       { | 
|         lanelegs := selectset( lane, LaneLeg, ll, | 
|                                ll.AsOriginStockingPointLeg().StockingPoint_MP() = targetpisp.StockingPoint_MP() ); | 
|          | 
|         traverse( lanelegs, Elements.Trip.PeriodTaskLaneLeg.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>';                | 
|                   } | 
|       } | 
|     }  | 
|      | 
|     tooltip := tooltip + '</table>'; | 
|      | 
|     return value; | 
|   *] | 
| } |