diff --git a/hr_zk_attendance/README.rst b/hr_zk_attendance/README.rst new file mode 100644 index 000000000..20c47d3fe --- /dev/null +++ b/hr_zk_attendance/README.rst @@ -0,0 +1,73 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Biometric Device Integration +============================ +This Cybrosys's module integrates Odoo attendance with biometric device attendance. + +Configuration +============= + +*This integration is only applicable for the the device ZKteco model 'uFace 202' & 'iFace990' +* zklib +you can install zklib library using "sudo pip install zklib" + +Compatible Devices +---------------- +This module support with the following machines : + + uFace202 (ZKteco) +* iFace990 (ZKteco) + +Clients have reported that the module works well with the following machine : + +* K40 Pro (ZKteco) +* SFace900 (ZKteco) +* FR1500 (ZKteco) +* UA760 (ZKteco) +* MB10 (ZKteco + +License +------- +General Public License, Version 3 (AGPL-3). +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Company +------- +* `Cybrosys Techno Solutions `__ + +Credits +======= +* Developers: (V10) Jesni Banu, + (V11) Niyas Raphy, + (V12) Basith, + (V13) Varsha Vivek, + (V14) Ijaz Ahammed, + (V15) Noushid Khan, + (V16) Minhaj T, + (V17) Ammu Raj, + (V18) Bhagyadev +* Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/hr_zk_attendance/__init__.py b/hr_zk_attendance/__init__.py new file mode 100644 index 000000000..76757b5e0 --- /dev/null +++ b/hr_zk_attendance/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import models diff --git a/hr_zk_attendance/__manifest__.py b/hr_zk_attendance/__manifest__.py new file mode 100644 index 000000000..de7146a16 --- /dev/null +++ b/hr_zk_attendance/__manifest__.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +{ + 'name': 'Biometric Device Integration', + 'version': '18.0.1.0.0', + 'category': 'Human Resources', + 'summary': "Integrating Biometric Device (Model: ZKteco uFace 202) With HR" + "Attendance (Face + Thumb)", + 'description': "This module integrates Odoo with the biometric" + "device(Model: ZKteco uFace 202),odoo18,odoo,hr,attendance", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['base_setup', 'hr_attendance'], + 'external_dependencies': { + 'python': ['pyzk'], }, + 'data': [ + 'security/ir.model.access.csv', + 'views/biometric_device_details_views.xml', + 'views/hr_employee_views.xml', + 'views/daily_attendance_views.xml', + 'views/biometric_device_attendance_menus.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/hr_zk_attendance/doc/RELEASE_NOTES.md b/hr_zk_attendance/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..f4b094601 --- /dev/null +++ b/hr_zk_attendance/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 26.03.2025 +#### Version 18.0.1.0.0 +##### ADD + +- Initial commit for Biometric Device Integration diff --git a/hr_zk_attendance/models/__init__.py b/hr_zk_attendance/models/__init__.py new file mode 100644 index 000000000..24140e0b1 --- /dev/null +++ b/hr_zk_attendance/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from . import biometric_device_details +from . import zk_machine_attendance +from . import daily_attendance +from . import hr_employee diff --git a/hr_zk_attendance/models/biometric_device_details.py b/hr_zk_attendance/models/biometric_device_details.py new file mode 100644 index 000000000..5a30833a8 --- /dev/null +++ b/hr_zk_attendance/models/biometric_device_details.py @@ -0,0 +1,260 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +import datetime +import logging +import pytz +from odoo import api, fields, models, _ +from odoo.exceptions import UserError, ValidationError + +_logger = logging.getLogger(__name__) +try: + from zk import ZK, const +except ImportError: + _logger.error("Please Install pyzk library.") + + +class BiometricDeviceDetails(models.Model): + """Model for configuring and connect the biometric device with odoo""" + _name = 'biometric.device.details' + _description = 'Biometric Device Details' + + name = fields.Char(string='Name', required=True, help='Record Name') + device_ip = fields.Char(string='Device IP', required=True, + help='The IP address of the Device') + port_number = fields.Integer(string='Port Number', required=True, + help="The Port Number of the Device") + address_id = fields.Many2one('res.partner', string='Working Address', + help='Working address of the partner') + company_id = fields.Many2one('res.company', string='Company', + default=lambda + self: self.env.user.company_id.id, + help='Current Company') + + def device_connect(self, zk): + """Function for connecting the device with Odoo""" + try: + conn = zk.connect() + return conn + except Exception: + return False + + def action_test_connection(self): + """Checking the connection status""" + zk = ZK(self.device_ip, port=self.port_number, timeout=30, + password=False, ommit_ping=False) + try: + if zk.connect(): + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'message': 'Successfully Connected', + 'type': 'success', + 'sticky': False + } + } + except Exception as error: + raise ValidationError(f'{error}') + + def action_set_timezone(self): + """Function to set user's timezone to device""" + for info in self: + machine_ip = info.device_ip + zk_port = info.port_number + try: + # Connecting with the device with the ip and port provided + zk = ZK(machine_ip, port=zk_port, timeout=15, + password=0, + force_udp=False, ommit_ping=False) + except NameError: + raise UserError( + _("Pyzk module not Found. Please install it" + "with 'pip3 install pyzk'.")) + conn = self.device_connect(zk) + if conn: + user_tz = self.env.context.get( + 'tz') or self.env.user.tz or 'UTC' + user_timezone_time = pytz.utc.localize(fields.Datetime.now()) + user_timezone_time = user_timezone_time.astimezone( + pytz.timezone(user_tz)) + conn.set_time(user_timezone_time) + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'message': 'Successfully Set the Time', + 'type': 'success', + 'sticky': False + } + } + else: + raise UserError(_( + "Please Check the Connection")) + + def action_clear_attendance(self): + """Methode to clear record from the zk.machine.attendance model and + from the device""" + for info in self: + try: + machine_ip = info.device_ip + zk_port = info.port_number + try: + # Connecting with the device + zk = ZK(machine_ip, port=zk_port, timeout=30, + password=0, force_udp=False, ommit_ping=False) + except NameError: + raise UserError(_( + "Please install it with 'pip3 install pyzk'.")) + conn = self.device_connect(zk) + if conn: + conn.enable_device() + clear_data = zk.get_attendance() + if clear_data: + # Clearing data in the device + conn.clear_attendance() + # Clearing data from attendance log + self._cr.execute( + """delete from zk_machine_attendance""") + conn.disconnect() + else: + raise UserError( + _('Unable to clear Attendance log.Are you sure ' + 'attendance log is not empty.')) + else: + raise UserError( + _('Unable to connect to Attendance Device. Please use ' + 'Test Connection button to verify.')) + except Exception as error: + raise ValidationError(f'{error}') + + @api.model + def cron_download(self): + machines = self.env['biometric.device.details'].search([]) + for machine in machines: + machine.action_download_attendance() + + def action_download_attendance(self): + """Function to download attendance records from the device""" + _logger.info("++++++++++++Cron Executed++++++++++++++++++++++") + zk_attendance = self.env['zk.machine.attendance'] + hr_attendance = self.env['hr.attendance'] + for info in self: + machine_ip = info.device_ip + zk_port = info.port_number + try: + # Connecting with the device with the ip and port provided + zk = ZK(machine_ip, port=zk_port, timeout=15, + password=0, + force_udp=False, ommit_ping=False) + except NameError: + raise UserError( + _("Pyzk module not Found. Please install it" + "with 'pip3 install pyzk'.")) + conn = self.device_connect(zk) + self.action_set_timezone() + if conn: + conn.disable_device() # Device Cannot be used during this time. + user = conn.get_users() + attendance = conn.get_attendance() + if attendance: + for each in attendance: + atten_time = each.timestamp + local_tz = pytz.timezone( + self.env.user.partner_id.tz or 'GMT') + local_dt = local_tz.localize(atten_time, is_dst=None) + utc_dt = local_dt.astimezone(pytz.utc) + utc_dt = utc_dt.strftime("%Y-%m-%d %H:%M:%S") + atten_time = datetime.datetime.strptime( + utc_dt, "%Y-%m-%d %H:%M:%S") + atten_time = fields.Datetime.to_string(atten_time) + for uid in user: + if uid.user_id == each.user_id: + get_user_id = self.env['hr.employee'].search( + [('device_id_num', '=', each.user_id)]) + if get_user_id: + duplicate_atten_ids = zk_attendance.search( + [('device_id_num', '=', each.user_id), + ('punching_time', '=', atten_time)]) + if not duplicate_atten_ids: + zk_attendance.create({ + 'employee_id': get_user_id.id, + 'device_id_num': each.user_id, + 'attendance_type': str(each.status), + 'punch_type': str(each.punch), + 'punching_time': atten_time, + 'address_id': info.address_id.id + }) + att_var = hr_attendance.search([( + 'employee_id', '=', get_user_id.id), + ('check_out', '=', False)]) + if each.punch == 0: # check-in + if not att_var: + hr_attendance.create({ + 'employee_id': + get_user_id.id, + 'check_in': atten_time + }) + if each.punch == 1: # check-out + if len(att_var) == 1: + att_var.write({ + 'check_out': atten_time + }) + else: + att_var1 = hr_attendance.search( + [('employee_id', '=', + get_user_id.id)]) + if att_var1: + att_var1[-1].write({ + 'check_out': atten_time + }) + else: + employee = self.env['hr.employee'].create({ + 'device_id_num': each.user_id, + 'name': uid.name + }) + zk_attendance.create({ + 'employee_id': employee.id, + 'device_id_num': each.user_id, + 'attendance_type': str(each.status), + 'punch_type': str(each.punch), + 'punching_time': atten_time, + 'address_id': info.address_id.id + }) + hr_attendance.create({ + 'employee_id': employee.id, + 'check_in': atten_time + }) + conn.disconnect + return True + else: + raise UserError(_('Unable to get the attendance log, please' + 'try again later.')) + else: + raise UserError(_('Unable to connect, please check the' + 'parameters and network connections.')) + + def action_restart_device(self): + """For restarting the device""" + zk = ZK(self.device_ip, port=self.port_number, timeout=15, + password=0, + force_udp=False, ommit_ping=False) + self.device_connect(zk).restart() diff --git a/hr_zk_attendance/models/daily_attendance.py b/hr_zk_attendance/models/daily_attendance.py new file mode 100644 index 000000000..fa87059f3 --- /dev/null +++ b/hr_zk_attendance/models/daily_attendance.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from odoo import fields, models, tools + + +class DailyAttendance(models.Model): + """Model to hold data from the biometric device""" + _name = 'daily.attendance' + _description = 'Daily Attendance Report' + _auto = False + _order = 'punching_day desc' + + employee_id = fields.Many2one('hr.employee', string='Employee', + help='Employee Name') + punching_day = fields.Datetime(string='Date', help='Date of punching') + address_id = fields.Many2one('res.partner', string='Working Address', + help='Working address of the employee') + attendance_type = fields.Selection([('1', 'Finger'), ('15', 'Face'), + ('2', 'Type_2'), ('3', 'Password'), + ('4', 'Card')], string='Category', + help='Attendance detecting methods') + punch_type = fields.Selection([('0', 'Check In'), ('1', 'Check Out'), + ('2', 'Break Out'), ('3', 'Break In'), + ('4', 'Overtime In'), ('5', 'Overtime Out')], + string='Punching Type', + help='The Punching Type of attendance') + punching_time = fields.Datetime(string='Punching Time', + help='Punching time in the device') + + def init(self): + """Retrieve the data's for attendance report""" + tools.drop_view_if_exists(self._cr, 'daily_attendance') + query = """ + create or replace view daily_attendance as ( + select + min(z.id) as id, + z.employee_id as employee_id, + z.write_date as punching_day, + z.address_id as address_id, + z.attendance_type as attendance_type, + z.punching_time as punching_time, + z.punch_type as punch_type + from zk_machine_attendance z + join hr_employee e on (z.employee_id=e.id) + GROUP BY + z.employee_id, + z.write_date, + z.address_id, + z.attendance_type, + z.punch_type, + z.punching_time + ) + """ + self._cr.execute(query) diff --git a/hr_zk_attendance/models/hr_employee.py b/hr_zk_attendance/models/hr_employee.py new file mode 100644 index 000000000..c69858ab4 --- /dev/null +++ b/hr_zk_attendance/models/hr_employee.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from odoo import fields, models + + +class HrEmployee(models.Model): + """Inherit the model to add field""" + _inherit = 'hr.employee' + + device_id_num = fields.Char(string='Biometric Device ID', + help="Give the biometric device id") diff --git a/hr_zk_attendance/models/zk_machine_attendance.py b/hr_zk_attendance/models/zk_machine_attendance.py new file mode 100644 index 000000000..77e90baf1 --- /dev/null +++ b/hr_zk_attendance/models/zk_machine_attendance.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2025-TODAY Cybrosys Technologies(). +# Author: Bhagyadev KP (odoo@cybrosys.com) +# +# This program is free software: you can modify +# it under the terms of the GNU Affero General Public License (AGPL) as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################ +from odoo import api, fields, models + + +class ZkMachineAttendance(models.Model): + """Model to hold data from the biometric device""" + _name = 'zk.machine.attendance' + _description = 'Attendance' + _inherit = 'hr.attendance' + + @api.constrains('check_in', 'check_out', 'employee_id') + def _check_validity(self): + """Overriding the __check_validity function for employee attendance.""" + pass + + device_id_num = fields.Char(string='Biometric Device ID', + help="The ID of the Biometric Device") + punch_type = fields.Selection([('0', 'Check In'), ('1', 'Check Out'), + ('2', 'Break Out'), ('3', 'Break In'), + ('4', 'Overtime In'), ('5', 'Overtime Out'), + ('255', 'Duplicate')], + string='Punching Type', + help='Punching type of the attendance') + attendance_type = fields.Selection([('1', 'Finger'), ('15', 'Face'), + ('2', 'Type_2'), ('3', 'Password'), + ('4', 'Card'), ('255', 'Duplicate')], + string='Category', + help="Attendance detecting methods") + punching_time = fields.Datetime(string='Punching Time', + help="Punching time in the device") + address_id = fields.Many2one('res.partner', string='Working Address', + help="Working address of the employee") diff --git a/hr_zk_attendance/security/ir.model.access.csv b/hr_zk_attendance/security/ir.model.access.csv new file mode 100644 index 000000000..f2c5deec8 --- /dev/null +++ b/hr_zk_attendance/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_biometric_device_details_user,access.biometric.device.details.user,model_biometric_device_details,base.group_user,1,1,1,1 +access_daily_attendance_user,access.daily.attendance.user,model_daily_attendance,base.group_user,1,1,1,1 +access_zk_machine_attendance_user,access.zk.machine.attendance.user,model_zk_machine_attendance,base.group_user,1,1,1,1 diff --git a/hr_zk_attendance/static/description/assets/cybro-icon.png b/hr_zk_attendance/static/description/assets/cybro-icon.png new file mode 100755 index 000000000..06e73e11d Binary files /dev/null and b/hr_zk_attendance/static/description/assets/cybro-icon.png differ diff --git a/hr_zk_attendance/static/description/assets/cybro-odoo.png b/hr_zk_attendance/static/description/assets/cybro-odoo.png new file mode 100755 index 000000000..ed02e07a4 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/cybro-odoo.png differ diff --git a/hr_zk_attendance/static/description/assets/h2.png b/hr_zk_attendance/static/description/assets/h2.png new file mode 100755 index 000000000..0bfc4707d Binary files /dev/null and b/hr_zk_attendance/static/description/assets/h2.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/arrows-repeat.svg b/hr_zk_attendance/static/description/assets/icons/arrows-repeat.svg new file mode 100755 index 000000000..1d7efabc5 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-1.png b/hr_zk_attendance/static/description/assets/icons/banner-1.png new file mode 100755 index 000000000..c180db172 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/banner-1.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/banner-2.svg b/hr_zk_attendance/static/description/assets/icons/banner-2.svg new file mode 100755 index 000000000..e606d97d9 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-bg.png b/hr_zk_attendance/static/description/assets/icons/banner-bg.png new file mode 100755 index 000000000..a8238d3c0 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/banner-bg.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/banner-bg.svg b/hr_zk_attendance/static/description/assets/icons/banner-bg.svg new file mode 100755 index 000000000..b1378103e --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-call.svg b/hr_zk_attendance/static/description/assets/icons/banner-call.svg new file mode 100755 index 000000000..96c687e81 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-mail.svg b/hr_zk_attendance/static/description/assets/icons/banner-mail.svg new file mode 100755 index 000000000..cbf0d158d --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-pattern.svg b/hr_zk_attendance/static/description/assets/icons/banner-pattern.svg new file mode 100755 index 000000000..9c1c7e101 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/banner-promo.svg b/hr_zk_attendance/static/description/assets/icons/banner-promo.svg new file mode 100755 index 000000000..d52791b11 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/brand-pair.svg b/hr_zk_attendance/static/description/assets/icons/brand-pair.svg new file mode 100755 index 000000000..d8db7fc1e --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/check.png b/hr_zk_attendance/static/description/assets/icons/check.png new file mode 100755 index 000000000..c8e85f51d Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/check.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/chevron.png b/hr_zk_attendance/static/description/assets/icons/chevron.png new file mode 100755 index 000000000..2089293d6 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/chevron.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/close-icon.svg b/hr_zk_attendance/static/description/assets/icons/close-icon.svg new file mode 100755 index 000000000..df8cce37a --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/cogs.png b/hr_zk_attendance/static/description/assets/icons/cogs.png new file mode 100755 index 000000000..95d0bad62 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/cogs.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/collabarate-icon.svg b/hr_zk_attendance/static/description/assets/icons/collabarate-icon.svg new file mode 100755 index 000000000..dd4e10518 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/hr_zk_attendance/static/description/assets/icons/consultation.png b/hr_zk_attendance/static/description/assets/icons/consultation.png new file mode 100755 index 000000000..8319d4baa Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/consultation.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/cybro-logo.png b/hr_zk_attendance/static/description/assets/icons/cybro-logo.png new file mode 100755 index 000000000..ff4b78220 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/cybro-logo.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/down.svg b/hr_zk_attendance/static/description/assets/icons/down.svg new file mode 100755 index 000000000..f21c36271 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hr_zk_attendance/static/description/assets/icons/ecom-black.png b/hr_zk_attendance/static/description/assets/icons/ecom-black.png new file mode 100755 index 000000000..a9385ff13 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/ecom-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/education-black.png b/hr_zk_attendance/static/description/assets/icons/education-black.png new file mode 100755 index 000000000..3eb09b27b Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/education-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/faq.png b/hr_zk_attendance/static/description/assets/icons/faq.png new file mode 100755 index 000000000..4250b5b81 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/faq.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/feature-icon.svg b/hr_zk_attendance/static/description/assets/icons/feature-icon.svg new file mode 100755 index 000000000..fa0ea6850 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/feature.png b/hr_zk_attendance/static/description/assets/icons/feature.png new file mode 100755 index 000000000..ac7a785c0 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/feature.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/gear.svg b/hr_zk_attendance/static/description/assets/icons/gear.svg new file mode 100755 index 000000000..0cc66b6ea --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/hero.gif b/hr_zk_attendance/static/description/assets/icons/hero.gif new file mode 100755 index 000000000..380654dfe Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/hero.gif differ diff --git a/hr_zk_attendance/static/description/assets/icons/hire-odoo.svg b/hr_zk_attendance/static/description/assets/icons/hire-odoo.svg new file mode 100755 index 000000000..e1ac089b0 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/hotel-black.png b/hr_zk_attendance/static/description/assets/icons/hotel-black.png new file mode 100755 index 000000000..130f613be Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/hotel-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/license.png b/hr_zk_attendance/static/description/assets/icons/license.png new file mode 100755 index 000000000..a5869797e Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/license.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/life-ring-icon.svg b/hr_zk_attendance/static/description/assets/icons/life-ring-icon.svg new file mode 100755 index 000000000..3ae6e1d89 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/lifebuoy.png b/hr_zk_attendance/static/description/assets/icons/lifebuoy.png new file mode 100755 index 000000000..658d56ccc Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/lifebuoy.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/mail.svg b/hr_zk_attendance/static/description/assets/icons/mail.svg new file mode 100755 index 000000000..1eedde695 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/hr_zk_attendance/static/description/assets/icons/manufacturing-black.png b/hr_zk_attendance/static/description/assets/icons/manufacturing-black.png new file mode 100755 index 000000000..697eb0e9f Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/manufacturing-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/notes.png b/hr_zk_attendance/static/description/assets/icons/notes.png new file mode 100755 index 000000000..ee5e95404 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/notes.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/notification icon.svg b/hr_zk_attendance/static/description/assets/icons/notification icon.svg new file mode 100755 index 000000000..053189973 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/odoo-consultancy.svg b/hr_zk_attendance/static/description/assets/icons/odoo-consultancy.svg new file mode 100755 index 000000000..e05f65bde --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/odoo-licencing.svg b/hr_zk_attendance/static/description/assets/icons/odoo-licencing.svg new file mode 100755 index 000000000..2606c88b0 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/hr_zk_attendance/static/description/assets/icons/odoo-logo.png b/hr_zk_attendance/static/description/assets/icons/odoo-logo.png new file mode 100755 index 000000000..0e4d0eb5a Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/odoo-logo.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/patter.svg b/hr_zk_attendance/static/description/assets/icons/patter.svg new file mode 100755 index 000000000..25c9c0a8f --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/pattern1.png b/hr_zk_attendance/static/description/assets/icons/pattern1.png new file mode 100755 index 000000000..09ab0fb2d Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/pattern1.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/pos-black.png b/hr_zk_attendance/static/description/assets/icons/pos-black.png new file mode 100755 index 000000000..97c0f90c1 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/pos-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/puzzle-piece-icon.svg b/hr_zk_attendance/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100755 index 000000000..3e9ad9373 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/puzzle.png b/hr_zk_attendance/static/description/assets/icons/puzzle.png new file mode 100755 index 000000000..65cf854e7 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/puzzle.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/replace-icon.svg b/hr_zk_attendance/static/description/assets/icons/replace-icon.svg new file mode 100755 index 000000000..d0e3a7af1 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/restaurant-black.png b/hr_zk_attendance/static/description/assets/icons/restaurant-black.png new file mode 100755 index 000000000..4a35eb939 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/restaurant-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/screenshot-main.png b/hr_zk_attendance/static/description/assets/icons/screenshot-main.png new file mode 100755 index 000000000..575f8e676 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/screenshot-main.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/screenshot.png b/hr_zk_attendance/static/description/assets/icons/screenshot.png new file mode 100755 index 000000000..cef272529 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/screenshot.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/service-black.png b/hr_zk_attendance/static/description/assets/icons/service-black.png new file mode 100755 index 000000000..301ab51cb Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/service-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/skype-fill.svg b/hr_zk_attendance/static/description/assets/icons/skype-fill.svg new file mode 100755 index 000000000..c17423639 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/skype.png b/hr_zk_attendance/static/description/assets/icons/skype.png new file mode 100755 index 000000000..51b409fb3 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/skype.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/skype.svg b/hr_zk_attendance/static/description/assets/icons/skype.svg new file mode 100755 index 000000000..df3dad39b --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/hr_zk_attendance/static/description/assets/icons/star-1.svg b/hr_zk_attendance/static/description/assets/icons/star-1.svg new file mode 100755 index 000000000..7e55ab162 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/star-2.svg b/hr_zk_attendance/static/description/assets/icons/star-2.svg new file mode 100755 index 000000000..5ae9f507a --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/support.png b/hr_zk_attendance/static/description/assets/icons/support.png new file mode 100755 index 000000000..4f18b8b82 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/support.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/test-1 - Copy.png b/hr_zk_attendance/static/description/assets/icons/test-1 - Copy.png new file mode 100755 index 000000000..f6a902663 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/test-1 - Copy.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/test-1.png b/hr_zk_attendance/static/description/assets/icons/test-1.png new file mode 100755 index 000000000..0908add2b Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/test-1.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/test-2.png b/hr_zk_attendance/static/description/assets/icons/test-2.png new file mode 100755 index 000000000..4671fe91e Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/test-2.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/trading-black.png b/hr_zk_attendance/static/description/assets/icons/trading-black.png new file mode 100755 index 000000000..9398ba2f1 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/trading-black.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/training.png b/hr_zk_attendance/static/description/assets/icons/training.png new file mode 100755 index 000000000..884ca024d Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/training.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/translate.svg b/hr_zk_attendance/static/description/assets/icons/translate.svg new file mode 100755 index 000000000..af9c8a1aa --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/update.png b/hr_zk_attendance/static/description/assets/icons/update.png new file mode 100755 index 000000000..ecbc5a01a Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/update.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/user.png b/hr_zk_attendance/static/description/assets/icons/user.png new file mode 100755 index 000000000..6ffb23d9f Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/user.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/video.png b/hr_zk_attendance/static/description/assets/icons/video.png new file mode 100755 index 000000000..576705b17 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/video.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/whatsapp.png b/hr_zk_attendance/static/description/assets/icons/whatsapp.png new file mode 100755 index 000000000..d513a5356 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/whatsapp.png differ diff --git a/hr_zk_attendance/static/description/assets/icons/wrench-icon.svg b/hr_zk_attendance/static/description/assets/icons/wrench-icon.svg new file mode 100755 index 000000000..174b5a465 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/icons/wrench.png b/hr_zk_attendance/static/description/assets/icons/wrench.png new file mode 100755 index 000000000..6c04dea0f Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/wrench.png differ diff --git a/hr_zk_attendance/static/description/assets/modules/1.jpg b/hr_zk_attendance/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..3cb15fe01 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/1.jpg differ diff --git a/hr_zk_attendance/static/description/assets/modules/2.jpg b/hr_zk_attendance/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..662cadcc3 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/2.jpg differ diff --git a/hr_zk_attendance/static/description/assets/modules/3.jpg b/hr_zk_attendance/static/description/assets/modules/3.jpg new file mode 100644 index 000000000..717a00443 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/3.jpg differ diff --git a/hr_zk_attendance/static/description/assets/modules/4.png b/hr_zk_attendance/static/description/assets/modules/4.png new file mode 100644 index 000000000..00ebf54ad Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/4.png differ diff --git a/hr_zk_attendance/static/description/assets/modules/5.jpg b/hr_zk_attendance/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..7c67e2eec Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/5.jpg differ diff --git a/hr_zk_attendance/static/description/assets/modules/6.gif b/hr_zk_attendance/static/description/assets/modules/6.gif new file mode 100644 index 000000000..a35ece8df Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/6.gif differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/01.png b/hr_zk_attendance/static/description/assets/screenshots/01.png new file mode 100644 index 000000000..fad82f3c5 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/01.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/02.png b/hr_zk_attendance/static/description/assets/screenshots/02.png new file mode 100644 index 000000000..5da0af8e8 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/02.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/03.png b/hr_zk_attendance/static/description/assets/screenshots/03.png new file mode 100644 index 000000000..9fe1374aa Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/03.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/04.png b/hr_zk_attendance/static/description/assets/screenshots/04.png new file mode 100644 index 000000000..d44021c56 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/04.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/05.png b/hr_zk_attendance/static/description/assets/screenshots/05.png new file mode 100644 index 000000000..0dfee3266 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/05.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/06.png b/hr_zk_attendance/static/description/assets/screenshots/06.png new file mode 100644 index 000000000..416da72fc Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/06.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/hero.gif b/hr_zk_attendance/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..4d7cef160 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/hero.gif differ diff --git a/hr_zk_attendance/static/description/assets/y18.jpg b/hr_zk_attendance/static/description/assets/y18.jpg new file mode 100755 index 000000000..eea1714f2 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/y18.jpg differ diff --git a/hr_zk_attendance/static/description/banner.jpg b/hr_zk_attendance/static/description/banner.jpg new file mode 100644 index 000000000..5e0d98c02 Binary files /dev/null and b/hr_zk_attendance/static/description/banner.jpg differ diff --git a/hr_zk_attendance/static/description/icon.png b/hr_zk_attendance/static/description/icon.png new file mode 100644 index 000000000..aed3fa8de Binary files /dev/null and b/hr_zk_attendance/static/description/icon.png differ diff --git a/hr_zk_attendance/static/description/index.html b/hr_zk_attendance/static/description/index.html new file mode 100644 index 000000000..0a56863d7 --- /dev/null +++ b/hr_zk_attendance/static/description/index.html @@ -0,0 +1,1182 @@ + + + + + + Biometric Device Integration + + + + + + + + + + +
+
+ + + + + +
+
+
+
+
+
+
+ Supports: +
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+
+
+
+ +
+ +
+
+
+
+

