Skip to content

Commit

Permalink
[MIG] hr_holidays_public: Migration to 18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
xaviedoanhduy committed Nov 11, 2024
1 parent c4c66a0 commit 4c9c51b
Show file tree
Hide file tree
Showing 14 changed files with 68 additions and 98 deletions.
14 changes: 8 additions & 6 deletions hr_holidays_public/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ HR Holidays Public
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github
:target: https://github.com/OCA/hr-holidays/tree/17.0/hr_holidays_public
:target: https://github.com/OCA/hr-holidays/tree/18.0/hr_holidays_public
:alt: OCA/hr-holidays
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/hr-holidays-17-0/hr-holidays-17-0-hr_holidays_public
:target: https://translation.odoo-community.org/projects/hr-holidays-18-0/hr-holidays-18-0-hr_holidays_public
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=17.0
:target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|
Expand Down Expand Up @@ -104,7 +104,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/hr-holidays/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/hr-holidays/issues/new?body=module:%20hr_holidays_public%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/hr-holidays/issues/new?body=module:%20hr_holidays_public%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Expand Down Expand Up @@ -154,12 +154,14 @@ Contributors
- `Trobz <https://trobz.com>`__:

- Thao Le <[email protected]>
- Do Anh Duy <[email protected]>

Other credits
-------------

The migration of this module from 16.0 to 17.0 was financially supported
by Camptocamp.
by Camptocamp. The migration of this module from 17.0 to 18.0 was
financially supported by Camptocamp.

