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
43
44
45
46
47
48
49
50
Quintiq file version 2.0
#parent: #root
FunctionOverride CalcQuantity
{
  TextBody:
  [*
    value := 0.0;
    
    if( this.IsDependentDemandOfTrip() )
    {
      value := this.ProductInTrip().QuantityInProcessUOM()
               * this.ProcessInput().Factor()
               * this.ProcessInput().PISPConversionFactor();
    
    }    
    else //Period task operation
    {  
      pto := this.PeriodTask_MP().astype( PeriodTaskOperation );
        
      //dd manual plan, use user qty
      if( pto.HasDependentDemandUserQuantity() )
      {
        value := this.UserQuantity();
      }  
      else if( guard( this.DependentDemandInputGroup().IsLockedByUser() , false ) )
      {
        value := this.GetRelativeDDGroupOptimizerFulfilledQuantity();
      }
      else if( this.ProcessInput().IsElementOfInputGroup() )  
      {
        // Optimizer fulfilled quantity of DD of group in a pispip is reset if user change the new supply of the pispip.
        // If this is the case, all the DD belongs to the group will be reset to 0 and the groupfulfilledqty will be = 0 and we have to take default factor instead.
        groupfulfilledqty := sum( this, DependentDemandInputGroup.PeriodTaskOperation.DependentDemandInputGroup, group,
                                  group.OperationInput().OperationInputGroup() = this.DependentDemandInputGroup().OperationInput().OperationInputGroup(),
                                  group.OptimizerFulfilledQuantity() );
        
        if( groupfulfilledqty > 0 )
        { 
          value := this.GetRelativeDDGroupOptimizerFulfilledQuantity();
        }
      }
      else //dd no manual plan, derive qty
      {          
        relativeduration := this.RelativeDuration();
        value := PeriodTaskOperation::GetDependentDemandQuantity( this.PeriodTask_MP().Quantity(), this.ProcessInput(), relativeduration );
      }
    }
    this.Quantity( value );
  *]
}