Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod GetProcessQuantity ( 
 | 
  ProductInStockingPointInPeriod pispip, 
 | 
  output String tooltip 
 | 
) declarative remote as Real 
 | 
{ 
 | 
  Description: 'Return quantities of a pispip related sales demands.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    quantity := 0.0 
 | 
    fulfilledQuantity := 0.0 
 | 
    unfulfilledQuantity := 0.0 
 | 
    totalQuantity := 0.0 
 | 
    totalFulfilledQuantity := 0.0 
 | 
    totalUnfulfileldQuantity := 0.0 
 | 
    // Insert table tag for tooltip 
 | 
    // Product 
 | 
    tooltip := "<table>"; 
 | 
    tooltip := tooltip + '<tr><td><b>Product: </b></td><td>'  
 | 
               + pispip.ProductInStockingPoint_MP().Product_MP().Name() + '</td></tr>'; 
 | 
     
 | 
    // Routing name 
 | 
    tooltip := tooltip + '<tr><td><b>Stocking point: </b></td><td>'  
 | 
               + pispip.ProductInStockingPoint_MP().StockingPoint_MP().Name() + '</td></tr>'; 
 | 
     
 | 
    // Period 
 | 
    tooltip := tooltip + '<tr><td><b>Period: </b></td><td>'  
 | 
               + pispip.Start().Format( 'D-MM-Y' ) + ' until ' + pispip.End().Format( 'D-MM-Y' ) + '</td></tr>';  
 | 
     
 | 
    // A separating line 
 | 
    tooltip := tooltip + '</table><hr>'; 
 | 
     
 | 
    // Headers 
 | 
    tooltip := tooltip + '<table><tr><td><b>Sales segment:</b></td>'  
 | 
               + '<td><b>Quantity:</b></td>' 
 | 
               + '<td><b>Fulfilled:</b></td>' 
 | 
               + '<td><b>Unfulfilled:</b></td>' 
 | 
               + '<td><b>Price:</b></td><td></tr>'; 
 | 
     
 | 
    // Sort them w.r.t sales segment name for grouping 
 | 
    sdips := selectsortedset( pispip, SalesDemandInPeriodBase, sdip, true, sdip.SalesSegmentName() ); 
 | 
    ssName := sdips.Element( 0 ).SalesSegmentName(); 
 | 
     
 | 
    traverse( sdips, Elements, e ) 
 | 
    { 
 | 
      // When we see a different sales segment, create a new row for tooltip 
 | 
      if( ssName <> e.SalesSegmentName() ) 
 | 
      { 
 | 
        tooltip := tooltip + '<tr><td>' + ssName + '</td>'  
 | 
                   + '<td>' + quantity.AsQUILL() + '</td>' 
 | 
                   + '<td>' + fulfilledQuantity.AsQUILL() + '</td>' 
 | 
                   + '<td>' + unfulfilledQuantity.AsQUILL() + '</td>' 
 | 
                   + '<td>' + e.Price().AsQUILL() + '</td>';     
 | 
         
 | 
        // Reset value 
 | 
        ssName := e.SalesSegmentName(); 
 | 
        quantity := 0; 
 | 
        unfulfilledQuantity := 0; 
 | 
        fulfilledQuantity := 0; 
 | 
      } 
 | 
       
 | 
      quantity := quantity + e.Quantity(); 
 | 
      fulfilledQuantity := fulfilledQuantity + e.FulfilledQuantity(); 
 | 
      unfulfilledQuantity := unfulfilledQuantity + e.UnfulfilledQuantity(); 
 | 
      totalQuantity := totalQuantity + e.Quantity(); 
 | 
      totalFulfilledQuantity := totalFulfilledQuantity + e.FulfilledQuantity(); 
 | 
      totalUnfulfileldQuantity := totalUnfulfileldQuantity + e.UnfulfilledQuantity(); 
 | 
    } 
 | 
    // Last row handling 
 | 
    tooltip := tooltip + '<tr><td>' + ssName + '</td>'  
 | 
               + '<td>' + quantity.AsQUILL() + '</td>' 
 | 
               + '<td>' + fulfilledQuantity.AsQUILL() + '</td>' 
 | 
               + '<td>' + unfulfilledQuantity.AsQUILL() + '</td>' 
 | 
               + '<td>' + sdips.Element( sdips.Size() - 1 ).Price().AsQUILL() + '</td>'; 
 | 
     
 | 
    // Sum for multi sales segment demands 
 | 
    if( selectuniquevalues( sdips, Elements, e, true, e.SalesSegmentName() ).Size() > 1 ) 
 | 
    { 
 | 
      tooltip := tooltip + '<tr><td><b>All</b></td>'  
 | 
                 + '<td>' + totalQuantity.AsQUILL() + '</td>' 
 | 
                 + '<td>' + totalFulfilledQuantity.AsQUILL() + '</td>' 
 | 
                 + '<td>' + totalUnfulfileldQuantity.AsQUILL() + '</td></table>' 
 | 
    } 
 | 
     
 | 
    // Return fulfilled quantity sum 
 | 
    return totalFulfilledQuantity; 
 | 
  *] 
 | 
} 
 |