Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Synchronize ( 
 | 
  FeedbackProductInTrips feedbackpits 
 | 
) as owning ProductInTrips 
 | 
{ 
 | 
  Description: 'Create missing product in trips for feedback.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    pits := construct( ProductInTrips ); 
 | 
     
 | 
    if( feedbackpits.Size() > 0 ) 
 | 
    { 
 | 
        // Propagate relations that are needed for feedbacks. 
 | 
      Transaction::Transaction().Propagate( relation( Feedback, UnitPeriod ) ); 
 | 
      // Propagate relations that are needed for feedbacks. 
 | 
      Transaction::Transaction().Propagate( relation( FeedbackProductInTrip, LaneLeg ) ); 
 | 
      // Propagate relations that are needed for feedbacks. 
 | 
      Transaction::Transaction().Propagate( relation( FeedbackProductInTrip, LaneLegOutput ) ); 
 | 
      // Propagate relations that are needed for feedbacks. 
 | 
      Transaction::Transaction().Propagate( relation( FeedbackProductInTrip, ProductInTrip ) ); 
 | 
     
 | 
      // Traverse all feedbacks of product in trip that is valid 
 | 
      traverse( feedbackpits, Elements, feedback, 
 | 
                feedback.GetIsValidFeedback() ) 
 | 
      { 
 | 
        // Get the associated ProductInTrip and LaneLeg of the current feedback 
 | 
        pit := feedback.ProductInTrip(); 
 | 
        laneleg := feedback.LaneLeg(); 
 | 
       
 | 
        // Check if ProductInTrip is null 
 | 
        if( isnull( pit ) ) 
 | 
        { 
 | 
          // Check if LaneLeg is enabled 
 | 
          if( guard( laneleg.GetIsEnabled(), false ) ) 
 | 
          { 
 | 
            // Get the associated Trip and Product 
 | 
            trip := feedback.Trip(); 
 | 
            product := guard( feedback.LaneLegOutput().ProductInStockingPoint_MP().Product_MP(), null( Product_MP ) ) 
 | 
       
 | 
            // Check if product is null 
 | 
            if( not isnull( product ) ) 
 | 
            { 
 | 
              // Check if trip is null, create one of trip is null 
 | 
              if( isnull( trip ) ) 
 | 
              { 
 | 
                arrival := Trip::GetTripArrivalDate( feedback.UnitPeriod().Period_MP(), laneleg ); 
 | 
                trip := Trip::Create( laneleg, arrival ); 
 | 
              } 
 | 
       
 | 
              // Associate product to the trip 
 | 
              trip.AddProduct( product, 0.0, false ); 
 | 
       
 | 
              // Propagate the declerative relations for new create trip to feedback 
 | 
              Transaction::Transaction().Propagate( relation( ProductInTrip, FeedbackProductInTrip ) ); 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
       
 | 
        // Check if ProductInTrip is null 
 | 
        if( not isnull( pit ) ) 
 | 
        { 
 | 
          pits.Add( pit ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return &pits; 
 | 
  *] 
 | 
} 
 |