Tuesday, March 3, 2026
22 changes · 19.0
Enhancements to existing features
The internal linting guidance for translation-related checks was improved with an updated documentation link and clearer explanation of one rule. This helps developers understand and resolve translation check messages more easily, supporting better code quality without changing business functionality.
Original PR description
- Update documentation link for E8502. - Clarify why E8505 is in place and give an example. Forward-Port-Of: odoo/odoo#251444
This change adds a shorter command-line shortcut for running selected tests, making developer workflows a little faster and easier to remember. It does not change how the product works for end users and has minimal business impact.
Original PR description
Backport of https://github.com/odoo/odoo/pull/234287 <img width="408" height="151" alt="image" src="https://github.com/user-attachments/assets/7f22826f-6887-432b-8baf-8a6778b9cadf" /> Forward-Port-Of: odoo/odoo#250283 Forward-Port-Of: odoo/odoo#249123
This update restricts the ‘Working Schedule Change’ wizard to only Belgian companies, streamlining the process for users. It also removes a redundant field and improves the user interface by adding padding to the time-off warning alert, enhancing the overall user experience.
Original PR description
- Show the “Working Schedule Change” wizard only for employees belonging to Belgian companies. - Remove the “Post Change Contract Creation” field from the working schedule change wizard. - Add extra right padding to the warning alert in the time-off section for improved UI spacing. task-5367812
Resolved issues and error corrections
This update fixes several issues in Odoo's automated testing tools, making test results more accurate and easier to diagnose. It improves cleanup between tests and adds standard mocks for browser features, reducing false failures and helping developers maintain product quality.
Original PR description
Fixes for tests and testing framework. See commit messages for details. Enterprise: https://github.com/odoo/enterprise/pull/107286 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251239 Forward-Port-Of: odoo/odoo#247137
This fixes an issue in the Chile accounting localization where editing posted miscellaneous journal entries could be blocked by a document number validation that did not apply to them. Businesses can now adjust these internal accounting entries without encountering an irrelevant electronic document folio error.
Original PR description
Currently, editing a posted `miscellaneous` journal entry in Chile localization incorrectly raises a validation error. **Steps to reproduce:** - Install the `l10n_cl` module and switch to the `CL…
Currently, editing a posted `miscellaneous` journal entry in Chile localization incorrectly raises a validation error. **Steps to reproduce:** - Install the `l10n_cl` module and switch to the `CL company`. - Go to Accounting > Accounting > Journal Entries. - Create a balanced entry using the `Miscellaneous journal `and `post` it. - Reset it to draft, modify the `name`, and try to `save` it. **Observation:** `Validation error`: `The DTE document number (folio) must contain only digits.` **Root cause:** At [1], the constraint validation is applied to all journal entries in Chilean companies, including `miscellaneous` journals. However, `miscellaneous journals (move_type = 'entry')` are not linked to Chilean electronic documents, so the numeric folio validation should not apply to them. **Fix:** This commit ensures that the validation is not raised for `miscellaneous` journal types by excluding miscellaneous journals from the numeric folio validation constraint. [1]: https://github.com/odoo/odoo/blob/f39785bcddd1eb5b7fb503d053c9bb66e2a0f15c/addons/l10n_cl/models/account_move.py#L20-L30 opw-5926773 Forward-Port-Of: odoo/odoo#248965
The Hungarian tax audit export now avoids accidentally saving temporary invoice chain information while generating audit files. This helps keep invoice records unchanged after export and reduces the risk of incorrect audit-related data being stored.
Original PR description
At the moment, the Hungarian tax audit export wizard's `action_export` creates a savepoint with `flush=False`. The intention of this savepoint is to roll back the changes to `l10n_hu_edi_invoice_chain` once the savepoint exits. But because the changes to `l10n_hu_edi_invoice_chain` stay in cache, and the cache is not flushed before the savepoint is created nor cleared afterwards, those changes end up being committed to DB. Which is precisely what the savepoint was there to prevent. Solution: we use `flush=True` to make sure the cache is flushed before and cleared after the savepoint. task-none Forward-Port-Of: odoo/odoo#251322 Forward-Port-Of: odoo/odoo#250971
Saving an edited website page no longer replaces custom dropzone guidance text with the default message. This keeps page editing instructions accurate for website teams and avoids confusion when returning to edit mode.
Original PR description
Steps to reproduce: - Open the website shop page in edit mode. - Drag and drop a block in the shop header dropzone. - Save the page and re-enter edit mode. - Check the shop header dropzone message.…
Steps to reproduce: - Open the website shop page in edit mode. - Drag and drop a block in the shop header dropzone. - Save the page and re-enter edit mode. - Check the shop header dropzone message. => The custom message is replaced by the default one. Before this commit, `SetupEditorPlugin.cleanForSave()` removed `data-editor-message` and `data-editor-message-default` on the saved HTML clone, including custom messages defined in website templates. This cleanup was originally introduced in `web_editor` in [1]. Since the builder refactor in [2], website page saves now use the shared `html_builder` save cleanup flow and wrongly inherited that behavior, which introduced this regression in website. This commit removes that cleanup from `html_builder`, as it does not provide useful value in this save flow and drops custom dropzone messages. After this commit, custom dropzone messages are preserved after saving website pages. [1]: bab673488e185ddd7792aedecc3870663290fed3 [2]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-5921283 Forward-Port-Of: odoo/odoo#250874
Point of Sale session chatter messages for opening and closing cash details are now translated based on the user's selected language. This improves clarity for non-English users reviewing cash register activity and session records.
Original PR description
**Problem:** When opening or closing a POS session, chatter messages display untranslated English text regardless of the user's language setting. **Steps to reproduce:** 1. Set user language to any non-English language (e.g., Spanish) 2. Open a POS session and register cash in/out operations 3. Close the session 4. Check the chatter messages - labels appear in English **Current behavior:** Messages display in English: "Opening cash difference", "Opening cash expected", "Opening cash counted", "Closing difference", etc. **Expected behavior:** Messages should be translated according to the user's language setting. **Cause of the issue:** The hardcoded strings were not wrapped in the translation function `_()`, preventing them from being translated. **Fix:** Wrap the concatenated strings with `_()` to enable proper translation of all cash details messages. opw-5185310 Forward-Port-Of: odoo/odoo#248982 Forward-Port-Of: odoo/odoo#244501
This update makes an internal stock test independent from demo data that may be installed in the database. It helps prevent false test failures, improving confidence in stock-related quality checks without changing day-to-day user workflows.
Original PR description
The `test_lot_search_partner_ids` expects a specific number of lots/SNs to exist in the database in order to ensure its custom `partner_ids` search works correctly. Because of this, the test fails if any lot demo data is installed. Therefore we create all new locations, products, lots and add extra search domain fields to avoid loading any of these demo data. Also add in extra long partner name to avoid conflicts with overlapping demo/test partner names. runbot error: 162921 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250783 Forward-Port-Of: odoo/odoo#220777
Fixes an issue where using replenishment multiples could trigger an error when ordering stock up to the maximum level. This helps warehouse users complete replenishment smoothly when products are ordered in packs or other multiple units.
Original PR description
Backport of: https://github.com/odoo/odoo/commit/fe806166968d55a70f5bf335dcb3633e18d8ecc7 Steps to reproduce: - Create a storable product “P1”: - UoM: Unit and Pack of 6 - Purchase tab: add any vendor - Go to Replenishment and create a new rule: - Product: P1 - Min: 10 - Max: 100 - Replenishment Multiple: Pack of 6 - Select the line and click “Replenish” → “Order to Max” Issue: A traceback is raised: “TypeError: unsupported operand types in: uom.uom(2,) - 4.0” In `_get_qty_to_order`, we compute the quantity to order and then adjust it according to the replenishment multiple, but we try to Subtract the rounded remainder from the uom (which is a recordset) instead of the quantity (which is a float). opw-5947919 Forward-Port-Of: odoo/odoo#250608
The website/page builder now correctly allows snippets to be dropped onto the page when using right-to-left languages such as Arabic. This removes an editing issue for RTL users and makes the builder behavior consistent across language settings.
Original PR description
When dropping outside a dropzone but still on the page, the code checks if the drop happened well outside of the sidebar (so on its left). However, in RTL languages, the sidebar is positioned on the left, so we need to check if the drop is on the right side of it instead. The fix checks if the sidebar is at the left edge (the body of the document should have the `o_rtl` class) and verifies the drop position is on the right of the sidebar. Steps to reproduce: - Set your profile to Arabic - Drag and drop a snippet outside of a dropzone => It's not dropped, but it should, as it would with an LTR language. task-5484936 Forward-Port-Of: odoo/odoo#251027 Forward-Port-Of: odoo/odoo#247759
This fixes an accounting check so it is only run on one bank-related record at a time, as intended. It helps prevent incorrect processing or errors in cases where multiple records were being checked together.
Original PR description
In some cases, the check was done on multiple records, though the method should be called on one and only one record. Forward-Port-Of: odoo/odoo#251589 Forward-Port-Of: odoo/odoo#251457
Task assignment notification emails will now be automatically removed after they are sent, reducing unnecessary email record clutter. The task assignment itself remains recorded on the task and in the chatter, so business tracking is preserved while storage stays cleaner.
Original PR description
Task assignment notification emails are kept permanently (mail_auto_delete=False), creating unnecessary clutter in mail.mail records. This is inconsistent with 'You have been invited to follow' notifications which use mail_auto_delete=True. Assignment is already tracked in user_ids and chatter, so these emails serve no purpose after being sent. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a technical problem where tests were failing due to how keyboard events were being handled within the Odoo system. Specifically, the 'hoot' feature was affected, ensuring that key presses were correctly processed and that the system functioned as intended. This improves the stability and reliability of the Odoo Enterprise platform.
Original PR description
Adapt tests failing due to keydown events being applied to the current active element. Community: https://github.com/odoo/odoo/pull/247137 Forward-Port-Of: odoo/enterprise#109094 Forward-Port-Of: odoo/enterprise#107286
This update corrects a minor issue in the Documents app where action names were not consistently reflecting the type of account move being created (e.g., 'Vendor Bills' instead of 'Invoices'). This change ensures a clearer and more accurate user experience when working with account moves generated from documents.
Original PR description
Previously, creating account moves from the Documents app opened the account.move list view with a static `Invoices` title, which was not explicit for all move types. Steps to reproduce: 1. Select suitable PDFs in Document App. 2. Click on `Vendor Bill`. 3. See the name of action (below Breadcrumbs) should be `Vendor Bills` instead of `Invoices` This fix adds and uses a mapping based on move_type to set the correct action name (e.g., Vendor Bills) after record creation. task-5983372 Forward-Port-Of: odoo/enterprise#109180
This update removes an unnecessary size check during AI image processing, streamlining the workflow. Previously, large images triggered errors despite being automatically resized. This change aligns the system with existing image processing logic, avoids user intervention, and maintains consistent resource usage without impacting stability.
Original PR description
Prevent unnecessary ["Too large image (above 50.0Mbpx)" error](https://github.com/odoo/odoo/blob/fee6b32a8a57577bd8229c80dff6f93964f9f556/odoo/tools/image.py#L99) when the image is resized…
Prevent unnecessary ["Too large image (above 50.0Mbpx)" error](https://github.com/odoo/odoo/blob/fee6b32a8a57577bd8229c80dff6f93964f9f556/odoo/tools/image.py#L99) when the image is resized immediately afterward. Currently, an image larger than 50Mpx triggers an error when inserted into a prompt, even though the image processing pipeline resizes it right after. This makes the size check inconsistent with the actual behavior of the system. Current behavior: - 51Mpx image → prompt → error - 49Mpx image → prompt → resized → OK Proposed behavior: - 51Mpx image → prompt → resized → OK - 49Mpx image → prompt → resized → OK In practice, the 50Mpx limit does not protect against memory issues in this flow, since the image is systematically resized (max 1024px width/height) before being stored or used by the AI module. The original full-resolution image is never processed beyond the resizing step. Moreover, similar image processing logic in base/models/ir_attachment.py already allows larger images, meaning we support them elsewhere in the codebase. This makes the current restriction here inconsistent and redundant. By removing this premature size validation, we: - Avoid forcing users to manually resize images that would be resized anyway - Align the behavior with other ImageProcess() usages - Keep the same effective resource usage, since resizing still happens immediately The safeguard against excessive memory usage remains in place through the resizing logic itself, so this change does not introduce additional risk.
This update resolves a printing problem that was occurring with Odoo's Knowledge articles. The team reverted a previous change that was causing issues with the ‘wkhtmltopdf’ printing tool. This ensures that users can reliably print Knowledge articles.
Original PR description
### Purpose of this PR: - Restore the static file box implementation and drop the embedded component, as it breaks printing with wkhtmltopdf. - The original issue with the static file box was fixed in [#241591](https://github.com/odoo/odoo/pull/241591) Reverts: https://github.com/odoo/enterprise/pull/88929 community: https://github.com/odoo/odoo/pull/251098
This update addresses a potential issue in the Swiss payroll reporting process. Specifically, it now displays a warning instead of an error when the 'AVS' (Authorized Value System) calculation results in a negative value. This prevents disruptions in reporting and ensures accurate data transmission for tax compliance.
Original PR description
Forward-Port-Of: odoo/enterprise#109046
This update resolves a technical issue where a test XML file was incorrectly being included in the translation process. By moving the file to the correct testing directory and updating the translation files, the system now exports only the necessary test data, improving efficiency and accuracy.
Original PR description
In this commit[^1], the same XML test file (e-invoice) was added both to the regular `tests/assets` directory as well as to the `static/src/tests/assets` directory. The latter is a path that is visited by the translation extractor, extracting its strings to the POT file. This didn't make sense at all. This commit fixes that by moving the XML file in the tour test our of the `static/src` directory, into `static/tests`. This path doesn't get its files extracted. We meanwhile update the POT file to remove the irrelevant entries. [^1]: https://github.com/odoo/enterprise/commit/673311b0b8ac6f7e224da8315a302afb7905f9e7
This update resolves a minor issue preventing users from editing date inputs within the payroll form. By adding a brief delay, the system now correctly opens the associated popover before clearing the input, ensuring the form remains fully functional. This improves the user experience and prevents data editing problems.
Original PR description
With this additionnal step in tour, we ensure the popover is opened before clear the input. If we not wait for this, the input can be no longer editable. runbot-error-id~234440
This update corrects a test case within the quality control module to reflect recent changes in how Odoo handles stock moves. Specifically, the test now accurately assesses scenarios where stock transfers merge into existing ones only when a 'stock reference' is present. This ensures the quality control process aligns with the latest Odoo functionality.
Original PR description
Fix the test case to align with the updated picking move merge behavior, where the next transfer merges into an existing one only when a stock reference is set TaskID-5242340 Forward-Port-Of: odoo/enterprise#108399 Forward-Port-Of: odoo/enterprise#99342
This update allows Odoo Leaders to automatically launch appraisal campaigns for all their employees without needing to manually select individuals. Previously, a campaign required specific employee selection. This simplifies the process for Leaders and ensures all employees are included in the appraisal cycle.
Original PR description
. Allow the Leader to launch an appraisal campaign for all their employees by default when no specific employees are selected in the list. task-5347755