Create Purchase Orders for Individual Products instead of a Contact or Account, from a Sales Order

Business scenario:

Working Capital is the life line of any business. Many components go into working capital and the most important one in the purview of sales and order fulfilment is inventory. Maintaining your stocks at an optimal level helps keep your working capital in check. The vendor management side of CRM helps you do just that. In order to maintain an optimal level of inventory, it is essential to have your inventory, sales orders and purchase orders in sync. One way of achieving this is by maintaining optimal inventory level that fits your line of business and, replenish it as and when you get a new order. More importantly, this help you meet customer deadlines smoothly.

Assume your business deals with 2 products namely Product A and Product B, and say you fix the optimal inventory levels as 100 units each for Product A and Product B respectively. Your customer has just accepted your sales order for 5 units each for either of your products. The custom function I’m sharing today helps you issue PO’s instantly for 5 units of Product A to Vendor A and 5 units of Product B to Vendor B. This helps you maintain the inventory level of 100 units each for either of the products. You do this at the click of a button from inside your Sales Order. Easy?

 

Getting started with the function:

  1. Go to Setup > Customization > Modules and Fields > Select the required module > Links and Buttons > + New Button.
  2. Provide a name for the button. Add a description(optional).
  3. Choose View Page from the drop-down list.
  4. Select Writing Function from the subsequent drop-down.
  5. Provide a name for the custom function. Add a description(optional).
  6. Copy the code given below.
  7. Click Edit Arguments.
  8. Enter the name as soId and select the value as Sales Order Id.
  9. Save the changes.
  10. Select the profiles who can see this button.
  11. Click Save.
 

The Code:


respMap = zoho.crm.getRecordById("Sales_Orders", input.soId.toLong());
productDet=ifnull(respMap.get("Product_Details"),"");
for each eachProdDet in productDet
{
proid = eachProdDet.get("product").get("id");
proname = eachProdDet.get("product").get("name");
pdlist=List();
mp=map();
mp.put("product",{"name":proname,"id":proid});
mp.put("quantity",ifnull(eachProdDet.get("quantity"),"0").toLong());
mp.put("list_price",(ifnull(eachProdDet.get("list_price"),"0.0")).toDecimal());
mp.put(("Discount"),(ifnull(eachProdDet.get("Discount"),"0.0")).toDecimal());
mp.put("net_total",(ifnull(eachProdDet.get("net_total"),"0.0")).toDecimal());
mp.put("Tax",(ifnull(eachProdDet.get("Tax"),"0.0")).toDecimal());
mp.put("total",(ifnull(eachProdDet.get("total"),"0.0")).toDecimal());
pdlist.add(mp);
paramap=map();
paramap.put("Product_Details",pdlist);
paramap.put("Subject",ifnull(respMap.get("Subject"),""));
paramap.put("Owner",ifnull(respMap.get("Owner"),"").get("id"));
paramap.put("Contact_Name",ifnull(respMap.get("Contact_Name"),"").get("id"));
paramap.put("Tracking_number",ifnull(respMap.get("SO_Number"),""));
paramap.put("Terms_and_Conditions",ifnull(respMap.get("Terms_and_Conditions"),""));
paramap.put("Description",ifnull(respMap.get("Description"),""));
createResp = zoho.crm.create("Purchase_Orders", paramap);
info 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!

Return to Tips