I need to read from table hr_attendences and calculating for my rules but I tried a kind of cases and I spent a lot of time, but still misunderstand why I cant see all data?
Odoo 17
Python 3.10
from odoo import models, fields, api
import logging
logging.basicConfig(level=logging.DEBUG)
_logger = logging.getLogger(__name__)
class HrAttendance(models.Model):
_name = 'fentro.hr.attendance'
_description = 'Fentro Attendance'
_inherit = 'hr.attendance'
# _order = 'check_in desc'
print("============= HrAttendance =============")
def _default_employee(self):
_logger.info(f"============= {self.env.user.employee_id} =============")
return self.env.user.employee_id
# main fields
# employee_id = fields.Many2one('hr.employee', string="Employee", default=_default_employee, required=True, ondelete='cascade', index=True)
date_time_in = fields.Datetime(string="Date and Time", compute='_calculated_fields')
day_time_in = fields.Text(string="Day", compute='_calculated_fields')
code_report = fields.Text(string="Code")
time_check_in = fields.Text(string="Time In", compute='_calculated_fields')
time_check_out = fields.Text(string="Time Out", compute='_calculated_fields')
time_off = fields.Text(string="Time Off")
hours_worked = fields.Text(string="Hours Worked", required=False)
hours_required = fields.Text(string="Hours Required", required=False)
hours_overtime = fields.Text(string="Overtime", required=False)
hours_per_week = fields.Text(string="Flextime", required=False)
# additional fields
total_hours_worked = fields.Float(string='Total Hours Worked', compute='_calculated_fields')
# department_id = fields.Many2one('hr.department', string="Department", compute='_compute_department_id')
# department_name = fields.Char(string="Department Name", related='department_id.name')
color_mark = fields.Text(required=False, compute='_calculated_fields')
@api.model
def create(self, values):
new_record = super(HrAttendance, self).create(values)
_logger.debug("New record created: %s", new_record)
return new_record
@api.depends_context('employee_id')
def _calculated_fields(self):
_logger.debug("Debugging message")
_logger.info('============= HrAttendance =============')
for record in self:
# Используем 'self.env' для доступа к записям из hr.attendance
records = self.env['hr.attendance'].search([('employee_id', '=', record.employee_id.id)])
for attendance_record in records:
dt_in = attendance_record.check_in
attendance_record.day_time_in = dt_in.strftime('%A')
if dt_in.strftime('%A') in ('Sunday', 'Saturday'):
attendance_record.color_mark = 'red'
attendance_record.date_time_in = dt_in # Assuming dt_in is a datetime object
attendance_record.time_check_in = dt_in.strftime('%H:%M')
dt_out = attendance_record.check_out
attendance_record.time_check_out = dt_out.strftime('%H:%M')
attendance_record.hours_worked = attendance_record.worked_hours
# Sum up the hours worked from hr.attendance records
total_hours_worked = sum(float(att.worked_hours) for att in
attendance_record.employee_id.attendance_ids.filtered(
lambda r: r.id != attendance_record.id))
attendance_record.total_hours_worked = total_hours_worked
self.recompute()
@api.depends('employee_id')
def _compute_department_id(self):
for record in self:
if record.employee_id:
# Fetch the department_id from hr.employee based on employee_id
employee = self.env['hr.employee'].browse(record.employee_id.id)
department_id = employee.department_id.id if employee.department_id else False
record.department_id = department_id
else:
record.department_id = False