diff --git a/hr_zk_attendance/README.rst b/hr_zk_attendance/README.rst new file mode 100644 index 000000000..b25359092 --- /dev/null +++ b/hr_zk_attendance/README.rst @@ -0,0 +1,61 @@ +.. 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 + +*ZKteco model 'uFace 202' +*ZKteco model 'iFace990' + +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 @ cybrosys, + (V11) Niyas Raphy @ Cybrosys, + (V12) Basith @ Cybrosys, + (V13) Varsha Vivek @ Cybrosys, + (V14) Ijaz Ahammed @ Cybrosys, + (V15) Noushid Khan @ Cybrosys, + (V16) Minhaj T @ Cybrosys, + (V17) Ammu Raj @ Cybrosys, 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..d9e93b8e8 --- /dev/null +++ b/hr_zk_attendance/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) 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..0f4ea9a87 --- /dev/null +++ b/hr_zk_attendance/__manifest__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +{ + 'name': 'Biometric Device Integration', + 'version': '17.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),odoo17,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'], + '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.png'], + '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..6da9a8e65 --- /dev/null +++ b/hr_zk_attendance/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 16.11.2023 +#### Version 17.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..6478dcf9f --- /dev/null +++ b/hr_zk_attendance/models/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) 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..0d07df37e --- /dev/null +++ b/hr_zk_attendance/models/biometric_device_details.py @@ -0,0 +1,218 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +import datetime +import logging +import pytz +from odoo import 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_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}') + + 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) + 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..1f114f931 --- /dev/null +++ b/hr_zk_attendance/models/daily_attendance.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) 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..08bd4a4d1 --- /dev/null +++ b/hr_zk_attendance/models/hr_employee.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) 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..c9d4e0c8c --- /dev/null +++ b/hr_zk_attendance/models/zk_machine_attendance.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies(). +# Author: Ammu Raj (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# 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 (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) 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..5efe2e197 --- /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,access.biometric.device.details,model_biometric_device_details,base.group_user,1,1,1,1 +access_daily_attendance,access.daily.attendance,model_daily_attendance,base.group_user,1,1,1,1 +access_zk_machine_attendance,access.zk.machine.attendance,model_zk_machine_attendance,base.group_user,1,1,1,1 diff --git a/hr_zk_attendance/static/description/assets/icons/capture (1).png b/hr_zk_attendance/static/description/assets/icons/capture (1).png new file mode 100644 index 000000000..8824deafc Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/capture (1).png differ 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 100644 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 100644 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/cogs.png b/hr_zk_attendance/static/description/assets/icons/cogs.png new file mode 100644 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/consultation.png b/hr_zk_attendance/static/description/assets/icons/consultation.png new file mode 100644 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/ecom-black.png b/hr_zk_attendance/static/description/assets/icons/ecom-black.png new file mode 100644 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 100644 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/hotel-black.png b/hr_zk_attendance/static/description/assets/icons/hotel-black.png new file mode 100644 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/img.png b/hr_zk_attendance/static/description/assets/icons/img.png new file mode 100644 index 000000000..70197f477 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/img.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 100644 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/lifebuoy.png b/hr_zk_attendance/static/description/assets/icons/lifebuoy.png new file mode 100644 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/manufacturing-black.png b/hr_zk_attendance/static/description/assets/icons/manufacturing-black.png new file mode 100644 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/photo-capture.png b/hr_zk_attendance/static/description/assets/icons/photo-capture.png new file mode 100644 index 000000000..06c111758 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/icons/photo-capture.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 100644 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.png b/hr_zk_attendance/static/description/assets/icons/puzzle.png new file mode 100644 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/restaurant-black.png b/hr_zk_attendance/static/description/assets/icons/restaurant-black.png new file mode 100644 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/service-black.png b/hr_zk_attendance/static/description/assets/icons/service-black.png new file mode 100644 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/trading-black.png b/hr_zk_attendance/static/description/assets/icons/trading-black.png new file mode 100644 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 100644 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/update.png b/hr_zk_attendance/static/description/assets/icons/update.png new file mode 100644 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 100644 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/wrench.png b/hr_zk_attendance/static/description/assets/icons/wrench.png new file mode 100644 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/misc/Cybrosys R.png b/hr_zk_attendance/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/misc/Cybrosys R.png differ diff --git a/hr_zk_attendance/static/description/assets/misc/email.svg b/hr_zk_attendance/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/phone.svg b/hr_zk_attendance/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/hr_zk_attendance/static/description/assets/misc/star (1) 2.svg b/hr_zk_attendance/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/support (1) 1.svg b/hr_zk_attendance/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/support-email.svg b/hr_zk_attendance/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/tick-mark.svg b/hr_zk_attendance/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/whatsapp 1.svg b/hr_zk_attendance/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/misc/whatsapp.svg b/hr_zk_attendance/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/hr_zk_attendance/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hr_zk_attendance/static/description/assets/modules/1.png b/hr_zk_attendance/static/description/assets/modules/1.png new file mode 100644 index 000000000..5738a486e Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/1.png differ diff --git a/hr_zk_attendance/static/description/assets/modules/2.png b/hr_zk_attendance/static/description/assets/modules/2.png new file mode 100644 index 000000000..6c3f4e8c3 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/2.png differ diff --git a/hr_zk_attendance/static/description/assets/modules/3.png b/hr_zk_attendance/static/description/assets/modules/3.png new file mode 100644 index 000000000..e76acf229 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/3.png 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..023f7926e 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.png b/hr_zk_attendance/static/description/assets/modules/5.png new file mode 100644 index 000000000..92e954d0e Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/5.png differ diff --git a/hr_zk_attendance/static/description/assets/modules/6.png b/hr_zk_attendance/static/description/assets/modules/6.png new file mode 100644 index 000000000..0ec77d677 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/modules/6.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..7e41a0c7c 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/screenshots/img1.png b/hr_zk_attendance/static/description/assets/screenshots/img1.png new file mode 100644 index 000000000..7e7082737 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img1.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/img2.png b/hr_zk_attendance/static/description/assets/screenshots/img2.png new file mode 100644 index 000000000..9d4361559 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img2.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/img3.png b/hr_zk_attendance/static/description/assets/screenshots/img3.png new file mode 100644 index 000000000..30f96d6e3 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img3.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/img4.png b/hr_zk_attendance/static/description/assets/screenshots/img4.png new file mode 100644 index 000000000..49cec5a43 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img4.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/img5.png b/hr_zk_attendance/static/description/assets/screenshots/img5.png new file mode 100644 index 000000000..5dc6d9f04 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img5.png differ diff --git a/hr_zk_attendance/static/description/assets/screenshots/img6.png b/hr_zk_attendance/static/description/assets/screenshots/img6.png new file mode 100644 index 000000000..1ef9d7a81 Binary files /dev/null and b/hr_zk_attendance/static/description/assets/screenshots/img6.png differ diff --git a/hr_zk_attendance/static/description/banner.png b/hr_zk_attendance/static/description/banner.png new file mode 100644 index 000000000..87bb832e6 Binary files /dev/null and b/hr_zk_attendance/static/description/banner.png 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..15d22b9bb 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..a411f1945 --- /dev/null +++ b/hr_zk_attendance/static/description/index.html @@ -0,0 +1,861 @@ + + + + + + + Odoo App 3 Index + + + + + + + + +
+
+
+
+
+ +
+
+
+ Community +
+
+
+
+
+
+

