Daily updates from Odoo
Tuesday, October 7, 2025
26 changes
5 changes
Enhancements to existing features
The Brazilian AvaTax product form now shows “LC116 Code” instead of “Mercosul NCM Code” when configuring services. This reduces confusion by using the correct terminology for service tax codes while keeping product code labeling unchanged.
Original PR description
Purpose:- - In Brazil, NCM is a code that has an acronym to specify the Mercosul Common Name for products, and for services, the right name is LC116 (Complementary Law 116), which specifies the federal code for a service. - But we have the same field `l10n_br_ncm_code_id` to configure both NCM for goods and LC116 for services and the same table can be used for both the cases. - So while configuring fiscal information for a service, user don't understand why it still shows the NCM label instead of LC116. Before this commit:- - Label `Mercosul NCM Code` was displayed for services confusing users. After this commit:- - Label `Mercosul NCM Code` is replaced with `LC116 Code` only for services. - Tooltip is also improved for better understanding. task-5096435 Forward-Port-Of: odoo/enterprise#96228 Forward-Port-Of: odoo/enterprise#95404
Bank reconciliation now creates the accounting entry as soon as an XML file is uploaded. This lets the imported transaction details be linked directly to the bank statement line, making reconciliation smoother and more complete.
Original PR description
When uploading a xml from the bank rec widget, the move will be created directly so we can put the move lines in the bank statement line. task-5107112 Forward-Port-Of: odoo/enterprise#95345
This update streamlines how developers configure website builder options, making related settings easier to keep together and reuse. It mainly affects appointment, online booking, and rental website features, helping future improvements be delivered more consistently with limited direct user impact.
Original PR description
The commit: 1. use static property to configure a builder option 2. introduce the concept of dependencies to access the plugin's shared in builder option 3. make a plugin context the same for Plugin,…
The commit:
1. use static property to configure a builder option
2. introduce the concept of dependencies to access the plugin's shared
in builder option
3. make a plugin context the same for Plugin, BuilderOption and
BuilderAction to have the same API in each class.
Before this commit, to define an option, we had to define a javascript
object that would contain the information of the option within the
`builder_options` resource.
```js
class MyPlugin extends Plugin {
resources: {
builder_options: [
{
selector: "div.selector",
template: "my.owlTemplate",
cleanForSave() {}
// ... other option props
}
]
}
}
// For a custom component
class MyPlugin extends Plugin {
resources: {
builder_options: [
{
selector: "div.selector",
template: MyCustomComponent,
cleanForSave() {}
// ... other option props
}
]
}
}
class MyCustomComponent extends BaseOptionComponent {
// ...
}
```
When building anything for the builder, there is 3 classes that are
important: `Plugin`, `BaseOptionComponent`, `BuilderAction`.
In practice, the option object defined in builder_options feels
strange. On the other hand, making the configuration of the option as
a static property of the component somehow feels simpler as everything
related to that option is defined in the same class.
```js
class MyPlugin extends Plugin {
resources: {
builder_options: [MyCustomComponent]
}
}
class MyCustomComponent extends BaseOptionComponent {
static template = "my.owlTemplate";
static selector = "div.selector";
static cleanForSave(context) {}
// ...
}
```
To have the same mental context in the 3 important class, they all
share the same API (`dependencies`, `dispatchTo`, `getResource`, ...)
(see `Editor.getPluginContext`)
To access a plugin shared method, it's now the same for `Plugin`,
`BuliderAction` and `BaseOptionComponent`:
```js
class MyCustomComponent extends BaseOptionComponent {
static selector = "mySelector";
static dependency = "myPlugin";
myMethod() {
this.dependencies.myPlugin.pluginMethod();
}
}
```
To access a resource, dispatch, ...:
```js
class MyCustomComponent extends BaseOptionComponent {
static selector = "mySelector";
myMethod() {
const resource = this.getResource('myResource');
}
}
```The website HTML builder now uses a cleaner internal structure for configuring editing options and sharing functionality between builder components. This makes future website editing features easier to build and maintain, with little direct impact on end users.
Original PR description
1. use static property to configure a builder option 2. introduce the concept of dependencies to access the plugin's shared in builder option 3. make a plugin context the same for Plugin, BuilderOption and BuilderAction to have the same API in each class. See https://github.com/odoo/odoo/pull/220746
This update adds automated checks for appointment booking flows, including capacity handling, availability, cart bookings, invoice confirmation, and final event creation. These tests help reduce the risk of booking errors and improve reliability across appointment sales and payment scenarios.
Original PR description
\* = website_appoinment_sale, appointment_account_payment Add tests to ensure correct behaviour for the various scenarios. The following tests are added: - Users/resource's capacity computation when manage capacity is on and off. - Unavailability computation of users/resources in the `calendar.event`. - Check the bookings of user/resource in the cart for the availability after the invoice is confirmed. - Creation of the actual event when the booking from the cart is confirmed. Task-4919317
3 changes
Enhancements to existing features
The Brazilian AvaTax product setup now shows the correct LC116 label when configuring services instead of referring to Mercosul NCM, which applies to goods. This reduces confusion for users entering fiscal information and improves the supporting tooltip explanation.
Original PR description
Purpose:- - In Brazil, NCM is a code that has an acronym to specify the Mercosul Common Name for products, and for services, the right name is LC116 (Complementary Law 116), which specifies the federal code for a service. - But we have the same field `l10n_br_ncm_code_id` to configure both NCM for goods and LC116 for services and the same table can be used for both the cases. - So while configuring fiscal information for a service, user don't understand why it still shows the NCM label instead of LC116. Before this commit:- - Label `Mercosul NCM Code` was displayed for services confusing users. After this commit:- - Label `Mercosul NCM Code` is replaced with `LC116 Code` only for services. - Tooltip is also improved for better understanding. task-5096435 Forward-Port-Of: odoo/enterprise#96228 Forward-Port-Of: odoo/enterprise#95404
The state selection search field no longer has extra spacing around it. This makes it visually consistent with similar selection fields across Odoo and improves the overall form experience.
Original PR description
There is a 2% margin added when searching for country states Remove this margin to have the field look like the majority of `many2one` fields task-5123126 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The state selection field now aligns visually with other similar lookup fields by removing an extra margin. This creates a more consistent form layout and reduces small visual inconsistencies for users entering addresses or location details.
Original PR description
Related PR: https://github.com/odoo/odoo/pull/229290 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
10 changes
Enhancements to existing features
VoIP call recordings are now saved in mono instead of stereo. This reduces storage usage while preserving the practical quality needed for recorded conversations.
Original PR description
Task-5082457 Forward-Port-Of: odoo/enterprise#96238
The VoIP call history now includes a direct internal link to open the detailed call form. This makes it quicker for users to review call information without extra navigation steps.
Original PR description
Task-4962728
The Brazilian AvaTax product setup now shows the service-specific LC116 Code label instead of Mercosul NCM Code when configuring services. This reduces confusion for users by matching the label and tooltip to the correct Brazilian service tax classification.
Original PR description
Purpose:- - In Brazil, NCM is a code that has an acronym to specify the Mercosul Common Name for products, and for services, the right name is LC116 (Complementary Law 116), which specifies the federal code for a service. - But we have the same field `l10n_br_ncm_code_id` to configure both NCM for goods and LC116 for services and the same table can be used for both the cases. - So while configuring fiscal information for a service, user don't understand why it still shows the NCM label instead of LC116. Before this commit:- - Label `Mercosul NCM Code` was displayed for services confusing users. After this commit:- - Label `Mercosul NCM Code` is replaced with `LC116 Code` only for services. - Tooltip is also improved for better understanding. task-5096435 Forward-Port-Of: odoo/enterprise#96228 Forward-Port-Of: odoo/enterprise#95404
This update changes how AI and WhatsApp conversations identify and manage the person on the other side of a chat. It helps keep chat participant information more consistent across messaging features, reducing the risk of mismatched or duplicated conversation details.
Original PR description
task-4675831
This update streamlines automated checks for the online shop by using more appropriate test helpers and starting tests closer to the relevant product pages. It helps keep eCommerce testing faster, clearer, and easier to maintain without changing the customer-facing shopping experience.
Original PR description
* use the right tour utils * start tours from product page when there is no reason to start from shop page
Bank reconciliation now creates the accounting entry immediately when an XML file is uploaded. This helps the uploaded transaction details flow directly into the bank statement line, reducing manual follow-up and making reconciliation smoother.
Original PR description
When uploading a xml from the bank rec widget, the move will be created directly so we can put the move lines in the bank statement line. task-5107112 Forward-Port-Of: odoo/enterprise#95345
The point of sale integration for UrbanPiper has been adjusted to stay compatible with recent product option changes in Odoo. This helps restaurants keep managing product attributes consistently when syncing menus and orders with delivery platforms.
Original PR description
task-4731792
Emission factor assignation rules can now use product categories, so products in the same category automatically follow the same rule. This reduces manual setup for ESG carbon emissions tracking and helps teams apply consistent rules across similar products.
Original PR description
We want to add "Product Category" to assignation rules so that all products in the same category automatically follow the same rule, reducing manual work (based on several client feedback). Task [link](https://www.odoo.com/odoo/project.task/5107543) task-5107543
Belgian payroll now includes the Dimona employee declaration functionality directly, reducing module separation and simplifying payroll compliance setup. This helps Belgian employers manage required employment declarations in one place with updated records, views, permissions, and automated processing.
The Sign app now uses one shared rule to decide when the PDF upload button appears. This reduces duplicate setup behind the scenes, making the interface easier to maintain without changing how users work.
Original PR description
Before this PR, the upload PDF button used the same logic and conditions in both templates and requests, causing duplicate code. This PR adds a single condition to manage the upload button for both templates and requests, reducing duplication and improving clarity.
5 changes
Enhancements to existing features
Brazilian service fiscal setup now shows the correct LC116 Code label instead of Mercosul NCM Code. This reduces confusion for users configuring services while keeping product code labeling unchanged.
Original PR description
Purpose:- - In Brazil, NCM is a code that has an acronym to specify the Mercosul Common Name for products, and for services, the right name is LC116 (Complementary Law 116), which specifies the federal code for a service. - But we have the same field `l10n_br_ncm_code_id` to configure both NCM for goods and LC116 for services and the same table can be used for both the cases. - So while configuring fiscal information for a service, user don't understand why it still shows the NCM label instead of LC116. Before this commit:- - Label `Mercosul NCM Code` was displayed for services confusing users. After this commit:- - Label `Mercosul NCM Code` is replaced with `LC116 Code` only for services. - Tooltip is also improved for better understanding. task-5096435 Forward-Port-Of: odoo/enterprise#96228 Forward-Port-Of: odoo/enterprise#95404
Bank reconciliation XML uploads now create the related accounting entry right away. This makes the uploaded transaction details available immediately on the bank statement line, improving reconciliation accuracy and workflow continuity.
Original PR description
When uploading a xml from the bank rec widget, the move will be created directly so we can put the move lines in the bank statement line. task-5107112 Forward-Port-Of: odoo/enterprise#95345
This update adds extension points for the automatic wave process in warehouse batch picking. It makes it easier for businesses with custom warehouse rules to adapt when transfers are automatically grouped, without changing the core process.
Original PR description
This improvement just adds some hook methods that allow to decapsulate the logic of auto waves so its doable to extend the conditions for auto-waving. cc @moduon fyi @Shide TODO: for the sake of clarity I just inserted the hook method logic but a cleaner approach would be to extract the whole logic of each hook into their own separate method --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#227873
Point of Sale now shows which communication method was most recently used to connect with an IoT Box, making connection status easier to understand. The old longpolling toggle was removed because WebRTC is now the main communication method.
Original PR description
We updated the IoT Box status icon in PoS to display the last protocol used to communicate with the box. We removed the longpolling enable/disable toggle as the main protocol now is WebRTC. Task: 5116840
Manufacturing planning now defaults indirect component demand to manual replenishment, reducing setup steps for planners. The replenishment tooltip was also clarified so users can understand planning color indicators without prior product knowledge.
Original PR description
With this commit:
-----------------
- MPS Replenishment Trigger:
- Set ‘Manual’ as the replenishment trigger in MPS when the component is
marked as indirect, since such components—added via BoM—defaulted to ‘Never’
and should instead allow manual planning as they represent indirect demand.
- This improvement removes that extra step, speeding up the workflow and
improving overall UX.
- MPS Replenishment Tooltip:
- Improved tooltip text to clearly explain the color codes in the
replenishment row. This improves usability and removes the need for prior
knowledge of Odoo’s MPS color semantics.
task-48688853 changes
Enhancements to existing features
The Documents folder action menu now opens more quickly by showing available controls while actions continue loading. Users also get faster feedback when pinning or unpinning actions, with fewer background refreshes during repeated changes.
Original PR description
The cogwheel which holds the folder actions was slow to open because it loads the actions at startup. To speedup it up, we backport the fix odoo/enterprise#90124 that allows the cogwheel to be open while loading the actions (instead of waiting that the actions are loaded). We also add a spinner while it is being loaded. When selecting action to embed for the folder, it was slow as well. To solve the problem, we toggle the action immediately (not waiting the answer of the server) and roll it back in case of failure. Finally, to limit the number of calls to the server, we only reload the search model if there are no pending toggle of action. So if you activate for example 5 actions in a row and the connection is slow enough, the search model will only be reloaded once instead of 5 times (when the 5 actions are toggled). Task-4828503
Portal discussions now treat messages that include only a rating as meaningful content, so reviews are not considered empty or ignored. This improves how customer feedback and course reviews are displayed and managed across portal and website learning pages.
Original PR description
*: portal, portal_rating, rating, website_slides task-5016995
UBL electronic invoices now include the delivery party in the delivery information. This gives recipients clearer shipping details by using the shipping contact when available, or the customer name as a fallback, while keeping existing delivery date and location behavior unchanged.
Original PR description
Previously, the Peppol UBL export only covered the mandatory delivery fields and did not include the `delivery party`. This commit adds the `<cac:DeliveryParty>` element under `<cac:Delivery>` to improve the exported information. - Include `<cac:DeliveryParty>` in the `<cac:Delivery>` section of UBL invoices. - Use the shipping partner name if set; otherwise, fallback to the customer name - Keep existing `<cac:DeliveryLocation>` and delivery date logic unchanged. <img width="766" height="306" alt="image" src="https://github.com/user-attachments/assets/d07c1b37-4c6d-42d1-99b4-66c5abc8e298" /> ----- task-5022404