Thursday, October 2, 2025
35 changes · 19.0
Enhancements to existing features
The IoT Box device information now includes its MAC address and shows it on the IoT Box homepage. This makes it easier during installations to identify each box and assign stable IP addresses reliably.
Original PR description
This PR adds the MAC address to the device info returned by the IoT Box. It is displayed on the IoT Box Homepage. This helps to fix ip addresses of the IoT Boxes during the installations. Forward-Port-Of: odoo/odoo#228042
Turkish Nilvera e-invoice and e-dispatch documents now combine both address lines into the street name sent to Nilvera. This better matches Nilvera's expected format and removes the need for users to leave the second address line empty.
Original PR description
…reet2 in UBL We are concatenating the values of `street` and `street2` fields on `res.partner` because nilvera expects only <cbc:StreetName> for the fully qualified street name. The previously enforced validation that forced `street2` to be left empty is also removed to match the change. task-5002986 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Product category pages generated by the website sales tool can now include a cover image when one is available. This helps create richer, more visually appealing storefront pages with minimal manual work.
Original PR description
Also add the cover_image for the product category if available
Resolved issues and error corrections
Opening Time Off from an employee profile no longer triggers a Missing Record error. This ensures users can access leave information reliably from their profile without interruption.
Original PR description
**Steps to reproduce (without demo data):** - Install hr_holidays - Go to "My Profile" - Open "Time Off" **Issue:** Accessing Time Off from a user profile triggers a `Missing Record` error. **Cause:** The system was passing the user’s active_id to the employee record incorrectly. **Fix:** Now, when the context's active_model is 'hr.employee', the correct active_id is applied. **Commit issue:**https://github.com/odoo/odoo/pull/225839 Forward-Port-Of: odoo/odoo#229497
Documentation and clarification updates
This pull request updates the corporate contributor agreement records for Willdooit. It helps keep Odoo's legal contribution documentation accurate and up to date, with no expected impact on product features or users.
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
Marketing automation email templates have been updated to work with the latest email building blocks. This helps ensure campaign, trial, partnership, discount, and website sales emails keep their intended layout and presentation.
The vehicle kanban view now correctly shows and uses the contracts button. This helps fleet users access vehicle contract information reliably from the overview screen.
Original PR description
Fix contracts button in vehicle kanban Task-5109335 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228341
This fix makes employee record handling more reliable when databases contain unusual or inconsistent version information. It helps prevent HR processes from being affected by edge cases in employee data history.
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
This fix corrects the styling of the Belgian payroll holiday attestation screen so it appears as intended. It helps employees and HR users view the holiday attestation information more clearly after a previous UX update used the wrong layout classes.
Original PR description
We recently fixed the UX of holiday attest but the classes used in xml were wrong. We fix this in this task. Task: 5109176
The Belgian payroll employee view now uses the correct styling for holiday certificates. This fixes a recent display issue so HR users see the holiday attest information as intended.
Original PR description
We recently fixed the UX of holiday attest but the classes used in xml were wrong. We fix this in this task. Task: 5109176
The HTML editor now avoids including ignored, untracked content when saving an editing snapshot. This prevents errors that could block snapshot creation and helps keep editor history actions reliable for users.
Original PR description
When creating a snapshot step, unobserved nodes (i.e. node inserted via `ignoreDOMMutations`) should not be included in the snapshot step. This commit restores a previous behavior in which, on serialization, nodes that had no entry in the node map were ignored (instead of throwing an error). Because of this thrown error, before this commit it was not possible to create a snapshot step if the editable contained unobserved nodes.
This fixes budgets that are shared across companies without a specific company assigned. The budget screen now has a fallback currency so money amounts display correctly when those companies use the same currency.
Original PR description
Budgets can work without a company, making the assumption that all the companies using the budget have the same currency. This is done by not setting a company on the budget. Since the currency is computed on the company, we need a fallback for the monetary widget to work.
The Belgian payroll working schedule change process now opens the employee record with the newly selected version instead of showing an outdated list view. This reduces confusion for HR users and helps them continue their workflow in the right place after validating a schedule change.
Original PR description
…dule change The working schedule change wizard was redirecting to a list of version when validating. This was the old behavior with the contract. Instead, redirect to the employee form view with the new version selected. task-5126204 Forward-Port-Of: odoo/enterprise#95877
This fix ensures text highlights with transparent custom colors display evenly, without darker edges caused by overlapping fill and outline colors. It also adjusts a website menu test so it runs reliably in more test environments.
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
This fix prevents an error from appearing when users edit a refusal email while processing an applicant. The unavailable template-saving option is hidden for this flow, allowing recruitment users to continue without interruption.
Original PR description
Steps to reproduce: - open any applicant in recruitment app - click on refuse button - enable send email toggle key - edit the message - try to save the template Issue: - traceback pop ups and not able to save the template Reason: - The method 'open_template_creation_wizard' is missing, causing the error when trying to save the template. This method was not implemented. Solution: - Remove the 'save the template' feature for this version by adding the context. It require two fields which are not present in the current model, thus avoiding the error. task-4948736 Forward-Port-Of: odoo/odoo#220118
This fixes how subscription combo sections are handled when creating invoices. It prevents correct section information from being overwritten and avoids adding unnecessary section details, helping invoices stay accurate and easier to read.
Original PR description
This commit improve fix of PR https://github.com/odoo/enterprise/pull/90989 to avoid overriding right combo section values and avoid setting unnecessary values on the section. opw-5069278 Forward-Port-Of: odoo/enterprise#95831 Forward-Port-Of: odoo/enterprise#94776
Fixed an issue where the favorite star on spreadsheet dashboards did not visually update immediately on mobile after being tapped. This makes the favorite action clearer and more consistent with the rest of Odoo.
Original PR description
The star icon on mobile would have a strange behaviour. After clicking it, the star would not change between filler/not filled until clicking elsewhere. It turns out that on mobile, after a click the hover rule is applied. And our hover rule would modify the icon to be the opposite of what it should be. This commit changes the CSS to use the same css as `BooleanFavoriteField` to stay consistent with the rest of Odoo. Task: [5092945](https://www.odoo.com/odoo/2328/tasks/5092945) 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#227663
The Talent applications button now opens the same set of related applications that is shown in the application count. This prevents recruiters from seeing a mismatch between the count and the list, making talent records easier to review accurately.
Original PR description
`_get_similar_applicants_domain` used in `action_open_applications` did not return the same domain used in `_compute_application_count`. Fixed by complementing the domain within `_get_similar_applicants_domain` used in the action to include applications with the same associated `pool_applicant_id` as the current applicant/talent. Task-5092128 Forward-Port-Of: odoo/odoo#228007
This fixes an automated Accountant app test so it waits for the final merge wizard action before closing. It reduces false test failures and helps keep accounting-related updates moving through validation more reliably.
Original PR description
The last check of the tour is always true. So it sometimes closes too early. Wait really for the last operation for the last check runbot-error-108440 Forward-Port-Of: odoo/enterprise#95991
Fixes an issue in the HTML editor where the color picker could close unexpectedly when previewing a background color for a table cell. This makes table formatting more reliable and avoids interrupting users while editing content.
Original PR description
Problem: When applying a background color to a `td`, the color picker dismisses unexpectedly. Cause: After c810b0c17b2f882b0ab5d073ba38464bffb0617e, we rely on the class `o_selected_td` to check if…
Problem: When applying a background color to a `td`, the color picker dismisses unexpectedly. Cause: After c810b0c17b2f882b0ab5d073ba38464bffb0617e, we rely on the class `o_selected_td` to check if we are in a selected `td` to keep the toolbar open. However, in another fix (254efd86cd1ce871807fdc25479ebc5beeb4eab3), we removed that class during the color preview operation. Previewing a color on a `td` triggers a selection change, which runs `shouldBeVisible`. Since `o_selected_td` is not found, the toolbar closes along with the color picker. Solution: Update https://github.com/odoo-dev/odoo/commit/254efd86cd1ce871807fdc25479ebc5beeb4eab3. A better fix is to use `o_selected_td_bg_color_preview` which will undo the `box-shadow` when we preview a color. Steps to reproduce: 1. Add a table. 2. Select a cell. 3. Apply a background color. 4. Select the cell again. 5. Hover a color to preview. → The color picker dismisses once a color is hovered. opw-5066309 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225827
This fix prevents a completed kiosk payment from being processed twice by the payment terminal listener. It reduces unnecessary error logs and helps keep self-order payment flows more reliable for staff and customers.
Original PR description
Before this commit, when using an IoT payment terminal in the Kiosk, an error could sometimes be logged due to the event listener running twice after the payment is completed. After this commit, the issue is fixed by moving the `removeListener` call to be before the RPC call, preventing the event from being triggered multiple times.
Editing a message with mentions no longer lets users accidentally alter or partially delete those mention links. This keeps conversations cleaner and prevents broken references to people or channels, including in live chat and mail discussions.
Original PR description
This fixes the issue that when editing a message with mentions, the mentions were editable and could be partially deleted. This is fixed by preprocessing the message body when loading it for edition, addding contenteditable="false" and draggable="false" to the mention links. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where Spanish tax report logic could fail when records were created without date settings, such as during automated checks. The change makes the report handling more resilient while keeping normal date validation unchanged for regular use.
Original PR description
The `_get_mod_period_and_year` method assumed that `options['date']` would always be present with `date_from` and `date_to`. However, during the automatic `TestEveryModel.test_computed_fields_without_dependencies`, this method is called on a `new()` record where no options are provided. This resulted in a `KeyError: 'date'`. We now gracefully handle missing or incomplete `options` by returning `(None, None)` instead of raising an exception. This ensures that tests and new records can be created without errors, while preserving the original validation logic when valid options are given. build_error-231511 Forward-Port-Of: odoo/enterprise#94154
Website editors can once again use the “On Hover” animation option on images that have decorative shapes. The option is only hidden when the selected shape already includes its own animation, preventing conflicting effects while restoring expected design flexibility.
Original PR description
Applying a shape to an image unintentionally disabled the "On Hover" animation option. This commit restores the option with proper checks, ensuring it remains disabled only when the applied shape includes an animation. The related code was also refactored slightly for improved readability. Steps to reproduce: 1. Enter edit mode in Website. 2. Add an image and apply a shape. 3. Notice that the "On Hover" animation option is incorrectly hidden. Forward-Port-Of: odoo/odoo#225527
This update fixes internal spreadsheet test helpers so they can handle sorting scenarios correctly. It helps ensure spreadsheet-related changes are tested more accurately, reducing the risk of sorting issues reaching users.
Original PR description
Task: 4962837 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#227566 Forward-Port-Of: odoo/odoo#223011
This fixes an issue in the HTML editor where opening the color picker from a link popover could create an extra button and leave preview colors in the wrong state. Users can now adjust or reset button colors more reliably, with the original button restored correctly after hovering through color options.
Original PR description
Before this commit: the onchange is applied when the color picker closes, it has a few issues, 1. adding duplicate button cause the reference of the link element is not passed correctly 2. the preview color isn't reset when mouse no longer hovering on the colors After this commit: The onchange is applied when on color reset. No more additional button inserted and color of the button is properly restored after the cursor is out of color picker task-4966317 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225664
This fix prevents the website preview from briefly showing outdated styling after a page design change. Business users get a smoother editing experience when saving theme changes and navigating between pages.
Original PR description
In this [commit], fallback iframe was added to avoid flickering between iframe reloads. But the flicker still happens if we change page's style, since we do not apply the new styles to the fallback iframe. To reproduce the issue: - Open Website and start editing - Move to the 'Theme' tab - Change page layout to 'Boxed' - Set background color to a non-transparent color, e.g. red - Save, and do any action to reload the iframe, e.g. go to /contactus => The iframe flickers from the previous color to red, which shouldn't be the case. Task-4985472 [commit]: https://github.com/odoo/odoo/commit/7b19831e1c624b483008feb526ba773ec8b23009 Forward-Port-Of: odoo/odoo#228863 Forward-Port-Of: odoo/odoo#221391
The API documentation now skips a default value that could not be converted into the format needed for display. This prevents an error when generating documentation for affected public methods and keeps the documentation page usable.
Original PR description
There is the following public method on the ir.ui.view model:
def distribute_branding(self, e, branding=None, parent_xpath='',
index_map=ConstantMapping(1)):
The default value for `index_map`: `ConstantMapping`, is not json-serializable. Trying to `json.dumps` it raises a TypeError. We want to ignore the default value in this case.
Reported-by: Sunhyeok Sam <suju@odoo.com>
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-prThis fixes an error that could appear after closing a fullscreen YouTube video added through the website editor. The mail fullscreen handling now ignores unrelated fullscreen activity, helping users close videos without disruptive browser errors.
Original PR description
Versions -------- - 19.0+ Steps ----- 1. Go to an eCommerce product page; 2. open the website editor; 3. add a YouTube video as extra media; 4. save changes; 5. open the video in fullscreen; 6. close the video. Issue ----- > `UncaughtPromiseError > TypeError` > `Uncaught Promise > can't access property "closeOverlay", this is undefined` Cause ----- The `mail.fullscreen` service adds an event listener to `window` on start. This listener gets triggered on `fullscreenchange` events. Once triggered, there's a naked `exit()` call, hence when entering the `exit` function, `this` is not defined. Solution -------- - Explicitly store `closeOverlay` in `state`. - Call `state.exit()` instead of `exit()`. - Return from `exit` if `id` is undefined (i.e. non-mail fullscreen). opw-5105959
This fix makes the send button visible when editing a chatter message on mobile devices and places the discard editing option in a clearer position. Mobile users can now complete or cancel message edits without confusion or hidden controls.
Original PR description
**Purpose of this PR:** This PR addresses UI issues in the mobile view of the chatter during message editing. - Ensures the send button is properly displayed while editing messages on mobile. - Moves the "Discard Editing" action above the composer. **Before this PR:**  **After this PR:** <img width="446" height="132" alt="image" src="https://github.com/user-attachments/assets/1842f341-268a-40e3-8915-dc08fb9162b3" /> task-[4780731](https://www.odoo.com/odoo/project/1519/tasks/4780731) Forward-Port-Of: odoo/odoo#213943
This fix keeps certain Mexican electronic invoicing weight fields consistent with official stamped documents by preventing later edits where they could create mismatches. It also hides duplicate weight information in product screens when variants are used, reducing customer confusion.
Original PR description
In refactor for l10n_mx_edi_stock, l10n_mx_edi_extra_weight was added to handle the weight of the driver and luggage. However, the condition to prevent the field from being edited once it has been stamped was not added, which could cause confusion if it could be edited later and a value different from that of the CFDI could be seen. The condition to make it readonly has been added, like the rest of the location fields in stock.picking. In addition to this, when testing the flow, we also detected a conflict with Odoo Standard in the l10n_mx_edi_extended module. This module added the weight field again, now on the product accounting page. The standard weight field had a condition to make it invisible if the product had variants, but this one did not, which could cause confusion for customers, so these conditions were also added. I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update changes a purchase-related validation from a hard block into a warning during migration to Odoo 19.0. Users are still alerted when something may need attention, but migrations can continue more smoothly without being stopped by this check.
Original PR description
The constrain on `purchase_ok` could block the migration to 19.0. In order to still alert user something may be wrong but but letting the migration run smoothly, this commit change the constrain to a warning. 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
Website image galleries now load the correct template when visitors click images, avoiding a disruptive error message. This helps job pages and other website pages with gallery snippets work as expected for visitors and editors.
Original PR description
Clicking on an image gallery snippet currently triggers a "missing template" error. This happens because the gallery template is only defined in the 000 version file, while the corresponding view record for that version has been disabled. This commit resolves the issue by moving the gallery templates to the 001 version file, ensuring they are properly loaded. Steps to reproduce: 1. In Website, navigate to /jobs. 2. Create a new job and save it. 3. Click on any image at the end of the job page. 4. Observe the "missing template" error. Forward-Port-Of: odoo/odoo#226333
Helpdesk ticket lists now sort ticket references in a more natural order, even after the count reaches three digits. This makes it easier for users to find the newest or oldest tickets without confusing results caused by text-based sorting.
Original PR description
**Issue** With the default `helpdesk.ticket` sequence, once users reach 100 tickets, ordering tickets by `ticket_ref` in the list view is unintuitive as it is a Char field (so '11' > '100') and the results are not useful if the user wants to see the oldest/newest tickets. opw-4891916 Forward-Port-Of: odoo/enterprise#95548 Forward-Port-Of: odoo/enterprise#93058
This fixes an internal test setup issue so purchase reordering rule tests can access the product route field again. It helps keep automated checks reliable after a recent route visibility change, with no direct impact on end users.
Original PR description
The setup class `TestReorderingRule` fails with `AssertionError: field 'route_ids' is not visible`.
This happens because the `route_ids` field on the product form is only visible when `has_available_route_ids` is `True`, which requires at least one route to be `product_selectable`.
After recent changes here: https://github.com/odoo/odoo/pull/223685, the Buy route (`purchase_stock.route_warehouse0_buy`) is no longer product-selectable, causing the field to be hidden and the test to break.
This commit re-enables `product_selectable` on the Buy route in tests to make sure `route_ids` is visible and the reordering rule tests run successfully.
I also removed `cls.env.user.group_ids += cls.env.ref('uom.group_uom')` it was a duplicated line, from two different fixes.
[RB-232574](https://runbot.odoo.com/odoo/error/232574)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr