From abf7d7f427cfd5e586c0aa3012330c122d9f7599 Mon Sep 17 00:00:00 2001
From: hveficent
Date: Fri, 6 Jul 2018 15:55:54 +0200
Subject: [PATCH 01/29] [10.0] [ADD] hr_attendance_rfid
[UPD] Update hr_attendance_rfid.pot
---
hr_attendance_rfid/README.rst | 73 +++++++++++++++++++
hr_attendance_rfid/__init__.py | 2 +
hr_attendance_rfid/__manifest__.py | 25 +++++++
.../i18n/hr_attendance_rfid.pot | 53 ++++++++++++++
hr_attendance_rfid/models/__init__.py | 2 +
hr_attendance_rfid/models/hr_employee.py | 72 ++++++++++++++++++
.../security/hr_attendance_rfid.xml | 9 +++
.../security/ir.model.access.csv | 4 +
hr_attendance_rfid/tests/__init__.py | 3 +
.../tests/test_hr_attendance_rfid_process.py | 39 ++++++++++
hr_attendance_rfid/views/hr_employee_view.xml | 13 ++++
11 files changed, 295 insertions(+)
create mode 100644 hr_attendance_rfid/README.rst
create mode 100644 hr_attendance_rfid/__init__.py
create mode 100644 hr_attendance_rfid/__manifest__.py
create mode 100644 hr_attendance_rfid/i18n/hr_attendance_rfid.pot
create mode 100644 hr_attendance_rfid/models/__init__.py
create mode 100644 hr_attendance_rfid/models/hr_employee.py
create mode 100644 hr_attendance_rfid/security/hr_attendance_rfid.xml
create mode 100644 hr_attendance_rfid/security/ir.model.access.csv
create mode 100644 hr_attendance_rfid/tests/__init__.py
create mode 100644 hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
create mode 100644 hr_attendance_rfid/views/hr_employee_view.xml
diff --git a/hr_attendance_rfid/README.rst b/hr_attendance_rfid/README.rst
new file mode 100644
index 00000000..78b8a19e
--- /dev/null
+++ b/hr_attendance_rfid/README.rst
@@ -0,0 +1,73 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+==================
+HR Attendance RFID
+==================
+
+This module extends the functionality of HR Attendance in order to allow
+the logging of employee attendances using an RFID based employee
+attendance system.
+
+Configuration
+=============
+
+To use this module, you need to use an external system that calls the method
+'register_attendance' of the model 'hr.employee' passing as parameter the
+code of the RFID card.
+
+Developers of a compatible RFID based employee attendance system should
+be familiar with the outputs of this method and implement proper calls and
+management of responses.
+
+It is advisory to create an exclusive user to perform this task. As
+user doesn't need several access, it is just essential to perform the check
+in/out, a group has been created. Add your attendance device user to
+RFID Attendance group.
+
+Usage
+=====
+
+#. The HR employee responsible to set up new employees should go to
+ 'Attendances -> Manage Attendances -> Employees' and register the
+ RFID card code of each of your employees. You can use an USB plugged
+ RFID reader connected to your computer for this purpose.
+#. The employee should put his/her card to the RFID based employee
+ attendance system. It is expected that the system will provide some form
+ of output of the registration event.
+
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues
+`_. In case of trouble, please
+check there if your issue has already been reported. If you spotted it first,
+help us smash it by providing detailed and welcomed feedback.
+
+Credits
+=======
+
+Contributors
+------------
+
+* Omar Catiñeira Saavedra
+* Héctor Villarreal Ortega
+* Jordi Ballester Alomar
+
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+To contribute to this module, please visit https://odoo-community.org.
diff --git a/hr_attendance_rfid/__init__.py b/hr_attendance_rfid/__init__.py
new file mode 100644
index 00000000..a0fdc10f
--- /dev/null
+++ b/hr_attendance_rfid/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import models
diff --git a/hr_attendance_rfid/__manifest__.py b/hr_attendance_rfid/__manifest__.py
new file mode 100644
index 00000000..88d6b132
--- /dev/null
+++ b/hr_attendance_rfid/__manifest__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Comunitea Servicios Tecnológicos S.L.
+# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+{
+ 'name': 'HR Attendance RFID',
+ 'version': '10.0.1.0.0',
+ 'category': 'Human Resources',
+ 'website': 'https://github.com/OCA/hr',
+ 'author': 'Comunitea,'
+ 'Eficent,'
+ 'Odoo Community Association (OCA)',
+ 'license': 'AGPL-3',
+ 'application': False,
+ 'installable': True,
+ 'depends': [
+ 'hr_attendance',
+ ],
+ 'data': [
+ 'views/hr_employee_view.xml',
+ 'security/hr_attendance_rfid.xml',
+ 'security/ir.model.access.csv',
+ ],
+}
diff --git a/hr_attendance_rfid/i18n/hr_attendance_rfid.pot b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
new file mode 100644
index 00000000..1891d481
--- /dev/null
+++ b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
@@ -0,0 +1,53 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_attendance_rfid
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:54
+#, python-format
+msgid "Attendance recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model,name:hr_attendance_rfid.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:63
+#, python-format
+msgid "No attendance was recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:47
+#, python-format
+msgid "No employee found with card %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:res.groups,name:hr_attendance_rfid.group_hr_attendance_rfid
+msgid "RFID Attendance"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee_rfid_card_code
+msgid "RFID Card Code"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: sql_constraint:hr.employee:0
+msgid "The rfid code should be unique."
+msgstr ""
+
diff --git a/hr_attendance_rfid/models/__init__.py b/hr_attendance_rfid/models/__init__.py
new file mode 100644
index 00000000..62e04307
--- /dev/null
+++ b/hr_attendance_rfid/models/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import hr_employee
diff --git a/hr_attendance_rfid/models/hr_employee.py b/hr_attendance_rfid/models/hr_employee.py
new file mode 100644
index 00000000..ece03c1a
--- /dev/null
+++ b/hr_attendance_rfid/models/hr_employee.py
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Copyright 2017 Comunitea Servicios Tecnológicos S.L.
+# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+import logging
+from odoo import api, models, fields, _
+_logger = logging.getLogger(__name__)
+
+
+class HrEmployee(models.Model):
+
+ _inherit = "hr.employee"
+ _sql_constraints = [(
+ 'rfid_card_code_uniq',
+ 'UNIQUE(rfid_card_code)',
+ 'The rfid code should be unique.'
+ )]
+
+ rfid_card_code = fields.Char("RFID Card Code")
+
+ @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',
+ }
+ employee = self.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.debug(msg)
+ res['error_message'] = msg
+ return res
+ except Exception as e:
+ msg = e.message
+ _logger.error(msg)
+ res['error_message'] = msg
+ return res
diff --git a/hr_attendance_rfid/security/hr_attendance_rfid.xml b/hr_attendance_rfid/security/hr_attendance_rfid.xml
new file mode 100644
index 00000000..bcdf9c74
--- /dev/null
+++ b/hr_attendance_rfid/security/hr_attendance_rfid.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ RFID Attendance
+
+
+
+
\ No newline at end of file
diff --git a/hr_attendance_rfid/security/ir.model.access.csv b/hr_attendance_rfid/security/ir.model.access.csv
new file mode 100644
index 00000000..1847c090
--- /dev/null
+++ b/hr_attendance_rfid/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_hr_attendance_rfid,access.hr.attendance.rfid,hr_attendance.model_hr_attendance,hr_attendance_rfid.group_hr_attendance_rfid,1,1,1,0
+access_hr_employee_rfid,access.hr.employee.rfid,model_hr_employee,hr_attendance_rfid.group_hr_attendance_rfid,1,0,0,0
+access_resources_resource_rfid,access.resource.resource.rfid,resource.model_resource_resource,hr_attendance_rfid.group_hr_attendance_rfid,1,0,0,0
diff --git a/hr_attendance_rfid/tests/__init__.py b/hr_attendance_rfid/tests/__init__.py
new file mode 100644
index 00000000..d1cab37d
--- /dev/null
+++ b/hr_attendance_rfid/tests/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+from . import test_hr_attendance_rfid_process
+
diff --git a/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py b/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
new file mode 100644
index 00000000..ee143450
--- /dev/null
+++ b/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
+# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+
+from odoo.tests.common import TransactionCase
+
+
+class TestHrAttendance(TransactionCase):
+
+ def setUp(self):
+ super(TestHrAttendance, self).setUp()
+ self.employee_model = self.env['hr.employee']
+ self.test_employee = self.browse_ref('hr.employee_al')
+ self.rfid_card_code = '5b3f5'
+ self.test_employee.rfid_card_code = self.rfid_card_code
+
+ def test_valid_employee(self):
+ """Valid employee"""
+ res = self.employee_model.register_attendance(
+ self.rfid_card_code)
+ self.assertTrue('action' in res and res['action'] == 'check_in')
+ self.assertTrue('logged' in res and res['logged'])
+ self.assertTrue(
+ 'rfid_card_code' in res and
+ res['rfid_card_code'] == self.rfid_card_code)
+ res = self.employee_model.register_attendance(
+ self.rfid_card_code)
+ self.assertTrue('action' in res and res['action'] == 'check_out')
+ self.assertTrue('logged' in res and res['logged'])
+
+ def test_invalid_code(self):
+ """Invalid employee"""
+ invalid_code = '029238d'
+ res = self.employee_model.register_attendance(invalid_code)
+ self.assertTrue('action' in res and res['action'] == 'FALSE')
+ self.assertTrue('logged' in res and not res['logged'])
+ self.assertTrue(
+ 'rfid_card_code' in res and
+ res['rfid_card_code'] == invalid_code)
diff --git a/hr_attendance_rfid/views/hr_employee_view.xml b/hr_attendance_rfid/views/hr_employee_view.xml
new file mode 100644
index 00000000..81183397
--- /dev/null
+++ b/hr_attendance_rfid/views/hr_employee_view.xml
@@ -0,0 +1,13 @@
+
+
+
+ hr.employee.form.add_rfid
+ hr.employee
+
+
+
+
+
+
+
+
From 179bd9e20b5c3c8b467bc7e457845b5ae878ed60 Mon Sep 17 00:00:00 2001
From: hveficent
Date: Mon, 8 Oct 2018 12:46:43 +0200
Subject: [PATCH 02/29] [MIG] hr_attendance_rfid: Migration to 11.0
[UPD] README.rst
[UPD] Update hr_attendance_rfid.pot
---
hr_attendance_rfid/README.rst | 66 ++-
hr_attendance_rfid/__init__.py | 1 -
hr_attendance_rfid/__manifest__.py | 5 +-
.../i18n/hr_attendance_rfid.pot | 8 +-
hr_attendance_rfid/models/__init__.py | 1 -
hr_attendance_rfid/models/hr_employee.py | 10 +-
hr_attendance_rfid/readme/CONFIGURE.rst | 12 +
hr_attendance_rfid/readme/CONTRIBUTORS.rst | 3 +
hr_attendance_rfid/readme/DESCRIPTION.rst | 3 +
hr_attendance_rfid/readme/USAGE.rst | 7 +
.../security/hr_attendance_rfid.xml | 12 +-
.../static/description/index.html | 451 ++++++++++++++++++
hr_attendance_rfid/tests/__init__.py | 1 -
.../tests/test_hr_attendance_rfid_process.py | 18 +-
14 files changed, 557 insertions(+), 41 deletions(-)
create mode 100644 hr_attendance_rfid/readme/CONFIGURE.rst
create mode 100644 hr_attendance_rfid/readme/CONTRIBUTORS.rst
create mode 100644 hr_attendance_rfid/readme/DESCRIPTION.rst
create mode 100644 hr_attendance_rfid/readme/USAGE.rst
create mode 100644 hr_attendance_rfid/static/description/index.html
diff --git a/hr_attendance_rfid/README.rst b/hr_attendance_rfid/README.rst
index 78b8a19e..64c24eeb 100644
--- a/hr_attendance_rfid/README.rst
+++ b/hr_attendance_rfid/README.rst
@@ -1,15 +1,39 @@
-.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
- :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
- :alt: License: AGPL-3
-
==================
HR Attendance RFID
==================
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github
+ :target: https://github.com/OCA/hr/tree/11.0/hr_attendance_rfid
+ :alt: OCA/hr
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/hr-11-0/hr-11-0-hr_attendance_rfid
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/116/11.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
This module extends the functionality of HR Attendance in order to allow
the logging of employee attendances using an RFID based employee
attendance system.
+**Table of contents**
+
+.. contents::
+ :local:
+
Configuration
=============
@@ -37,37 +61,45 @@ Usage
attendance system. It is expected that the system will provide some form
of output of the registration event.
-
Bug Tracker
===========
-Bugs are tracked on `GitHub Issues
-`_. In case of trouble, please
-check there if your issue has already been reported. If you spotted it first,
-help us smash it by providing detailed and welcomed feedback.
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
Credits
=======
+Authors
+~~~~~~~
+
+* Comunitea
+* Eficent
+
Contributors
-------------
+~~~~~~~~~~~~
* Omar Catiñeira Saavedra
* Héctor Villarreal Ortega
* Jordi Ballester Alomar
+Maintainers
+~~~~~~~~~~~
-Maintainer
-----------
+This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
- :alt: Odoo Community Association
- :target: https://odoo-community.org
-
-This module is maintained by the OCA.
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-To contribute to this module, please visit https://odoo-community.org.
+This module is part of the `OCA/hr `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_attendance_rfid/__init__.py b/hr_attendance_rfid/__init__.py
index a0fdc10f..0650744f 100644
--- a/hr_attendance_rfid/__init__.py
+++ b/hr_attendance_rfid/__init__.py
@@ -1,2 +1 @@
-# -*- coding: utf-8 -*-
from . import models
diff --git a/hr_attendance_rfid/__manifest__.py b/hr_attendance_rfid/__manifest__.py
index 88d6b132..23434adc 100644
--- a/hr_attendance_rfid/__manifest__.py
+++ b/hr_attendance_rfid/__manifest__.py
@@ -1,11 +1,10 @@
-# -*- coding: utf-8 -*-
# Copyright 2017 Comunitea Servicios Tecnológicos S.L.
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
'name': 'HR Attendance RFID',
- 'version': '10.0.1.0.0',
+ 'version': '11.0.1.0.0',
'category': 'Human Resources',
'website': 'https://github.com/OCA/hr',
'author': 'Comunitea,'
@@ -18,8 +17,8 @@
'hr_attendance',
],
'data': [
- 'views/hr_employee_view.xml',
'security/hr_attendance_rfid.xml',
'security/ir.model.access.csv',
+ 'views/hr_employee_view.xml',
],
}
diff --git a/hr_attendance_rfid/i18n/hr_attendance_rfid.pot b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
index 1891d481..d9c6ed5a 100644
--- a/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
+++ b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 10.0\n"
+"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
@@ -14,7 +14,7 @@ msgstr ""
"Plural-Forms: \n"
#. module: hr_attendance_rfid
-#: code:addons/hr_attendance_rfid/models/hr_employee.py:54
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:53
#, python-format
msgid "Attendance recorded for employee %s"
msgstr ""
@@ -25,13 +25,13 @@ msgid "Employee"
msgstr ""
#. module: hr_attendance_rfid
-#: code:addons/hr_attendance_rfid/models/hr_employee.py:63
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:62
#, python-format
msgid "No attendance was recorded for employee %s"
msgstr ""
#. module: hr_attendance_rfid
-#: code:addons/hr_attendance_rfid/models/hr_employee.py:47
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:46
#, python-format
msgid "No employee found with card %s"
msgstr ""
diff --git a/hr_attendance_rfid/models/__init__.py b/hr_attendance_rfid/models/__init__.py
index 62e04307..e11a62f9 100644
--- a/hr_attendance_rfid/models/__init__.py
+++ b/hr_attendance_rfid/models/__init__.py
@@ -1,2 +1 @@
-# -*- coding: utf-8 -*-
from . import hr_employee
diff --git a/hr_attendance_rfid/models/hr_employee.py b/hr_attendance_rfid/models/hr_employee.py
index ece03c1a..6cdd1b2c 100644
--- a/hr_attendance_rfid/models/hr_employee.py
+++ b/hr_attendance_rfid/models/hr_employee.py
@@ -1,10 +1,9 @@
-# -*- coding: utf-8 -*-
# Copyright 2017 Comunitea Servicios Tecnológicos S.L.
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
import logging
-from odoo import api, models, fields, _
+from odoo import api, fields, models, _
_logger = logging.getLogger(__name__)
@@ -62,11 +61,10 @@ def register_attendance(self, card_code):
else:
msg = _('No attendance was recorded for '
'employee %s') % employee.name
- _logger.debug(msg)
+ _logger.error(msg)
res['error_message'] = msg
return res
except Exception as e:
- msg = e.message
- _logger.error(msg)
- res['error_message'] = msg
+ res['error_message'] = e
+ _logger.error(e)
return res
diff --git a/hr_attendance_rfid/readme/CONFIGURE.rst b/hr_attendance_rfid/readme/CONFIGURE.rst
new file mode 100644
index 00000000..db5325b3
--- /dev/null
+++ b/hr_attendance_rfid/readme/CONFIGURE.rst
@@ -0,0 +1,12 @@
+To use this module, you need to use an external system that calls the method
+'register_attendance' of the model 'hr.employee' passing as parameter the
+code of the RFID card.
+
+Developers of a compatible RFID based employee attendance system should
+be familiar with the outputs of this method and implement proper calls and
+management of responses.
+
+It is advisory to create an exclusive user to perform this task. As
+user doesn't need several access, it is just essential to perform the check
+in/out, a group has been created. Add your attendance device user to
+RFID Attendance group.
\ No newline at end of file
diff --git a/hr_attendance_rfid/readme/CONTRIBUTORS.rst b/hr_attendance_rfid/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..010a131c
--- /dev/null
+++ b/hr_attendance_rfid/readme/CONTRIBUTORS.rst
@@ -0,0 +1,3 @@
+* Omar Catiñeira Saavedra
+* Héctor Villarreal Ortega
+* Jordi Ballester Alomar
\ No newline at end of file
diff --git a/hr_attendance_rfid/readme/DESCRIPTION.rst b/hr_attendance_rfid/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..6eb1dd18
--- /dev/null
+++ b/hr_attendance_rfid/readme/DESCRIPTION.rst
@@ -0,0 +1,3 @@
+This module extends the functionality of HR Attendance in order to allow
+the logging of employee attendances using an RFID based employee
+attendance system.
\ No newline at end of file
diff --git a/hr_attendance_rfid/readme/USAGE.rst b/hr_attendance_rfid/readme/USAGE.rst
new file mode 100644
index 00000000..fed62254
--- /dev/null
+++ b/hr_attendance_rfid/readme/USAGE.rst
@@ -0,0 +1,7 @@
+#. The HR employee responsible to set up new employees should go to
+ 'Attendances -> Manage Attendances -> Employees' and register the
+ RFID card code of each of your employees. You can use an USB plugged
+ RFID reader connected to your computer for this purpose.
+#. The employee should put his/her card to the RFID based employee
+ attendance system. It is expected that the system will provide some form
+ of output of the registration event.
\ No newline at end of file
diff --git a/hr_attendance_rfid/security/hr_attendance_rfid.xml b/hr_attendance_rfid/security/hr_attendance_rfid.xml
index bcdf9c74..20777e94 100644
--- a/hr_attendance_rfid/security/hr_attendance_rfid.xml
+++ b/hr_attendance_rfid/security/hr_attendance_rfid.xml
@@ -1,9 +1,7 @@
-
-
- RFID Attendance
-
-
-
-
\ No newline at end of file
+
+ RFID Attendance
+
+
+
diff --git a/hr_attendance_rfid/static/description/index.html b/hr_attendance_rfid/static/description/index.html
new file mode 100644
index 00000000..6b0bb4a1
--- /dev/null
+++ b/hr_attendance_rfid/static/description/index.html
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+HR Attendance RFID
+
+
+
+
+
HR Attendance RFID
+
+
+

+
This module extends the functionality of HR Attendance in order to allow
+the logging of employee attendances using an RFID based employee
+attendance system.
+
Table of contents
+
+
+
+
To use this module, you need to use an external system that calls the method
+‘register_attendance’ of the model ‘hr.employee’ passing as parameter the
+code of the RFID card.
+
Developers of a compatible RFID based employee attendance system should
+be familiar with the outputs of this method and implement proper calls and
+management of responses.
+
It is advisory to create an exclusive user to perform this task. As
+user doesn’t need several access, it is just essential to perform the check
+in/out, a group has been created. Add your attendance device user to
+RFID Attendance group.
+
+
+
+
+- The HR employee responsible to set up new employees should go to
+‘Attendances -> Manage Attendances -> Employees’ and register the
+RFID card code of each of your employees. You can use an USB plugged
+RFID reader connected to your computer for this purpose.
+- The employee should put his/her card to the RFID based employee
+attendance system. It is expected that the system will provide some form
+of output of the registration event.
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/hr project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/hr_attendance_rfid/tests/__init__.py b/hr_attendance_rfid/tests/__init__.py
index d1cab37d..bf71fa01 100644
--- a/hr_attendance_rfid/tests/__init__.py
+++ b/hr_attendance_rfid/tests/__init__.py
@@ -1,3 +1,2 @@
-# -*- coding: utf-8 -*-
from . import test_hr_attendance_rfid_process
diff --git a/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py b/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
index ee143450..d14cb831 100644
--- a/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
+++ b/hr_attendance_rfid/tests/test_hr_attendance_rfid_process.py
@@ -1,8 +1,10 @@
-# -*- coding: utf-8 -*-
# Copyright 2018 Eficent Business and IT Consulting Services, S.L.
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
+from datetime import datetime, timedelta
+from odoo import fields
from odoo.tests.common import TransactionCase
+from odoo.tools.misc import mute_logger
class TestHrAttendance(TransactionCase):
@@ -28,6 +30,20 @@ def test_valid_employee(self):
self.assertTrue('action' in res and res['action'] == 'check_out')
self.assertTrue('logged' in res and res['logged'])
+ @mute_logger('odoo.addons.hr_attendance_rfid.models.hr_employee')
+ def test_exception_code(self):
+ """Checkout is created for a future datetime"""
+ self.env['hr.attendance'].create({
+ 'employee_id': self.test_employee.id,
+ 'check_in': fields.Date.today(),
+ 'check_out': fields.Datetime.to_string(
+ datetime.today()+timedelta(hours=8))
+ })
+ self.test_employee.update({'attendance_state': 'checked_in'})
+ res = self.employee_model.register_attendance(
+ self.rfid_card_code)
+ self.assertNotEquals(res['error_message'], '')
+
def test_invalid_code(self):
"""Invalid employee"""
invalid_code = '029238d'
From 78150ce00a97bdd642fe04205556533db2c02d85 Mon Sep 17 00:00:00 2001
From: hveficent
Date: Fri, 26 Oct 2018 10:00:24 +0200
Subject: [PATCH 03/29] [MIG] hr_attendance_rfid: Migration to 12.0
[UPD] README.rst
[UPD] Update hr_attendance_rfid.pot
[ADD] icon.png
---
hr_attendance_rfid/README.rst | 10 +++++-----
hr_attendance_rfid/__manifest__.py | 2 +-
hr_attendance_rfid/i18n/hr_attendance_rfid.pot | 4 ++--
hr_attendance_rfid/static/description/icon.png | Bin 0 -> 9455 bytes
hr_attendance_rfid/static/description/index.html | 6 +++---
5 files changed, 11 insertions(+), 11 deletions(-)
create mode 100644 hr_attendance_rfid/static/description/icon.png
diff --git a/hr_attendance_rfid/README.rst b/hr_attendance_rfid/README.rst
index 64c24eeb..cc6730f4 100644
--- a/hr_attendance_rfid/README.rst
+++ b/hr_attendance_rfid/README.rst
@@ -14,13 +14,13 @@ HR Attendance RFID
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr-lightgray.png?logo=github
- :target: https://github.com/OCA/hr/tree/11.0/hr_attendance_rfid
+ :target: https://github.com/OCA/hr/tree/12.0/hr_attendance_rfid
:alt: OCA/hr
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/hr-11-0/hr-11-0-hr_attendance_rfid
+ :target: https://translation.odoo-community.org/projects/hr-12-0/hr-12-0-hr_attendance_rfid
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/116/11.0
+ :target: https://runbot.odoo-community.org/runbot/116/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -67,7 +67,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -100,6 +100,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/hr `_ project on GitHub.
+This module is part of the `OCA/hr `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_attendance_rfid/__manifest__.py b/hr_attendance_rfid/__manifest__.py
index 23434adc..3ad2977c 100644
--- a/hr_attendance_rfid/__manifest__.py
+++ b/hr_attendance_rfid/__manifest__.py
@@ -4,7 +4,7 @@
{
'name': 'HR Attendance RFID',
- 'version': '11.0.1.0.0',
+ 'version': '12.0.1.0.0',
'category': 'Human Resources',
'website': 'https://github.com/OCA/hr',
'author': 'Comunitea,'
diff --git a/hr_attendance_rfid/i18n/hr_attendance_rfid.pot b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
index d9c6ed5a..9d4cf309 100644
--- a/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
+++ b/hr_attendance_rfid/i18n/hr_attendance_rfid.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 11.0\n"
+"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
@@ -42,7 +42,7 @@ msgid "RFID Attendance"
msgstr ""
#. module: hr_attendance_rfid
-#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee_rfid_card_code
+#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee__rfid_card_code
msgid "RFID Card Code"
msgstr ""
diff --git a/hr_attendance_rfid/static/description/icon.png b/hr_attendance_rfid/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~!
zVpnB`o+K7|Al`Q_U;eD$B
zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA
z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__
zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_
zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I
z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U
z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)(
z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH
zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW
z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx
zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h
zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9
zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz#
z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA
zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K=
z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS
zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C
zuVl&0duN<;uOsB3%T9Fp8t{ED108)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z#z-)AXwSRY?OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/hr_attendance_rfid/static/description/index.html b/hr_attendance_rfid/static/description/index.html
index 6b0bb4a1..95ff9665 100644
--- a/hr_attendance_rfid/static/description/index.html
+++ b/hr_attendance_rfid/static/description/index.html
@@ -367,7 +367,7 @@ HR Attendance RFID
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module extends the functionality of HR Attendance in order to allow
the logging of employee attendances using an RFID based employee
attendance system.
@@ -415,7 +415,7 @@
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -442,7 +442,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/hr project on GitHub.
+
This module is part of the OCA/hr project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
From eab4dd29e017d692295659c7ee30c8e05baeadb2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Allard?=
Date: Thu, 23 May 2019 18:14:59 +0000
Subject: [PATCH 04/29] Added translation using Weblate (French)
---
hr_attendance_rfid/i18n/fr.po | 53 +++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
create mode 100644 hr_attendance_rfid/i18n/fr.po
diff --git a/hr_attendance_rfid/i18n/fr.po b/hr_attendance_rfid/i18n/fr.po
new file mode 100644
index 00000000..31e8abaa
--- /dev/null
+++ b/hr_attendance_rfid/i18n/fr.po
@@ -0,0 +1,53 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_attendance_rfid
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:53
+#, python-format
+msgid "Attendance recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model,name:hr_attendance_rfid.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:62
+#, python-format
+msgid "No attendance was recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:46
+#, python-format
+msgid "No employee found with card %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:res.groups,name:hr_attendance_rfid.group_hr_attendance_rfid
+msgid "RFID Attendance"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee__rfid_card_code
+msgid "RFID Card Code"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: sql_constraint:hr.employee:0
+msgid "The rfid code should be unique."
+msgstr ""
From f5dbe5c71ff8a306885ff7fda2979fa45e96e411 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Allard?=
Date: Thu, 23 May 2019 18:16:52 +0000
Subject: [PATCH 05/29] Translated using Weblate (French)
Currently translated at 100.0% (7 of 7 strings)
Translation: hr-12.0/hr-12.0-hr_attendance_rfid
Translate-URL: https://translation.odoo-community.org/projects/hr-12-0/hr-12-0-hr_attendance_rfid/fr/
---
hr_attendance_rfid/i18n/fr.po | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/hr_attendance_rfid/i18n/fr.po b/hr_attendance_rfid/i18n/fr.po
index 31e8abaa..58831f9f 100644
--- a/hr_attendance_rfid/i18n/fr.po
+++ b/hr_attendance_rfid/i18n/fr.po
@@ -6,48 +6,50 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2019-05-23 20:19+0000\n"
+"Last-Translator: Kévin Allard \n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 3.6.1\n"
#. module: hr_attendance_rfid
#: code:addons/hr_attendance_rfid/models/hr_employee.py:53
#, python-format
msgid "Attendance recorded for employee %s"
-msgstr ""
+msgstr "Présence enregistrée pour l'employé(e) %s"
#. module: hr_attendance_rfid
#: model:ir.model,name:hr_attendance_rfid.model_hr_employee
msgid "Employee"
-msgstr ""
+msgstr "Employé(e)"
#. module: hr_attendance_rfid
#: code:addons/hr_attendance_rfid/models/hr_employee.py:62
#, python-format
msgid "No attendance was recorded for employee %s"
-msgstr ""
+msgstr "Aucune présence n'a été enregistrée pour l'employé(e) %s"
#. module: hr_attendance_rfid
#: code:addons/hr_attendance_rfid/models/hr_employee.py:46
#, python-format
msgid "No employee found with card %s"
-msgstr ""
+msgstr "Aucun employé(e) trouvé avec la carte %s"
#. module: hr_attendance_rfid
#: model:res.groups,name:hr_attendance_rfid.group_hr_attendance_rfid
msgid "RFID Attendance"
-msgstr ""
+msgstr "Présence RFID"
#. module: hr_attendance_rfid
#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee__rfid_card_code
msgid "RFID Card Code"
-msgstr ""
+msgstr "Code de carte RFID"
#. module: hr_attendance_rfid
#: sql_constraint:hr.employee:0
msgid "The rfid code should be unique."
-msgstr ""
+msgstr "Le code rfid doit être unique."
From 79258b7b1fbea0907510f0b097f15b273dfdd515 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Antonio=20P=C3=A9rez=20Ruth?=
Date: Wed, 24 Jul 2019 10:27:31 +0000
Subject: [PATCH 06/29] Added translation using Weblate (Spanish)
[UPD] README.rst
---
hr_attendance_rfid/i18n/es_ES.po | 53 +++++++++++++++++++
.../static/description/index.html | 2 +-
2 files changed, 54 insertions(+), 1 deletion(-)
create mode 100644 hr_attendance_rfid/i18n/es_ES.po
diff --git a/hr_attendance_rfid/i18n/es_ES.po b/hr_attendance_rfid/i18n/es_ES.po
new file mode 100644
index 00000000..fd09a42f
--- /dev/null
+++ b/hr_attendance_rfid/i18n/es_ES.po
@@ -0,0 +1,53 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_attendance_rfid
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es_ES\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:53
+#, python-format
+msgid "Attendance recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model,name:hr_attendance_rfid.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:62
+#, python-format
+msgid "No attendance was recorded for employee %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: code:addons/hr_attendance_rfid/models/hr_employee.py:46
+#, python-format
+msgid "No employee found with card %s"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:res.groups,name:hr_attendance_rfid.group_hr_attendance_rfid
+msgid "RFID Attendance"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: model:ir.model.fields,field_description:hr_attendance_rfid.field_hr_employee__rfid_card_code
+msgid "RFID Card Code"
+msgstr ""
+
+#. module: hr_attendance_rfid
+#: sql_constraint:hr.employee:0
+msgid "The rfid code should be unique."
+msgstr ""
diff --git a/hr_attendance_rfid/static/description/index.html b/hr_attendance_rfid/static/description/index.html
index 95ff9665..49749575 100644
--- a/hr_attendance_rfid/static/description/index.html
+++ b/hr_attendance_rfid/static/description/index.html
@@ -3,7 +3,7 @@
-
+
HR Attendance RFID