Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod GetMinimumManufacturedDate ( 
 | 
  Product_MP product, 
 | 
  StockingPoint_MP stockingpoint, 
 | 
  Date actualdate 
 | 
) declarative remote as Date 
 | 
{ 
 | 
  Description: 'Returns the allowed minimum manufactured date that the product will not expires before/within this period.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    value := Date::MinDate(); 
 | 
     
 | 
    pisp := select(  product, PISPSpecification, spec, spec.StockingPoint_MP()= stockingpoint ); 
 | 
     
 | 
    //hasshelf life and not IsExcludeShelfLifeAndMaturation 
 | 
    hasshelflife := guard( product.HasShelfLifeOrMaturation(), false )  
 | 
                    and not guard( pisp.IsExcludeShelfLifeAndMaturation(), false) 
 | 
     
 | 
    // Check if product has shelf-life 
 | 
    if( hasshelflife ) 
 | 
    { 
 | 
      // if only has maturation but no shelflife, set mfg date to the period's end date 
 | 
      shelflife := ifexpr( product.HasShelfLife(), round( product.ShelfLife() ), 0 ); 
 | 
       
 | 
      value := actualdate - shelflife; 
 | 
     
 | 
      if( not product.MacroPlan().GlobalParameters_MP().IsUsableIfExpiredWithinPeriod()  
 | 
          and product.HasShelfLife() ) 
 | 
      { 
 | 
        value := value + 1; 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return value; 
 | 
  *] 
 | 
} 
 |