Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SetOptTransitionQuantity ( 
 | 
  LibOpt_Task task 
 | 
) 
 | 
{ 
 | 
  Description: 'move over quantities from combi world onto period task in transition' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // opt transition periodtask are linked to from-campaign by campaing sequence optimizer  
 | 
    this.Quantity( 0.0 );  
 | 
     
 | 
    if ( not isnull( this.TransitionPeriod_MP() ) )  
 | 
    { 
 | 
      fromcampaign := this.TransitionPeriod_MP().Transition_MP().FromCampaign();  
 | 
      transitionperiod := this.TransitionPeriod_MP();  
 | 
       
 | 
      traverse( fromcampaign,  
 | 
                OptCampaignPeriodTaskInCombiElement,  
 | 
                optpt )  
 | 
      { 
 | 
        val1 := guard( optpt.OptCampaignCombiElement().OptCampaignElementType().astype( OptCampaignTransitionType ).TransitionType_MP() = this.TransitionType_MP(), false ) ;  
 | 
        val2 := optpt.Operation() = this.OperationInTransition().OperationInTransitionType().Operation();  
 | 
        if ( val1 and val2 )  
 | 
        { 
 | 
          elt := optpt.OptCampaignCombiElement().astype( OptCampaignCombiElementTransition );  
 | 
          ocusp := elt.OptCampaignUnitSubPeriod();  
 | 
           
 | 
          use := ocusp.UnitPeriod() = transitionperiod.UnitPeriod();  
 | 
          if ( not use and elt.OptimizerDuration() = Duration::Zero() )  
 | 
          { 
 | 
            use := elt.IsFirstElementInUnitSubPeriod() and guard( ocusp.PreviousSubPeriod().UnitPeriod() = transitionperiod.UnitPeriod(), false ) // at the combi level the first elt could still continue the previous period combi transition 
 | 
                   or ( elt.IsLastElementInUnitSubPeriod() and guard( ocusp.NextSubPeriod().UnitPeriod() = transitionperiod.UnitPeriod(), false ) ) // at the combi level the last elt can start the new transition (continued in next period) 
 | 
          } 
 | 
         
 | 
          if ( use )  
 | 
          { 
 | 
            this.Quantity( this.Quantity() + optpt.Quantity() );  
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      if ( not isnull( task ) )  
 | 
      { 
 | 
        task.Log( 'null transition period' + [String] this.PeriodTaskOperation().Start() + this.PeriodTaskOperation().OperationID() +  guard( this.TransitionType_MP().Name(), 'transtype unknown' ) );  
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Extensible' } 
 | 
} 
 |