Monday, September 14, 2026
29 changes · master
Resolved issues and error corrections
The web translation dialog now correctly shows and saves XML field attributes that contain special HTML characters. This prevents translated content from being displayed or saved with incorrect extra escaping, improving reliability for users managing translations.
Original PR description
Have an xml field with special html characters in an attribute that should be translatable Before this commit, the translation dialog rendered that case badly, doube escaping when saving After this commit it works as expected 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 fix ensures VoIP sales test data is created with the right permissions after a recent testing change. It helps keep automated checks reliable, reducing the risk of false failures during development.
Original PR description
With commit a452ee4de2927327b56ae6922f395482e3dbd50f, now test methods run as a dedicated `_test_user` whose groups are limited to the ones defined by `_test_user_groups`. The test added by 94bfdb15f9af369493cfeeda01593a901993f110 sets up its own records without sudo and therefore lacks the required groups. To solve, we create data with sudo(). runbot: https://runbot.odoo.com/odoo/error/947154
Fixed an issue in Shopfloor where saving a measurement instruction could leave the confirmation popup open even though the value was saved. This reduces confusion for operators and lets them continue work order steps smoothly.
Original PR description
Steps to reproduce: 1. Go to Shopfloor 2. Select some Work Order 3. Click update instructions 4. Add a measure instructions 5. Try to validate this step by putting a value and saving 6. Notice that the pop up is not closing. This is happening that due to the change in this pr: https://github.com/odoo/enterprise/pull/124697 `startWorking` function, which is called by `doActionAndNext` and returns its result, now can return `true` or `false`. `doActionAndNext` is called by `saveMeasurement`, which also returns its result. Since `saveMeasurement` is bound to confirm, if `startWorking` returns false, `saveMeasurement` will return false, and the ConfirmationDialog will not be closed. (https://github.com/odoo/odoo/blob/19.0/addons/web/static/src/core/confirmation_dialog/confirmation_dialog.js#L79) Since the result of `saveMeasurement` is not used, it now just awaits for `doActionAndNext`, and return no value. task-6569826
The AI website builder form tests now load the needed iframe templates so they match recent multilingual website behavior. This helps ensure forms continue to work correctly when the website language differs from the user's language.
Original PR description
The corresponding PR in community fixes the way templates added by options are rendered to use the correct language when the website's language is not the sames as the user's language. This changes requires tests that use those options to enable `loadIframeBuilderTemplates` to function. This commit enable this options for 2 tests modifying forms. task-6452676
This fixes an issue where accounting return screens could keep running loading steps after the user had already left the page. The change helps avoid unnecessary errors or interruptions during account and Belgian reporting workflows.
Original PR description
When loading the return we need to do multiple async calls Previously it tried to make all the calls whether or not the component was destroyed. Now between each call we check if we should exit early or not.
This fixes a visual issue in Kanban views where cards could overlap the column header when hovered in a scrolled column. The header now stays on top, keeping the interface clearer and easier to use.
Original PR description
Since the changes introduced in commit [1], hovering a Kanban card in a scrolled column causes the card to appear in front of the Kanban header, resulting in visual glitches. This commit updates the Kanban header z-index to ensure it remains above the cards. task-6569549 [1]: https://github.com/odoo/enterprise/commit/a52d671ff63a4238040ee93320fcaf7f5fcdccce Requires: - https://github.com/odoo/enterprise/pull/131381 | Before | After | |--------|--------| | <img width="918" height="383" alt="image" src="https://github.com/user-attachments/assets/2bf46643-b7b3-41ee-a292-5cbbb3f596b4" /> | <img width="880" height="373" alt="image" src="https://github.com/user-attachments/assets/f4f6152a-2be9-4246-a412-5cf890db2e06" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sales order lines without a linked product now use the first line of their description as the short name, preventing display issues in the customer portal. The sales form also now requires a label for these lines, reducing the chance of blank entries.
Original PR description
Fix the computation of `name_short` to use the first line of the description for productless SOLs. Previously, `name_short` was always computed from the product's `display_name`, causing the sale order portal view to break for productless SOLs. Also make label field required to avoid having line with empty label. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The VoIP softphone empty screen now shows the intended phone icon instead of a blank space. This provides a clearer, more polished experience for users when there is no call content to display.
Original PR description
`oi` icons are resolved through `content: attr(data-icon)`, so the class-based `<i class="oi oi-voip"/>` painted nothing. Use the systray's icon: `oi oi-filled` with `data-icon="call"`. Task-6524634
This fix removes a visual glitch that appeared when users dragged cards between Kanban columns. The highlighted drop area now displays more smoothly, improving the user experience without changing functionality.
Original PR description
When dragging a card into another column, a highlighted area is displayed. This area is divided into two sections: the Kanban header and the column itself. Before this commit, the header had a transition applied to it, which caused a visual glitch when dragging cards. This commit refines the transition so that it only applies to the relevant CSS property and prevent visual glitches. task-6569549 Requires: - https://github.com/odoo/odoo/pull/288012 | Before | After | |--------|--------| | <img width="840" height="619" alt="image" src="https://github.com/user-attachments/assets/c941fd7c-c2c9-434a-a837-f3acd7771aa7" /> | <img width="585" height="584" alt="image" src="https://github.com/user-attachments/assets/025fde6c-b36e-477a-99a5-3db0c42ca387" /> |
This fixes a crash that could happen when the Indian localization setup did not have a template code available. The change makes the setup check for the code before using it, improving reliability during configuration or automated checks.
Original PR description
Previously, the template code was directly checked with `startswith('in')`, which caused a traceback when no template code was there.
In this commit, the template code is checked first, and `startswith('in')` is only called when a template code is available.
error: https://runbot.odoo.com/odoo/runbot.build.error/947112Fixed an issue where translated labels for identifiers linked through a commercial partner were not always shown. This helps users see the correct localized information when working with partner records.
Original PR description
When an identifier comes from the commercial partner, the translation was not properly loaded because it was not part of the computed available_additional_identifiers. task-none
This update prevents an error when Turkish Nilvera e-Dispatch records have no related deliveries to process. It adds a safety check so users avoid a runtime failure in this situation.
Original PR description
… boolean the function `_get_related_pickings` can return False. So before iterating over the results, we need to check whether there it is False or not to avoid iterating over a boolean and hitting a runtime error. 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
The applicant refusal form now only shows active refusal reasons, preventing outdated archived options from appearing in the selection list. This keeps recruitment workflows cleaner and reduces the chance of choosing obsolete reasons when rejecting candidates.
Original PR description
When refusing an applicant, the archive_applicant function was passing `'active_test': False` in the **context** to the refusal wizard. This disabled the active records filter, **which caused archived refuse reasons to appear in the dropdown selection.** This commit removes `'active_test': False` from the context to restore the default filtering behavior as it seems harmless to remove.
Australian payroll opening balance templates now include annual leave after the older paid leave category was replaced. This helps ensure year-to-date payroll balances reflect paid leave correctly for reporting and payroll setup.
Original PR description
The Other Paid Leave work entry type was dropped in favour of a single AU.AL Annual Leave entry, but the YTD opening balances template was left without any Paid leave entry. Task-6529559
This fix prevents errors when the system looks up currency rates without a specific invoice or journal entry selected. It keeps Turkish live currency rate handling reliable while preserving special rate-type behavior when a single entry is available.
Original PR description
## Short fix summary: `account.move.get_currency_rate` ignores `self` and can be called with no record at all, which the override in `l10n_tr_currency_live_rate` did not allow: it opened with `ensure_one()` and raised `Expected singleton: account.move()`. The rate type is now applied only when there is a single move to read it from, deferring to `super()` otherwise. no-task-id I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Time Off overview now displays the correct leave duration next to each employee instead of always showing 0 days. This helps managers and HR users quickly understand requested or scheduled time off without opening extra details.
Original PR description
Steps to reproduce: 1- Open time off app 2- Open overview tab 3- Click on any time off entry Issue: The duration next to the employee name is always "0 day(s)" Cause: the duration was calculated in '_getDurationLabel' based on number_of_hours or number_of_days. That was assuming that the model can only be hr.leave which is true for the management tab but in the overview tab the model is hr.leave.report.calendar which doesn't have those fields. Fix: Both models instead have a field called duration display which includes a string for the duration with hours/days and translation handled. The field is added in the 'addtionalFieldsToFetch' in the renderer as it was not present in the hr.leave form view. The '_getDurationLabel' method was discarded as there was no need to build the duration string and used duration_display directly. Task-6542267
After installing VOIP, the setup flow now opens the available phone number list correctly. This prevents users from landing on an empty screen when they need to buy or configure a number.
Original PR description
Since 01d284d7916 ("[IMP] voip: introduce number requests"), voip_did_number_menu is a parent menu without an action: the list action moved to its voip_did_number_list_menu child. selectMenu returns early on a menu without an action, so the post-install client action opened nothing.
Select voip_did_number_list_menu, which holds the list action.This update cleans up references to an old developer option that no longer exists. It helps avoid confusion for administrators and developers by keeping Odoo's configuration behavior aligned with currently supported features.
Original PR description
The feature was removed in odoo/odoo#115076 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 Forward-Port-Of: odoo/odoo#287719 Forward-Port-Of: odoo/odoo#283352
Fixed a small configuration error that could cause an error when users opened the return kanban view and used the View Entry button. This restores expected access to related entries in Indian localization reports.
Original PR description
A `,` was missing in the `invisible` condition of the `View Entry` button, causing a traceback. Add the missing `,` to fix the return kanban view.
The French accounting module no longer forces companies to install partner autocomplete just to use shared partner lookup logic. This keeps the needed functionality available while avoiding an optional feature that cannot currently be disabled.
Original PR description
In this commit: https://github.com/odoo/odoo/commit/bc4bb545aa1b7451cf46ec64879ded93c457d411 We added a dependecy for the partner auto complete but it could be a problem because partner_autocomplete don't have a way to disable it. This pr will move the function to the base module to be sure it can be use. no task id co-authored: @remi-filament --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The French reports module now correctly declares a required internal service used for AspOne features. This helps ensure the module installs and runs reliably without missing-component errors.
Original PR description
This module use some function from iap for using aspone, but the dependency wasn't there. This commit will add it. no task id
The Mexican POS electronic invoicing test was updated to match the newer self-invoicing process. This helps ensure receipts can still be self-invoiced correctly while preventing public users from changing existing customer records.
Original PR description
Before the related pr commit: - Public users could update customer data during the self-invoicing flow. - The test_qr_code_receipt_mx test relied on this behavior when updating customer data. After the ref commit: - Public users can no longer update customer data during self-invoicing. - Update test_qr_code_receipt_mx to create a new partner with the required customer data when the order is not linked to a customer. Related PR: odoo/odoo#283470 Task-6272660 Forward-Port-Of: odoo/enterprise#131018 Forward-Port-Of: odoo/enterprise#129948
This fix adds a check to ensure Belgian payroll remuneration codes use whole-number values. It helps prevent invalid payroll configuration data that could cause reporting or calculation issues.
Original PR description
Task: 6536560 Forward-Port-Of: odoo/enterprise#131261 Forward-Port-Of: odoo/enterprise#130425
Corrects the receipt type value sent for Egyptian electronic POS reporting so it matches the tax authority's expected format. This helps prevent sale receipts from being rejected because of a simple capitalization mismatch.
Original PR description
Fixes a typo in the documentType, where it was previously uppercase 'S' --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A small configuration error was corrected so Indian localization return screens can open as expected. This prevents users from being blocked when accessing those return views.
Original PR description
There is a missing comma in an invisible clause causing the return views to no load.
New VAT-related reports and return types are now activated or deactivated at the right point in the setup process. This prevents records from being handled before their system identifiers exist, improving reliability when accounting report data is loaded.
Original PR description
The logic to toggle the `active` field on newly created reports / return types was in `create`. There the new records do not have an xmlid yet. But we retrieve some of the the reports / return types via `ref`. Reports / Return types should basically always have an xmlid an be loaded via the module data. So there is not really a point in having such a logic in `create` task-None
A payment-related setting was renamed to make its purpose clearer and avoid confusion with the existing payment enabled status. This helps teams understand when online payment functionality is intentionally blocked, reducing setup and support misunderstandings.
Original PR description
During this commit: https://github.com/odoo/enterprise/commit/1c4865cdcc191fea06a87e742556e080aa2478d7 we added a field to block the payment feature. The name of the field was a bit confusing with is_payment_enabled. no task id
This fixes a display issue where product cards could lose their padding when using the Chips layout outside the main shop page. Website editors and visitors will now see consistently spaced product cards in dynamic product sections, improving page appearance without changing functionality.
Original PR description
Steps to reproduce: --- - Install the website_sale module with demo data. - Go to /shop and switch the product layout to Chips. - Exit the editor. - On the home page, open the editor and add the…
Steps to reproduce: --- - Install the website_sale module with demo data. - Go to /shop and switch the product layout to Chips. - Exit the editor. - On the home page, open the editor and add the Dynamic Products snippet. Issue: --- The Products snippet has collapsed card padding when the Chips layout is active. Root cause: --- - The Chips card layout defines `--_padding-base` using `var(--o-wsale-products-grid-gap)` with no fallback value. https://github.com/odoo/odoo/blob/4307f657c73a860c755e1499138a878268882f7a/addons/website_sale/static/src/scss/product_tile.scss#L632 - When the Products snippet renders outside /shop, the variable is undefined, causing the `calc()` to resolve to a guaranteed-invalid value which collapses the card padding. All other layouts are unaffected because they either do not use `--o-wsale-products-grid-gap` in their padding chain, or already provide a `16px` fallback at the point of use. https://github.com/odoo/odoo/blob/4307f657c73a860c755e1499138a878268882f7a/addons/website_sale/static/src/scss/product_tile.scss#L407-L410 Solution: --- - 16px matches the default value of `shop_gap` on the website model, ensuring correct padding whenever the variable is not explicitly set. https://github.com/odoo/odoo/blob/4307f657c73a860c755e1499138a878268882f7a/addons/website_sale/models/website.py#L128 ### Before: <img width="1456" height="563" alt="image" src="https://github.com/user-attachments/assets/c28ab183-0af3-4a2a-858d-b85d9995eb07" /> ### After: <img width="1427" height="550" alt="image" src="https://github.com/user-attachments/assets/e0ba80ec-10ad-433f-bf9a-acbaffd56a76" /> opw-6511483 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286185
The HTML editor now properly clears file-related event handlers when an editor is closed or destroyed. This prevents small memory leaks that could build up over repeated editor use, improving long-term stability without changing the user experience.
Original PR description
FilePlugin registered its click, keydown and pointerdown handlers with raw `addEventListener`, so they were never removed when the plugin was destroyed. The pointerdown one is bound to the document, which outlives the editable, leaking a handler per editor instance. Use `addDomListener` so Plugin.destroy() removes them. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#286491 Forward-Port-Of: odoo/odoo#286144