| 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; | 
|   *] | 
| } |