# -*- coding: utf-8 -*- ################################################################################### # # Cybrosys Technologies Pvt. Ltd. # Copyright (C) 2022-TODAY Cybrosys Technologies(). # Author: cybrosys() # # 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 tools from odoo import models, fields, api, _ class HrEmployee(models.Model): _inherit = 'hr.employee' device_id = fields.Char(string='Biometric Device ID') class ZkMachine(models.Model): _name = 'zk.machine.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 = fields.Char(string='Biometric Device ID') 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') attendance_type = fields.Selection([('1', 'Finger'), ('15', 'Face'), ('2','Type_2'), ('3','Password'), ('4','Card')], string='Category') punching_time = fields.Datetime(string='Punching Time') address_id = fields.Many2one('res.partner', string='Working Address') class ReportZkDevice(models.Model): _name = 'zk.report.daily.attendance' _auto = False _order = 'punching_day desc' name = fields.Many2one('hr.employee', string='Employee') punching_day = fields.Datetime(string='Date') address_id = fields.Many2one('res.partner', string='Working Address') attendance_type = fields.Selection([('1', 'Finger'), ('15', 'Face'), ('2','Type_2'), ('3','Password'), ('4','Card')], string='Category') 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') punching_time = fields.Datetime(string='Punching Time') def init(self): tools.drop_view_if_exists(self._cr, 'zk_report_daily_attendance') query = """ create or replace view zk_report_daily_attendance as ( select min(z.id) as id, z.employee_id as name, 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)