166 lines
5.2 KiB
Python
166 lines
5.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
import os
|
|
import sys
|
|
import csv
|
|
|
|
CWD = os.path.dirname(os.path.realpath(__file__))
|
|
ROOT_DIR = os.path.dirname(CWD)
|
|
sys.path.append(ROOT_DIR)
|
|
|
|
from zk import ZK, const
|
|
import zk
|
|
print (zk.__file__)
|
|
|
|
mesin_absen = [
|
|
{ "lokasi" : "Painting In", "ip": "10.35.14.14" },
|
|
{ "lokasi" : "Painting Out" , "ip": "10.35.14.13" },
|
|
{ "lokasi" : "Injection In", "ip": "10.35.7.10"},
|
|
{ "lokasi" : "Injection Out", "ip": "10.35.7.11"},
|
|
{ "lokasi" : "Office", "ip": "10.35.14.10"},
|
|
{ "lokasi" : "Hotpress in", "ip":"10.35.14.15"},
|
|
{ "lokasi" : "Hotpress out", "ip":"10.35.14.16"},
|
|
{ "lokasi" : "KIIC", "ip": "10.45.7.2"},
|
|
{ "lokasi" : "Injection 2", "ip":"10.35.7.12"},
|
|
]
|
|
|
|
#print(mesin_absen[0]['lokasi'])
|
|
|
|
def pilih_mesin():
|
|
print("Daftar mesin attendance : ")
|
|
for i, mesin in enumerate(mesin_absen, start=1):
|
|
print(f"{i}: {mesin['lokasi']} (IP: {mesin['ip']})")
|
|
|
|
while True:
|
|
try:
|
|
choice = int(input("Pilih nomor mesin (1-9): "))
|
|
if 1 <= choice <= 9:
|
|
mesin_dipilih = mesin_absen[choice - 1]
|
|
ipaddress = mesin_dipilih["ip"]
|
|
lokasi = mesin_dipilih["lokasi"]
|
|
print(f"Dipilih {lokasi}, IP Address mesin absen: {ipaddress}")
|
|
return ipaddress
|
|
else:
|
|
print("Masukan angka 1-9")
|
|
except ValueError:
|
|
print("Invalid input. Masukan angka.")
|
|
|
|
def koneksi_mesin(ipaddress):
|
|
conn = None
|
|
zk = ZK(ipaddress, port=4370, verbose=True)
|
|
# connect to device
|
|
conn = zk.connect()
|
|
# disable device, this method ensures no activity on the device while the process is run
|
|
conn.disable_device()
|
|
print("Koneksi tersambung")
|
|
return conn
|
|
|
|
def menu():
|
|
operasi = [
|
|
"Input karyawan baru",
|
|
"Import data karyawan",
|
|
"Tampilkan data karyawan",
|
|
]
|
|
|
|
print("Operasi yang tersedia : ")
|
|
for i, ops in enumerate(operasi, start=1):
|
|
print(f"{i}: {ops}")
|
|
|
|
while True:
|
|
try:
|
|
choice = int(input("Pilih operasi: "))
|
|
if 1 <= choice <= 3:
|
|
operasi_dipilih = operasi[choice - 1]
|
|
print(f"{operasi_dipilih} dipilih")
|
|
return operasi_dipilih
|
|
else:
|
|
print("Masukan angka")
|
|
except ValueError:
|
|
print("Invalid input. Masukan angka.")
|
|
|
|
def input_karyawan():
|
|
try:
|
|
name = input("Masukkan nama karyawan: ")
|
|
user_id = input("Masukkan user ID karyawan: ")
|
|
privilege = const.USER_DEFAULT
|
|
password = input("Masukkan password (kosongkan jika tidak ada): ")
|
|
|
|
conn.set_user(uid = last_uid + 1, name=name, privilege=privilege, password=password, user_id=user_id)
|
|
print("Karyawan baru berhasil ditambahkan!")
|
|
except Exception as e:
|
|
print(f"Terjadi kesalahan: {e}")
|
|
finally:
|
|
if conn:
|
|
conn.disconnect()
|
|
|
|
|
|
def importCSV():
|
|
#Import user from csv
|
|
with open('user_dump1.csv', mode='r') as file:
|
|
reader = csv.reader(file, delimiter=',')
|
|
|
|
# Skip the header row
|
|
next(reader)
|
|
|
|
# Specify column indices to read
|
|
column_indices = [1, 4] # Example: reads the first and third columns
|
|
|
|
for row in reader:
|
|
selected_columns = [row[i] for i in column_indices]
|
|
print(selected_columns)
|
|
#uid = row[0]
|
|
name = row[1]
|
|
user_id = row[4]
|
|
|
|
#for row in reader:
|
|
# Check if the row has enough columns
|
|
# if all(i < len(row) for i in column_indices):
|
|
# selected_columns = [row[i] for i in column_indices]
|
|
# print(selected_columns)
|
|
# else:
|
|
# print(f"Skipping row with missing columns: {row}")
|
|
|
|
try:
|
|
conn = zk.connect()
|
|
conn.set_user(name=name, privilege=const.USER_DEFAULT, password='', user_id=user_id)#(uid=uid, name=name, privilege=const.USER_DEFAULT, password='', user_id=user_id)
|
|
#conn.test_voice(index=0)
|
|
except Exception as e:
|
|
print ("Process terminate : {}".format(e))
|
|
finally:
|
|
if conn:
|
|
conn.disconnect()
|
|
|
|
def get_latest_uid():
|
|
users = conn.get_users()
|
|
if users:
|
|
return max(user.uid for user in users)
|
|
return 0
|
|
|
|
def tampilkan_data_karyawan():
|
|
users = conn.get_users()
|
|
for user in users:
|
|
privilege = 'User'
|
|
if user.privilege == const.USER_ADMIN:
|
|
privilege = 'Admin'
|
|
print ('+ UID #{}'.format(user.uid))
|
|
print (' Name : {}'.format(user.name))
|
|
print (' Privilege : {}'.format(privilege))
|
|
print (' Password : {}'.format(user.password))
|
|
print (' Group ID : {}'.format(user.group_id))
|
|
print (' User ID : {}'.format(user.user_id))
|
|
|
|
print("UID Terakhir: ", last_uid)
|
|
|
|
def operasi(dipilih):
|
|
if dipilih == "Input karyawan baru":
|
|
input_karyawan()
|
|
elif dipilih == "Import data karyawan":
|
|
importCSV()
|
|
elif dipilih == "Tampilkan data karyawan":
|
|
tampilkan_data_karyawan()
|
|
|
|
|
|
ipaddress = pilih_mesin()
|
|
conn = koneksi_mesin(ipaddress)
|
|
dipilih = menu()
|
|
last_uid = get_latest_uid()
|
|
operasi(dipilih) |