Thursday, November 27, 2025
18 changes · 18.0
New functionality added to Odoo
This update introduces new automated tests for the ‘get_contacts’ function within the VoIP module. These tests ensure the correct retrieval of contact information, enhancing the reliability and accuracy of VoIP calls. This improvement contributes to a more stable and dependable system for business communications.
Original PR description
Task-4646694 Forward-Port-Of: odoo/enterprise#99884
Enhancements to existing features
This update enhances how data is passed to sale page views within key Odoo modules like account, project, and purchase. By adding 'kwargs' to the _get_page_view_values() method, the system now provides more flexible data options for generating these views, leading to potentially more customized and informative sales reports.
Original PR description
kwargs is added to the `_get_page_view_values()` method in other modules: `account` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/account/controllers/portal.py#L47), `project` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/project/controllers/portal.py#L58), or `purchase` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/purchase/controllers/portal.py#L110). @Tecnativa TT57124 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update resolves a minor typographical error within the account_reports module. The fix ensures accurate reporting functionality by removing a redundant comment that was previously present. This change improves the overall clarity and stability of the reporting system.
Original PR description
- This pull request fixes a typo in the account_reports module. - In the previous version, the `_prepare_lines_for_analytic_groupby` method contained a query with a DROP CONSTRAINT statement, and from this [PR](https://github.com/odoo/enterprise/pull/85942/files) the query was updated, but the related comment was not removed.
This update resolves an issue that occurred when all user type groups were marked as 'Share'. The change ensures a valid value is assigned to a field during user group updates, preventing a critical error that could disrupt system functionality. This ensures a smoother upgrade process.
Original PR description
… are share If all the user type groups have the flag `Share` as true, they will be filtered out by `get_application_groups`. While updating `user_groups_view`, the field `user_type_field_name` will…
… are share
If all the user type groups have the flag `Share` as true, they will be filtered out by `get_application_groups`. While updating `user_groups_view`, the field `user_type_field_name` will never be assigned, as the condition
`app.xml_id == 'base.module_category_user_type'` will never be fulfilled.
That means that `user_type_invisible` will be `None`, but that's not a valid value and it will break.
Steps to reproduce:
- Mark all the user type groups as Share.
- Upgrade `base`.
```
File "/home/odoo/src/odoo/18.0/odoo/addons/base/models/res_users.py", line 1801, in _update_user_groups_view
E.group(*(xml2), invisible=user_type_invisible),
File "src/lxml/builder.py", line 204, in lxml.builder.ElementMaker.__call__
File "src/lxml/builder.py", line 186, in lxml.builder.ElementMaker.__init__.add_dict
KeyError: <class 'NoneType'>
```
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#209470This update ensures Odoo correctly transmits invoice data to the Hungarian tax authority (NAV) by removing unnecessary state information. The EDI standard now only requires the province code (HU-BU) as specified in the official documentation, streamlining the process and avoiding potential errors.
Original PR description
Purpose: According to documentation, in region tag in address details, we need to send that county's province code as per the ISO 3166-2 alpha 2 standard. E.g. 'HU-BU'. But we were sending state's name E.g. 'Budapest'. But since region tag is not mandatory for edi, we choose not to send that. Before this commit: In region tag, state's name was sent. After this commit: We stopped sending region tag. EDI Documentation(page-87): https://onlineszamla.nav.gov.hu/files/container/download/2025.10.09.%20EN_Online%20Invoice%20System%203.0%20Interface%20Specification%20.pdf task-5270199 Forward-Port-Of: odoo/odoo#236218
This update resolves an issue where the demo logo on reports was cropped at the bottom. The fix introduces a minimum width to ensure the logo displays correctly, preventing cropping. This improves the visual consistency of reports with short content.
Original PR description
Scenario: - set the report background to demo logo (621x196 pixels) - print a report with short content (eg. quotation without lines) Result: the logo is cropped at the bottom Why: Before 18.0, the…
Scenario: - set the report background to demo logo (621x196 pixels) - print a report with short content (eg. quotation without lines) Result: the logo is cropped at the bottom Why: Before 18.0, the background image was stretched over all the report, so needed to be ok esthetically if stretched. From 18.0 with https://github.com/odoo/odoo/commit/87258f05c7398173d3df6ec39869f52031502ede, the image is only intended to be shown one time on the first page without stretching over the whole document. There is two issues: - the "background-size" value "contains" is a typo of "contain" - if we fixed the typo we would break case where the image has a portait aspect ratio, the image would be zoomed to fit vertically (possibly over several page, which is itself an issue that the commit was trying to fix), but since we have the value "background-position: auto 300px" the contain is computed over the whole element area, and we will have 300px cropped of the bottom of the image Fix: This is not simple to fix, we could have used something like: background-size: auto calc(min(100% - 300px, 800px)); but both min and calc do not seem supported by wkhtmltopdf. So it seems that the only way to make this work better would be: - have a min-width, so people can know that if they can use an image of eg. 300px (for a min-width of 600px) of height without bottom cropped - we could fix the background-size: contain, but then we would possibly bring more issue for vertical image (that will be zoomed up or down all of a sudden) that are not solvable because of background-position. This fix just set the min-height to 600px. opw-4364722
This update resolves an issue where negative amounts (like credit notes) were not being included in the XBRL export of the EC Sales List report. The change ensures that all non-zero amounts, including negative ones, are now correctly generated for the report, improving data accuracy for VAT reporting. This addresses a prior bug impacting report completeness.
Original PR description
To replicate: 1. Install l10n_nl_reports_sbr_icp 2. Create an european partner with a VAT number 3. Create a credit note for this partner 4. Go to Accounting > Reporting > EC Sales List 5. The negative line appears in the report 6. Click on XBRL to export the report The negative line is not included in the exported report Only non-negative positive lines are added to the report in `_generate_codes_values()`. This commit changes that to include non-zero values. opw-5220622 Forward-Port-Of: odoo/enterprise#100009
This update resolves visual issues with the mobile website's scrollbar when navigating between pages. Previously, the fallback iframe content remained visible, causing a distracting scrollbar. Now, the iframe content is removed after loading, and the scrollbar appearance is corrected, ensuring a smoother and more professional mobile experience.
Original PR description
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's…
### [FIX] website: copy the whole document to fallback iframe Since da85d7f8f39f43bd21603b40f357dfc572036d27, the style in head and the body of the website preview are copied to the fallback iframe's document. This did not copied the attributes on the `html` node, which somtimes impacted the appearance. With this commit, the whole document is copied to the fallback iframe. Steps to reproduce: - Activate "Mobile preview" when viewing the website - Go to a page that is long enough for a scrollbar to appear - Navigate to another page - Bug: During the transition, the fallback is shown, and its scrollbar is wider than the one of the page that was shown just before task-5212287 ### [FIX] website: remove content of fallback iframe after load Since commit 7b19831e1c624b483008feb526ba773ec8b23009, an fallback iframe is shown behind the website preview to avoid flicker on navigation. Since commit 3036c7dc4720a88f2717b96a29d45d923eb6ec75, the preview for mobile has some transparency on its scrollbar. Thus the part of the fallback iframe behind the scrollbar when previewing mobile was slightly visible. This commit fixes it by removing the fallback iframe's content after the website has loaded (and the fallback is not needed anymore). Steps to reproduce: - On website, activate "Mobile preview" - Navigate to a page long enough to have a scrollbar - Navigate to another page long enough to have a scrollbar - Scroll a bit - Bug: The scrollbar of the fallback is slightly visible task-5212287
This update fixes an error that occurred when users tried to view time off information for contracts without a defined working schedule. The fix prevents the application from crashing by skipping calculations when a schedule isn't present, ensuring a smoother user experience.
Original PR description
Currently, an error occurs when a contract has no working schedule set and the user tries to open the Time Off overview in the Gantt view. **Steps to Reproduce:** 1. Install `hr_holidays_contract_gantt` with demo data. 2. Open the **Marc Demo** employee and remove the **Working Schedule** from the contract. 3. Navigate to: Time off > Overview **Error:** `AttributeError - 'bool' object has no attribute 'upper'` **Cause:** The error occurs because at [1], the contract does not have a `resource_calendar_id` (working schedule) assigned. As a result, it attempts to access attributes of a False value, causing the error. **Fix:** This commit skips the computation when the contract does not have a working schedule set. [1] - https://github.com/odoo/enterprise/blob/e60429fce3875a282172cd81d18322d472d7fee4/hr_holidays_contract_gantt/models/hr_leave.py#L52 sentry-7017326141
This update fixes an error that occurred when creating new product templates. Previously, the system incorrectly set the template's write date to 'False' if the template was created without a pre-existing product. This change ensures accurate date tracking for new product templates, preventing potential data inconsistencies.
Original PR description
If _compute_write_date is launched when creating a product.product without starting from an existing product.template, the compute may be launched before the product.template is created, hence record.product_tmpl_id.write_date is False, and comparing datetime and bool leads to an error. This completes the fix proposed https://github.com/odoo/odoo/pull/138177 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where releasing a table in the Restaurant POS module would cause a crash. The team added a test case to ensure stability when removing orders from a table, preventing unexpected errors and improving the user experience. This ensures smoother operation for restaurant staff.
Original PR description
## In this commit: - Testcase added to ensures that no traceback occurs when releasing a table after deleting a synced order. ## Steps to reproduce: - Open Restaurant POS - Select a table and add a product - Click the order button - Reopen the same table and remove all order lines - Click "Release Table" Related PR: https://github.com/odoo/odoo/pull/216336 Task: 4899160
This update fixes a visual issue where the comparison price for subscription products wasn't displayed on the product page. The fix involves updating how the product page renders pricing dynamically, ensuring the comparison price is correctly shown to customers. It addresses a technical limitation with client-side rendering and formatting.
Original PR description
Steps to reproduce: 1. Install website_sale_subscription 2. Enable Comparison Price from the settings 3. Create a Subscriptions product with a recurring plan and 'compare to price' > recurring price…
Steps to reproduce: 1. Install website_sale_subscription 2. Enable Comparison Price from the settings 3. Create a Subscriptions product with a recurring plan and 'compare to price' > recurring price 4. Go to product page via smart button Issue: - The comparison price is not visible beside the recurring plan. Cause: - The product page updates the pricing display dynamically using client-side rendering when the subscription plan information is loaded. The XML template `website_sale_subscription.SubscriptionPricingSelect` used the <field> tag `<field name="product.compare_list_price"/>` to render the comparison price. The <field> tag is a server-side QWeb element and is not supported by the client-side Owl engine, causing the rendering to display nothing. Additionally, client-side templates do not have automatic access to server-side field formatting (like currency symbols) when simply escaping raw values. Solution: - In `variant_mixin.js`, extract the already formatted comparison price text from the existing DOM element (the `<del>` tag inside the pricing selector) before the element is replaced and pass this formatted string to the rendering context. Update the XML template to use `t-esc` to display this pre-formatted string instead of using `<field>` before: <img width="426" height="79" alt="image" src="https://github.com/user-attachments/assets/fe34b4c5-5cd6-4877-80e3-9ed4481cd86f" /> After: <img width="392" height="115" alt="image" src="https://github.com/user-attachments/assets/ed043fef-bfd3-46de-aeb2-1a48cacc89ed" /> opw-5248297
This update resolves a bug where a previously unlinked call continued to appear in the Odoo softphone. The fix ensures that calls are immediately removed from the softphone interface when they are no longer linked, improving the user experience and data accuracy.
Original PR description
A call that was unlinked previously remained visible in the VOIP softphone. This fix ensures that the call is correctly removed from the softphone view as soon as it is unlinked. Task-5262162 Forward-Port-Of: odoo/enterprise#100036
This update fixes an issue where the course search dropdown was overlapping the search input field on the homepage. The fix ensures the dropdown is correctly positioned within the search form layout, providing a better user experience for finding courses.
Original PR description
Scenario: go to homepage > Courses > one "View all" > type in search Result: dropdown with result is shown over the search input Issue: search form is in flex layout, but the dropdown is displayed in absolute so it is outside of flex flow and is positionned at the top-right of the form container. History: - before bootstrap 4 (odoo 15): the search form had a flex layout, but bootstrap dropdown used "top:100%" so were positionned at the bottom of it. - as of bootstrap 5 (odoo 16): the form kept a flex layout, but bootstrap dropdown now used "position: absolute" with unset top putting them below the search item in a block container, but over it in a flex layout. Fix: when the search bar is displayed, display it as block. opw-4735257 Forward-Port-Of: odoo/odoo#206909
This update resolves an issue where the system was incorrectly creating multiple bank accounts from UBL invoices. The fix filters out duplicate account numbers, ensuring accurate bank information is imported into the system. This prevents data inconsistencies and improves the reliability of financial transactions.
Original PR description
Currently `_import_retrieve_and_fill_partner_bank_details` may try to to create multiple res partner bank with the same account. This can i.e. happen in case there are multiple `cac:PaymenMeans` nodes in the XML. After this commit we filter out duplicate bank accounts numbers. opw-5149621 Forward-Port-Of: odoo/odoo#236676
This update resolves a translation issue in the Odoo accounting module for Marathi-speaking users. The tax report data was incorrectly translated, leading to potential inaccuracies in reporting. This fix ensures accurate tax reporting for our users in India.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237711
This update fixes an issue where vendor bills created through the Documents module incorrectly defaulted to the company's currency instead of the vendor's. Now, when a vendor is selected in the Documents module, the bill automatically uses the vendor's currency, ensuring accurate financial reporting. This improves the reliability of vendor billing transactions.
Original PR description
**Issue:** When creating a vendor bill or vendor refund through the Documents module after selecting a supplier, the currency defaults to the company's currency instead of the vendor's. However, if the supplier is selected later in the Accounting module, the correct supplier currency is applied. **Steps to reproduce:** - In Documents, upload a bill. - Click on the bill and assign a vendor (whose supplier currency is different from the company's currency). - Click on "Create Vendor Bill". The used currency isn't that of the supplier. opw-4406074 Forward-Port-Of: odoo/enterprise#78380
The Original Bills report was failing to generate due to complexities in how Odoo creates the report's PDF. To resolve this, the studio interface has been configured to simply blacklist this specific report, preventing errors. This ensures users can access other reports within studio without interruption.
Original PR description
Steps to reproduce ================== - Install account_accountant,web_studio - Go to Invoices - Open studio - Click on "Reports" - Select the "Original Bills" report => The report is empty Cause of the issue ================== The Original Bills is a very specific report. Multiple streams are created and then combined to make the final PDF See: odoo/odoo#85150 Solution ======== Since studio cannot handle this usecase, we blacklist this report opw-5108198 Forward-Port-Of: odoo/enterprise#100729