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




                                    Zoho Desk Resources

                                    • Desk Community Learning Series


                                    • Digest


                                    • Functions


                                    • Meetups


                                    • Kbase


                                    • Resources


                                    • Glossary


                                    • Desk Marketplace


                                    • MVP Corner


                                    • Word of the Day



                                        Zoho Marketing Automation


                                                Manage your brands on social media



                                                      Zoho TeamInbox Resources

                                                        Zoho DataPrep Resources



                                                          Zoho CRM Plus Resources

                                                            Zoho Books Resources


                                                              Zoho Subscriptions Resources

                                                                Zoho Projects Resources


                                                                  Zoho Sprints Resources


                                                                    Qntrl Resources


                                                                      Zoho Creator Resources



                                                                          Zoho Campaigns 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 Writer

                                                                                    Get Started. Write Away!

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

                                                                                      Zoho CRM コンテンツ






                                                                                        Nederlandse Hulpbronnen


                                                                                            ご検討中の方





                                                                                                  • Recent Topics

                                                                                                  • Stop selling out of stock Items.

                                                                                                    Hi I have been using Zohobooks for a around 8 month now. I am not involved in selling process but my staff cant stop selling product which they do not hold in stock, this is a big headache for me as physical count never matches what is shown on the books. 
                                                                                                  • Bigin API Token Request ("invalid_client")

                                                                                                    Hi people, I tried to connect to the API without success, I've read all of the documentation multiple time and tried just about everything. I tried to do it with Python Request module and with Postman, passing the information through both the URL parameter
                                                                                                  • Customer Happiness not clickable when using API

                                                                                                    Is there a way to automatically add the Customer Feedback links when generating email drafts via the API? Currently, the feedback links are only added when generating an email draft using the UI. I tried using the endpoint described in https://desk.zoho.com/DeskAPIDocument#CustomerFeedback#CustomerFeedback_Getthecustomerfeedbackplaceholderlink
                                                                                                  • Error 403: Forbidden When Updating Email Signature via API

                                                                                                    Hi Zoho Desk team, First, congratulations again on the excellent Zoho API. But, I’m encountering an issue while attempting to update an email signature via the API. Whenever I make a request to update the signature, the response returns an HTTP 403 Forbidden
                                                                                                  • Send To Zoho Sign not Showing

                                                                                                    The button send to Zoho sign is not showing on my Zoho CRM . Is there additional steps I need to take after installing Zoho Sign to CRM ?
                                                                                                  • How to Get An Image's URL once it's uploaded to library?

                                                                                                    I manage to find URLs to the images I uploaded to my library, but after a day, it seems the links stop working like its only temporary. Where can I find the ACTUAL solid URL for my images that I upload to my Library so I can use them for my custom template / HTML coded template? Thanks, Mac
                                                                                                  • 【Zoho CRM】インポート機能のアップデート:既存データへのタグ追加が可能に!

                                                                                                    ユーザーの皆さま、こんにちは。コミュニティチームの藤澤です。 今回は「Zoho CRM アップデート情報」の中のインポート機能のアップデートをご紹介します。 Zoho CRMのタグは、データを効率的に分類、認識するためのラベルです。 タグ付けは次の3つの方法で行えます: 個別タグ付け:少数のデータを手動でタグ付け 自動化:特定のタイミングで繰り返しタグ付け 一括更新:インポート機能でタグを追加または更新 今回のアップデートでは、インポート時に既存のタグを残したまま、新しいタグの追加、既存タグを置き換えできるようになりました。
                                                                                                  • Link to Desk tickets

                                                                                                    Hello, We are using Analytics to analyze data in Desk. Is there a way to embed a link to a ticket in reports?  We'd love to be able to see the drill down data, and click a value in a result row that would launch the Desk Ticket in another window/tab. Thanks in advance for any ideas!
                                                                                                  • Bluerprints: How to connect the created record back?

                                                                                                    I've a blueprint which creates another record as part of an 'After' transition. But the two records don't seem to be linked together. If it's not automatic - how do I get the created record ID to link it to the original record? Thanks!
                                                                                                  • Populate a Related List Item based on a Stage

                                                                                                    I would like to know if I can populate a CLOSED DEAL section in a contact that populates only when a Deal (something in the Deal Module) is listed as Closed - Won. I'd like another section that is just called deals, which shows me all other deals that
                                                                                                  • Being able to draw inside a module ?

                                                                                                    I was wondering if anyone know of a solution for this request. We would like to be able to draw directly from one module in the CRM and have it attached to that record. Here is an example. Paul would go to the customer once he as done the measuring, he
                                                                                                  • 2 serial numbers for 1 item (Mac address and Serial number)

                                                                                                    There is a way to track 2 serial number type for 1 Item. Ex: Some electronic devices have a MAC address and a serial number. I need to track those 2 numbers
                                                                                                  • Holidays

                                                                                                    Hi; For defining Holidays, you need to add logic to handle the year as well as the month & day. We need to be able to enter Holidays for the next year. I need to add a holiday for January 2, 2017, but I can't until January 1st, which is a Sunday and we
                                                                                                  • Client Script: $Client.refresh({ triggerOnLoad: true }); not triggering onLoad Client Scripts

                                                                                                    Hey friends! I'm trying to store a temporary var, refresh the page for the user, then check that temporary var and do some actions. Theoretically using the title's code: $Client.refresh({ triggerOnLoad: true }); should refresh the page and trigger on
                                                                                                  • Delete a department or category

                                                                                                    How do I delete a Department?  Also, how do I delete a Category? This is pretty basic stuff here and it's impossible to find.
                                                                                                  • Adding Bluesky channel

                                                                                                    Hello, Is Bluesky (AT protocol) soon added on Social ? Bluesky is being developped and is now open to anyone (no more invitation) Thank you
                                                                                                  • Remove or hide default views

                                                                                                    I'm looking to only have the views pertinent to my organization.  Is there a way to show only my custom views (or separate them to a different area or something)? If not, this should be a feature as switching from Zendesk we had this option...
                                                                                                  • Analytics Module: Can you move items from one dashboard to another?

                                                                                                    Is there a way to move items from one dashboard to another? I want to rearrange my dashboard now that I know what i'm doing but i don't want to remake my various widgets? Edit: Hey Zoho, This would be a good feature: to be able to move/copy widgets to
                                                                                                  • Copy Widget to another Dashboard

                                                                                                    I can see the option to clone a widget to the same dashboard but is it possible to copy it to another dashboard?
                                                                                                  • Is there a way to print the dashboard?

                                                                                                    I would like the capability of printing the dashboard - is that possible?
                                                                                                  • Custom Deal Name in Lead Conversion Mapping

                                                                                                    I know there are ways to change the name of a Deal after conversion using a custom function, so no need to repost that information. I would like to see the CRM Improved with Deal Name Customisation and I think the Lead Conversion Mapping page would be
                                                                                                  • Build custom AI solutions with Catalyst’s QuickML capabilities in CRM

                                                                                                    Hello everyone, We’re thrilled to announce an improvement for our Zoho CRM Enterprise users: the ability to create custom AI solutions using Catalyst’s QuickML directly from Zoho CRM. As you may already know, Zia, Zoho CRM’s AI-powered assistant, offers
                                                                                                  • Recommendations to store meeting notes for easy access from Contacts, Accounts & Deals module records?

                                                                                                    I would like your advice on how to achieve this use case for my organization. It’s related to where/how best to store meeting notes from a conversation with Contact(s) working at an Account (Company) in the context of a Deal. The ideal solution (from
                                                                                                  • Introducing Record Summary: smarter insights at your fingertips

                                                                                                    Hello everyone, Building on the recent launch of Zoho's in-house Zia Large Language Model (Zia LLM)—a major milestone in Zoho CRM’s AI capabilities—we’re excited to introduce the Record Summary feature. This powerful addition makes use of Zia LLM to simplify
                                                                                                  • Suppress "spreadsheet will not be saved" message on published sheet

                                                                                                    I have published a sheet and have one column on that sheet that the user can edit (a dropdown picklist where the user can select the status for each line). Is there a way to suppress the Zoho Sheet message "Any changes made to this published spreadsheet
                                                                                                  • Missing "Email Authentication" tab

                                                                                                    Backstage is alerting users about "Unauthenticated Domains" with a large prompt in the backend. It adds a link to learn more. On this tutorial page, it shows where to find the "Email Authentication" tab in this screenshot. However, in our Backstage, that
                                                                                                  • Blueprint - 'On hold' state with an automatic transition?

                                                                                                    I think I'm missing something here so I'm hoping if I explain what I'm trying to achieve someone might be able to give me a way around it. We sometimes get request far in advance but we don't want to action them unless it is 7 days from when they are
                                                                                                  • Show item Cost value on Item screen

                                                                                                    The Item screen shows Accounting Stock and Physical Stock. It would be very helpful if value information could be displayed here as well, for instance Cost Price. Currently, to find the Cost Price (as used for inventory valuations) from inside the item
                                                                                                  • Zoho Analytics to Zoho Sheets - automatic update?

                                                                                                    Hi all, If I create a zoho sheet from an Analytics Report or Analytics Data, is there a way for the zoho sheet to automatically update as the Report / Data in analytics updates?
                                                                                                  • Integration with Moodle

                                                                                                    Greetings, I hope find all doing well and safe. I've recently returned to using Zoho Flow after a break and was hoping to connect my WooCommerce store with Moodle, the world's most widely used learning management system. My goal was to automatically enroll
                                                                                                  • Task status - completed - other options

                                                                                                    I have a dumb question I know i can make custom statuses for the tasks - but is there anyway to make additional "completed" statuses like for instance if i have a task "call back customer" and i leave a vm for them to call back marking it "completed -
                                                                                                  • Task module and related-to field

                                                                                                    In modules other than the Task Module I can add several lookup fields to provide a variety of relationships. In the Task module lookup fields are not available. There is only one "related to" field which I want to use for Company. But I want to relate
                                                                                                  • Zoho Assist "Agree and Download" Button "Greyed Out" ("Light Blued" Out)

                                                                                                    Anyone else having issue where support clients are unable to click "Agree and Download" to access the client so that we can provide remote support? This is for "on demand" support via accessing the support page and entering the support key and name. This
                                                                                                  • Add Lookup Field in Tasks Module

                                                                                                    Hello, I have a need to add a Lookup field in addition to the ones that are already there in the Tasks module. I've seen this thread and so understand that the reason lookup fields may not be part of it is that there are already links to the tables (https://help.zoho.com/portal/en/community/topic/custom-fields-on-task-module).
                                                                                                  • migrating from Zoho Invoices (CRM) to Zoho Books

                                                                                                    Good day, I was wondering if there was a easy way to migrate all the quotes and invoices from Zoho Invoices CRM to Zoho Books. We plan to move to using Zoho Books in a few weeks and would like to have all the quotes and invoices from the past 3 years
                                                                                                  • Zoho MA and Custom Module

                                                                                                    I am trying to create a sync between Markting Automation and Zoho CRM. I am mapping a custom module from the CRM. The custom module has email field mobile phone field However I cannot finish the integration since the system keeps asking me for email or
                                                                                                  • When is partial reimbursement going to be launched?

                                                                                                    Hi there. I saw somewhere that the partial reimbursement feature is in the work. What is the update and ETA of that? Our clients and prospects have been asking us and we agree that that is an important feature to have.
                                                                                                  • All notes disappeared

                                                                                                    I've been using the notebook app for over five years on my phone without being logged into an account. A few days ago I opened the app and all my notes had disappeared. Since then I tried restarting my phone, updating the app and logging into my account,
                                                                                                  • Introducing Keyboard Shortcuts for Zoho CRM

                                                                                                    Dear Customers, We're happy to introduce keyboard shortcuts for Zoho CRM features! Until now, you might have been navigating to modules manually using the mouse, and at times, it could be tedious, especially when you had to search for specific modules
                                                                                                  • Year-End Wrap: Declutter Your Inbox Using Email Filters

                                                                                                    Ping!—an email drops in. And another. And another! It's finally that time of the year when your inbox will be bursting with messages from team members, clients, and marketing agents, leaving you feeling overwhelmed and distracted. Sounds familiar? Now
                                                                                                  • Next Page