Friday, November 21, 2025
19 changes · 19.0
Enhancements to existing features
The Indian tax reports were updated to remove a section that is no longer needed. This also keeps report output cleaner by hiding lines when they have no value, reducing unnecessary clutter for users reviewing the reports.
Original PR description
Since the `purchase_b2c_regular` GSTR section is no longer required, this commit updates the related domain logic and hides the corresponding report lines when their value is 0. Related PR: https://github.com/odoo/odoo/pull/236241
The GST purchase report no longer includes the "purchase_b2c_regular" section because unregistered vendors cannot use regular GST taxes. This simplifies the report and keeps the remaining categories aligned with how these transactions actually work, including overseas cases covered elsewhere.
Original PR description
Unregistered vendors cannot apply regular GST taxes, making the `purchase_b2c_regular` GSTR section unnecessary. Additionally, `purchase_cdnur_regular` will also cover only overseas cases. With this commit, the `purchase_b2c_regular` section will be removed. Relateed PR: https://github.com/odoo/enterprise/pull/99777
This change makes sign template fields easier to extend or adapt in future updates. It helps maintainers and partners add or adjust fields with less risk of breaking existing behavior, improving flexibility for custom setups.
Original PR description
Introduced a dedicated _getTemplateFields() method to make easier to override or extend the fields in patches. Forward-Port-Of: odoo/enterprise#95722
Resolved issues and error corrections
The employee contract template activity view now shows only records with assigned activities, instead of listing every contract template. This makes the Activities view accurate and easier for users to work with.
Original PR description
The contract template’s activity view incorrectly displays all contracts, instead of only those with assigned activities. **Steps to reproduce this issue:** 1) Install the hr module. 2) Open Employees → Employees → Contract Templates. 3) Create multiple contract templates and add an activity to one of them. 4) Open the activities from the Activities (top right corner). **Issue:** You will end up in the all contract templates list, with no filters applied. **Cause:** When the user clicks on the activities, a default search filter is added in the context, which is then applied to the view. But in the contract template, we don't have any search filters for the activities. Therefore, it renders all contract records. **Solution:** Add the activity search filters for the contract template records. opw-5209691 Forward-Port-Of: odoo/odoo#234274
Documentation and clarification updates
This change updates the corporate contributor agreement record for Moduon. It is an administrative/legal update and does not change product behavior for users.
Original PR description
@moduon MT-12696 Forward-Port-Of: odoo/odoo#236642
Miscellaneous changes
Some lines were improperly marked for translation. Also delete some extensions that weren't used in the end for cleaner code + to wipe all traces of the improper translation marking. 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
Original PR description
Some lines were improperly marked for translation. Also delete some extensions that weren't used in the end for cleaner code + to wipe all traces of the improper translation marking. 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 change updates the packaging Docker setup to use the currently supported Ubuntu Noble base image instead of Bookworm. It also removes unnecessary wait steps that were masking an underlying issue, which should make the build process cleaner and more reliable.
Original PR description
The Dockerfile used for source package is still using the Bookworm distribution as base image. In order to be consistent with the Odoo supported distribution, let's update to Ubuntu Noble. This commit also removes useless `sleeps` that were hiding a real bug. It should help declutter #228456
This change prevents browser warning popups from interrupting website test tours when a page redirects or reloads. It also adjusts a few tour selectors so the automated tests run more reliably, reducing delays and false failures.
Original PR description
During page redirection in tours, the browser was showing a warning about unsaved/incomplete data loss. This warning is not relevant in the context of tours. To address this, the expectUnloadPage attribute is added to the tour test. It prevents unnecessary pauses/timeouts caused by the browser’s warning and ensures smooth redirection handling. Additionally, few tour selectors have been corrected to improved. runbot-231587 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226102
This fix removes unwanted decimal noise in editable budget fields in Profit & Loss reports. Users will now see the same rounded amount when editing a budget cell as they do when viewing it, which makes the report easier to use and avoids confusion.
Original PR description
**Issue:** When editing budget values in the Profit & Loss report, users see floating-point precision errors (e.g., 0.999999 instead of 1.00) in the input field, even though the display shows the…
**Issue:** When editing budget values in the Profit & Loss report, users see floating-point precision errors (e.g., 0.999999 instead of 1.00) in the input field, even though the display shows the correct rounded value. **Steps to Reproduce:** 1. Go to Accounting → Reporting → Profit and Loss Report 2. Enable Column Budget 3. Enter budget value: 5.00 4. Save → Value displays correctly as: 5.00 ✓ 5. Click to edit the same cell 6. Input field shows: 5.000000000174602 ✗ (instead of 5.00) 7. Save without changes → Display shows: 5.00 ✓ 8. Edit again → Still shows: 5.000000000174602 ✗ **Root Cause:** The frontend reads from cell['no_format'] when populating the edit input field. This field receives the raw column_value which contains floating-point precision errors accumulated during aggregation operations. While the display formatting applies rounding, the edit mode receives the unrounded value. **Solution:** Round column_value using float_round() immediately after detecting an editable budget column, before the value is used anywhere. This ensures both the display path and edit path receive the same properly rounded value based on the company's currency decimal places. opw-5158862
Fixed an issue in website anchor links where the "Open in New Window" option was being ignored. Users will now be taken to the linked section in a new tab, matching the setting they chose and avoiding unexpected same-tab scrolling.
Original PR description
Steps to Reproduce: 1. Create an anchor link for any dropped snippet. 2. Insert the link through the link popover. 3. Enable the "Open in New Window" option. 4. Click on Save. 5. Click on the link. Issue: Even though the "Open in New Window" option is enabled, the page scrolls in the same tab instead of opening in a new window and scrolling to the targeted view. Reason: When an anchor link has target="_blank", `ev.preventDefault()` was still being called, which prevented the browser from performing its default behavior of opening the link in a new tab. Fix: Removed `ev.preventDefault()` for such links, as the expected behavior is to open them in a new tab whenever target="_blank" is set. Additionally, the offcanvas mobile-specific logic has been removed, as it is no longer necessary now that `ev.preventDefault()` is no longer used. task-5104027 Forward-Port-Of: odoo/odoo#236783 Forward-Port-Of: odoo/odoo#228787
This change makes an automated stock picking batch test wait for the correct step to finish before moving on. It prevents the test from failing at random, which helps keep the stock workflow checks stable and reliable.
Original PR description
The commit a4f4d8c7d8e37 made this test fail undeterministicall. This commit enforce the triggers to be sure each step is correctly executed. Runbot : 234227 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 makes the invoice layout change for Argentina more specific so it no longer clashes with a separate accounting-related customization. It helps ensure that reports display correctly without unintended side effects from overlapping updates.
Original PR description
The xpath of the line colspan was not precise enough. Since a change needs to be done in account_intrastat (check enterprise pr), those xpath conflicted. opw-5185296 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 placement of amounts in the Intrastat invoice report when both section lines and the country of origin column are used. It ensures the report layout stays aligned and easier to read.
Original PR description
Before this commit when having section and the country of origin column, the amount was is the wrong place. The solution is to add 1 to the line colspan when display origin is set. opw-5333624
When an e-invoice request is rejected by ETA, Odoo now handles the response more gracefully instead of showing a traceback. This improves the user experience by turning a technical failure into proper error handling.
Original PR description
Before this commit: Steps 1) When clients try to download e-invoice for ETA 2) If ETA rejects the request, Odoo fails to parse to JSON 3) a JSONDecodeError exception is raised 4) Odoo doesn't catch it and a traceback is raised => A JSONDecodeError is raised but actually it's not json.decoder.JSONDecodeError, it's actually requests.exceptions.JSONDecodeError as mentioned here https://requests.readthedocs.io/en/latest/api/#requests.JSONDecodeError After this commit: If the request is rejected and Odoo failed to parse the response to JSON the exception is catched properly. opw-5241411 opw-5272195 Forward-Port-Of: odoo/odoo#236672
This update removes duplicate method definitions found in several areas of the codebase. It helps keep the system easier to maintain and reduces the risk of inconsistent behavior in payroll and expense-related features.
Original PR description
found by pylint 4 Forward-Port-Of: odoo/enterprise#99927 Forward-Port-Of: odoo/enterprise#99809
Odoo now uses the current official code for Odisha, changing it from the outdated "OR" to "OD". This helps ensure contacts and sales documents use the correct state information for India.
Original PR description
**Steps to reproduce:** 1. Install the `Contacts` module. 2. Go to Contacts > Create a new contact. 3. Select country India, and state Odisha. 4. Create a sales order using the newly created contact. **Issue:** As per [Government of India](https://www.iso.org/obp/ui/#iso:code:3166:IN), the state code was officially changed from "OR" to "OD" in 2023. However, Odoo still uses the outdated code. <img width="407" height="163" alt="image" src="https://github.com/user-attachments/assets/1631a831-f455-4a51-886f-7e4ed691add0" /> **Solution:** Update the name of the state from "OR" to "OD" in state records. **opw-4935633** Forward-Port-Of: odoo/odoo#234697
This update keeps Odoo’s code quality checks compatible with newer pylint/astroid versions and removes a few outdated compatibility paths. It also fixes a couple of test-related false alarms so the validation tools run more reliably across supported environments.
Original PR description
- astroid 4 deprecates toplevel exports of nodes, thankfully that was never actually necessary so we can just import that unconditionally - remove support for pre-jammy pylint / astroid, specifically `astroid.nodes` was added in astroid 2.7.0 and `astroid.node_classes` deprecated then and removed in 3.0, this can affect Bullseye users as it shipped with astroid 2.5 - Astroid 4 changes `spec.Finder.find_module` in order to cache it (pylint-dev/astroid#2509), we can just make our method static for all versions as we don't need `self` anyway. - The mail test triggers `function-redefined` (E0102), fix it. - Skip the escpos script thing which triggers a bunch of `undefined-variable` (E0602) false positives. Forward-Port-Of: odoo/odoo#236530 Forward-Port-Of: odoo/odoo#236258
This change updates the Adhoc CLA document to include additional members. It keeps the agreement records current so contributor onboarding and compliance remain accurate.
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 Forward-Port-Of: odoo/odoo#227891
Module was added in stable => needs to be manually added to weblate.json file
Original PR description
Module was added in stable => needs to be manually added to weblate.json file