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 week's custom functions helps us with.
This week's 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 > Deals > Links and buttons > Create new button.
- Provide a name for the button. For example: "[The Purchase Order name or The Product's name]". Add a description(optional).
- Select the placement of the button as View page.
- Select the action to be performed as "Writing function".
- Copy the code given below.
- Click "Edit arguments".
- Enter the name as "soId" and select the value as "Sales Order Id".
- Click Save & Execute Script.
- Save the changes.
- Select the profiles who can view this button.
- Click Save.
The code:
For v2 Editor - DRE:
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";
Note:
- This function code works only when you have the latest version of Zoho CRM's APIs.
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!