Tuesday, December 16, 2025
30 changes · 19.0
Enhancements to existing features
The Point of Sale settings now include a missing documentation link for Pinelabs payment terminals. This makes it easier for users and support teams to find setup guidance directly from the configuration screen.
Original PR description
In this commit: =============== - We have added a missing documentation link in the settings for the Pinelabs payment terminals. Task: 5407021 Forward-Port-Of: odoo/odoo#239817
This update restores clearer failure reporting for automated test runs while still ensuring local command-line runs stop with an error when something goes wrong. It helps internal teams diagnose problems more reliably without changing business functionality.
Original PR description
One of the changes in #118332 was to let exceptions bubble up to the interpreter in case of error, to improve the experience while running the script locally. This turns out to have downgraded runbot reporting significantly as it doesn't account for stderr / log tracebacks if it got error-level (and possibly even warning-level) logs during the run. Hopefully get the best of both world (and shorten tracebacks slightly) by restoring `logging.exception` at the script level but triggering an abnormal exit for local CLI utility. Forward-Port-Of: odoo/odoo#239995
This update adds ready-to-use demo partner data for Turkish e-Invoice scenarios, reducing the manual setup needed for demonstrations and testing. The demo records include approved test VAT exceptions supplied for these workflows, helping teams validate Nilvera-related scenarios more quickly.
Original PR description
The purpose of adding this demo data is to simplify the setup for the demo and test scenarios of Turkish E-Invoice workflows, which currently require a lengthy and manual configuration process. **Techincal**: Added demo data with `no_vat_validation` as they do not support the tr VAT format, but are required for test purposes. These numbers are given by Nilvera. task-5116372
Sales order totals can now be calculated from a customizable selection of order lines. This helps businesses adapt sales calculations through custom add-ons without changing the core sales process.
Original PR description
This allows to change the record set of order lines which are used by `sale.order` `_compute_amounts` by custom addons Forward-Port-Of: odoo/odoo#239928 Forward-Port-Of: odoo/odoo#233239
Resolved issues and error corrections
Searching or filtering tasks by assignee in the Project Gantt view now correctly shows the selected user's row, even when that user has no assigned tasks. This prevents missing rows and makes planning views more reliable for project managers.
Original PR description
**Steps to reproduce:** Go to Project Go to All Tasks. Switch to the Gantt view. Search for an assignee who has no tasks assigned. **Cause:** The method was adding multiple conditions for the same field because both if statements were being applied. This made the domain incorrect when searching for users or custom filter on user **Issue:** The searched user’s row did not appear in the gantt view if they had no tasks. **Fix:** Changed the second if to elif so only one condition is applied at a time, ensuring the correct domain is used and the user row is visible. Task-5076701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239764 Forward-Port-Of: odoo/odoo#230319
Product pages now show only one specifications section when the accordion layout is selected. This removes duplicate information and makes the shopping page cleaner and less confusing for customers.
Original PR description
**Steps to produce:** - Install `sale_management` and `website_sale` with demo data. - Go to Website > Shop > Open product `Acoustic Bloc Screens`. - Open the website editor > Click on the…
**Steps to produce:** - Install `sale_management` and `website_sale` with demo data. - Go to Website > Shop > Open product `Acoustic Bloc Screens`. - Open the website editor > Click on the Specifications section. - Set Specifications to `In accordion`. **Issue:** Two specification blocks are displayed on the product page: - The accordion block. - The simple `product_attributes_simple` block. **Root cause:** - In the template [1], the `product_attributes_simple` block is still rendered even when the accordion option is active, leading to duplicate sections. **Solution:** - Render the `product_attributes_simple` block only when the accordion option is not active. This ensures that exactly one specifications block is shown. **Before:** <img width="568" height="211" alt="before" src="https://github.com/user-attachments/assets/7e6472d4-194f-4e62-b9cb-ece709b29418" /> **After:** <img width="636" height="126" alt="after" src="https://github.com/user-attachments/assets/40a46111-23d8-43cf-9495-db3e0402906a" /> [1]: https://github.com/odoo/odoo/blob/e91c3817574af8bd48a634e3fb0b2f0e08b21ee9/addons/website_sale/views/templates.xml#L2177 opw-5228938 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the cursor in the record selector from taking up extra space when it appears. Users get a steadier input field with less visual shifting while selecting records.
Original PR description
This commit fixes an issue where, when visible, the caret of the record selector component would take space and thus change the width of the input. Task: [5354466](https://www.odoo.com/odoo/project/133/tasks/5354466) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238430 Forward-Port-Of: odoo/odoo#237054
This update makes an automated test for the HTML editor more reliable by narrowing what it checks. It helps prevent occasional false failures in the test suite without changing the user-facing editor experience.
Original PR description
Because of the toolbar being sometimes opened, the test added in odoo#238735 would sometimes failed. This was due to the selector "span" also targetting the elements in the toolbar. To prevent this test from failing, the selector "span" was updated to be more specific. Forward-Port-Of: odoo/odoo#239174
This fix ensures expense-related vendor payment records correctly decide whether to show the partner bank account field. It prevents an error when opening vendor payment screens and helps accounting users access payment records reliably.
Original PR description
For expense_payments records `show_partner_bank_account` didn't computed. So, letting it compute as purpose of this fix https://github.com/odoo/odoo/commit/7e60eb45d7b4bb02ca7cacc2aba4a9016853fa61…
For expense_payments records `show_partner_bank_account` didn't computed. So, letting it compute as purpose of this fix
https://github.com/odoo/odoo/commit/7e60eb45d7b4bb02ca7cacc2aba4a9016853fa61 was to set ``require_partner_bank_account``
```py
('account.menu_action_account_payments_payable', 141, 'Accounting > Vendors > Payments', 239):
Traceback (most recent call last):
File "/tmp/tmpevr57plf/migrations/base/tests/test_mock_crawl.py", line 333, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpevr57plf/migrations/base/tests/test_mock_crawl.py", line 346, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpevr57plf/migrations/base/tests/test_mock_crawl.py", line 506, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpevr57plf/migrations/base/tests/test_mock_crawl.py", line 539, in mock_view_form
[data] = record.read(fields_list)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3487, in read
return self._read_format(fnames=fields, load=load)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 3744, in _read_format
vals[name] = convert(record[name], record, use_display_name)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 6680, in __getitem__
return self._fields[key].__get__(self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 1749, in __get__
raise ValueError(f"Compute method failed to assign {missing_recs}.{self.name}")
ValueError: Compute method failed to assign account.payment(113,).show_partner_bank_account
```
upg-3574961
opw-5260147
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes an editor issue where the formatting toolbar appeared when the cursor was simply placed after an image. The change keeps the editing experience cleaner and prevents users from seeing unnecessary controls in that situation.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: The toolbar was shown when the cursor (collapsed selection) was positioned after an image. Desired behavior after PR is merged: A collapsed selection placed after an image no longer displays the toolbar. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes how Odoo's IoT Box handles background processes during a service restart. It helps ensure those processes are properly stopped, reducing the risk of stuck tasks or unreliable device behavior after restarting.
Original PR description
To ensure all threads are killed when we restart the Odoo service on the IoT Box, we need to ensure they all have the `daemon=True`. Some already had the property set, but in the sub class attributes, so it was not properly taken into account. Task: 5410736 Forward-Port-Of: odoo/odoo#240022 Forward-Port-Of: odoo/odoo#239873
The website shop product page no longer shows an empty variant area when a product has no visible variant options. This avoids confusing shoppers with blank space under the price and keeps product pages cleaner.
Original PR description
### Issue: Variant section which only contains multi-value attributes is visible when none of the attributes are visible. #### To reproduce: 1- Create a product with a single value attribute. 2- Navigate to product page on the website. 3- As seen there is an empty extra section under price. <img width="626" height="296" alt="image" src="https://github.com/user-attachments/assets/cbf0e9e2-b17a-4b1b-94e0-f4b94780dab3" /> #### Cause: This section is to show custom or multi-value attributes. However, when product only contains attributes which have single and non-custom values, the attributes will not be visible. In this cases the section is visible but empty. This fix propose to hide variants when no visible line exists. opw-5241432 Forward-Port-Of: odoo/odoo#238090
This fix prevents automated tests for manufacturing and purchase-manufacturing flows from failing because product route fields were hidden during setup. It keeps test configuration aligned with the updated route behavior, reducing false failures without changing day-to-day user workflows.
Original PR description
Since 19.0, routes are no longer displayed in the product form if no route outside from Buy/Manufacture are enabled, as those two now depend on whether there's a vendor/bom to be enabled for that…
Since 19.0, routes are no longer displayed in the product form if no route outside from Buy/Manufacture are enabled, as those two now depend on whether there's a vendor/bom to be enabled for that product. In the `setUpClass` however, without having the MTO route enabled by other means, there wouldn't be any route to display in the product form, resulting in a traceback at launch as the `route_ids` field would be invisible within the form. Now we make sure the MTO route is always enabled (as it doesn't make sense to assign an archived route), which also forces the display of `route_ids` in the product form. Also removes the assignation of the 'Manufacture' route on products, as its no longer necessary on product that have a bom. In `purchase_mrp`, we just remove the usage of the Form for product creation, as: - The `routes` argument was never even used - There was no point in creating these products through a form in the first place This avoids having to enable an extra route for "nothing", just to have `route_ids` appear in the form. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The stock accounting workflow now avoids an error when users open Adjust Valuation for a stock move with zero quantity. This prevents a crash in inventory valuation analysis and keeps the adjustment action usable for edge-case receipt records.
Original PR description
Currently, an error occurs when a user clicks on the Adjust Valuation button. Steps to Reproduce: - Install the `stock_account` module. - Go to `Receipts` and create a `receipt` by adding a product…
Currently, an error occurs when a user clicks on the Adjust Valuation button. Steps to Reproduce: - Install the `stock_account` module. - Go to `Receipts` and create a `receipt` by adding a product with `zero demand`. - Go to `Moves Analysis` > switch to `Kanban view` and remove the `Done filter`. - Click on the `selected product move` > click the `gear icon` > click `Adjust Valuation`. `ZeroDivisionError: float division by zero.` After [this commit], when the user clicks on the Adjust Valuation button, the compute method runs to compute the current value details. When it tries to calculate the unit price based on the move quantity and value, and the quantity is zero, it raises the error[1]. This commit ensures that if the move quantity is 0, then the unit price for the current value details is also set to 0. [this commit]: https://github.com/odoo/odoo/pull/224033/commits/e9e7a1ff63f5ee1f54d21b1768abb93a121a7a92#diff-2623d0e4c393b65afe1c6d00f55af80d19f022aaeb0da0e5e173e37a84138159R47-R57 [1]- https://github.com/odoo/odoo/blob/0581b7fb6abc8e856cedf13254ba1f9d362d6d34/addons/stock_account/models/product_value.py#L59 sentry-7059220177 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix reverts a recent spacing change in popover positioning because it caused unintended display issues. Users should see popovers behave more consistently again, reducing layout problems in the web interface.
Original PR description
This commit reverts changes made in https://github.com/odoo/odoo/pull/236503/commits/c400a5299f0dd9215bb29acc1a3e82cdc166d9a6 because it had too many unwanted side effects (see task-5413492 for example).
The website editor now shows only the reorder arrow that can actually be used when editing a newsletter popup snippet. This avoids confusing inactive controls and lets users move the block with a single click as expected.
Original PR description
**Issue:** When editing a newsletter popup snippet, users could see both up and down reorder arrows, even when only one The direction made sense. Clicking the move up arrow did nothing, and moving the block down required clicking the move down arrow twice, which felt unresponsive. **Steps to reproduce the issue:** 1. Drag and drop a newsletter popup snippet 2. Click on the blank region above the center text in the snippet 3. You will see both up and down reorder arrows; nothing will happen on clicking the up arrow 4. You need to click on the down arrow twice to move the block down. **Fix:** Now, only the valid reorder arrow (up or down) is shown based on the block's position. Movement works as expected with a single click. task-[5016731](https://www.odoo.com/odoo/project/974/tasks/5016731) Forward-Port-Of: odoo/odoo#221390
User permission group names will now display in the language currently selected by the user instead of sometimes showing a previously cached language. This improves clarity for multilingual teams when viewing or creating users.
Original PR description
## Before this commit: When opening the user's form view, the group hierarchy is loaded using the context's language, and cached. However, switching language or creating a new user (which copies the portal template user) could result in the group hierarchy being displayed in the wrong language. This occurs because the cache does not account for the language changes. ## After this commit: Make the cache language-dependent to ensure group names and translated fields are always displayed in the user's current language. Also remove the unnecessary copy of the `view_group_hierarchy` field. Forward-Port-Of: odoo/odoo#236767
Users now receive an explanation when a timesheet entry cannot be created, such as when selecting a weekend without an applicable shift. This reduces confusion and helps employees understand why no timesheet was added.
Original PR description
Steps to reproduce: - Open Timesheets and navigate to calendar mode (My Timesheets). - Click on weekend cell and no shift is created and no notification or explanation is given Issue: - No issue explanation why timesheets were not created. Fix: - Check if we have skipped creating record because we have no timesheets and raise the notification accordingly Additional Changes: Consolidate notification system to Python backend - Removed JavaScript-based notification triggers - Implemented notification handling in Python layer task-5076642 Forward-Port-Of: odoo/odoo#230724
This fixes a small issue in the accounting email template by removing an unnecessary value check. It helps avoid failures for older accounting records that do not have that field populated, improving reliability without changing the email content.
Original PR description
Remove unused declared variable. Beside being useless, this assignment fails if `payment_state` is not set on the move (possible for the records created before saas~15.3).
This update resolves an issue where the deferral of sick leave payments was inaccurate when the leave duration extended across multiple months. The fix ensures that leave deferrals are calculated correctly, leading to more precise payroll processing for employees with extended sick leave. This improves the accuracy of financial reporting.
Original PR description
The defer computation was not correct if the leave spans multiple months. This commit fixes it.
This update resolves an issue where the Odoo PWA app wasn't working correctly in certain customized browsers like Wecom and DingTalk. The fix ensures the app functions properly by handling cases where browser version information is missing, improving overall PWA support and user experience.
Original PR description
Description of the issue/feature this PR addresses: In some customized browsers, such as Wecom and DingTalk, the userAgent may not contain the Version information, resulting in an error. 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 ensures that user rows are always visible in the Gantt view, even when they don't have assigned tasks. Previously, users without tasks were hidden, and searching wasn't reliable. Now, the Gantt view accurately displays all users, making assignee searches and filtering more effective.
Original PR description
**Before this commit:** When searching for an assignee in the gantt view, the corresponding row was not displayed if the user had no tasks assigned. Similarly, when applying a custom filter on the assignee also not working properly. **After this commit:** When searching or filtering by an assignee, the corresponding user row is now always visible in the gantt view, even if the user has no assigned tasks. Custom filters on assignee also work properly. task-5076701 Forward-Port-Of: odoo/enterprise#101986 Forward-Port-Of: odoo/enterprise#96531
This update resolves errors that occurred when duplicating folders, particularly when duplicating the 'Company' root folder. The system now correctly handles folder duplication within the application, and a previous issue where copies were incorrectly placed within the original folder is now addressed.
Original PR description
**Before this PR:** - Duplicating a folder into itself caused a traceback. - Duplicating a folder into one of its sub-folders also caused a traceback. - Duplicating the 'Company' root folder into 'My Drive' incorrectly created the copy inside the 'Company' folder instead. **Technical reason:** - A record was being created before the copy operation, which led to infinite recursion. - The owner was incorrectly set as the parent folder, causing the duplicated folder to appear in 'Company' folder. **After this PR:** - Duplicating a folder into itself or any of its sub-folders now works correctly. - Attempting to duplicate the Company root folder into My Drive will no longer work and will instead display a warning. Task-5149773
This update resolves an issue where clicking 'Send' in the Sign Request wizard incorrectly redirected users to the signing interface when the sender was also a signer. The fix ensures that clicking 'Send' now correctly closes the wizard, providing a smoother user experience for sending sign requests.
Original PR description
When creating a Sign Request where the sender is also one of the signers, clicking Send in the wizard incorrectly redirected to the document preview/signing interface. This fix ensures that clicking Send always closes the wizard and does not trigger any redirect, regardless of the sender’s signer status. task-5408155
This update fixes an issue where the Quality Control module's list view was incorrectly loading. The change ensures the correct view is used, resolving a problem that prevented users from accessing the Control Points feature. This ensures the Quality Control module functions as intended.
Original PR description
Since odoo/enterprise#94012, when loading the quality.point list view from the main menu, `quality_point_routing_view_tree` is used instead of `quality_point_view_tree`. This is not correct. To reproduce : - Install quality_control and mrp_workorder - In Quality Module, go to Quality Control / Control Points [opw-5253899](https://www.odoo.com/odoo/project/966/tasks/5253899)
This update prevents website errors related to rental events when product types are misconfigured. Specifically, it addresses a technical issue that caused tracebacks during payment processing, ensuring a smoother user experience for customers purchasing rental tickets. While the rental feature itself is being addressed, this fix focuses on robust error handling.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have `website_event_sale` but not `stock` installed; 2. create an event with a ticket; 3. make the ticket's product rentable; 4. change ticket's product type to Goods; 5. publish the event to website; 6. register for the event via website; 7. go to payment. Issue ----- AttributeError: 'bool' object has no attribute 'tzinfo' Cause ----- Having odd configurations like rentable tickets creates rental orders without rental dates, leading to unhandled errors. Solution -------- While rentable event tickets doesn't make enough sense to make it work, we can still improve the error handling to prevent showing tracebacks to the client. opw-5207045 Forward-Port-Of: odoo/enterprise#101859 Forward-Port-Of: odoo/enterprise#99000
This update fixes a bug that occurred when users attempted to duplicate transactions through the account.duplicate.transaction.wizard view. The issue was caused by an error when no journal was linked, now the system correctly handles this scenario by using a valid relational command to avoid the error.
Original PR description
Currently, an error occurs when user opens the `account.duplicate.transaction.wizard.form` view and saves it. **Steps to Reproduce:** - Install the `account_accountant` module. - Using `Open View`,…
Currently, an error occurs when user opens the `account.duplicate.transaction.wizard.form` view and saves it. **Steps to Reproduce:** - Install the `account_accountant` module. - Using `Open View`, open the `account.duplicate.transaction.wizard` view > enter the start date, and save.. `ValueError: Compute method failed to assign account.duplicate.transaction.wizard(22,).provider_duplicate_ids` The error occurs because when the view is opened and saved, the _compute_provider_duplicate_ids method is triggered. Since no journal is linked to the wizard, the method assigns an empty list ([]) to provider_duplicate_ids [1]. Because this is a O2M field, assigning a raw empty list is invalid and causes the error. This commit ensures that when journal is missing, instead of assigning an empty list ([]), a valid relational command `([Command.set([])])` is used. Ref: https://github.com/odoo/enterprise/pull/97196/commits/c109e0bcce20f14b6dbd3d28e61b135f1fd048f2 [1] https://github.com/odoo/enterprise/blob/d808ad3f6ff52632e00cf1a68de0e5270e52895d/account_online_synchronization/wizard/account_journal_duplicate_transactions.py#L53 sentry-7080686084 Forward-Port-Of: odoo/enterprise#101177
This update fixes an issue where unscheduled shifts weren't correctly displayed in the Gantt view, requiring a page refresh to resolve. The change ensures that shifts are updated instantly when unscheduled, providing a more accurate and reliable view of team availability. This improves planning efficiency and reduces confusion.
Original PR description
**Steps to reproduce:** Go to planning gantt view. Click on shift. Click on unschedule button on popover. **Issue:** When clicking on Unschedule button on a shift popover, sometimes the shift still appears and again clicking on that it cause missing error occured until the page is refreshed. **Cause:** The record wasn’t updating in the view after a shift was unscheduled, so the unscheduled shift was still showing. **Fix:** Modified the method to reload the model and notify the view immediately after calling action_unschedule, ensuring shifts reflect the latest server state without requiring a manual refresh. task-5075381 Forward-Port-Of: odoo/enterprise#102010 Forward-Port-Of: odoo/enterprise#97108
This update resolves an issue where inaccessible folders within a company's structure were incorrectly appearing in search results. The fix ensures that only accessible folders and their direct children are displayed when searching folder hierarchies, improving data accuracy and user experience. Performance testing confirmed this as the optimal solution.
Original PR description
`user_folder_id` and `folder_id`'s `child_of` were not taking into account that the path could be broken if inaccessible folders are between accessible documents. E.g., the DB structure COMPANY └── Folder A └── Folder B (inaccessible to User A) └── Folder C Would appear to user A as COMPANY └── Folder A SHARED └── Folder C such that "Folder C" should not be found when searching `child_of` "Folder A" or "In Company". Note that more creativity would be necessary to fix this before 19.0 as the stored `folder_id` field could not be `_search`ed. Task-5231269
This update resolves an issue preventing users from renaming the "Help" menu item in the website helpdesk module. Previously, a technical error blocked renaming, even without attempting to change the URL. Now, users can directly edit the menu item's name, improving usability and flexibility.
Original PR description
**Issue** It was not possible to rename the "Help" menu item, an error appeared with the message: "This URL is reserved for the helpdesk teams with 'website form' feature enabled.", even if the user was not trying to edit the URL. **Change** Allow the user to edit the menu item's name. opw-5375334 Forward-Port-Of: odoo/enterprise#101567 Forward-Port-Of: odoo/enterprise#101323