+ Biometric Device Integration

+

+ This Module Integrates Biometric Device With HR Attendance. +

+
+ +
+
+
+
+
+

+ Key Highlights +

+
+
+
+
+
+ +
+
+

+ (Face+Thumb) with HR Attendance.

+

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

+
+
+
+
+
+
+ +
+
+

+ Simultaneous Employee in Odoo.

+

If you create + an Employee in Device simultaneously create that + Employee in Odoo also. + For adding the existing employee of Odoo to + Device, create the employee in Device with the + same Biometric Device id from Odoo. +

+
+
+
+
+
+
+ +
+
+

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

+
+
+
+
+
+
+ +
+
+

HR + Attendance.

+

Automates HR + Attendance. +

+
+
+
+
+
+
+ +
+
+

+ Supporting model

+

This module + will support with ZKteco model 'uFace 202', + ZKteco model 'iFace990'. +

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

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

+
+
+
+
+
+
+ +
+
+

+ Click on the Test connection for connecting + with the Device.

+
+
+
+
+
+
+ +
+
+

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

+
+
+
+
+
+
+ +
+
+

+ Here, Odoo automatically generates HR + Attendance log while downloading the Device + Attendance.

+
+
+
+
+ +
+
+

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

+
+
+ +
+
+
+
+
+
+
+
+
    +
  • + Can choose + Employee from Work Order itself. +
  • +
  • + Using Project + and Tasks makes it easier. +
  • +
  • + Timesheet for + Manufacturing. +
      +
    • A Project will be created in the name of + Manufacturing Order , + and Task will be created in the name of + Work Order. The Time + tracking of the Work Order will be added + as Timesheet. +
    • +
    +
  • + +
