技巧22:如何允许员工签入和签出,然后自动计算其总工作时间
原文链接:https://help.zoho.com/portal/en/community/topic/tip-22-how-to-allow-employees-to-check-in-and-out-and-then-automatically-calculate-their-total-work-hours
嗨,大家好,
准确跟踪员工的工作时间对于顺利开展业务至关重要。因此,本周,我们想了解如何使用Zoho Creator自动化整个过程。通过本技巧,您将学习如何设置一个页面,使您的员工可以轻松地签入和签出,并帮助您每天跟踪他们的工作时间。
为此,我们创建一个名为Attendance App的示例应用程序,并向您展示如何使用它来跟踪每个员工的总工作时间。
申请流程
- 员工只需单击一个按钮即可签入和签出
- 员工退房后,将在管理报告中计算并更新总工作时间
- 然后,经理和管理员可以每天监控每位员工的总工作时间
为此,我们需要创建以下组件:
- 考勤表,用于记录入住和退房时间
- 带有签入和签出按钮以及两个报告的仪表板
- 授予用户访问应用程序的方法
- 员工查看其入住和退房时间的报告
- 管理员可以查看所有员工详细信息的报告
步骤1:创建出勤表
首先,我们需要创建出勤表以记录时间。该表单可以隐藏,因为单击页面上的按钮会自动记录签入和签出。
- 电子邮件(电子邮件字段)
- 入住时间(日期时间字段)
- 退房时间(日期时间字段)
- 总时间(单行字段)
- 状态(下拉字段)
步骤2:创建用于签入和签出按钮的功能
现在,让我们创建两个函数,以记录签入和签出时间。您所需要做的就是转到“工作流”,单击“新功能”,然后添加一些代码段。
功能1:记录入住时间
页面上的“签到”按钮将调用一个功能,该功能会将记录添加到出勤表中。使用以下代码创建checkintime函数:
- void login.checkintime()
- {
- fet = Attendance_form[Check_in_time == today &&Email == zoho.loginuserid];
- // This condition is to prevent an employee from checking in multiple times on the same day.
- if(fet.count() == 0)
- {
- new = insert into Attendance_form
- [
- Added_User=zoho.loginuser
- Email=zoho.loginuserid
- Check_in_time=zoho.currenttime
- Status="Checked In"
- ];
- } .
- // 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".
- openUrl("https://app.zohocreator.com/ownername/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid,"iframe","zohoview");
- // OpenURL will help you refresh the user-based report (embedded in the page) to display only the login-based entries.
- }
功能2:记录退房时间
现在,让我们创建一个函数来帮助我们记录退房时间。“签出”按钮捕获签出时间,获取包含相应用户的签到时间的记录,并计算总工作时间,这是几小时内签出和签到时间之间的差值:分钟格式。
- void login.checkouttime()
- {
- fet = Attendance_form[Check_in_time == today && Check_out_time == null && Email == zoho.loginuserid];
- //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.
- if(fet.ID > 0)
- {
- fet.Check_out_time=zoho.currenttime;
- mil_sec = (fet.Check_out_time - fet.Check_in_time);
- actual_minutes = mil_sec / (1000 * 60);
- //1000 -> mill sec to sec, 60 -> sec to min
- mins = actual_minutes.toLong() % 60;
- // % 60 -> Exclude Hours
- hours = (actual_minutes / 60).toLong();
- // 60 -> min to hour, % 24 (optional) -> Exclude Days
- time_string = hours + " : " + mins;
- fet.Total_time=time_string;
- fet.Status="Checked Out";
- }
- else
- {
- // 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.
- fet1 = Attendance_form[Check_in_time == zoho.currentdate.subDay(1) && Check_out_time == null && Email == zoho.loginuserid];
- if(fet1.ID > 0)
- {
- fet1.Check_out_time=zoho.currenttime;
- mil_sec = (fet1.Check_out_time - fet1.Check_in_time);
- actual_minutes = mil_sec / (1000 * 60);
- //1000 -> mill sec to sec, 60 -> sec to min
- mins = actual_minutes.toLong() % 60;
- // % 60 -> Exclude Hours
- hours = (actual_minutes / 60).toLong();
- // 60 -> min to hour, % 24 (optional) -> Exclude Days
- time_string = hours + " : " + mins;
- fet1.Total_time=time_string;
- fet1.Status="Checked Out";
- }
- }
- openUrl("https://app.zohocreator.com/<workspaceName>/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid,"iframe","zohoview");
- // 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.
步骤3:将按钮添加到仪表板并将其链接到功能
创建这两个功能后,需要在仪表板上创建两个按钮(“签入”和“签出”),并将该功能链接到这些按钮。当用户单击它们时,将执行功能并捕获时间。
为此,请按照下列步骤操作: - 转到页面构建器。
- 将按钮拖放到页面构建器上,您将看到一个新窗口出现,您可以在其中添加其他元素。
- 选择您要执行的操作类型,在这种情况下为执行功能。
- 选择需要执行的功能(请参阅下面的屏幕截图)。
- 创建两个按钮,然后重复这些步骤。
步骤4:将报告添加到仪表板“管理”仪表板:
跟踪员工的工作时间此仪表板将帮助管理员跟踪员工的工作时间。除了页面上的两个按钮之外,还有两个报告,这些报告是使用HTML代码段嵌入的。
- 列表报告将基于登录用户动态显示记录(例如:如果员工A已登录,则他们只能查看自己的时间)。
- 看板报告将列出当天已签到的所有用户,并且只能由应用程序的管理员查看。
现在,让我们将这两个报告嵌入到仪表板上。为此,我们需要将HTML代码段拖放到页面构建器上,并在下面编写脚本:
- <%
- {
- a = "https://app.zohocreator.com/ownername/attendance-app/report-embed/User_report?zc_SecHeader=false&Email=" + zoho.loginuserid;
- %>
- <iframe name='zohoview' height='400' width='100%' frameborder='0' scrolling='Auto' src='<%=a%>'></iframe>
- <%
- if(zoho.loginuserid == zoho.adminuserid)
- {
- %>
- <div elName='zc-component' viewLinkName='Admin' params='zc_Header=true'>
- Loading View...</div>
- <%
- }
- }
- %>
在上面的代码中,我们使用iframe嵌入了用户报告,以便在用户单击“签入”或“签出”后自动刷新用户报告(iframe)。我们还通过设置zc_SecHeader = false来隐藏用户报告中存在的辅助标题,以防止用户手动从报告中添加或修改记录。登录的用户筛选器可以直接应用于报表,也可以通过使用URL中的参数“ Email =“ + zoho.loginuserid”来直接应用。
管理员报告是使用DIV标签添加的,并且使用if条件仅显示给帐户的超级管理员。if(zoho.loginuserid == zoho.adminuserid)
如果需要,我们可以使用以下条件添加其他非管理员电子邮件,以使管理员报告可用于这些特定用户:
管理员还可以选择签出用户,以防他们在轮班结束时忘记了。
管理员报告
使用状态字段(即下拉字段)创建看板报告,您可以在状态字段的更新时添加代码。例如,当管理员将记录从“签入时间”列拖到“签出时间”时列中,用户将被自动检出。
创建工作流程时,当记录在案时,您需要选择“运行时编辑 ”。
下面是您需要在“状态字段的更新时”中编写的脚本,以便将记录拖放到看板报告的“签出时间”列时,将捕获签出时间。
- if(input.Status == "Checked Out" && input.Check_out_time == null)
- {
- input.Check_out_time = zoho.currenttime;
- mil_sec = (input.Check_out_time - input.Check_in_time);
- actual_minutes = mil_sec / (1000 * 60);
- //1000 -> mill sec to sec, 60 -> sec to min
- mins = actual_minutes.toLong() % 60;
- // % 60 -> Exclude Hours
- hours = (actual_minutes / 60).toLong();
- // 60 -> min to hour, % 24 (optional) -> Exclude Days
- time_string = hours + " : " + mins;
- input.Total_time = time_string;
- }
我们还向管理员报告添加了一个过滤器,使管理员可以查看当天签入和签出的所有员工。并且,如果需要,您可以根据需要按星期或一个月对其进行编辑。
注意:我们即将推出hoursBetween函数,该函数可用于查找入住时间和退房时间之间的时差。此函数将返回给定的开始和结束日期时间值之间的小时差。
我们希望此技巧对您有用!如果您有任何疑问,请随时在下面的评论中提问,我们很乐意为您解决!
Related Articles
技巧20:如何在子表单中自动填充值
原文链接:https://help.zoho.com/portal/en/community/topic/tip-20-how-to-autopopulate-values-in-a-subform 嘿伙计, 我们知道许多人在您的应用程序中广泛使用子表单,因为它有助于您更有效地完成工作。在本技巧中,我们将向您展示如何使用称为“行”的特殊语法在子表单中自动填充值。 让我们来看一个例子。 考虑您有一个应用程序,您需要根据该应用程序在用户单击子表单中的“ ...
技巧16:如何隐藏客户数据以确保隐私。
原文链接:https://help.zoho.com/portal/en/community/topic/tip-16-how-to-mask-customer-data-to-ensure-privacy 嗨伙计, 作为用户,我们经常不愿透露我们的联系电话或电子邮件地址,因为我们不想被通讯,促销信息或销售电话所困扰。在本技巧中,我们将讨论如何只需单击几下即可屏蔽在Zoho Creator应用程序中输入的数据! 什么是数据屏蔽? ...
技巧14:如何迭代一组Deluge代码特定次数。
原文链接:https://help.zoho.com/portal/en/community/topic/tip-14-how-to-iterate-a-set-of-deluge-code-a-specific-number-of-times 大家好, 您可能已经知道,递归函数用于 执行特定操作特定次数。我们已经在技巧2中对此进行了详细说明。同样,还有另一种方法可以迭代一组Deluge代码“ n”次。您需要做的就是创建一个列表,并使用“对于每个索引”任务对其进行特定次数的迭代。 ...
技巧4:如何以实时形式动态显示图像。
原文链接:https://help.zoho.com/portal/en/community/topic/tip-04-how-to-dynamically-display-images-in-a-live-form 嗨,大家好, 我们希望前面的技巧对您在这里的许多人有用。我们回来了一个新的提示,它将有助于改善您的应用程序的用户体验。 是的,这是对的。今天,我们将研究如何以实时形式显示已使用其他Zoho ...
技巧3:如何使用URL参数动态过滤报告
原文链接:https://help.zoho.com/portal/en/community/topic/tip-02-how-to-dynamically-filter-reports-using-url-parameters-22-3-2018 嗨伙计, 每两个星期,作为Zoho Creator-提示和技巧系列的一部分,我们今天回来了有关如何使用URL参数过滤报告的新提示。 ...