Workflow Scenarios
Workflows can come in handy if you wish to get things done automatically in Zoho Books. Following are some of the scenarios where workflows come into play.
- Scenarios for Email Alerts
- Scenarios for Field Updates
- Scenarios for Webhooks
- Scenarios for Custom Functions
Scenarios for Email Alerts
Scenario 1:
Dillion Inc. is a garment export company. The VP of sales wants to receive email alerts when an employee raises a quote for an amount greater than £10,000 for one of their top customers. This will help them offer their best services. In that case, a workflow can be designed to automatically trigger email alerts when the following conditions are met.
Execute When: Created
Rule Criteria: Total amount due is greater than £10,000.
Immediate Action: Email alert to the VP of Sales/ Finance team.
Time Based Action: —
Scenario 2:
Joseph, the CTO of Bookworm.com, an online bookstore wants to implement a system wherein an alert message should be triggered to the packing section, upon raising an invoice for an order placed by the customer. The Email Alerts feature allows him to accomplish this by creating a workflow rule with the following parameters.
Execute When: Created or Edited
Rule Criteria: Contact Name is XYZ
Immediate Action: —
Time Based Action: Email alert to the packing section upon raising an invoice.
Scenario 3:
Adrian is the head of the travel department at Fossil Petrocorp, a company that specializes in finding efficient ways to use non-renewable sources of energy. Their engineers keep travelling across the globe to do business with major petroleum companies. Adrian’s job is to make sure their air tickets are booked and paid for by the company on time. So, whenever Adrian books a flight ticket for his colleagues through their travel agent, he wishes to send an acknowledgement mail to the agent that they have received the bill and would make the payment before the due date.
Execute When: Created or Edited
Rule Criteria: Company Name is ABC Travel Agency and Status is Open.
Immediate Action: —
Time Based Action: Email alert to the travel agent upon creating a bill for the air tickets.
Scenarios for Field Updates
Scenario 1:
Andrew is the Head of Marketing of SolarSync, a solar panel manufacturing company. According to his newly issued directive, the sales person should be changed to “XYZ” as soon as the sales person “ABC” has landed the sale i.e when an invoice for a Total Amount greater than £10,000 has been created or edited. A workflow automates the process of re-assigning the task to another person by setting up the following parameters to execute the directive.
Execute When: Created or Edited
Rule Criteria: When Sales Person is “ABC” and Total and Total Amount is greater than £10,000.
Immediate Action: Update Sales person field to “XYZ”
Time Based Action: —
Scenario 2:
MobileCave Inc. owns a chain of stores that sells mobile phones. They constantly order phones from different vendors. The purchase department often faced the difficulty of receiving the shipments on time as their vendors also supply to several other stores in the city.
The purchase department figures out a way to overcome this by alerting the vendor a week before their promised delivery date. According to the purchase team, this can be achieved by creating a workflow that will be executed whenever a purchase order was raised for £2000 or more.
Also, another action was set to update the Notes field that has a short message to the vendor requesting them to deliver the goods on time and if they did, they can expect more orders from MobileCave Inc. in the future.
Execute When: Created or Edited
Rule Criteria: When Company Name is “ABC” OR Total is greater than £2000.
Immediate Action: Update Notes field with a message to deliver the goods on time.
Time Based Action: Email Alert 7 days before Expected Delivery Date.
Scenario 3:
Andrew is the owner of Phoenix Rent-a-Car, a car rental company in Manchester. One of his regular customers has rented a car for a month. Andrew sends him an invoice for £1500 for a period of 30 days i.e £50/day i.e £1500/month. He has also offered his customer a discount of £500. However, he wishes to update the Customer Notes 10 days after the Quote Date by offering him a few freebies as well. He can automate this task by setting up the following parameters.
Execute When: Created or Edited
Rule Criteria: When Total=1000 and Discount > 500.
Immediate Action: —
Time Based Action: Update the field Customer Notes 10 days after Quote Date.
Scenarios for Webhooks
Scenario 1:
Greg is the Public Relations manager for a Home & Office Security company. A First-Time customer had asked for a quotation for setting up security systems for his office in London. Greg wants to make a good impression by promptly sending a ‘Thank You’ SMS as soon as he accepts the quote. The webhooks feature in automation can do that by setting the following parameters and connecting to an SMS gateway.
Execute When: Created or Edited
Rule Criteria: When Contact Name is “XYZ” and Contact Type is “Customer”.
Immediate Action: SMS alert using a webhook with SMS gateway.
Time Based Action: —
Scenario 2:
Frank is the financial controller of a Stock Brokerage firm. Most of the company’s revenue is credited into the company’s official Stripe account. He wants to be notified of any high value deposits or withdrawals towards invoices or expenses from that account via Email or SMS, on a weekly basis. He can achieve that by setting up a webhook using the following parameters.
Execute When: Created or Edited
Rule Criteria: When Total Amount>=£10,000
Immediate Action: —
Time Based Action: Trigger SMS Alert 7 days after Rule Trigger Date
Scenario 3:
Simon is the CEO of a start-up called Food4Fun which provides meals to the employees of big companies located in the Bay Area. He has got about 5 clients. His company incurs expenses on a daily basis for ingredients, transport, gas and employees’ salary who are paid by the hour. His accountant Jane has asked him to upload the receipts of expenses incurred for transportation so that she can verify it and bill it to their clients. So whenever Simon creates an expense for transportation at the end of the day, the receipt automatically gets uploaded to a cloud storage service that can also be accessed by Jane.
Execute When: Created or Edited
Rule Criteria: When Expense Account is Travel Expense AND Is Billable is True.
Immediate Action: Expense Receipts are uploaded to a cloud storage service using Webhooks.
Time Based Action: —
Scenarios for Custom Functions
Scenario 1:
Applying a 10% discount if your invoice total exceeds $2500
Sarah runs a supermarket and she wishes to provide discounts to celebrate her store’s 10th Anniversary. She decides to give a 10% discount for anybody who makes a purchase for $2500 or more. It would a painful task to include discount everytime she creates an invoice.
With the help of custom function, she can write a small piece of code to execute this action.
Sarah can set a condition where if the total of the invoice exceeds $2500, the function will be excuted and a 10% discount will be applied.
Now, let’s look at how the custom function would look for this scenario.
Custom function name: Discount
Description: Apply a 10% discount when the invoice total exceeds $2500
Module: Invoice
Script:
//create a variable and get invoice total
total = invoice.get("total").toDecimal();
//set a condition: when invoice amount is >= 2500
if ( total >= 2500.00 )
{
adjustment = invoice.get("adjustment").toDecimal();
adjustment = adjustment - total * 0.10;
jsonstring = "{\"adjustment\":" + adjustment + ",\"reason\":\" DISCOUNT \"}";
// To update the current record
zoho.books.updateRecord("Invoices", organization.get("organization_id"), invoice.get("invoice_id"), jsonstring.toMap());
}
She then creates a workflow rule with the following parameters.
Workflow Rule Name: Anniversary discount
Module: Invoice
Workflow type: Event based
When an invoice is: created
Triggers: When total >= 2500
Actions: Custom functions - Discount
Now, when the invoice total is greater than or equal to $2500, the workflow will be triggered and the custom function will be executed.
Scenario 2:
Adding a 5% latefee when an invoice becomes overdue
Dennis runs a self-storage facility in Manhattan where customers can store anything in a box, small enough to safely store documents and, big enough to store an expensive car. He charges his clients the option to pay on a daily, weekly, monthly or even a yearly basis. He offers them a 10-day grace period from the invoice date to make the payment after which, he charges an additional 5% of the invoiced amount as late fees.
Using Zoho Books, he writes a small code using Custom Functions to automatically calculate the late fees and add it as adjustments in the invoices when the invoices become Overdue.
Now, let’s look at how the custom function would look for this scenario.
Custom function name: Latefee
Description: Apply a 5% late fees on the invoice amount
Module: Invoice
Script:
//create a variable to get invoice total and add a 5% discount
latefee = invoice.get("total").toDecimal() * 0.05;
//display the value stored in the latefee variable
info latefee ;
//add late fee and adjustment and store the total amount in the variable 'adjustment'
adjustment = invoice.get("adjustment").toDecimal()+ latefee;
jsonstring = "{\"adjustment\":" + adjustment + ",\"reason\":\" late fee\"}";
// To update the current record
result = Map();
result = zoho.books.updateRecord("Invoices", organization.get("organization_id"), invoice.get("invoice_id"), jsonstring.toMap());
info result;
She then creates a workflow rule with the following parameters.
Workflow Rule Name: Late fee
Module: Invoice
Workflow type: Date based
Date of Execution: 0 day(s) after Due Date
Execution time: Enter the time of execution
Execution cycle: Once
Triggers: When > Status > isn’t > Paid > AND > Status > isn’t > Partially Paid
Now, when the invoice due date exceeds the set date (in the workflow rule), the workflow will be triggered and the custom function will be executed.
Scenario 3:
Provide discount if payment for the invoice is made before the due date
Donna runs a design firm that creates promotional materials for websites on a monthly basis. This involves designing brochures, banner ads, and other promotional materials. Donna sends invoices at the end of each month and often receives payment only after the credit period, which is 30 days. To receive funds immediately, she decides to offer a discount if the invoice amount was paid before the invoice due date.
In order to implement this, she adds a discount of 5% to her invoices and in the customer notes section she mentions that the discount would be applicable only if the payment is made before the due date.
To make this work, Donna writes the following custom function.
//if payment for the invoice is received after the invoice due date then discount won't be applied
jsonstring = "{\"discount\" : 0, \"reason\" : \"over duedate exceed\"}";
zoho.books.updateRecord("invoices", organization.get("organization_id"), invoice.get("invoice_id"), jsonstring.toMap());
Once done, she creates a workflow to execute ths custom function. The parameters of the workflow rule is mentioned below:
Workflow rule name: Discount for early payment
Module: Invoice
Workflow type: Date based
Date of Execution: 0 day(s) after Due Date
Execution time: Enter the time of execution
Execution cycle: Once
Trigger: When > Status > isn’t > Paid
Actions
Type: Custom function and Name: Name of your custom function
So, if an invoice reaches the due date, the workflow will be triggered and the custom function will add 0% discount instead of the actual 5%
Scenario 4:
Automatically set due date for an invoice as 30 days before the event date (that is entered via a custom field)
Tom is a creative wedding photographer. His client book for his services 2-3 months prior to the wedding date.(Event date.) And, Tom would confirm the date only if the client pays the full amount 30 days before the wedding date. In order to streamline this process, Jake, one of the members of Tom’s studio writes a small custom function.
To start with, Jake creates a custom field named “Wedding Date” with the date datatype and writes the following custom function
customFields = invoice.get("custom_fields").toList();
cfDate = null;
for each customField in customFields
{
customField = customField.toMap();
if(customField.get("label") == "Date")
{
cfDate = customField.get("value");
}
}
duedate = cfDate.toTime().subMonth(1);
info duedate;
duedate = duedate.year() + "-" + text(duedate.month(),"00") + "-" + text(duedate.day(),"00");
jsonstring = "{\"due_date\":" + duedate + ",\"reason\":\" Duedate changed. \"}";
result = zoho.books.updateRecord("invoices",organization.get("organization_id"),invoice.get("invoice_id").toString(),jsonstring.toMap());
info result;
After creating the custom function, Jake creates a workflow rule to trigger it. The parameters of the workflow rule are as follows:
Workflow name: Payment 30 days before the wedding
Module: Invoice
Workflow type: Event based
When invoice is: Created
Actions
Type: Custom function and Name: Name of your custom function
While creating an invoice, if Tom mentions the wedding date in the custom field, the workflow will be triggered and the custom function will set the due date of the invoice to 30 days before the wedding date.
Scenario 5:
Automatically cancel a quote if its not accepted within 10 days from the date of creation.
Katherine owns a company that supplies automotive spare parts to several automobile service stations. Several customers ask her for a quote, but a portion of them fail to communicate their decision by neither accepting nor rejecting the quote. To avoid this, Katherine decides to decline the quote if she doesn’t hear back from the client within 10 days from the receipt of the quote. To implement this, she writes a custom function.
\\get quote and organization ID
quoteid = quote.get("quote_id");
orgid = organization.get("organization_id");
\\convert the status of the quote to 'declined'
result = invokeUrl
[
url: "https://books.zoho.com/api/v3/quotes/" + quoteid + "/status/declined?organization_id=" + orgid
type: POST
connection: "books_api_connection"
];
Learn more from the Connections help document.
Now, to trigger the execution of this custom function, she creates a workflow rule with the following parameters.
Workflow Name: Decline quote after 10 days of receipt
Module: Quotes
Workflow type: Date Based
Date of Execution: 10 day(s) after Created Time
Execution time: Enter the time of execution
Execution cycle: Once
Criteria: When > Quote Status > is > Sent > AND > Quote Status > is > not approved
Actions
Type: Custom function and Name: Name of your custom function
Now, when the quote exceeds 10 days from its created time, the workflow will be triggered and the custom function will be executed to change the status of the quote to declined.
Scenario 6:
Extend due date by 7 days if the customer pays 50% of the invoice amount on or before the initial due date
Diane owns a store that supplies printing paper and office stationery for offices in her area. She wants to extend the due date of the invoice by a week if customers pay 50% of the invoice amount on or before the initial due date.
In order to do that, she writes the following custom function:
//Getting invoice total, balance after the partial payment, and due date
inv_total = invoice.get("total").toDecimal();
inv_balance = invoice.get("balance").toDecimal();
inv_duedate = invoice.get("due_date").toDate();
orgid = organization.get("organization_id");
invid = invoice.get("invoice_id");
//Condition to check if the amount paid is 50% of the invoice amount
if(inv_balance == inv_total / 2)
{
inv_duedate = inv_duedate.addDay(7);
inv_duedate = inv_duedate.year() + "-" + text(inv_duedate.month(),"00") + "-" + text(inv_duedate.day(),"00");
//Update the due date by 7 days
jsonstring = "{\"due_date\" : " + inv_duedate + ", \"reason\" : \"Due date extended\"}";
result = zoho.books.updateRecord("invoices",orgid,invid,jsonstring.toMap());
}
Once done, Diane creates a workflow rule to execute the custom function.
Workflow name: Extend due date
Module: Invoice
Workflow type: Event based
When invoice is: Edited
Execute the workflow When any field is updated
Just once or Everytime? Just once
Triggers When > Status > is > Partially paid
Type: Custom function and Name: Name of your custom function
Now, when a customer pays 50% of the invoice amount by the initial due date, a grace period of 7 days will be given for him to pay the balance amount.