Tip 22: How to allow employees to check in and out, and then automatically calculate their total work hours

Tip 22: How to allow employees to check in and out, and then automatically calculate their total work hours



Hi everyone,

Keeping accurate track of employee hours is crucial to smoothly running business. So this week, we wanted to go over how you can automate this whole process using Zoho Creator. With this tip, you'll learn how to set up a page that will make it easy for your employees to check in and out, and help you track their work hours on a daily basis.

To do this, let's create a sample application called Attendance App, and show you how you can use it to track the total work hours of each of your employees.

Application flow
  • Employees can check in and out by simply clicking on a button
  • Once the employee checks out, the total working hours will be calculated and updated in the admin report
  • Managers and administrators can then monitor the total work hours of each employee on a daily basis 
To do this, we need to create the following components:
  • Attendance form used to record the check in and check out times
  • Dashboard with check in and check out buttons, and two reports
  • A way for users to be given access to the application
  • A report for employees to view their check-in and check-out times
  • A report where the admin can view the details of all employees


Step 1: Create the attendance form

First, we need to create the attendance form to record the times. This form can be hidden, as the check-ins and check-outs are automatically recorded by clicking on the buttons on the page. 



Fields on the attendance form:
  • Email (Email field)
  • Check-in time (Date-Time field)
  • Check-out time (Date-Time field)
  • Total time (Single line field)
  • Status (Drop down field)
Step 2: Create functions for the check in and check out buttons

Now, let's create the two functions we need to record the check-in and check-out times. All you need to do is go to Workflows, click New Functions, and add some code snippets.

Function 1: To record the check-in time