+ This Module Integrates Biometric Device With HR Attendance +

+

Biometric Device Integration +

+
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ + + +
+
+
+

Key + Highlights

+
+
+
+
+ +
+
+ Face+Thumb with HR Attendance +
+

+ Integrates biometric device (Face+Thumb) with HR attendanc.e

+
+
+
+
+
+ +
+
+ Simultaneous Employee in Odoo +
+

+ When creating an employee on the device, add them to Odoo simultaneously. To sync an existing Odoo employee, use the same biometric device ID when adding them to the device. +

+
+
+
+
+
+ +
+
+ Attendance Log in Odoo
+

+ Option to keep the device attendance log in Odoo. +

+
+
+
+
+
+ +
+
+ Clear Attendance +
+

+ Option to clear the device attendance log from both device and Odoo. +

+
+
+
+
+
+ +
+
+ Restart and Set Time of Device +
+

+ We can set the timezone of the device and also restart the device. +

+
+
+ +
+
+
+ +
+
+ Supporting Models +
+

+ This module support with the following machines : + * uFace202 (ZKteco) + * iFace990 (ZKteco) + -Clients have reported that the module works well with the following machine : + * K40 Pro (ZKteco) + * SFace900 (ZKteco) + * FR1500 (ZKteco) + * UA760 (ZKteco) + * MB10 (ZKteco) +

