Skip to content

Commit

Permalink
[ADD] hr_holidays_leave_self_approve
Browse files Browse the repository at this point in the history
  • Loading branch information
florentx committed Apr 11, 2023
1 parent ef1806e commit 264fd61
Show file tree
Hide file tree
Showing 10 changed files with 123 additions and 0 deletions.
1 change: 1 addition & 0 deletions hr_holidays_leave_self_approve/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
autogenerated
3 changes: 3 additions & 0 deletions hr_holidays_leave_self_approve/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import models
15 changes: 15 additions & 0 deletions hr_holidays_leave_self_approve/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Self Approve Leaves",
"version": "15.0.1.0.0",
"license": "AGPL-3",
"summary": "Allow employee to approve his own leaves",
"author": "Camptocamp SA, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/hr-holidays",
"category": "Human Resources",
"depends": ["hr_holidays"],
"data": [],
"installable": True,
}
3 changes: 3 additions & 0 deletions hr_holidays_leave_self_approve/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import hr_leave
18 changes: 18 additions & 0 deletions hr_holidays_leave_self_approve/models/hr_leave.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import models


class HrLeave(models.Model):
_inherit = "hr.leave"

def _check_approval_update(self, state):
if self.env.is_admin():
return
if state == "validate":
current_employee = self.env.user.employee_id
if current_employee.user_id == current_employee.leave_manager_id:
# Filter out self-approved leaves
self = self.filtered_domain([("employee_id", "!=", current_employee)])
super()._check_approval_update(state)
1 change: 1 addition & 0 deletions hr_holidays_leave_self_approve/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Nothing to configure. When employee "Time Off" approver is set to himself, it will work as expected.
1 change: 1 addition & 0 deletions hr_holidays_leave_self_approve/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Florent Xiclnua <[email protected]>
1 change: 1 addition & 0 deletions hr_holidays_leave_self_approve/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module allows employee to approve their own leave requests, when their "Time Off" approver is themself.
3 changes: 3 additions & 0 deletions hr_holidays_leave_self_approve/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from . import test_hr_holidays_leave_self_approve
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from datetime import datetime, timedelta

from odoo.tests.common import TransactionCase


class TestHolidaysAutoValidate(TransactionCase):
def setUp(self):
super().setUp()
self.employee_model = self.env["hr.employee"]
self.user_model = self.env["res.users"]
self.leave_request_model = self.env["hr.leave"]
self.leave_allocation_model = self.env["hr.leave.allocation"]

# Create an employee user to make leave requests
self.test_user_id = self.user_model.create(
{"name": "Test User", "login": "test_user", "email": "[email protected]"}
)

# Create an employee related to the user to make leave requests
# Assign user as self-approver
self.test_employee_id = self.employee_model.create(
{
"name": "Test Employee",
"user_id": self.test_user_id.id,
"leave_manager_id": self.test_user_id.id,
)

# "Paid Leave" type
leave_type = self.env.ref("hr_holidays.holiday_status_cl")

# Create leave allocation request
self.leave_allocation = self.leave_allocation_model.create(
{
"name": "Test Allocation Request",
"holiday_status_id": leave_type.id,
"holiday_type": "employee",
"employee_id": self.test_employee_id.id,
"number_of_days": 10,
}
)

def test_allocation_request_state(self):
# Check for leave_allocation state
self.assertEqual(self.leave_allocation.state, "confirm")

# Validate the leave_allocation
self.leave_allocation.action_approve()

# Check for leave_allocation state
self.assertEqual(self.leave_allocation.state, "validate")

def test_leave_request_state(self):
today = datetime.today()

# Create leave request
leave = self.leave_request_model.create(
{
"name": "Test Leave Request",
"holiday_status_id": self.leave_allocation.holiday_status_id.id,
"date_from": today,
"date_to": today + timedelta(days=2),
"holiday_type": "employee",
"employee_id": self.test_employee_id.id,
}
)

# Check for leave state
self.assertEqual(leave.state, "confirm")

# Self approve
leave.with_user(self.test_user_id).action_approve()

# Check for leave state
self.assertEqual(leave.state, "validate")

0 comments on commit 264fd61

Please sign in to comment.