Leaves Timesheets Management
This commit is contained in:
parent
5460f6c207
commit
96493be796
|
|
@ -0,0 +1 @@
|
|||
from . import models
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
'name': 'Leaves Timesheets Extended',
|
||||
'version': '18.0.1.0.0',
|
||||
'category': 'Human Resources',
|
||||
'summary': 'Integrate Leaves with Timesheets',
|
||||
'author': 'Srivyn Platforms',
|
||||
'license': 'LGPL-3',
|
||||
|
||||
'depends': [
|
||||
'hr_holidays',
|
||||
'hr_timesheet',
|
||||
'project',
|
||||
],
|
||||
|
||||
'data': [
|
||||
'data/project_task_data.xml',
|
||||
'views/hr_leave_views.xml',
|
||||
],
|
||||
|
||||
'installable': True,
|
||||
'application': False,
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- Default Internal Project -->
|
||||
<record id="project_internal_leave" model="project.project">
|
||||
<field name="name">Internal Project</field>
|
||||
|
||||
<!-- REQUIRED FIELD -->
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
|
||||
<field name="allow_timesheets">True</field>
|
||||
</record>
|
||||
|
||||
<!-- Default Leave Task -->
|
||||
<record id="task_leave_management" model="project.task">
|
||||
<field name="name">Leaves Management</field>
|
||||
|
||||
<field name="project_id"
|
||||
ref="project_internal_leave"/>
|
||||
|
||||
<!-- OPTIONAL BUT RECOMMENDED -->
|
||||
<field name="user_ids"
|
||||
eval="[(4, ref('base.user_admin'))]"/>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1 @@
|
|||
from . import hr_leave
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
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
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_hr_leave_form_inherit_timesheet"
|
||||
model="ir.ui.view">
|
||||
|
||||
<field name="name">
|
||||
hr.leave.form.inherit.timesheet
|
||||
</field>
|
||||
|
||||
<field name="model">hr.leave</field>
|
||||
|
||||
<field name="inherit_id"
|
||||
ref="hr_holidays.hr_leave_view_form"/>
|
||||
|
||||
<field name="arch" type="xml">
|
||||
|
||||
<xpath expr="//group" position="inside">
|
||||
|
||||
<field name="project_id"/>
|
||||
|
||||
<field name="task_id"
|
||||
domain="[('project_id', '=', project_id)]"/>
|
||||
|
||||
</xpath>
|
||||
|
||||
</field>
|
||||
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue