From 089755c1fa34a6d861e55130bbda3cfc2a3121fc Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Wed, 6 Feb 2019 09:44:43 +0000 Subject: [PATCH] [REF] project_timesheet_holidays: provide hooks This commit provides some hook to extend values when a leaves generates timesheets. It also use dates directly, rather than converting them to string. Closes #30867 Closes #30872 --- .../models/hr_holidays.py | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/addons/project_timesheet_holidays/models/hr_holidays.py b/addons/project_timesheet_holidays/models/hr_holidays.py index e8fa28b1c90..03c061ebbef 100644 --- a/addons/project_timesheet_holidays/models/hr_holidays.py +++ b/addons/project_timesheet_holidays/models/hr_holidays.py @@ -65,29 +65,36 @@ class Holidays(models.Model): lambda request: request.holiday_type == 'employee' and request.holiday_status_id.timesheet_project_id and request.holiday_status_id.timesheet_task_id): - holiday_project = holiday.holiday_status_id.timesheet_project_id - holiday_task = holiday.holiday_status_id.timesheet_task_id - - work_hours_data = holiday.employee_id.list_work_time_per_day( - fields.Datetime.from_string(holiday.date_from), - fields.Datetime.from_string(holiday.date_to), - ) - for index, (day_date, work_hours_count) in enumerate(work_hours_data): - self.env['account.analytic.line'].sudo().create({ - 'name': "%s (%s/%s)" % (holiday.holiday_status_id.name or '', index + 1, len(work_hours_data)), - 'project_id': holiday_project.id, - 'task_id': holiday_task.id, - 'account_id': holiday_project.analytic_account_id.id, - 'unit_amount': work_hours_count, - 'user_id': holiday.employee_id.user_id.id, - 'date': fields.Date.to_string(day_date), - 'holiday_id': holiday.id, - 'employee_id': holiday.employee_id.id, - 'company_id': holiday_task.company_id.id or holiday_project.company_id.id, - }) + holiday._timesheet_create_lines() return super(Holidays, self)._validate_leave_request() + def _timesheet_create_lines(self): + self.ensure_one() + work_hours_data = self.employee_id.list_work_time_per_day( + self.date_from, + self.date_to, + ) + timesheets = self.env['account.analytic.line'] + for index, (day_date, work_hours_count) in enumerate(work_hours_data): + timesheets |= self.env['account.analytic.line'].sudo().create(self._timesheet_prepare_line_values(index, work_hours_data, day_date, work_hours_count)) + return timesheets + + def _timesheet_prepare_line_values(self, index, work_hours_data, day_date, work_hours_count): + self.ensure_one() + return { + 'name': "%s (%s/%s)" % (self.holiday_status_id.name or '', index + 1, len(work_hours_data)), + 'project_id': self.holiday_status_id.timesheet_project_id.id, + 'task_id': self.holiday_status_id.timesheet_task_id.id, + 'account_id': self.holiday_status_id.timesheet_project_id.analytic_account_id.id, + 'unit_amount': work_hours_count, + 'user_id': self.employee_id.user_id.id, + 'date': day_date, + 'holiday_id': self.id, + 'employee_id': self.employee_id.id, + 'company_id': self.holiday_status_id.timesheet_task_id.company_id.id or self.holiday_status_id.timesheet_project_id.company_id.id, + } + def action_refuse(self): """ Remove the timesheets linked to the refused holidays """ result = super(Holidays, self).action_refuse()