Thursday, October 9, 2025
22 changes · saas-18.4
Enhancements to existing features
This update strengthens quality checks for the self-ordering point-of-sale experience by adding automated test coverage for key screens, data models, and service behavior. It also reorganizes some internal test setup so future changes can be validated more safely and with fewer naming conflicts.
Original PR description
- Isolated `printer` service into a standalone file to avoid naming conflicts with `point_of_sale` during tests. - Introduced `setupSelfPosEnv` to mock and bootstrap the self-order testing environment. - Add Hoot test coverage for core components, models, and service logic Task-4945633 Forward-Port-Of: odoo/odoo#220537
This update improves the internal test tools used for the website editor so tests wait for the sidebar to finish loading and updating before continuing. This helps reduce flaky test results and gives teams more confidence that website builder changes are validated reliably.
Original PR description
We need a helper to wait enough
Resolved issues and error corrections
This fixes a typo in the UAE payroll configuration where a salary rule was incorrectly labeled "Out of version" instead of "Out of Contract". The correction helps payroll users see the intended wording and avoid confusion when reviewing salary rules.
Original PR description
fix an accidental change during a forward port from "Out of Contract" to "Out of version" task-5075058
This change updates the mail module's automated tests so saving email HTML fields waits until the save action is actually available. This helps reduce false failures in Odoo's runbot test system and improves confidence in build results.
Original PR description
This commit tries to solve runbot issues with mail html fields widget. It seems clicking on the save button manually is not generating a call to the backend. This could be due to the fact the button is not enabled due to the data being invalid. Therefore using the clickSave util could be useful in those situation since waiting that the button becomes enabled. This solution is not 100% sure to fix the issue in all cases but manually disabling the button is creating the issue we can observe in those runbots. There is a good chance it might work. fixes-runbot-231582 fixes-runbot-233049 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227484
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/odoo/2328/tasks/5003595) Forward-Port-Of: odoo/enterprise#94769
The employee form now displays the private address city, state, and ZIP fields in better horizontal alignment. This makes the Swiss payroll employee form easier to read and use, reducing visual confusion when entering address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/enterprise#94779
The employee form layout now keeps the private address city, state, and zip fields aligned on the same row. This improves readability and reduces visual confusion when viewing or editing employee address details.
Original PR description
Wrap private address city, state, and zip fields in a flexbox container to ensure proper horizontal alignment on the employee form view. task-5082714 Forward-Port-Of: odoo/odoo#226935
This fix prevents an error that could occur when an administrator clears browser data in Chrome while Live Chat is installed. It adds a safeguard so the Live Chat storage cleanup handles Chrome's empty storage notification correctly, improving reliability without changing user-facing features.
Original PR description
**Steps to reproduce:** Install 'Live Chat' Open Chrome Log in as 'Admin' Clear browser data **Current behavior before PR:** Clearing data triggers a storage event where the key parameter is null. An event listener attempts to call a method on this null key, leading to a runtime error. **Desired behavior after PR is merged:** A check has been added to ensure the key is not null, preventing the error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230298
Vendor credit notes created through purchase order matching now show the correct positive quantity when reversing over-billed purchase items. This prevents confusing negative quantities and helps keep purchase billing corrections accurate.
Original PR description
Steps to reproduce:- - Create a Purchase Order with Product A(invoicing policy: received quantities) and Quantity 3. - Create Vendor Bill with Product A and Quantity 3 and match it with the PO. - Receive only 2 on PO. - Now on PO, Quantity: 3, Received:2, Billed:3 - Create a Vendor Credit Note for that partner, add an empty line and save. - Click on PO Matching at the top. - Select line from Vendor Credit Note and line from PO, click match. Problem: In Vendor Credit Note Quantity: -1 (which should be 1) Before this commit: When credit note values are prepared from purchase order, quantity to invoice on purchase order is set as quantity on credit note. After this commit: When credit note values are prepared from purchase order, inverse(-ve) of quantity to invoice on purchase order is set as quantity on credit note. task-4975200 Forward-Port-Of: odoo/odoo#230487 Forward-Port-Of: odoo/odoo#221203
Spreadsheet-related tests now load the full chart library setup they depend on. This prevents later tests from failing unpredictably when they need specialized chart types such as treemap or geographic charts, improving reliability without changing user-facing behavior.
Original PR description
Some tests were loading Chart.js using loadJS, without the corresponding bundle. That means that the test that comes after could fail if they required treemap/geo charts, as they weren't loaded in ChartJs. Task: [5003595](https://www.odoo.com/web#id=5003595&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The restaurant appointment feature has been updated so its floor screen stays compatible with recent core point-of-sale changes. This helps prevent display or navigation issues for businesses using restaurant tables together with appointments.
Original PR description
This commit adapts an overriding method to reflect changes in the base method done in this pr https://github.com/odoo/odoo/pull/176016. Forward-Port-Of: odoo/enterprise#91334
Odoo Studio now identifies custom fields using their stored status rather than relying on naming rules. This keeps custom field behavior reliable as older name-based checks are phased out and reduces duplicate configuration work in related apps.
Original PR description
With the fields method `_is_manual_name` being deprecated, checking whether a field is manual can be done through the state instead of the field name. This avoids the need to override the definition of a custom field name in another place in the applications that need to do it. Related https://github.com/odoo/odoo/pull/224524
Test data for Hong Kong payroll accounting now includes required leave allocation records. This prevents validation errors in automated checks, helping keep payroll-related releases stable.
Original PR description
Issue: Unit tests are failing because test data was created without leave allocations, leading to validation errors. Fix: Added leave allocation data for time off types which requiring allocation in some tests. build_error-230409 Forward-Port-Of: odoo/enterprise#96060 Forward-Port-Of: odoo/enterprise#93160
The sales timesheet invoicing wizard now uses a safer format for a setting in its screen definition. This prevents errors for customers with custom tools that read these views outside the browser, while keeping the user experience unchanged.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fixes an issue where custom hour or half-day options could be unintentionally cleared when an employee changed the time off type. It helps preserve the user's leave request choices and reduces the need to re-enter information.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
This fix ensures multiple quote carousels on the same website page each receive a unique identifier. As a result, visitors can use carousel arrows without accidentally controlling a different carousel on the page.
Original PR description
The selector used to target the carousel, to generate unique ID, did not include some carousels (s_quotes[...]). This led to issues with the controllers that would not be linked to the correct carousel. Steps to reproduce the issue: - Go to Edit - Drop two "s_quotes_carousel" - Save - Click on the "next" arrow of the second carousel => The second carousel does not slide, but the first one does.
The appraisal skills list now scrolls properly on mobile devices, so users can access the justification field and add or remove skill entries. This fixes a mobile usability issue that could prevent completing appraisal skill information smoothly.
Original PR description
Horizontal scrolling has been disabled on the appraisal skills list. An unwanted side effect of that is that the justification field along with the add and remove buttons are not visible on mobile. This PR re-enables the scrolling and removes some dead css. task-5001344 Forward-Port-Of: odoo/enterprise#96527 Forward-Port-Of: odoo/enterprise#91882
This fixes a small issue in the HTML editor that could trigger an unexpected JavaScript error when inserting content. The change helps keep editing actions stable and prevents interruptions for users working with rich text fields.
Original PR description
In `dom.insert`, the variable `container` was being redefined to a constant within a `while` loop, making it impossible to use the original variable within the loop. This caused an `Uncaught Javascript Error` ("Cannot access 'container' before initialization") whenever trying to access it within the loop but above the redefinition. This commit renames the constant to a previously unused name.
opw-5053872
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe color picker in the website and HTML editing tools now reopens on the tab that matches the user's last color choice, such as custom colors or gradients. This makes styling pages smoother by avoiding extra clicks and reducing confusion when adjusting colors repeatedly.
Original PR description
*web, website Before this commit, `BuilderColorPicker` had no memory of the last used tab and always opened on the first tab, regardless of whether the user had previously selected a color. After this commit, if the user has done a selection, the color picker opens on the tab of that selection. How to reproduce the problem: 1. Drop a new snippet, e.g. `s_text_block`, 2. Click on the snippet, then open the "Background" color picker 3. Pick a custom color or a gradient 4. If the color picker is stil open, press ESC 5. Open the color picker again 6. PROBLEM: the color picker is opened on the "theme" tab task-4367641
This fixes an issue where links opened from non-Website apps could be incorrectly changed and send users to the website homepage instead of the intended internal page. The change keeps Website-specific link behavior limited to the Website app, reducing confusion when working in other Odoo apps such as Knowledge.
Original PR description
Before this commit: we have the function in website to prefix a frontend url with `@` when clicking on the url in linkpopover. However, this function is usually used inside website. It also affects places where the url is an internal redirecting url like `/knowledge/article/33` and prefixing will lead to the website homepage. After this commit: we also check if the current url of the browser is also a frontend url, which means the user is inside the website app. Frontend links will not be prefixed in the backend pages, e.g. in all other apps except for website. The website patch doesn't influence public users as they won't have access to the website app anyways. task-5048403 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes an internal website test more dependable by using a standard helper to switch between websites. It reduces unstable automated test failures, helping keep website translation features safer to release.
Original PR description
`snippet_translation_switching_website` was previously using custom steps to switch the website. Though it worked, it was not very deterministic and broke the tour in a few runbot builds. This commit updates the `snippet_translation_switching_website` tour to use the `testSwitchWebsite` helper function instead of custom steps, providing a more reliable and deterministic way to switch websites. runbot-[229696](https://runbot.odoo.com/odoo/error/229696) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where highlighted, animated text could make mobile website pages scroll sideways. The change keeps the highlight graphic within the available screen width, improving the mobile editing and viewing experience.
Original PR description
Steps to reproduce: ==================== 1. Open Website Builder and switch to mobile screen 2. Select any word of a text 3. Apply highlight and animation Bug: - Page becomes scrollable to the right Cause: ======= SVG elements default to a `300px` `width`, which can overflow on smaller screens (e.g. mobile). This commit sets a `width` to prevent horizontal overflow. This is the link for the same issue but for vertical overflow. https://github.com/odoo/odoo/pull/215826 Reference: https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/width opw-5120678 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr