| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod GetMinimumManufacturedDate ( | 
|   Product_MP product, | 
|   MacroPlan macroplan, | 
|   Date date | 
| ) declarative remote as Date | 
| { | 
|   TextBody: | 
|   [* | 
|     // This is the same logic with InventorySupply.CalcProductInStockingPointInPeriodPlanningLeaf relation | 
|     period := select( macroplan, Period_MP, p, | 
|                       p.IsPlanning(), | 
|                       ifexpr( p.IsInHour(), | 
|                               p.IsFirstPeriodOfDay() // If period is in hours, choose the one that is the first period of the same day | 
|                               and p.StartDate() = date, | 
|                               p.StartDate() <= date | 
|                               and p.EndDate() > date ) ); | 
|          | 
|     value := Date::MinDate(); | 
|     // Check if product has shelf-life | 
|     if( not isnull( period ) | 
|         and product.HasShelfLifeOrMaturation() ) | 
|     { | 
|       periodstartdate := period.StartDate(); | 
|      | 
|       shelflife := ifexpr( product.HasShelfLife(), round( product.ShelfLife() ), 0 ); | 
|       value := periodstartdate - shelflife | 
|        | 
|       if( not macroplan.GlobalParameters_MP().IsUsableIfExpiredWithinPeriod()  | 
|           and product.HasShelfLife() ) | 
|       { | 
|         value := value + 1; | 
|       } | 
|      | 
|     } | 
|      | 
|     return value; | 
|   *] | 
| } |