+
+
+
+
+ + + +
+
+
+ Biometric Device Integration +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Biometric Device + + Configuration and Controls +

+
+
+

+ From the Biometric Device menu, you can configure your all devices with its IP address and port number.
+ Test Connection - Click on the Test connection for connecting with the Device.
+ Clear Data - This Button will clear all Attendance data from the Device and Odoo.
+ Restart - This Button will Restart the Biometric Device. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Test + Connection +

+
+
+

+ Click on the 'Test Connection' for connecting with the Device. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Downloading + + Attendance Logs +

+
+
+

+ After configuration, you can download your device attendance log into Odoo through 'Download Data' button.If the device is connected, then the Odoo will download all device attendance log. Otherwise, the Odoo will display you a warning message. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Here you can see all device attendance log. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Time + Zone +

+
+
+

+ Here you can set the time zone for device. +

+
+
+
+ +
+
+
+
+
+
+
+
+
+

+ Updating or Creating + Employees +

+
+
+

+ You can update existing employees with the 'Device Id' which are the id in the Biometric Device. If there is no match with the "Biometric Device id" then system will automatically create corresponding employee.

+ Note:- This integration is only applicable for the Device ZKteco model 'uFace 202' Please install zklib library (sudo pip install zklib) +

+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+

+ Integrates Biometric Device (Face+Thumb) with HR Attendance.

