Function to check frequency of customer ordering patterns

Function to check frequency of customer ordering patterns

Hi,

I'm no coder, so I thought I could make use of Chat GPT to generate some Deluge script to create a function that would check order frequency of our customers so that I could send an email if they go beyond their usual order pattern.

Chat GPT and Claude seemed super confident they could do the job, but failed. I keep getting errors.

Here's sample code:

string calculateOrderFrequency(string orderID)
{
    // Get the Contact associated with this order
    contactInfo = zoho.crm.getRelatedRecords("Contacts", "Sales_Orders", orderID);
    
    // If no contact is found, exit the function
    if(contactInfo.isEmpty())
    {
        return "No contact found for this order";
    }
    
    // Get the contact ID from the first related contact
    contactId = contactInfo.get(0).get("id");
    
    // Retrieve all previous orders for this contact
    previous_orders = zoho.crm.getRelatedRecords("Sales_Orders", "Contacts", contactId);
    
    // We need at least 2 orders to calculate frequency
    if(previous_orders.size() >= 2)
    {
        // Create a list to store order dates
        order_dates = List();
        
        // Add all order dates to our list
        for each rec in previous_orders
        {
            orderDate = rec.get("Order_Date");
            if(orderDate != null)
            {
                order_dates.add(orderDate);
            }
        }
        
        // Sort dates from oldest to newest
        order_dates.sort();
        
        // Calculate time between orders using a different approach
        total_days = 0;
        intervals = 0;
        
        // Calculate date differences without using a standard loop
        latest_index = order_dates.size() - 1;
        
        // Process manually if we have at least 2 dates
        if(latest_index >= 1)
        {
            // Manually calculate first interval
            days_diff_1 = dateDiff(order_dates.get(1), order_dates.get(0), "days");
            total_days = total_days + days_diff_1;
            intervals = intervals + 1;
            
            // Manually calculate second interval if we have enough dates
            if(latest_index >= 2)
            {
                days_diff_2 = dateDiff(order_dates.get(2), order_dates.get(1), "days");
                total_days = total_days + days_diff_2;
                intervals = intervals + 1;
                
                // Manually calculate third interval if we have enough dates
                if(latest_index >= 3)
                {
                    days_diff_3 = dateDiff(order_dates.get(3), order_dates.get(2), "days");
                    total_days = total_days + days_diff_3;
                    intervals = intervals + 1;
                    
                    // Manually calculate fourth interval if we have enough dates
                    if(latest_index >= 4)
                    {
                        days_diff_4 = dateDiff(order_dates.get(4), order_dates.get(3), "days");
                        total_days = total_days + days_diff_4;
                        intervals = intervals + 1;
                        
                        // Manually calculate fifth interval if we have enough dates
                        if(latest_index >= 5)
                        {
                            days_diff_5 = dateDiff(order_dates.get(5), order_dates.get(4), "days");
                            total_days = total_days + days_diff_5;
                            intervals = intervals + 1;
                        }
                    }
                }
            }
        }
        
        // Calculate average frequency (if we have valid intervals)
        if(intervals > 0)
        {
            avg_frequency = total_days / intervals;
            
            // Round to nearest whole number
            avg_frequency = round(avg_frequency);
            
            // Create map of fields to update
            update_map = Map();
            update_map.put("Average_Order_Frequency", avg_frequency);
            update_map.put("Last_Order_Date", order_dates.get(order_dates.size() - 1));
            update_map.put("Email_Sent_Flag", false);
            
            // Update the contact record
            update_response = zoho.crm.updateRecord("Contacts", contactId, update_map);
            return "Updated contact with average order frequency: " + avg_frequency + " days";
        }
        else
        {
            return "Could not calculate intervals between orders";
        }
    }
    else
    {
        // If this is their first order, just update the last order date
        if(previous_orders.size() == 1)
        {
            update_map = Map();
            update_map.put("Last_Order_Date", previous_orders.get(0).get("Order_Date"));
            update_map.put("Email_Sent_Flag", false);
            zoho.crm.updateRecord("Contacts", contactId, update_map);
            return "First order - updated last order date only";
        }
        else
        {
            return "No orders found for this contact";
        }
    }
}
    • Sticky Posts

    • Zoho CRM Functions 53: Automatically name your Deals during lead conversion.

      Welcome back everyone! Last week's function was about automatically updating the recent Event date in the Accounts module. This week, it's going to be about automatically giving a custom Deal name whenever a lead is converted. Business scenario Deals are the most important records in CRM. After successful prospecting, the sales cycle is followed by deal creation, follow-up, and its subsequent closure. Being a critical function of your sales cycle, it's good to follow certain best practices. One such
    • User Tips: Auto-Create Opportunity/Deal upon Quote Save (PART 1)

      Problem: We use quotes which convert to sales orders but Users / Sales Reps do not create opportunities / deals and go straight to creating a quote. This leads to poor reporting. Implementing this solution improves reporting and makes it easier for users.
    • Custom Function : Automatically send the Quote to the related contact

      Scenario: Automatically send the Quote to the related contact.  We create Quotes for customers regularly and when we want to send the quote to the customer, we have to send it manually. We can automate this, using Custom Functions. Based on a criteria, you can trigger a workflow rule and the custom function associated to the rule and automatically send the quote to customer through an email. Please note that the quote will be sent as an inline email content and not as a PDF attachment. Please follow
    • Function #50: Schedule Calls to records

      Welcome back everyone! Last week's function was about changing ownership of multiple records concurrently. This week, it's going to be about scheduling calls for records in various modules. Business scenario Calls are an integral part of most sales routines.. Sales, Management, Support, all the branches of the business structure would work in cohesion only through calls. You could say they are akin to engine oil, which is required by the engine to make all of it's components function perfectly. CRM
    • Function #37: Create a Purchase Order from a Quote

      Welcome back everyone! Last week, we learnt how to calculate the total number of activities for a lead and further take note of the activity count for particular dates. For instance, from the period of Demo to Negotiation. This week, let's look at a function that lets you create a Purchase Order instantly from a Quote. Business scenario: In any form of business, one of the most important things to do is to document the transactions. Naturally, negotiation, signing an agreement, placing an order,
    • Recent Topics

    • Introducing Assemblies and Kits in Zoho Inventory

      Hello customers, We’re excited to share a major revamp to Zoho Inventory that brings both clarity and flexibility to your inventory management experience! Presenting Assemblies and Kits We’re thrilled to introduce Assemblies and Kits, which replaces the
    • Can I add Conditional merge tags on my Templates?

      Hi I was wondering if I can use Conditional Mail Merge tags inside my Email templates/Quotes etc within the CRM? In spanish and in our business we use gender and academic degree salutations , ie: Dr., Dra., Sr., Srta., so the beginning of an email / letter
    • What is the Use Case for Business Messaging when Live Chat already exists?

      Hi I'm excited about the new announcement for Business Messaging in Zoho Desk. However I'm unclear the use case for Business Messaging when Live Chat already exists? Is Business Messaging essentially a new version of Live Chat but built for use in the
    • Edit Pinned Comments in Zoho Desk

      It's great that private comments can now be pinned to the top of the ticket but what would be extremely helpful would be to allow for the pinned comment to be edited vs. having to find the comment in the ticket to edit it.
    • Introducing the 'Send as Email' option on the Zoho Desk iOS mobile app

      Hello everyone! In the latest version(v2.10.2) of the Zoho Desk iOS app, we have brought in support for the 'Send as Email' option while creating a ticket. This feature enables you to reach out to the customers by sending outbound emails. The emails are
    • Document data extraction and import into CRM.

      I've been trying to solve this for a while and I can't come up with a workable solution: In our business, we utilize many subcontractors around the world (without Zoho user accounts) to produce reports and client sites which they then submit back to us
    • Modular cannot Edit in portals

      I have a custom module in CRM. If I create in either CRM or portals, I can edit it in the CRM but I can't edit in the portal. Even if it is created in the portal it wont edit. Anyone know why? I've created a new module and it works fine but this one
    • Zoho CRM and Books Integration

      Evening, I have started the integration with FSM from CRM and having difficulties with the mapping. In CRM we use "Unit Price" as our cost price and mark this up on a subform to create a "Sell Price" this markup can be different on each quote depending
    • Plug Sample #13: Display CRM Products as Dynamic Carousels in Your Chatbot

      Hi everyone! We’re back with another simple yet powerful plug to level up your chatbot experience. With the SalesIQ-CRM integration, you already have the ability to create leads, contacts, and deals directly within your CRM from SalesIQ, and view complete
    • Como puedo mover un prospecto "Cliente" de modulo

      Tengo un modulo llamado Seguimiento de Ventaa y otro llamado Cierre de Venta. Que cuando se marca como venta efectiva o venta no efectiva, pase a Cierre de Venta, Esto sin duplicarlo "Que esten en ambos modulos" ,Como esta en una base de datos "Excel"
    • Zoho Books not working/loading

      Hi! I haven't been able to access/load Zoho Books for the past hours. I get a time out (and it is not due to my internet connection). Could you please check this asap? Thank you!
    • Introducing ICR in Zoho CRM: Transform your printed text into digital data

      From writing on papyrus in the ancient times to creating a humble record in your CRM, the world may have evolved with how it used to record data, but data entry as such has not been simplified. It is still a repetitive and arduous chore on which businesses
    • Max limit reached on Web Tabs for Zoho Projects

      Hello, ByWater manages between 50-60 projects at a time, and we have been heavily utilizing the Web Tab feature. However, we just hit our maximum limit reached for web tabs. The main thing we use Web Tabs for is sharing a Google document with our partners
    • Creating a whatsapp channel in instant messaging in zoho desk - error Oops, something went wrong. Please try again later.

      Creating a whatsapp channel in instant messaging in zoho desk - error Oops, something went wrong. Please try again later.
    • Article Update Event

      I'm trying to configure a webhook to fire when an article is updated or added. These are listed as available events in the documentation. However, in the webhook creation/editing screen, articles are not listed as a module when setting the event: Am I
    • Kaizen #187 - Building a Timer and Worklog Widget (Part 1)

      Howdy Tech Wizards! Welcome back to a fresh week of Kaizen! This time, we are diving into a two-part series where you will learn how to build a Timer and Worklog Widget for Zoho CRM. This widget helps track active work time and log multitasking sessions
    • Task Permissions

      Is there anyway to have some tasks restricted to view just by the owner or creator?
    • Zoho CRM Forecast - Exclude certain Deals

      We have our forecast and we use it for team forecast/targets/attainment. It works great for that. However, occassionally we have to offer Deals that are non-revenue generating, but are tracked in our CRM. They still have revenue tied to them, but our
    • Kaizen #154 - Dynamically Update Picklist Values in Zoho CRM Workflows

      Hello all! Welcome back to another interesting Kaizen post. Today, we will discuss how to add automatically or remove values from a picklist field using Deluge within a workflow. This post serves as a solution for the forum post. Use case The sales team
    • What is VoC "Unique count", counting?

      Using the "Response based sentiment analysis" dashboard, here is our VoC "Overall Count by Sentiment" VoC uses Zoho Survey and email...and we have almost certainly touched (via email) more than 401 Contacts since January 1, 2025.
    • Filter a report for a specific bank and a specific transaction type (interest income)

      I am trying to run a report - any report - on a specific bank account for the interest income. I do not see it as an option. I can see the Bank Account under Account in the Filters, and I can see the Interest Income under Account in the Filters But I
    • Ability to select Vendor Credits when creating Vendor Payments

      When making vendor payments there should be the option to select open vendor credits, this way the payment shows what bills and credits are being used for the payment Right now the vendor credits must be applied to the bills prior creating a payment,
    • Sorting Tasks by Start Date

      I like using the Tasks tool so far but have one little problem that would help me tremendously. This is my favorite aspect of using Outlook for task management.  When I create a task - I give the Start and Due Date. Some tasks are a little longer and may take a few days, while others only take a few minutes. For example, if a task takes 5 hours, and I want to spend 1 hour per day on it.  Because of this - knowing the start date is much more important than the due date.  The ability to sort by Start
    • Single payment link for multiple invoices or total due for a customer on Whatsapp.

      I want to send a single payment link for multiple invoices or total due for a customer on Whatsapp. Currently zoho books do not have this option . While sending WhatsApp template, payment link is created for particular invoice. I want to send WhatsApp
    • Whatsapp Customer Statement and Outstanding

      Customers are asking to whatsapp statement or outstanding report or invoices regularly. Is there a way we can integrate it in Zoho Books. We already have Whatsapp Business API from Interakt and regular Whatsapp API from MessageAutoSender. How can we use
    • Owner's Draw

      Example: I have a charge account at ABC Company. During the month I charge one $50 item for my business. I also pick up a $20 item for personal use. At the end of the month, I receive a statement with a balance due of $70 and I want to PAY THE ENTIRE
    • Show both Vendor and Customers in contact statement

      Dear Sir, some companies like us working with companies as Vendor and Customers too !!! it mean we send invoice and also receive bill from them , so we need our all amount in one place , but in contact statement , is separate it as Vendor and Customer, 
    • Adding google reviews

      HI , is it possible to add my google reviews to my zoho website ? Thank you 
    • Display an image in Zoho reports report

      I have a table report in which i'd like to display an image made up of data from another column, something like: <img src="records.photo"> However, when i do that, nothing happens.  How do i pull it off?  
    • Currency fields and decimal places in CRM email templates

      Hi, How do I get more than the standard 2 decimal places showing in a Currency field, on an email template? In the Layout for my Currency field, it is set to 6 decimal places. I want to show up to 6 places in the email template (unrounded). See attached
    • GST Returns India

      1. Have been requesting that the documents issued section should be filled automatically. If other accounting software can do it ZOHO Books can. NOT ROCKET SCIENCE !! 2. There is an Issue with the Debit Notes not showing up in GSTR 1 ???  Sorry but this is unacceptable !! as a GST Suvidha provider and an accounting software developer both these errors are unforgivable. P.S: Another GST issue is that the GSTR 2 reconciliation has to be closed monthly to do the next month, Maybe ZOHO developers should
    • Getting error "invalid warehouse_id" when trying to update any transaction in Zoho books

      I got a message from Zoho saying that the Warehouse and Branch has been merged into one category "Locations" Once I migrated to this setup I was no longer able to edit any invoice / create creadit notes - got an error saying "invalid warehouse_id" I never
    • E-Way Bill Generation and Custom Button Requirement in Stock Transfer Module in ZOHO Books India

      We would like to provide further clarification and highlight a few operational challenges we're currently facing : we are handling stock transfers between branches/warehouses within the same state under the same GSTIN. As per government rules, E-Way Bill
    • Subform data to Sheets

      I have been trying to setup a Zoho Flow automation to bring any Subform input to a Zoho Sheets but it seems impossible to post the subform entries to a Zoho Sheet. Is there any way to do it via Zoho Sheet API? https://www.zoho.com/sheet/help/api/v2/#CONTENT-Insert-row-with-JSON-data
    • Voiding of Invoice

      What's the implication in GSTR 1 and GSTR 3B when an invoice is voided?
    • Search WorkDrive File Contents from Creator

      Good afternoon, I am building out a Creator app where I want to allow users to input search terms from Creator that will return the appropriate files that contain those keywords from their Creator search. Is this possible?
    • execute workflow when a package is create

      hji, there is a wey to make a workflow when a package is sended o created ?
    • Adding string / text fields to modules

      I'm working on a custom leads module with a layout for call center agents.  I need to add text fields that are for display purposes only to prompt call center agents.  I haven't found any way to add a field in Zoho CRM that doesn't accept input, ie. is
    • Looking to Hire: Zoho Creator Developer for Vendor Dashboard Portal

      We are a Florida-based licensed liquor distributor using Zoho Books, Inventory, CRM, and Analytics. Many of our vendors are also our customers. We’re looking to build a centralized, secure Vendor Dashboard Portal in Zoho Creator that gives access to real-time
    • Automate Zoho Meeting Creation via Blueprint (Leads & Accounts)

      I need help automating Zoho Meeting creation during a blueprint transition in both the Leads and Accounts modules. Requirements: Triggered via blueprint Read meeting start time (DateTime field) and internal participants from CRM Create Zoho Meeting via
    • Next Page