Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method ConvertInventorySpecificationToSafetyStocks 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    updates := construct( InventorySpecifications ); 
 | 
     
 | 
    // Always create safety stock regardless if target = 0 
 | 
    traverse( this, Product_MP.InventorySpecification, inv ) 
 | 
    { 
 | 
      safetystock := SafetyStock::FindTypeIndexSafetyStock( inv.ProductID(), inv.StockingPointID(), inv.Start() ); 
 | 
      if( isnull( safetystock) ) 
 | 
      { 
 | 
        product := Product_MP::FindProductTypeIndex( inv.ProductID() ); 
 | 
        stockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( inv.StockingPointID() ); 
 | 
        if ( not isnull( product ) and not isnull( stockingpoint ) ) 
 | 
        { 
 | 
          SafetyStock::Create( product, 
 | 
                               stockingpoint, 
 | 
                               inv.Start(), 
 | 
                               inv.HasTargetInDays_DELETED_Nov19(), 
 | 
                               inv.TargetInDays_DELETED_Nov19(), 
 | 
                               inv.TargetInQuantity_DELETED_Nov19(), 
 | 
                               inv.IsCalculated(), 
 | 
                               not inv.IsCalculated(), 
 | 
                               not inv.IsManuallyConfigured() ); 
 | 
           
 | 
          updates.Add( inv ); 
 | 
        }                        
 | 
      } 
 | 
       
 | 
      // Delete inventory spec thas has no min and no max levels defined 
 | 
      // If max level checked and value 0, respect user decision and don't remove  
 | 
      traverse( updates, Elements, in, not in.HasMinLevel() and not in.HasMaxLevel() )  
 | 
      { 
 | 
        in.Delete(); 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
} 
 |