+
+ +
+
+
+
+
+
+ +
+

+ Option to keep the Device Attendance log in Odoo.

+
+
+
+
+
+
+
+ +
+

+ Option to clear the Device Attendance log from both Device and Odoo. +

+
+
+
+
+
+
+
+ +
+

+ We can set the timezone of the device and also restart the device. +

+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ +
+

+ * uFace202 (ZKteco) + * iFace990 (ZKteco) + -Clients have reported that the module works well with the following machine : + * K40 Pro (ZKteco) + * SFace900 (ZKteco) + * FR1500 (ZKteco) + * UA760 (ZKteco) + * MB10 (ZKteco) +

+
+
+ +
+ +
+

+ Go to the Biometric Device menu, enter the device’s IP address and port, then test the connection. +

+
+
+ +
+ +
+

+ Yes, ensure the Device ID in Odoo matches the Biometric Device ID to sync employees. +

+
+
+
+
+
+
+
+
+
+ +
+
+

+ Latest Release 18.0.1.0.0 +

+ + 26th March, 2025 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • +
+
+
+
+
+
+
+
+
+
+ + +
+

+ Related Products +

+ +
+ + + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/hr_zk_attendance/views/biometric_device_attendance_menus.xml b/hr_zk_attendance/views/biometric_device_attendance_menus.xml new file mode 100644 index 000000000..5ac9e473d --- /dev/null +++ b/hr_zk_attendance/views/biometric_device_attendance_menus.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/hr_zk_attendance/views/biometric_device_details_views.xml b/hr_zk_attendance/views/biometric_device_details_views.xml new file mode 100644 index 000000000..72c053137 --- /dev/null +++ b/hr_zk_attendance/views/biometric_device_details_views.xml @@ -0,0 +1,58 @@ + + + + + biometric.device.details.view.list + biometric.device.details + + + + + + + + + + + biometric.device.details.view.form + biometric.device.details + +
+
+
+ + + + + + + + + + +
+
+ + + Biometric Device + biometric.device.details + list,form + +
diff --git a/hr_zk_attendance/views/daily_attendance_views.xml b/hr_zk_attendance/views/daily_attendance_views.xml new file mode 100644 index 000000000..f48cf5071 --- /dev/null +++ b/hr_zk_attendance/views/daily_attendance_views.xml @@ -0,0 +1,25 @@ + + + + + daily.attendance.view.list + daily.attendance + + + + + + + + + + + + + + Attendance Analysis + daily.attendance + list + {} + + diff --git a/hr_zk_attendance/views/hr_employee_views.xml b/hr_zk_attendance/views/hr_employee_views.xml new file mode 100644 index 000000000..4aebb90e1 --- /dev/null +++ b/hr_zk_attendance/views/hr_employee_views.xml @@ -0,0 +1,15 @@ + + + + + hr.employee.view.form.inherit.hr.zk.attendance + hr.employee + + + + + + + +