[FIX] hr_timesheet_attendance: base report on employees, not users

The report is currently base on timesheets/attendances.user_id.employee_id.
As a result, some data weren't taken into account.
As both models have employee_id, there is no reason not to use it.

task-3251675

closes odoo/odoo#127492

Related: odoo/upgrade#4900
Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
This commit is contained in:
Audric Onockx (auon)
2023-07-13 14:47:44 +02:00
committed by Xavier Bol (xbo)
parent dfd5d33a05
commit 9e0277eeec
3 changed files with 11 additions and 12 deletions
@@ -9,7 +9,7 @@ class TimesheetAttendance(models.Model):
_auto = False
_description = 'Timesheet Attendance Report'
user_id = fields.Many2one('res.users', readonly=True)
employee_id = fields.Many2one('hr.employee', readonly=True)
date = fields.Date(readonly=True)
total_timesheet = fields.Float("Timesheets Hours", readonly=True)
total_attendance = fields.Float("Attendance Hours", readonly=True)
@@ -24,7 +24,7 @@ class TimesheetAttendance(models.Model):
self._cr.execute("""CREATE OR REPLACE VIEW %s AS (
SELECT
max(id) AS id,
t.user_id,
t.employee_id,
t.date,
t.company_id,
coalesce(sum(t.attendance), 0) AS total_attendance,
@@ -37,19 +37,18 @@ class TimesheetAttendance(models.Model):
SELECT
-hr_attendance.id AS id,
hr_employee.hourly_cost AS emp_cost,
resource_resource.user_id AS user_id,
hr_attendance.employee_id AS employee_id,
hr_attendance.worked_hours AS attendance,
NULL AS timesheet,
hr_attendance.check_in::date AS date,
resource_resource.company_id as company_id
hr_employee.company_id as company_id
FROM hr_attendance
LEFT JOIN hr_employee ON hr_employee.id = hr_attendance.employee_id
LEFT JOIN resource_resource on resource_resource.id = hr_employee.resource_id
UNION ALL
SELECT
ts.id AS id,
hr_employee.hourly_cost AS emp_cost,
ts.user_id AS user_id,
ts.employee_id AS employee_id,
NULL AS attendance,
ts.unit_amount AS timesheet,
ts.date AS date,
@@ -58,7 +57,7 @@ class TimesheetAttendance(models.Model):
LEFT JOIN hr_employee ON hr_employee.id = ts.employee_id
WHERE ts.project_id IS NOT NULL
) AS t
GROUP BY t.user_id, t.date, t.company_id, t.emp_cost
GROUP BY t.employee_id, t.date, t.company_id, t.emp_cost
ORDER BY t.date
)
""" % self._table)
@@ -6,12 +6,12 @@
<field name="model">hr.timesheet.attendance.report</field>
<field name="arch" type="xml">
<search string="Timesheet Attendance">
<field name="user_id" string="Employee"/>
<filter string="My Team" name="my_team" domain="[('user_id.employee_parent_id.user_id', '=', uid)]"/>
<filter string="My Department" name="my_department" domain="[('user_id.employee_id.member_of_department', '=', True)]"/>
<field name="employee_id" string="Employee"/>
<filter string="My Team" name="my_team" domain="[('employee_id.parent_id.user_id', '=', uid)]"/>
<filter string="My Department" name="my_department" domain="[('employee_id.member_of_department', '=', True)]"/>
<separator/>
<filter name="month" string="Date" date="date"/>
<filter name="group_by_user" string="Employee" context="{'group_by': 'user_id'}"/>
<filter name="group_by_user" string="Employee" context="{'group_by': 'employee_id'}"/>
<filter name="group_by_month" string="Date" date="date" context="{'group_by': 'date'}"/>
</search>
</field>
@@ -25,7 +25,7 @@ class TestTimesheetAttendance(TestCommonTimesheet):
'date': datetime(2022, 2, 9),
})
total_timesheet, total_attendance = self.env['hr.timesheet.attendance.report']._read_group(
[('user_id', '=', self.user_employee.id),
[('employee_id', '=', self.empl_employee.id),
('date', '>=', datetime(2022, 2, 9, 8, 0)), ('date', '<=', datetime(2022, 2, 9, 16, 0))],
aggregates=['total_timesheet:sum', 'total_attendance:sum'],
)[0]