+
+
+
+
+
+
Version + 16.0.1.0.0|Released on:25th May 2023 +
+

+ + Initial Commit for Manufacturing (MRP) + Timesheet.

+
+
+
+
+
+
+
+

+ Related Products

+
+
+ +
+
+

+ Our Services

+ +
+
+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Customization

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Implementation

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Support

+
+
+
+
+
+
+ service-icon +
+
+

Hire + Odoo Developer

+
+
+
+
+ +
+
+ service-icon +
+
+

Odoo + Integration

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Migration

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Consultancy

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Implementation

+
+
+
+
+
+
+ service-icon +
+
+

Odoo + Licensing Consultancy

+
+
+
+
+
+
+

+ Our Industries

+ +
+
+
+
+
+
+ +

Trading

+

Easily procure and sell your products

+
+
+
+
+ +

POS

+

Easy configuration and convivial experience

+
+
+
+
+ +

+ Education

+

A platform for educational management

+
+
+
+
+ +

+ Manufacturing

+

Plan, track and schedule your operations

+
+
+
+
+ +

E-commerce & + Website

+

Mobile friendly, awe-inspiring product pages

+
+
+
+
+ +

Service + Management

+

Keep track of services and invoice

+
+
+
+
+ +

+ Restaurant

+

Run your bar or restaurant methodically

+
+
+
+
+ +

Hotel + Management

+

An all-inclusive hotel management application

+
+
+
+
+
+
+

+ Support

+
+
+
+
+
+
+
+ +
+ Need + Help? +

Got + questions or need help? Get in touch.

+
odoo@cybrosys.com +
+
+
+
+
+
+
+
+ +
+ WhatsApp +

Say hi to + us on WhatsApp!

+
+91 + 99456767686 +
+
+
+
+
+
+
+
+
+ + + + + + 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..5bd8a900c --- /dev/null +++ b/hr_zk_attendance/views/biometric_device_details_views.xml @@ -0,0 +1,56 @@ + + + + + biometric.device.details.view.tree + biometric.device.details + + + + + + + + + + + biometric.device.details.view.form + biometric.device.details + +
+
+
+ + + + + + + + + + +
+
+ + + Biometric Device + biometric.device.details + tree,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..523e04940 --- /dev/null +++ b/hr_zk_attendance/views/daily_attendance_views.xml @@ -0,0 +1,25 @@ + + + + + daily.attendance.view.tree + daily.attendance + + + + + + + + + + + + + + Attendance Analysis + daily.attendance + tree + {} + + 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..9e660af8f --- /dev/null +++ b/hr_zk_attendance/views/hr_employee_views.xml @@ -0,0 +1,16 @@ + + + + + hr.employee.view.form.inherit.hr.zk.attendance + + hr.employee + + + + + + + +