diff --git a/AttendanceMachineUserDAO.cs b/AttendanceMachineUserDAO.cs
index 999ebf6..a4d0556 100644
--- a/AttendanceMachineUserDAO.cs
+++ b/AttendanceMachineUserDAO.cs
@@ -122,6 +122,61 @@ namespace HanvonF710XAttendanceService
}
}
+ ///
+ /// True when attendance_machine_user has an active row for this machine + device serial.
+ ///
+ public bool IsActiveRegistered(MySqlConnection connection, string machineId, string serialNumber)
+ {
+ if (string.IsNullOrWhiteSpace(machineId) || string.IsNullOrWhiteSpace(serialNumber))
+ {
+ return false;
+ }
+
+ const string query =
+ "SELECT 1 FROM hrms.attendance_machine_user " +
+ "WHERE machine_id = @MachineId AND serial_number = @SerialNumber AND is_deleted = 0 LIMIT 1";
+ using (var cmd = new MySqlCommand(query, connection))
+ {
+ cmd.CommandTimeout = 60;
+ cmd.Parameters.AddWithValue("@MachineId", machineId);
+ cmd.Parameters.AddWithValue("@SerialNumber", serialNumber.Trim());
+ var result = cmd.ExecuteScalar();
+ return result != null && result != DBNull.Value;
+ }
+ }
+
+ public HashSet GetActiveSerialNumbersForMachine(MySqlConnection connection, string machineId)
+ {
+ var serials = new HashSet(StringComparer.OrdinalIgnoreCase);
+ if (string.IsNullOrWhiteSpace(machineId))
+ {
+ return serials;
+ }
+
+ const string query =
+ "SELECT serial_number FROM hrms.attendance_machine_user " +
+ "WHERE machine_id = @MachineId AND is_deleted = 0";
+ using (var cmd = new MySqlCommand(query, connection))
+ {
+ cmd.CommandTimeout = 120;
+ cmd.Parameters.AddWithValue("@MachineId", machineId);
+ using (var reader = cmd.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ if (reader.IsDBNull(0)) continue;
+ var s = reader.GetString(0)?.Trim();
+ if (!string.IsNullOrWhiteSpace(s))
+ {
+ serials.Add(s);
+ }
+ }
+ }
+ }
+
+ return serials;
+ }
+
private List getDBUsers(MySqlDataReader reader)
{
List DbUsers = new List();