81 lines
2.0 KiB
Python
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
|
|
|