Wednesday, July 16, 2025
12 changes · saas-18.2
Resolved issues and error corrections
This fix stops users from creating incomplete email templates when configuring recruitment stages. It prevents errors when moving applicants into a stage that uses such a template, making the recruitment workflow more reliable.
Original PR description
An error occurs when a user quickly creates a template for a stage, bypassing the validation of the `Applies to` field. As a result, an error is triggered when the user selects a stage that uses that template. **Steps to reproduce:** * Install `hr_recruitment` * hr_recruitment>Configuration>Stages>stage named `New`>Quick Create a mail template with random name and save. * Applications>All Applications>New application>Set stage to `New` `KeyError:False` **Solution:** * Disable quick create as to prevent creating mail templates with empty model ids. **Sentry-6675399135** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214195
Live chat chatbot steps now remove old answer options when a question-style step is changed to another type and saved. This prevents outdated choices from staying attached to the step, keeping chatbot flows cleaner and less confusing for operators and visitors.
Original PR description
**Current behavior before PR**: When the step type was changed from "question selection" to another type and the step was saved, answers were not cleared. **Desired behavior after PR is merged**: Now, when the step type is changed from "question selection" to any other type and the step is saved, the answers are cleared. **task**-[4510555](https://odoo.com/odoo/all-tasks/4510555) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195698
Regular users can now filter email templates by category without being blocked by an access error. This prevents a disruption when choosing templates while sending sales or purchase emails, making the workflow smoother for everyday users.
Original PR description
Since commit 42be7cebc84ac4af36104b6d2eba9d3e5d115005, filtering mail templates on their category triggers a search on `ir.model.data` to avoid a memory error on a database having a lot of mail…
Since commit 42be7cebc84ac4af36104b6d2eba9d3e5d115005, filtering mail templates on their category triggers a search on `ir.model.data` to avoid a memory error on a database having a lot of mail templates. However, regular users don't have a read access to this model, so when a user tries to filter on the template category, they get an `AccessError`. With this commit, we add a `sudo()` on the search on `ir.model.data`, so that this error doesn't occur any more. To reproduce the issue on a runbot, follow these steps: - connect as *demo* on a 18.0 database - open a *Sale Order* or a *Purchase Order*, and click on *Send by email* - in the modal dialog, click on the vertical three dots to select a template - if *Search More...* is not available, save the template several times with different new names until *Search More...* appears on the list - click on *Search More...* - in the *Search...* field, click on one of the *Base Templates* or *Custom Templates* filters - boom! `Access Error, You are not allowed to access 'Model Data' (ir.model.data) records.` Forward-Port-Of: odoo/odoo#219034
Repair order lists now show the correct translated labels when records are grouped together. This prevents confusing or untranslated text from appearing for users working in different languages.
Original PR description
The `_()` function doesn't work in listcomp as it can't find the env to get the active lang. Forward-Port-Of: odoo/odoo#218919
This update adjusts how translatable text is written so Odoo's translation tooling works reliably on older Ubuntu Jammy environments. It prevents build failures during translation extraction without changing business features or user workflows.
Original PR description
On Jammy, babel does *not* cope well with f-strings as values inside `_()` calls: it uses `eval` to try and figure them out, which attempts to execute the f-string, which fails because the evaluation context is empty. This is likely fixed from Babel 2.11 onwards (python-babel/babel#915) but Jammy uses babel 2.8[^1]. https://runbot.odoo.com/odoo/runbot.build.error/97849 [^1]: This doesn't seem to trigger on Noble even though it uses 2.10, but locally it does trigger on 2.10.3 (installed via pip), so ubuntu might have backported the fix or something. Forward-Port-Of: odoo/odoo#218887 Forward-Port-Of: odoo/odoo#218803
Website editor illustrations using the newer SVG file type format are now identified correctly. This restores dynamic color options for selected illustrations, helping users customize page visuals as expected.
Original PR description
When illustrations mimetypes changed from simple `image/svg+xml` to `image/svg+xml; charset=utf-8`, `html_editor` was not used for website pages yet - and it therefore missed the fix in [1]. Because of this, when an illustration is selected, it is detected as an uploaded image, and the dynamic colors are not available. This commit adapts the mimetype detection. [1]: https://github.com/odoo/odoo/commit/af11070a6d4eeb69ee49c28435341a220eb64203 Forward-Port-Of: odoo/odoo#218980
Fixed an issue in the HTML editor where selecting text around a linked image could accidentally make the surrounding text part of the image link. This keeps links limited to the intended image and prevents unwanted changes while editing content.
Original PR description
Reproduction: 1. In Todo, add some text, insert an image right after the text, insert some text after the image 2. add a link to the image, select text around the image (before and after it) 3. after the selection, the selected text is part of the link **Before this Commit:** For non-collapsed selections, the link popover opens when an image is included in the selection. However, the `openLinkTools` method may unintentionally extend the link, causing the link to spread on text outside of the link element. **After this Commit:** Stricter conditions are applied to ensure `openLinkTools` is only called when the non-collapsed selection includes an image, the parent element is a link, and the selection is entirely contained within the parent link element. task-4903904 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Refunded point of sale orders now receive the expected “REFUND” label in back-office order lists. This makes refund transactions easier to identify and reduces confusion when reviewing sales records.
Original PR description
Currently, when refunding an order the name of the order does not show "REFUND". Steps to reproduce: ------------------- * Open pos session * Make an order * Refund the order * Go to the backend and see all orders > The refund orders does not show the "REFUND" label Why the fix: ------------ In previous version, when in `sync_from_ui` the state of the order in vals was 'draft'. In this version the state in vals is `paid`. This difference leads to the name being computed in `_complete_values_from_session`. This means that `_compute_order_name` is called before the order is fully created and thus `refunded_order_id` is not yet set and we're always using the next sequence to compute the order name. Now, when we already know the order is a refund we will not compute the name in `complete_values_from_session`. The name will get computed in `write`, which is called by `action_pos_order_paid`, as in previous version. opw-4521070 Forward-Port-Of: odoo/odoo#214542
This fix prevents the general developer tools disable command from unintentionally stopping longpolling actions and events. It helps hardware-related features keep receiving live updates as expected while developers use diagnostic controls.
Original PR description
`devtools disable general` should not disable longpolling actions/events. We updated the `toggleable` wrapper to avoid this. Forward-Port-Of: odoo/odoo#219116
Opening the depreciation schedule for draft assets without computed entries no longer triggers an error. This helps accounting users review draft asset schedules reliably before journal entries are created.
Original PR description
Issue: https://github.com/odoo/odoo/issues/219112 Steps to reproduce:- - Minimum 1 asset in draft - Computation board not computed yet - Opening the depreciation schedule with draft entries. Cause:- - When asset is in draft and computation board is not computed yet no Journal Entries are created for that asset. - `asset_date` is minimum value among dates of related moves. - In this case there are no moves yet so `asset_date` is 'NoneType' - `asset_date = min([asset_date, move_vals['date']])` - In above line when we try to compare 'datetime.date' and 'NoneType' it gives rpc error. Fix: `min([asset_date, move_vals['date']]) if asset_date else move_vals['date']` Followup on commit: https://github.com/odoo/enterprise/commit/eb57a9bc4066ece08059384742d70705a646bbdc Forward-Port-Of: odoo/enterprise#90308
The certified point-of-sale order line now shows the total line price instead of the unit price. This prevents incorrect price displays for businesses using EU IoT scale certification and keeps certified receipts consistent with standard order lines.
Original PR description
Due to an oversight in the forward port from 18.0 -> 18.1, the certified orderline component was displaying the wrong value for the line price. It was using the price per unit rather than the total price. This is fixed by changing that part to use `line.getPriceString()`, just as the non-certified version does. Forward-Port-Of: odoo/enterprise#90146
This fixes a test setup issue by ensuring the administrator account has an email address during a quality control worksheet tour. It prevents false build failures caused by missing sender email configuration, helping keep releases and validations reliable.
Original PR description
Set the admin user's email explicitly to prevent "Please configure the sender's email address" error when running the tour with login='admin'. build_error-226779 Forward-Port-Of: odoo/enterprise#88283