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