ERPNext v15 Интеграция учета рабочего времени Dahua для сотрудников CheckInPython

Программы на Python
Ответить
Anonymous
 ERPNext v15 Интеграция учета рабочего времени Dahua для сотрудников CheckIn

Сообщение Anonymous »

Я пытаюсь передать данные о посещаемости сотрудников с помощью этого кода:

Код: Выделить всё

import local_config as config
import datetime
import requests
import json

def _safe_get_error_str(response):
"""
Extracts a safe error string from the response object.
"""
try:
error_data = response.json()
return error_data.get('message', str(response.content))
except Exception:
return str(response.content)

def send_to_erpnext(employee_field_value, timestamp, device_id=None, log_type=None):
"""
Example: send_to_erpnext('12349', datetime.datetime.now(), 'HO1', 'IN')
"""
endpoint_app = "hrms" if config.ERPNEXT_VERSION > 13 else "erpnext"
url = f"{config.ERPNEXT_URL}/api/method/{endpoint_app}.hr.doctype.employee_checkin.employee_checkin.add_log_based_on_employee_field"

headers = {
'Authorization': "token " + config.ERPNEXT_API_KEY + ":" + config.ERPNEXT_API_SECRET,
'Accept': 'application/json'
}
data = {
'employee_field': 'attendance_device_id',  # Dodato polje
'employee_field_value': employee_field_value,
'timestamp': timestamp.isoformat(),
'device_id': device_id,
'log_type': log_type
}

response = requests.post(url, headers=headers, json=data)

if response.status_code == 200:
print("Successfully logged employee check-in.")
return 200, response.json()
else:
error_str = _safe_get_error_str(response)
print(f"Error during ERPNext API Call: {error_str}")
return response.status_code, error_str

# Test funkcija
send_to_erpnext('HR-EMP-00004', datetime.datetime.now(), 'HO1', 'IN')
Во втором файле у меня есть это:
Конечно, я удалил секретный ключ API только для этого вопроса...

Код: Выделить всё

# ERPNext related configs
ERPNEXT_API_KEY = ''
ERPNEXT_API_SECRET = ''
ERPNEXT_URL = ''
ERPNEXT_VERSION = 15

# operational configs
PULL_FREQUENCY = 60 # in minutes
LOGS_DIRECTORY = 'logs' # logs of this script is stored in this directory
IMPORT_START_DATE = None # format: '20190501'

# Biometric device configs (all keys mandatory)
#- device_id - must be unique, strictly alphanumerical chars only. no space allowed.
#- ip - device IP Address
#- punch_direction - 'IN'/'OUT'/'AUTO'/None
#- clear_from_device_on_fetch: if set to true then attendance is deleted after fetch is successful.
#(Caution: this feature can lead to data loss if used carelessly.)
# Biometric device configs (Dahua device)
devices = [
{'device_id': 'mangi', 'ip': 'http://192.168.', 'punch_direction': 'AUTO', 'clear_from_device_on_fetch': False}
]

# Configs updating sync timestamp in the Shift Type DocType
# please, read this thread to know why this is necessary https://discuss.erpnext.com/t/v-12-hr-auto-attendance-purpose-of-last-sync-of-checkin-in-shift-type/52997
shift_type_device_mapping = [
{'shift_type_name': ['Shift1'], 'related_device_id': ['test_1','test_2']}
]

# Ignore following exceptions thrown by ERPNext and continue importing punch logs.
# Note: All other exceptions will halt the punch log import to erpnext.
#       1. No Employee found for the given employee User ID in the Biometric device.
#       2. Employee is inactive for the given employee User ID in the Biometric device.
#       3. Duplicate Employee Checkin found. (This exception can happen if you have cleared the logs/status.json of this script)
# Use the corresponding number to ignore the above exceptions. (Default: Ignores all the listed exceptions)
allowed_exceptions = [1,2,3]
И вот какую ошибку я получаю:

/bin/python /home/mangi/frappe-bench/ biometric-attendance-sync-tool/test/test.py ✖ ✹ ✭master
Ошибка во время вызова API ERPNext: b'{"Exception":"frappe.Exceptions.ValidationError: Нет Сотрудник найден для данного значения поля сотрудника 'attendance_device_id': HR-EMP-00004","exc_type":"ValidationError","_exc_source":"hrms (app)","exc":"[\"Traceback (most). последний вызов):\\n Файл \\\"apps/frappe/frappe/app.py\\\", строка 114, в приложении\\n ответ = frappe.api.handle(request)\\n Файл \\\"apps/frappe/frappe/api/init.py\\\", строка 49, в дескрипторе\\n data = endpoint (**аргументы)\\n Файл \\\"apps/frappe/frappe/api/v1.py\\\", строка 36, в handle_rpc_call\\n return frappe.handler.handle()\\n Файл \\\"apps/frappe/frappe/handler.py\\\", строка 49, в дескрипторе\\n data = Execute_cmd(cmd)\\n Файл \\\ "apps/frappe/frappe/handler.py\\\", строка 85, в Execute_cmd\\n return frappe.call(method, **frappe.form_dict)\\n Файл \\\"apps/frappe/frappe/init.py\\\", строка 1768, при вызове\\n return fn(*args, * *newargs)\\n Файл \\\"apps/frappe/frappe/utils/typing_validations.py\\\", строка 31, в оболочке\\n return func(*args, **kwargs)\\n Файл \\\"apps/hrms/hrms/hr/doctype/employee_checkin/employee_checkin.py\\\", строка 118, в add_log_based_on_employee_field\\n frappe.throw(\ \n Файл \\\"apps/frappe/frappe/init.py\\\", строка 645, в throw\\n msgprint(\\n File \\\"apps/frappe/frappe/< strong>init.py\\\", строка 610, в файле msgprint\\n _raise_Exception()\\n \\\"apps/frappe/frappe/init.py\\\", строка 561, в _raise_Exception\\n поднять exc\\nfrappe.Exceptions.ValidationError: для данного сотрудника не найден сотрудник значение поля. 'attendance_device_id': HR-EMP-00004\\n\"]","_server_messages":"[\"{\\\"message\\\": \\\"Сотрудник не найден для данного значения поля сотрудника. 'attendance_device_id': HR-EMP-00004\\\", \\\"title\\\": \\\"Сообщение\\\", \\\"indicator\\\": \\\"red\\\", \\\"raise_Exception\\\": 1, \\\"__frappe_exc_id\\\": \\\"c50c9b943a17a6e5425a0057cfa9c01d3cbd13bca6d84a8796fdf93b\\\"}\"]"}'

Идея состоит в том, чтобы интегрировать устройство учета рабочего времени Dahua с ERPNext таким образом, чтобы когда сотрудники регистрируются или уходят, скрипт Python извлекает данные какая это тележка RFID, когда человек был проверен, и какой у него был статус, а после этого перейти к ERPNext HR/Проверка сотрудников и отправить данные.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ntegration
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»