Task: We first create a task based on lead status change. We will be then populating a custom date/time field which can be used as a TAT. The TAT will be adjusted according to the users shift hours and working days.
Prerequisites (if applicable): Connection with User specific scopes.
Instructions:
Step 1: Go to Setup, Workflow Rules. Create New. Choose Leads Module.
Step 2: Set the condition for the lead status to be a particular value.
Step 3: Start writing deluge.
Outcome: After this workflow is enabled, whenever someone changes the lead status, a task will be created with a TAT.
//Get details Create our task pDetails = zoho.crm.getRecordById("Leads",id); // info pDetails; lName = pDetails.get("Full_Name"); info lName; owner = pDetails.get("Owner").get("id"); info owner; //Task Variables subject = "3rd Follow Up " + lName; dueDate = today.addDay(1); //Create Task Map tMap = Map(); tMap.put("$se_module","Leads"); tMap.put("What_Id",id); tMap.put("Subject",subject); tMap.put("Due_Date",dueDate); tMap.put("Owner",owner); tMap.put("Status","Not Started"); createResp = zoho.crm.createRecord("Tasks",tMap); task = zoho.crm.getRelatedRecords("Tasks","Leads",id); for each rec in task { ab = rec.getJSON("Subject"); checkstr1 = ab.contains("3rd Follow Up"); if(checkstr1 == true) { ID = rec.getJSON("id"); taskinfo = zoho.crm.getRecordById("Tasks",ID); userid = taskinfo.get("Owner").get("id"); created = taskinfo.get("Created_Time"); ctime = taskinfo.get("Created_Time").toTime("yyyy-MM-dd'T'HH:mm:ss"); if(created.contains("+")) { timezone = "+" + created.getSuffix("+"); } else { timezone = "-" + created.getSuffix("-"); } chour = ctime.getHour(); info chour; cmin = ctime.getMinutes(); info cmin; cdate = ctime.getDay(); resp = invokeurl [ url :"https://www.zohoapis.in/crm/v5/users/" + userid type :GET connection:"crm" ]; shift = resp.get("users").get(0).get("$current_shift").get("id"); //info shift; resp1 = invokeurl [ url :"https://www.zohoapis.in/crm/v5/settings/business_hours/shift_hours/" + shift type :GET connection:"crm" ]; time = resp1.get("shift_hours").get(0).get("daily_timing"); info time; start = time.get(0).subString(0,2).toLong(); end = time.get(1).subString(0,2).toLong(); duration = end - start; abh = 12 - duration; if(chour < start) { due = ctime.addBusinessDay(1).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addHour(abh).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } else if(chour > end || chour == end && cmin > 0) { due = ctime.addBusinessday(2).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addHour(abh).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } else if(chour >= start && chour <= end && cmin == 0) { cdiff = end - ctime.getHour(); val = 12 - cdiff; if(val <= duration) { due = ctime.addBusinessday(1).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addHour(val).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } else { due = ctime.addBusinessday(2).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addHour(val - duration).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } } else if(chour >= start && chour <= end && cmin > 0) { cdiff = end - ctime.getHour(); dmin = cmin / 60; val = 12 - (cdiff - dmin); info val; if(val <= duration) { due = ctime.addBusinessday(1).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addMinutes(val * 60).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } else { due = ctime.addBusinessday(2).toString("yyyy-MM-dd " + start + ":00:00").toTime("yyyy-MM-dd HH:mm:ss").addMinutes((val - duration) * 60).toString("yyyy-MM-dd'T'HH:mm:ss") + timezone; } } info due; update = zoho.crm.updateRecord("Tasks",ID,{"Due_Date_Time":due}); } }