| Quintiq file version 2.0 | 
| #parent: #root | 
| Method PlanMinimum | 
| { | 
|   Description: 'Plan minimum quantity required by this transition' | 
|   TextBody: | 
|   [* | 
|     this.SynchronizePeriodTaskInTransitions(); | 
|     Transaction::Transaction().Propagate( relation( TransitionPeriod_MP, PeriodTaskInTransition ) ); | 
|     planningperiods := selectsortedset( this, PlanningTransitionPeriod, period, true, period.Start() ); | 
|     minquantity := 0.0; | 
|      | 
|     if( not this.TransitionType_MP().IsDuration() ) | 
|     { | 
|       minquantity := this.TransitionType_MP().DefaultMinQuantity();   | 
|     } | 
|     else | 
|     { | 
|       minquantity := this.TransitionType_MP().MinOperationInTransitionType().Throughput() * this.Duration().DaysAsReal() * 24 ; | 
|     } | 
|      | 
|     remainingqty := maxvalue(  minquantity - this.FulfilledQuantity(), 0.0 ); | 
|      | 
|     traverse( planningperiods, Elements.PeriodTaskInTransition, ptc ) | 
|     { | 
|       periodtask := ptc.PeriodTaskOperation(); | 
|       transitionperiod := ptc.TransitionPeriod_MP(); | 
|          | 
|       qty :=  transitionperiod.Duration().DaysAsReal() * 24 * this.TransitionType_MP().MinOperationInTransitionType().Throughput(); | 
|       ptcremaining := abs( ptc.Quantity() - qty ) | 
|        | 
|       ptc.Quantity( ptcremaining + ptc.Quantity() ); | 
|       // if only use UserQuantity when HasUserQuantity is true, when reset only HasUserQuantity is set to false but UserQuantity is not reset | 
|       periodtask.Update( ifexpr( periodtask.HasUserQuantity(), periodtask.UserQuantity(), periodtask.Quantity() ) + ptcremaining, true );     | 
|       remainingqty := remainingqty - ptcremaining; | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |