| 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; | 
|   *] | 
| } |