From 10e492114e4be4ea26fe25cc312673de6be1ae8b Mon Sep 17 00:00:00 2001 From: arpi-odoo Date: Mon, 27 Oct 2025 15:41:17 +0100 Subject: [PATCH 1/8] [FIX] hr: new contract button invisible --- .../src/components/button_new_contract/button_new_contract.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/hr/static/src/components/button_new_contract/button_new_contract.xml b/addons/hr/static/src/components/button_new_contract/button_new_contract.xml index 8abdd473fe7e2..0c640d5b88d4c 100644 --- a/addons/hr/static/src/components/button_new_contract/button_new_contract.xml +++ b/addons/hr/static/src/components/button_new_contract/button_new_contract.xml @@ -3,7 +3,7 @@ + t-ref="datetime-picker-target-new-contract" t-if="props.record.resId">New Contract From a5b95c7e718298cbd582690633760c5b105fc108 Mon Sep 17 00:00:00 2001 From: arpi-odoo Date: Tue, 28 Oct 2025 10:12:15 +0100 Subject: [PATCH 2/8] [IMP] hr_skills: cleanup certification reporting --- ...hr_employee_certification_report_views.xml | 24 +++++++++++++++++++ .../report/hr_employee_skill_report_views.xml | 2 +- addons/hr_skills/views/hr_views.xml | 8 ++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/addons/hr_skills/report/hr_employee_certification_report_views.xml b/addons/hr_skills/report/hr_employee_certification_report_views.xml index 779796d0449fe..079ef1f790fd9 100644 --- a/addons/hr_skills/report/hr_employee_certification_report_views.xml +++ b/addons/hr_skills/report/hr_employee_certification_report_views.xml @@ -44,4 +44,28 @@ + + + Certification + hr.employee.certification.report + + list,pivot + { + 'search_default_employee': 1, + } + +

+

+ This report will give you an overview of the certification per Employee. + Create them in configuration and add them on the Employee. +

