Friday, January 30, 2026
38 changes · saas-19.1
Resolved issues and error corrections
This update resolves an issue where the scrollbar wasn't visible in the time off Kanban view, preventing users from easily seeing their vacation time requests. The fix adds a scrollbar to the view, ensuring users can now access and manage their time off requests effectively.
Original PR description
Before: the scrollbar of the kanban view in timeoff was not showing coz of which users were not able to see their timeoffs easily After: Fixed the scrollbar of the kanban view so that the user can be able to see their timeoffs which they were not able to do that easily Fix: Added the `overflow-x` as auto so that the scrollbar is visible. Task:5502863 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245443
This update fixes an issue with how Saudi social insurance contributions are recorded in Odoo. The change ensures that employer payments are accurately assigned to the correct accounting accounts, improving financial reporting for Saudi businesses using this module. This resolves a discrepancy in the posting of social insurance contributions.
Original PR description
Fix the account configuration used by Saudi social insurance contribution salary rules for the company. This ensures employer contributions are posted to the correct accounting accounts. Task-5468575 Forward-Port-Of: odoo/enterprise#105182
This update resolves a test failure related to the audit trail functionality within the account module. Specifically, a change was made to ensure data flushing occurs during certain tests, improving the reliability of the audit trail reporting. This ensures accurate tracking of account transactions.
Original PR description
Since this commit https://github.com/odoo/odoo/pull/242248/changes flushing inside `test_cant_unlink_message1`, `test_cant_unown_message` is now required. https://runbot.odoo.com/odoo/runbot.build.error/237803 runbot/error-237803 Forward-Port-Of: odoo/odoo#246353
This update corrects a minor issue in the website product pricing calculation. An unnecessary 'target_currency' parameter was being passed, causing confusion. The change simplifies the process by removing this parameter, ensuring accurate pricing without impacting functionality.
Original PR description
In website_sale product price computation in [_to_markup_data](https://github.com/odoo/odoo/blob/saas-18.2/addons/website_sale/models/product_product.py#L163) and…
In website_sale product price computation in [_to_markup_data](https://github.com/odoo/odoo/blob/saas-18.2/addons/website_sale/models/product_product.py#L163) and [_get_additionnal_combination_info](https://github.com/odoo/odoo/blob/saas-18.2/addons/website_sale/models/product_template.py#L490), the target_currency is passed but it is unused parameter.
The product_pricelist price computation logic relies on the [currency](https://github.com/odoo/odoo/blob/saas-18.2/addons/product/models/product_pricelist.py#L162) and target_currency is not used anywhere in the pricing flow. As a result, passing target_currency adds confusion without affecting the outcome.
The target_currency parameter was unused in the method call flow and, due to this, it was always being passed as NULL. This made the parameter ineffective and confusing, while the actual logic expects a valid currency value.
This commit replaces target_currency with currency to avoid unused / misleading parameter.
Traceback
```py
2026-01-22 12:50:48,564 48232 ERROR currency_19 odoo.addons.website_sale.tests.test_website_sale_product_template: ERROR: TestWebsiteSaleProductTemplate.test_markup_data_uses_taxes_included_price_when_configured_on_website
Traceback (most recent call last):
File "/home/odoo/odoo/odoo/addons/website_sale/tests/test_website_sale_product_template.py", line 81, in test_markup_data_uses_taxes_included_price_when_configured_on_website
markup_data = self.product._to_markup_data(self.website)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/odoo/odoo/addons/website_sale/models/product_product.py", line 162, in _to_markup_data
product_price = request.pricelist._get_product_price(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/odoo/odoo/addons/product/models/product_pricelist.py", line 121, in _get_product_price
return self._compute_price_rule(product, *args, **kwargs)[product.id][0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/odoo/odoo/addons/product/models/product_pricelist.py", line 220, in _compute_price_rule
price = suitable_rule._compute_price(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: ProductPricelistItem._compute_price() got an unexpected keyword argument 'target_currency'
```
Before fix,
```py
(Pdb) > /home/odoo/odoo/saas~18.2/odoo/addons/product/models/product_pricelist.py(166)_compute_price_rule()
(Pdb) args
self = product.pricelist(2,)
products = product.product(4,)
quantity = 1
currency = None
uom = None
date = False
compute_price = True
kwargs = {'target_currency': res.currency(20,)}
> /home/odoo/odoo/saas~18.2/odoo/addons/product/models/product_pricelist.py(186)_compute_price_rule()
(Pdb) currency
(Pdb) self.currency_id
res.currency(20,)
(Pdb) self.env.company.currency_id
res.currency(1,)
(Pdb)
```
After fix,
```py
(Pdb) > /home/odoo/odoo/saas~18.2/odoo/addons/product/models/product_pricelist.py(166)_compute_price_rule()
(Pdb) args
self = product.pricelist(2,)
products = product.product(4,)
quantity = 1
currency = res.currency(20,)
uom = None
date = False
compute_price = True
kwargs = {}
> /home/odoo/odoo/saas~18.2/odoo/addons/product/models/product_pricelist.py(186)_compute_price_rule()
(Pdb) currency
res.currency(20,)
(Pdb) self.currency_id
res.currency(20,)
(Pdb) self.env.company.currency_id
res.currency(1,)
```
- opw - [5447980](https://www.odoo.com/odoo/project/70/tasks/5447980)
- upg - [3782135](https://upgrade.odoo.com/odoo/upgrade.request/3782135)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#246180
Forward-Port-Of: odoo/odoo#242998This update ensures that WebGL testing continues to function correctly in Chrome's headless mode (version 144+). Chrome's default settings now disable WebGL, so this change re-enables it for testing purposes, specifically to maintain functionality for features like image filters in the website builder. While SwiftShader is less secure, it's deemed acceptable for controlled test environments.
Original PR description
Since Chrome 144 disabled [^1] by default the WebGL fallback to the software renderer SwiftShader, this commit reenables [^2][^3] it when running in headless mode to allow to keep testing WebGL features (i.e. image filters in website builder). Note: the SwiftShader implementation is considered deprecated and less safe than proper hardware based ones, hence not recommended for a regular usage with untrusted content. However, as tests are run in a more controlled environment, it looks reasonnable to opt-in to keep actually testing WebGL features. [^1]: https://chromium-review.googlesource.com/c/chromium/src/+/7128438 [^2]: https://issues.chromium.org/issues/476172421 [^3]: https://chromestatus.com/feature/5166674414927872 Forward-Port-Of: odoo/odoo#246289
This update resolves an issue in the Peppol demo mode where a branch company with the same VAT number as the parent company would receive an 'id_client already in use' error. The fix ensures each company receives a unique id_client, preventing data conflicts and improving demo stability. This ensures the demo accurately reflects the intended Peppol functionality.
Original PR description
Steps to reproduce in demo: 1. Activate Peppol in the main company for both sending and receiving; 2. Create a branch company (with same VAT number as the main company); 3. Activate Peppol in the branch and select "Send from parent company"; 4. Error message: "This id_client is already used on another user.". In demo edi_mode, when trying to connect a branch company with the same VAT than the parent company, the demo function took the same id_client for every company, which violates the unique constraint on id_client. task-5888203 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246287
This update ensures that the current day location field is consistently included when retrieving data for the homeworking feature. Previously, this data was sometimes missing, causing issues when the feature was used in different parts of the system, such as the studio. This fix guarantees accurate location information is always available.
Original PR description
Before this commit, the feature at commit odoo/odoo@b3be3af61cc08d0dea84969425d24957f215b26f worked by chance, because in most cases ALL fields where returned in the get views, since most of the time the search view is asked for as well, hence yielding all fields in the model There were issues when triggering get_views from another place, namely studio when creating a many2many. After this commit, we make sure the current day location field's description is sent opw-5484321 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#246096 Forward-Port-Of: odoo/odoo#245740
This update resolves a user experience inconsistency within the account_peppol module. Previously, the system used 'demo' for user neutralization, while the edi_mode was set to 'test'. This change ensures a clear and consistent approach, simplifying the setup and operation for users.
Original PR description
Currently, the proxy_client_user is neutralized as demo. But the edi_mode is set to test. It's confusing for the users, and we should be consistent. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246181
This update resolves an issue where a technical error during bill import could lead to duplicate entries in the PEPPOL system. The fix ensures that the import process doesn't block confirmation and allows for unlinked bills, preventing potential data inconsistencies. It also handles unexpected errors after move creation to maintain data integrity.
Original PR description
A UserError there can cause duplicates in peppol fetching. It should never block an ack. We can leave them unlinked We also do the same for any unexpected error that occurs after we've created the move. opw-5492092 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246233 Forward-Port-Of: odoo/odoo#246133
This update resolves a small technical issue where a missing space in a route caused a problem with the account online synchronization process. This fix ensures the synchronization feature functions correctly, preventing potential disruptions to data synchronization.
Original PR description
During this forward port: https://github.com/odoo/enterprise/commit/a5b9372ca0b23151046c14c9a8ead0ed9cd46b80 there was a missing space in the route. no task id Forward-Port-Of: odoo/enterprise#105849
This update addresses a potential error in Odoo that could occur when attempting to access related records through 'res_id' fields. Specifically, the system would fail if a 'res_id' was set to 0. This change ensures the system handles this scenario gracefully, preventing errors and improving data reliability.
Original PR description
`browse(x.mapped('res_id'))` may fail if there are res_ids that are equal to 0. Update existing code.
odoo/enterprise#105767
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update addresses a potential issue where incorrect IDs were being used within Odoo's core modules. The fix ensures that all IDs are properly validated, enhancing data accuracy and reliability across various business processes. This improves the overall stability and trustworthiness of the system.
Original PR description
https://github.com/odoo/odoo/pull/246097
A recent issue preventing users from switching to superuser mode has been resolved. The problem stemmed from a simple typo – 'sesssion' instead of 'session' – in the code. This fix ensures a smoother and more reliable experience for all users.
Original PR description
Currently an error occurs when user tries to switch to superuser. Steps to replicate: - Make a DB and turn on debug mode. - Click on the bug icon and click `Become Superuser`. Error: `AttributeError: 'Request' object has no attribute 'sesssion'` Cause: - Session incorrectly spelled as `sesssion`. Fix: - Corrected `request.sesssion` to `request.session`. No Id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that tests for KPI reporting in the email system run consistently. Previously, demo data could create mail activities that interfered with test results. Now, the tests are run with a clean slate, guaranteeing accurate and reliable reporting.
Original PR description
Commit ff941e6555c12918803db4a72511c9381cc58c31 introduced a test that counts the amount of mail activities grouped by type. However, the test doesn't take into consideration that the demo data might have created some activities. With this commit, we ensure the tests run with a clean state by removing any pre-existing mail activities so that we have consistent and expected results. Runbot-build-error-id: [234966](https://runbot.odoo.com/odoo/runbot.build.error/234966)
This update corrects a bug where 'todo' and 'none' audit statuses on accounts were incorrectly grouped together in reports. Previously, sorting or filtering by 'todo' status didn't accurately reflect the actual status of accounts. This change ensures accurate reporting and filtering based on account status.
Original PR description
When going on the balance view of a working file, when trying to sort by the status or filtering on 'todo', the audit status with no value would still be here.
To Reproduce:
- Install the demo data
- Create a working file _ Click on Status
- The To Review and nothing are not sorted
- Add a domain ("audit_status", "=", "todo")
- THe audit status with no value are still hereThis update resolves a technical issue preventing users from correctly viewing product pages on the website. The problem stemmed from a missing button within the product display, triggered by the 'real_estate' module. This change ensures a smoother user experience when browsing products.
Original PR description
Steps to reproduce: - Install `real_estate` module(industry) - Website > Properties > Open any product Traceback: `ValueError: Expected singleton: product.template()` This error occurs when the [addToCart] value is `null`. We get `null` because the code is trying to find a button with the name `add_to_cart` inside the `parent`, but that button does not exist in the [template]. [addToCart]: https://github.com/odoo/odoo/blob/61bdc119bca73a7e9ee946d0695c6acc1453adbd/addons/website_sale/static/src/interactions/product_page.js#L329 [template]: https://github.com/odoo/industry/blob/92ff34e33cd166479449dae7ce37e37c9e409db2/real_estate/data/website_view.xml#L336-L344 sentry-7212605657
This update clarifies the name of a recruitment stage from "Initial Qualification" to "Qualification" within the Odoo HR recruitment module. This change improves the user experience and ensures consistency in stage labeling, making the recruitment process easier to understand and manage. This is a minor fix related to a previous enhancement.
Original PR description
This is a small follow-up PR to the original PR to simply rename a stage label. See https://github.com/odoo/enterprise/pull/105278 Task-ID: 5454691 Forward-Port-Of: odoo/odoo#246278
This update clarifies the terminology used in the recruitment process by renaming the "Initial Qualification" stage label to "Qualification". This change improves clarity and consistency for users managing recruitment workflows within Odoo Enterprise. It's a minor adjustment to enhance the user experience.
Original PR description
This is a small follow-up PR to the original PR to simply rename a stage label. See https://github.com/odoo/enterprise/pull/105278 Task-ID: 5454691 Forward-Port-Of: odoo/enterprise#105854
This update resolves a bug causing website tests to fail due to delayed loading of interactions within iframes. The fix intelligently waits for the interaction service to be ready, ensuring tests execute correctly. The removal of unnecessary timeouts further stabilizes the testing process.
Original PR description
__Before commit__ Hoot tests using interactions inside the iframe may fail because we do not wait for the interaction service to be ready before executing the tests. In particular, the `SharedPopup` interaction is sometimes started after we trigger a click to display it in the test. Since it has not had time to register the proper listener, the `d-none` class is never removed from the popup, so the test is stuck waiting for it to appear. __Fix__ When the JavaScript assets are included inside the iframe, the attribute `is-ready` is added to the iframe body. In this case, we wait for it to appear instead of uselessly adding it artificially. Waiting for all interactions to load may take a bit of time, so a large timeout is set to wait for the `is-ready` attribute. The timeouts inside the tests are now removed since they were there to fix this bug without success. runbot-237554 Forward-Port-Of: odoo/odoo#246327
A bug was causing the input field for campaign testing to disappear when cleared. This meant users had to close and reopen the dialog to use it again. This fix adds a simple adjustment to ensure the input field remains visible and functional, improving the user experience for campaign setup.
Original PR description
Steps to reproduce: 1. Install `marketing_automation` 2. Create a campaign with activity and click on `Launch a test` button 3. Clear the input field and then click outside the input area Issue: -…
Steps to reproduce: 1. Install `marketing_automation` 2. Create a campaign with activity and click on `Launch a test` button 3. Clear the input field and then click outside the input area Issue: - The input area has disappeared. Now, the only way to get it back is by closing the dialog and reopening it Cause: - Field `resource_ref` uses `hide_model: True`, and when cleared, the widget has no value and no model selector to determine the target model because of the function `getRelation` that now returns `undefined`, by this XML fails to render the `<Many2OneField/>` https://github.com/odoo/odoo/blob/7680b83501cef18362be38f90715d824f2bf9cd6/addons/web/static/src/views/fields/reference/reference_field.js#L107-L119 Solution: - Add `model_field: model_id` option to the view so the widget can resolve the model from the `model_id` field even when input is empty Note: - This behavior also occurs in other places. After discussion with the framework team, we agreed to keep the scope of this PR limited to marketing_automation, as this is not a priority issue. A broader fix can be addressed in the master if needed. opw-5473320 Forward-Port-Of: odoo/enterprise#104547
This update resolves a technical problem on odoo.com where very large order IDs would cause errors in achievement reports. The change uses a more efficient calculation to ensure all IDs remain within the standard BIGINT limit, preventing report generation issues.
Original PR description
Before this commit, we had issues on odoo.com when the ids of the account move, account move line, sale order or sle order line were too high. We would end up with ids bigger than BIGINT limit. This commit ensure it does not happen anymore by using bitwise operation on ids istead of multiplying the values. task-5423978 Forward-Port-Of: odoo/enterprise#103264
This update resolves an issue where the sign-up tour could behave inconsistently, sometimes running within a webpage frame and other times directly. The fix ensures the tour runs reliably regardless of the user's interaction method, providing a smoother and more predictable experience for new users.
Original PR description
This commit fixes an indeterministic sign tour that could run either inside an iframe or directly in the main page. Since the execution context was unpredictable, both selectors were added to handle both cases reliably. runbot error-238443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246393 Forward-Port-Of: odoo/odoo#246032
This update resolves an issue where switching product variants caused a technical error when product images were intentionally hidden (set to 'none'). The fix ensures a smoother user experience by correctly handling scenarios where images aren't displayed, preventing tracebacks and improving product browsing.
Original PR description
When product images are hidden (image_width='none' or missing), switching between product variants caused a traceback. Steps to reproduce: =================== - Go to a product page with variants -…
When product images are hidden (image_width='none' or missing), switching
between product variants caused a traceback.
Steps to reproduce:
===================
- Go to a product page with variants
- Edit mode & change the image to hidden
- Change variant
-> Traceback
Cause:
======
- The server doesn't send `carousel` data when images are hidden
(product_page_image_width='none')
- However, `_getProductImageContainerSelector()` still returned a valid
selector ("#o-carousel-product" or "#o-grid-product")
- `querySelector` found the existing (but empty) image container in the DOM
- `_updateProductImage()` was called with `undefined` as newImages parameter
- the re-queried images element crashed
Solution:
=========
In old version it was jquery and it was only checking for the existance
of the Old images (See [1]).
Now it will check both old and new images.
[1]: https://github.com/odoo/odoo/blob/77bfe416d08eefc720f12899490d3d39efacb74a/addons/website_sale/static/src/js/website_sale.js#L294
opw-5499004
Forward-Port-Of: odoo/odoo#246081This update resolves a visual issue in the website builder where gaps appeared between related options, particularly when using nested settings. The fix ensures that connector lines are consistently displayed, improving the overall usability and appearance of the builder. This enhancement contributes to a more polished and professional website design.
Original PR description
Steps to reproduce: - Open the website builder and drop a "Cover" snippet on the page. - In "Background > Image", choose "Position: Repeat pattern" to reveal the "Width/Height" sub-options. - Issue: the vertical connector line between the "Filter" and "Position" options is broken. After this commit, the gap is removed. Options at the same level are now properly connected, even when one of them contains sub-options. task-5155955 | Before | After | | ------------- | ------------- | | <img width="286" height="424" alt="image" src="https://github.com/user-attachments/assets/db035598-5094-4ec3-a42b-dc86bd871b9b" /> | <img width="285" height="422" alt="image" src="https://github.com/user-attachments/assets/d0229c5b-d3ea-41a2-9ed7-6155fc34d280" /> | Forward-Port-Of: odoo/odoo#246090 Forward-Port-Of: odoo/odoo#241092
This update fixes an issue where automatic reconciliation was blocked when an invoice's reference matched its payment reference. The change allows the system to correctly identify and match invoices, streamlining the reconciliation process and eliminating manual intervention. This resolves a reported problem on odoo.com.
Original PR description
The aim of this commit is to make the automatic reconciliation works in case of an obvious matching that was prevented because the reference of the invoice was also it's payment reference. It also…
The aim of this commit is to make the automatic reconciliation works in case of an obvious matching that was prevented because the reference of the invoice was also it's payment reference. It also modify a docstring of a test because it was lying about what it was really testing. The usecase it says it forbid is actually enforced by `test_matching_algorithm_for_multiple_invoices`. Before this commit: - functionally: The obvious matching was denied and the accountant had to manually make the match. - technically: The `aml.ref` and the `move.payment_reference` were the exact same and thus postgres regrouped the invoice (through aml) with itself as if there were 2 invoices matching the same word. After this commit: - functionally: The obvious match is made. - technically: The initial intend was to avoid having several invoices (proxy by amls) reported for a specific matching word preventing the system to take a difficult and arbitrary functional decision which might be wrong. In order to comply with that and to not block the match of an invoice that would be matched through several matching words, we don't gather twice the same aml for the same word. task-id: None (The issue arose on odoo.com and was brought by APFA) Forward-Port-Of: odoo/enterprise#105878 Forward-Port-Of: odoo/enterprise#105648
This update resolves a technical issue that was preventing the Account Status Badge from displaying correctly in some instances. The fix ensures the system handles missing configuration data gracefully, preventing a traceback and improving the user experience. This ensures accurate reporting and a more reliable application.
Original PR description
If this.env is not present, the config will be undefined and when accessing the viewType it will raise a traceback. task-5417418 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent issue prevented users from printing bank statements through the list view. This fix resolves a technical error related to how the system handles statement IDs during printing, ensuring statements can now be printed correctly. This improves the user experience for generating financial reports.
Original PR description
When trying to print a statement via the list view, we get a traceback. This is because the module `account_bank_statement_import` inherits the `view_bank_statement_tree` and use `accountMoveUploadListView` which use `AccountMoveListController`. Therefore, when calling `get_extra_print_items` from the controller, we call it with model `account.move` but with a statement id, which leads to either wrong behavior or access error. Steps: - Make sure account_bank_statement_import is installed - Have 2 companies - Create a bank statement for company B, make sure it has the same id as any account move from company A - From the bank statement list view, select the statement - Click on the print button -> Traceback opw-5427019 Forward-Port-Of: odoo/odoo#245207
This update resolves an issue causing errors when adding transcription snippets to new, unsaved records. The fix ensures proper record identification and saving, preventing errors and improving the stability of the AI transcription component. It also corrects a localization issue in the test environment.
Original PR description
This PR fixes an issues where an exception would be thrown when inserting a transcription snippet on an unsaved record. It does so by removing the resId, resModel props and only retrieving them when actually needed (when opening the full composer to send the summary). Also whennever opening the full composer, we force a save on the record to ensure proper resId. The PR also adapts `voice_transcription_plugin.test.js` to add the locale to the date that is inserted when starting a transcription, avoiding local test fails. task-5788331 Forward-Port-Of: odoo/enterprise#105026
This update resolves an issue where duplicate "Applicant created" messages were appearing in the applicant's chatter log. The fix prevents the system from posting the applicant creation subtype multiple times, ensuring a cleaner and more accurate record of applicant activity. This improves the user experience and data consistency.
Original PR description
Steps to reproduce: 1. Create a new applicant in recruitment. 2. Open the applicant’s chatter. 3. See multiple “Applicant created” messages for the same creation. Bug cause: The applicant creation flow posts the `mt_applicant_new` subtype more than once (create + extra write/track), and the frontend renders the subtype description, so each duplicate post shows “Applicant created” again. Solution: - Post the `mt_applicant_new` subtype only once during applicant creation. - Avoid re-posting it in subsequent writes/tracking so chatter shows a single creation log. Task Id: 5454691
This update fixes a potential issue with how Odoo handles deleting records linked through inherited fields. Previously, the system assumed inherited records were always single records, which could cause problems when deleting related records. Now, the system correctly handles RecordLists, ensuring data integrity during cascade deletions.
Original PR description
Usually (always?) the "inverse" for an inherited field will be a one2many. Even if in practice it is a one2one. The cascade deletion of the inverse should thus handle RecordList instead of assuming they're always single records. related: 478647c4526f42a2455a599555748c844a6f20cf task-5013894
This update resolves an issue where blockquote content was being lost when emails were sent. The fix adds a Bootstrap column class to the blockquote structure, ensuring it's correctly processed and included in the final email. This ensures all email content, including blockquotes, is delivered as intended.
Original PR description
Problem: When sending an email containing a blockquote, its content is missing in the received email. Cause: The `bootstrapToTable` conversion logic strictly filters the children of `.row` elements and only keeps nodes that have valid Bootstrap column classes. In the `s_blockquote` snippet, the content was wrapped in a plain `<div>` placed directly inside a `.row`, so it was ignored during conversion. Solution: Add the `col-12` class to the inner `<div>` of the blockquote snippet so it is recognized as a valid Bootstrap column and preserved during conversion. Steps to reproduce: - Create a new email marketing. - Add the "Blockquote" snippet. - Send the email. - Observe that the received email loses the blockquote content. opw-5883624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246263
This update fixes an issue where highlight effects weren't consistently applied to multi-line text on websites, particularly in smaller viewports. The change adds a vertical position check to the text detection process, ensuring highlights are correctly applied regardless of text layout. This improves the overall user experience and consistency of website highlighting.
Original PR description
Steps to reproduce: 1. Go to Website (Edit mode) and drop a title block. 2. Select the title, set a highlight effect, and save the page. 3. Load the page in a reduced viewport in a way that makes the highlighted text split into multiple lines. 4. The highlight won't be applied correctly (only the last line will be detected). The current line detection mechanism relies on the horizontal comparison of rects (see `rectToBatch()`), which returns wrong results when applied to centered text content. The goal of this commit is to add a y-coordinate (vertical) check to detect new lines more reliably in `rectToBatch()`. This improves robustness for multi-line selections with unusual layouts. related to opw-4865891 Forward-Port-Of: odoo/odoo#245142 Forward-Port-Of: odoo/odoo#219234
This update addresses a potential issue where deleted records in Odoo could still be accessed, leading to errors. The fix ensures that related records are properly handled during cascade deletions, preventing data access attempts after records are removed. This improves data integrity and stability.
Original PR description
In order to be defensive we have to check records linked to messages, notifications or activities exist before checking related information like display_name, or even to skip them in various flows. This happens notably due to DB-level cascade deletion that does not remove side records linked through (model, res_id) pairs. It implies some additional exist queries. Task-5138556 Forward-Port-Of: odoo/enterprise#104589 Forward-Port-Of: odoo/enterprise#101185
This update adjusts the color used to highlight the 'Looking for Help' live chat description in the user interface. The previous bright yellow color was found to be distracting. This change ensures a more professional and less visually jarring experience for users.
Original PR description
Text was using `.text-warning`, which is too distracting. Part of Task-5867464 Before / After <img width="960" height="387" alt="Screenshot 2026-01-30 at 16 27 00" src="https://github.com/user-attachments/assets/9cc1129c-5169-4ef0-a84e-dfbb866ddcea" /> <img width="961" height="384" alt="Screenshot 2026-01-30 at 16 26 31" src="https://github.com/user-attachments/assets/e858cc16-14cd-4149-98bd-cbbb44ee5cb1" />
This update resolves an issue where the Datev export process incorrectly accessed parent tax groups when dealing with tax groups that had child tax groups. The fix ensures that the export accurately reflects the child tax groups, improving the reliability of financial data sent to Datev. This was identified and corrected as part of a broader effort to ensure data integrity.
Original PR description
Issue: Before this commit, when a tax type is group and has children, we access the parent, even though the dict has only the children Fix: as a solution, we map through the originated tax list received from the compute all function opw-5480918 opw-5874567 Forward-Port-Of: odoo/enterprise#105638
This update removes unnecessary timezone information from avatar cards when the user's local time zone matches their own. Previously, displaying the timezone added visual clutter. This change ensures a cleaner and more user-friendly experience on the avatar card.
Original PR description
Before this commit, the local time zone was shown on avatar card even when this is the same as current user. The intent of showing of local timezone is to see when it differs. When this is the same, this just adds noise to the card. This commit hides the showing of local timezone when this is the same as current user. Part of Task-5867464 Before / After <img width="310" height="206" alt="Screenshot 2026-01-30 at 17 24 04" src="https://github.com/user-attachments/assets/c47f885d-fb98-48f8-91fb-24d6a33e4c9a" /> <img width="311" height="193" alt="Screenshot 2026-01-30 at 17 23 50" src="https://github.com/user-attachments/assets/26fe6cf8-f2b1-40a3-b478-065ea88e01af" />
This update resolves an issue where editing a bank statement line caused unnecessary recalculations of all related lines, including reconciled ones. The change now ensures that only the edited line is recomputed, significantly improving performance and stability when managing bank statements. This prevents slowdowns and ensures accurate reconciliation processes.
Original PR description
When we edit a bank statement line, it triggers the recompute of all other lines, even the reconciled ones. This commit changes this behavior so reconciled lines are not recomputed task-5882885 Forward-Port-Of: odoo/enterprise#106017 Forward-Port-Of: odoo/enterprise#105754
Documentation and clarification updates
This update formally incorporates Cyril Jeanneret's contributions to the Camptocamp project through a legal agreement (CLA). This ensures compliance and allows for his code to be integrated into the Odoo platform. It's a standard process for welcoming new contributors and maintaining the integrity of our codebase.
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#246262