The Check In button on the page calls a function, which adds a record to the attendance form. Use the below code to create the checkintime function:

  1. void login.checkintime()
  2. {
  3. fet = Attendance_form[Check_in_time == today &&Email == zoho.loginuserid]; 
  4. // This condition is to prevent an employee from checking in multiple times on the same day.
  5. if(fet.count() == 0)
  6. {
  7. new = insert into Attendance_form
  8. [
  9. Added_User=zoho.loginuser
  10. Email=zoho.loginuserid
  11. Check_in_time=zoho.currenttime
  12. Status="Checked In"
  13. ];
  14. } .
  15. // This adds a record in the attendance form, which captures the logged-in employee's email and the current time, and sets the status as "Checked In".
  16. openUrl("https://app.zohocreator.com/ownername/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid,"iframe","zohoview");
  17. // OpenURL will help you refresh the user-based report (embedded in the page) to display only the login-based entries.
  18. }

Function 2: To record the check-out time

Now, let's create a function that helps us record the check-out time. The Check Out button captures the check-out time, fetches the record containing the check-in time of the corresponding user, and calculates the total working time, which is the difference between the check-out and check-in times in the hours:minutes format.

  1. void login.checkouttime()
  2. {
  3. fet = Attendance_form[Check_in_time == today && Check_out_time == null && Email == zoho.loginuserid];

  4. //This condition checks the record based on the logged-in user and today's date, which has the check-out time as null. It avoids multiple check-outs and ensures the record is added by the corresponding user.

  5. if(fet.ID > 0)
  6. {
  7. fet.Check_out_time=zoho.currenttime;
  8. mil_sec = (fet.Check_out_time - fet.Check_in_time);
  9. actual_minutes = mil_sec / (1000 * 60);
  10. //1000 -> mill sec to sec, 60 -> sec to min
  11. mins = actual_minutes.toLong() % 60;
  12. // % 60 -> Exclude Hours
  13. hours = (actual_minutes / 60).toLong();
  14. // 60 -> min to hour, % 24 (optional) -> Exclude Days
  15. time_string = hours + " : " + mins;
  16. fet.Total_time=time_string;
  17. fet.Status="Checked Out";
  18. }
  19. else
  20. {
  21. // This part handles cases where the user checks in for a night shift, and by the time they check out, the date will have changed. In this case, we use zoho.currentdate.subDay(1) to get the previous date's record. This will be executed only if there isn't any matching record for today's date.
  22. fet1 = Attendance_form[Check_in_time == zoho.currentdate.subDay(1) && Check_out_time == null && Email == zoho.loginuserid];
  23. if(fet1.ID > 0)
  24. {
  25. fet1.Check_out_time=zoho.currenttime;
  26. mil_sec = (fet1.Check_out_time - fet1.Check_in_time);
  27. actual_minutes = mil_sec / (1000 * 60);
  28. //1000 -> mill sec to sec, 60 -> sec to min
  29. mins = actual_minutes.toLong() % 60;
  30. // % 60 -> Exclude Hours
  31. hours = (actual_minutes / 60).toLong();
  32. // 60 -> min to hour, % 24 (optional) -> Exclude Days
  33. time_string = hours + " : " + mins;
  34. fet1.Total_time=time_string;
  35. fet1.Status="Checked Out";
  36. }
  37. }
  38. openUrl("https://app.zohocreator.com/<workspaceName>/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid,"iframe","zohoview");

  39. // And this code refreshes the user-based report on the page to display the filtered login-based record with the updated check-out time and the total time.



Step 3: Add the buttons to the dashboard and link them to the functions


Once you've created both functions, you need to create two buttons—Check In and Check Out—on your dashboard, and link the function to these buttons. When a user clicks on them the function is executed and the time is captured.

To do that follow these steps: 
  1. Go to the page builder.
  2. Drag and drop a button onto the page builder, and you'll see a new window appear, where you can add other elements.
  3. Choose the Action type you want to perform—in this case, Execute function.
  4. Choose the function that needs to be executed (refer to the screenshot below). 
  5. Create both buttons and repeat these steps. 



Step 4: Add the reports to the dashboard Admin dashboard:

To track employee working hours This dashboard will help the admin keep track of employee work hours. Apart from the two buttons on the page, there are two reports, which are embedded using an HTML snippet.
  • The list report will dynamically display records based on the logged-in user (for example: if Employee A is logged in, they can only view their own times).
  • The Kanban report will list all the users who've checked in on that day, and it can only be viewed by the admins of the application. 
Now let's embed these two reports on the dashboard. To do that, we need to drag and drop the HTML snippet onto the page builder and write the script below:




  1. <%
  2. {
  3. a = "https://app.zohocreator.com/ownername/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid;
  4. %>
  5. <iframe name='zohoview' height='400' width='100%' frameborder='0' scrolling='Auto' src='<%=a%>'></iframe>
  6. <%
  7. if(zoho.loginuserid == zoho.adminuserid)
  8. {
  9. %>
  10. <div elName='zc-component' viewLinkName='Admin' params='zc_Header=true'>
  11. Loading View...</div>
  12. <%
  13. }
  14. }
  15. %>

In the code above, we're embedding the user report using an iframe, so that the user report (iframe) is automatically refreshed after a user clicks on Check In or Check Out. We've also hidden the secondary header present on the user report by setting up zc_SecHeader=false to prevent users from manually adding or modifying the record from the report. The logged-in user filter can be directly applied on the report, or by using the parameter "Email=" + zoho.loginuserid" in the URL.

The admin report is added using a DIV tag, and is displayed only to the account's super admin using the if condition. if(zoho.loginuserid == zoho.adminuserid)
If required, we can add other non-admin emails using the criteria below to make the admin report available for those particular users: 
if(zoho.loginuserid == zoho.adminuserid || zoho.loginuserid == "nonamdin@gmail.com") 

The admin will also have the option to check out users, in case they forget at the end of their shift.

Admin report

The Kanban report is created using the status field, which is a dropdown field, and you can add the code in On Update of the Status Field.For example, when the admin drags the record from the Check in time column to the Check out time column, the user will be automatically checked out. 

You need to choose Edited for Run when a record is while creating the workflow.




Below is the script you need to write in On Update of the Status Field, so that when the record is dragged and dropped to the Check out time column on the Kanban report, the check-out time will be captured.

  1. if(input.Status == "Checked Out" && input.Check_out_time == null)
  2. {
  3. input.Check_out_time = zoho.currenttime;
  4. mil_sec = (input.Check_out_time - input.Check_in_time);
  5. actual_minutes = mil_sec / (1000 * 60);
  6. //1000 -> mill sec to sec, 60 -> sec to min
  7. mins = actual_minutes.toLong() % 60;
  8. // % 60 -> Exclude Hours
  9. hours = (actual_minutes / 60).toLong();
  10. // 60 -> min to hour, % 24 (optional) -> Exclude Days
  11. time_string = hours + " : " + mins;
  12. input.Total_time = time_string;
  13. }
We've also added a filter to the admin report, that will allow the admin to view all the employees who checked in and out for the day. And, if required, you can edit it by week or month, depending on your requirements.



Note: We will soon roll out the hoursBetween function, which can be used to find the difference between the check in and check out times. This function will return the difference of hours between the given start and end date-time values.

We hope this tip was useful for you! If you have any questions, feel free to ask in the comments below, and we'll be happy to address them for you!




























    Access your files securely from anywhere









                          Zoho Developer Community




                                                • Desk Community Learning Series


                                                • Digest


                                                • Functions


                                                • Meetups


                                                • Kbase


                                                • Resources


                                                • Glossary


                                                • Desk Marketplace


                                                • MVP Corner


                                                • Word of the Day


                                                • Ask the Experts





                                                          Manage your brands on social media



                                                                Zoho TeamInbox Resources



                                                                    Zoho CRM Plus Resources

                                                                      Zoho Books Resources


                                                                        Zoho Subscriptions Resources

                                                                          Zoho Projects Resources


                                                                            Zoho Sprints Resources


                                                                              Qntrl Resources


                                                                                Zoho Creator Resources



                                                                                    Zoho CRM Resources

                                                                                    • CRM Community Learning Series

                                                                                      CRM Community Learning Series


                                                                                    • Kaizen

                                                                                      Kaizen

                                                                                    • Functions

                                                                                      Functions

                                                                                    • Meetups

                                                                                      Meetups

                                                                                    • Kbase

                                                                                      Kbase

                                                                                    • Resources

                                                                                      Resources

                                                                                    • Digest

                                                                                      Digest

                                                                                    • CRM Marketplace

                                                                                      CRM Marketplace

                                                                                    • MVP Corner

                                                                                      MVP Corner







                                                                                        Design. Discuss. Deliver.

                                                                                        Create visually engaging stories with Zoho Show.

                                                                                        Get Started Now


                                                                                          Zoho Show Resources

                                                                                            Zoho Writer

                                                                                            Get Started. Write Away!

                                                                                            Writer is a powerful online word processor, designed for collaborative work.

                                                                                              Zoho CRM コンテンツ






                                                                                                Nederlandse Hulpbronnen


                                                                                                    ご検討中の方




                                                                                                          • Recent Topics

                                                                                                          • Forms - Notification When Response Submitted

                                                                                                            How do I set it up to generate an email notification when a response (class request) is submitted?
                                                                                                          • How to disable user entry on Answer Bot in Zobot

                                                                                                            Hi, I have an Answer Bot in my Zobot, here is the configuration: I only want the user to choose 1 of the 4 the options I have provided: When no answer found, user chooses 'I'll rephrase the question' or 'Ask a different question When answer is found,
                                                                                                          • More admin control over user profiles

                                                                                                            It's important for our company, and I'm sure many others, to keep our users inline with our branding and professional appearance. It would be useful for administrators to have more control over profile aspects such as: Profile image User names Email signatures
                                                                                                          • Please Make Zoho CRM Cadences Flexible: Allow Inserting and Reordering Follow-Up Steps

                                                                                                            Sales processes are not static. We test, learn, and adapt as customers respond differently than expected. Right now, Zoho Cadences do not support inserting a new step between existing follow-ups or changing the type of an existing primary step. If I realize
                                                                                                          • Clear Tag & Linking Between Quotes and Sales Orders

                                                                                                            Hi Zoho Team, In Zoho Books, when a quote is converted into a sales order, it would be extremely useful to have: A clear tag/indicator on the quote showing that it has been converted into a sales order. A direct link in the sales order back to the originating
                                                                                                          • Add Direct Ticket Link to Zoho Help Center Portal in Email Replies

                                                                                                            Hi Zoho Support Team, We hope you're doing well. We’d like to request a small but valuable improvement to enhance the usability of the Zoho Help Center portal (https://help.zoho.com/portal/en/myarea). Currently, when someone from Zoho replies to a support
                                                                                                          • [Webinar] Deluge Learning Series - AI-Powered Automation using Zoho Deluge and Gemini

                                                                                                            We’re excited to invite you to an exclusive 1-hour webinar where we’ll demonstrate how to bring the power of Google’s Gemini AI into your Zoho ecosystem using Deluge scripting. Whether you're looking to automate data extraction from PDFs or dynamically
                                                                                                          • Connecting Zoho Inventory to ShipStation

                                                                                                            we are looking for someone to help connect via API shipStation with Zoho inventory. Any ideas? Thanks. Uri
                                                                                                          • Subform edits don't appear in parent record timeline?

                                                                                                            Is it possible to have subform edits (like add row/delete row) appear in the Timeline for parent records? A user can edit a record, only edit the subform, and it doesn't appear in the timeline. Is there a workaround or way that we can show when a user
                                                                                                          • New in Cadences: Option to Resume or Restart follow-ups when re-enrolling records into a Cadence, and specify custom un-enrollment criteria

                                                                                                            Managing follow-ups effectively involves understanding the appropriate timing for reaching out, as well as knowing when to take a break and resume later, or deciding if it's necessary to start the follow-up process anew. With two significant enhancements
                                                                                                          • Im Stuck in an EDIT ONLY WITH WIZARD issue

                                                                                                            So I found Wizards to be a really helpful tool in minimizing the exposure of redundant, superfluous fields to staff that would never otherwise have to edit those fields. My issue is, that when the record (in this case a lead) is created with a wizard,
                                                                                                          • Account upgrade

                                                                                                            Good evening, I upgraded my account and paid for it. From standard to professional. Unfortunately after the paiment my account was not upgraded. Please your advise. Best Regards Erik van Staverden
                                                                                                          • How to set ALL default dates of my organization to DD-MM-YYYY format?

                                                                                                            All replies to this question comes from a time where the UI was different. It's extremely frustrating not being able to find how to do this simple setting change. I want everything and everyone in my organizations to have DD-MM-YYYY date format by default.
                                                                                                          • How can I sync from Zoho Projects into an existing Zoho Sprints project?

                                                                                                            Hi I have managed to integrate Zoho Projects with Zoho Sprints and I can see that the integration works as a project was created in Zoho Sprints. But, what I would like to do is to sync into an existing Zoho Sprints project. Is there a way to make that
                                                                                                          • Can we generate APK and IOS app?

                                                                                                            Dears, I want to know the availability to develop the app on zoho and after that .. generate the APK or IOS app  and after that I added them to play store or IOS store.. Is it possible to do this .. I want not to use zoho app or let my customers use it. thanks 
                                                                                                          • Zoho Subform Workflows onAdd of Row

                                                                                                            Suppose I have a form with attached workflows onLoad. If I use the form as a subform, will it inherit the workflows or do I need to create new ones onAdd of row?
                                                                                                          • Super Admin removal

                                                                                                            I brought a sub, and I gave the Super admin rights to a person who is no longer with us, so I need to change, and I need to make myself the Super admin
                                                                                                          • Better Notes Commenting

                                                                                                            Hi, I'd like to suggest better collaboration tools for NOTES. The current notes section for Accounts, Contacts and Deals is not ideally suitable for any degree of communication or collaboration. When responding to a note, there is no ability to leave
                                                                                                          • Exporting Templates

                                                                                                            I have just spent 2 hours creating a project template for a Netsuite configuration, and want to share it with other Zoho Projects users - who have a different account. Is there any way to do this?
                                                                                                          • Power of Automation:: Streamline Associated Teams based on the Task Owner update.

                                                                                                            Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. Requirement:
                                                                                                          • No Response from Zoho Support in 8 Days - Typical?

                                                                                                            I have a couple of issues I'm trying to work through. Initially, I was getting support from support@zohofsm.com, but I have not received a response in 8 days (11 on another question). Is this typical? Can I pay for support? For context, I am not spamming
                                                                                                          • Add QUOTE OWNER profile image to a Quote Template

                                                                                                            I can add their email address.. phone number, DOB. I need to add a users profile picture so when they assign a template to a quote they own it adds their picture to the cover page. I've tried hacking a solution together but there has to be an easier way.
                                                                                                          • Zoho Connections Desk API relative URL PATTERN_NOT_MATCHED

                                                                                                            While i am trying to do this: async function fetchTicketsFromDesk(timeFilter = 'current_month') { try { const response = await ZOHO.CRM.CONNECTION.invoke("desk_connection", { url: "/api/v1/tickets", method: "GET", }); const data = response.details ? JSON.parse(response.details)
                                                                                                          • Zoho CRM - Custom Views for Portal Users

                                                                                                            I'm looking for an option to customise custom views for portal users in CRM. It would be great if "portal user" was a permission on custom views.
                                                                                                          • 【参加無料】10/17(金) 東京 ユーザ交流会 Vol.3 参加登録 受付開始!

                                                                                                            ユーザーの皆さま、こんにちは。コミュニティチームの藤澤です。 10/17(金)に、東京・新橋で「東京 ユーザー交流会 Vol.3」を開催します! 今回のユーザー事例セッションのテーマは、「Zoho Flowを活用した他社の決済サービスとの連携事例」です。 さらに、Zoho Flowに限らず、Analytics や Campaigns などの多彩なZohoサービスの活用方法について、豊富なご経験をもとにご紹介いただきます。 また、Zoho社員セッションでは、Zoho CRMを活用して日々の営業業務を効率化する具体的な事例をお話しします。業界を問わず、幅広い方にご参考いただける内容となっています!
                                                                                                          • Zoho Meeting Plug compatibility with newer versions of Outlook

                                                                                                            Documentation states that the zoho meeting plug in for outlook is only compatible with versions up to Outlook 2019 What is available to users of more up to date versions of outlook/office 365?
                                                                                                          • Getting Attachments in Zoho Desk via API

                                                                                                            Is there a way to get attachments into Zoho Desk via an API?      We have a process by which a zoho survey gets sent to the user as a link in a notification.    The survey has several upload fields where they can upload pdf documents.    I've created
                                                                                                          • Introducing Zoho's own SMS gateway

                                                                                                            We're thrilled to announce the launch of our own SMS gateway feature within Zoho Marketing Automation! This new feature enables seamless SMS campaign management alongside your email marketing initiatives, providing a more integrated and efficient way
                                                                                                          • Embedding in Desk articles

                                                                                                            We would like to embed documents in our Desk articles. When we use an iframe for the embed, we get scrollbars and a frame border. Neither of those is acceptable. I've spoken with the Desk Support team about what we want and they tell me that it cannot
                                                                                                          • Zoho CRM button to download images from image upload field

                                                                                                            Hello, I am trying to create a button in Zoho CRM that I can place in my record details view for each record and use it to download all images in the image upload fields. I tried deluge, client scripts and even with a widget, but feel lost, could not
                                                                                                          • Mass Update Contacts In Zoho Campaigns

                                                                                                            Is there a way to mass update contacts in zoho campaigns? I want to be able to change the content of a field for a few hundred contacts, and can't go through all of them individually.
                                                                                                          • report showing assignment type

                                                                                                            Hi, We've created a number of workflows to allow us to auto assign tickets to agents based on keywords and other criteria. I'm struggling to create a report that would show me what is the percentage of tickets that are assigned automatically via workflows
                                                                                                          • Option to Disable Knowledge Base Section in Feedback Widget Popup Hello Zoho Desk Team

                                                                                                            Hello Zoho Desk Team, How are you? We are actively using Zoho Desk and would like to make more use of the Feedback Widget. One of the ways we implement it is through the popup option. At the moment, the popup always displays the Knowledge Base section,
                                                                                                          • Placeholders in Ticket Templates

                                                                                                            We should be able to use placeholders in ticket templates. When we create a new ticket, our description field is shown to the client in the email they receive.  It would be very handy to be able to personalize that description field in our ticket templates to pull in the name of the client that the ticket is for. Using them in the subject field as well, so we can auto populate Account Names, etc. 
                                                                                                          • when the record is created the tag want to Show as Opportunity how i achive this using Deluge Script

                                                                                                            In the quotation i have the work flow schedule for create opportunity record in the module , on that time the quotation tag select as opportunity created. How i achive this using Deluge Script . this like i want to Do tag1 = Map(); tag1.put("name","Nurturing
                                                                                                          • Delete a channel

                                                                                                            I need delete a channel in tickets.
                                                                                                          • Copy / Duplicate Workflow

                                                                                                            I have workflows setup that are very similar to each other. We have a monitoring system watching servers, and all notifications - no matter what client it is about - will come from a  noreply@ address which is not very helpful in having it auto assigned to the right account. I have setup a workflow that will change the contact name of the ticket (currently it would say noreply@) to the correct customer which is based on the subject line, as that mentions which server the alert it is about. I need
                                                                                                          • Subtasks don't update parent task's times

                                                                                                            Hi there: I've recently upgraded to premium and check that subtasks completion % don't update the proportional completion of the parent tasks related to it.  We've been challenging with the problem of having to update twice or sometimes 3 times the completion of the related tasks. I've seen posts similar to this, of 3 years old.  Is there any roadmap for making this happen in a future release? Thanx César Ratto Lima, Perú.
                                                                                                          • Should I Use DMARC?

                                                                                                            When I configure Zoho Mail's DMARC settings, it's mandatory to fill in the RUA and RUF (Aggregate notification email address*, Forensic notification email address*) addresses. When we enter an email address in these fields, we receive reports from the
                                                                                                          • IMAP Server not responding.

                                                                                                            Trying to connect a phone via IMAP and getting "imap.zoho.com not responding." Is the server down, for maintenance or otherwise? I've tried this on two different devices and got the same error on both.
                                                                                                          • Next Page