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

+ + +

Beta License: AGPL-3 OCA/hr Translate me on Weblate Try me on Runbot

+

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

+ +
+

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

+
    +
  1. 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.
  2. +
  3. 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.
  4. +
+
+
+

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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Comunitea
  • +
  • Eficent
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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<+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. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/hr Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/hr Translate me on Weblate Try me on Runbot

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 @@

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.

@@ -442,7 +442,7 @@

Maintainers

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