yanweiyuan3
2023-08-09 588bc7829387dfc761cc25f06f77d4c81818bd10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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;
  *]
}