Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Stockin ( 
 | 
  ProductInStockingPoint_MP pisp, 
 | 
  Number period, 
 | 
  Real target 
 | 
) as Real 
 | 
{ 
 | 
  Description: 'Ask Quintiq for the predicted service level of a PISP, period and specific target.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // this will calculate the service level 
 | 
     
 | 
    // on leaf location, simply call stockin_leaf and store the distributions for new supply and starting stock   
 | 
     
 | 
    stockin_p := -1.0; // reset in both branches 
 | 
    pispip := pisp.GetPISPIPFromPeriodNumber( period );  
 | 
     
 | 
    if ( pisp.MEIO_IsLeaf() )  
 | 
    { 
 | 
      stockin_p := this.StockinLeaf( pisp, period, target );  
 | 
    } 
 | 
    else // if location is not leaf, we take weighted average of the child nodes on the periods that are period+leadtimeToChild for each child 
 | 
    { 
 | 
      weighted := 0.0;  
 | 
      totalDemand := 0.0;  
 | 
      pispip.MEIO_Target( target );  
 | 
      traverse( MEIO_Engine::GetTreePISP( pisp ), Elements, child )  
 | 
      { 
 | 
        period_scope := period +this.GetLeadTime( child, pisp ) 
 | 
        if( period_scope <= this.LastPeriodNumber() ) 
 | 
        { 
 | 
          totalDemand := totalDemand + MEIO_Engine::GetDemandExpectedValue( child, period_scope );  
 | 
          mytarget := child.GetPISPIPFromPeriodNumber( period_scope ).MEIO_Target();  
 | 
          weighted := weighted  
 | 
                      + ( MEIO_Engine::GetDemandExpectedValue( child, period_scope )  
 | 
                          * this.StockinLeaf( child, period_scope, mytarget  ) )  
 | 
        } 
 | 
      } 
 | 
      if( totalDemand > 0) 
 | 
      { 
 | 
        stockin_p := weighted / totalDemand   
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        stockin_p := 1 
 | 
      }  
 | 
    } 
 | 
    pispip.MEIO_Stockin( stockin_p); 
 | 
    return stockin_p 
 | 
  *] 
 | 
} 
 |