Tuesday, May 19, 2026
28 changes · saas-19.1
New functionality added to Odoo
This update introduces a simple LED flashing feature within the IoT app, triggered by a 'test' button. This allows users to easily identify and locate IoT boxes, particularly when multiple boxes are present in a setup like an OXP. It's a small, helpful addition for troubleshooting and device management.
Original PR description
This PR adds a feature to flash red and green leds on the iot box with odoo-led-manager service when using "test" button in iot app This helps to identify an iot box when having multiple in the setup (Ex: OXP)
Enhancements to existing features
This update simplifies how Odoo manages addon locations. It now supports using wildcard patterns (globbing) in the list of addon paths, making it easier to manage multiple Odoo installations. This change reduces the need for manual configuration and improves flexibility for developers.
Original PR description
Pass all addons_path entries through glob.glob(), which returns [path] for literal paths and expands patterns otherwise. This is useful when managing multiple Odoo repositories under a common root, avoiding the need to list each addons path explicitly. Forward-Port-Of: odoo/odoo#259690
Resolved issues and error corrections
This update fixes a display issue where accounting reports, when filling a full screen, would obscure the final row, preventing users from seeing all data. The fix involves adjusting styling to ensure the complete final row is visible, improving report clarity and data accessibility. This enhancement ensures users can fully review their accounting reports.
Original PR description
Problem: When an accounting report fills a whole page, the final row is not fully visible Steps to reproduce: 1- View a tax report that has a lot of entries that would fill the whole screen 2- Notice how the last line is not fully visible and it isn't possible to scroll and view the rest of it Solution: Correctly style the different < div > elements opw-6171555 Forward-Port-Of: odoo/enterprise#116068
Code cleanup and technical improvements
This update streamlines the process of checking user permissions for reviewing and supervising financial records. By creating helper functions, the system now more efficiently verifies if a user has the necessary roles to modify records based on their 'review_state', ensuring accurate access control and preventing potential errors.
Original PR description
Introduce two small helpers on `AccountMove`: * `_get_review_state_access_groups()` – returns the `(is_user_able_to_review, is_user_able_to_supervise)` booleans so the two `has_group` calls are not repeated across methods. * `_check_review_state_access(review_state)` – raises a `ValidationError` with a state-specific message when the current user lacks the required role to modify a record in the given `review_state`: - `'supervised'` → requires `account.group_account_manager` - `'reviewed'` / falsy → requires `account.group_account_user` - `'todo'`, `'anomaly'` → unrestricted opw-6128792
Documentation and clarification updates
This pull request implements a Corporate Legal Agreement (CLA) signature for QoQa, ensuring compliance with Odoo's contribution guidelines. The change was backported from an older version to maintain compatibility and reflects a legal requirement. This update supports a new business partner, QoQa, within the Odoo ecosystem.
Original PR description
Description of the issue/feature this PR addresses: This is the corporate CLA for QoQa. I backported #262581 because we need it from 18.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262582
This update adjusts how errors during GIF searches are logged. Previously, errors were flagged as critical issues, but this change reclassifies them as warnings – a more appropriate response as the issue isn't a fundamental problem with the software. This improves logging clarity and reduces unnecessary alerts.
Original PR description
Currently, the logger prints an error message to the terminal when an error occurs searching for GIFs on Tenor. This commit changes the logger error to a warning, since this is not an error in the codebase. sentry-7218806107
This update fixes an issue where deleting all website records would cause a website access error. The fix adds a check to ensure at least one website remains before allowing deletion, preventing a 'False' value from triggering an error and improving website stability.
Original PR description
Currently an error occurs when the user unlinks all websites and tries to access the frontend ( website). Steps to produce an error: - Install the website module - Delete external identifier…
Currently an error occurs when the user unlinks all websites and tries to access the frontend ( website). Steps to produce an error: - Install the website module - Delete external identifier default_website - Delete the My Website from Website > Configuration > Websites - An error will occur when we try to access the website. Error: `TypeError: expected string or bytes-like object, got 'bool'` This issue was generated because while setting cookies to the Werkzeug response, we got 'value' as a `False` at line [1], and the `value` is the language code from the request (see line [2]) . The language is determined by the `IrHttp` class through the `_get_default_lang` method (see code line [3]). In the website module, this method is overridden to return the language configured on the current website. However, when all websites are deleted, no valid website record remains. As a result, the method attempts to retrieve the language from an empty website, which returns `False` (see code line [4]), leading to the issue. This commit fixes the issue by preventing the deletion of all website records. The method `_unlink_except_default_website` already ensures that the default website (identified by the external ID `website.default_website`) cannot be deleted. However, if this external identifier has been removed, the safeguard no longer applies, allowing the default website to be deleted without raising any error. To address this, an additional check has been introduced: when the `default_website` is not found, the system verifies whether any website records remain using search_count. If no records are found, a `UserError` is raised to prevent the deletion and ensure that at least one website always exists. [1]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/odoo/http.py#L1825 [2]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/http_routing/models/ir_http.py#L518 [3]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/http_routing/models/ir_http.py#L407-L411 [4]: https://github.com/odoo/odoo/blob/cdf8aaec82ee387c8f29b8327efbc95fd17e2cb8/addons/website/models/ir_http.py#L288 sentry-7413005338
This update fixes an issue where portal messages were incorrectly restricted, preventing access to certain types of non-internal messages. The change ensures that internal notes remain hidden while allowing all other non-internal message types to be visible to users. This improves the overall usability of the portal.
Original PR description
*: test_mail_full Since #138233, portal messages were strictly filtered by the `mt_comment` subtype. This was intended to hide internal notes, but it incorrectly excluded other non-internal message subtypes. Basically we want the share domain (`_get_search_domain_share()`) to apply to all users in the portal. This change ensures internal notes remain hidden while allowing all other non-internal non-comment subtypes to be visible. opw-6031571 Forward-Port-Of: odoo/odoo#264431 Forward-Port-Of: odoo/odoo#263052
This update fixes an issue where the print button disappeared from PDF attachment previews in version 19 and later. The change removes a redundant setting that was hiding the print button on desktop, ensuring it's consistently visible for all users. This restores a key functionality for users to print PDF documents.
Original PR description
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained…
**Problem:** When opening a PDF attachment preview in v19+, the print button disappeared. As a result, the Print button is not accessible from the main toolbar. In v18 the buttons remained permanently visible. **Steps to reproduce:** - Open any record that has a PDF attachment in the chatter. - Click the PDF attachment to open the preview popup. - Observe toolbar buttons disappeared. **Cause:** commit responsible for this: https://github.com/odoo/odoo/commit/b7889d007f72c7e7f9f22318a9968338cde0ddb3 It was removed to prevent some bugs with some android/smartdevice and some old browsers `file_viewer.js` passes `hidePrint: true` to `hidePDFJSButtons()`. This was originally added alongside the mobile guard (`isMobileOS()`), but the `isMobileOS()` guard in `hidePDFJSButtons` already handles mobile, so the explicit `hidePrint: true` in `file_viewer.js` was redundantly hiding Print on desktop too. https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/file_viewer/file_viewer.js#L60-L71 https://github.com/odoo/odoo/blob/654a1caafc2ab7b2841c372910b2e81dc6e9c035/addons/web/static/src/core/utils/pdfjs.js#L35-L37 **Fix:** - Remove `hidePrint: true` from `file_viewer.js` since mobile is already covered by the `isMobileOS()` check inside `hidePDFJSButtons()`. opw-6216534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264739
This update resolves an issue where invoices using the 'O-service out of tax scope' tax category in Odoo failed Peppol validation. The fix ensures correct handling of this tax category, aligning with Peppol requirements and preventing validation errors. This ensures seamless integration with Peppol trading partners.
Original PR description
**PROBLEM** In peppol, there is a tax category 'O-service out of tax scope'. This tax category is used when what is invoice can't be tax (out of the tax scope). This is different from tax exemption: when using tax category O, there can't be any vat id on the invoice. This also means you can't use tax category O with other taxes, since other taxes need the vat id. Invoices generated by odoo with tax category O failed peppol validation. **STEP TO REPRODUCE** 1. install account_edi_ubl_cii_tax_extension. 2. Create a tax with tax category O. 3. Create an invoice and try validating using the file validator. 4. You should have error BR-O-02 and BR-O-05. opw-6012669 Forward-Port-Of: odoo/odoo#264081 Forward-Port-Of: odoo/odoo#254645
This update resolves an issue where Odoo was attempting to process invalid GSTR2B attachments due to missing file content. The fix ensures that attachments have both metadata and actual file data before being processed, preventing errors and improving the reliability of tax reporting.
Original PR description
There may be databases contained GSTR2B JSON attachments whose metadata was still present in `ir.attachment`, but whose underlying binary content was missing from the filestore. This caused the matching flow to attempt processing invalid JSON payloads instead of moving the return to `error_in_fetching`. The condition validating JSON attachments now also checks that the attachment raw content exists before adding it to the payload list. opw-6088082 Forward-Port-Of: odoo/enterprise#117083
This update fixes an issue where Knowledge articles appeared in a narrow, unreadable format when printed on large screens. The fix specifically targets the Knowledge editor's form view, preventing a default CSS rule from causing this layout problem. Now, articles print correctly in a standard format.
Original PR description
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size. See: ```scss .o_form_view.o_xxl_form_view { .o_form_view_container {…
Currently, a CSS rule forces the form container width to 1px to ensure that the nested list view can correctly compute its size.
See:
```scss
.o_form_view.o_xxl_form_view {
.o_form_view_container {
width: 1px; /* List view needs a width value to recompute the size correctly */
}
}
```
However, since the Knowledge editor is implemented as a form view, this rule also affects Knowledge. When zooming out, the `o_xxl_form_view` class is added to the form view container, causing the rule to apply. If an article is printed while this class is present, it is constrained to an extremely narrow column, making it unreadable.
Steps to reproduce:
1. Open an article in Knowledge
2. Zoom out using `Ctrl` + `-`
3. Open the kebab menu and select "Export"
=> The article is rendered in a very narrow column.
To address this issue, we override this rule specifically for Knowledge. With this change, articles are now rendered correctly when printed or exported as PDF.
Task-5999878
Forward-Port-Of: odoo/enterprise#103259This update corrects an issue where live chat conversations were incorrectly marked as read without user interaction. The change ensures that the chat window's focus state is properly managed, preventing unintended read-state updates and maintaining accurate conversation tracking. This improves the user experience for live chat.
Original PR description
Before this Commit: Previously, autofocusThread used an incremented autofocus value to handle re-render/reactivity cases for chat windows opened through `autoOpenChatWindowOnNewMessage`. However, this logic was too broad because it could trigger `mark-as-read` behavior even when the chat window, thread, or composer was not actually focused. This resulted in conversations being marked as read without any real user interaction. After this Commit: With this change, autofocusThread now directly reuses the chat window autofocus value instead of incrementing it, avoiding unnecessary read-state updates while still preserving the expected focus behavior. This commit also reverts the behavior introduced in: https://github.com/odoo/odoo/pull/253609 to align with the behavior implemented in: https://github.com/odoo/odoo/pull/263607 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264940
This update optimizes how Odoo retrieves country state information, specifically for invoices and sales orders in the Indonesian localization. The change avoids a slow, repeated database query, resulting in faster performance, particularly during import processes. This improves overall system responsiveness.
Original PR description
There is no need to do a query to get a random foreign state. This search can be performed many times during imports. While the query is generally not reading a lot of data, it is still doing a seq…
There is no need to do a query to get a random foreign state. This search can be performed many times during imports.
While the query is generally not reading a lot of data, it is still doing a seq scan because of the ORDER BY, while the query can be avoided completely.
```sql
EXPLAIN ANALYZE
SELECT "res_country_state"."id"
FROM "res_country_state"
WHERE "res_country_state"."code" NOT IN ('IN')
ORDER BY "res_country_state"."code", "res_country_state"."id"
LIMIT 1;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Limit (cost=84.93..84.94 rows=1 width=8) (actual time=0.450..0.450 rows=1 loops=1)
-> Sort (cost=84.93..90.49 rows=2224 width=8) (actual time=0.449..0.449 rows=1 loops=1)
Sort Key: code, id
Sort Method: top-N heapsort Memory: 25kB
-> Seq Scan on res_country_state (cost=0.00..73.81 rows=2224 width=8) (actual time=0.012..0.281 rows=2223 loops=1)
Filter: ((code)::text <> 'IN'::text)
Rows Removed by Filter: 2
Planning Time: 0.075 ms
Execution Time: 0.462 ms
```
This can be worse if when the table is not in the buffer.
Forward-Port-Of: odoo/odoo#265007This update fixes a usability issue where users could inadvertently edit the cover image, title, and subtitle of a blog post from the 'Next Post' section. The change restricts editing capabilities within this section, ensuring users only modify content within their current view and improving the overall user experience.
Original PR description
[*]: html_builder Issue: When viewing a blog post, the "Next Post" section allows editing the cover image, title, and subtitle of another post. Editing content that belongs to a different post from…
[*]: html_builder
Issue:
When viewing a blog post, the "Next Post" section allows editing the cover image, title, and subtitle of another post. Editing content that belongs to a different post from within the current one is incorrect.
Steps to reproduce:
* Open a blog post that has a "Next Post" section visible.
* Enter edit mode.
* Try to edit the cover image, title, or subtitle of the next post.
* These elements can be interacted with even though they should not be
editable.
Fix:
Make the "Next Post" section fully non-editable. The title and subtitle were already handled via content_not_editable_selectors, but the cover image could still activate builder options, allowing it to be replaced.
Introduce a new `not_activable_element_selectors` resource in the `BuilderOptionsPlugin` so that plugins can declare elements that should not trigger the builder overlay when clicked. Updated the builder to retrieve this selector list from plugin resources instead of using a hardcoded value.
task-5435878
Forward-Port-Of: odoo/odoo#249815This update corrects a problem where the 'Partner Pages List' view was incorrectly trying to modify a field added by the Mail module. This prevented the base module from upgrading properly. The fix ensures the view inherits correctly from the Mail module's version, guaranteeing the necessary field ('activity_ids') is available.
Original PR description
The `partner_pages_tree_view` was attempting to modify `activity_ids` field attributes, but this field is added by the mail module in a sibling inheritance branch…
The `partner_pages_tree_view` was attempting to modify `activity_ids` field attributes, but this field is added by the mail module in a sibling inheritance branch ([mail.res_partner_view_tree_inherit_mail]), making it unreachable from the [`partnership.view_res_partner_grade_tree`] ancestry chain:
```py
base.view_partner_tree → partnership.view_res_partner_grade_tree → partner_pages_tree_view
base.view_partner_tree → mail.res_partner_view_tree_inherit_mail ← activity_ids lives here
```
This caused a ParseError during base module upgrade:
```py
File "/home/odoo/odoo/odoo/odoo/tools/convert.py", line 639, in _tag_root
raise ParseError(msg) from None # Restart with "--log-handler odoo.tools.convert:DEBUG" for complete traceback
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
odoo.tools.convert.ParseError: while parsing /home/odoo/odoo/odoo/odoo/addons/base/views/res_partner_views.xml:13
Error while parsing or validating view:
Element '<field name="activity_ids">' cannot be located in parent view
View error context:
{'file': '/home/odoo/odoo/odoo/odoo/addons/base/views/res_partner_views.xml',
'line': 1,
'name': 'Partner Pages List',
'view': ir.ui.view(2148,),
'view.model': 'res.partner',
'view.parent': ir.ui.view(2108,),
'xmlid': 'website_crm_partner_assign.partner_pages_tree_view'}
```
**Steps to reproduce:**
- In a v19.1 db install `website_crm_partner_assign`
- Go to apps and search base module and click upgrade
**Fix:**
Make the partner view from partnership inherit from the one defined in mail instead of the one defined in base.
opw-6186684
[mail.res_partner_view_tree_inherit_mail]: https://github.com/odoo/odoo/blob/saas-19.3/addons/mail/views/res_partner_views.xml#L58C21-L67
[`partnership.view_res_partner_grade_tree`]: https://github.com/odoo/odoo/blob/f3b317310b84edb073009f7d15d7fec002f3ccf0/addons/partnership/views/res_partner_views.xml#L48-L57
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update removes a potential risk for our IoT boxes by ensuring they can never check out the main development branch (master). This change addresses a previously unnecessary and potentially harmful process, enhancing the stability and security of our IoT integrations.
Original PR description
This PR removes a possibility for an iot box to ever checkout master. Since the latest stable version policy checking out to master is never used and is dangerous
This update fixes an issue where incorrect data on payslips could trigger warnings. The change ensures that payslips with flawed information are handled more gracefully, preventing disruptions to payroll processing. This improves the reliability and stability of the HR payroll module.
Original PR description
Task: 6133111
This update resolves a technical issue related to order validation in Point of Sale, specifically for the Food Delivery Module (FDM). By extracting a key process, we now allow for more flexible order adjustments and prevent orders from being prematurely finalized when errors occur, improving reliability.
Original PR description
In order to allow patching (in particular for FDM, where we don't want to finalize the validation of the order if there is an error), we extract the waiter method. see odoo/enterprise#104468 Forward-Port-Of: odoo/odoo#244298
A previous error prevented users from searching for links within email click tracking. This update resolves the issue by correcting how the system handles link searches, ensuring accurate results when searching by short URL. This improves the reliability of our email marketing analytics.
Original PR description
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing…
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing app 2. Create a new mailing (or you can use an existing one that has some clicks) and send it 3. Make a click in the email from the recipient's side 4. Open the link tracker `click` related to that mailing (select the mailing → `Link Trackers` stat button → click on a link → `Clicks` stat button) 5. Make a search based on the Link (short_url) field Expected Behavior ------ Return the list of links that matches the entered search query. Current Behavior ------ Odoo Server Error. Cause & Solution ------ The cause of this error is that the `shor_url` field is a computed, non-stored, field, and hence, we cannot directly make a search on it. So, either we make the `short_url` a stored field, which is not so efficient, or we create our own custom `_search_..` method. Task-6131693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#263635 Forward-Port-Of: odoo/odoo#260146
This update fixes an issue where the bottom sheet wasn't consistently appearing on larger touch devices (like tablets). Previously, a dropdown was shown instead, which was visually incorrect. Now, the bottom sheet is always displayed, ensuring a consistent and user-friendly experience across all screen sizes.
Original PR description
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#264705
This update fixes an issue where the spreadsheet feature was making unnecessary server requests when displaying CRM lists. The change ensures that all required data is fetched efficiently, reducing the number of calls to the server and improving spreadsheet loading times. This results in a smoother and faster user experience.
Original PR description
How to reproduce: - Create a spreadsheet with a CRM list and only set 2 cells content A1: =odoo.list(1, 1, "id") A2: =odoo.list.header(1,"zip") - save and reload the spreadsheet and look at the server calls ⮕ web_search_read called 2 times The problem is that the datasource methods early return if the datasource is already loading without adding the field to the list to fetch. It was partially solved by explicitely adding the field to fetch in the *getter* `getListCellValueAndFormat` but not on `getListHeaderValue`. This revision ensures that we always add the field to the list to fetch in the datasource directly, this responsibility should not be held by the plugin getters. Task-6175523 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#261985
This update resolves an issue preventing non-administrator users from viewing user settings within the Odoo Enterprise platform. Previously, users lacked access to the 'Settings/Users' view, hindering their ability to manage user accounts. This change ensures all users can access essential user management features.
Original PR description
Steps:
- Create a user X with admin rights
- Connect as X
- Open Settings/Users
- Access right error
```
Failed to read field res.users.database_user_ids
You are not allowed to access 'Database User' (databases.user)
```
opw-6209241
Forward-Port-Of: odoo/enterprise#117573This update resolves a problem preventing the correct loading of icon assets (like .woff2 files) within the Odoo website. The fix ensures consistent handling of these assets, preventing errors and improving the visual appearance of the website. This improves the user experience by ensuring icons load correctly.
Original PR description
Currently, an exception is raised while loading icon content assets such as `.woff` or `.woff2`, due to a mismatch between the requested asset version and the latest available version. Steps to…
Currently, an exception is raised while loading icon content assets such as `.woff` or `.woff2`, due to a mismatch between the requested asset version and the latest available version. Steps to produce: - Install website - Open page `/web/assets/1/6a783c3/web.odoo_ui_icons.min.woff2` Error: `UnboundLocalError: cannot access local variable 'assets' where it is not associated with a value` This issue occurs because the code at [1] compares `binary.extension` with `asset_type`, causing the condition to fail because `binary.extension` contains values such as `woff` or `woff2`, while `asset_type` is set to `'binary'`. The root cause is that `asset_type` with value `'binary'` is being passed as a parameter to the `bundle.get_link` method (see [2]). The `asset_type` value comes from the `_parse_bundle_name` method (see [3]), where it is set to `'binary'` whenever the file extension belongs to `BINARY_EXTENSIONS`, such as `woff` or `woff2` (see [4]). This commit fixes the inconsistency between `bundle.get_version()` and `bundle.get_link()` when `binary` is `True`. Currently, `bundle.get_version()` used `extension if binary else asset_type`, while `bundle.get_link()` always received `asset_type`. This could lead to an incorrect redirect when handling binary assets. The fix normalizes the value by updating `asset_type` beforehand and reusing it consistently in both `bundle.get_version()` and `bundle.get_link()`. This also improves readability by removing the inline conditional expression. [1]: https://github.com/odoo/odoo/blob/8a2e001cffd381a89ab192f2e391ccc0843108c4/odoo/addons/base/models/assetsbundle.py#L166 [2]: https://github.com/odoo/odoo/blob/8a2e001cffd381a89ab192f2e391ccc0843108c4/addons/web/controllers/binary.py#L146 [3]: https://github.com/odoo/odoo/blob/8a2e001cffd381a89ab192f2e391ccc0843108c4/odoo/addons/base/models/ir_asset.py#L93-L94 [4]: https://github.com/odoo/odoo/blob/8a2e001cffd381a89ab192f2e391ccc0843108c4/odoo/tools/constants.py#L6-L7 Sentry-7441025709
This update resolves a problem that prevented upgrades when a module modified tax account tags within the chart of accounts. The fix replaces a problematic function call with a simpler parsing method, ensuring the upgrade process completes successfully and avoids data inconsistencies. This improves the stability and reliability of the system.
Original PR description
When a module depends on `l10n_account_withholding_tax` and updates tax account tags on the chart of accounts, the upgrade fails. `_withholding_tax_get_demo_account_ref` calls `_get_account_tax`, which calls `_deref_account_tags`, throwing an error due to missing tags in the database since the deref tags function dri. This occurs because the depening module tags has not updated yet as it needs to be triggered by the user post upgrade. This fix uses `_parse_csv` instead to avoid calling `_deref_account_tags` and triggering the issue. task-4967527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update addresses a problem where translations weren't loading correctly due to a change in the Markupsafe library. The fix ensures translations are properly evaluated, maintaining compatibility with older Odoo versions while supporting the latest Markupsafe 3.0.0 used in our systems.
Original PR description
In Markupsafe 3.0.0, a refactoring [^1] aiming at simplifying speedups implementation had an impact on the encapsulated templates introduced in commit odoo/odoo@aab7b846cdb8e77701c5e84e81d9c95bd9cd0894. More precisely, the eventual subtitles containing most of the time lazy translation, those were not evaluated in the right context anymore leading to being unable to find the lang to translate into. This commit fixes it by forcing the evaluation of the translation at a point were the context makes sense and contains the right lang when using Markupsafe 3.0.0+ (used in Ubuntu Resolute), while maintaining compatibility with 2.1.5 (used in Ubuntu Noble and Debian Trixie). [^1]: https://github.com/pallets/markupsafe/commit/dcb170b127137880729ac66f03cb590fff562225
This update allows Invoicing Administrators to delete or modify reconciled lines in the accounting system, resolving a previous restriction. The change ensures consistent access control based on the line's review state, aligning with existing accounting rules. This improves flexibility and efficiency for users managing invoices.
Original PR description
Deleting or editing a reconciled line raised "Validated entries can only be changed by your accountant." for Invoicing Administrators because the check only tested `group_account_user`, which is not granted by the Invoicing privilege chain. Delegate to `AccountMove._check_review_state_access()` to apply the same rules as `account.move`: - `'supervised'` → requires `group_account_manager` - `'reviewed'` → requires `group_account_user` or `group_account_manager` - `'todo'` / `'anomaly'` → no restriction opw-6128792
This update removes unnecessary progress reporting from Odoo's automation and autovacuum processes. This prevents the job scheduler from incorrectly assuming tasks are complete, which could lead to redundant and failed retries. The change ensures the scheduler operates more reliably and efficiently.
Original PR description
Base automation and autovacuum should not log progress as this is makes the job scheduler think that something progresses and can be retried leading to the same error because we process the same (all) items. In general, progress numbers are only relevant for jobs that act as job queues. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264684