Create purchase orders from sales orders at just the click of a button
Business scenario:
Inventory control is an integral part of any order fulfilment process. Unless you have the required inventory, you’d not be able to fulfil your deals on time. The logical next step once your customer accepts your Estimate/Quote is to issue a Sales Order. At this stage, if you don’t have the required items or, if you are a reseller or a distributor who places an order to another vendor to fulfil the deal, you’d have to issue a corresponding Purchase Order. Based on the nature of the deal, the information in your purchase order may vary and entering the details manually is a major hassle that's best avoided if possible. That's exactly this custom functions helps us with.
This custom function can be embedded to a button, that gets placed either inside the Sales Order module or inside a record in the Sales Order module. Upon the click of the button, a Purchase Order gets created with all the details from the Sales order. Don't worry, it's just a one-time thing.
Getting started with the function:
- Go to Setup > Customization > Modules and Fields > Select the 'Deals' module > Links and Buttons > + New Button.
- Provide a name for the button. For example: "Update Contact details in Deals". Add a description(optional).
- Choose View Page from the drop-down list.
- Select Writing Function from the subsequent drop-down.
- Provide a name for the custom function. Add a description(optional).
- Copy the code given below.
- Click Edit Arguments.
- Enter the name as soId and select the value as Sales Order Id.
- Save the changes.
- Save the button.
The Code:
respMap = zoho.crm.getRecordById("Sales_Orders", input.soId.toLong());
productDet=ifnull(respMap.get("Product_Details"),"");
pdlist=List();
for each eachProd in productDet
{
productvalue = eachProd.get("product");
proid = productvalue.get("id");
proname = productvalue.get("name");
mp=map();
mp.put("product",{"name":proname,"id":proid});
mp.put("quantity",ifnull(eachProd.get("quantity"),"0").toLong());
mp.put("list_price",ifnull(eachProd.get("list_price"),"0.0").toDecimal());
mp.put(("discount"),ifnull(eachProd.get("discount"),"0.0").toDecimal());
mp.put("total",ifnull(eachProd.get("total"),"0.0").toDecimal());
mp.put("net_total",ifnull(eachProd.get("net_total"),"0.0").toDecimal());
pdlist.add(mp);
}
paramap=map();
paramap.put("Product_Details",pdlist);
paramap.put("Subject",ifnull(respMap.get("Subject"),""));
paramap.put("Contact_Name",ifnull(respMap.get("Contact_Name"),"").get("id"));
paramap.put("Terms_and_Conditions",ifnull(respMap.get("Terms_and_Conditions"),""));
paramap.put("Description",ifnull(respMap.get("Description"),""));
paramap.put("Adjustment",(ifnull(respMap.get("Adjustment"),"0.0")).toDecimal());
paramap.put(("Discount"),(ifnull(respMap.get(("Discount")),"0.0")).toDecimal());
createResp = zoho.crm.create("Purchase_Orders", paramap);
info createResp;
return "success";
Found this useful? Try it out and let us know how it works! If you have questions, do not hesitate to ask! Share this with your team if you find it useful!