Monday, September 22, 2025
13 changes · 17.0
Enhancements to existing features
Belgian partners are now checked using the two most common Peppol identifier types, improving the chance of finding them on the network. Related guidance warnings were removed because the preferred identifier is now handled automatically during registration.
Original PR description
1. For belgian partner, we now check for 0208 and 9925 which are the two most used EAS when looking for partner existence on the Peppol network. 2. Remove the warnings about the recommended EAS: 0208 is now the mandatory EAS, this will be handled directly on IAP where the Peppol Access Point will try to register 0208 in all cases with an alias system. Note that we have always computed 0208 as recommended value in registration process. task-4852903
Resolved issues and error corrections
Marketing automation campaigns with invalid filter rules no longer trigger a system error when users add a new activity. Instead, the campaign now warns users about the invalid condition so they can correct it and continue working.
Original PR description
An error occurs when a user enters a `malformed domain` in a campaign and then creates a new activity, due to an unhandled `literal_eval` exception. **In the following code:**…
An error occurs when a user enters a `malformed domain` in a campaign and then creates a new activity, due to an unhandled `literal_eval` exception. **In the following code:** https://github.com/odoo/enterprise/blob/0a34ac7363b8270bb745a9e9bebba836af52d63f/marketing_automation/models/marketing_activity.py#L142-L143 **Steps to reproduce:** * Install `marketing_automation` and turn on developer mode. * `Marketing automation > New>Start from Scratch > Create Campaign` * Add condition> paste [this domain](https://drive.google.com/file/d/1HKWlgsQt-oGN7SGdgtfghYOMGNslDSag/view?usp=sharing) in the code editor. * After `Created on` is added click on it and select the `Created on` field again from dropdown menu this will allow you to save. * Press `Add new activity`. `ValueError:malformed node or string on line 1: <ast.Call object at 0x7af0f19a1210>` **Solution** * Add `eval_domain` helper to handle errors from malformed domain strings. * Trigger a validation error for invalid domains on the campaign page and during activity creation. Sentry-6688190469
Testing the AvaTax Brazil production connection no longer crashes when the account has insufficient credits. Instead, users receive a controlled error message, making setup issues easier to understand and preventing disruptive traceback screens.
Original PR description
If there are insufficient credits and the user attempts to test the connection for AvaTax Brazil in the production environment, a traceback will be raised. Steps to reproduce the error: - Install ``l10n_br_avatax`` module and switch to BR company - Go to Invoicing > Configuration > Settings > AvaTax Brazil > Environment: Production > Set Avatax Portal Email, API ID and API Key > Save - Click on Test Connection Traceback: ``` InsufficientCreditError: null ``` https://github.com/odoo/odoo/blob/b10303a136f87e17f621f1294f1e197c3ed67c98/addons/iap/tools/iap_tools.py#L138 When the user clicks the Test Connection button, the ``_l10n_br_iap_request`` method is called, which then calls the ``iap_jsonrpc`` method. This call raises an ``InsufficientCreditError`` if there are not enough credits. sentry-6721351360
This fix stops users from removing every website from the system, even if the default website reference was deleted. It prevents website pages from crashing and ensures the Website app always has at least one site available.
Original PR description
Currently, an error occurs when the user deletes all the websites and tries to open the website. Steps to Reproduce: - Install website - Navigate to Settings>Technical>External Identifier and Search `default_website`, delete that record - Navigate to website>configuration>websites - Delete all available website. - Tries to access or open the website Error: ValueError: Expected singleton: website() Root Cause: Since https://github.com/odoo/odoo/commit/60adaf5632ddfe3f68da369a2e9642ad639da37e , the check preventing the deletion of the last website was changed. The new constraint only prevents the deletion of the default website via the external identifier website.default_website. But if the user deleted the external identifier of the default website and deleted all the websites it leads to a traceback. Solution: This commit ensures that at least one website exists. sentry-5900356108
Field service tasks now use the product's currency when creating related sales order lines. This ensures prices are converted correctly when the product and sales order use different currencies, avoiding incorrect invoicing amounts.
Original PR description
### Steps to reproduce: - Open Field Service module. - Create a new task. In the Customer field, select “Bloem GmbH”. - Open the task’s project. - In the Invoicing tab, create a new line for any employee and any service. - Return to the task and in the Timesheets tab, add a new timesheet. - Click the Mark as done button. - Click the Sales order button. ### Cause: When creating the sale order out of the fsm task we use _get_tax_included_unit_price to get the price of the SO line but we are passing the order currency twice to this method so it doesn't convert the price as when it checks the currency and the product_currency it found they are the same so no need to convert https://github.com/odoo/odoo/blob/6653355b8bc063ceadf08af17fbf2c4a250553e6/addons/account/models/product.py#L239-L240 ### Fix: We pass the product currency instead of the order currency in order to be able to convert the price according to the currencies opw-5045071
This fix prevents users from hitting an error when drilling into graph or pivot report data that points to a form view that is not available. It keeps reporting navigation stable by only including form views when they actually exist, while still showing records in list view.
Original PR description
This error occurs in 18.2 when a user creates a course record for any attendee. Steps to Reproduce: - Install the website_slide module. - Go to Reporting > Attendees. - Go to either the Graph or…
This error occurs in 18.2 when a user creates a course record for any attendee.
Steps to Reproduce:
- Install the website_slide module.
- Go to Reporting > Attendees.
- Go to either the Graph or Pivot View and click on any count value.
- Open any attendee record and click on New.
SyntaxError: syntax error at or near ")"
LINE 18: WHERE SCP.id IN ()
^
This error occurs because when the user clicks on New to create the attendee's course record, the system triggers the compute method before saving the record. Since the record has not been saved yet, the self.id is empty, which causes the error.
In the list and kanban views, clicking on any attendee record does not open any form view. However, in the graph and pivot views, clicking on an attendee record opens a form view that does not exist, resulting in an error.
This commit ensures that if the form view is present, it will be included in the graph and pivot views. The list view is always included to display the records. The form view may contain computed methods, which can lead to errors if the view is not properly defined.
Sentry-6465821899
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe website editor now handles font size and text style changes more cleanly, reducing unwanted formatting artifacts and extra undo steps. It also prevents style changes in header areas where they could accidentally damage the page structure.
Original PR description
This PR is a follow-up of https://github.com/odoo/odoo/pull/129791 It permits to: - prevent unnecessary elements on text option change - remove font size classes / style on text style change - set font size class in a single command - remove dead code to delete empty class attribute - clean dom after text style change in `<li>` - unwrap sub text style element on text style change - hide text style dropdown for text element in the header task-1958098
When a purchase bill is reset to Draft, its GSTR-2B reconciliation information is now returned to the starting state. This prevents outdated return period links or exception flags from carrying over, helping teams reconcile GST data more reliably.
Original PR description
When a purchase invoice (bill) is reset to Draft: - Reset GSTR-2B reconciliation status to "pending" - Unlink from GST return period - Clear any existing exceptions This ensures that the bill returns to its initial stage for proper reconciliation. Task ID: 5095582
This fix prevents Firefox from keeping the wrong hidden product value when a website editor switches product variant display modes. It helps ensure shoppers and editors can continue selecting variants and adding products to the cart without needing to refresh the page.
Original PR description
### Problem: Switching the variants view from "Options" to "Product List" using the web editor, in Firefox, causes an error stating that the `product_template_id` doesn't exist. Add to cart and switching variants won't work until refreshing the page. This issue occurs only in Firefox because it incorrectly preserves hidden input values during DOM replacement. It assigns the value of the first hidden input (`product_id`) to the new `product_template_id` input, based on its position in the DOM. ### How to reproduce: * Create a product with variants. * Go to the product page in website shop using Firefox. * Open website editor on Customize. * Switch the variants view from Options to Product List. ### Solution: Disable autocomplete on the `product_template_id` input to prevent Firefox from preserving and reusing the previous value during DOM updates. opw-4901316
Sales orders for field service products with zero-priced lines now show as invoiced once the related invoice is created. This prevents teams from seeing completed orders incorrectly marked as still needing invoicing.
Original PR description
Steps: - Install sale and fsm module. - Enable anglo-saxon from the setting. - Create a service type product with fsm project as template. - Select that product on SO and set unit price to 0 on SOL. - Confirm that order and create and post invoice. Issue: - Sale order status still shows `To invoice` even though we create SOL related invoice. Cause: - In [PR] we made invoice status for anglo-saxon line `To Invoice` so it always say `To Invoice` even user create related invoice. Fix: - Make those lines `Invoiced` if there is related invoice by checking qty_invoiced is greater or equal to qty. [PR]: https://github.com/odoo/enterprise/pull/70132 opw-5055540
This fix stops users from changing the amount in currency on posted invoice journal items except where appropriate for draft tax lines. It helps prevent invoices from showing inconsistent totals or related accounting details after manual edits.
Original PR description
- Create an invoice with some products and post it - Go to Accounting > Journal items and ser for the ones belonging to the invoice. - Set the checkbox for the product sales one and set whatever tax…
- Create an invoice with some products and post it - Go to Accounting > Journal items and ser for the ones belonging to the invoice. - Set the checkbox for the product sales one and set whatever tax grid (you'll have to reveal that column). - Accept the changes. - Now go back to the invoice. - You'll see a new tracking message. Something like Journal Item #1093 updated - It contains a link and from that link you can go to the journal item form. - In that form you can edit the *amount in currency* field. Issue: - If a user do so, it leaves inconsistent invoice amounts: totals aren't recomputed, analytic lines aren't recomputed either. How it should behave: - Amount in currency shouldn't be editable here. Mainly when the journal entry is already posted! opw-4951629 A vídeo showing the issue: 📹️ https://www.loom.com/share/f7cd1d8f4138458f9b6c190233b0b9df?sid=eec77c17-a4a6-4698-8604-10aaa7e33f47 MT-10887 cc @moduon --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223187
This fixes an issue where users with employees in multiple companies could hit a validation error when adding timesheets to Helpdesk tickets. The system now preserves the correct company information instead of replacing it with a blank value when the linked project has no company set.
Original PR description
Steps to Reproduce: ------------------ - Open Helpdesk. - Go to Configuration → Helpdesk Teams. - Create a new team. - Enable the Billing feature and assign a project to this team. - Set the…
Steps to Reproduce: ------------------ - Open Helpdesk. - Go to Configuration → Helpdesk Teams. - Create a new team. - Enable the Billing feature and assign a project to this team. - Set the project’s Company field to Null. - Create an employee for the current user in another company. - Ensure the user has employees in both companies. - Create a new ticket (or open an existing one) in the newly created team. - Try creating a new timesheet → a Validation Error is raised. Root Cause: ----------------- When a user has employees associated with multiple companies and tries to log a timesheet with multi-company enabled, a validation error occurs. **This happens because:** - The default company is derived from the project linked to the Helpdesk team. Since the company_id field on the project is no longer required, it may be Null, leading to an error when fetching the correct [employee for the company](https://github.com/odoo/odoo/blob/6a36015e2ee69aafe3880bf1fff38439af5cd673/addons/hr_timesheet/models/hr_timesheet.py#L214-L216 ). - Additionally, the [company check](https://github.com/odoo/enterprise/blob/83a1b88c8cae4db5c9b1bf82ee7ebb4e13c41b2a/helpdesk_timesheet/models/analytic.py#L81-L82) is incorrect. The code is checking whether the `company_id` key exists in a `list of vals`, whereas it should be checked directly on the vals dict itself. Issue Faced: ------------- In version 18.3, timesheets are created during migration [here](https://github.com/odoo/upgrade/blob/24f85bbc3408bf10b1cee93e4c395edf806beaa8/migrations/helpdesk_timesheet/saas~18.3.1.0/post-migrate.py#L44-L58 ). Even though the correct company_id is passed, it gets overridden during the process. and If the associated project does not have a company set, the company_id becomes False [here](https://github.com/odoo/enterprise/blob/83a1b88c8cae4db5c9b1bf82ee7ebb4e13c41b2a/helpdesk_timesheet/models/analytic.py#L81-L82), which results in a Validation Error because the [here](https://github.com/odoo/odoo/blob/6a36015e2ee69aafe3880bf1fff38439af5cd673/addons/hr_timesheet/models/hr_timesheet.py#L214-L216) unable to determine the correct employee linked to the company. OPW: 5004092
Sendcloud deliveries now allow customs HS codes up to 12 characters, matching Sendcloud's current API limits. This helps prevent international parcels, especially shipments to the US, from being delayed because valid customs codes were shortened or rejected.
Original PR description
**PROBLEM** We limit the `hs_code` length to 8 characters, but if we refer to the [sendcloud v2 api doc](https://api.sendcloud.dev/docs/sendcloud-public-api/branches/v2/parcels/schemas/parcel-item), we see that `hs_code` length can be up to 12 characters. Some clients have issue with parcels being held longer in custom when sending them to the US. [opw-5051585](https://www.odoo.com/odoo/project/49/tasks/5051585)