mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-26 02:52:06 +02:00
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
# Copyright 2017 Comunitea Servicios Tecnológicos S.L.
|
|
# Copyright 2018-19 ForgeFlow S.L. (https://www.forgeflow.com)
|
|
# Copyright 2020 Tecnativa - Víctor Martínez
|
|
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
|
|
|
import logging
|
|
|
|
from odoo import _, api, fields, models
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class HrEmployeeBase(models.AbstractModel):
|
|
|
|
_inherit = "hr.employee.base"
|
|
_sql_constraints = [
|
|
(
|
|
"rfid_card_code_uniq",
|
|
"UNIQUE(rfid_card_code)",
|
|
"The rfid code should be unique.",
|
|
)
|
|
]
|
|
|
|
rfid_card_code = fields.Char("RFID Card Code", copy=False)
|
|
|
|
@api.model
|
|
def register_attendance(self, card_code):
|
|
"""Register the attendance of the employee.
|
|
:returns: dictionary
|
|
'rfid_card_code': char
|
|
'employee_name': char
|
|
'employee_id': int
|
|
'error_message': char
|
|
'logged': boolean
|
|
'action': check_in/check_out
|
|
"""
|
|
|
|
res = {
|
|
"rfid_card_code": card_code,
|
|
"employee_name": "",
|
|
"employee_id": False,
|
|
"error_message": "",
|
|
"logged": False,
|
|
"action": "FALSE",
|
|
}
|
|
# We need to apply sudo() because a RFID basic user does not have access to
|
|
# hr.employee. Hr.employee.public model does not have the
|
|
# _attendance_action_change() method that will be used later.
|
|
employee = self.sudo().search([("rfid_card_code", "=", card_code)], limit=1)
|
|
if employee:
|
|
res["employee_name"] = employee.name
|
|
res["employee_id"] = employee.id
|
|
else:
|
|
msg = _("No employee found with card %s") % card_code
|
|
_logger.warning(msg)
|
|
res["error_message"] = msg
|
|
return res
|
|
try:
|
|
attendance = employee._attendance_action_change()
|
|
if attendance:
|
|
msg = _("Attendance recorded for employee %s") % employee.name
|
|
_logger.debug(msg)
|
|
res["logged"] = True
|
|
if attendance.check_out:
|
|
res["action"] = "check_out"
|
|
else:
|
|
res["action"] = "check_in"
|
|
return res
|
|
else:
|
|
msg = _("No attendance was recorded for employee %s") % employee.name
|
|
_logger.error(msg)
|
|
res["error_message"] = msg
|
|
return res
|
|
except Exception as e:
|
|
res["error_message"] = repr(e)
|
|
_logger.error(repr(e))
|
|
return res
|