Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method VerifyQuantityInvSpecPISPIPInvLevelEnd ( 
 | 
  Product_MP product, 
 | 
  StockingPoint_MP stockingPoint, 
 | 
  DateTime start, 
 | 
  DateTime end, 
 | 
  Number numberOfPeriods 
 | 
) 
 | 
{ 
 | 
  Description: 'Verify PISPIP in range of periods inventory level end amount is adhered to respective inventory specification configuration.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Verify Min Max inventory level calculation 
 | 
    /* 
 | 
    For the months when min inventory level is defined in quantity, the value is the same as what's defined in inventory specifications. 
 | 
    */ 
 | 
    pisp := product.FindProductInStockingPoint( stockingPoint.ID() ); 
 | 
    pispips := selectset( pisp, ProductInStockingPointInPeriodPlanning, p, p.Start() >= start and p.Start() < end ); 
 | 
    uom := pisp.UnitOfMeasureName(); 
 | 
     
 | 
    // Verify number of periods is correct 
 | 
    this.Run().AssertEqual( numberOfPeriods, pispips.Size() ) 
 | 
    traverse( pispips, Elements, pispip ) 
 | 
    { 
 | 
       
 | 
      minInv := pispip.InventorySpecification().MinLevelInQuantity(); 
 | 
      maxInv := pispip.InventorySpecification().MaxLevelInQuantity(); 
 | 
      expectedInvLevelEndIsWithin := minInv <= pispip.InventoryLevelEnd() and pispip.InventoryLevelEnd() <= maxInv 
 | 
       
 | 
      this.Run().AssertTrue( expectedInvLevelEndIsWithin, 
 | 
                             'Verify ' + pisp.Name() + ' by ' + [String] pispip.Start()  
 | 
                                       + ' has inventory level end of [' + [String]pispip.InventoryLevelEnd().Round( 2 ) + ' ' + uom 
 | 
                                       + ' ] within min [' + [String]minInv + ' ' + uom + '] and max [' + [String]maxInv + ' ' + uom + ' ]' ); 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |