[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
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user