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
Quintiq file version 2.0
#parent: #root
Function CalcShelfLifeEndAgeAndQuantityVectorAsBinaryValue
{
  TextBody:
  [*
    // Get the shelf life supply vectors
    quantityvector := RealVector::Construct( this.ShelfLifePlannedEndQuantityVectorAsBinaryValue() );
    agevector := RealVector::Construct( this.ShelfLifePlannedEndAgeVectorAsBinaryValue() );
    pispippl := this.ProductInStockingPointInPeriodPlanningLeaf();
    
    // Check if the product has shelf life or maturation
    // Also check if this PISPIP has actuals, if it has, inventory end will use the value from actuals instead
    if( guard( pispippl.ProductInStockingPoint_MP().Product_MP().HasShelfLifeOrMaturation(),
               false )
        and pispippl.Period_MP().IsHistorical() 
        and pispippl.GetHasActual() )
    {
      quantityvector.Resize( 0 );
      agevector.Resize( 0 );
      
      traverse( pispippl, ActualProductInStockingPointInPeriod, actualpispip,
                actualpispip.ActualInventoryLevelEnd() > 0 )
      {
        agevector.Append( actualpispip.Age() );
        quantityvector.Append( actualpispip.ActualInventoryLevelEnd() );
      }
      
      ShelfLife::MergeVectorAccordingToAgeAndExpiration( quantityvector, agevector, pispippl, pispippl.End() );
    }
    
    this.ShelfLifeEndAgeVectorAsBinaryValue( agevector.AsBinaryValue() );
    this.ShelfLifeEndQuantityVectorAsBinaryValue( quantityvector.AsBinaryValue() );
  *]
}