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
38
39
40
41
42
Quintiq file version 2.0
#parent: #root
Function CalcShelfLifeAgeQuantityVectorAsBinaryValue
{
  TextBody:
  [*
    pispippl := this.ProductInStockingPointInPeriodPlanningLeaf();
    product := pispippl.ProductInStockingPoint_MP().Product_MP();
    if( product.HasShelfLifeOrMaturation() and not isnull( pispippl.ShelfLife() )  )
    {
      quantityvector := RealVector::Construct();
      agevector := RealVector::Construct();
      shelflifefulfilled := 0.0;
    
      shelflife := pispippl.ShelfLife();  
      
      // Retrieve the vectors from PISPIP
      source_quantityvector := RealVector::Construct( shelflife.ShelfLifeDDQuantityVectorAsBinaryValue() );
      source_agevector := RealVector::Construct( shelflife.ShelfLifeDDAgeVectorAsBinaryValue() );
      source_indexvector := NumberVector::Construct( shelflife.ShelfLifeDDIndexVectorAsBinaryValue() );
      
      // Get this DependentDemand's index within the sorted set
      sorted_dds := ProductInStockingPointInPeriod::GetSortedDependentDemands( pispippl );
      current_index := sorted_dds.Find( this );
      
      // Get the vectors for this DependentDemand
      isforcurrentvector := source_indexvector.Equals( current_index );
      dd_quantityvector := source_quantityvector.GetSelection( isforcurrentvector );
      dd_agevector := source_agevector.GetSelection( isforcurrentvector );
      
      quantityvector.Append( dd_quantityvector );
      agevector.Append( dd_agevector );
      
      // Calculate the shelf life fulfilled quantity for dependent demand both from trip and routing
      shelflifefulfilled := quantityvector.Sum();
    
      this.ShelfLifeQuantityVectorAsBinaryValue( quantityvector.AsBinaryValue() );
      this.ShelfLifeAgeVectorAsBinaryValue( agevector.AsBinaryValue() );
      this.ShelfLifeFulfilledQuantity( shelflifefulfilled );
    }
  *]
}