Thursday, October 23, 2025
34 changes · 19.0
New functionality added to Odoo
This update adds automated checks for how the Point of Sale handles linked sales orders, quotations, order lines, and down payments. It helps prevent regressions in sales workflows by making sure these scenarios continue to work as expected in future changes.
Original PR description
Task: [#4945627](https://www.odoo.com/odoo/my-tasks/4945627)
Community PR: [#221920](https://github.com/odoo/odoo/pull/221920)
Runbot: https://runbot.odoo.com/runbot/bundle/saas-18-3-hoot-pos-sale-ltra-390474
---
This commit adds Hoot tests for the `pos_sale` module:
- components
- control_buttons
- onClickQuotation (1)
- orderline (1)
- models
- pos_order_line
- getSaleOrder (3)
- saleDetails (2)
- setQuantityFromSOL (2)
- pos_order
- _getIgnoredProductIdsTotalDiscount (1)
- services
- pos_store
- onClickSaleOrder (4)
Also add a product used for down payments and create a sample sale order with two lines to support the tests.
Forward-Port-Of: odoo/odoo#230851
Forward-Port-Of: odoo/odoo#221920Enhancements to existing features
This change suppresses a misleading warning caused by a third-party packaging issue on Ubuntu Jammy systems. It helps keep logs and automated checks cleaner without changing business functionality or user workflows.
Original PR description
Apparently on jammy the pdfminer package returns nonsensical versions (the distribution for `pdfminer.six` yields `-VERSION-`, and inside the python code the `__version__` is `__VERSION__`). When trying to look up the distribution for the (invalid as a distribution name) `ldap`, as a fallback `pkg_resources` parses every package on the sys.path before returning a lookup failure. Doing so, it encounters `pdfminer` fails to parse its version as a `Version`, warns that that is deprecated, then parses it using the more lenient `LegacyVersion` and warns that this is also deprecated. Since this is a packaging issue in just jammy and we can't really do anything about it, just sweep the issue under the rug. https://runbot.odoo.com/odoo/error/163677 Forward-Port-Of: odoo/odoo#232650
Resolved issues and error corrections
This fixes a small issue where certain website shop snippet settings could cause an error on demo snippet pages. The change helps keep the website editor and storefront pages stable when optional layout information is missing.
Original PR description
Cause: SIZE_CONFIG[nodeData.size] can be undefined in some snippet configurations, causing a TypeError when accessing .span. Steps to reproduce: 1) Install website_sale with demo data, 2) Visit page url `/website/demo/snippets` and check the browser console for the error. Solution: Use optional chaining (SIZE_CONFIG[nodeData.size]?.span) to safely access the property and prevent the frontend crash. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Code cleanup and technical improvements
This update applies code quality checks and cleanup across the VoIP feature, including the softphone and related tests. It does not introduce new user-facing functionality, but helps keep the calling tools more reliable and easier to maintain over time.
Original PR description
Forward-Port-Of: odoo/enterprise#97753
Documentation and clarification updates
This pull request adds or updates a contributor license agreement signature for DevSijariya. It is an administrative legal update that confirms contribution eligibility and does not change Odoo features or user workflows.
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 update improves how Odoo finds projects linked to reinvoiced sales orders. It can reduce slow database searches in sales and project workflows, helping larger databases respond more efficiently without changing user-facing behavior.
Original PR description
This commit adds an index on `project.project. reinvoiced_sale_order_id`, because the search in `sale.order. _compute_project_ids` might not be selective enough based on `sale_order_id`, which is a related field using `sale_line_id`. Since it's related, there is only a where clause on `sale_line_id IS NOT NULL`, which might not be selective enough and leads to a Seq. Scan of the `project_project` table. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232623
The option to create batch payments is now available to users working in Invoicing. This makes it easier for the right finance users to access batch payment workflows without needing broader accounting permissions.
Original PR description
This commit will change the security group of the create batch payment action, to be available in invoicing. task-5187435
This update improves automated checks around the warning shown when discarding an order during restaurant preparation. It helps ensure the point of sale flow behaves correctly on the Product screen, reducing the risk of staff encountering inconsistent warnings during service.
Original PR description
*: pos_restaurant_preparation_display, l10n_de_pos_res_cert This commit improves the preparation flow by updating the `discardOrderWarningDialog` tour step to validate its behavior on the Product screen. Task-5116688 Related- https://github.com/odoo/odoo/pull/229915
This update refreshes localization files and translation configuration, mainly for the 3-way matching accounting area. It helps keep multilingual text and translation workflows aligned for users working in different languages.
The web tooling configuration now includes VOIP-related modules in automated code quality checks. This helps maintain consistent standards and catch issues earlier, with no direct impact on end users.
Original PR description
Forward-Port-Of: odoo/odoo#232559 Forward-Port-Of: odoo/odoo#232484
The accounting settings now correctly show the OSS option for companies in Switzerland and the UK, not only EU countries. This helps affected businesses access the tax configuration they need without manual workarounds.
Original PR description
This PR https://github.com/odoo/odoo/pull/189315 changed the countries for which the OSS setting was visible. It has been limited to EU countries, however both UK and Switzerland need it as well. see discussion in task 4782337 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes the default document type suggested for Argentine foreign vendor bills so they consistently use the expected abroad invoice/receipt type. It also aligns foreign supplier behavior on customer invoices with the selected journal, reducing manual corrections and invoicing errors.
Original PR description
Description of the issue/feature this PR addresses: In this [commit](https://github.com/odoo/odoo/commit/5c07f9c0c1065d88022dc6d1299fec1d42dfc0af) we split 'Proveedor del Exterior' from 'Cliente del…
Description of the issue/feature this PR addresses: In this [commit](https://github.com/odoo/odoo/commit/5c07f9c0c1065d88022dc6d1299fec1d42dfc0af) we split 'Proveedor del Exterior' from 'Cliente del Exterior' which are both AFIP responsabilities for foreing supplier and customer respectively. In this [commit](https://github.com/odoo/odoo/commit/7e45c6ec768950b6296d991a8375577aed45c4dd), we added the possibility to create 'B' invoices for foreign partners. With this PR we are fixing the logic to suggest the correct document type for foreign vendor bills so it has a similar behavior as for customers. Current behavior before PR: In customer invoices the document type suggested by default depends on the journal: --> Expo journal will suggest 'Expo invoices' for Foreign Customers but 'B Invoices' for Foreign Suppliers --> Local electronic journal will suggest 'B Invoices' for Foreign Customers as well as for Foreign Suppliers In vendor bills the document type suggested by default will be 'INVOICES AND RECEIPTS FROM ABROAD' for Foreign Customers and 'B Invoices' for Foreign Suppliers Desired behavior after PR is merged: In customer invoices the document type suggested by default depends on the journal: --> Expo journal will suggest 'Expo invoices' for both Foreign Customers and Suppliers --> Local electronic journal will suggest 'B Invoices' for Foreign Customers as well as for Foreign Suppliers In vendor bills the document type suggested by default will be always 'INVOICES AND RECEIPTS FROM ABROAD' as expected. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228635
The timesheet grid now keeps text from spilling into timer button areas when users view timesheets by month, enlarge text, and scroll horizontally. This improves readability and prevents confusing visual overlap in total and footer rows.
Original PR description
Steps to reproduce: - Open timesheets and change to Month scale. - Increase text size a little bit. - Scroll to the right side Issue: - You can see runover text being visible in timer button cell of Total row and Footer row. Reason: - It is due to z-index problem as z-index-* is deprecated from https://github.com/odoo/odoo/pull/165568 (from saas-17.4+). Fix: - Replace it with Bootstrap z-index class notated as z-*(-1 to 3) task-4949182 Forward-Port-Of: odoo/enterprise#96371
Fixes a website editor problem where changing or selecting shaped images could trigger an error, especially for content created before the editor migration. Existing shaped images remain usable after the move from the old editor path to the new HTML builder path.
Original PR description
Steps to reproduce: =================== 1. Drop a snippet having an image with a shape (e.g. "Intro Pill", "Images Mosaic", ...). 2. Try to change the image shape. → Traceback occurs. This issue also happens when clicking on images with shapes that were added in previous versions. Cause: ====== Before the refactoring, shape URLs started with `web_editor`, but now `html_builder` is expected. This mismatch causes the shape to be considered invalid when parsed, leading to a traceback. The issue was introduced by this PR: https://github.com/odoo/odoo/pull/222471 Solution: ========= Ensure backward compatibility by allowing shapes using the old `web_editor` path to remain functional after the migration to `html_builder`. Forward-Port-Of: odoo/odoo#230803
Invoice terms and conditions now refresh in the selected customer language when that language is changed during invoice creation. This prevents customers from receiving invoices with terms shown in the wrong language.
Original PR description
Issue: When changing the customer’s language during invoice creation, the terms & services were not retranslated, unlike when creating a new partner in a different language. Repro Steps: 1. Create an invoice with terms link or plain enabled. 2. Change the partner's language from the invoice creation view. 3. Terms is not translated. Cause: The translation compute was only triggered on partner change, not language change. Fix: Added dependency for partner_id.lang to the narration compute to ensure it updates when the language changes. opw-5031933 Forward-Port-Of: odoo/odoo#230800
This fix keeps report page numbers on a single line when using the folder layout with the Montserrat font. It improves the visual consistency and readability of printed or exported documents without changing report content.
Original PR description
The folder layout is using the same footer than the `external_layout_standard` but when using Montserrat, the page number wraps in 2 lines on the folder layout. It's missing a `text-nowrap` class. task-4942402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228391
Long mailing list names now remain inside their intended field instead of overlapping nearby information. This keeps the Marketing mailing list view readable and easier to use when list names are lengthy.
Original PR description
Issue: When you create a long name for your maling list, the name overflows over the other fields in the view. Repro: Go to marketing -> mailing lists -> create a fairly long name -> notice name overflows in the view. Cause: Small bootstrap issue, name field not limited to it's container. Fix: Added a simple w-100 to limit the field to 100% of it's container. opw-5153270 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232312
This fix ensures the spreadsheet filter tooltip is fully visible when dark mode is active. It prevents a confusing visual issue, even though the spreadsheet app itself does not yet fully support dark mode.
Original PR description
The fitler tooltip was displayed halfay in dark mode, while the rest of spreadsheet does not support dark mode yet. Task: [5162869](https://www.odoo.com/web#id=5162869&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update fixes an internal purchase app test that was failing in single-app builds because it referenced an unavailable field. It helps keep automated quality checks reliable without changing day-to-day user behavior.
Original PR description
This issue comes from [218483](https://github.com/odoo/odoo/pull/218483) The field `is_storable` is invalid in single app build and breaks the `TestPurchase` class. Runbot - [230096](https://runbot.odoo.com/odoo/runbot.build.error/230096)
The event registration page now supports translation for the date selection labels used when events have time slots. This helps visitors using other languages see a consistent localized registration experience.
Original PR description
Scenario: - adds slots to an event - register to that event with another language Result: "Selected Date" or "Select a Date" is not translated or translatable. Fix: wrap those JS strings with _t function. opw-5167911 Forward-Port-Of: odoo/odoo#231729
This change moves the rule that hides the tip product field from the general restaurant point-of-sale module to the Belgian blackbox point-of-sale module. It keeps the behavior limited to the market-specific compliance feature where it belongs, reducing the chance of unintended effects for other restaurant POS users.
Original PR description
- Move logic to hide `tip_product` field from `pos_restaurant` to `pos_blackbox_be` module. task-id: 5011427 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Last Appraisal button is available again for employees after it was unintentionally removed. This helps managers and HR users quickly access an employee's most recent appraisal from the employee record.
Original PR description
The action on res.users to see the last appraisal has been removed by this PR https://github.com/odoo/enterprise/pull/88518. This commit reintroduces the action in hr.employee.public. task-5166704
This fixes the planning dialog opened from a sales order so users can see and set allocated hours when creating a shift. It prevents missing scheduling information for sales-related planning services, making shift planning from sales orders work as expected.
Original PR description
Steps to reproduce: - Create a Sales order with planning services. - Click on To Plan stat button. - Click on empty cell Issue: - Plan dialog is opened but has missing allocated_hours field. Reason: - In this commit https://github.com/odoo/enterprise/commit/d21bd4b694ec63ba83bea077714a8fe928d6e014 allocated hours was merged with start_datetime using a widget and thus removed from view. - But in planning list view we hide start_datetime when we schedule shifts from sales order. Fix: - Add back allocated_hours conditionally to be visible when we schedule shifts as in other cases start_datetime is present. task-5117776 Forward-Port-Of: odoo/enterprise#96391
This update fixes the layout of the ePos test widget and Epson printer IP field in Point of Sale settings. The fields are now better aligned and spaced, making the configuration screen clearer and easier to use.
Original PR description
- Adjust the display of the ePos test widget and Epson printer IP field in the Point of Sale configuration and settings views for better alignment and spacing. | View | Before | After | | :--- | :----: | ---: | | pos_config_view.xml | <img width="406" height="151" alt="image" src="https://github.com/user-attachments/assets/e2b6f619-62e7-44d8-928b-53ce5401d9a7" /> | <img width="403" height="184" alt="image" src="https://github.com/user-attachments/assets/96a0137d-cc56-4b2e-a322-811e5ad4b130" /> | | res_config_settings_views | <img width="535" height="249" alt="image" src="https://github.com/user-attachments/assets/679a1fce-45f3-4378-96bb-077d8cdef2e1" /> | <img width="535" height="218" alt="image" src="https://github.com/user-attachments/assets/efd62f18-a3fc-45f2-9ca2-4132a6b1a1df" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Helpdesk SLA reporting view now lets users add the SLA status grouping back after removing it. This avoids needing to reload the report and makes analysis smoother for support teams.
Original PR description
Currently, when the user opens the sla reporting view, if he removes the default grouping of sla_status, he has no way to get it back unless he reloads the view completly. This commit fixes this issue by adding the sla_status field to the group_by options. task-5076401 Forward-Port-Of: odoo/enterprise#95261
Fixed an Accounting issue where grouping customer invoices by sent status showed every invoice in both Sent and Not Sent groups. Users can now rely on this grouping to review invoice communication status accurately.
Original PR description
### Issue: The groups "Sent" and "Not Sent" display all the invoices. ### Steps to reproduce: - Go in Accounting > Customer > Invoices - Create a custom GroupBy with "Sent" - Unfold the groups: all invoices appear in each group ### Cause: `web_read_group` returns the groups with their length and the domain corresponding. When unfolding `web_search_read` uses the given domain to get the records to display. Here the issue comes from the domain returned, it contains `['move_sent_values', '=', 'sent']`, but `move_sent_values` is a computed field that doesn't have a `_search` method so the domain doesn't filter on this field. ### Solution: Add the method `_search_move_sent_values` to search on `is_move_sent`. opw-5164650 Forward-Port-Of: odoo/odoo#232400
This fixes a display issue where checkbox borders in the website link editing popover blended into the background when dark mode was enabled. Users editing links can now clearly see and use the advanced options checkbox, improving usability for dark mode users.
Original PR description
In dark mode the checkbox in the link popover wasn't visible due to the same popover background and checkbox border colors. Steps to see the issue: - Set dark mode as the preferred theme - Open Website and start editing - Click on any link - Click on the "Edit Link" pen icon - Click on the "Advanced Mode" gear icon => The checkbox borders aren't visible task-5155669
Full-day leave requests using time off types measured in hours now display correctly as full days instead of being shown as half days. This prevents confusion for employees and managers reviewing time off calendars.
Original PR description
Steps to reproduce: - Go to Time Off - Create a time off type that can be taken in hours - Take a full day of leave using this type of time off - The time off will be displayed as half a day, even though it is a full day Reason: The check to display the time off as half a day did not check that the time off starts in the afternoon, which caused the issue. How it was fixed: The condition now checks if the time off starts in the afternoon so that the display is correct. Task ID: 5072255
The table selection popup in POS self-ordering now lists tables consistently by floor and table number. This makes it easier for customers or staff to find the correct table and reduces confusion during ordering.
Original PR description
Task [#4991803](https://www.odoo.com/odoo/my-tasks/4991803) Runbot: https://runbot.odoo.com/runbot/bundle/18-0-incremental-order-table-pop-pos-self-order-ltra-391429 --- When selecting a table in the POS self-order, we sort the tables by `floor_id` and then by `table_number` in ascending order. This ensures a consistent and user-friendly experience when choosing a table. Forward-Port-Of: odoo/odoo#222811 Forward-Port-Of: odoo/odoo#222421
Fixes an issue where changing the speed of animated background shapes in the website editor had no effect. Users can now adjust shape animation speed as expected when designing pages, improving editing reliability.
Original PR description
Steps to reproduce: - Drop a snippet - Add a background shape (e.g. Rainy 05) - Use the slider to change the speed - Nothing happens This commit is adapting `CSS_ANIMATION_RULE_REGEX` as it was too restrictive, the space after the colon is now optional. task-5170549 Forward-Port-Of: odoo/odoo#231747
A flaky automated test around browser tab notifications in the Discuss app was fixed. This improves reliability of Odoo's test suite and helps avoid false build failures without changing end-user behavior.
Original PR description
Before this commit, the following test could fail non- determinstically: ``` [HOOT] Test "@mail/discuss_app/discuss/out-of-focus notif takes new inbox messages into account" failed: 3. [toBe]…
Before this commit, the following test could fail non- determinstically: ``` [HOOT] Test "@mail/discuss_app/discuss/out-of-focus notif takes new inbox messages into account" failed: 3. [toBe] expected values to be strictly equal > Expected: "(1) Inbox" > Received: "(1) Odoo" ``` This happens because the test is opening discuss and simulating posting of message from an external user, in order to assert the tab shows "(1) Inbox", where (1) is the number of unread messages and "Inbox" comes from the active thread of discuss app. The test can have "Odoo" because this is the default tab title and posting of message happened so fast that discuss app client action did not have time to notify of inbox being the active conversation, even when awaiting the showing of counter on discuss sidebar. - The notifying of active conversation name in discuss app is a side-effect of rendering of discuss app. - The showing of badge next in discuss sidebar item and the (1) both come from "mail.message/inbox" bus notification. When `mail.message/inbox` is faster than side-effect rendering, then we get this "(1) Odoo" instead of "(1) Inbox". It happens a very short time, as it eventually turns into "(1) Inbox", but the test just awaits badge rendering and then assert synchronously the value in tab title. This commit fixes the issue by awaiting asynchronously the expected document.title in HOOT test. Note that document.title is not in DOM because HOOT has the document.title mocked, so we patch it to have awaiting of step. Fixes runbot-error-233459
This update prevents an error message from appearing when users open a spreadsheet dashboard dropdown in the search bar. It restores missing functionality in the Community edition so spreadsheet dashboards work more reliably.
Original PR description
…in community edition Description of the issue/feature this PR addresses: To move the missing code from enterprise edition Current behavior before PR: Open a spreadsheet dashboard dropdown in search bar in 19.0 community edition, the traceback message box appeared: AttributeError: The method 'ir.model.has_searchable_parent_relation' does not exist Desired behavior after PR is merged: No traceback --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents errors when printing PDF documents through IoT in manufacturing work orders. It ensures the document list is handled correctly, so users can print quality-related documents without encountering a traceback.
Original PR description
Due to `active_ids` being provided with a `list[list]` instead of just `list`, pdf document rendering was returning a traceback. This commit fixes the issue by flattening the list passed to the context of the client action. (e.g. `res_ids` was provided `[[21, 22], [21, 22]] instead of [21, 22, 21, 22]`). opw-5190570
This update applies automated code quality rules to the VoIP area without changing how users place or manage calls. It helps keep the codebase consistent and easier to maintain, reducing the risk of future issues.
Original PR description
Forward-Port-Of: odoo/enterprise#97754