diff --git a/README.md b/README.md
index 3bccd272a05..0c0b9cb1d49 100644
--- a/README.md
+++ b/README.md
@@ -23,10 +23,11 @@ addon | version | maintainers | summary
--- | --- | --- | ---
[hr_course](hr_course/) | 19.0.1.0.0 | | This module allows your to manage employee's training courses
[hr_department_code](hr_department_code/) | 19.0.1.0.0 | | HR department code
-[hr_employee_calendar_planning](hr_employee_calendar_planning/) | 19.0.1.0.0 |
| Employee Calendar Planning
+[hr_employee_calendar_planning](hr_employee_calendar_planning/) | 19.0.1.0.1 |
| Employee Calendar Planning
[hr_employee_firstname](hr_employee_firstname/) | 19.0.1.1.0 |
| Adds First Name to Employee
[hr_employee_language](hr_employee_language/) | 19.0.1.0.0 | | HR Employee Language
[hr_employee_medical_examination](hr_employee_medical_examination/) | 19.0.1.0.0 | | Adds information about employee's medical examinations
+[hr_employee_partner_external](hr_employee_partner_external/) | 19.0.1.0.0 | | Associate an external Partner to Employee
[hr_employee_relative](hr_employee_relative/) | 19.0.1.0.0 | | Allows storing information about employee's family
[hr_employee_second_lastname](hr_employee_second_lastname/) | 19.0.1.0.1 |
| Split Name in First Name, Father's Last Name and Mother's Last Name
diff --git a/hr_employee_calendar_planning/README.rst b/hr_employee_calendar_planning/README.rst
index 3cc5462d7df..cfa2bd3ff1c 100644
--- a/hr_employee_calendar_planning/README.rst
+++ b/hr_employee_calendar_planning/README.rst
@@ -11,7 +11,7 @@ Employee Calendar Planning
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:1082d12d1e47b5a43dd31900305008b9b8e51ff08b26f65cfaafd0a36ab843d6
+ !! source digest: sha256:fdc5a73ca61067d21c2ac3a260dc61c14ffb5536bf8316631944d25b13c567b1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/hr_employee_calendar_planning/__manifest__.py b/hr_employee_calendar_planning/__manifest__.py
index b5751e62bec..09c7e8effbc 100644
--- a/hr_employee_calendar_planning/__manifest__.py
+++ b/hr_employee_calendar_planning/__manifest__.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Employee Calendar Planning",
- "version": "19.0.1.0.0",
+ "version": "19.0.1.0.1",
"category": "Human Resources",
"website": "https://github.com/OCA/hr",
"author": "Tecnativa,Odoo Community Association (OCA)",
diff --git a/hr_employee_calendar_planning/static/description/index.html b/hr_employee_calendar_planning/static/description/index.html
index de36632db82..0be99067dff 100644
--- a/hr_employee_calendar_planning/static/description/index.html
+++ b/hr_employee_calendar_planning/static/description/index.html
@@ -372,7 +372,7 @@
Employee Calendar Planning
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:1082d12d1e47b5a43dd31900305008b9b8e51ff08b26f65cfaafd0a36ab843d6
+!! source digest: sha256:fdc5a73ca61067d21c2ac3a260dc61c14ffb5536bf8316631944d25b13c567b1
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

