From 495e67c134fa662858dcd36098bc3b9f5b85f50c Mon Sep 17 00:00:00 2001
From: Enric Tobella
Date: Fri, 3 Mar 2023 10:11:30 +0100
Subject: [PATCH 1/5] [ADD] hr_holidays_auto_extend
---
hr_holidays_auto_extend/README.rst | 9 ++
hr_holidays_auto_extend/__init__.py | 1 +
hr_holidays_auto_extend/__manifest__.py | 22 +++++
hr_holidays_auto_extend/data/cron.xml | 13 +++
hr_holidays_auto_extend/data/mail.xml | 13 +++
hr_holidays_auto_extend/models/__init__.py | 2 +
hr_holidays_auto_extend/models/hr_leave.py | 78 +++++++++++++++
.../models/hr_leave_type.py | 11 +++
.../readme/CONTRIBUTORS.rst | 2 +
.../readme/DESCRIPTION.rst | 3 +
hr_holidays_auto_extend/readme/USAGE.rst | 4 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
hr_holidays_auto_extend/tests/__init__.py | 1 +
hr_holidays_auto_extend/tests/test_extend.py | 89 ++++++++++++++++++
hr_holidays_auto_extend/views/hr_leave.xml | 30 ++++++
.../views/hr_leave_type.xml | 23 +++++
16 files changed, 301 insertions(+)
create mode 100644 hr_holidays_auto_extend/README.rst
create mode 100644 hr_holidays_auto_extend/__init__.py
create mode 100644 hr_holidays_auto_extend/__manifest__.py
create mode 100644 hr_holidays_auto_extend/data/cron.xml
create mode 100644 hr_holidays_auto_extend/data/mail.xml
create mode 100644 hr_holidays_auto_extend/models/__init__.py
create mode 100644 hr_holidays_auto_extend/models/hr_leave.py
create mode 100644 hr_holidays_auto_extend/models/hr_leave_type.py
create mode 100644 hr_holidays_auto_extend/readme/CONTRIBUTORS.rst
create mode 100644 hr_holidays_auto_extend/readme/DESCRIPTION.rst
create mode 100644 hr_holidays_auto_extend/readme/USAGE.rst
create mode 100644 hr_holidays_auto_extend/static/description/icon.png
create mode 100644 hr_holidays_auto_extend/tests/__init__.py
create mode 100644 hr_holidays_auto_extend/tests/test_extend.py
create mode 100644 hr_holidays_auto_extend/views/hr_leave.xml
create mode 100644 hr_holidays_auto_extend/views/hr_leave_type.xml
diff --git a/hr_holidays_auto_extend/README.rst b/hr_holidays_auto_extend/README.rst
new file mode 100644
index 00000000..f8dd328c
--- /dev/null
+++ b/hr_holidays_auto_extend/README.rst
@@ -0,0 +1,9 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+=======================
+Hr Holidays Auto Extend
+=======================
+
+Allow to extend some kind of holidays
diff --git a/hr_holidays_auto_extend/__init__.py b/hr_holidays_auto_extend/__init__.py
new file mode 100644
index 00000000..0650744f
--- /dev/null
+++ b/hr_holidays_auto_extend/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/hr_holidays_auto_extend/__manifest__.py b/hr_holidays_auto_extend/__manifest__.py
new file mode 100644
index 00000000..7c26d32d
--- /dev/null
+++ b/hr_holidays_auto_extend/__manifest__.py
@@ -0,0 +1,22 @@
+# Copyright 2023 CreuBlanca
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Hr Holidays Auto Extend",
+ "summary": """
+ Allow to extend some kind of holidays""",
+ "version": "14.0.1.0.0",
+ "license": "AGPL-3",
+ "author": "CreuBlanca,Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/hr-holidays",
+ "depends": [
+ "hr_holidays",
+ ],
+ "data": [
+ "views/hr_leave.xml",
+ "views/hr_leave_type.xml",
+ "data/cron.xml",
+ "data/mail.xml",
+ ],
+ "demo": [],
+}
diff --git a/hr_holidays_auto_extend/data/cron.xml b/hr_holidays_auto_extend/data/cron.xml
new file mode 100644
index 00000000..42a4e3f9
--- /dev/null
+++ b/hr_holidays_auto_extend/data/cron.xml
@@ -0,0 +1,13 @@
+
+
+
+ Holidays: Auto extend
+
+ 1
+ days
+ -1
+
+ code
+ model._cron_auto_extend()
+
+
diff --git a/hr_holidays_auto_extend/data/mail.xml b/hr_holidays_auto_extend/data/mail.xml
new file mode 100644
index 00000000..e4ebee91
--- /dev/null
+++ b/hr_holidays_auto_extend/data/mail.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Leave cannot be extended due to overlapping
+ note
+ default
+
+ fa-tasks
+ 0
+
+
+
diff --git a/hr_holidays_auto_extend/models/__init__.py b/hr_holidays_auto_extend/models/__init__.py
new file mode 100644
index 00000000..7c444ff5
--- /dev/null
+++ b/hr_holidays_auto_extend/models/__init__.py
@@ -0,0 +1,2 @@
+from . import hr_leave_type
+from . import hr_leave
diff --git a/hr_holidays_auto_extend/models/hr_leave.py b/hr_holidays_auto_extend/models/hr_leave.py
new file mode 100644
index 00000000..6aa21bd9
--- /dev/null
+++ b/hr_holidays_auto_extend/models/hr_leave.py
@@ -0,0 +1,78 @@
+# Copyright 2023 CreuBlanca
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from datetime import timedelta
+
+from odoo import api, fields, models
+
+
+class HrLeave(models.Model):
+ _inherit = "hr.leave"
+
+ auto_extend_type = fields.Boolean(
+ related="holiday_status_id.auto_extend", string="Auto extend type"
+ )
+ auto_extend = fields.Boolean(
+ compute="_compute_auto_extend", store=True, readonly=False
+ )
+ auto_extend_period = fields.Integer(
+ compute="_compute_auto_extend", store=True, readonly=False
+ )
+
+ def _check_date_state(self):
+ if not self.env.context.get("__no_check_state_date"):
+ super()._check_date_state()
+
+ def _get_number_of_days(self, date_from, date_to, employee_id):
+ """Returns a float equals to the timedelta between two dates given as string.
+ We need to modify in order to add the compute_leaves = False
+ """
+ if not self.env.context.get("__no_check_state_date") or not employee_id:
+ return super()._get_number_of_days(date_from, date_to, employee_id)
+ employee = self.env["hr.employee"].browse(employee_id)
+ return employee._get_work_days_data_batch(
+ date_from, date_to, compute_leaves=False
+ )[employee.id]
+
+ @api.depends("holiday_status_id")
+ def _compute_auto_extend(self):
+ for record in self:
+ record.auto_extend = record.holiday_status_id.auto_extend
+ record.auto_extend_period = record.holiday_status_id.auto_extend_period
+
+ def _cron_auto_extend_domain(self):
+ return [
+ ("request_date_to", "<=", fields.Date.today()),
+ ("auto_extend", "=", True),
+ ("auto_extend_period", ">", 0),
+ ("state", "=", "validate"),
+ ]
+
+ def _cron_auto_extend(self):
+ leaves = self.search(self._cron_auto_extend_domain())
+ for leave in leaves.with_context(__no_check_state_date=True):
+ request_date_to = leave.request_date_to + timedelta(
+ days=leave.auto_extend_period
+ )
+ domain = [
+ ("date_from", "<", request_date_to),
+ ("date_from", ">", leave.date_from),
+ ("employee_id", "=", leave.employee_id.id),
+ ("id", "!=", leave.id),
+ ("state", "not in", ["cancel", "refuse"]),
+ ]
+ if self.search(domain, limit=1):
+ leave.auto_extend = False
+ leave.activity_schedule(
+ "hr_holidays_auto_extend.mail_activity_error_auto_extend",
+ )
+ continue
+ vals = {"request_date_to": request_date_to}
+ vals.update(
+ leave.onchange(vals, ["request_date_to"], leave._onchange_spec())[
+ "value"
+ ]
+ )
+ leave.write(vals)
+ leave._remove_resource_leave()
+ leave._create_resource_leave()
diff --git a/hr_holidays_auto_extend/models/hr_leave_type.py b/hr_holidays_auto_extend/models/hr_leave_type.py
new file mode 100644
index 00000000..0fed4e25
--- /dev/null
+++ b/hr_holidays_auto_extend/models/hr_leave_type.py
@@ -0,0 +1,11 @@
+# Copyright 2023 CreuBlanca
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class HrLeaveType(models.Model):
+ _inherit = "hr.leave.type"
+
+ auto_extend = fields.Boolean()
+ auto_extend_period = fields.Integer(default=7)
diff --git a/hr_holidays_auto_extend/readme/CONTRIBUTORS.rst b/hr_holidays_auto_extend/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000..e084beee
--- /dev/null
+++ b/hr_holidays_auto_extend/readme/CONTRIBUTORS.rst
@@ -0,0 +1,2 @@
+* Enric Tobella
+*
diff --git a/hr_holidays_auto_extend/readme/DESCRIPTION.rst b/hr_holidays_auto_extend/readme/DESCRIPTION.rst
new file mode 100644
index 00000000..2d631369
--- /dev/null
+++ b/hr_holidays_auto_extend/readme/DESCRIPTION.rst
@@ -0,0 +1,3 @@
+With this module, we will be able to extend automatically a leave when the period is reached.
+
+This might be necessary for leaves without a clear return date for the employee.
diff --git a/hr_holidays_auto_extend/readme/USAGE.rst b/hr_holidays_auto_extend/readme/USAGE.rst
new file mode 100644
index 00000000..b4d00c1e
--- /dev/null
+++ b/hr_holidays_auto_extend/readme/USAGE.rst
@@ -0,0 +1,4 @@
+* Access leave types and mark it as "Auto extendable"
+* When the manager approves the leave, the "Auto extendable" check will be marked
+* When we decide that the leave is no longer extendable, we can uncheck it.
+*
diff --git a/hr_holidays_auto_extend/static/description/icon.png b/hr_holidays_auto_extend/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/hr_holidays_auto_extend/tests/__init__.py b/hr_holidays_auto_extend/tests/__init__.py
new file mode 100644
index 00000000..18ea4c09
--- /dev/null
+++ b/hr_holidays_auto_extend/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_extend
diff --git a/hr_holidays_auto_extend/tests/test_extend.py b/hr_holidays_auto_extend/tests/test_extend.py
new file mode 100644
index 00000000..4562c343
--- /dev/null
+++ b/hr_holidays_auto_extend/tests/test_extend.py
@@ -0,0 +1,89 @@
+# Copyright 2023 CreuBlanca
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from datetime import timedelta
+
+from odoo import fields
+from odoo.tests.common import Form
+
+from odoo.addons.hr_holidays.tests.common import TestHrHolidaysCommon
+
+
+class TestExtend(TestHrHolidaysCommon):
+ def test_time_type(self):
+ leave_type = self.env["hr.leave.type"].create(
+ {
+ "name": "Paid Time Off",
+ "time_type": "leave",
+ "auto_extend": True,
+ "allocation_type": "no",
+ "validity_start": False,
+ }
+ )
+ date_to = fields.Date.today() - timedelta(days=2)
+ f = Form(self.env["hr.leave"])
+ f.name = "Doctor Appointment"
+ f.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
+ f.holiday_status_id = leave_type
+ f.request_date_from = fields.Date.today() - timedelta(days=5)
+ f.request_date_to = date_to
+ leave_1 = f.save()
+ self.assertEqual(leave_1.request_date_to, date_to)
+ self.env["hr.leave"]._cron_auto_extend()
+ self.assertEqual(leave_1.request_date_to, date_to)
+ leave_1.action_approve()
+ self.assertEqual(leave_1.request_date_to, date_to)
+ self.assertEqual(
+ self.env["resource.calendar.leaves"]
+ .search([("holiday_id", "=", leave_1.id)])
+ .time_type,
+ "leave",
+ )
+ self.env["hr.leave"]._cron_auto_extend()
+ self.assertEqual(leave_1.request_date_to, date_to + timedelta(days=7))
+
+ def test_extend_overlap(self):
+ leave_type = self.env["hr.leave.type"].create(
+ {
+ "name": "Paid Time Off",
+ "time_type": "leave",
+ "auto_extend": True,
+ "allocation_type": "no",
+ "validity_start": False,
+ }
+ )
+ leave_type_02 = self.env["hr.leave.type"].create(
+ {
+ "name": "Another leave type",
+ "time_type": "leave",
+ "allocation_type": "no",
+ "validity_start": False,
+ }
+ )
+ date_to = fields.Date.today() - timedelta(days=2)
+ f = Form(self.env["hr.leave"])
+ f.name = "Doctor Appointment"
+ f.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
+ f.holiday_status_id = leave_type
+ f.request_date_from = fields.Date.today() - timedelta(days=5)
+ f.request_date_to = date_to
+ leave_1 = f.save()
+
+ f2 = Form(self.env["hr.leave"])
+ f2.name = "Doctor Appointment"
+ f2.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
+ f2.holiday_status_id = leave_type_02
+ f2.request_date_from = fields.Date.today() - timedelta(days=1)
+ f2.request_date_to = fields.Date.today()
+ leave_2 = f2.save()
+ self.assertTrue(leave_1.auto_extend)
+ self.assertFalse(leave_2.auto_extend)
+ leave_1.action_approve()
+ leave_2.action_approve()
+ self.assertTrue(leave_1.auto_extend)
+ self.assertFalse(leave_1.activity_ids)
+ self.env["hr.leave"]._cron_auto_extend()
+ leave_1.flush()
+ leave_1.refresh()
+ self.assertFalse(leave_1.auto_extend)
+ self.assertTrue(leave_1.activity_ids)
diff --git a/hr_holidays_auto_extend/views/hr_leave.xml b/hr_holidays_auto_extend/views/hr_leave.xml
new file mode 100644
index 00000000..01eb3068
--- /dev/null
+++ b/hr_holidays_auto_extend/views/hr_leave.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ hr.leave.form (in hr_holidays_auto_extend)
+ hr.leave
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hr_holidays_auto_extend/views/hr_leave_type.xml b/hr_holidays_auto_extend/views/hr_leave_type.xml
new file mode 100644
index 00000000..7debdce2
--- /dev/null
+++ b/hr_holidays_auto_extend/views/hr_leave_type.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ hr.leave.type.form (in hr_holidays_auto_extend)
+ hr.leave.type
+
+
+
+
+
+
+
+
+
+
+
+
From f2ec5af731167a3339c63f1f3c13f2ad08e741d7 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Mon, 8 Jul 2024 07:57:21 +0000
Subject: [PATCH 2/5] [UPD] Update hr_holidays_auto_extend.pot
---
.../i18n/hr_holidays_auto_extend.pot | 76 +++++++++++++++++++
1 file changed, 76 insertions(+)
create mode 100644 hr_holidays_auto_extend/i18n/hr_holidays_auto_extend.pot
diff --git a/hr_holidays_auto_extend/i18n/hr_holidays_auto_extend.pot b/hr_holidays_auto_extend/i18n/hr_holidays_auto_extend.pot
new file mode 100644
index 00000000..84b63aba
--- /dev/null
+++ b/hr_holidays_auto_extend/i18n/hr_holidays_auto_extend.pot
@@ -0,0 +1,76 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_holidays_auto_extend
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave__auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave_type__auto_extend
+msgid "Auto Extend"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave__auto_extend_period
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave_type__auto_extend_period
+msgid "Auto Extend Period"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave__auto_extend_type
+msgid "Auto extend type"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave__display_name
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave_type__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.actions.server,name:hr_holidays_auto_extend.auto_extend_cron_ir_actions_server
+#: model:ir.cron,cron_name:hr_holidays_auto_extend.auto_extend_cron
+#: model:ir.cron,name:hr_holidays_auto_extend.auto_extend_cron
+msgid "Holidays: Auto extend"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave__id
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave_type__id
+msgid "ID"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave____last_update
+#: model:ir.model.fields,field_description:hr_holidays_auto_extend.field_hr_leave_type____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:mail.activity.type,name:hr_holidays_auto_extend.mail_activity_error_auto_extend
+msgid "Leave cannot be extended due to overlapping"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model,name:hr_holidays_auto_extend.model_hr_leave
+msgid "Time Off"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:ir.model,name:hr_holidays_auto_extend.model_hr_leave_type
+msgid "Time Off Type"
+msgstr ""
+
+#. module: hr_holidays_auto_extend
+#: model:mail.activity.type,summary:hr_holidays_auto_extend.mail_activity_error_auto_extend
+msgid "note"
+msgstr ""
From 3b3274f93c1646144c63dd6b318904cdfc3b1978 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Mon, 8 Jul 2024 07:59:29 +0000
Subject: [PATCH 3/5] [BOT] post-merge updates
---
hr_holidays_auto_extend/README.rst | 88 +++-
.../static/description/index.html | 435 ++++++++++++++++++
2 files changed, 518 insertions(+), 5 deletions(-)
create mode 100644 hr_holidays_auto_extend/static/description/index.html
diff --git a/hr_holidays_auto_extend/README.rst b/hr_holidays_auto_extend/README.rst
index f8dd328c..5a702c54 100644
--- a/hr_holidays_auto_extend/README.rst
+++ b/hr_holidays_auto_extend/README.rst
@@ -1,9 +1,87 @@
-.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
- :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
- :alt: License: AGPL-3
-
=======================
Hr Holidays Auto Extend
=======================
-Allow to extend some kind of holidays
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:00afe160865b13f5c2f5f4032e011cd1bb43e32a86dfbe8c57308679759017b8
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :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/14.0/hr_holidays_auto_extend
+ :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-14-0/hr-holidays-14-0-hr_holidays_auto_extend
+ :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=14.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+With this module, we will be able to extend automatically a leave when the period is reached.
+
+This might be necessary for leaves without a clear return date for the employee.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+* Access leave types and mark it as "Auto extendable"
+* When the manager approves the leave, the "Auto extendable" check will be marked
+* When we decide that the leave is no longer extendable, we can uncheck it.
+*
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub 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 `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* CreuBlanca
+
+Contributors
+~~~~~~~~~~~~
+
+* Enric Tobella
+*
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+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 `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_holidays_auto_extend/static/description/index.html b/hr_holidays_auto_extend/static/description/index.html
new file mode 100644
index 00000000..38a8d1ee
--- /dev/null
+++ b/hr_holidays_auto_extend/static/description/index.html
@@ -0,0 +1,435 @@
+
+
+
+
+
+Hr Holidays Auto Extend
+
+
+
+
+
Hr Holidays Auto Extend
+
+
+
+
With this module, we will be able to extend automatically a leave when the period is reached.
+
This might be necessary for leaves without a clear return date for the employee.
+
Table of contents
+
+
+
+
+- Access leave types and mark it as “Auto extendable”
+- When the manager approves the leave, the “Auto extendable” check will be marked
+- When we decide that the leave is no longer extendable, we can uncheck it.
+
+
+
+
+
+
Bugs are tracked on GitHub 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.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
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 project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
From 34195863054db6333950931bbfa1397d30330a59 Mon Sep 17 00:00:00 2001
From: Luis Rodriguez
Date: Fri, 19 Jul 2024 10:38:37 +0200
Subject: [PATCH 4/5] [IMP] hr_holidays_auto_extend: pre-commit auto fixes
---
hr_holidays_auto_extend/data/mail.xml | 20 +++++++++----------
hr_holidays_auto_extend/models/hr_leave.py | 1 +
.../odoo/addons/hr_holidays_auto_extend | 1 +
setup/hr_holidays_auto_extend/setup.py | 6 ++++++
4 files changed, 17 insertions(+), 11 deletions(-)
create mode 120000 setup/hr_holidays_auto_extend/odoo/addons/hr_holidays_auto_extend
create mode 100644 setup/hr_holidays_auto_extend/setup.py
diff --git a/hr_holidays_auto_extend/data/mail.xml b/hr_holidays_auto_extend/data/mail.xml
index e4ebee91..808a5a24 100644
--- a/hr_holidays_auto_extend/data/mail.xml
+++ b/hr_holidays_auto_extend/data/mail.xml
@@ -1,13 +1,11 @@
-
-
-
- Leave cannot be extended due to overlapping
- note
- default
-
- fa-tasks
- 0
-
-
+
+
+ Leave cannot be extended due to overlapping
+ note
+ default
+
+ fa-tasks
+ 0
+
diff --git a/hr_holidays_auto_extend/models/hr_leave.py b/hr_holidays_auto_extend/models/hr_leave.py
index 6aa21bd9..d95fcc47 100644
--- a/hr_holidays_auto_extend/models/hr_leave.py
+++ b/hr_holidays_auto_extend/models/hr_leave.py
@@ -22,6 +22,7 @@ class HrLeave(models.Model):
def _check_date_state(self):
if not self.env.context.get("__no_check_state_date"):
super()._check_date_state()
+ return
def _get_number_of_days(self, date_from, date_to, employee_id):
"""Returns a float equals to the timedelta between two dates given as string.
diff --git a/setup/hr_holidays_auto_extend/odoo/addons/hr_holidays_auto_extend b/setup/hr_holidays_auto_extend/odoo/addons/hr_holidays_auto_extend
new file mode 120000
index 00000000..b8c1a9c0
--- /dev/null
+++ b/setup/hr_holidays_auto_extend/odoo/addons/hr_holidays_auto_extend
@@ -0,0 +1 @@
+../../../../hr_holidays_auto_extend
\ No newline at end of file
diff --git a/setup/hr_holidays_auto_extend/setup.py b/setup/hr_holidays_auto_extend/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/hr_holidays_auto_extend/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From d548adf295ff5f88abb91278d3880726633383d7 Mon Sep 17 00:00:00 2001
From: Luis Rodriguez
Date: Fri, 2 Aug 2024 09:15:36 +0200
Subject: [PATCH 5/5] [MIG] hr_holidays_auto_extend: Migration to 16.0
---
hr_holidays_auto_extend/README.rst | 10 +--
hr_holidays_auto_extend/__manifest__.py | 2 +-
hr_holidays_auto_extend/data/mail.xml | 2 +-
.../static/description/index.html | 17 +++--
hr_holidays_auto_extend/tests/test_extend.py | 63 ++++++++++++++-----
5 files changed, 63 insertions(+), 31 deletions(-)
diff --git a/hr_holidays_auto_extend/README.rst b/hr_holidays_auto_extend/README.rst
index 5a702c54..54233549 100644
--- a/hr_holidays_auto_extend/README.rst
+++ b/hr_holidays_auto_extend/README.rst
@@ -17,13 +17,13 @@ Hr Holidays Auto Extend
: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/14.0/hr_holidays_auto_extend
+ :target: https://github.com/OCA/hr-holidays/tree/16.0/hr_holidays_auto_extend
: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-14-0/hr-holidays-14-0-hr_holidays_auto_extend
+ :target: https://translation.odoo-community.org/projects/hr-holidays-16-0/hr-holidays-16-0-hr_holidays_auto_extend
: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=14.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -51,7 +51,7 @@ Bug Tracker
Bugs are tracked on `GitHub 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -82,6 +82,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 `_ project on GitHub.
+This module is part of the `OCA/hr-holidays `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_holidays_auto_extend/__manifest__.py b/hr_holidays_auto_extend/__manifest__.py
index 7c26d32d..f460ac5a 100644
--- a/hr_holidays_auto_extend/__manifest__.py
+++ b/hr_holidays_auto_extend/__manifest__.py
@@ -5,7 +5,7 @@
"name": "Hr Holidays Auto Extend",
"summary": """
Allow to extend some kind of holidays""",
- "version": "14.0.1.0.0",
+ "version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "CreuBlanca,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/hr-holidays",
diff --git a/hr_holidays_auto_extend/data/mail.xml b/hr_holidays_auto_extend/data/mail.xml
index 808a5a24..a09ef47f 100644
--- a/hr_holidays_auto_extend/data/mail.xml
+++ b/hr_holidays_auto_extend/data/mail.xml
@@ -4,7 +4,7 @@
Leave cannot be extended due to overlapping
note
default
-
+ hr.leave
fa-tasks
0
diff --git a/hr_holidays_auto_extend/static/description/index.html b/hr_holidays_auto_extend/static/description/index.html
index 38a8d1ee..7cfcdae2 100644
--- a/hr_holidays_auto_extend/static/description/index.html
+++ b/hr_holidays_auto_extend/static/description/index.html
@@ -8,11 +8,10 @@
/*
:Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
-Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
@@ -275,7 +274,7 @@
margin-left: 2em ;
margin-right: 2em }
-pre.code .ln { color: gray; } /* line numbers */
+pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +300,7 @@
span.pre {
white-space: pre }
-span.problematic, pre.problematic {
+span.problematic {
color: red }
span.section-subtitle {
@@ -369,7 +368,7 @@ Hr Holidays Auto Extend
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:00afe160865b13f5c2f5f4032e011cd1bb43e32a86dfbe8c57308679759017b8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
With this module, we will be able to extend automatically a leave when the period is reached.
This might be necessary for leaves without a clear return date for the employee.
Table of contents
@@ -399,7 +398,7 @@
Bugs are tracked on GitHub 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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -420,13 +419,11 @@
This module is maintained by the OCA.
-
-
-
+
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 project on GitHub.
+
This module is part of the OCA/hr-holidays project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_holidays_auto_extend/tests/test_extend.py b/hr_holidays_auto_extend/tests/test_extend.py
index 4562c343..b80b0548 100644
--- a/hr_holidays_auto_extend/tests/test_extend.py
+++ b/hr_holidays_auto_extend/tests/test_extend.py
@@ -16,14 +16,17 @@ def test_time_type(self):
"name": "Paid Time Off",
"time_type": "leave",
"auto_extend": True,
- "allocation_type": "no",
- "validity_start": False,
}
)
date_to = fields.Date.today() - timedelta(days=2)
- f = Form(self.env["hr.leave"])
+ f = Form(
+ self.env["hr.leave"].with_context(
+ default_employee_id=self.env["hr.employee"]
+ .browse(self.employee_hruser_id)
+ .id
+ )
+ )
f.name = "Doctor Appointment"
- f.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
f.holiday_status_id = leave_type
f.request_date_from = fields.Date.today() - timedelta(days=5)
f.request_date_to = date_to
@@ -48,30 +51,36 @@ def test_extend_overlap(self):
"name": "Paid Time Off",
"time_type": "leave",
"auto_extend": True,
- "allocation_type": "no",
- "validity_start": False,
}
)
leave_type_02 = self.env["hr.leave.type"].create(
{
"name": "Another leave type",
"time_type": "leave",
- "allocation_type": "no",
- "validity_start": False,
}
)
date_to = fields.Date.today() - timedelta(days=2)
- f = Form(self.env["hr.leave"])
+ f = Form(
+ self.env["hr.leave"].with_context(
+ default_employee_id=self.env["hr.employee"]
+ .browse(self.employee_hruser_id)
+ .id
+ )
+ )
f.name = "Doctor Appointment"
- f.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
f.holiday_status_id = leave_type
f.request_date_from = fields.Date.today() - timedelta(days=5)
f.request_date_to = date_to
leave_1 = f.save()
- f2 = Form(self.env["hr.leave"])
+ f2 = Form(
+ self.env["hr.leave"].with_context(
+ default_employee_id=self.env["hr.employee"]
+ .browse(self.employee_hruser_id)
+ .id
+ )
+ )
f2.name = "Doctor Appointment"
- f2.employee_id = self.env["hr.employee"].browse(self.employee_hruser_id)
f2.holiday_status_id = leave_type_02
f2.request_date_from = fields.Date.today() - timedelta(days=1)
f2.request_date_to = fields.Date.today()
@@ -83,7 +92,33 @@ def test_extend_overlap(self):
self.assertTrue(leave_1.auto_extend)
self.assertFalse(leave_1.activity_ids)
self.env["hr.leave"]._cron_auto_extend()
- leave_1.flush()
- leave_1.refresh()
+ leave_1.flush_recordset()
+ leave_1.invalidate_recordset()
self.assertFalse(leave_1.auto_extend)
self.assertTrue(leave_1.activity_ids)
+
+ def test_check_date_state(self):
+ leave_type = self.env["hr.leave.type"].create(
+ {
+ "name": "Paid Time Off",
+ "time_type": "leave",
+ "auto_extend": True,
+ }
+ )
+ leave = (
+ self.env["hr.leave"]
+ .with_context(__no_check_state_date=True)
+ .create(
+ {
+ "name": "Doctor Appointment",
+ "employee_id": self.employee_hruser_id,
+ "holiday_status_id": leave_type.id,
+ "request_date_from": fields.Date.today() - timedelta(days=5),
+ "request_date_to": fields.Date.today() - timedelta(days=2),
+ }
+ )
+ )
+
+ res = leave._check_date_state()
+
+ self.assertEqual(res, None)