Thursday, August 21, 2025
29 changes · saas-18.4
Enhancements to existing features
The Point of Sale screen now displays the standard Odoo favicon in the browser tab. This makes the POS interface easier to recognize and keeps it visually consistent with the rest of Odoo.
Original PR description
Before this commit: ==================== The POS UI did not display a favicon in the browser tab. After this commit: ================== The standard Odoo Point of Sale favicon is now displayed in the browser tab for the POS UI, consistent with the backend interface. Task-4978320 Forward-Port-Of: odoo/odoo#223528
This update adds automated checks for the Point of Sale loyalty features, including loyalty cards, rewards, order handling, payment, and related screens. These tests help reduce the risk of regressions in gift cards, loyalty rewards, and customer-facing checkout flows during future updates.
Original PR description
In this commit: ======================= - Added HOOT tests for the `pos_loyalty` module. - Included tests for main models like `loyalty.card` and patched models: `pos.order` and `pos.order.line`. - Added tests for popups and screens related to loyalty features. task - 4945628 Forward-Port-Of: odoo/odoo#221182
Resolved issues and error corrections
This update corrects invalid formatting in delivery reports that could disrupt the report editor. Businesses should see more reliable delivery report editing and rendering, with no expected change to day-to-day workflows.
Original PR description
because of odoo/odoo#169512, there was some illegal html generated in the delivery report. Indeed a <div> in a <p> is not supported. This created issues in the reportEditor, and possibly elsewhere 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#223452 Forward-Port-Of: odoo/odoo#223158
Miscellaneous changes
Render a template using record that the current user as no access to. While rendering the template QWeb fail with a AccessError exception, that exception is wrapped inside a QWebException and catch by `ir.http._handle_error`. In `http_routing` a custom template is rendered for every common errors, including AccessError. Fine-tuning of 2ef1ae4, unwrapping the QWebException must be done independently of the other `isinstance`s. Description of the issue/feature this PR addresses: Current b
Original PR description
Render a template using record that the current user as no access to. While rendering the template QWeb fail with a AccessError exception, that exception is wrapped inside a QWebException and catch by `ir.http._handle_error`. In `http_routing` a custom template is rendered for every common errors, including AccessError. Fine-tuning of 2ef1ae4, unwrapping the QWebException must be done independently of the other `isinstance`s. 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#214378
Updating a parent partner no longer incorrectly raises an error when one related contact has an empty VAT value and the other has no VAT value. This prevents unnecessary blocking of partner updates while still protecting accounting consistency.
Original PR description
An error exists if we update the parent partner and the the VAT number does not match with the child partner to prenvent inconsistencies between journal item created before the change. This error is also triggered when one partner vat is '' and the other is False. This commit aims to fix that. opw-4915851 Forward-Port-Of: odoo/odoo#223413 Forward-Port-Of: odoo/odoo#223022
This fix restores the Australian tax setting so GST-only import taxes are treated as fully included for customs purposes. This helps ensure import-related tax amounts are calculated and reported correctly for Australian accounting.
Original PR description
It was price_include before and got removed with the changes from https://github.com/odoo/odoo/commit/be308e106ce9699f99efe133976c40519d6128f9 Re-add them 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#223372 Forward-Port-Of: odoo/odoo#223260
Payment methods set up at a parent company now appear correctly when viewing partner contact forms from a child branch. This prevents branch users from missing existing payment options and helps keep payment setup consistent across company structures.
Original PR description
In this bug, the payment method is not shown in the child branch. To reproduce: 1- Create a db with account and contact app installed 2- Create a company and a branch 3- Create a payment method in parent company and add it to contact form of a partner 4- Go to child branch. You can see the payment method is not shown in the contact form. opw-4920219 Forward-Port-Of: odoo/odoo#223598 Forward-Port-Of: odoo/odoo#219448
Cart notifications now omit the unit of measure when a product only has one available unit. This keeps the shopping experience cleaner by avoiding information that does not help customers make a decision.
Original PR description
If there aren't multiple uoms defined on the product, there is no need to display the uom in the cart notification. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website builder now shows the correct names for the “Bold 1” and “Bold 2” text highlight options. This fixes an empty label in the highlight picker, making the editing experience clearer for website users.
Original PR description
With the initial [website builder refactor], there was a typo in the keys for the names of the bold highlights. This commits fixes the typo, so that the keys in `highlightIdToName` match the ones in `textHighlightFactory` Steps to reproduce: - Open website builder - Select text, in the expended toolbar, add highlight - Select the "Bold 1" or "Bold 2" highlight (these are the last ones) - Bug: the picker shows an empty button instead of the highlight's name [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
The website builder now avoids unnecessarily reloading the Instagram Page snippet when visibility settings are changed. This keeps the snippet visible and provides a smoother editing experience, especially in Firefox.
Original PR description
> 2. Instagram Snippet Flickering when changing visibility settings from "Conditionally" to "No Condition" (Firefox Browser) With the initial [website builder refactor], the instagram snippet's iframe reloaded when an option was changed on its container. By implementing `shouldStop` to check if the url of the iframe changed, this commit prevents reloads on changes on other options. Steps to reproduce: - Open website builder - Drop the "Instagram Page" snippet (in "Social" category) - Change the "Visibility" to "Conditional" - Bug: the snippet becomes blank during a short time [website builder refactor]: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
This fixes a display issue where collaborator avatars could overlap form status buttons while scrolling through long records. The status area now stays clear and only shows its scroll shadow when needed, making collaborative editing easier to use.
Original PR description
User avatars displayed in collaborative mode overlap with buttons when scrolling. This commit extends the statusbar to take the full width, independently of the sheet's one. Also, to avoid an ugly shadow when not scrolling, it only adds it when the scroll is actually performed. Steps to reproduce: - open a task with two users - write in the description in collaborative mode -> user avatars should be displayed - make sure the description is long enough for the sheet to scroll - scroll for one of the avatars to reach the sticky statusbar => overlap between the avatar and the statusbar task-4907797 Forward-Port-Of: odoo/odoo#223196
Website editors can once again adjust the size of primary and secondary buttons without switching to custom button settings. This makes button styling easier and improves the editing panel by centering labels for a cleaner experience.
Original PR description
Before this commit, the user could only change the size of a button by using the "custom" settings. I was not allowed for the "primary" or "secondary" button types. This commit restores the sizing option for these buttons. This commit also improves the UI by centering the labels. task-4367641
This fixes an issue in the HTML editor where changing a snippet's color preset could accidentally remove its background image. Users can now adjust color styling without losing previously selected imagery, preserving page design work.
Original PR description
[FIX] html_editor: do not remove background image when switching o_cc Steps to reproduce: - Add a snippet. - Set a background image. - Set a color preset (first tab of the colorpicker). - Change the color preset. -> The background image is removed The goal of this commit is to fix a small error introduced by [this one]: `styleWithoutGradient.backgroundImage` is always `none` at this step as we remove the `background-image` property before computing `styleWithoutGradient`. [this one]: https://github.com/odoo/odoo/commit/d013db1f43a411a8ae32989a4fbe0d9c5b6c54ce Related to task-4367641
Point of Sale now records clearer details about order lines and payments when mismatches occur. This helps support teams identify the cause of order issues faster, reducing investigation time without changing the checkout experience.
Original PR description
Before this commit, in case of a mismatch it was difficult to identify the root cause since the logs did not show which lines or payments were added to the order. opw-4954736 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223266
Fixes an editor issue where creating a new paragraph after a manual line break could make the previous paragraph lose its visible spacing. This helps users keep intended formatting when editing website or HTML content.
Original PR description
Problem: When at the end of a paragraph, pressing SHIFT+ENTER followed by ENTER creates a new paragraph, but the previous one loses its last line break. Cause: When splitting an element, the `<br>` at the selection point is moved to the newly created split element. However, to render an empty line visibly, two `<br>` elements are needed. Moving the existing `<br>` makes the last line break in the original paragraph invisible. Solution: In this special case, instead of moving the `<br>` at the selection point, insert a new `<br>` in the new element, preserving the visual line break in the original paragraph. Steps to reproduce: - Add a paragraph - Type some text, then press SHIFT+ENTER - Press ENTER to create a new paragraph -> The last line break in the first paragraph is lost opw-4987922 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221869
Purchase replenishments will no longer reuse an existing purchase order when its project does not match the new procurement. This prevents purchases from being incorrectly grouped under the wrong project, keeping project-related purchasing records accurate.
Original PR description
Steps to reproduce: - Create a storable product: - Vendor: Azure Interior - Routes: MTO + Buy - Click on the replenishment button → a purchase order is created - Open the PO and set a project - Replenish the product again Problem: The first purchase order is reused even though it has a project, while it should not. Solution: When searching for a candidate purchase order, ensure that the `project_id` matches the procurement values: - A PO with a project can only be reused for procurements with the same project. - A PO without a project can only be reused for procurements without a project. opw-4976606 Forward-Port-Of: odoo/odoo#223422
The web interface now shows a helpful "start typing" message when a relational dropdown has no available results and create/edit is disabled. This prevents flickering and gives users clearer guidance instead of an unstable empty menu.
Original PR description
Before this commit, the m2x dropdown flickered when the option "create and edit" was disabled and there was no data. Now, we display at least the "start typing" message. task-4920761 Forward-Port-Of: odoo/odoo#222746
This fixes unstable automated tests around sending chat messages after typing commands. The change helps ensure test results are consistent, reducing false failures in mail and live chat areas without changing customer-facing behavior.
Original PR description
\* = crm_livechat, im_livechat Enter after typing a command will either send the message when the suggestion list is not opened yet, or select the suggestion. This can either be fixed by waiting for the suggestion list to be opened, closing it, and then pressing enter, or by simply clicking on the send button which is what is done here as the way the message is sent is irrelevant for these tests. https://runbot.odoo.com/odoo/runbot.build.error/230977 https://github.com/odoo/enterprise/pull/92772
This update fixes checks around file uploads across several Odoo Enterprise apps so the system consistently recognizes when files are being added. This helps prevent upload-related errors in comments, helpdesk knowledge articles, spreadsheets, WhatsApp messages, and attachment previews.
Original PR description
\* = knowledge, test_mail_enterprise, test_spreadsheet_edition, website_helpdesk_knowledge, whatsapp Enterprise counter-part. https://runbot.odoo.com/odoo/error/230901 https://github.com/odoo/odoo/pull/223367 Forward-Port-Of: odoo/enterprise#92697 Forward-Port-Of: odoo/enterprise#92620
Setting a Pricer Sales Pricelist on a product variant no longer triggers an error. This helps users configure product pricing smoothly, including while working with newly created product records.
Original PR description
Steps to Reproduce: ---------------------------------- - Open the product variant form - Set the Pricer Sales Pricelist field - Traceback Issue: ---------------------------------- - `TypeError: ProductPricelist._compute_price_rule() takes 3 positional arguments but 4 were given` Cause: ---------------------------------- - `_get_product_price()` was calling `_compute_price_rule()` with positional args instead of named quantity - If the product record is not yet created (`product._origin` is False), it skips price computation logic Fix: ---------------------------------- - Pass `quantity=1.0` explicitly to `_compute_price_rule()` to resolve the argument mismatch - Handle case where `product._origin` is False by falling back to `product` itself Task-4888983 Forward-Port-Of: odoo/enterprise#88321
Fixed an issue where document sharing email previews or sent emails could break when a company logo was present. This ensures shared folder notifications work reliably and present the company branding as expected.
Original PR description
94fe1cd1ff066e2238b33b885e102c01c0bd7241 introduce a new mail template for document sharing, replacing the `message_notify` function. The issue is that the logo's `alt` attribute expects the `documents.access` model to have a `create_uid` field, which doesn't exist. This is reproducible in the runbot by either previewing the `documents.mail_template_document_share` template or by sharing a folder after a company logo has been added. opw-5011444
The Belgian payroll accounting setup no longer fails when a specific mobility budget salary rule is missing. This helps companies install or update accounting smoothly, especially on older databases or where that rule was removed.
Original PR description
Currently an issue occurs when the user tries to install `10n_be_hr_payroll_account/account` after follow steps: - Install `l10n_be_hr_payroll` and switch to `BE Company CoA` - Go to Payroll > Configuration > Salary > Rules - Delete `Mobility Budget Special Contribution` - Error occurs when trying to install accounting error: `ValueError: External ID not found in the system: l10n_be_hr_payroll.cp200_employees_salary_mobility_budget_tax` The salary rule mentioned above steps was added with commit [1], and the issue also occurs if the database was created before commit [1] with a module `l10n_be_hr_payroll` and the user tries to install the account after commit [1]. This commit fixes the issue by using `raise_if_not_found=False`, which prevents an error from being raised when the salary rule is missing. [1] - https://github.com/odoo/enterprise/commit/16c8a223beda4e4ebcf2c24f716687726f7230f3 sentry-6578747340 Forward-Port-Of: odoo/enterprise#84578
The French VAT report export has been updated to use the 2025 reporting version. This keeps the report aligned with the latest French tax filing requirements and avoids automated validation failures, without changing the VAT export content itself.
Original PR description
The version for 2025 is out. As far as we can see, the changes don't concern the export of VAT report. So we just change the value to 2025. (2024 non blocking for prod is still accepted in 2025 but it fails for the server test). task-4617663 Forward-Port-Of: odoo/enterprise#92676 Forward-Port-Of: odoo/enterprise#92542
Fixed an issue where previewing a sales order could fail after switching from a subscription quotation template to a regular one. This prevents an error screen and lets users preview non-subscription quotes normally, even when subscription billing details are absent.
Original PR description
Steps to reproduce: 1. Go to Sales > Configuration > Settings. 2. Set Subscription Template as default Quotation Template e.g.(Yearly Cleaning) 3. Create a new Sales Order 4. Switch the quotation…
Steps to reproduce:
1. Go to Sales > Configuration > Settings.
2. Set Subscription Template as default Quotation Template e.g.(Yearly Cleaning)
3. Create a new Sales Order
4. Switch the quotation template from a Subscription one to a non-subscription template e.g.(Office Furnitures)
5. Click Preview on the Sales Order.
Issue:
A traceback is raised:
`TypeError: unsupported operand type(s) for +: 'datetime.date' and 'bool'`
Cause:
In the portal template, the following expression is evaluated without checking if value is falsy or empty:
https://github.com/odoo/enterprise/blob/36f419e4604a2adc946f3a6828e69fba7584d2df/sale_subscription/views/sale_subscription_portal_templates.xml#L66
When sale_order.plan_id.billing_period is False, the expression fails because a datetime.date cannot be added to a bool.
Solution:
Added a conditional check to ensure that billing_period is truthy before performing the addition:
`<t t-if="sale_order.plan_id.billing_period"
t-set="modal_max_pause_time"
t-value="modal_start_time + sale_order.plan_id.billing_period"/>`
opw-4980869Currently an exception is generated due to the variables translated into the `Spanish (Latin America)` language. `KeyError: 'tipo'` This commit fixes the issue by using the original variable name instead of translated terms. sentry-6046430921 Forward-Port-Of: odoo/enterprise#92716
Original PR description
Currently an exception is generated due to the variables translated into the `Spanish (Latin America)` language. `KeyError: 'tipo'` This commit fixes the issue by using the original variable name instead of translated terms. sentry-6046430921 Forward-Port-Of: odoo/enterprise#92716
This fixes a timing issue that could affect sending messages with the Command + Enter keyboard shortcut in Discuss and website live chat helpdesk areas. The change helps prevent intermittent failures, making message sending more dependable for users and support teams.
Original PR description
\* = test_discuss_full_enterprise, website_helpdesk_livechat Enterprise counter-part. https://runbot.odoo.com/odoo/runbot.build.error/230977 https://github.com/odoo/odoo/pull/223601
Odoo Studio now handles buttons whose linked server action has been deleted. Instead of showing an error, the button editor can open normally, reducing disruption for users customizing forms.
Original PR description
The error is triggered when a user configures a button to execute a serveraction, deletes the associated server action, and then attempts to edit the button. This causes a failure at the line `self.env.ref(str_action)` due to the missing external ID. **Steps to reproduce:** * Install `crm` and `web_studio` * crm > Form View> Studio > `Add a button`> Run a server Action > Enrich * Settings > Technical > Actions > Server Actions > `Enrich` > Delete it * crm > Form View > Studio `ValueError: External ID not found in the system: crm_iap_enrich.action_enrich_mail` **Solution:** * Return `False` when the referenced server action cannot be found or has been removed. **Sentry-6608495874** Forward-Port-Of: odoo/enterprise#92683 Forward-Port-Of: odoo/enterprise#89218
This fix prevents the restaurant preparation display from crashing when a setup has only one stage and staff mark it as Reset or Done. It helps restaurants using simplified workflows keep orders moving without interruption.
Original PR description
This error occurs when we try to mark a single stage as `Reset` or `Done` in the preparation display. Steps to reproduce: --- - Install the `pos_restaurant` module - Create a New `Preparation Display` with one stage - Open `Preparation Screen` - Now `Reset` or `Done` the stage in the other tab Traceback: --- `IndexError: tuple index out of range` At [1], an error occurs because it tries to access a `position` that doesn't exist in the tuple. This happens because at [2], the code attempts to retrieve the second-to-last (-2) stage position, but only one stage is being used. [1]- https://github.com/odoo/enterprise/blob/285cca92a52f7b79de1d020558aa9b116cd7e44a/pos_enterprise/models/pos_prep_stage.py#L21-L22 [2]- https://github.com/odoo/enterprise/blob/285cca92a52f7b79de1d020558aa9b116cd7e44a/pos_enterprise/models/pos_prep_state.py#L72 sentry-6681171781 Forward-Port-Of: odoo/enterprise#87098
The link to Six payment setup instructions in the POS payment provider settings has been fixed. Users can now access the right documentation directly, reducing confusion during payment terminal configuration.
Original PR description
Before this commit: ------------------- - The Six documentation link in the POS payment provider configuration was broken, leading to a poor user experience. After this commit: ------------------ - The Six documentation link has been corrected to ensure proper access to setup instructions. Task: 4797691 Forward-Port-Of: odoo/enterprise#91974