Monday, May 4, 2026
23 changes · 19.0
Enhancements to existing features
This update adds clearer logging and performance checks around the long-polling controller used by connected hardware devices. It helps teams spot slow responses or operational issues more easily, improving maintainability without changing user-facing workflows.
Original PR description
This PR adds logging and performance check for the longpolling controller Related PR for >= saas-18.3: https://github.com/odoo/odoo/pull/241467 Forward-Port-Of: odoo/odoo#242637 Forward-Port-Of: odoo/odoo#241469
Brazilian demo records for products and company information were updated to make test scenarios more accurate. This helps teams validate Brazil localization behavior using more realistic sample data without changing live business workflows.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the accuracy of the Brazil demo data within the Odoo Enterprise system. The changes ensure that testing of the l10n_br_avatax module reflects current Brazilian tax regulations and business practices. This enhances the reliability of testing and demonstration for potential users.
Original PR description
Updated Brazil Product and company demo data to ensure accurate testing task-6159933
Resolved issues and error corrections
Thai withholding taxes now skip automatic tax closing entries by default. This prevents unnecessary accounting entries because these taxes are handled through separate payable accounts and PND forms.
Original PR description
Set tax closing entry to False by default for WHT taxes, as WHT uses separate payable accounts and does not require closing entries. task-6146195
Opening an employee profile from the Discuss avatar popover now avoids logging an unnecessary access error when the employee belongs to a company that is not currently active for the user. This reduces confusing error noise while preserving the intended profile access behavior.
Original PR description
Steps to reproduce: Create a user and a related employee in the first company Create a second company and remove the first company from the active companies Go to Discuss > #general and open the sidebar Click on the newly created user to open the avatar popover Click on "View Profile" This issue is caused by the fact that the employee record is passing the ACL from the server but the context does not contain the correct allowed_company_ids. Current behaviour: Clicking "View Profile" opens the employee record, but an access error is simultaneously logged. Expected behaviour: Opening the profile should either successfully display the record without logging an access error. task-6074597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale now removes an unfinished opening-control session when a user closes the browser tab or navigates away. This prevents leftover sessions from appearing and reduces confusion for staff managing POS openings.
Original PR description
When the user closes the browser tab or navigates away after a session in opening_control, the session is not deleted and it causes confusion. opw-6114420 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#261207 Forward-Port-Of: odoo/odoo#258933
The Projects task list now correctly limits results to template tasks and their related subtasks when the Templates filter is used. This prevents regular project tasks from appearing in filtered views, making task organization clearer and more reliable for users.
Original PR description
Steps to reproduce: - 1. Open a project and view its tasks. 2. Apply the "Templates" filter from the search view. Issue: - Both normal tasks and template tasks are displayed. Only template tasks (and descendants of template tasks) should be shown. Cause: - In `project_task_model_mixin.js`, `_processSearchDomain` rebuilds the template domain as `OR(has_template_ancestor = True, Domain.TRUE) when `default_project_id` is in context. So the OR collapses to TRUE and all template filtering is lost, so every task of the project is shown. Fix: - Use `Domain.FALSE` instead of `Domain.TRUE`. task-6116833
This fix makes time off updates handle validation errors consistently with time off creation. It helps prevent confusing failures when employee leave records are changed, improving reliability for HR workflows.
Original PR description
this commit, in this PR:https://github.com/odoo/odoo/pull/242299 the create method was refactored to wrap only the _create_all_new_leave call in a try/except block, ensuring that ValidationError is caught at the correct. Task-6179171
The Unsplash image upload flow now grants elevated access only for setting the image URL, instead of applying it to the full attachment creation process. This keeps the same employee upload experience while reducing unnecessary permissions and simplifying the implementation.
Original PR description
Only grant `sudo` to set the attachment `url` rather than applying sudo on the whole `.create` dict The purpose of the previous `_can_bypass_rights_on_media_dialog` was to allow employees uploading unsplash images to be able to create an attachment with an `url` while being a `type='binary'`, for the images to be able to be served with the URL `/unsplash/...`. Just applying `sudo` at the right needed spot rather than on the whole `create` requires less code to achieve the same goal. Forward-Port-Of: odoo/odoo#261358 Forward-Port-Of: odoo/odoo#261056
This fixes how zero-priced products appear on the website when sales of zero-priced items are blocked. The product page no longer shows incorrect price text or an empty purchase box, giving shoppers a cleaner and less confusing experience.
Original PR description
When `Prevent Sale of Zero Priced Products` is enabled and a product with a sales price of `0` is opened on the website, switching the purchase style to `Box` causes the price text to render…
When `Prevent Sale of Zero Priced Products` is enabled and a product with a sales price of `0` is opened on the website, switching the purchase style to `Box` causes the price text to render incorrectly. Steps to produce: --- - Install the `website_sale` module. - Go to Settings and enable `Prevent Sale of Zero Priced Products`. - Create a product with a sales price of `0` and publish it. - Open the product on the website. - Open the editor and change the purchase style to `Box`. Issue: --- - The price text renders incorrectly inside the box. Root Cause: --- - At [1], the `<span>` element responsible for rendering the price text does not check whether zero-price sale prevention is enabled, causing the price string to appear regardless. - At [2], after hiding the price span, the `o_wsale_cta_wrapper` element still renders an empty box because no corresponding guard exists there either. Solution: --- - Add a conditional check on the price `<span>`: apply `d-none` when zero-price sale prevention is active, so the price string is not displayed. - Also, add the same zero-price sale prevention check on `o_wsale_cta_wrapper` to avoid rendering an empty box when no price is shown. [1]https://github.com/odoo/odoo/blob/71d176d462b9db743788e4889974931ae9afc94d/addons/website_sale/views/templates.xml#L2233 [2]https://github.com/odoo/odoo/blob/71d176d462b9db743788e4889974931ae9afc94d/addons/website_sale/views/templates.xml#L2221 Before: --- <img width="1488" height="689" alt="image" src="https://github.com/user-attachments/assets/5b3a565f-5ced-4d75-b538-63abc3690e09" /> After: --- <img width="1457" height="612" alt="image" src="https://github.com/user-attachments/assets/1e04fe54-98b6-4e1c-bd26-4d56bb34b90e" /> opw-5994812 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252666
Purchase and inventory test tours now use a shared way to open apps that works in both Community and Enterprise setups. This prevents automated checks from failing when Enterprise addons are not installed, improving release reliability without changing user-facing behavior.
Original PR description
The tours: - `test_basic_purchase_flow_with_minimal_access_rights` - `test_basic_stock_flow_with_minimal_access_rights` fail to perform the first step if enterprise is not in the addons path since the app icons are not in the the main view. Fortunately, a general util is already present to perform the task of opening the app in both community and enterprise builds: https://github.com/odoo/odoo/blob/e258de4235b4872e0427017e22b46495080c25dc/addons/web_tour/static/src/tour_utils.js#L81-L101 https://github.com/odoo/odoo/blob/e258de4235b4872e0427017e22b46495080c25dc/addons/web_tour/static/src/tour_utils.js#L36-L43 runbot-240934 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The calendar now avoids sending invitation notifications when attendees are added to events that already happened. This prevents confusing or unnecessary messages for past meetings while keeping normal invitations unchanged for upcoming events.
Original PR description
Backport of fix in 19.0 (https://github.com/odoo/odoo/pull/259844) Prevents invitations to be triggered when adding new attendees to an event in the past. OPW-6125052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262189 Forward-Port-Of: odoo/odoo#260050
The pull request fixes an internal validation check so Odoo app listings can include price, currency, and support information without being incorrectly flagged. This helps ensure app store metadata used for commercial listings passes automated checks as expected.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256726 Forward-Port-Of: odoo/odoo#255857
This update fixes an issue where closed Helpdesk emails incorrectly displayed the ticket's database ID instead of its reference number. The change ensures that all customer communications consistently use the correct ticket reference, improving clarity and accuracy in tracking. This was a simple fix to a template configuration.
Original PR description
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the…
Steps to reproduce: ------------------------ 1. Install the Helpdesk. 2. Go to Settings → Technical → Sequences and set the next number to 100. 3. Create a ticket and send a message using the "Helpdesk: Ticket Received" mail template; Observe that the correct reference (100) is used. (Open the full composer to use "Load template") 4. Now send a message using the "Helpdesk: Ticket Closed" mail template and Observe that it displays the database ID (e.g., 1) instead of the reference. Cause: ------ `new_ticket_request_email_template` uses the ticket reference(`object.ticket_ref`) correctly. https://github.com/odoo/enterprise/blob/d39e291ba89ad018ba6f5f9591d280a834822f27/helpdesk/data/mail_template_data.xml#L18-L19 However, the `solved_ticket_request_email_template` uses the database ID (`object.id`) instead of the actual ticket reference (`object.ticket_ref`), leading to inconsistent references in customer communications. related commit: 3ed5273 Solution: --------- Update `solved_ticket_request_email_template` to use `object.ticket_ref` instead of `object.id` opw-6087466 Forward-Port-Of: odoo/enterprise#114852 Forward-Port-Of: odoo/enterprise#113932
This update addresses a confusing issue where a Point of Sale session would remain active even after the user closed their browser tab. The change ensures that sessions are properly terminated when the user navigates away, improving the user experience and preventing potential data inconsistencies. This resolves a reported problem (opw-6114420).
Original PR description
When the user closes the browser tab or navigates away after a session in opening_control, the session is not deleted and it causes confusion. opw-6114420 Forward-Port-Of: odoo/enterprise#115056
This update resolves an issue where incorrect pivot IDs were used in purchase and vendor dashboards. The fix ensures accurate data representation within these reports, improving the reliability of key business insights related to purchasing and vendor management. This change enhances the accuracy of the dashboard data.
Original PR description
This commits fixes the pivot id in some formulas. Task: 5875749
This update adjusts the default date range for the Lead and Pipeline dashboards to 'Last 30 days'. This change ensures users consistently see the most recent data, providing a clearer and more accurate view of sales performance. It's a minor improvement to dashboard usability.
Original PR description
This commmit fixes the date filter default value to `Last 30 days`. Task: 5902231
This update adds logging of Amazon's SP-API request identifiers to help support teams quickly troubleshoot issues with Amazon integrations. Previously, missing this information slowed down investigations and increased resolution times. This change enhances the efficiency of support for our Amazon-related features.
Original PR description
Each response from Amazon's SP-API includes a request identifier used by their support team for debugging. This identifier was not previously logged, making support investigations more difficult. Forward-Port-Of: odoo/enterprise#114483
A technical error prevented importing emissions data through the system's import feature. This update restricts imports to manual emissions data, resolving a database conflict issue related to journal entry emissions. This ensures data integrity and proper reporting within the ESG carbon emission reports.
Original PR description
The import button is present in the Emitted Emissions menu, but it produces the following error: "cannot insert into view 'esg_carbon_emission_report' DETAIL: Views containing UNION, INTERSECT, or EXCEPT are not automatically updatable." => To fix this, we will only allow the insertion of manual emissions (model: other.emission) via import, not emissions related to journal entries. task-6168587 Forward-Port-Of: odoo/enterprise#115306
This update fixes an issue where OCR software misinterpreting invoice data, specifically when 'Single Invoice Line Per Tax' was enabled. The change now uses account and tax information for labeling, resulting in more accurate data extraction and reducing errors in invoice processing. This improves the reliability of our invoicing system.
Original PR description
Previously, when a user enabled 'Single Invoice Line Per Tax', the tax group contained the partner name and date. However, the OCR would sometimes misclassify the partner name, resulting in random text appearing in the label. To fix this, we decided to use the account name and tax as the label instead. task-6159843
This update resolves an issue where the 'data_cleaning' module incorrectly removed the delete option from the attachment list view after installation. The change prevents the module from overriding the default view order, restoring the original functionality. This ensures users can always delete attachments as expected.
Original PR description
Steps: - Enable debug mode - Go to Attachments view (list) - Select several items - Actions -> You have delete - Install `data_cleaning` - Do the same - Actions -> You don't have delete anymore Context: - `IrUiView` has 16 by default for `priority` field and order set as `priority,name,id`. - `IrAttachment` has a default view with no name, so `ir.attachment` is taken by default. - `data_cleaning` creates a view named `Storage Detail` with no priority specified (so 16 by default) on model `ir.attachment`. That makes the `ir.attachment` view from `data_cleaning` before the original one if we use the order "priority,name,id", as both of them have 16 in priority and `Storage Detail` is before `ir.attachment`. This commit restore the previous behaviour by preventing `data_cleaning` from overriding original `ir.attacmhent` view. opw-6149907
This update corrects a technical issue where translations for the Netherlands returns module (l10n_nl_returns) were missing in the system's translation files. Adding these translations ensures accurate and localized functionality for our Dutch-speaking customers. This resolves a potential problem with incorrect display or functionality related to returns processing.
Original PR description
This [commit](a6a8d121bbf2044793df5211c5bdb18859a62152) introduced a new module in a stable version (19.0) without the required key in the `.weblate.json` file. This commit aims at fixing that to ensure translations are handled correctly.
This update resolves a rejection issue with payroll exports to the Mexican SAT (tax authority). When payslips only include 'OtrosPagos', the SAT incorrectly flagged the data due to a requirement in the NOM36 XML format. The fix ensures the 'TotalPercepciones' attribute is omitted when this scenario occurs, aligning with tax regulations.
Original PR description
When a payslip contains only OtrosPagos (no perceptions), the SAT rejects with NOM36 because TotalPercepciones must not exist per the nomina12 XSD. This is a valid scenario under LISR articles 93 and 94, where certain payments (e.g., viáticos, becas, fondo de ahorro patronal) do not constitute taxable salary income. Apply the same 'or None' pattern already used for TotalDeducciones, so format_float(None) returns None and the attribute is omitted from the XML.