I’m sure you can help me in this, I need to create a report shows the start working time and end working time for users by register a sign in and sign out time as attendance.
To be specific, I need 2 buttons Sign in and Sign out to be know what time cashiers come and leave, then I need to view a report for that.
Search the forum for “time clock” there are already a number of solutions for what you are trying to do depending on how you want to implement it and the type of functionality you need. They all come with reports.
@markjw Yes I read it already but that is not what I asked, my request is simple, and for cashiers not for employees. I only need sign in and out not log trace
The problem is I don’t understand it, I read it twice but I don’t know the working cycle and how to get result from it.
Also I found Punch Editor, and all in the forum seems to be understand the screens except me, so I feeling embarrassing to ask “What is this means?”, so I tried to ask a separate question with what I need.
It’s better if you ask on the original question and ask question about what you don’t understand. No need to feel embarrassed we all had to learn at the beginning. Because you ask a new question people like myself will see it’s just a time clock you need and refer you to the other post.
I don’t think you need the punch editor.
There is one that does exactly what you want and works well, it includes a database tools file which you can just import.
I have some scripts I made as well that automate the creation / update of employee entities from users on V5. I’m on my mobile at the moment I’ll share them with you later.
@Mohamed_Seddiek here is the script below, you also need to add an action to execute the script and a rule to automatically execute the script on work period start.
function updateEmployees() {
var qry = '';
var userCount = 0;
var employeeCount = 0;
var employeeEntityType = 'Employees';
// Get Users
qry = "SELECT count([Name]) as [CT] FROM [Users]";
userCount = sql.Query(qry).First;
qry = "SELECT [Name], [PinCode] FROM [Users]";
var userList = sql.Query(qry).Delimit('~').All;
for (var i = 0; i < userCount; i++) {
var user = userList[i].split('~');
var userName = user[0];
var userPin = user[1];
if (!api.Entity(userName).Exists()) {
// Create new Employee entity for user
api.Entity(userName).Create(employeeEntityType);
}
// Update PIN of Employee entity
api.Entity(userName).Data('Pin').Update(userPin);
}
// Get Employee entities
qry = "SELECT count([Name]) as [CT] FROM [Entities] WHERE [EntityTypeId]=(SELECT [Id] FROM [EntityTypes] WHERE [Name]='" + employeeEntityType + "')";
employeeCount = sql.Query(qry).First;
qry = "SELECT [Name] FROM [Entities] WHERE [EntityTypeId]=(SELECT [Id] FROM [EntityTypes] WHERE [Name]='" + employeeEntityType + "') ORDER BY [Name]";
var employees = sql.Query(qry).Delimit(',').All;
for (var i = 0; i < employeeCount; i++) {
var userFound = false;
for (var j = 0; j < userCount; j++) {
var user = userList[j].split('~');
if (employees[i] == user[0]) {
userFound = true;
break;
}
}
if (!userFound) {
// User not found - remove PIN from Employee entity
api.Entity(employees[i]).Data('Pin').Update('');
}
}
}
To be honest it would be better if you took the time to study the reports so you can build one yourself. It may never satisfy you to use someone else’s report. It would also give you the ability to build and tweak reports to your own business need which is a very valuable skill.