Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method PostProcessDetailScheduleFeedback ( 
 | 
  Boolean isgeneratezerofeedback, 
 | 
  output FeedbackPeriodTaskOperations updates, 
 | 
  output FeedbackPeriodTaskOperations existings 
 | 
) 
 | 
{ 
 | 
  Description: 'Only generate zero feedback for operation without feedback within the mp sc schedule horizon' 
 | 
  TextBody: 
 | 
  [* 
 | 
    if( isgeneratezerofeedback ) 
 | 
    { 
 | 
      operations := selectset( this, Unit.Operation, operation, not isnull( operation.AsOperationForOptimization() ) ); 
 | 
      feedbacks := selectsortedset( updates, Elements, f, true, f.DateTime() ); 
 | 
       
 | 
      schorizonstart := guard( feedbacks.First().DateTime(), DateTime::MaxDateTime() ); 
 | 
      schorizonend := guard( feedbacks.Last().DateTime(), DateTime::MinDateTime() ); 
 | 
       
 | 
      planningperiods := selectsortedset( this, PlanningPeriod, pp, pp.Start()>= schorizonstart and pp.Start()<= schorizonend , pp.Start() );                        
 | 
       
 | 
      if ( planningperiods.Size() > 0 ) 
 | 
      { 
 | 
        canbedeleted := existings.Difference( updates ); 
 | 
         
 | 
        traverse( operations, Elements, op ) 
 | 
        { 
 | 
            traverse( planningperiods, Elements, pp ) 
 | 
            { 
 | 
                //check on newly updated or created feedback 
 | 
                feedback := select( feedbacks,  
 | 
                                    Elements,  
 | 
                                    updatedfeedback,  
 | 
                                    pp.IsInPeriod( updatedfeedback.DateTime(), updatedfeedback.DateTime() ) and updatedfeedback.OperationID() = op.ID() ); 
 | 
                 
 | 
                //  only check on old feedback if cannot found 
 | 
                if ( isnull( feedback ) )  
 | 
                { 
 | 
                  feedback := select( canbedeleted,  
 | 
                                      Elements,  
 | 
                                      oldfeedback,  
 | 
                                      pp.IsInPeriod( oldfeedback.DateTime(), oldfeedback.DateTime() ) and oldfeedback.OperationID() = op.ID() ); 
 | 
                   
 | 
                  //create if not found                                           
 | 
                  if ( isnull( feedback ) ) 
 | 
                  { 
 | 
                       feedback := FeedbackPeriodTaskOperation::Create( this, 
 | 
                                                            this.IDHolder().GetFeedbackID(), 
 | 
                                                            guard( op.ID(), '' ), 
 | 
                                                            pp.Start(), 
 | 
                                                            0.0, 
 | 
                                                            '', 
 | 
                                                            true /*isplannedexact*/, 
 | 
                                                            false ); /*isfromdb*/ 
 | 
                                                             
 | 
                  } 
 | 
                  else // update feedbackquantity if found 1 
 | 
                  { 
 | 
                      feedback.FeedbackQuantity( 0.0 ); 
 | 
                  } 
 | 
                   
 | 
                  updates.Add( feedback ); 
 | 
                } 
 | 
                                                               
 | 
            } 
 | 
         
 | 
        }                        
 | 
       
 | 
      }                        
 | 
                                
 | 
    } 
 | 
  *] 
 | 
} 
 |