odoo18/addons_extensions/leaves_timesheets_extended/models/hr_leave.py

81 lines
2.0 KiB
Python

from odoo import models, fields, api
class HrLeave(models.Model):
_inherit = 'hr.leave'
project_id = fields.Many2one(
'project.project',
string='Project'
)
task_id = fields.Many2one(
'project.task',
string='Task'
)
timesheet_line_id = fields.Many2one(
'account.analytic.line',
string='Timesheet Entry',
readonly=True,
copy=False
)
# CREATE TIMESHEET ON APPROVAL
def action_validate(self, check_state=True):
res = super().action_validate(check_state=check_state)
default_project = self.env.ref(
'leaves_timesheets_extended.project_internal_leave'
)
default_task = self.env.ref(
'leaves_timesheets_extended.task_leave_management'
)
for leave in self:
# Prevent duplicate creation
if leave.timesheet_line_id:
continue
project = leave.project_id or default_project
task = leave.task_id or default_task
# Hours Calculation
if leave.request_unit_half:
hours = 4
else:
hours = leave.number_of_days * 8
analytic_line = self.env[
'account.analytic.line'
].create({
'name': f"Leave: {leave.holiday_status_id.name}",
'employee_id': leave.employee_id.id,
'user_id': leave.employee_id.user_id.id,
'project_id': project.id,
'task_id': task.id,
'unit_amount': hours,
'date': leave.request_date_from,
'company_id': leave.company_id.id,
})
leave.timesheet_line_id = analytic_line.id
return res
# DELETE TIMESHEET ON REFUSE
def action_refuse(self):
res = super().action_refuse()
for leave in self:
if leave.timesheet_line_id:
leave.timesheet_line_id.unlink()
leave.timesheet_line_id = False
return res