Daily updates from Odoo
Thursday, September 18, 2025
51 changes
7 changes
Resolved issues and error corrections
When users create a mass mailing and change the target audience model, favorite templates now refresh to show the right options. This helps users find and reuse the correct saved templates more reliably.
Original PR description
In mass_mailing, when creating a new mailing, the theme selector allows users to select base templates for their mailings. Users can also add their own model-specific templates by marking mailings as "Favorite"s, which will cause them to show up in model selectors if the template's target model matches the new mailing's target model. However, in some circumstances, changing the target model does not cause the available template mailings to update. This is due to the callback responsible for updating the templates not reading the model variable correctly, causing useRecordObserver to not being called every time it is updated. This commit fixes this issue, therefore causing favorite templates to be updated more reliably. task-5054968 Forward-Port-Of: odoo/odoo#227424
The automatic cleanup process will now skip documents that are linked to signed document records, avoiding background deletion errors. This keeps the system stable while still preventing users from manually deleting protected signed documents.
Original PR description
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment…
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment contracts to trash * Trash > Try to to delete employment contract you will see error in terminal. Similarly error will be produced by the Auto-Vacuum process when it attempts to delete it after the configured deletion delay. **Error:** `ForeignKeyViolation: update or delete on table 'ir_attachment' violates foreign key constraint 'sign_document_attachment_id_fkey' on table 'sign_document' DETAIL: Key (id)=(1164) is still referenced from table 'sign_document'.` **Root cause:** * At [1], the `sign.document` model was introduced, which prevents the deletion of sign documents. As a result, attempting to delete them due to [2] will cause an error. **Solution:** * Update the `_get_gc_clear_bin_domain` to ensure that the Auto-Vacuum process skips sign documents. * This will still throw an Validation and ForeignKey error as expected when the user tries to delete it from the GUI letting them know it cannot be deleted. [1]: https://github.com/odoo/enterprise/commit/4254542e8fb4ce3b2b9b46c624d86f7fcac8df7b#diff-deebbcccf829fd1804d145c5c7140b482801644bd948639f77caa310b18b8120 [2]: https://github.com/odoo/enterprise/blob/828d47f9ad1d5e396b074c404287799574a6d692/sign/models/sign_document.py#L44 sentry-6842360375 Forward-Port-Of: odoo/enterprise#93818
Creating a new attendee record from eLearning reporting views no longer triggers an error. This prevents interruptions for users reviewing course attendees and keeps reporting workflows usable.
Original PR description
Currently an error occurs when creating the attendee records. Steps to Reproduce: - Install the `website_slide` module. - Go to `Reporting` > `Attendees`. - Go to either the `Graph or Pivot View` and…
Currently an error occurs when creating the attendee records. Steps to Reproduce: - Install the `website_slide` module. - Go to `Reporting` > `Attendees`. - Go to either the `Graph or Pivot View` and click on any `count` value. - Open any attendee record and click on `New`. `SyntaxError: syntax error at or near ")" LINE 18: WHERE SCP.id IN () ^` This error occurs when creating an Attendee record. The _compute_next_slide_id method runs every time the record is accessed, which causes the error [1]. As clearly mentioned in [this commit](https://github.com/odoo/odoo/commit/fd2fb88bb155b680147313433d22a2b7388c902c#diff-1ee3fce434db0c4e897973eebf5c1be501196cbd413e6c250ecc973238f939b9L292-R326), when a compute method is declared without the @api.depends(...) decorator or with no actual dependencies, the computed field will still be initialized when creating a new record from a form view. This commit ensures that when the compute method runs and the record has not been created yet, the next_slide_id is set to False. [1]:- https://github.com/odoo/odoo/blob/9f18013bc05e6657f5d41c05931fcdafad827d54/addons/website_slides/models/slide_channel.py#L91 sentry-6465821899 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217104
Enabling the Can Create option in Studio for Website Live Chat channels no longer triggers an error. This improves reliability for teams customizing Live Chat views and prevents interruptions when configuring channel settings.
Original PR description
Currently, an error occurs when enabling `Can Create` in Studio for a Website Live Chat channels. **Steps to reproduce:** - Install the `im_livechat` and `web_studio` modules. - Go to `Live Chat`,…
Currently, an error occurs when enabling `Can Create` in Studio for a Website Live Chat channels. **Steps to reproduce:** - Install the `im_livechat` and `web_studio` modules. - Go to `Live Chat`, create a new channel, then return to the Live Chat channels view and open the newly created channel in kanban view. - Open `Studio` and enable `Can Create`. **Error:** ``` SyntaxError: syntax error at or near ')' LINE 12: WHERE discuss_channel.id IN () ``` **Root Cause:** At [1], an `SQL query` is executed with `self.ids`, when `self.ids` is `empty`, this leads to an `error`. **Fix:** This commit prevents the error by updating `_get_last_messages` to check for `empty self.ids` and return an empty recordset early and also updates `_compute_duration` to safely handle cases where `record.create_date` is `False`. [1]: https://github.com/odoo/odoo/blob/70a7babcc830f72bd069a5bb1504748363e4e848/addons/mail/models/discuss/discuss_channel.py#L1404-L1421 sentry-6861438710
Archived tasks opened through project sharing now show the same fields as they do in the standard project view. This prevents users from seeing the Recurrent option when it no longer applies, reducing confusion and keeping task details consistent.
Original PR description
**Steps to Reproduce:**
- Share a project.
- From the shared project, archive a task.
- Open the archived task in the standard project form view → the Recurrent field becomes invisible (as expected).
- Open the same archived task from the Project Sharing view by applying the Inactive/Archived filter → the Recurrent field is
still visible.
**Issue:**
The Recurrent field should not be visible for archived tasks. However, in the Project Sharing view, it still appears for inactive tasks.
**Current behaviour:**
The Recurrent field is hidden in the standard form view for archived tasks, but remains visible in the project sharing view.
**Expected behaviour:**
The Recurrent field should remain invisible in both the standard form view and the project sharing view when the task is archived.
**Fix:**
Adjusted the project sharing form view XML to apply the same invisible logic, ensuring the Recurrent field is hidden when the task is archived.
**Task-5040281**In Field Service task forms, the repeat interval is now shown directly under the planned date. This makes recurring task scheduling easier to find and keeps related planning details together.
Original PR description
**Steps to Reproduce:** 1. Open the Field Service app. 2. Create or open an existing task. 3. Check the form view of the task. **Issue:** - The 'Repeat Every' block was displayed at the bottom of the sheet, making it less intuitive. - It should logically appear under the 'Planned Date' block for better visibility. **Current behaviour:** - The 'Repeat Every' block appears in a different section, away from the 'Planned Date' block. **Expected behaviour:** - The 'Repeat Every' block should be displayed directly under the 'Planned Date' block for better usability and logical grouping. **Fix:** - Adjusted the form view XML to move the 'Repeat Every' field below the 'Planned Date' field. **Task-5040281**
This change prevents certain internal performance tests from failing when their timing results vary unpredictably. It helps keep automated checks reliable without affecting customer-facing features.
Original PR description
These tests are non-deterministic, we should not fail when running them. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227515 Forward-Port-Of: odoo/odoo#226278
4 changes
Resolved issues and error corrections
This update prevents certain internal performance tests from failing when timing results vary unpredictably. It helps keep development and release checks stable without affecting customer-facing Odoo features.
Original PR description
These tests are non-deterministic, we should not fail when running them. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227515 Forward-Port-Of: odoo/odoo#226278
When creating a mass mailing, favorite templates now refresh correctly after users change the target audience or related model. This helps users see the right reusable templates at the right time, reducing confusion and manual work.
Original PR description
In mass_mailing, when creating a new mailing, the theme selector allows users to select base templates for their mailings. Users can also add their own model-specific templates by marking mailings as "Favorite"s, which will cause them to show up in model selectors if the template's target model matches the new mailing's target model. However, in some circumstances, changing the target model does not cause the available template mailings to update. This is due to the callback responsible for updating the templates not reading the model variable correctly, causing useRecordObserver to not being called every time it is updated. This commit fixes this issue, therefore causing favorite templates to be updated more reliably. task-5054968 Forward-Port-Of: odoo/odoo#227424
Creating a new attendee record from reporting views no longer triggers an error in the eLearning app. This prevents an unexpected crash and keeps attendee management workflows usable for staff.
Original PR description
Currently an error occurs when creating the attendee records. Steps to Reproduce: - Install the `website_slide` module. - Go to `Reporting` > `Attendees`. - Go to either the `Graph or Pivot View` and…
Currently an error occurs when creating the attendee records. Steps to Reproduce: - Install the `website_slide` module. - Go to `Reporting` > `Attendees`. - Go to either the `Graph or Pivot View` and click on any `count` value. - Open any attendee record and click on `New`. `SyntaxError: syntax error at or near ")" LINE 18: WHERE SCP.id IN () ^` This error occurs when creating an Attendee record. The _compute_next_slide_id method runs every time the record is accessed, which causes the error [1]. As clearly mentioned in [this commit](https://github.com/odoo/odoo/commit/fd2fb88bb155b680147313433d22a2b7388c902c#diff-1ee3fce434db0c4e897973eebf5c1be501196cbd413e6c250ecc973238f939b9L292-R326), when a compute method is declared without the @api.depends(...) decorator or with no actual dependencies, the computed field will still be initialized when creating a new record from a form view. This commit ensures that when the compute method runs and the record has not been created yet, the next_slide_id is set to False. [1]:- https://github.com/odoo/odoo/blob/9f18013bc05e6657f5d41c05931fcdafad827d54/addons/website_slides/models/slide_channel.py#L91 sentry-6465821899 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217104
The calendar year view now updates properly when the browser window is resized. This prevents display issues for users viewing yearly calendars and keeps the layout responsive without extra processing.
Original PR description
FullCalendar already applies a debounce on the `windowResize` handler. Thus, doing it again in our renderer is a duplicated effort. Also, in the Year calendar renderer, the debounced version of the handler is initialized after the FullCalendar instances (one for each month) are created... which prevents it from being run at all. This commit fixes and cleans this up by directly passing our handler to FullCalendar, letting him do the rest. task-4809668 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#227505 Forward-Port-Of: odoo/odoo#227458
1 change
Resolved issues and error corrections
This update fixes a failing automated test related to Hong Kong payroll leave generation after a prior system change. It helps keep payroll quality checks reliable and reduces the risk of future payroll regressions reaching users.
Original PR description
Explanation: _generate_leave method is updated in saas-18.1. build_error-229902
5 changes
Resolved issues and error corrections
Spreadsheet pivots now hide fields that cannot be safely used for grouping when any part of the selected field path is not groupable. This helps users avoid setting up pivot dimensions that would later fail when the system tries to run the query.
Original PR description
A pivot cannot be grouped in a dimension if some link of the field chain is not groupable. This revision removes the special passthrough for o2m and m2o fields as the final query will still be rejected by the server. task-5095342 Forward-Port-Of: odoo/enterprise#95006
This update prevents salary configurator test flows from failing when only the base salary contract app is installed. Belgian-specific fields are now handled in the Belgian payroll module where they belong, keeping the base flow reliable across installations.
Original PR description
`l10n_be_hr_contract_salary` adds a bunch of fields to the salary configurator (by way of new hr.contract.salary.personal.info records). These fields can not be filled in `hr_contract_salary` as they are not present there, thus if the employee flow tour is run with just `hr_contract_salary` installed it fails as soon as it tries to fill one of these additional fields. Move the filling of the fields to `l10n_be_hr_contract_salary` extending the base tour (technically it might be possible to move just the lang and remove the rest since that's the only required field). https://runbot.odoo.com/odoo/error/232583 Forward-Port-Of: odoo/enterprise#94955 Forward-Port-Of: odoo/enterprise#94792
A Swiss payroll test was updated to stop using a field that is no longer supported. This helps keep automated checks reliable and reduces the risk of delays when maintaining payroll functionality.
Original PR description
The CH contract template whitelist test referenced `overtime_from_attendance` when creating a Version. task-5095572 Forward-Port-Of: odoo/enterprise#95034
This fixes the naming used for the bottom sheet’s dark mode styling in the web enterprise interface. It helps ensure the dark mode appearance is applied consistently, reducing small visual glitches for users.
Original PR description
task-5087158 Requires: - https://github.com/odoo/odoo/pull/227628 Forward-Port-Of: odoo/enterprise#95001
This fix adds extra spacing around the mail search bar in dark mode so it no longer appears too close to the header. The change improves visual clarity and makes the interface feel more polished without affecting functionality.
Original PR description
Before this PR, the search bar was too close to the header bar, now padding has been added only in dark mode. Community: https://github.com/odoo/odoo/pull/227647 task-5092001 | Bafore | After | |--------|--------| | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 20 28" src="https://github.com/user-attachments/assets/000b2cb7-bace-4995-a58c-197f05185a99" /> | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 20 09" src="https://github.com/user-attachments/assets/bb5a0114-9e33-427d-a17d-66fb95f702ba" /> | Forward-Port-Of: odoo/enterprise#95004
32 changes
Resolved issues and error corrections
This fix removes an unnecessary test dependency from point of sale tour utilities. It helps keep automated checks more stable and easier to maintain without changing the customer-facing point of sale experience.
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
The Malaysian EDI identity card placeholder was updated to remove hyphens, matching how these numbers are typically entered in ERP systems. This helps prevent user confusion and avoids validation failures with IAP and MyInvois services.
Original PR description
Hyphens are generally omitted in ERPs, and just shown on the Identity card. Putting hyphens in the placeholder is actually misleading for users, and prevents validation through the IAP server and MyInvois Ref: https://en.wikipedia.org/wiki/Malaysian_identity_card#Structure_of_the_National_Registration_Identity_Card_Number_(NRIC) Task [link](https://www.odoo.com/odoo/project/967/tasks/5054821) task-5054821 Forward-Port-Of: odoo/odoo#225094
Several help and documentation links across Odoo Enterprise have been updated so they direct users to the correct 19.0 documentation instead of older 18.0 pages. This reduces confusion and helps users find guidance that matches their current software version.
Original PR description
Community PR https://github.com/odoo/odoo/pull/227546.
This update corrects many documentation links so they lead to the appropriate Odoo 19.0 documentation instead of older 18.0 pages. This helps users and implementers find accurate guidance for the version they are using, reducing confusion and support friction.
Original PR description
Before this commit, many of the url is pointing to 18.0. After this commit, the url will point to 19.0 documentation link. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes payroll localisation test failures by ensuring an attendance-related overtime field is only added where the relevant attendance module is available. This helps keep payroll localisation validation reliable across countries without changing day-to-day payroll features.
Original PR description
**Issue:**
The test_{xx}_contract_template_loading test fails across all localisations due to incorrect fields being passed.
**Cause:**
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution.
**Solution:**
Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module.
build_error-231680
Forward-Port-Of: odoo/enterprise#94004When a payment memo is edited, the related accounting entry reference is now updated to match. This keeps payment and accounting records consistent, reducing confusion during reconciliation and review.
Original PR description
Issue: In previous versions, the memo field of account payments and ref field of account move were related Now that payments do not required to have generated account move's when the memo is updated the ref remains unchanged. Purpose of this PR: To update the account move ref when the payment memo is updated. Steps to Reproduce on Runbot: install accounting go to bank account and assign outstanding accounts for manual payment methods create a payment -- a related account move should be created update the memo on the payment -- the ref on the related account move is unchanged. opw-4989260 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226168 Forward-Port-Of: odoo/odoo#223459
The test suite now uses UTC for domain tests so results are not affected by the server or administrator timezone. This helps keep automated checks consistent across environments and reduces false test failures.
Original PR description
When testing with demo user, the timezone is in the installed localtime for the administrator user. For the tests, force it to UTC. runbot-error-230424 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that occurred when users grouped stock locations while inventory valuation features were installed. This prevents an unexpected crash and lets users analyze locations normally.
Original PR description
Steps to reproduce: - Have `stock_account` module installed - Navigate to stock locations - Group by location Problem: Traceback "ValueError: Cannot convert stock.quant.value to SQL because it is not stored" --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The inventory action to set quantities to zero now works consistently from the forecasted report as well as the physical inventory menu. This helps users correct stock quantities faster and reduces inconsistent inventory handling depending on where the action is used.
Original PR description
The action "Set to 0" was working only via the "Physical inventory" menu and not via the list quants from the forecasted report. This commit makes sure the quant is set to 0 and autoapply the new quantity based on the context (either the "apply" button is present or not Task : 5064269 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
The spreadsheet pivot editor now filters out fields that cannot be used for grouping before users select them. This avoids configurations that would later fail on the server, making pivot setup more reliable.
Original PR description
A pivot cannot be grouped in a dimension if some link of the field chain is not groupable. This revision removes the special passthrough for o2m and m2o fields as the final query will still be rejected by the server. task-5095342
Users can now apply vertical alignment to table cells in the website editor without the formatting menu closing too soon. This makes table formatting more reliable when editing website content.
Original PR description
### Steps to reproduce: - Navigate to the Website module. - Drag and drop a Text Snippet. - Create a Table (e.g., /table) and select a table cell. - Click on Vertical Align button in toolbar and apply alignment option. ### Description of the issue/feature this PR addresses: - When clicking on a vertical align option inside the dropdown, overlay was immediately closed. Because of this, the click event handler was not triggered, and the selected vertical alignment was not applied to the table cell. ### Desired behavior after PR is merged: - Prevent overlay from closing by using `data-prevent-closing-overlay`. task-5062814 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225470
The Discuss search bar now has extra spacing from the header, making the interface look cleaner and easier to use. This is a small visual fix that improves readability and polish without changing functionality.
Original PR description
Before this commit, the search bar was too close to the header bar, now padding has been added. Enterprise: https://github.com/odoo/enterprise/pull/95004 task-5092001 | Before | After | |--------|--------| | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 19 41" src="https://github.com/user-attachments/assets/226c48ff-a6cf-4e13-9f91-7b2fcfa8f92f" /> | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 19 31" src="https://github.com/user-attachments/assets/2b0b8034-6dff-4717-92fc-322b69a5c2ca" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now mark unread notifications as read directly from the messaging menu, including when clicking the check icon. This prevents accidental opening of the related record and makes notification handling work as expected.
Original PR description
Steps to reproduce: * Open the messaging menu from the systray with an unread notification. * Hover on a notification item. * Click on the `mark as read` button (check icon). The notification is not marked as read. Instead, the related record is opened. In [1] UI changes introduced to avoid flickering in the messaging menu modified the structure of the `mark as read` button. Because the click handler only checked if the clicked element exactly matched the button reference, clicks on the inner icon were ignored and triggered the record opening instead. This commit adjusts the button so that clicks are correctly detected even when they occur on the icon. [1]: https://github.com/odoo/odoo/pull/226531 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The stock app now hides the 'Move a Pack' button when package tracking is not enabled. This prevents users from seeing an action that should only be available when packages are configured, reducing confusion in warehouse operations.
Original PR description
As the button is added though an override of the ListRenderer, there was no check on the group made on the button, meaning that even if the 'Packages' setting wasn't activated, the button would still appear. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The messaging search bar now has extra spacing from the header when dark mode is enabled. This small visual fix makes the interface look cleaner and easier to use without affecting other display modes.
Original PR description
Before this PR, the search bar was too close to the header bar, now padding has been added only in dark mode. Community: https://github.com/odoo/odoo/pull/227647 task-5092001 | Bafore | After | |--------|--------| | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 20 28" src="https://github.com/user-attachments/assets/000b2cb7-bace-4995-a58c-197f05185a99" /> | <img width="440" height="673" alt="Screenshot 2025-09-17 at 11 20 09" src="https://github.com/user-attachments/assets/bb5a0114-9e33-427d-a17d-66fb95f702ba" /> |
Custom mailing templates are once again limited to new mailings for the same target type they were created from. This prevents users from accidentally selecting an unsuitable template and helps keep mailing setup consistent.
Original PR description
Previously, custom mailing templates (which could be created by marking an existing mailing as Favorite) would only be accessible for new mailings matching the template's target model. This restriction was lost by the update to the new mailing editor; this commit restores it. task-5054968
This update standardizes the wording shown when duplicating accounting records, changing the label to match the style used elsewhere in accounting. It helps provide a more consistent user experience with no expected change to business processes.
Original PR description
For coherence with other models in accounting. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents an error in the mail module when invalid empty values are included while looking up mail records. It improves reliability by ignoring those empty values before processing, reducing the chance of unexpected failures.
Original PR description
Browse breaks when given a bool, so the solution is to filter the list from false values before browsing --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225916
Website editors no longer see duplicate background controls when adding scroll effects to category showcase blocks. This makes editing ecommerce category sections clearer and avoids confusion in the website builder.
Original PR description
Applying a scroll effect on a block from the categories showcase snippets triggers the parallax plugin, which converts the block into .parallax and adds a .s_parallax_bg child. But both global and snippet-local background option registrations then target the same block, resulting in duplicated controls in the builder. This commit fixes this by removing the snippet's custom WebsiteBackgroundOption registration entirely and adding .s_ecomm_categories_showcase_block to the global background selector. task-5076305 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product showcase design now uses a stronger overlay so product presentation remains clearly visible, even at the highest overlay setting. This improves the shopping page appearance and makes showcased products easier for visitors to view.
Original PR description
This commit adjusts the overlay of the Showcase product design, as it was too light and not visible enough, even when set to its maximum value. task-5090301 | Before | After | |--------|--------| | <img width="1387" height="793" alt="Capture d’écran 2025-09-17 à 15 27 49" src="https://github.com/user-attachments/assets/616e635b-d7ae-4d9a-b6a6-6807e7b68b4d" /> | <img width="1370" height="788" alt="Capture d’écran 2025-09-17 à 15 29 05" src="https://github.com/user-attachments/assets/094e00c2-6658-4d8b-a57d-a909ade08ca4" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website editors can now replace background images in Banner Categories blocks directly from the editor. This fixes a missing media replacement option, making it easier to customize website catalog visuals without workarounds.
Original PR description
Steps to reproduce: 1. Go to Website > Edit Mode. 2. Add a _Banner Categories_ snippet from catalog. 3. Click on the image of a category (e.g., sofas, drawers, or desks) to replace it. 4. Notice that there is no Replace Media button. Issue: The _Banner Categories_ snippet does not contain a selector that triggers the Replace Media option. Reason: Since the snippet lacked a dedicated selector for its background images, the system could not detect or offer the replacement option. Fix: Added a generic selector named o_background_image to both the Banner Categories snippet and the Replace media options. Because it is a generic selector, it can also be reused in other snippets.
This fix adds the missing 'SZJ' product code required by Hungary's official NAV XML invoicing specification. It helps ensure Hungarian electronic invoices can use all officially supported product code types, reducing compliance issues for affected businesses.
Original PR description
Description of the issue/feature this PR addresses: In the official NAV XML 3.0 documentation (available at: https://onlineszamla.nav.gov.hu/dokumentaciok page 123), according to the list of possible product codes, there is an 'SZJ' code that is missing. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226213
Long values in editable Many2one fields are now shortened with a visible ellipsis instead of causing layout misalignment. This keeps employee form fields, such as private state information, visually aligned and easier to read.
Original PR description
The text-truncate bootstrap class of the m2o field does not work properly as the ellipsis is not visible and create an alignment issue with the private_state_id field. This PR solves this issue which can be seen in the "Private information" tab of the employee form. Task-5078736 Forward-Port-Of: odoo/odoo#226214
A flaky automated test for purchase catalog suggestions was temporarily shortened to avoid inconsistent failures. This helps keep validation runs reliable while the related suggestion logic is being reworked separately.
Original PR description
Temporarily remove last part of suggest feature JS tour, which test record interactions as well as filter interactions. WHY: Non deterministic behavior, see: https://runbot.odoo.com/odoo/runbot.build.error/232708 https://runbot.odoo.com/odoo/runbot.build.error/231734 This was simply commented out because the logic, as well as the tour are being reworked in this PR https://github.com/odoo/odoo/pull/225721 task#4783508 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change reverses a previous update that caused automated build failures. It restores the prior behavior for user settings field descriptions, helping keep the system stable for future releases.
Original PR description
This reverts commit adef0f7261de8f5936aff62077732a974c313f39. Responsible for this runbot error: https://runbot.odoo.com/odoo/runbot.build.error/230934
Project reports now leave out tasks that belong to template projects, so reporting reflects only real active project work. This prevents template setup data from distorting business metrics and management views.
Original PR description
Tasks in project templates should be excluded from the reporting. Task-5096193
This update fixes internal test failures for Mexico electronic invoicing by giving the test user the required Sales permissions. It helps keep validation reliable without changing how customers create sales orders or invoices.
Original PR description
The tests `test_global_discount` and `test_down_payment` in `l10n_mx_edi_sale` were failing with:
AccessError: You are not allowed to create 'Sales Order' (sale.order) records.
This happened because `mx_external_setup` runs with a user that does not belong to any Sales group. Both tests explicitly create Sale Orders and advance payment wizards, which require Sales ACLs.
This change ensures the test user has the `sales_team.group_sale_salesman` group in `setUpClass`, so Sales Orders can be created normally. No business logic is modified, only test stabilization for the MX localization.
[RB-232559](https://runbot.odoo.com/odoo/error/232559)
Forward-Port-Of: odoo/enterprise#94911This update fixes an internal Swiss payroll test by removing a reference to a field that is no longer supported. It helps keep automated checks reliable without changing payroll features or user workflows.
Original PR description
The CH contract template whitelist test referenced `overtime_from_attendance` when creating a Version. task-5095572 Forward-Port-Of: odoo/enterprise#95034
The automatic cleanup process now skips documents that are linked to signed document records. This prevents background deletion jobs from failing while still keeping signed documents protected from manual deletion.
Original PR description
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment…
Currently an error occurs when auto vacuum tries to clear documents linked to `sign_document`. **Steps to replicate:** * Install `documents_sign` with demo data. * Go to documents > Move Employment contracts to trash * Trash > Try to to delete employment contract you will see error in terminal. Similarly error will be produced by the Auto-Vacuum process when it attempts to delete it after the configured deletion delay. **Error:** `ForeignKeyViolation: update or delete on table 'ir_attachment' violates foreign key constraint 'sign_document_attachment_id_fkey' on table 'sign_document' DETAIL: Key (id)=(1164) is still referenced from table 'sign_document'.` **Root cause:** * At [1], the `sign.document` model was introduced, which prevents the deletion of sign documents. As a result, attempting to delete them due to [2] will cause an error. **Solution:** * Update the `_get_gc_clear_bin_domain` to ensure that the Auto-Vacuum process skips sign documents. * This will still throw an Validation and ForeignKey error as expected when the user tries to delete it from the GUI letting them know it cannot be deleted. [1]: https://github.com/odoo/enterprise/commit/4254542e8fb4ce3b2b9b46c624d86f7fcac8df7b#diff-deebbcccf829fd1804d145c5c7140b482801644bd948639f77caa310b18b8120 [2]: https://github.com/odoo/enterprise/blob/828d47f9ad1d5e396b074c404287799574a6d692/sign/models/sign_document.py#L44 sentry-6842360375 Forward-Port-Of: odoo/enterprise#95018 Forward-Port-Of: odoo/enterprise#93818
This update standardizes button text, tooltips, and accessibility labels across the online shop. It makes customer-facing actions clearer and more consistent while also correcting minor wording and formatting issues.
Original PR description
Harmonize & fix buttons labels/titles/aria-labels Correctly format/order button nodes attributes Fix some typos --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enabling the Can Create option in Studio for Website Live Chat channels no longer triggers an error. This prevents an interruption when administrators customize Live Chat views and makes the setup experience more reliable.
Original PR description
Currently, an error occurs when enabling `Can Create` in Studio for a Website Live Chat channels. **Steps to reproduce:** - Install the `im_livechat` and `web_studio` modules. - Go to `Live Chat`,…
Currently, an error occurs when enabling `Can Create` in Studio for a Website Live Chat channels. **Steps to reproduce:** - Install the `im_livechat` and `web_studio` modules. - Go to `Live Chat`, create a new channel, then return to the Live Chat channels view and open the newly created channel in kanban view. - Open `Studio` and enable `Can Create`. **Error:** ``` SyntaxError: syntax error at or near ')' LINE 12: WHERE discuss_channel.id IN () ``` **Root Cause:** At [1], an `SQL query` is executed with `self.ids`, when `self.ids` is `empty`, this leads to an `error`. **Fix:** This commit prevents the error by updating `_get_last_messages` to check for `empty self.ids` and return an empty recordset early and also updates `_compute_duration` to safely handle cases where `record.create_date` is `False`. [1]: https://github.com/odoo/odoo/blob/70a7babcc830f72bd069a5bb1504748363e4e848/addons/mail/models/discuss/discuss_channel.py#L1404-L1421 sentry-6861438710 Forward-Port-Of: odoo/odoo#225899
This change prevents internal performance tests from failing because of unpredictable timing variations. It helps keep development and release checks stable without affecting customer-facing features.
Original PR description
These tests are non-deterministic, we should not fail when running them. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227515 Forward-Port-Of: odoo/odoo#226278
2 changes
Resolved issues and error corrections
This fix makes automated invoice date checks for Mexican electronic invoicing less sensitive to tiny timing differences. It helps avoid false test failures without changing customer-facing invoicing behavior.
Original PR description
ignored micro-seconds in CFDI date assertion to avoid test failure build_error-223223
This fix prevents Odoo's core data loading process from crashing in rare cases involving invalid or mixed record references. It improves system stability and consistency without changing normal user workflows.
Original PR description
This commit addresses two corner cases that cause `fetch()` to crash: Mixing new and real records: - Issue: If a recordset contains both new and real records, `fetch()` raises an `AccessError`. - Rationale: While we typically assume that new and real records are never mixed, certain recordset operations can inadvertently lead to this state. Handling this case improves the overall robustness of the ORM. Using `False` as a record id: - Issue: Using a record with a `False` id, such as `browse([False])`, causes a SQL error when `fetch()` is called. - Rationale: Other operations, like `browse([False]).name`, work without crashing. To ensure consistency across the ORM, `fetch()` should also handle `False` ids without error.