Thursday, September 24, 2026
11 changes · master
Enhancements to existing features
This change removes duplicate calendar access rules that did not grant any additional permissions beyond what internal users already had. It reduces administrative clutter and makes access settings easier to maintain and customize across related Odoo modules.
Original PR description
This commits removes redundant access rights (ir.model.access), that are not really adding any extra rights when compared to those added to all internal users by the `calendar` module: * xmlid:…
This commits removes redundant access rights (ir.model.access), that are not really adding any extra rights when compared to those added to all internal users by the `calendar` module: * xmlid: `calendar.access_calendar_event_all_employee` * xmlid: `calendar.access_calendar_event_type_all` * xmlid: `calendar.access_calendar_attendee_employee` As this is just noise that adds no value, it's better to remove them in order to make it easier to maintain and customize them. **Screenshots:** In red, the removed Access Rights <img width="1350" alt="Screenshot 2024-02-21 at 16 07 10" src="https://github.com/odoo/odoo/assets/1914185/29e40b85-eb91-405d-8120-495c5aa8942c"> <img width="1348" alt="Screenshot 2024-02-21 at 16 11 03 1" src="https://github.com/odoo/odoo/assets/1914185/11c743d1-82c7-4f3c-9c17-fa9251350cb0"> <img width="1348" alt="Screenshot 2024-02-21 at 16 11 55" src="https://github.com/odoo/odoo/assets/1914185/c6914a89-4b12-4acd-a61b-d4eb4ab3fbe0"> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Adds automated checks to ensure default values are preserved correctly when one record inherits data from another. This helps prevent confusing or inconsistent form behavior for users and reduces the risk of this issue returning in future versions.
Original PR description
Add unit tests to prove a bug. No fix yet.. The added test is self explainatory, but here's some more context:…
Add unit tests to prove a bug. No fix yet.. The added test is self explainatory, but here's some more context: [EmailMessage](https://github.com/odoo/odoo/blob/c0ce5619ada6952261fd44f28108108040629d81/odoo/addons/test_new_api/models/test_new_api.py#L216) inherits from [Message](https://github.com/odoo/odoo/blob/c0ce5619ada6952261fd44f28108108040629d81/odoo/addons/test_new_api/models/test_new_api.py#L127) through its `message` field. It's impossible to set a default value for this field, as it gets set back to `False` during the `onchange`. It's even worse, the results are unpredictable. Related inherited fields will reference the value of the parent `message`, but the message itself will be `False`. (see `self.assertEqual(form.label, message.label)`) I couldn't find a fix yet, but I tracked it down to this: - https://github.com/odoo/odoo/blob/c0ce5619ada6952261fd44f28108108040629d81/odoo/models.py#L6415-L6418 Which makes the `record`, `snapshot0` and `snapshot1` to have a `NewId` value for `message` in the end, that gets converted to `False` during `convert_to_write` -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes an unnecessary customization in the Purchase app. It keeps the codebase simpler and easier to maintain without changing day-to-day purchasing workflows.
Original PR description
**Description of the issue/feature this PR addresses:** Remove useless method override --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This improves the website footer configuration by making the content width option depend on the selected footer template. It helps keep footer layouts more consistent and easier to manage across website designs.
Original PR description
WIP Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change speeds up internal test invoice creation for Argentina localization reports by avoiding a slower form-based process. It reduces test setup time and database queries while keeping report results unchanged, helping development and validation run more efficiently.
Original PR description
The use_current_date=False branch of _create_test_invoices_like_demo built 18 invoices through Form, which reruns the whole move onchange for every field of every line. It was two thirds of the l10n_ar_reports class setup. Create them with _create_invoice from the fields the Form set, like the other branch does. The accounting date is now the invoice date on every invoice, the report output is unchanged. With the l10n_ar_reports counterpart: | l10n_ar_reports, runbot 18.0 L10n | before (3 builds) | after | |------------------------------------|-------------------|-------| | TestArReports setUpClass | 78-103s | 31s | | module test time | 80-106s | 33s | | queries | 45.4k | 28.4k | Forward-Port-Of: odoo/odoo#290123 Forward-Port-Of: odoo/odoo#290111
This update improves the speed of an internal data operation used by Odoo, especially when working with large collections of records. It reduces processing overhead without changing business behavior, helping larger workloads run more efficiently.
Original PR description
`OrderedSet` inherited `-` from `collections.abc.Set`, which builds the result via a generator and, when the other operand is itself a `Set` (including another `OrderedSet`), tests membership through…
`OrderedSet` inherited `-` from `collections.abc.Set`, which builds the result via a generator and, when the other operand is itself a `Set` (including another `OrderedSet`), tests membership through `OrderedSet.__contains__` for every element - a Python-level call per test instead of a raw dict lookup. Specialize `__sub__`, mirroring the existing `__and__`: unwrap an `OrderedSet` operand to its backing dict, use a plain `set`/`frozenset` operand as-is, and only convert other iterables. This keeps membership tests at dict/set speed in every case without adding a copy where one isn't needed. Benchmarking comparing the __sub__ operation of OrderedSet to OrderedSets and on other iterables (Ordered set - othertype). The other object contains 1/2 of the objects in the original OrderedSet. The time values are averaged across 200 runs. | OrderedSet Size | Other Type | Old Time (µs) | New Time (µs) | |---|---|---|---| | 100 | OrderedSet | 6.8 | 4.6 | | 100 | Set | 3.4 | 3.4 | | 100 | FrozenSet | 3.7 | 3.4 | | 100 | list | 8.4 | 4.3 | | 10,000 | OrderedSet | 574.3 | 293.9 | | 10,000 | Set | 288.0 | 274.6 | | 10,000 | FrozenSet | 285.2 | 271.5 | | 10,000 | list | 742.3 | 343.0 | | 100,000 | OrderedSet | 5,851.7 | 2,968.0 | | 100,000 | Set | 2,876.7 | 2,787.7 | | 100,000 | FrozenSet | 2,864.3 | 2,787.7 | | 100,000 | list | 7,692.2 | 3,678.5 | | 1,000,000 | OrderedSet | 61,629.1 | 32,759.28 | | 1,000,000 | Set | 31,377.5 | 30,295.9 | | 1,000,000 | FrozenSet | 31,330.4 | 30,540.1 | | 1,000,000 | list | 99,383.1 | 55.381.4 |
The Belgian payroll employee Sub-type field now shows the descriptive name instead of the numeric DMFA code when available. This makes employee records easier to understand and aligns the interface with the updated terminology.
Original PR description
The employee Sub-type field currently displays the numeric DMFA code. As the concept was renamed from 'worker code' to 'sub-type', displaying the name is more relevant for users. This commit updates `l10n.be.worker.code` to display its name by default (falling back to the code if empty) and updates the form placeholder accordingly. Task: 6586101 Forward-Port-Of: odoo/enterprise#132354
Demo user avatars across several Odoo apps were refreshed with new illustrated images. The image format was changed to WebP and duplicate files were removed, reducing the overall file size while improving visual quality.
Original PR description
This update adds automated test coverage for creating invoices from helpdesk tickets. It helps ensure invoices are only created when tickets are eligible, reducing the risk of duplicate or invalid billing.
Original PR description
Add a test covering invoice creation from helpdesk tickets.
**The test verifies:**
- Non-billable tickets cannot create an invoice.
- Tickets linked to an already invoiced sale order cannot create another invoice.
- A mix of billable and non-billable tickets prevents invoice creation.
- A billable ticket can create an invoice.
Part of this task-4243781
task-6594785
Forward-Port-Of: odoo/enterprise#132747Indian localization reports no longer show warnings tied to the repealed Income Tax Act, 1961. This keeps report messaging aligned with current legislation and avoids unnecessary alerts for users.
Original PR description
As the Income Tax Act, 1961 has been repealed completely, remove the warning mechanism for reports related to the old act. Forward-Port-Of: odoo/enterprise#132544
The Argentine reports test setup now creates sample vendor bills more directly, avoiding unnecessary repeated processing. This reduces automated test time and database work while keeping the accounting report results unchanged.
Original PR description
Same as the l10n_ar fixture: the 10 demo vendor bills were built through Form, rerunning the whole move onchange for every field of every line. Create them with _create_invoice from the fields the Form set. The accounting date is now the invoice date on every bill, the report output is unchanged. With the l10n_ar counterpart: | l10n_ar_reports, runbot 18.0 L10n | before (3 builds) | after | |------------------------------------|-------------------|-------| | TestArReports setUpClass | 78-103s | 31s | | module test time | 80-106s | 33s | | queries | 45.4k | 28.4k | Forward-Port-Of: odoo/enterprise#132841 Forward-Port-Of: odoo/enterprise#132697
*: documents, hr_contract_salary, hr_payroll, l10n_*_hr_payroll, planning, social_push, test_l10n_be_hr_payroll_account, website_event_social, website_helpdesk_livechat A very needed update of the avatars | files | size -- | -- | -- removed | 71 (1 png, 70 jpg) | 534 KB added | 45 webp | 174 KB net | −26 files | −360 KB (−67.4 %) Increased images' width x height from 128x128 to 200x200 px Remove duplicate images in the l10n_*_hr_payroll files, just one copy in the hr_payroll module. Switch from .jpg/.png to .webp. Added illustrated avatars for users. task-6538183 Forward-Port-Of: odoo/enterprise#132623