Utopia-Attendance-Software/MainForm.cs

1826 lines
70 KiB
C#

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using UtopiaAttService;
namespace FaceTransfer
{
public partial class Form1 : Form
{
public zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass();
private bool bIsConnected = false;//the boolean value identifies whether the device is connected
public static string filePath = "credentials.txt";
private CheckBox headerCheckBox;
private CheckBox headerCheckBox2;
private CheckBox headerCheckBox3;
string machineid1From;
string machineid2To;
private int count = 0;
int totalrecord = 0;
static string devInfo2;
static string machineid2;
static ConnectionClass ObjConnectionClass = new ConnectionClass();
static MachineConnectivity machineConnectivity = new MachineConnectivity();
RegisteredUsers RegisteredUsers = new RegisteredUsers();
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
static MySqlConnection connection;
private AttendanceMachine Machine;
private BackgroundWorker backgroundWorker;
StringBuilder responseStringBuilder = new StringBuilder();
List<Attendance> MachineEmployeeList = new List<Attendance>();
CallBack myCallBack = new CallBack(machineConnectivity.BeCalled);
public Form1()
{
InitializeComponent();
SetGridView1();
SetGridView2();
SetGridView3();
SetBackgroundWorker();
//addColumnMachineGrid();
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy-MM-dd";
}
private void Form1_Load(object sender, EventArgs e)
{
bindDropDownMachineIp();
// Enable auto-scrolling for the form
this.AutoScroll = true;
this.HorizontalScroll.Enabled = false;
this.VerticalScroll.Enabled = false;
}
private void addColumnMachineGrid()
{
DataGridViewTextBoxColumn idColumn = new DataGridViewTextBoxColumn();
idColumn.HeaderText = "Employee ID"; // Set the header text for the column
// Add the column to the DataGridView
DataGvMachine.Columns.Add(idColumn);
}
private void SetBackgroundWorker()
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BackgroundWorker_RunWorkerCompleted);
backgroundWorker.ProgressChanged += Bg_ProgressChanged;
}
private void Bg_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (backgroundWorker.CancellationPending)
{
// Handle the progress update only if the background worker is not canceled
return;
}
if (e.ProgressPercentage == 0)
{
UpdateUITask(machineid1From, machineid2To);
}
if (e.ProgressPercentage == 1)
{
lblTotalEmp.Text = "Total emp : " + e.UserState.ToString();
}
if (e.ProgressPercentage == 2)
{
lblResult.Text = "Emp: " + e.UserState + " ---> transferred";
}
if (e.ProgressPercentage == 3)
{
lblResult.Text = "Emp: " + e.UserState + " ---> transferred";
}
}
private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
RunFaceTransfer();
}
/// ////////////////////////////////////--------------- BACKGROUND WORKER COMPLETE --------------------/////////////////////////
private void btn_sync_Click(object sender, EventArgs e)
{
if (dateTimePicker1.Text.Length > 0 && cb_machineFrom.SelectedIndex > 0)
{
List<string> response = syncAttendance();
if (response.Count != 0)
{
MessageBox.Show("Completed");
}
else
{
MessageBox.Show("Sync not completed");
}
}
else
{
MessageBox.Show("Please provide proper data");
}
}
public List<string> syncAttendance()
{
List<string> responses = new List<string>();
connection = ObjConnectionClass.Connection();
if (ObjConnectionClass.OpenConnection() == true)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
string machineIp = cb_machineFrom.SelectedValue.ToString();
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", machineIp);
foreach (var machine in machines)
{
responses.Add(PostAttendance(machine));
}
}
ObjConnectionClass.CloseConnection();
return responses;
}
public string PostAttendance(AttendanceMachine machine)
{
string response = "";
DateTime now = DateTime.Now.AddMinutes(-5);
string devInfo = machine.GetDeviceInfo();
//string str4 = "GetRecord(start_time=\"" + machine.LastSyncDate.ToString("yyyy-MM-dd HH:mm:ss") + "\")";
string date = dateTimePicker1.Text.ToString();
date = date + " 00:00:00";
string str4 = "GetRecord(start_time=\"" + date + "\")";
string str5 = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo, devInfo.Length, str4, str4.Length, ref str5, ref num2, myCallBack) != 0)
{
Console.WriteLine("Not Connected");
response = machine.MachineId + " is not connected !";
}
else
{
Console.WriteLine("Connected");
// response = machine.MachineId + " has " + GetLoopCnt(str5) + " records !";
Console.WriteLine(response);
machine.LastSyncDate = now;
SaveRows(str5, machine);
}
return response;
}
public void SaveRows(string response, AttendanceMachine machine)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
AttendanceDAO attendanceDAO = new AttendanceDAO();
string[] allObj = response.Split(new string[] { "time" }, StringSplitOptions.None);
totalrecord = GetTotal(allObj[0]);
// Set ProgressBar properties
lb_total.Text = "Total 0/" + totalrecord + "";
progressBar1.Minimum = 0;
progressBar1.Maximum = totalrecord;
int count = 0;
for (int i = 0; i < allObj.Length; i++)
{
string s = allObj[i];
if (!s.Contains("Return"))
{
string[] objDetail = s.Split(new string[] { "\"" }, StringSplitOptions.None);
Attendance log = new Attendance(objDetail[3], Convert.ToDateTime(objDetail[1]), false, machine.MachineId, "1", machine.MachineIp, Convert.ToDateTime(objDetail[1]));
count++;
lb_total.Text = "Total " + count + "/" + totalrecord + "";
Console.WriteLine("{Total " + count + " / " + totalrecord + " }");
attendanceDAO.Add(log, connection);
progressBar1.Value = count;
}
}
}
public int GetTotal(string str5String)
{
// Regular expression pattern to match "total" attribute
string pattern = @"total=""(\d+)""";
// Use Regex.Match to find the match in the str5String
Match match = Regex.Match(str5String, pattern);
if (match.Success)
{
// Extract the "total" value from the match
totalrecord = Convert.ToInt32(match.Groups[1].Value);
}
return totalrecord;
}
/// ////////////////////////////////////--------------- SYNC ATTENDANCE COMPLETE --------------------/////////////////////////
private void UpdateUITask(string machineid, string machineid2)
{
// Use Invoke to safely update the UI controls from the main UI thread
lblFrom.Text = "From - " + machineid.ToLower();
lblTo.Text = "To - " + machineid2.ToLower();
}
int port;
int Tomachineid;
public void RunFaceTransferNedoToZkteco()
{
string fromip = cb_from.SelectedValue.ToString();
string Toip = cb_to.SelectedValue.ToString();
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
List<string> responses = new List<string>();
// Initialize();
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
//List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", fromip);
//foreach (var machine in machines)
//{
// machineid1From = machine.MachineId;
List<AttendanceMachine> machineFrom = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", fromip);
foreach (var machine in machineFrom)
{
//devInfo2 = GetDeviceInfo(machine.MachineIp, machine.PortNumber);
List<AttendanceMachine> machinTo = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", Toip);
foreach (var machineTo in machinTo)
{
port = machineTo.PortNumber;
int.TryParse(machineTo.MachineId, out Tomachineid);
}
List<string> selectedValues = new List<string>();
// Loop through each row in the DataGridView
foreach (DataGridViewRow row in gv.Rows)
{
// Check if the CheckBox in the first column is checked for the current row
DataGridViewCheckBoxCell checkBoxCell = row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell;
if (checkBoxCell.Value != null && (bool)checkBoxCell.Value)
{
// If the CheckBox is checked, get the value of the "AcNo" column (Employee ID)
string employeeId = row.Cells["AcNo"].Value.ToString();
selectedValues.Add(employeeId);
}
}
// Now, the selectedValues list contains the Employee IDs of the selected rows
// You can process this list as needed
foreach (string employeeId in selectedValues)
{
Console.WriteLine("Selected Employee ID: " + employeeId);
responses.AddRange(get_set_EmpFaceTemplateZkteco(employeeId, fromip, Convert.ToInt32(machine.MachineId), Toip, Tomachineid, port));
}
if (selectedValues.Count == 0)
{
get_set_EmpFaceTemplateZkteco(employeeId, fromip, Convert.ToInt32(machine.MachineId), Toip, Tomachineid, port);
//MessageBox.Show("Completed");
}
}
ObjConnectionClass.CloseConnection();
MessageBox.Show("Completed");
}
btnReset_Click(null, null);
}
public void RunFaceTransfer()
{
string fromip = cb_fromMachine.SelectedValue.ToString();
string Toip = cb_ToMachine.SelectedValue.ToString();
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
List<string> responses = new List<string>();
// Initialize();
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
//List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", fromip);
//foreach (var machine in machines)
//{
// machineid1From = machine.MachineId;
List<AttendanceMachine> machines2 = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", Toip);
foreach (var machine2 in machines2)
{
devInfo2 = GetDeviceInfo(Toip, machine2.PortNumber);
machineid2 = machine2.MachineId;
machineid2To = machineid2;
//backgroundWorker.ReportProgress(0);
// }
List<string> selectedValues = new List<string>();
// Loop through each row in the DataGridView
foreach (DataGridViewRow row in GvEmpData.Rows)
{
// Check if the CheckBox in the first column is checked for the current row
DataGridViewCheckBoxCell checkBoxCell = row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell;
if (checkBoxCell.Value != null && (bool)checkBoxCell.Value)
{
// If the CheckBox is checked, get the value of the "AcNo" column (Employee ID)
string employeeId = row.Cells["AcNo"].Value.ToString();
selectedValues.Add(employeeId);
}
}
// Now, the selectedValues list contains the Employee IDs of the selected rows
// You can process this list as needed
foreach (string employeeId in selectedValues)
{
Console.WriteLine("Selected Employee ID: " + employeeId);
getEmpFaceTemplate(employeeId, Machine.MachineIp, Machine.PortNumber, Machine.MachineId, Toip, devInfo2, machineid2);
}
}
ObjConnectionClass.CloseConnection();
}
btnReset_Click(null, null);
}
public void getEmpFaceTemplate(string empid, string machineip, int portno, string machineID, string FaceSetInIP, string devInfo2, string machineid2)
{
string devInfo = GetDeviceInfo(machineip, portno);
string str4 = "GetEmployee(id=\"" + empid + "\")";
string str5 = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo, devInfo.Length, str4, str4.Length, ref str5, ref num2, myCallBack) != 0)
{
Console.WriteLine("Not Connected");
MessageBox.Show("Machine not connected");
return;
}
else
{
if (!str5.Contains("fail"))
{
SetEmployeeInfo(myCallBack, str5, empid, devInfo2, machineid2);
count++;
}
else
{
Console.WriteLine("Emp: " + empid + "---> Not transferred in " + machineID + "");
}
}
}
bool Bconnect = false;
int lenght = 0;
string template;
public List<string> get_set_EmpFaceTemplateZkteco(string empid, string fromIP, int fromID, string ToIP, int ToID, int port)
{
List<string> responses = new List<string>();
Bconnect = axCZKEM1.Connect_Net(fromIP, port);
axCZKEM1.EnableDevice(fromID, false); //disable the device
if (Bconnect == true)
{
if (empid == "")
{
//while (axCZKEM1.SSR_GetAllUserInfo(machineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled))
//{
//}
}
else
{
if (axCZKEM1.GetUserFaceStr(fromID, empid, 50, ref template, ref lenght))
{
Bconnect = false;
Bconnect = axCZKEM1.Connect_Net(ToIP, port);
axCZKEM1.EnableDevice(ToID, false); //disable the device
if (Bconnect == true)
{
if (axCZKEM1.SSR_SetUserInfo(ToID, empid, "", "", 0, true))//upload user information to the memory
{
bool getUserTmpExSuccess = axCZKEM1.SetUserFaceStr(ToID, (empid), 50, template, 0); // upload templates information to the device
if (getUserTmpExSuccess)
{
responses.Add($"Emp : {empid} transferred");
Console.WriteLine("");
}
}
axCZKEM1.EnableDevice(ToID, true);
axCZKEM1.RefreshData(ToID);//the data in the device should be refreshed
axCZKEM1.Disconnect();
}
else
{
responses.Add($"Machine {ToIP} not connected.");
Console.WriteLine($"Machine {ToIP} not connected.");
}
axCZKEM1.EnableDevice(fromID, true);
axCZKEM1.Disconnect();
}
else
{
// Handle failure to connect to the device
responses.Add($"Face template not availabel in {fromIP}.");
}
}
}
else
{
responses.Add($"Machine {fromIP} not connected.");
Console.WriteLine($"Machine {fromIP} not connected.");
}
return responses;
}
public List<string> SetEmployeeInfo(CallBack myCallBack, string str5, string empid, string devInfo2, string machineid)
{
string str4 = "";
List<string> responses = new List<string>();
string[] splitData = str5.Split('(');
for (int i = 0; i < splitData.Length; i++)
{
string s = splitData[i];
if (!s.Contains("Return"))
{
string updatedData = s.Replace("result=\"success\" ", "");
string[] updatedResult = updatedData.Split(')');
str4 = "SetEmployee(" + updatedResult[0] + ")";
//str4 = str4.Substring(0, str4.Length - 1);
//str4 += str4 + " overwrite=\"true\")";
}
}
str5 = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo2, devInfo2.Length, str4, str4.Length, ref str5, ref num2, myCallBack) != 0)
{
Console.WriteLine(str5);
responses.Add("Machine not connected");
MessageBox.Show("Machine not connected");
}
else
{
Console.WriteLine(str5);
if (!str5.Contains("fail"))
{
Console.WriteLine("Emp: " + empid + "---> transferred in " + machineid + "");
responses.Add("Emp: " + empid + "---> transferred in " + machineid + "");
backgroundWorker.ReportProgress(2, empid);
MessageBox.Show("Emp transferred");
}
else
{
Console.WriteLine("Emp: " + empid + "---> Not transferred in " + machineid + "");
responses.Add("Emp: " + empid + "---> Not transferred in " + machineid + "");
MessageBox.Show("Emp not transferred");
}
}
return responses;
}
public static string GetDeviceInfo(string machineIp, int portNumber)
{
return "DeviceInfo( dev_id = \"1\" dev_type = \"HW_HDCP\" comm_type = \"ip\" ip_address = \"" + machineIp + "\", password = \"\", port_number = \"" + portNumber + "\")";
}
private void BindSearchData(string searchText, int GridNo)
{
if (GridNo == 1)
{
GvEmpData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// Ensure that the search text is not empty
if (string.IsNullOrWhiteSpace(searchText))
{
// Reset the selection if the search text is empty
GvEmpData.ClearSelection();
return;
}
// Search for the row that matches the search text (case-insensitive)
foreach (DataGridViewRow row in GvEmpData.Rows)
{
// Ensure that the cell value is not null before comparing
if (row.Cells[1].Value != null && row.Cells[1].Value.ToString().Equals(searchText, StringComparison.OrdinalIgnoreCase))
{
row.Selected = true;
// Scroll to the selected row if needed
GvEmpData.FirstDisplayedScrollingRowIndex = row.Index;
return;
}
}
// If the search text is not found, clear the selection
GvEmpData.ClearSelection();
}
if (GridNo == 2)
{
gv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// Ensure that the search text is not empty
if (string.IsNullOrWhiteSpace(searchText))
{
// Reset the selection if the search text is empty
gv.ClearSelection();
return;
}
// Search for the row that matches the search text (case-insensitive)
foreach (DataGridViewRow row in gv.Rows)
{
// Ensure that the cell value is not null before comparing
if (row.Cells[1].Value != null && row.Cells[1].Value.ToString().Equals(searchText, StringComparison.OrdinalIgnoreCase))
{
row.Selected = true;
// Scroll to the selected row if needed
gv.FirstDisplayedScrollingRowIndex = row.Index;
return;
}
}
// If the search text is not found, clear the selection
gv.ClearSelection();
}
if (GridNo == 3)
{
gvZktecoData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// Ensure that the search text is not empty
if (string.IsNullOrWhiteSpace(searchText))
{
// Reset the selection if the search text is empty
gvZktecoData.ClearSelection();
return;
}
// Search for the row that matches the search text (case-insensitive)
foreach (DataGridViewRow row in gvZktecoData.Rows)
{
// Ensure that the cell value is not null before comparing
if (row.Cells[0].Value != null && row.Cells[0].Value.ToString().Equals(searchText, StringComparison.OrdinalIgnoreCase))
{
row.Selected = true;
// Scroll to the selected row if needed
gvZktecoData.FirstDisplayedScrollingRowIndex = row.Index;
return;
}
}
// If the search text is not found, clear the selection
gvZktecoData.ClearSelection();
}
else
{
DataGvMachine.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// Ensure that the search text is not empty
if (string.IsNullOrWhiteSpace(searchText))
{
// Reset the selection if the search text is empty
DataGvMachine.ClearSelection();
return;
}
// Search for the row that matches the search text (case-insensitive)
foreach (DataGridViewRow row in DataGvMachine.Rows)
{
// Ensure that the cell value is not null before comparing
if (row.Cells[1].Value != null && row.Cells[1].Value.ToString().Equals(searchText.ToString(), StringComparison.OrdinalIgnoreCase))
{
row.Selected = true;
// Scroll to the selected row if needed
DataGvMachine.FirstDisplayedScrollingRowIndex = row.Index;
return;
}
}
// If the search text is not found, clear the selection
DataGvMachine.ClearSelection();
}
}
private void bindDropDownMachineIp()
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
string query = "Select a.machine_ip , a.machine_name , CONCAT(a.machine_name, '-', a.machine_ip) AS concatColumn from attendance_machine a where a.machine_status = 1 order by machine_id";
MySqlCommand cmd = new MySqlCommand(query, connection);
DataTable dataTable = new DataTable();
MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter();
mySqlDataAdapter.SelectCommand = cmd;
mySqlDataAdapter.Fill(dataTable);
if (dataTable.Rows.Count > 0)
{
// Create a new row with Id = 0
DataRow newRow = dataTable.NewRow();
newRow["concatColumn"] = "SELECT";
// Insert the new row at the 0 index
dataTable.Rows.InsertAt(newRow, 0);
// Clone the DataTable for each ComboBox
DataTable cbFromDataSource = dataTable.Clone();
DataTable cbToDataSource = dataTable.Clone();
DataTable cbMachineFromDataSource = dataTable.Clone();
DataTable cbMachineDataSource = dataTable.Clone();
DataTable cbMachIpDataSource = dataTable.Clone();
DataTable cbMachIpTurnstileDataSource = dataTable.Clone();
DataTable cbDataSource = dataTable.Clone();
DataTable cbtoDataSource = dataTable.Clone();
DataTable cb_zktecoDatasource = dataTable.Clone();
// Import the rows from the original DataTable to cloned DataTables
foreach (DataRow row in dataTable.Rows)
{
cbFromDataSource.ImportRow(row);
cbToDataSource.ImportRow(row);
cbMachineFromDataSource.ImportRow(row);
cbMachineDataSource.ImportRow(row);
cbMachIpDataSource.ImportRow(row);
cbMachIpTurnstileDataSource.ImportRow(row);
cbDataSource.ImportRow(row);
cbtoDataSource.ImportRow(row);
cb_zktecoDatasource.ImportRow(row);
}
cb_fromMachine.DataSource = cbFromDataSource;
cb_fromMachine.ValueMember = "machine_ip";
cb_fromMachine.DisplayMember = "concatColumn";
cb_ToMachine.DataSource = cbToDataSource;
cb_ToMachine.ValueMember = "machine_ip";
cb_ToMachine.DisplayMember = "concatColumn";
cb_machineFrom.DataSource = cbMachineFromDataSource;
cb_machineFrom.ValueMember = "machine_ip";
cb_machineFrom.DisplayMember = "concatColumn";
cbMachineIp.DataSource = cbMachineDataSource;
cbMachineIp.ValueMember = "machine_ip";
cbMachineIp.DisplayMember = "concatColumn";
cbMachIp.DataSource = cbMachIpDataSource;
cbMachIp.ValueMember = "machine_ip";
cbMachIp.DisplayMember = "concatColumn";
cb_machineIpTurnstile.DataSource = cbMachIpTurnstileDataSource;
cb_machineIpTurnstile.ValueMember = "machine_ip";
cb_machineIpTurnstile.DisplayMember = "concatColumn";
cb_from.DataSource = cbDataSource;
cb_from.ValueMember = "machine_ip";
cb_from.ValueMember = "machine_ip";
cb_from.DisplayMember = "concatColumn";
cb_to.DataSource = cbtoDataSource;
cb_to.DataSource = cbtoDataSource;
cb_to.ValueMember = "machine_ip";
cb_to.DisplayMember = "concatColumn";
cb_zkteco.DataSource = cb_zktecoDatasource;
cb_zkteco.ValueMember = "machine_ip";
cb_zkteco.DisplayMember = "concatColumn";
comboBox1.DataSource = cb_zktecoDatasource;
comboBox1.ValueMember = "machine_ip";
comboBox1.DisplayMember = "concatColumn";
}
}
}
private void SetGridView2()
{
DataGvMachine.BackgroundColor = Color.White;
DataGvMachine.RowHeadersVisible = false;
DataGvMachine.AutoGenerateColumns = false;
// Add a CheckBox Column to the DataGridView at the first position.
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
checkBoxColumn.HeaderText = ""; // Set the header text for the CheckBox column
checkBoxColumn.Width = 30;
checkBoxColumn.Name = "checkBoxColumn";
// Set the custom header cell to display the desired text and center align the text
DataGridViewColumnHeaderCell headerCell = new DataGridViewColumnHeaderCell();
headerCell.Value = "";
headerCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
checkBoxColumn.HeaderCell = headerCell;
DataGvMachine.Columns.Insert(0, checkBoxColumn);
// Find the Location of Header Cell (using index 0).
Point headerCellLocation = this.DataGvMachine.GetCellDisplayRectangle(0, -1, true).Location;
// Initialize the header checkbox
headerCheckBox2 = new CheckBox();
headerCheckBox2.Size = new Size(15, 15);
headerCheckBox2.BackColor = Color.Transparent;
// Place the Header CheckBox in the Location of the Header Cell.
headerCheckBox2.Location = new Point(headerCellLocation.X + (checkBoxColumn.Width / 2) - (headerCheckBox2.Width / 2), headerCellLocation.Y + 2);
// Assign Click event to the Header CheckBox.
headerCheckBox2.Click += new EventHandler(HeaderCheckBox_Clicked1);
DataGvMachine.Controls.Add(headerCheckBox2);
// Assign Click event to the DataGridView Cell.
DataGvMachine.CellContentClick += new DataGridViewCellEventHandler(DataGvMachine_CellClick);
// Add a new DataGridViewTextBoxColumn
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "AcNo"; // Set DataPropertyName to "AcNo"
column.HeaderText = "Employee ID"; // Set the header text for the column
column.Name = "AcNo";
// Add the column to the DataGridView
DataGvMachine.Columns.Add(column);
DataGvMachine.Visible = false;
}
private void SetGridView1()
{
GvEmpData.BackgroundColor = Color.White;
GvEmpData.RowHeadersVisible = false;
GvEmpData.AutoGenerateColumns = false;
// Add a CheckBox Column to the DataGridView at the first position.
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
checkBoxColumn.HeaderText = ""; // Set the header text for the CheckBox column
checkBoxColumn.Width = 30;
checkBoxColumn.Name = "checkBoxColumn";
// Set the custom header cell to display the desired text and center align the text
DataGridViewColumnHeaderCell headerCell = new DataGridViewColumnHeaderCell();
headerCell.Value = "";
headerCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
checkBoxColumn.HeaderCell = headerCell;
GvEmpData.Columns.Insert(0, checkBoxColumn);
// Find the Location of Header Cell (using index 0).
Point headerCellLocation = this.GvEmpData.GetCellDisplayRectangle(0, -1, true).Location;
// Initialize the header checkbox
headerCheckBox3 = new CheckBox();
headerCheckBox3.Size = new Size(15, 15);
headerCheckBox3.BackColor = Color.Transparent;
// Place the Header CheckBox in the Location of the Header Cell.
headerCheckBox3.Location = new Point(headerCellLocation.X + (checkBoxColumn.Width / 2) - (headerCheckBox3.Width / 2), headerCellLocation.Y + 2);
// Assign Click event to the Header CheckBox.
headerCheckBox3.Click += new EventHandler(HeaderCheckBox_Clicked);
GvEmpData.Controls.Add(headerCheckBox3);
// Assign Click event to the DataGridView Cell.
GvEmpData.CellContentClick += new DataGridViewCellEventHandler(GvEmpData_CellClick);
// Add a new DataGridViewTextBoxColumn
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "AcNo"; // Set DataPropertyName to "AcNo"
column.HeaderText = "Employee ID"; // Set the header text for the column
column.Name = "AcNo";
// Add the column to the DataGridView
GvEmpData.Columns.Add(column);
GvEmpData.Visible = false;
}
private void SetGridView3()
{
gv.BackgroundColor = Color.White;
gv.RowHeadersVisible = false;
gv.AutoGenerateColumns = false;
// Add a CheckBox Column to the DataGridView at the first position.
DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
checkBoxColumn.HeaderText = ""; // Set the header text for the CheckBox column
checkBoxColumn.Width = 30;
checkBoxColumn.Name = "checkBoxColumn";
// Set the custom header cell to display the desired text and center align the text
DataGridViewColumnHeaderCell headerCell = new DataGridViewColumnHeaderCell();
headerCell.Value = "";
headerCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
checkBoxColumn.HeaderCell = headerCell;
gv.Columns.Insert(0, checkBoxColumn);
// Find the Location of Header Cell (using index 0).
Point headerCellLocation = this.gv.GetCellDisplayRectangle(0, -1, true).Location;
// Initialize the header checkbox
headerCheckBox = new CheckBox();
headerCheckBox.Size = new Size(15, 15);
headerCheckBox.BackColor = Color.Transparent;
// Place the Header CheckBox in the Location of the Header Cell.
headerCheckBox.Location = new Point(headerCellLocation.X + (checkBoxColumn.Width / 2) - (headerCheckBox.Width / 2), headerCellLocation.Y + 2);
// Assign Click event to the Header CheckBox.
headerCheckBox.Click += new EventHandler(GvHeaderCheckBox_Clicked);
gv.Controls.Add(headerCheckBox);
// Assign Click event to the DataGridView Cell.
gv.CellContentClick += new DataGridViewCellEventHandler(gv_CellClick);
// Add a new DataGridViewTextBoxColumn
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.DataPropertyName = "AcNo"; // Set DataPropertyName to "AcNo"
column.HeaderText = "Employee ID"; // Set the header text for the column
column.Name = "AcNo";
// Add the column to the DataGridView
gv.Columns.Add(column);
}
private void showControls()
{
lblSearch.Visible = true;
txtSearch.Visible = true;
lbl_ip_to.Visible = true;
cb_ToMachine.Visible = true;
GvEmpData.Visible = true;
}
/////////////////////////////////////----------- BUTTONS & EVENTS -----------------------//////////////////////////////////////////
private void btnGet_Click(object sender, EventArgs e)
{
showControls();
if (cb_fromMachine.SelectedIndex > 0)
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", cb_fromMachine.SelectedValue.ToString());
machineid1From = machines[0].MachineId;
Machine = new AttendanceMachine(machines[0].MachineId, cb_fromMachine.SelectedValue.ToString(), machines[0].PortNumber);
(List<Attendance> EmployeeList, int TotalCount) = attendanceMachineDAO.GetEmployees(connection, machineid1From);
backgroundWorker.ReportProgress(1, TotalCount);
// Set the EmployeeList as the DataSource
GvEmpData.DataSource = EmployeeList;
ObjConnectionClass.CloseConnection();
}
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void txtSearch_TextChanged(object sender, EventArgs e)
{
string searchText = txtSearch.Text.Trim();
BindSearchData(searchText, 1);
}
private void btnReset_Click(object sender, EventArgs e)
{
cb_machineFrom.SelectedIndex = 0;
lb_total.Text = "Total";
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = 0;
count = 0;
backgroundWorker.WorkerSupportsCancellation = true;
if (backgroundWorker.IsBusy)
{
// Request cancellation of the task
backgroundWorker.CancelAsync();
}
cb_fromMachine.SelectedIndex = 0;
cb_ToMachine.SelectedIndex = 0;
lblFrom.Text = "From:";
lblTo.Text = "To:";
lblResult.Text = "Emp no :";
lblTotalEmp.Text = "Total Emp :";
GvEmpData.DataSource = null;
GvEmpData.Visible = false;
lbl_ip_to.Visible = false;
cb_ToMachine.Visible = false;
lblSearch.Visible = false;
txtSearch.Visible = false;
cb_machineFrom.SelectedIndex = 0;
txtSearch.Text = "";
tb_emp.Text = "";
GvRegisteredUsers.DataSource = null;
DataGvMachine.DataSource = null;
GvFaceTemplate.DataSource = null;
txtEmpoyeeCd.Text = null;
cbMachIp.SelectedIndex = 0;
}
private void Btn_Transfer_Click(object sender, EventArgs e)
{
if (cb_fromMachine.SelectedIndex > 0 && cb_ToMachine.SelectedIndex > 0)
{
//backgroundWorker.RunWorkerAsync();
RunFaceTransfer();
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void btnGetRecord_Click(object sender, EventArgs e)
{
DataGvMachine.Visible = true;
if (comboBox1.SelectedIndex > 0)
{
//DataGvMachine.Rows.Clear();
lbl_totalemp.Text = "";
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", comboBox1.SelectedValue.ToString());
Machine = new AttendanceMachine(machines[0].MachineId, comboBox1.SelectedValue.ToString(), machines[0].PortNumber);
// backgroundWorker.ReportProgress(1, TotalCount);
string devInfo = GetDeviceInfo(machines[0].MachineIp, machines[0].PortNumber);
string str4 = "GetEmployeeID()";
string str5 = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo, devInfo.Length, str4, str4.Length, ref str5, ref num2, myCallBack) != 0)
{
Console.WriteLine("Not Connected");
MessageBox.Show("Machine not connected");
}
else
{
if (!str5.Contains("fail"))
{
ConvertData(str5);
}
else
{
}
}
ObjConnectionClass.CloseConnection();
}
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void ConvertData(string str5)
{
DataTable dt = new DataTable();
dt.Columns.Add("AcNo", typeof(string));
string[] keyValuePairs = str5.Split(new char[] { ',', '=' }, StringSplitOptions.RemoveEmptyEntries);
// Create a list to store the extracted values
List<string> values = new List<string>();
foreach (string keyValue in keyValuePairs)
{
// Find the index of the first occurrence of '"'
int startIdx = keyValue.IndexOf('"');
// Find the index of the last occurrence of '"'
int endIdx = keyValue.LastIndexOf('"');
// Extract the value between the '"' characters
if (startIdx != -1 && endIdx != -1 && startIdx < endIdx)
{
string value = keyValue.Substring(startIdx + 1, endIdx - startIdx - 1);
values.Add(value);
}
}
if (values.Count > 0)
{
// The first value is the total employee count
lbl_totalemp.Text = "Total Emp: " + values[1].ToString();
foreach (string value in values)
{
if (value != "success" && value != values[1])
{
//DataGvMachine.Rows.Add(value);
dt.Rows.Add(value);
}
}
}
SortDataGridView(dt);
//DataGvMachine.DataSource = dt;
}
private void SortDataGridView(DataTable dt)
{
// Assuming you have populated the data source for DataGvMachine
// and the data source is a DataTable named "dataSourceTable"
// Assuming "serial_number" column is in the first position (index 0)
if (dt.Rows.Count > 0)
{
// Custom sorting by converting "serial_number" to unsigned integer
var sortedRows = dt.AsEnumerable()
.OrderBy(row => Convert.ToUInt64(row["AcNo"]))
.CopyToDataTable();
// Bind the sorted data to the DataGridView
DataGvMachine.DataSource = sortedRows;
}
}
private void txt_search2_TextChanged(object sender, EventArgs e)
{
string searchText = txt_search2.Text.Trim();
BindSearchData(searchText, 0);
}
string employeeId;
private void GetTemplateSaveInMachine()
{
SaveTemplate saveTemplate = new SaveTemplate();
string fromip = cbMachineIp.SelectedValue.ToString();
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
List<string> responses = new List<string>();
// Initialize();
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
string devInfo = GetDeviceInfo(fromip, Machine.PortNumber);
foreach (DataGridViewRow row in DataGvMachine.Rows)
{
// Check if the CheckBox in the first column is checked for the current row
DataGridViewCheckBoxCell checkBoxCell = row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell;
if (checkBoxCell.Value != null && (bool)checkBoxCell.Value)
{
// If the CheckBox is checked, get the value of the "AcNo" column (Employee ID)
employeeId = row.Cells["AcNo"].Value.ToString();
string str4 = "GetEmployee(id=\"" + employeeId + "\")";
string machineResponse = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo, devInfo.Length, str4, str4.Length, ref machineResponse, ref num2, myCallBack) != 0)
{
Console.WriteLine("Not Connected");
return;
}
else
{
if (!machineResponse.Contains("fail"))
{
str4 = removeReturn(machineResponse);
saveTemplate.CheckInDb(connection, employeeId, str4);
}
else
{
Console.WriteLine("Template not saved");
}
}
}
}
}
}
private string removeReturn(string str5)
{
string str4 = null;
string[] splitData = str5.Split('(');
for (int i = 0; i < splitData.Length; i++)
{
string s = splitData[i];
if (!s.Contains("Return"))
{
string updatedData = s.Replace("result=\"success\" ", "");
string[] updatedResult = updatedData.Split(')');
str4 = updatedResult[0];
}
}
return str4;
}
private void SepratetemplateFromStr5()
{
//string searchStr = "face_data=\"";
//int currentIndex = 0;
//while (true)
//{
// int startIndex = str5.IndexOf(searchStr, currentIndex);
// if (startIndex == -1)
// {
// break;
// }
// startIndex += searchStr.Length;
// int endIndex = str5.IndexOf("\"", startIndex);
// if (endIndex == -1)
// {
// break;
// }
// string faceData = str5.Substring(startIndex, endIndex - startIndex);
// Console.WriteLine(faceData);
// currentIndex = endIndex + 1;
//}
}
private string GetBlobValue(String empid)
{
string stringValue = null;
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
string query = "SELECT template FROM attendance_machine_face_templates WHERE serial_no = @RecordId";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.Parameters.AddWithValue("@RecordId", empid);
using (MySqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
// Assuming blob_data is of type varbinary(max)
byte[] blobValue = (byte[])reader["template"];
stringValue = Encoding.UTF8.GetString(blobValue);
// Use the blobValue byte array as needed
//Console.WriteLine($"Retrieved BLOB value of length: {stringValue}");
}
else
{
Console.WriteLine("No matching record found.");
}
}
}
}
return stringValue;
}
private void btn_result_Click(object sender, EventArgs e)
{
DataTable dataTable = new DataTable();
if (tb_emp.Text.Length > 0)
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
RegisteredUsers registeredUsers = new RegisteredUsers();
dataTable = registeredUsers.Registered_Users(tb_emp.Text, connection);
GvRegisteredUsers.DataSource = dataTable;
}
}
}
private void btnSaveDb_Click(object sender, EventArgs e)
{
if (cbMachineIp.SelectedIndex > 0)
{
GetTemplateSaveInMachine();
MessageBox.Show("DONE");
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void DataGvMachine_CellClick(object sender, DataGridViewCellEventArgs e)
{
//Check to ensure that the row CheckBox is clicked.
if (e.RowIndex >= 0 && e.ColumnIndex == 0)
{
//Loop to verify whether all row CheckBoxes are checked or not.
bool isChecked = true;
foreach (DataGridViewRow row in DataGvMachine.Rows)
{
if (Convert.ToBoolean(row.Cells["checkBoxColumn"].EditedFormattedValue) == false)
{
isChecked = false;
break;
}
}
headerCheckBox2.Checked = isChecked;
}
}
private void HeaderCheckBox_Clicked1(object sender, EventArgs e)
{
//Necessary to end the edit mode of the Cell.
DataGvMachine.EndEdit();
//Loop and check and uncheck all row CheckBoxes based on Header Cell CheckBox.
foreach (DataGridViewRow row in DataGvMachine.Rows)
{
DataGridViewCheckBoxCell checkBox = (row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell);
checkBox.Value = headerCheckBox2.Checked;
}
}
private void GvEmpData_CellClick(object sender, DataGridViewCellEventArgs e)
{
//Check to ensure that the row CheckBox is clicked.
if (e.RowIndex >= 0 && e.ColumnIndex == 0)
{
//Loop to verify whether all row CheckBoxes are checked or not.
bool isChecked = true;
foreach (DataGridViewRow row in GvEmpData.Rows)
{
if (Convert.ToBoolean(row.Cells["checkBoxColumn"].EditedFormattedValue) == false)
{
isChecked = false;
break;
}
}
headerCheckBox.Checked = isChecked;
}
}
private void gv_CellClick(object sender, DataGridViewCellEventArgs e)
{
//Check to ensure that the row CheckBox is clicked.
if (e.RowIndex >= 0 && e.ColumnIndex == 0)
{
//Loop to verify whether all row CheckBoxes are checked or not.
bool isChecked = true;
foreach (DataGridViewRow row in GvEmpData.Rows)
{
if (Convert.ToBoolean(row.Cells["checkBoxColumn"].EditedFormattedValue) == false)
{
isChecked = false;
break;
}
}
headerCheckBox.Checked = isChecked;
}
}
private void GvHeaderCheckBox_Clicked(object sender, EventArgs e)
{
//Necessary to end the edit mode of the Cell.
gv.EndEdit();
//Loop and check and uncheck all row CheckBoxes based on Header Cell CheckBox.
foreach (DataGridViewRow row in gv.Rows)
{
DataGridViewCheckBoxCell checkBox = (row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell);
checkBox.Value = headerCheckBox.Checked;
}
}
private void HeaderCheckBox_Clicked(object sender, EventArgs e)
{
//Necessary to end the edit mode of the Cell.
GvEmpData.EndEdit();
//Loop and check and uncheck all row CheckBoxes based on Header Cell CheckBox.
foreach (DataGridViewRow row in GvEmpData.Rows)
{
DataGridViewCheckBoxCell checkBox = (row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell);
checkBox.Value = headerCheckBox3.Checked;
}
}
private void btmGetTemplate_Click(object sender, EventArgs e)
{
try
{
List<string> Response = new List<string>();
if (txtEmpoyeeCd.Text.Length > 0 && cbMachIp.SelectedIndex > 0)
{
if (dataTableFaceTemplates.Rows.Count > 0)
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", cbMachIp.SelectedValue.ToString());
Machine = new AttendanceMachine(machines[0].MachineId, cbMachIp.SelectedValue.ToString(), machines[0].PortNumber);
devInfo2 = GetDeviceInfo(Machine.MachineIp, Machine.PortNumber);
if (dataTableFaceTemplates.Rows.Count > 0)
{
// Fetch and populate the blob data into the "BlobDataBytes" column
foreach (DataRow row in dataTableFaceTemplates.Rows)
{
byte[] blobValue = (byte[])row["template"];
string stringValue = Encoding.UTF8.GetString(blobValue);
string emp = row["serial_no"].ToString();
Response.AddRange(SetEmployeeInfo(myCallBack, stringValue, emp, devInfo2, Machine.MachineId));
}
// Add each response to the StringBuilder
foreach (string response in Response)
{
responseStringBuilder.AppendLine(response);
}
string allResponses = responseStringBuilder.ToString();
// Display all responses in a message box
MessageBox.Show(allResponses);
responseStringBuilder.Clear();
}
else
{
GvFaceTemplate.DataSource = null;
txtEmpoyeeCd.Text = null;
cbMachIp.SelectedIndex = 0;
MessageBox.Show("Template of - " + txtEmpoyeeCd.Text + " - not found in db");
}
}
}
else
{
MessageBox.Show("Invalid employee code");
}
}
else
{
MessageBox.Show("Please provide employee code");
}
}
catch (Exception ex)
{
}
}
private void btnAllow_Click(object sender, EventArgs e)
{
if (DataGvMachine.Rows.Count > 1)
{
string fromip = cbMachineIp.SelectedValue.ToString();
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
List<string> responses = new List<string>();
// Initialize();
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", fromip);
Machine = new AttendanceMachine(machines[0].MachineId, cbMachIp.SelectedValue.ToString(), machines[0].PortNumber);
string devInfo = GetDeviceInfo(fromip, Machine.PortNumber);
foreach (DataGridViewRow row in DataGvMachine.Rows)
{
// Check if the CheckBox in the first column is checked for the current row
DataGridViewCheckBoxCell checkBoxCell = row.Cells["checkBoxColumn"] as DataGridViewCheckBoxCell;
if (checkBoxCell.Value != null && (bool)checkBoxCell.Value)
{
// If the CheckBox is checked, get the value of the "AcNo" column (Employee ID)
employeeId = row.Cells["AcNo"].Value?.ToString();
string str4 = "GetEmployee(id=\"" + employeeId + "\")";
string machineResponse = "";
uint num2 = 0;
if (machineConnectivity.ExecuteCommad(devInfo, devInfo.Length, str4, str4.Length, ref machineResponse, ref num2, myCallBack) != 0)
{
Console.WriteLine("Not Connected");
return;
}
else
{
if (!machineResponse.Contains("fail"))
{
str4 = removeReturn(machineResponse);
//Check turnstile is allow or not
AllowturnstileAccess(str4, employeeId, devInfo, Machine.MachineId);
//saveTemplate.CheckInDb(connection, employeeId, str4);
}
else
{
Console.WriteLine("Template not saved");
}
}
}
}
}
}
else
{
MessageBox.Show("Please get machine data first");
}
}
private void AllowturnstileAccess(string value, string empid, string devInfo, string machineid)
{
if (!value.Contains("authority=\"0X11\""))
{
string pattern = @"authority\s*=\s*""0X55""";
// Define the replacement value
string replacement = "authority=\"0X11\"";
// Use Regex.Replace to perform the replacement
string modifiedValue = Regex.Replace(value, pattern, replacement);
SetEmployeeInfo(myCallBack, modifiedValue, empid, devInfo, machineid);
}
else
{
Console.WriteLine("Turnstile access already allowed");
}
}
private void btn_logout_Click(object sender, EventArgs e)
{
this.Hide();
LoginForm loginForm = new LoginForm();
loginForm.Show();
File.Delete(filePath);
}
DataTable dataTableFaceTemplates = new DataTable();
private void btn_getFaceTemplates_Click(object sender, EventArgs e)
{
//GetBlobValue(txtEmpoyeeCd.Text);
if (txtEmpoyeeCd.Text.Length > 0)
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
RegisteredUsers registeredUsers = new RegisteredUsers();
dataTableFaceTemplates = registeredUsers.GetFaceTemplates(connection, txtEmpoyeeCd.Text);
dataTableFaceTemplates.Columns.Add("Face", typeof(string));
// Set the DataGridView's DataSource to the modified dataTableFaceTemplates
GvFaceTemplate.DataSource = dataTableFaceTemplates;
GvFaceTemplate.Columns["template"].Visible = false;
foreach (DataRow row in dataTableFaceTemplates.Rows)
{
row["Face"] = "Yes";
}
}
}
else
{
// Handle the case where txtEmpoyeeCd.Text is empty
}
}
private void btn_get_face_Click(object sender, EventArgs e)
{
if (cb_from.SelectedIndex > 0)
{
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", cb_from.SelectedValue.ToString());
machineid1From = machines[0].MachineId;
Machine = new AttendanceMachine(machines[0].MachineId, cb_fromMachine.SelectedValue.ToString(), machines[0].PortNumber);
(List<Attendance> EmployeeList, int TotalCount) = attendanceMachineDAO.GetEmployees(connection, machineid1From);
// Set the EmployeeList as the DataSource
gv.DataSource = EmployeeList;
ObjConnectionClass.CloseConnection();
}
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void txtSearchNew_TextChanged(object sender, EventArgs e)
{
string searchText = txtSearchNew.Text.Trim();
BindSearchData(searchText, 2);
}
private void btn_transferNew_Click(object sender, EventArgs e)
{
if (cb_to.SelectedIndex > 0 && cb_from.SelectedIndex > 0)
{
//backgroundWorker.RunWorkerAsync();
RunFaceTransferNedoToZkteco();
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void btn_livedata_get_Click(object sender, EventArgs e)
{
if (cb_zkteco.SelectedIndex > 0)
{
//DataGvMachine.Rows.Clear();
lbl_totalemp.Text = "";
ConnectionClass ObjConnectionClass = new ConnectionClass();
MySqlConnection connection;
bool OpenConnection;
connection = ObjConnectionClass.Connection();
OpenConnection = ObjConnectionClass.OpenConnection();
if (OpenConnection == true)
{
AttendanceMachineDAO attendanceMachineDAO = new AttendanceMachineDAO();
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Serial_no", typeof(string));
List<AttendanceMachine> machines = attendanceMachineDAO.getAttendanceMachineDetails(connection, "0", cb_zkteco.SelectedValue.ToString());
Machine = new AttendanceMachine(machines[0].MachineId, cb_zkteco.SelectedValue.ToString(), machines[0].PortNumber);
// backgroundWorker.ReportProgress(1, TotalCount);
Bconnect = axCZKEM1.Connect_Net(Machine.MachineIp, Machine.PortNumber);
axCZKEM1.EnableDevice(Convert.ToInt32(Machine.MachineId), false); //disable the device
if (Bconnect == true)
{
string sdwEnrollNumber = string.Empty, sName = string.Empty, sPassword = string.Empty;
int iPrivilege = 0, iFaceIndex = 0, iFlag = 0, iTmpLength = 0;
bool bEnabled = false;
axCZKEM1.ReadAllTemplate(Convert.ToInt32(Machine.MachineId));
while (axCZKEM1.SSR_GetAllUserInfo(Convert.ToInt32(Machine.MachineId), out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled))
{
// Create a new DataRow
DataRow newRow = dataTable.NewRow();
// Set the value of the "EnrollNumber" column
newRow["Serial_no"] = sdwEnrollNumber;
// Add the new row to the DataTable
dataTable.Rows.Add(newRow);
}
txt_total.Text = "Total Emp:"+ dataTable.Rows.Count;
}
axCZKEM1.EnableDevice(Convert.ToInt32(Machine.MachineId), true);
axCZKEM1.Disconnect();
gvZktecoData.DataSource = dataTable;
ObjConnectionClass.CloseConnection();
}
}
else
{
MessageBox.Show("Please provide proper machine ip's");
}
}
private void txt_searchZkteco_TextChanged(object sender, EventArgs e)
{
string searchText = txt_searchZkteco.Text.Trim();
BindSearchData(searchText, 3);
}
}
}