Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method Copy ( 
 | 
  RoutingStep newroutingstep 
 | 
) as Operation 
 | 
{ 
 | 
  Description: 'Duplicate the entire operation (including input product groups + input output products + costs)' 
 | 
  TextBody: 
 | 
  [* 
 | 
    idholder := this.MacroPlan().IDHolder(); 
 | 
    routing := newroutingstep.Routing(); 
 | 
    unit := this.Unit(); 
 | 
     
 | 
    // Get the concatenated ID of routing, newroutingstep, and unit as Operation's ID 
 | 
    id := Operation::GetConcatenatedID( routing.ID(), newroutingstep.Name(), unit.ID() ); 
 | 
     
 | 
    // Create new Operation with information of this Operation 
 | 
    newoperation := Operation::Create( id, 
 | 
                                       unit, 
 | 
                                       id, 
 | 
                                       newroutingstep, 
 | 
                                       this.LeadTime(), 
 | 
                                       this.StandardDeviationLeadTime(), 
 | 
                                       this.Throughput(), 
 | 
                                       this.HasUserLotSize(), 
 | 
                                       this.UserMinimumQuantity(), 
 | 
                                       this.HasUserMaximumQuantity(), 
 | 
                                       this.UserMaximumQuantity(), 
 | 
                                       this.UserLotSize(), 
 | 
                                       this.CO2Emission(), 
 | 
                                       false, 
 | 
                                       false ); 
 | 
     
 | 
    // Copy OperationCosts of this Operation to the new Operation 
 | 
    traverse( this, OperationCost, operationcost ) 
 | 
    { 
 | 
      // Select UnitAccount 
 | 
      accountassignment := select( unit, UnitAccount, ua, 
 | 
                                   ua.Account_MP() = operationcost.AccountAssignment().Account_MP() 
 | 
                                   and ua.CostDriver() = operationcost.AccountAssignment().CostDriver() ); 
 | 
     
 | 
      // Create OperationCost for the new Operation if UnitAccount is found 
 | 
      if( not isnull( accountassignment ) ) 
 | 
      { 
 | 
        OperationCost::Create( idholder.GetOperationCostID(), 
 | 
                               newoperation, 
 | 
                               accountassignment.Account_MP(), 
 | 
                               accountassignment.CostDriver(), 
 | 
                               operationcost.Start(), 
 | 
                               operationcost.TimeUnit(), 
 | 
                               operationcost.LengthOfTime(), 
 | 
                               operationcost.Cost(), 
 | 
                               false ); 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // Copy OperationBOM from this Operation to the new Operation 
 | 
    traverse( this, OperationBOM, ob ) 
 | 
    { 
 | 
      ob.Copy( newoperation ); 
 | 
    } 
 | 
     
 | 
    // Copy OpearationInputGroup of this Operation to the new Operation 
 | 
    traverse( this, OperationInputGroup, inputgroup ) 
 | 
    { 
 | 
      inputgroup.Copy( newoperation ); 
 | 
    } 
 | 
     
 | 
     
 | 
    return newoperation; 
 | 
  *] 
 | 
} 
 |