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 ); 
 | 
  *] 
 | 
} 
 |