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

+ + +

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

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

+ +
+

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.

+ +Odoo Community Association + +

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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

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 @@

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.

@@ -420,13 +419,11 @@

Contributors

Maintainers

This module is maintained by the OCA.

- -Odoo Community Association - +Odoo Community Association

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)