function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
samsam 

How to create new order using same order when status is changed to draft using apex without button

Shiraz HodaShiraz Hoda

Hi Sam,

By default order status will be draft unless you change it through trigger. So if you want a new order to be created it might go in recursion unless you stop it with some static variable.

samsam
Hi Shiraz
After deactivating order i have to create new order with existing order but if we want to know whether order is deactivated i though status is draft
Can you help me with the solution
AnkaiahAnkaiah (Salesforce Developers) 
Hi Sam,

try with below code and modify the API names as per your org.
trigger newordercreation on order (after update) {
    
    List<order> odrerlistcreate = new List<order>();

    for(order or : Trigger.New) {	
	If(or.Status__c == 'Draft' && or.Status__c!=trigger.oldmap.get(or.id).Status__c){
	
	//insert the fields you want and copy any field values needed from draft record by using or variable  ex: or.AccountId;
	order neworder = new order();
	neworder.Name = 'Test';
	neworder.statu__c = 'In Progress';
	neworder.AccountId = or.AccountId;
	
	odrerlistcreate.add(neworder);
		
	}
}

	insert odrerlistcreate;
}

If this helps, Please mark it as best answer.

Thanks!!
Shiraz HodaShiraz Hoda

Hi Sam,

If you need to create order, I suppose you will need to copy order item as well. Please find below code which will help you achieve the same. Let me know if you like the solution and mark it as best answer. Thanks in advance.

Trigger OrderTrigger on order (after update) {
    
    List<order> orderlistToInsert = new List<order>();
    set<Id> orderIdSet = new set<Id>();
    Map<Id, String> mapOrderIdNewOrderName = new Map<Id, String>();
    List<OrderItem> orderItemListToInsert = new List<OrderItem>();
    map<String,Id> mapNameandId = new Map<String,Id>();
    for(order ord : Trigger.New) {
    orderIdSet.add(ord.Id);    
    String newOrderName = ord.Name+'-'+ord.Id;
    If(ord.Status__c == 'Draft' && ord.Status__c!=trigger.oldmap.get(ord.id).Status__c){
    order neworder = new order();
    neworder.Name = ord.Name+'-'+ord.Id;
    neworder.status__c = 'In Review';
    neworder.AccountId = ord.AccountId;
    orderlistToInsert.add(neworder);
    mapOrderIdNewOrderName.put(ord.Id,neworderName);
        
    }
}
   
   if(!orderlistToInsert.isEmpty()){
    insert odrerlistToInsert;
    for(Order ord:odrerlistToInsert){
        mapNameandId.put(ord.Name,ord.Id);
    }
    }
     for(OrderItem item: [select Id, orderId, ListPrice, Product2Id,Quantity, TotalLineAmount from orderItem where Id IN: orderIdSet]){
        orderItem oi = new orderItem();
        oi.Product2Id = item.Product2Id;
        oi.ListPrice=item.ListPrice; 
        oi.TotalLineAmount = item.ListPrice;
        oi.Quantity = item.Quantity;
        oi.orderId = mapNameandId.get(mapOrderIdNewOrderName.get(item.orderId));
        orderItemListToInsert.add(oi);
        
    }
    if(!orderItemListToInsert.isEmpty()){
    insert orderItemListToInsert;
    }