Skip to content

Commit

Permalink
Merge pull request #84 from hbrunn/15.0-83-delete_resource_leaves
Browse files Browse the repository at this point in the history
[FIX] remove resource leaves when resetting to draft
  • Loading branch information
albig authored Dec 19, 2023
2 parents 9b9ab76 + 039cb13 commit 7e61137
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 1 deletion.
2 changes: 2 additions & 0 deletions verdigado_attendance/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
],
"demo": [
"demo/res_users.xml",
"demo/hr_employee.xml",
"demo/hr_leave_allocation.xml",
],
"assets": {
"web._assets_primary_variables": [
Expand Down
17 changes: 17 additions & 0 deletions verdigado_attendance/demo/hr_employee.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="verdigado_manager_employee" model="hr.employee">
<field name="name">Verdigado manager</field>
<field name="user_id" ref="verdigado_manager" />
</record>
<record id="verdigado_officer_employee" model="hr.employee">
<field name="name">Verdigado officer</field>
<field name="user_id" ref="verdigado_officer" />
<field name="parent_id" ref="verdigado_manager_employee" />
</record>
<record id="verdigado_user_employee" model="hr.employee">
<field name="name">Verdigado user</field>
<field name="user_id" ref="verdigado_user" />
<field name="parent_id" ref="verdigado_officer_employee" />
</record>
</odoo>
21 changes: 21 additions & 0 deletions verdigado_attendance/demo/hr_leave_allocation.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="allocation_user_2023" model="hr.leave.allocation">
<field name="name">Paid Time Off for Verdigado employee 2023</field>
<field name="holiday_status_id" ref="hr_holidays.holiday_status_cl" />
<field name="number_of_days">30</field>
<field name="employee_id" ref="verdigado_user_employee" />
<field name="state">validate</field>
<field name="date_from">2023-01-01</field>
<field name="date_to">2023-12-31</field>
</record>
<record id="allocation_user_2042" model="hr.leave.allocation">
<field name="name">Paid Time Off for Verdigado employee 2042</field>
<field name="holiday_status_id" ref="hr_holidays.holiday_status_cl" />
<field name="number_of_days">30</field>
<field name="employee_id" ref="verdigado_user_employee" />
<field name="state">validate</field>
<field name="date_from">2042-01-01</field>
<field name="date_to">2042-12-31</field>
</record>
</odoo>
3 changes: 3 additions & 0 deletions verdigado_attendance/demo/res_users.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<record id="verdigado_user" model="res.users" context="{'no_reset_password': True}">
<field name="login">verdigado_employee</field>
<field name="name">Verdigado employee</field>
<field name="email">employee@verdigado</field>
<field name="groups_id" eval="[(6, 0, [ref('group_verdigado_employee')])]" />
</record>
<record
Expand All @@ -12,6 +13,7 @@
>
<field name="login">verdigado_officer</field>
<field name="name">Verdigado officer</field>
<field name="email">officer@verdigado</field>
<field name="groups_id" eval="[(6, 0, [ref('group_verdigado_officer')])]" />
</record>
<record
Expand All @@ -21,6 +23,7 @@
>
<field name="login">verdigado_manager</field>
<field name="name">Verdigado manager</field>
<field name="email">manager@verdigado</field>
<field name="groups_id" eval="[(6, 0, [ref('group_verdigado_manager')])]" />
</record>
</odoo>
3 changes: 2 additions & 1 deletion verdigado_attendance/models/hr_leave.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ def _check_approval_update(self, state):

def action_draft(self):
"""Allow setting to draft from any state"""
self.sudo()._remove_resource_leave()
self.read([])
# manipulate cache to make records look like being in state 'confirm' as
# super only allows it for this and 'refuse'
self.read([])
for this in self:
this._cache["state"] = "confirm"
return super().action_draft()
Expand Down
2 changes: 2 additions & 0 deletions verdigado_attendance/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Copyright 2023 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import hr_case
from . import test_holidays
from . import test_hr_access
from . import test_overtime_calculation
from . import test_misc
Expand Down
13 changes: 13 additions & 0 deletions verdigado_attendance/tests/hr_case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2023 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo.tests.common import TransactionCase


class HrCase(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.verdigado_user = cls.env.ref("verdigado_attendance.verdigado_user")
cls.verdigado_officer = cls.env.ref("verdigado_attendance.verdigado_officer")
cls.verdigado_manager = cls.env.ref("verdigado_attendance.verdigado_manager")
77 changes: 77 additions & 0 deletions verdigado_attendance/tests/test_holidays.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Copyright 2023 Hunki Enterprises BV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import exceptions

from .hr_case import HrCase


class TestHolidays(HrCase):
def test_standard_flow_past(self):
"""Test that employees can request holidays for the past"""
holiday = (
self.env["hr.leave"]
.with_user(self.verdigado_user)
.create(
{
"employee_id": self.verdigado_user.employee_id.id,
"holiday_status_id": self.env.ref(
"hr_holidays.holiday_status_cl"
).id,
"date_from": "2023-12-11 07:00:00",
"date_to": "2023-12-13 16:00:00",
}
)
)
holiday_status = holiday.holiday_status_id
with self.assertRaisesRegex(
exceptions.UserError,
"manager rights to modify/validate a time off that already begun",
):
holiday.action_approve()
holiday_as_officer = holiday.with_user(self.verdigado_officer)
holiday_as_officer.action_validate()
self.assertEqual(holiday.number_of_days, 3)
self.assertEqual(holiday_status.remaining_leaves, 27)
resource_leave = self.env["resource.calendar.leaves"].search(
[("holiday_id", "in", holiday.ids)]
)
self.assertTrue(resource_leave)
with self.assertRaisesRegex(
exceptions.UserError,
"manager rights to modify/validate a time off that already begun",
):
holiday.unlink()
holiday_as_officer.unlink()
self.assertFalse(resource_leave.exists())
self.assertEqual(holiday_status.remaining_leaves, 30)

def test_standard_flow_future(self):
"""Test that employees can request holidays for the future"""
holiday = (
self.env["hr.leave"]
.with_user(self.verdigado_user)
.create(
{
"employee_id": self.verdigado_user.employee_id.id,
"holiday_status_id": self.env.ref(
"hr_holidays.holiday_status_cl"
).id,
"date_from": "2042-12-15 07:00:00",
"date_to": "2042-12-17 16:00:00",
}
)
)
holiday_status = holiday.holiday_status_id
with self.assertRaisesRegex(
exceptions.UserError, "approve/refuse its own requests"
):
holiday.action_approve()
holiday_as_officer = holiday.with_user(self.verdigado_officer)
holiday_as_officer.action_validate()
resource_leave = self.env["resource.calendar.leaves"].search(
[("holiday_id", "in", holiday.ids)]
)
self.assertTrue(resource_leave)
holiday.unlink()
self.assertEqual(holiday_status.remaining_leaves, 30)

0 comments on commit 7e61137

Please sign in to comment.