Wednesday, July 16, 2025
10 changes · saas-18.1
Resolved issues and error corrections
This fix prevents users from creating incomplete email templates when configuring recruitment stages. It avoids an error that could occur later when moving an applicant into a stage linked to that invalid template, making the hiring 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
Fixes how message notification details are chosen when some values are missing or empty. This helps users receive more accurate discussion and accounting notifications, including correct names and scheduling information.
Original PR description
Beware values may be Falsy, in that case we have to fallback on message itself. account: correctly check values or messages values in notification discuss: fix values usage in discuss methods mail: fix values / msg non coherency for scheduledDatetime, should always be Falsy if not given in values or message Task-4845982 Forward-Port-Of: odoo/odoo#219055
The website editor now correctly recognizes SVG illustrations even when their file type includes charset details. This prevents illustrations from being treated like regular uploads, so users can access dynamic color options 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
A developer tools setting could unintentionally stop live device actions and events from working. This fix keeps those live updates running when general developer tools are disabled, helping connected hardware remain responsive.
Original PR description
`devtools disable general` should not disable longpolling actions/events. We updated the `toggleable` wrapper to avoid this.
This update makes a point of sale test use its own measurement unit instead of relying on demo data that may not be present. This helps prevent false test failures and supports more consistent quality checks before releases.
Original PR description
Before this commit: = - The test `test_quantity_package_of_non_basic_unit` used `product_uom_inch`, which is `archived` by default, causing the test to fail without demo data. - It only worked with demo data because `l10n_us_account` `unarchives` this UoM. After this commit: = - Created a **test UoM** to ensure consistent test behavior. Runbot-error: 223122
Refunded point-of-sale orders are now named correctly with the expected refund label in the backend order list. This helps staff quickly distinguish refunds from regular sales and reduces confusion during order review or reconciliation.
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
Internal users who had a passkey could be sent into an unsupported sign-in verification path when using portal pages. This update keeps portal identity checks using password verification for now, preventing those users from being blocked.
Original PR description
When an internal user has a passkey and attempts to pass the portal identitycheck, then the identitycheck's auth_method is set to webauthn which breaks the flow since portal's identitycheck only supports passwords. This scenario is unlikely to occur but it does break the internal users' portal. This is a temporary solution because once I implement passkeys for portal users, I will allow portal users to use webauthn to verify their identity. Forward-Port-Of: odoo/odoo#218427
Fixed an error that could prevent users from opening the depreciation schedule for draft assets before their calculations were completed. This helps accounting teams review asset depreciation information without being blocked by an unexpected system error.
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
Certified point-of-sale order lines now show the total line price instead of the unit price. This prevents confusing or incorrect price information for businesses using certified scale workflows.
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.
This fix prevents an error when the Knowledge app receives an empty value where article data is expected. It helps keep Knowledge article discussions stable and avoids interruptions for users in edge cases.
Original PR description
Just be sure when using an argument that can be False instead of a dict. Task-4845982 Forward-Port-Of: odoo/enterprise#90254