Cara Tarik Data Mesin Absen Dengan PHP CodeIgniter

Diposting pada

Mengambil data absen dengan program web yang kita buat sangat diperlukan saat membuat HRM System (Human Resources Management). Data yang didapat dari mesin absen perlu kita proses lagi sehingga dapat menghasilkan laporan kehadiran dan jumlah hari kerja dalam periode tertentu.

tarik data mesin absen php codeigniter

Untuk melakukan komunikasi ke mesin absen, saya menggunakan framework CodeIgniter dan ZK Time &  Attendance Devices (GitHub). Kalian tidak harus menggunakan CodeIgniter, silahkan gunakan framework php lainnya atau gunakan native. Librarynya harus mendukung PSR4, jadi pastikan kalian sudah mempunyai composer dan autoloadernya. Jika menggunakan native php mungkin lebih susah.

Langkah-langkah menarik data mesin absen dengan PHP CodeIgniter

Disini saya tidak menjelaskan secara detail bagaimana teknisnya, saya hanya berbagi bagaimana caranya.

Pertama, silahkan download framework codeigniter dan lakukan konfigurasi sehingga situs sudah bisa diakses.

Kedua, silahkan kalian download TadLibrary, dan taruh foldernya di root folder project. Buka file composer.json kemudian tambahkan baris kode berikut:

"autoload": {
        "psr-4": {
          "TADPHP\\": "soap/lib/",
          "TADPHP\\Exceptions\\": "soap/lib/Exceptions/",
          "TADPHP\\Providers\\": "soap/lib/Providers/",
          "Test\\Helpers\\": "test/helpers/",
          "ZKLIB\\":"soap/lib/zklib/"
        },
        "files":["soap/zklib/zklib.php"]
    } 

Selanjutnya silahkan jalankan perintah “composer update”, silahkan baca-baca mengenai composer agar kalian tahu lebih dalam apa saja fungsinya.

Jika update composer sudah selesai buka config.php dan ubah $config[‘composer_autoload ‘] = TRUE;

Ketiga, sekarang saatnya kalian gunakan class dan fungsi-fungsi yang telah disediakan oleh TadLibrary. Saya sendiri baru mencoba di mesin Solution X-100C dan sudah berhasil menerapkan perhitungan program absensi dengan batuan library ini.

Berikut adala potongan source code mengakses data mesin absen kemudian insert ke table database:

<?php defined('BASEPATH') OR exit('No direct script access allowed'); use TADPHP\TAD; use TADPHP\TADFactory; class Machine extends CI_Controller { public function importData() { $id = $this->uri->segment(3);
		$machine = $this->general->get('machines', ['id' => $id])->row_array();
		$options = [
			'ip' => $machine['ip'],
			'com_key' => $machine['key'],
			'soap_port' => $machine['port']
		];
		$tad = new TADFactory($options);
		$con = $tad->get_instance();
		if ($con->is_alive()) {
			$con->disable();
			$logs = $con->get_att_log()->to_array();
			$dataAbsen = [];
			$createdAt = date('Y-m-d H:i:s');

			foreach ($logs['Row'] as $key => $log) {
				$pin = $log['PIN'];
				$datetime = $log['DateTime'];
				$status = $log['Status'];
				$conx = ['employee_nik' => $pin, 'date_time' => $datetime];
				$check = $this->general->get('raw_attendances', $con)->num_rows();
				if ($check > 0) {
					continue;
				}

				$dataAbsen[] = [
					'employee_nik' => $pin,
					'date_time' => $datetime,
					'status' => $status,
					'machine_id' => $id,
					'created_at' => $createdAt,
					'imported_by' => $this->user['id'],
				];

				if (count($dataAbsen) == 100) {
					$this->general->insertBatch('raw_attendances', $dataAbsen);
					$dataAbsen = [];
				}
			}
			if (count($dataAbsen) > 0) {
				$this->general->insertBatch('raw_attendances', $dataAbsen);
			}
			echo json_encode(['status' => true, 'message' => 'Import Data Successfully']);
			$con->enable();
		} else {
    		echo json_encode(['status' => false, 'message' => 'Failed connect to machine']);
		}
	}

	public function clearLog()
	{
		$id = $this->uri->segment(3);
		$machine = $this->general->get('machines', ['id' => $id])->row_array();
		$options = [
			'ip' => $machine['ip'],
			'com_key' => $machine['key'],
			'soap_port' => $machine['port']
		];

		$tad = new TADFactory($options);
		$con = $tad->get_instance();
		if ($con->is_alive()) {
			$con->disable();
			if ($con->delete_data(['value'=>3])) {
				echo json_encode(['status' => true, 'message' => 'Clear Log Data Successfully']);
			}
			$con->enable();
		} else {
    		echo json_encode(['status' => false, 'message' => 'Failed connect to machine']);
		}
	}
}

/* End of file Machine.php */
/* Location: .//private/var/folders/95/xs45kjt53bs_yg199r98rg440000gn/T/fz3temp-2/Machine.php */

Untuk lebih jauh mengenal fungsi-fungsi librarynya misalkan hapus log data, get data berdasarkan pin karyawan kalian bisa baca pada link github yang saya sertakan diatas. Potongan source code ini hanya alurnya saja, karna saya sudah menggunakan table untuk menyimpan ip dan port mesin absen, untuk antisipasi client menggunakan banyak mesin.

Tambahan agar bisa menggunakan fitur ini kalian harus mengaktifkan fitur php soap dan php socket di php.ini

Untuk menarik data mesin di banyak cabang perusahaan kalian perlu memiliki IP Public, karena diharuskan menggunakan IP yang satu segment antara komputer client dan mesin absen Solution X-100C.

Berikut adalah source code free yang bisa saya bagikan untuk kalian melakukan uji coba dengan mesin absen silahkan buat databse dan table yang menampung ip address mesin, comm_key dan port mesin.

Demikian artikel mengenai tarik data mesin absen dengan program PHP CodeIgniter, jika kalian ingin mendapat dukungan dan program yang premium silahkan WA: 08978455145 dan Email: 08978455145. Saya siap membantu mengintegrasikan program kalian dengan library diatas.