Monday, February 9, 2026
19 changes · 19.0
Enhancements to existing features
Thailand accounting setup data now includes Thai translations for chart of accounts names and descriptions, taxes, tax groups, and asset models. This improves usability for Thai businesses by making key accounting configuration labels available in the local language.
Original PR description
The following files are updated with the respective Thai translations: - COA: name, description - Taxes: name - Tax Group: name - Asset model: name Task-5875167 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The placeholder tax ID used for Türkiye has been changed from a real number to a dummy value. This helps prevent users from accidentally using a real tax ID when submitting transactions.
Original PR description
The previous placeholder used a real tax ID. Replacing it with a dummy prevents users from using it to submit transactions. task-5441218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247454 Forward-Port-Of: odoo/odoo#242189
This update enhances the bank reconciliation list view by prioritizing key information like date, label, and balance at the top. Additionally, scrolling is now limited to the table rows, creating a cleaner and more focused user experience. This improves usability and clarity when reviewing bank transactions.
Original PR description
1. The bank statement line info (date, label and balance) are moved to the top now. 2. Scrolling only applies to the table rows (other elements are fixed). task-5212851
Resolved issues and error corrections
This fixes an automated workflow check so product details are shown before the system verifies invoice or sales catalog content. It helps keep testing reliable across related modules, reducing false failures during development and validation.
Original PR description
Commit 01848b5 missed a case causing the `test_add_section_from_product_catalog_on_invoice_tour` tour to fail. To resolve this, `showProductColumn()` is now called automatically within `addSectionFromProductCatalog()`. This ensures the product column is visible before content verification, removing the need for manual calls in other tours. Additionally, the `showProductColumn()` trigger is updated to support both `product_id` and `product_template_id`, ensuring compatibility with the `purchase_product_matrix` module. runbot-234872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
This pull request brings in an initial synchronization of Odoo 19 changes, including updates to IoT box image configuration and PayPal payment translations. The changes help prepare the branch with refreshed setup files and broader localized payment messaging for users in different languages.
Original PR description
First sync
Product label printing templates were adjusted to avoid adding a duplicate page structure. This prevents malformed report output and helps labels render more reliably when printed.
Original PR description
Both product.report_productlabel and product.report_productlabel_dymo are called from a template which already includes the necessary DOM for the HTML (via web.basic_layout), having a web.html_container call in these two templates seems to be redundant and generates a malformed HTML output. Current behavior before PR: Duplicate/redundant DOM structure in reports generated when printing product labels Desired behavior after PR is merged: Correct DOM structure, valid HTML --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users with view-only access to shared documents can now open the chatter without encountering an error. The update prevents the system from trying to refresh attachment thumbnails when the user does not have the needed access, making document sharing smoother and more reliable.
Original PR description
How to reproduce: - Install documents - Create a folder at the root (company) not shared to anyone (including internal user) - Open that folder and ensure the chatter is closed - Upload a document in it and share it with Marc Demo with view access - Connect with Marc Demo, click on that shared document and open the chatter You get an error because the client try to update the thumbnail of the attachment for the chatter but the user has only view access to it. The user doesn't have write access to the attachment because it is linked to a document with only read access. To solve the problem, we modify the check that trigger the thumbnail update to also check that the user has access to the related record. Task-5360962
The Website hamburger header now centers mega menu toggles correctly when desktop text alignment is set to center. This keeps website navigation looking consistent across desktop and mobile layouts.
Original PR description
The PR [1] updated the templates for many headers to adapt the nav-item positions in desktop/mobile views. However, the hamburger menu was not updated correctly. In the desktop view, the mega menu toggle elements were not aligned properly (unlike in the mobile view). This commit fixes the PR by adding the necessary <xpath>. Steps to reproduce the issue: - Go to Website - Add a Mega Menu (edit menu) - Click on the header - Set the template to "Hamburger" - Set the text alignment to center for the desktop view => The mega menu toggle is not centered. task-5416632 --------------------------------------------- [1]: https://github.com/odoo/odoo/pull/225672
The remaining hours field is now hidden on tasks linked to subscription sales order lines. This prevents users from seeing confusing or negative remaining-hour values that do not fit recurring subscription services.
Original PR description
This change hides the remaining_hours_so field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/odoo#241099
This change updates the project's code quality configuration so it stays compatible with the latest tooling. It also supports additional exception markers used by Odoo tooling, reducing false alerts during development without affecting business workflows.
Original PR description
- update for ruff 0.15.0 - support OLS noqa 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 ensures warehouses used by the Repair app have the required production location available during upgrades. It prevents upgrade failures when production locations were previously archived and Manufacturing is not installed.
Original PR description
The warehouses need at least a Production location[^2] to avoid triggering an error, but they are not considered a missing location. The function is borrowed from the `mrp` module[^mrp]. This error was found during upgrades. To reproduce: - In 17, install repair and don't install mrp. - Archive the production locations. - Upgrade to 18. - It will trigger an error[^1] while upgrading stock. [^1]:https://github.com/odoo/upgrade/blob/b46cf7ea8770c5d428ea3d569148eb76d16903b9/migrations/stock/saas~17.3.1.1/end-migrate.py#L16 [^2]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/repair/models/stock_warehouse.py#L67 [^mrp]:https://github.com/odoo/odoo/blob/ab3c2d52bcaee516eae319ccd20088eb48c819f1/addons/mrp/models/stock_warehouse.py#L278-L283 Forward-Port-Of: odoo/odoo#245805
This update fixes a visual inconsistency in the Field Service Report generated from the Bubble document layout. Previously, table borders appeared with mixed rounded and sharp edges. The fix adds a consistent border style to the tables, ensuring a cleaner and more professional appearance for this report.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any…
Steps to reproduce: -------------------------------- 1. Install `industry_fsm_sale` module 2. Go to Settings > Configure Document Layout 3. Select the Bubble document layout and save 4. Open any Field Service task 5. Use the Products smart button to add one or more products 6. Click the Settings icon > Print > Field Service Report Observation: -------------------------------- In Time & Material tables using the Bubble layout, table borders show a mix of rounded corners and sharp edges, resulting in inconsistent visuals Issue: -------------------------------- The table tags in the report were missing the `table-borderless` class. As a result, the layout-applied rounded borders conflicted with the default table borders Solution: -------------------------------- Add the `table-borderless` class to the affected table tags so the tables inherit consistent rounded borders from the document layout Before: <img width="787" height="317" alt="before_css" src="https://github.com/user-attachments/assets/dac136a8-022a-4c36-8cdb-1c0fbb048f3e" /> After: <img width="816" height="372" alt="after_css" src="https://github.com/user-attachments/assets/b5f96e75-2cd3-44cf-89e3-9a3b564c8369" /> opw-5401612 Forward-Port-Of: odoo/enterprise#105616
This update resolves an error that occurred when creating attendance records for employees without defined 'Working Hours'. The fix prevents a system crash caused by attempting to access data within an empty dictionary, ensuring smoother attendance creation processes. This improves the reliability of the attendance module.
Original PR description
This error occurs when attempting to create an attendance for an employee who has no `Working Hours` defined.
Steps to reproduce:
- Install `hr_work_entry_attendance` module
- Employees > `Administrator` > Settings > Set `Default Ruleset` in Overtime Ruleset > Payroll > Set Contract and `Work Entry Source` is in `Attendance`
- Attendance > Create New Attendance(with Extra Hours) and Save
- Remove `Working Hours` of employee
Traceback:
`KeyError: 52`
We encounter this error at [1] because `lunch_by_resource` is empty "**{}**", and we attempt to access a key in this empty dictionary.
[1]- https://github.com/odoo/enterprise/blob/b94ae7a4f8ae91ad98977a439db41a6939a6b617/hr_work_entry_attendance/models/hr_version.py#L80
sentry-7168309352This update resolves an issue where journal items displayed in reports were incorrectly linked to account groups, causing errors starting with Odoo 18.3. The fix ensures accurate linking by adjusting how Odoo queries for related accounts, preventing a previous error related to a changed data field.
Original PR description
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR…
Currently journal items shown don't belong to the account group that they should belong to, and from saas-18.3 an error will be generated after following the below steps or step mentioned in ref PR [1]. - Install `Accounting (accountant)` with demo data - Create account groups e.g., name as `Test 1` and code prefix `1 to 1` - Go to the general ledger report - Click on `Journal Items` of the account group line `1 Test 1` Error from saas-18.3: `ValueError: Cannot convert account.account.group_id to SQL because it is ...` This error occurs because PR with ref [1] in 17.0 added the` group_id` field of the `account.account` model to the search domain. However, in 18.0, commit [2] modified this field so that it is no longer stored. As a result, when a search domain includes this `non-stored` field, Odoo skips the domain evaluation and logs a error at code line [3]. Consequently, the changes introduced by commit [1] have no functional effect from 18.0. Also, starting from saas-18.3, passing such a non-stored field in a domain raises an explicit error at code line [4], instead of being silently ignored. This commit resolves the issue by introducing an SQL query that returns the account ids related to `record_id(account group id)` include `record_id` as `None`. [1]: https://github.com/odoo/enterprise/pull/100191 [2]: https://github.com/odoo/odoo/commit/854c3b27aa5476c208572f19e64f8f3364bfc381#diff-19ef5a530c506fdee93fe0d113e61946b87fae7dd2d360558da69c0014f766b2R114-R767 [3]: https://github.com/odoo/odoo/blob/71e86f38c7699aaea980c929c67835a3495edf55/odoo/osv/expression.py#L1166-L1174 [4]: https://github.com/odoo/odoo/blob/00517e9e085c6fa9e00bedb8aee122a60e407fea/odoo/orm/fields.py#L1201 sentry-7100657414 Forward-Port-Of: odoo/enterprise#103137
This update resolves an issue preventing users from efficiently changing the status of multiple audit accounts. Previously, a technical error would occur when attempting bulk updates. The fix ensures a smoother workflow for managing audit statuses, improving operational efficiency.
Original PR description
### Steps to reproduce: - In Accounting, make sure you have the accountant model. Then, from Review > Audit > Working Files, click Balances. - Select more than 1 account lines and try to change their statuses. - If you don't have an Audit, create a new one and go back to Working files, then click balances. ### Cause: The client gets a traceback when they try to change the statuses of the audits for the accounts in bulks. opw-5474248
This update corrects a minor issue in the Australian Payroll module related to the calculation of union and professional association fees. The change ensures these fees are accurately reflected in employee deductions, improving payroll accuracy and compliance. This fix addresses a technical detail impacting payroll reporting.
Original PR description
. Update `Union and professional association fees` code in computations of `Fees and Deductions` rule task-5402666
This update simplifies the sales order interface for subscription customers. We’ve hidden a confusing field that inaccurately reflected remaining service hours due to the recurring nature of subscriptions. This change ensures a cleaner, more intuitive experience for our customers and avoids potential misinterpretations.
Original PR description
This change hides the `remaining_hours_so` field when the sales order line is linked to a subscription. Unlike standard service or time-based sales orders, where this field reflects the difference between the quantity ordered and the quantity delivered, the concept does not translate well to subscription logic. In the context of a subscription, the service is delivered on a recurring period (monthly, yearly, etc.). Delivery quantities continuously accumulate over time, and because the subscription renews indefinitely until cancellation, the “remaining hours” calculation quickly becomes misleading. In many cases it can drift into negative values, giving the impression of an error or over-consumption when, in reality, the subscription is simply following its recurring delivery cycle. To avoid confusing end-users and to maintain a clean, intuitive interface, we hide this field whenever the line is part of a subscription. opw-5246238 Forward-Port-Of: odoo/enterprise#99813
This update resolves a technical issue where the user ID was sometimes missing for payments processed through the POS IoT Six module. The fix restores a previous version that correctly identified the user, ensuring accurate payment tracking and reporting. This improves the reliability of the POS IoT Six payment process.
Original PR description
This PR reinstates https://github.com/odoo/enterprise/pull/98021 broken by https://github.com/odoo/enterprise/pull/98203 This fixes user id being undefined for pos_iot_six payments Forward-Port-Of: odoo/enterprise#106737
This update resolves an error that prevented non-employee users from creating expenses linked to uploaded documents. The issue stemmed from a required field ('employee_id') being unintentionally set to null. The fix now displays a user-friendly error message instead of crashing, ensuring a smoother experience for all users.
Original PR description
Currently an exception is generated when the non-employee user tries
to generate expenses from the documents.
Steps to produce an error:
- Install the `documents_hr_expense` module without demo data
- Delete employee `Administrator`
- Upload any PDF/image file inside the company's `Internal` folder
- Click on the uploaded document and click on the `Create an Expense` button
Error: `ValueError: NotNullViolation('null value in column "employee_id" of ...`
This error occurs because `employee_id` is required when creating an
expense. Since the current user is not linked to an employee record,
`employee_id is` set to false, which causes the issue.
This commit resolves the issue by raising a `UserError` when the current
user is not linked to an employee.
sentry-7192984733
Forward-Port-Of: odoo/enterprise#106649
Forward-Port-Of: odoo/enterprise#104762