Maintainers
-----------
Expand All @@ -174,6 +176,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/hr-holidays <https://github.com/OCA/hr-holidays/tree/17.0/hr_holidays_public>`_ project on GitHub.
This module is part of the `OCA/hr-holidays <https://github.com/OCA/hr-holidays/tree/18.0/hr_holidays_public>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 1 addition & 1 deletion hr_holidays_public/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

{
"name": "HR Holidays Public",
"version": "17.0.1.0.3",
"version": "18.0.1.0.0",
"license": "AGPL-3",
"category": "Human Resources",
"author": "Michael Telahun Makonnen, "
Expand Down
42 changes: 7 additions & 35 deletions hr_holidays_public/models/hr_holidays_public.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,11 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

import datetime
import logging
from datetime import date

from odoo import SUPERUSER_ID, _, api, fields, models
from odoo.exceptions import ValidationError

_logger = logging.getLogger(__name__)


class HrHolidaysPublic(models.Model):
_name = "hr.holidays.public"
Expand Down Expand Up @@ -52,10 +49,8 @@ def _compute_display_name(self):
else:
line.display_name = line.year

def _get_domain_states_filter(
self, pholidays, start_dt, end_dt, employee_id=None, partner_id=None
):
partner = self._get_partner_deprecated_employee(partner_id, employee_id)
def _get_domain_states_filter(self, pholidays, start_dt, end_dt, partner_id=None):
partner = self.env["res.partner"].browse(partner_id)
states_filter = [("year_id", "in", pholidays.ids)]
if partner and partner.state_id:
states_filter += [
Expand All @@ -71,19 +66,17 @@ def _get_domain_states_filter(

@api.model
@api.returns("hr.holidays.public.line")
def get_holidays_list(
self, year=None, start_dt=None, end_dt=None, employee_id=None, partner_id=None
):
def get_holidays_list(self, year=None, start_dt=None, end_dt=None, partner_id=None):
"""
Returns recordset of hr.holidays.public.line
for the specified year and employee
:param year: year as string (optional if start_dt and end_dt defined)
:param start_dt: start_dt as date
:param end_dt: end_dt as date
:param employee_id: ID of the employee
:param partner_id: ID of the partner
:return: recordset of hr.holidays.public.line
"""
partner = self._get_partner_deprecated_employee(partner_id, employee_id)
partner = self.env["res.partner"].browse(partner_id)
if not start_dt and not end_dt:
start_dt = datetime.date(year, 1, 1)
end_dt = datetime.date(year, 12, 31)
Expand All @@ -108,15 +101,14 @@ def get_holidays_list(
return holidays_lines

@api.model
def is_public_holiday(self, selected_date, employee_id=None, partner_id=None):
def is_public_holiday(self, selected_date, partner_id=None):
"""
Returns True if selected_date is a public holiday for the employee
:param selected_date: datetime object
:param employee_id: ID of the employee
:param partner_id: ID of the partner
:return: bool
"""
partner = self._get_partner_deprecated_employee(partner_id, employee_id)
partner = self.env["res.partner"].browse(partner_id)
partner_id = partner.id if partner else None
holidays_lines = self.get_holidays_list(
year=selected_date.year, partner_id=partner_id
Expand All @@ -127,26 +119,6 @@ def is_public_holiday(self, selected_date, employee_id=None, partner_id=None):
return True
return False

def _get_partner_deprecated_employee(self, partner_id, employee_id):
# TODO: Drop function in next migration
employee = False
partner = False
if employee_id is not None:
_logger.warning(
"Use of employee_id for hr.public.holidays is deprecated. "
"Please use partner_id instead."
)
employee = self.env["hr.employee"].browse(employee_id)
partner = employee.address_id
if partner_id:
if partner:
_logger.warning(
"Cannot use both employee_id and address_id in parameters. "
"Ignoring employee_id."
)
partner = self.env["res.partner"].browse(partner_id)
return partner


class HrHolidaysPublicLine(models.Model):
_name = "hr.holidays.public.line"
Expand Down
26 changes: 4 additions & 22 deletions hr_holidays_public/models/hr_leave.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class HrLeave(models.Model):
_inherit = "hr.leave"

def action_validate(self):
def action_validate(self, check_state=True):
"""Inject the needed context for excluding public holidays (if applicable) on
the actions derived from this validation. This is required for example for
`project_timesheet_holidays` for not generating the timesheet on the public
Expand All @@ -23,38 +23,20 @@ def action_validate(self):
leave = leave.with_context(

Check warning on line 23 in hr_holidays_public/models/hr_leave.py

View check run for this annotation

Codecov / codecov/patch

hr_holidays_public/models/hr_leave.py#L23

Added line #L23 was not covered by tests
employee_id=leave.employee_id.id, exclude_public_holidays=True
)
super(HrLeave, leave).action_validate()
super(HrLeave, leave).action_validate(check_state)
return True

Check warning on line 27 in hr_holidays_public/models/hr_leave.py

View check run for this annotation

Codecov / codecov/patch

hr_holidays_public/models/hr_leave.py#L26-L27

Added lines #L26 - L27 were not covered by tests

def _get_duration(self, check_leave_type=True, resource_calendar=None):
def _get_durations(self, check_leave_type=True, resource_calendar=None):
if self.holiday_status_id.exclude_public_holidays or not self.holiday_status_id:
instance = self.with_context(
employee_id=self.employee_id.id, exclude_public_holidays=True
)
else:
instance = self
return super(HrLeave, instance)._get_duration(
return super(HrLeave, instance)._get_durations(
check_leave_type, resource_calendar
)

@api.depends("number_of_days")
def _compute_number_of_hours_display(self):
"""If the leave is validated, no call to `_get_number_of_days` is done, so we
need to inject the context here for including the public holidays if applicable.
For such cases, we need to serialize the call to super in fragments.
"""
to_serialize = self.filtered(
lambda x: x.state == "validate"
and x.holiday_status_id.exclude_public_holidays
)
for leave in to_serialize:
leave = leave.with_context(
exclude_public_holidays=True, employee_id=leave.employee_id.id
)
super(HrLeave, leave)._compute_number_of_hours_display()
return super(HrLeave, self - to_serialize)._compute_number_of_hours_display()

def _get_domain_from_get_unusual_days(self, date_from, date_to=None):
domain = [("date", ">=", date_from)]
# Use the employee of the user or the one who has the context
Expand Down
2 changes: 1 addition & 1 deletion hr_holidays_public/models/hr_leave_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ class HrLeaveType(models.Model):

exclude_public_holidays = fields.Boolean(
default=True,
help=("If enabled, public holidays are skipped in leave days calculation."),
help="If enabled, public holidays are skipped in leave days calculation.",
)
2 changes: 1 addition & 1 deletion hr_holidays_public/models/resource_calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def _attendance_intervals_batch_exclude_public_holidays(
.get_holidays_list(
start_dt=start_dt.date(),
end_dt=end_dt.date(),
employee_id=self.env.context.get("employee_id", False),
partner_id=self.env.context.get("partner_id", False),
)
.mapped("date")
)
Expand Down
3 changes: 2 additions & 1 deletion hr_holidays_public/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@
- Iván Todorovich \<<[email protected]>\>
- [Pesol](https://www.pesol.es):
- Pedro Evaristo Gonzalez Sanchez \<<[email protected]>\>
- [Trobz](https://trobz.com):
- [Trobz](https://trobz.com):
- Thao Le \<<[email protected]>\>
- Do Anh Duy \<<[email protected]>\>
1 change: 1 addition & 0 deletions hr_holidays_public/readme/CREDITS.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
The migration of this module from 16.0 to 17.0 was financially supported by Camptocamp.
The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.
10 changes: 6 additions & 4 deletions hr_holidays_public/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ <h1 class="title">HR Holidays Public</h1>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:9e48583a15773c28f7337bac2983bbe2febc5b6775d3f410139232f20056ec56
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/hr-holidays/tree/17.0/hr_holidays_public"><img alt="OCA/hr-holidays" src="https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/hr-holidays-17-0/hr-holidays-17-0-hr_holidays_public"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/hr-holidays/tree/18.0/hr_holidays_public"><img alt="OCA/hr-holidays" src="https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/hr-holidays-18-0/hr-holidays-18-0-hr_holidays_public"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module handles public holidays.</p>
<p>The calculation of each leave can exclude rest public holiday, depending
on the leave type configuration.</p>
Expand Down Expand Up @@ -449,7 +449,7 @@ <h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/hr-holidays/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/hr-holidays/issues/new?body=module:%20hr_holidays_public%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/hr-holidays/issues/new?body=module:%20hr_holidays_public%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
Expand Down Expand Up @@ -497,14 +497,16 @@ <h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
</li>
<li><a class="reference external" href="https://trobz.com">Trobz</a>:<ul>
<li>Thao Le &lt;<a class="reference external" href="mailto:thaolt&#64;trobz.com">thaolt&#64;trobz.com</a>&gt;</li>
<li>Do Anh Duy &lt;<a class="reference external" href="mailto:duyda&#64;trobz.com">duyda&#64;trobz.com</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-8">Other credits</a></h2>
<p>The migration of this module from 16.0 to 17.0 was financially supported
by Camptocamp.</p>
by Camptocamp. The migration of this module from 17.0 to 18.0 was
financially supported by Camptocamp.</p>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
Expand All @@ -515,7 +517,7 @@ <h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr-holidays/tree/17.0/hr_holidays_public">OCA/hr-holidays</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/hr-holidays/tree/18.0/hr_holidays_public">OCA/hr-holidays</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
Expand Down
30 changes: 18 additions & 12 deletions hr_holidays_public/tests/test_holidays_calculation.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,68 +116,75 @@ def setUpClass(cls):

class TestHolidaysComputeDays(TestHolidaysComputeDaysBase):
def test_number_days_excluding_employee_1(self):
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(
partner_id=self.employee_1.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1946-12-29 23:59:59", # Sunday
"holiday_status_id": self.holiday_type.id,
"employee_id": self.employee_1.id,
}
)
leave_request._compute_duration()
self.assertEqual(leave_request.number_of_days, 4)

def _test_number_days_excluding_employee_2(self):
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(

Check warning on line 132 in hr_holidays_public/tests/test_holidays_calculation.py

View check run for this annotation

Codecov / codecov/patch

hr_holidays_public/tests/test_holidays_calculation.py#L132

Added line #L132 was not covered by tests
partner_id=self.employee_2.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1946-12-29 23:59:59", # Sunday
"holiday_status_id": self.holiday_type.id,
"employee_id": self.employee_2.id,
}
)
leave_request._compute_duration()
self.assertEqual(leave_request.number_of_days, 2)

Check warning on line 142 in hr_holidays_public/tests/test_holidays_calculation.py

View check run for this annotation

Codecov / codecov/patch

hr_holidays_public/tests/test_holidays_calculation.py#L142

Added line #L142 was not covered by tests

def test_number_days_not_excluding(self):
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(
partner_id=self.employee_1.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1946-12-29 23:59:59", # Sunday
"holiday_status_id": self.holiday_type_no_excludes.id,
"employee_id": self.employee_1.id,
}
)
leave_request._compute_duration()
self.assertEqual(leave_request.number_of_days, 5)

def test_number_days_across_year(self):
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(
partner_id=self.employee_1.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1947-01-03 23:59:59", # Friday
"holiday_status_id": self.holiday_type.id,
"employee_id": self.employee_1.id,
}
)
leave_request._compute_duration()
self.assertEqual(leave_request.number_of_days, 7)

def test_number_days_across_year_2(self):
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(
partner_id=self.employee_2.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1947-01-03 23:59:59", # Friday
"holiday_status_id": self.holiday_type.id,
"employee_id": self.employee_2.id,
}
)
leave_request._compute_duration()
self.assertEqual(leave_request.number_of_days, 5)

def test_number_of_hours_excluding_employee_2(self):
self.holiday_type.request_unit = "hour"
leave_request = self.HrLeave.new(
leave_request = self.HrLeave.with_context(
partner_id=self.employee_2.address_id.id
).new(
{
"date_from": "1946-12-23 00:00:00", # Monday
"date_to": "1946-12-29 23:59:59", # Sunday
Expand All @@ -187,4 +194,3 @@ def test_number_of_hours_excluding_employee_2(self):
)

self.assertEqual(leave_request.number_of_days, 2)
self.assertEqual(leave_request.number_of_hours_display, 16)
Loading

0 comments on commit 4c9c51b

Please sign in to comment.