This module allows to manage employee working time with profiles by date
diff --git a/hr_employee_calendar_planning/tests/test_hr_employee_calendar_planning.py b/hr_employee_calendar_planning/tests/test_hr_employee_calendar_planning.py
index d9ab2613b51..b864978b727 100644
--- a/hr_employee_calendar_planning/tests/test_hr_employee_calendar_planning.py
+++ b/hr_employee_calendar_planning/tests/test_hr_employee_calendar_planning.py
@@ -5,6 +5,7 @@
import unittest
from dateutil.relativedelta import relativedelta
+from freezegun import freeze_time
from psycopg2 import IntegrityError
from odoo import exceptions, fields
@@ -513,6 +514,7 @@ def test_write_planning_dates(self):
planning_line.write({"calendar_id": self.calendar1.id})
self.assertEqual(len(self.employee.resource_calendar_id.attendance_ids), 10)
+ @freeze_time("2026-05-18")
def test_get_work_days_data_batch_with_planning(self):
today_dt = fields.Datetime.now()
start_dt = today_dt.replace(hour=0, minute=0, second=0)
diff --git a/hr_employee_partner_external/README.rst b/hr_employee_partner_external/README.rst
new file mode 100644
index 00000000000..c129ce81234
--- /dev/null
+++ b/hr_employee_partner_external/README.rst
@@ -0,0 +1,108 @@
+.. image:: https://odoo-community.org/readme-banner-image
+ :target: https://odoo-community.org/get-involved?utm_source=readme
+ :alt: Odoo Community Association
+
+=========================
+Employee external Partner
+=========================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:d373c89b3f7abc2e9b72328a0cff2adc6127a9fd2fca07ff3ccdfed3bfff6f2c
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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/license-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-lightgray.png?logo=github
+ :target: https://github.com/OCA/hr/tree/19.0/hr_employee_partner_external
+ :alt: OCA/hr
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/hr-19-0/hr-19-0-hr_employee_partner_external
+ :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&target_branch=19.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Add the following fields to employee
+
+- is_external
+- hr_external_partner_id
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Associates a Partner to an Employee to indicate that this Employee is
+administrated by the Partner but works in the Company.
+
+This Employee can be a real person or a "virtual" one: on second case is
+the Partner that defines the "real" person who works when requested.
+
+On Employees select an Employee and check option that he is an external,
+then associate the Partner.
+
+Changelog
+=========
+
+12.0.1.0.0 (2020-06-01)
+-----------------------
+
+- [INI] Initial development
+
+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
+-------
+
+* Stefano Consolaro Associazione PNLUG - Gruppo Odoo
+
+Contributors
+------------
+
+- Stefano Consolaro
+- `APSL-Nagarro `__:
+
+ - Bernat Obrador
+
+- ``Heliconia Solutions Pvt. Ltd. ``\ \_
+
+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 `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/hr_employee_partner_external/__init__.py b/hr_employee_partner_external/__init__.py
new file mode 100644
index 00000000000..0650744f6bc
--- /dev/null
+++ b/hr_employee_partner_external/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/hr_employee_partner_external/__manifest__.py b/hr_employee_partner_external/__manifest__.py
new file mode 100644
index 00000000000..b55daa8cd7d
--- /dev/null
+++ b/hr_employee_partner_external/__manifest__.py
@@ -0,0 +1,15 @@
+# Copyright 2020 Stefano Consolaro (Ass. PNLUG - Gruppo Odoo )
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+{
+ "name": "Employee external Partner",
+ "summary": "Associate an external Partner to Employee",
+ "version": "19.0.1.0.0",
+ "category": "Human Resources",
+ "author": "Stefano Consolaro Associazione PNLUG - Gruppo Odoo, "
+ "Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/hr",
+ "license": "AGPL-3",
+ "depends": ["hr"],
+ "data": ["views/hr_employee.xml"],
+}
diff --git a/hr_employee_partner_external/i18n/es.po b/hr_employee_partner_external/i18n/es.po
new file mode 100644
index 00000000000..0439be7eeff
--- /dev/null
+++ b/hr_employee_partner_external/i18n/es.po
@@ -0,0 +1,37 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_employee_partner_external
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2022-02-03 14:33+0000\n"
+"Last-Translator: Olga Marco Puértolas \n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: hr_employee_partner_external
+#: model:ir.model,name:hr_employee_partner_external.model_hr_employee
+msgid "Employee"
+msgstr "Empleado"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "External Partner"
+msgstr "Socio externo"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__is_external
+msgid "Is an external Employee"
+msgstr "Es un empleado externo"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,help:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "Partner that administrate Employee that works in the Company"
+msgstr "Socio que administra Empleado que trabaja en la Empresa"
diff --git a/hr_employee_partner_external/i18n/hr_employee_partner_external.pot b/hr_employee_partner_external/i18n/hr_employee_partner_external.pot
new file mode 100644
index 00000000000..d3f1d1cb6fb
--- /dev/null
+++ b/hr_employee_partner_external/i18n/hr_employee_partner_external.pot
@@ -0,0 +1,44 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_employee_partner_external
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 19.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_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: hr_employee_partner_external
+#: model:ir.model,name:hr_employee_partner_external.model_hr_employee
+msgid "Employee"
+msgstr ""
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "External Partner"
+msgstr ""
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__id
+msgid "ID"
+msgstr ""
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__is_external
+msgid "Is an external Employee"
+msgstr ""
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,help:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "Partner that administrate Employee that works in the Company"
+msgstr ""
diff --git a/hr_employee_partner_external/i18n/it.po b/hr_employee_partner_external/i18n/it.po
new file mode 100644
index 00000000000..bdfdaa168b2
--- /dev/null
+++ b/hr_employee_partner_external/i18n/it.po
@@ -0,0 +1,38 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * hr_employee_partner_external
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-06 18:47+0000\n"
+"PO-Revision-Date: 2020-06-06 20:50+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.3.1\n"
+
+#. module: hr_employee_partner_external
+#: model:ir.model,name:hr_employee_partner_external.model_hr_employee
+msgid "Employee"
+msgstr "Dipendente"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "External Partner"
+msgstr "Partner esterno"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,field_description:hr_employee_partner_external.field_hr_employee__is_external
+msgid "Is an external Employee"
+msgstr "È un dipendente esterno"
+
+#. module: hr_employee_partner_external
+#: model:ir.model.fields,help:hr_employee_partner_external.field_hr_employee__hr_external_partner_id
+msgid "Partner that administrate Employee that works in the Company"
+msgstr "Partner che amministra il dipendente che lavora in aizenda"
diff --git a/hr_employee_partner_external/models/__init__.py b/hr_employee_partner_external/models/__init__.py
new file mode 100644
index 00000000000..e11a62f98ca
--- /dev/null
+++ b/hr_employee_partner_external/models/__init__.py
@@ -0,0 +1 @@
+from . import hr_employee
diff --git a/hr_employee_partner_external/models/hr_employee.py b/hr_employee_partner_external/models/hr_employee.py
new file mode 100644
index 00000000000..02ca7d2d2a5
--- /dev/null
+++ b/hr_employee_partner_external/models/hr_employee.py
@@ -0,0 +1,26 @@
+# Copyright 2020 Stefano Consolaro (Ass. PNLUG - Gruppo Odoo )
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class EmployeePartner(models.Model):
+ """
+ Add administrative Partner reference to Employee
+ """
+
+ _inherit = "hr.employee"
+
+ # set employee as external
+ is_external = fields.Boolean(
+ "Is an external Employee",
+ default=False,
+ groups="hr.group_hr_user",
+ )
+ # Partner reference
+ hr_external_partner_id = fields.Many2one(
+ "res.partner",
+ "External Partner",
+ groups="hr.group_hr_user",
+ help="Partner that administrate Employee that works in the Company",
+ )
diff --git a/hr_employee_partner_external/pyproject.toml b/hr_employee_partner_external/pyproject.toml
new file mode 100644
index 00000000000..4231d0cccb3
--- /dev/null
+++ b/hr_employee_partner_external/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/hr_employee_partner_external/readme/CONTRIBUTORS.md b/hr_employee_partner_external/readme/CONTRIBUTORS.md
new file mode 100644
index 00000000000..bc6ebd4d9a2
--- /dev/null
+++ b/hr_employee_partner_external/readme/CONTRIBUTORS.md
@@ -0,0 +1,4 @@
+- Stefano Consolaro \<\>
+- [APSL-Nagarro]():
+ - Bernat Obrador \<\>
+- `Heliconia Solutions Pvt. Ltd. `_
diff --git a/hr_employee_partner_external/readme/DESCRIPTION.md b/hr_employee_partner_external/readme/DESCRIPTION.md
new file mode 100644
index 00000000000..0ed7e68c8a5
--- /dev/null
+++ b/hr_employee_partner_external/readme/DESCRIPTION.md
@@ -0,0 +1,4 @@
+Add the following fields to employee
+
+- is_external
+- hr_external_partner_id
diff --git a/hr_employee_partner_external/readme/HISTORY.md b/hr_employee_partner_external/readme/HISTORY.md
new file mode 100644
index 00000000000..b89c2db9630
--- /dev/null
+++ b/hr_employee_partner_external/readme/HISTORY.md
@@ -0,0 +1,3 @@
+## 12.0.1.0.0 (2020-06-01)
+
+- \[INI\] Initial development
diff --git a/hr_employee_partner_external/readme/USAGE.md b/hr_employee_partner_external/readme/USAGE.md
new file mode 100644
index 00000000000..8d6280ad4ff
--- /dev/null
+++ b/hr_employee_partner_external/readme/USAGE.md
@@ -0,0 +1,8 @@
+Associates a Partner to an Employee to indicate that this Employee is
+administrated by the Partner but works in the Company.
+
+This Employee can be a real person or a "virtual" one: on second case is
+the Partner that defines the "real" person who works when requested.
+
+On Employees select an Employee and check option that he is an external,
+then associate the Partner.
diff --git a/hr_employee_partner_external/static/description/icon.png b/hr_employee_partner_external/static/description/icon.png
new file mode 100644
index 00000000000..3a0328b516c
Binary files /dev/null and b/hr_employee_partner_external/static/description/icon.png differ
diff --git a/hr_employee_partner_external/static/description/index.html b/hr_employee_partner_external/static/description/index.html
new file mode 100644
index 00000000000..33f94e0f084
--- /dev/null
+++ b/hr_employee_partner_external/static/description/index.html
@@ -0,0 +1,461 @@
+
+
+
+
+
+README.rst
+
+
+
+
+
+
+
+
+
+
+
Employee external Partner
+
+

+
Add the following fields to employee
+
+- is_external
+- hr_external_partner_id
+
+
Table of contents
+
+
+
+
Associates a Partner to an Employee to indicate that this Employee is
+administrated by the Partner but works in the Company.
+
This Employee can be a real person or a “virtual” one: on second case is
+the Partner that defines the “real” person who works when requested.
+
On Employees select an Employee and check option that he is an external,
+then associate the Partner.
+
+
+
+
+
+
+- [INI] Initial development
+
+
+
+
+
+
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.
+
+
+
+
+
+
+- Stefano Consolaro Associazione PNLUG - Gruppo Odoo
+
+
+
+
+
+
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 project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
+
diff --git a/hr_employee_partner_external/views/hr_employee.xml b/hr_employee_partner_external/views/hr_employee.xml
new file mode 100644
index 00000000000..427555f8e57
--- /dev/null
+++ b/hr_employee_partner_external/views/hr_employee.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+ hr.employee
+ hr.employee
+
+
+
+
+
+
+
+
+
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml
index f554550bf5a..c15311735dc 100644
--- a/setup/_metapackage/pyproject.toml
+++ b/setup/_metapackage/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "odoo-addons-oca-hr"
-version = "19.0.20260501.0"
+version = "19.0.20260518.0"
dependencies = [
"odoo-addon-hr_course==19.0.*",
"odoo-addon-hr_department_code==19.0.*",
@@ -8,6 +8,7 @@ dependencies = [
"odoo-addon-hr_employee_firstname==19.0.*",
"odoo-addon-hr_employee_language==19.0.*",
"odoo-addon-hr_employee_medical_examination==19.0.*",
+ "odoo-addon-hr_employee_partner_external==19.0.*",
"odoo-addon-hr_employee_relative==19.0.*",
"odoo-addon-hr_employee_second_lastname==19.0.*",
]