You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							106 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							106 lines
						
					
					
						
							4.3 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ################################################################################### | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| #    Copyright (C) 2018-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | |
| #    Author: cybrosys(<https://www.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 <http://www.gnu.org/licenses/>. | |
| # | |
| ################################################################################### | |
| 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) | |
| 
 | |
| 
 | |
| 
 |