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 Oct 14, 2024
1 parent 67036b0 commit 061cd2f
Show file tree
Hide file tree
Showing 14 changed files with 65 additions and 95 deletions.
13 changes: 7 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,11 +154,12 @@ 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
The migration of this module from 17.0 to 18.0 was financially supported
by Camptocamp.

Maintainers
Expand All @@ -174,6 +175,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
43 changes: 9 additions & 34 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._get_partner(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._get_partner(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._get_partner(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,25 +119,8 @@ 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
def _get_partner(self, partner_id):
return self.env["res.partner"].browse(partner_id)


class HrHolidaysPublicLine(models.Model):
Expand Down
22 changes: 2 additions & 20 deletions hr_holidays_public/models/hr_leave.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,35 +26,17 @@ def action_validate(self):
super(HrLeave, leave).action_validate()
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]>\>
2 changes: 1 addition & 1 deletion hr_holidays_public/readme/CREDITS.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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.
9 changes: 5 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,13 +497,14 @@ <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
<p>The migration of this module from 17.0 to 18.0 was financially supported
by Camptocamp.</p>
</div>
<div class="section" id="maintainers">
Expand All @@ -515,7 +516,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 061cd2f

Please sign in to comment.