+
+
+ + diff --git a/addons/hr_skills/report/hr_employee_skill_report_views.xml b/addons/hr_skills/report/hr_employee_skill_report_views.xml index 86b997da5ffbb..bddca497eb6ef 100644 --- a/addons/hr_skills/report/hr_employee_skill_report_views.xml +++ b/addons/hr_skills/report/hr_employee_skill_report_views.xml @@ -89,6 +89,6 @@ id="hr_employee_skill_inventory_report_menu" name="Skills Inventory" action="hr_employee_skill_report_action" - parent="hr.hr_menu_hr_reports" + parent="hr_skills.hr_employee_skill_report_menu" sequence="15"/> diff --git a/addons/hr_skills/views/hr_views.xml b/addons/hr_skills/views/hr_views.xml index 0ba5ac8ad57b0..851cef498da2b 100644 --- a/addons/hr_skills/views/hr_views.xml +++ b/addons/hr_skills/views/hr_views.xml @@ -594,7 +594,7 @@ hr.employee.skill certifications [('is_certification', '=', True), ('company_id', 'in', allowed_company_ids)] - {'show_employee': True} + {'show_employee': True, 'search_default_group_by_type': 1} list,form + + Date: Wed, 29 Oct 2025 14:08:21 +0100 Subject: [PATCH 3/8] [FIX] hr_holidays: fix traceback leave type --- addons/hr_holidays/models/hr_leave_type.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/hr_holidays/models/hr_leave_type.py b/addons/hr_holidays/models/hr_leave_type.py index 98d7366163698..82be6cca94101 100644 --- a/addons/hr_holidays/models/hr_leave_type.py +++ b/addons/hr_holidays/models/hr_leave_type.py @@ -275,14 +275,14 @@ def _search_max_leaves(self, operator, value): return [('id', 'in', valid_leaves)] def _search_virtual_remaining_leaves(self, operator, value): - def is_valid(leave_type): - return not leave_type.requires_allocation or op(leave_type.virtual_remaining_leaves, value) op = PY_OPERATORS.get(operator) if not op: return NotImplemented if operator != 'in': value = float(value) leave_types = self.env['hr.leave.type'].search([]) + def is_valid(leave_type): + return not leave_type.requires_allocation or op(leave_type.virtual_remaining_leaves) return [('id', 'in', leave_types.filtered(is_valid).ids)] @api.depends_context('employee_id', 'default_employee_id', 'leave_date_from', 'default_date_from') From 1492c2752e1adb87dbe6234ed214ba8ecec14013 Mon Sep 17 00:00:00 2001 From: arpi-odoo Date: Wed, 29 Oct 2025 14:44:15 +0100 Subject: [PATCH 4/8] [FIX] hr: fix delete version --- addons/hr/models/hr_employee.py | 3 +-- addons/hr/tests/test_hr_version.py | 21 --------------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/addons/hr/models/hr_employee.py b/addons/hr/models/hr_employee.py index 3fe458d3ef033..9089893b94a3f 100644 --- a/addons/hr/models/hr_employee.py +++ b/addons/hr/models/hr_employee.py @@ -550,8 +550,7 @@ def _compute_legal_name(self): @api.depends('current_version_id') @api.depends_context('version_id') def _compute_version_id(self): - context_version_id = self.env.context.get('version_id', False) - context_version = self.env['hr.version'].browse(context_version_id).exists() if context_version_id else self.env['hr.version'] + context_version = self.env['hr.version'].browse(self.env.context.get('version_id', False)) for employee in self: if context_version.employee_id == self: diff --git a/addons/hr/tests/test_hr_version.py b/addons/hr/tests/test_hr_version.py index 5eaabad844043..656649f933c18 100644 --- a/addons/hr/tests/test_hr_version.py +++ b/addons/hr/tests/test_hr_version.py @@ -523,27 +523,6 @@ def test_multi_edit_other_and_contract_date_sync(self): self.assertEqual(version.job_id.id, jobB.id) self.assertEqual(version.contract_date_end, date(2020, 9, 30)) - def test_delete_version(self): - employee = self.env['hr.employee'].create({ - 'name': 'John Doe', - 'date_version': '2020-01-01', - }) - v1 = employee.version_id - v2 = employee.create_version({ - 'date_version': '2021-01-01', - }) - v3 = employee.create_version({ - 'date_version': '2022-01-01', - }) - self.assertEqual(employee.current_version_id, v3) - - v3.unlink() - self.assertEqual(employee.current_version_id, v2) - v1.unlink() - self.assertEqual(employee.current_version_id, v2) - with self.assertRaises(ValidationError): - v2.unlink() - def test_multi_edit_multi_employees_no_contract(self): """ Test the multi-edit when there is one version per employee, without contract From 7b6092901a24ee4e6377b095b94f89d403989f25 Mon Sep 17 00:00:00 2001 From: arpi-odoo Date: Wed, 29 Oct 2025 14:54:31 +0100 Subject: [PATCH 5/8] [FIX] hr: fix various bugs --- addons/hr_holidays/models/hr_leave_type.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/hr_holidays/models/hr_leave_type.py b/addons/hr_holidays/models/hr_leave_type.py index 82be6cca94101..4093f0d66dff8 100644 --- a/addons/hr_holidays/models/hr_leave_type.py +++ b/addons/hr_holidays/models/hr_leave_type.py @@ -281,6 +281,7 @@ def _search_virtual_remaining_leaves(self, operator, value): if operator != 'in': value = float(value) leave_types = self.env['hr.leave.type'].search([]) + def is_valid(leave_type): return not leave_type.requires_allocation or op(leave_type.virtual_remaining_leaves) return [('id', 'in', leave_types.filtered(is_valid).ids)] From a7660c901180c14d8fc311ac755583f5c5c6bf44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9lanie=20Peyrat=20=28mepe=29?= Date: Thu, 27 Nov 2025 11:21:02 +0100 Subject: [PATCH 6/8] [FIX] hr_holidays: fix accrual day selection --- .../accrual_level/accrual_levels.scss | 4 +- .../components/day_selection/day_selection.js | 41 ------------------- .../views/hr_leave_accrual_views.xml | 8 ++-- 3 files changed, 6 insertions(+), 47 deletions(-) delete mode 100644 addons/hr_holidays/static/src/components/day_selection/day_selection.js diff --git a/addons/hr_holidays/static/src/components/accrual_level/accrual_levels.scss b/addons/hr_holidays/static/src/components/accrual_level/accrual_levels.scss index 9cec634e1b2dd..5ea81942c9be6 100644 --- a/addons/hr_holidays/static/src/components/accrual_level/accrual_levels.scss +++ b/addons/hr_holidays/static/src/components/accrual_level/accrual_levels.scss @@ -10,7 +10,7 @@ } .o_accrual { - .o_field_accrual, .o_field_selection, .o_field_day_selection, .o_field_filterable_selection { + .o_field_accrual, .o_field_selection, .o_field_filterable_selection { width: fit-content !important; &:not(.o_readonly_modifier) > *:first-child { @@ -20,7 +20,7 @@ field-sizing: content; } - &:not(.o_field_selection, .o_field_day_selection, .o_field_filterable_selection) > *:first-child { + &:not(.o_field_selection, .o_field_filterable_selection) > *:first-child { max-width: 8ch; } } diff --git a/addons/hr_holidays/static/src/components/day_selection/day_selection.js b/addons/hr_holidays/static/src/components/day_selection/day_selection.js deleted file mode 100644 index 05288069a543b..0000000000000 --- a/addons/hr_holidays/static/src/components/day_selection/day_selection.js +++ /dev/null @@ -1,41 +0,0 @@ -import { registry } from "@web/core/registry"; -import { SelectionField, selectionField } from "@web/views/fields/selection/selection_field"; - -export class DaySelectionField extends SelectionField { - static props = { - ...SelectionField.props, - monthField: String, - }; - /** - * @override - * return the available days in the carryover_month - * e.g. February -> [1, 29], april -> [1, 30] - */ - get options() { - let options = super.options; - const carryover_month = this.props.record.data[this.props.monthField]; - // lastDay is the last day of the current_month for the leap year 2020 - const lastDay = new Date(2020, carryover_month, 0).getDate(); - options = options.filter((option) => option[0] <= lastDay); - return options; - } -} - -export const daySelectionField = { - ...selectionField, - component: DaySelectionField, - extractProps({ attrs }) { - return { - ...selectionField.extractProps(...arguments), - monthField: attrs.month_field, - }; - }, - fieldDependencies: ({ attrs }) => [ - { - name: attrs.month_field, - type: "selection", - }, - ], -}; - -registry.category("fields").add("day_selection", daySelectionField); diff --git a/addons/hr_holidays/views/hr_leave_accrual_views.xml b/addons/hr_holidays/views/hr_leave_accrual_views.xml index d70951f190add..53e2df20c6ff2 100644 --- a/addons/hr_holidays/views/hr_leave_accrual_views.xml +++ b/addons/hr_holidays/views/hr_leave_accrual_views.xml @@ -36,17 +36,17 @@ on the - + of and the - + of on the - + of @@ -192,7 +192,7 @@ options="{'links': {'other': 'carryover_custom_date'}, 'observe': 'carryover'}"/> : the - of Date: Mon, 1 Dec 2025 15:23:30 +0100 Subject: [PATCH 7/8] [IMP] empty From e1e21fe727ddb3333cfaa1448a166d6d92f09326 Mon Sep 17 00:00:00 2001 From: "Tatiana Skvortsova (taskv) R&D HR" Date: Tue, 2 Dec 2025 08:37:02 +0100 Subject: [PATCH 8/8] [FIX] hr: make the button "New Contract" invisible if there is no contract start date Before the button 'New Contract' was always showb on the form view of employee, even if the employee had no contract task-5374653 --- .../components/button_new_contract/button_new_contract.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/hr/static/src/components/button_new_contract/button_new_contract.xml b/addons/hr/static/src/components/button_new_contract/button_new_contract.xml index 0c640d5b88d4c..f0deb6447b64d 100644 --- a/addons/hr/static/src/components/button_new_contract/button_new_contract.xml +++ b/addons/hr/static/src/components/button_new_contract/button_new_contract.xml @@ -3,7 +3,9 @@ + t-ref="datetime-picker-target-new-contract" t-if="props.record.resId and props.record.data.contract_date_start"> + New Contract +