Wednesday, September 10, 2025
19 changes · saas-18.4
Enhancements to existing features
The Peppol registration wizard now includes clearer help text explaining how certain registration details are used. This helps users provide the right information with more confidence when setting up electronic invoicing.
Original PR description
…ion wizard. Give move information on what the registration information are used for. task-none Forward-Port-Of: odoo/odoo#225730
Resolved issues and error corrections
Website editors now see navbar logo height changes right away while editing, instead of only after saving or reloading assets. This makes logo sizing adjustments more reliable and reduces confusion when customizing a website header.
Original PR description
Steps to reproduce: - Website > Go to Website > Edit - In the sidebar: Navbar logo, change Height - Before: the logo size does not change until clicking Save (or after bundles reload) - After: the logo resizes immediately while editing Since [1], the header logo is rendered with width and height attributes to reserve space and reduce CLS. But since [2], the `width` and `height` attributes have been removed and converted to inline styles, which take precedence over the CSS stylesheet. This commit addresses this issue. [1]: https://github.com/odoo/odoo/commit/d80b8cbc28b6e9d16608f9ecfcf4b360d0c792c7 [2]: https://github.com/odoo/odoo/commit/cb2510f4e525192e4b3d5d673218775c2d9d174e
Code cleanup and technical improvements
This update prepares customer follow-up reports for easier customization of due and overdue invoice lines. It helps businesses tailor what customers see on payment reminder reports without changing the standard report flow.
Original PR description
The goal with these hooks is to allow customization of overdue and due lines that are going to be printed on the followup report to be communicated to the customer. Forward-Port-Of: odoo/enterprise#93438
A small error in the Indian electronic invoicing process was corrected so invoices can be sent without triggering an unexpected failure. This helps businesses using India localization avoid disruption when submitting signed invoice data.
Original PR description
In this commit- --- Fixed a typeError in l10n_in_edi_send_invoice method Replaced - incorrect syntax `data.get['SignedInvoice']` with `data['SignedInvoice']`. opw-5071703 Forward-Port-Of: odoo/odoo#226106
This fixes a mail discussion issue where an error message could remain visible after messages successfully loaded on retry. Users who temporarily lose connection will now see the thread return to its normal state once loading succeeds.
Original PR description
**Description of the issue this PR addresses:** When a thread fails to fetch its messages (e.g., due to a network error), the `hasLoadingFailed` flag is set to `true`. However, even if the next fetch…
**Description of the issue this PR addresses:** When a thread fails to fetch its messages (e.g., due to a network error), the `hasLoadingFailed` flag is set to `true`. However, even if the next fetch attempt succeeds, the flag is not reset. As a result, the UI may continue to show an error state even though the data has successfully loaded. **Steps to Reproduce:** - Open a thread with many messages. - Go offline. - Scroll up to load older messages → failure message appears. - <img width="311" height="68" alt="image" src="https://github.com/user-attachments/assets/e18832cb-5d37-4add-a126-fdc301131721" /> - Go back online and click Retry → messages load successfully. - Scroll again → failure message still appears, even though you’re online. - <img width="311" height="68" alt="image" src="https://github.com/user-attachments/assets/e18832cb-5d37-4add-a126-fdc301131721" /> **Current behavior before PR:** After a failed attempt to fetch messages in a thread, the `hasLoadingFailed` flag remains set to `true`. Even if the user goes back online and the subsequent fetch succeeds, the UI continues to show a failure state. **Desired behavior after PR is merged:** After a successful fetch of a thread’s messages, the `hasLoadingFailed` flag is reset to `false`, ensuring the UI no longer shows a failure state once the data has been correctly loaded. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226145 Forward-Port-Of: odoo/odoo#222001
This fixes a timing issue in automated chat tests where pressing Enter after typing a command could behave inconsistently. The tests now use the send button instead, making validation more stable without changing the user-facing chat experience.
Original PR description
\* = crm_livechat, im_livechat Back-port of 3fc3e4fbbd846dc8f65938a0bfbddbebf2abc403 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 Forward-Port-Of: odoo/odoo#225934 Forward-Port-Of: odoo/odoo#225874
This fix makes transparent grayscale options appear correctly when editing website snippets and choosing custom color filters. It restores missing color definitions so users can reliably select the intended transparent gray styles in the editor.
Original PR description
Following the [refactor] of the html_builder, [addition] of the transparent grayscale, and this [commit], we had an issue when the transparent grayscale wasn't displayed as needed because it wasn't…
Following the [refactor] of the html_builder, [addition] of the transparent grayscale, and this [commit], we had an issue when the transparent grayscale wasn't displayed as needed because it wasn't added to 'EDITOR_COLOR_CSS_VARIABLES', which later were used to save colors together with the theme color prefix, i.e., --hb-cp-'color'. Steps to see the issue: - Open website and start editing - Drop a s_cover snipper and click on it - Click on the "Filter" option and select "Custom" - Click on "Color Filter" and go to the "Custom" tab -> Transparent Grayscale isn't displayed correctly. This commit copies [1], which was lost in the refactor. [refactor]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 [addition]: https://github.com/odoo/odoo/commit/55c58bf45165e3a3eafcbaecc516e7c1d19809a6 [commit]: https://github.com/odoo/odoo/commit/eb12451a169c752034abb5d4aab9926c19067ebf [1]: https://github.com/odoo/odoo/commit/5490c126f42bd1729ba0d4b4103d7284ba7ab8c0
Website snippet previews now show the Parallax label only when the snippet actually uses a parallax background. This prevents misleading labels in theme snippets and ensures custom snippets with parallax effects are clearly identified.
Original PR description
Steps to reproduce the issues: **Issue 1** - Enter "Website" edit mode. - Drag and drop a "Cover" snippet into the page. - Save the snippet as a custom snippet. - Click the "Custom" category. - Bug:…
Steps to reproduce the issues: **Issue 1** - Enter "Website" edit mode. - Drag and drop a "Cover" snippet into the page. - Save the snippet as a custom snippet. - Click the "Custom" category. - Bug: the "Parallax" label is not displayed on the snippet preview. **Issue 2** - Install the "Artists" theme. - Enter "Website" edit mode. - Click the "Intro" category. - Bug: The "Parallax" label is displayed on the "Cover" snippet preview even though it doesn't have a parallax effect. Commit [1] added a label on snippet previews to indicate if they are Carousel, Popup, Gallery, Tab, or Parallax. This label is linked directly to the snippet's original template. However, this does not work well for "Parallax" because it's an option that can be enabled or disabled. So it doesn't make sense to keep the label when the option is not active. This commit fixes that by checking the snippet structure to see if it contains a parallax on its background. [1]: https://github.com/odoo/odoo/commit/63cd0c6497c3c2e8482dc62b4359eb2431a75926 task-4926420 Forward-Port-Of: odoo/odoo#218863
This update corrects an internal automated test related to email server handling so it behaves properly when a required testing dependency is unavailable. It helps keep Odoo's quality checks reliable and reduces false failures during release validation.
Original PR description
Fine-tunning of e31ec012 Forward-Port-Of: odoo/odoo#224309
This update prevents an error when refusing a job applicant using a refusal reason that has no email template. Recruitment users can now complete the refusal process reliably without encountering a traceback.
Original PR description
**Step to reproduce:** - install `hr_recruitment` - open recruitment -> refuse reason - from any record say rec1, remove its email template - from recruitment, open a job application - refuse it, a wizard opens for reason, select rec1 **Observation:** - we receive a traceback **Cause:** - there is oversight in `_compute_from_template_id` method - `wizard_field_name` is refrenced outside of its scope **Fix:** - fix the method, to correctly assign the template values to wizard opw-5031197 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Imported French FEC accounting entries are now included when users open a sales journal from the accounting dashboard. This ensures imported sales-related records are visible in the expected journal view, reducing confusion and helping teams review imported accounts more reliably.
Original PR description
**PROBLEM** When importing a FEC files, moves are created with the `move_type` `entry`. They don't appear in the action of the journal of type `sale` when clicking on the dashboard. **STEP TO REPRODUCE** 1. on a local database install `l10n_fr_fec_import` (you need to import a FEC file given by our client, dont do it on the runbot please !) 2. select the french demo company 3. import the FEC file (accounting/settings/import a file) (for file, see [ticket](https://www.odoo.com/odoo/project/49/tasks/4848763) ) 4. goes in the dashboard, and click on the `Ventes Marchandises` journal. 5. notice the entries does not appear in the action. **CAUSE** When importing a FEC file, all moves are created with the `entry`. The domain for `sale` journal doesn't include the move of type `entry`. **FIX** Adding `entry` in the `sale` journal domain. opw-4848763 Forward-Port-Of: odoo/odoo#222208
Duplicated Team Basic website blocks now keep images editable, so users can select those images and adjust their options as expected. This prevents a frustrating page editing issue when reusing team sections.
Original PR description
[FIX] html_builder, *: enable image options on duplicated team snippet *: html_editor Steps to reproduce the problem: - Drop the "Team Basic" snippet. - Duplicate it. -> When you click on an image of the duplicated block, the image is not selected and you can not change the options related to it. The problem is that the `o_editable_media` class does not appear on the images of the duplicated snippet as it is a system class. This commit removes the `o_editable_media` class from the system classes. Indeed, it was added by [1] to avoid the closest savable to be marked as dirty when this class was added. However, this class is added during the `normalize` and since [2], the mutations done at the `normalize` do not trigger the adding of the `o_dirty` class anymore. [1]: https://github.com/odoo/odoo/commit/c20dfb73528d60a079d73564504646fe7d1d4272 [2]: https://github.com/odoo/odoo/commit/7c5cdb6d70eea29dec4ba126e62eeb93c6e6eeb2 Related to task-4367641
The web interface now handles cases where custom app icons are too large to save in the browser. This prevents users from seeing errors when navigating menus after adding large image icons to custom applications.
Original PR description
Before this commit, if a user uses a large image as an icon for a custom application, an error could be triggered due to the size limit in localStorage. Forward-Port-Of: odoo/odoo#226105
Belgian payroll work entry UCM codes now preserve spaces when needed to meet the required three-character format. This prevents valid UCM codes such as "PR " from being shortened incorrectly, helping payroll configuration stay compliant with UCM specifications.
Original PR description
#### Issue: - UCM work entry code should be 3 characters long and allow spaces to get this length #### Step to reproduce: - In a Belgian company - Go to Payroll > Settings > Work Entry Types > New - Add a name - Add a Payroll Code - In the `Country` field fill Belgium - In the field `UCM Code` enter "PR " - Select another field - Select `UCM Code` again #### Current behavior: - The field `UCM Code` was updated to "PR" #### Expected behavior: - The field should stay to "PR " #### Solution: - Don't trim the field and add a spaces if needed opw-5014372 Forward-Port-Of: odoo/enterprise#92838
The Belgian salary configurator now prevents employees from combining private bike reimbursement with fuel card benefits when the private bike amount is above zero. This keeps salary package choices consistent by automatically clearing and disabling fuel card fields in that situation.
Original PR description
The Belgian salary configurator allows employees to declare a private bike cost. When the "Private Bike" option is checked and its reimbursement value is greater than zero, the fuel card inputs must be reset to 0 and disabled. task-5062963 Forward-Port-Of: odoo/enterprise#94063 Forward-Port-Of: odoo/enterprise#93884
This fix prevents Uruguayan electronic invoices from failing when an invoice line has limited information, such as only an account and no product. If no line name is available, the system now safely uses a placeholder so the CFE document can still be created.
Original PR description
This pull request makes a minor adjustment to the logic for extracting item names and descriptions in the `_l10n_uy_edi_get_line_nom_and_desc` method. The change ensures that the presence of `aml.name` (the line description) is checked directly, rather than relying on the truthiness of the entire `aml` object. Before this PR, if the aml of an invoice only have the `account_id` field filled and no `product_id`, the `_l10n_uy_edi_get_line_nom_and_desc` will raise an error message like `TypeError: 'bool' object is not subscriptable` when trying to create de CFE document. <img width="1254" height="828" alt="image" src="https://github.com/user-attachments/assets/eaadad4c-46c3-4e3b-be52-9fcd146f2c22" /> <img width="1526" height="795" alt="image" src="https://github.com/user-attachments/assets/1b831f41-9774-4ed5-9a9d-9777ee0633e9" /> With this fix, we ensure there is a name to grab or the '-' will be send instead. Forward-Port-Of: odoo/enterprise#93838
A test was added to ensure early payment discount lines created during bank reconciliation receive the correct analytic distribution. This helps keep accounting reports consistent whether payments are registered manually or through bank reconciliation.
Original PR description
This commit adds a test for the following issue: - Configure an early discount payment term (e.g., 2/7 Net 30). - Configure the analytic distribution model with the account used when a discount is granted (e.g., 657000 on the BE fiscal position). - Create an invoice using the early discount payment term. - On bank reconciliation, register the transaction taking into account the early payment discount (e.g., 98% of the invoice amount_total). On the third line with account 657000, corresponding to the early discount payment, the analytic distribution model does not apply. In contrast, when manually registering a payment for the invoice, the analytic is correctly applied. community pr: https://github.com/odoo/odoo/pull/217933 opw-4868986 Forward-Port-Of: odoo/enterprise#91651 Forward-Port-Of: odoo/enterprise#90641
The Documents app kanban view no longer shows an unnecessary second scrollbar. This makes browsing documents cleaner and reduces confusion for users navigating the page.
Original PR description
This commit fix the useless double scroll bar in kanban view. Task-4844661 Forward-Port-Of: odoo/enterprise#90548
Fixes an issue where changing a dashboard's publish status could be accidentally undone by clicking elsewhere in the header. The publish checkbox now behaves consistently, reducing confusion when editors update dashboard visibility.
Original PR description
**Steps to reproduce:** - Open a dashboard in edit mode. - Click the “Publish” toggle to change its state. - Click elsewhere on the header (outside the toggle). → The publish state flips back unexpectedly. **Before this PR:** The wrapper container (.o_sp_publish_dashboard) had a click handler, causing clicks on the header to re-toggle the publish state. The CheckBox was rendered with a no-op onChange, so both elements competed for control. **After this PR:** Interaction is handled exclusively by the CheckBox component. toggleDashboardPublished is bound directly to its onChange. Clicking the label text now correctly toggles the checkbox and publish state. Container clicks outside the checkbox no longer affect the state. Task: [5062368](https://www.odoo.com/odoo/project/2328/tasks/5062368) Forward-Port-Of: odoo/enterprise#94061