Daily updates from Odoo
Tuesday, October 28, 2025
33 changes
3 changes
Enhancements to existing features
The Spanish localization now includes more detailed IGIC tax data for the Canary Islands, separating purchase taxes for goods and services and adding DUA-related taxes. This helps businesses apply the right tax mappings depending on the type of purchase and aligns Canary Islands handling more closely with mainland Spanish tax workflows.
Original PR description
We have splitted purchase taxes in goods and services because there are different mappings according to the scope. It has a similar functionality with spanish mainland taxes @jco-odoo There are doubts with the fiscal position `fp_nacional_canary_ns` as it is applied automatically to spanish non canarian partners but it should be similar to non-EU partners IMO. However, I think that the opinion fo some canary people would be nice to clarify it @Christian-RB --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230964 Forward-Port-Of: odoo/odoo#228667
This update simplifies how accounting tax data is grouped behind the scenes. It reduces manual handling in the tax calculation flow, helping make the system easier to maintain with no expected day-to-day workflow impact for users.
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#232290 Forward-Port-Of: odoo/odoo#231947
Demo data for WhatsApp accounts has been added back. This helps teams test, demonstrate, and explore WhatsApp-related features more easily without setting up sample accounts manually.
Original PR description
Purpose of this commit, Adding back the demo data for whatsapp accounts. revert: https://github.com/odoo/enterprise/pull/97138 task-5172791
2 changes
Enhancements to existing features
VoIP searches now better match phone numbers even when they include spaces, hyphens, parentheses, or other formatting characters. This makes it easier for users to find contacts and call history entries using only the digits they remember.
Original PR description
Introduces the `matchPhoneNumber` function, a new utility designed to match search terms against fully formatted phone numbers. The function converts a digit string like "123" into a flexible regex (e.g., /1\D*2\D*3/i) that matches digits regardless of any non-digit characters (spaces, hyphens, parentheses) between them. **Example:** * **SearchTerms**: "123" * **Target**: "+1 (2)-345" * **Match**: "1 (2)-3" Task-5160296
This update makes the bank reconciliation interface more consistent across versions and improves how key action buttons are displayed. It also prevents users from choosing accounts that would create ineffective reconciliation rules and removes duplicate partner information in certain transaction views.
Original PR description
[IMP] account_accountant: css backport To have a consistent css across all version of the new bank rec widget, we decided to backport few changes. backport of:…
[IMP] account_accountant: css backport To have a consistent css across all version of the new bank rec widget, we decided to backport few changes. backport of: https://github.com/odoo/enterprise/commit/524a7a46a0c2888b591de7ad1a0a6d744e345f5a https://github.com/odoo/enterprise/commit/2a83c85cb2c9a7a5da3d4a8483120eeda6b2e6cb https://github.com/odoo/enterprise/commit/e3cb3ab3ec8c64297d8e97d941e0d2eea3e64667 https://github.com/odoo/enterprise/commit/fdbb93abbf831cfa2fdc75e79aa76c094d6e522a https://github.com/odoo/enterprise/commit/f9725d7b01cbd1235f022821a6861adb2955e49e [FIX] account_accountant: restrict some account in the set_account Before this commit, we could select the liquidity account or bank suspense account which could create a reco model for it that would do nothing. [FIX] account_accountant: partner_name Before this commit, when a transaction had no partner_name and some lines with the same partner. When unfolded, we had the info of the partner on the statement line and on the line itself which was a duplicate of information. This commit will change when the line is unfolded so that the partner is visible on the statement line only when there is a partner_name [FIX] account_accountant: payable and receivable button Before this commit, the payable and receivable buttons where on the top line only when the reconcile button was not there anymore. Now We decided to always have them present in secondary next to the reconcile button. no task-id
10 changes
Enhancements to existing features
Users can now start the shortcut timer from the My Timesheet grid when it is grouped by task, parent task, or helpdesk ticket, in addition to project. This makes time tracking faster and more flexible for teams who organize work around tasks or support tickets.
Original PR description
_*= helpdesk_timesheet, timesheet_grid **Current behavior:** In the My Timesheet grid view, the shortcut timer can only be started when grouped by project. **New behavior:** The shortcut timer can now also be started when the grid view is grouped by task, parent task, or helpdesk ticket. task-3429443
The Documents search view has been simplified by removing extra filters that were not needed. This makes it easier for users to find the relevant filtering options when working with documents.
Original PR description
This commit removes the extra 'Documents' and 'Hide shortcut' filters from the documents search view to make the filter list simpler and keep only the relevant options. task-5170118
Chat windows now use the same underlying conversation model as the main Discuss app. This should make messaging behavior more consistent across AI chat, live chat, website live chat, and WhatsApp integrations, reducing differences users may notice between channels.
Original PR description
PR community: https://github.com/odoo/odoo/pull/232493
Knowledge article trash notification emails now use a clearer standard layout with a direct button to open the article. Recipients are also told that trashed articles are permanently deleted after 30 days, while the person who moved the article to trash no longer receives an unnecessary notification.
Original PR description
This PR refines the existing notification email for trashed articles with the following changes: 1. Use the standard notification email layout (`mail_notification_layout`) with an access button, allowing the recipient to quickly open the trashed article. 2. Do not send a notification to the user who moved the article to the trash. 3. Include a short note in the email informing the recipient that the article will be permanently deleted after 30 days, and that they must take action if they wish to keep it. Additionally, this PR replaces all occurrence of "send to trash" with "move to trash" to match common UI terminology and improve clarity. Task-5095861
Property selection values now return their internal name rather than their display label by default. This improves consistency for payroll-related property data and reduces ambiguity when values are used across business processes or integrations.
Original PR description
Purpose ======= Followup of odoo/odoo/pull/232800 , when getting a property selection, we want to return the name by default instead of the label.
Belgian payroll now includes additional work entry types that were previously missing. This helps payroll teams classify employee time more accurately and supports more complete payroll processing.
Payroll users now receive a warning when closing a salary adjustment while related payslips are not yet finalized. This helps prevent confusion because the adjustment can still affect unfinished payslips, allowing users to review and act before payroll is completed.
Original PR description
When a salary adjustment is closed with related payslips still not done, salary adjustments are still applied. This commit adds a warning so that the user knows if this adjustment is closed to act accordingly task: 5135771
The customer ticket page now avoids repeating the same sales timesheet feature check several times. This reduces unnecessary processing and should make the page slightly more efficient without changing what users see.
Original PR description
helpdesk, helpdesk_sale_timesheet: reduce multiple calls ---------------------- In the `/my/tickets` route, the `_check_sale_timesheet_feature_enabled` method was called three times (for search input, search groupby, and value preparation). This commit passes the result of `_check_sale_timesheet_feature_enabled` in an argument, reducing the number of calls. the argument is now used in both search input and search groupby, improving performance. helpdesk: removed redundant method -------------- Removed the `_prepare_portal_layout_values` method as it only called the super method without any changes, making it unnecessary. task-4513671
Turkey payroll benefits now use the newer salary rule-based flexible benefits setup instead of separate payslip input records. This keeps the localization aligned with the current payroll flow and makes benefit inputs appear in the expected payroll input section.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for tr localization - adapted the fields in `hr.version` to become salary rules with `condition_select` as `property_input` which makes it appear in the input section - removed the records in `hr.payslip.input.type` and converted them into corresponding salary rules - removed the inherited view of `hr.version` - changed the tests in `test_salary_rules` to use salary rules instead of hardcoded fields task-id: 5122400
Demo data for WhatsApp accounts has been added back. This helps teams and evaluators see example WhatsApp account setup when trying or demonstrating the app.
Original PR description
Purpose of this commit, Adding back the demo data for whatsapp accounts. revert: https://github.com/odoo/enterprise/pull/97138 task-5172791 Forward-Port-Of: odoo/enterprise#98135
12 changes
Enhancements to existing features
This update simplifies how website builder options are defined and shared across related tools, making it easier for teams to maintain and extend builder features. It affects website features such as live chat, appointments, and rental search, with no expected direct disruption for end users.
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');
}
}
```
Forward-Port-Of: odoo/enterprise#94102This update adds end-of-day balance reporting and refund support for Six payment terminals in Point of Sale. It also improves transaction speed, receipt handling, and payment details so store teams get a smoother checkout and closing process.
Original PR description
Based on the feedback received from our partners we are missing some features in our Six terminal integration. This PR adds them 1. Send balance command to print end-of-day report 2. Adapt the code to reduce the sleep delay after each transaction 3. Refunds/payment reversals for Six + it also adds some minor code improvements like a) Card brand is now saved in pos payments instead of the card number b) Card number is still being sent to PoS and while not stored in v17 will be stored from v18 c) The code of ctypes_terminal_driver and Six Driver was improved to reuse the buffer size and improve the buffer usage d) Fixes the receipt size for the Six terminals e) updates the Six C libraries used to the latest version to get all the newest fixes Related C PR: https://github.com/odoo/worldline-lib/pull/9 Forward-Port-Of: odoo/enterprise#98132 Forward-Port-Of: odoo/enterprise#96748
This update simplifies how website builder options are defined and managed behind the scenes. It gives developers a more consistent way to build and maintain editing tools, helping future website editing features be delivered more reliably.
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 Forward-Port-Of: odoo/odoo#220746
The Colombian reports module test coverage was updated to match new account grouping rules. This is an internal quality improvement that helps ensure trial balance reports continue to be validated correctly without changing day-to-day user workflows.
Original PR description
task-5165175
The Colombian localization now includes predefined account groups to make accounting reports easier to read and better organized. This improves report presentation for new configurations without changing existing customer-defined account groups.
Original PR description
For nicer reports. task-5165175 PR note: no explicit upgrade script, because it likely will cause a mess if users already have `account.group`s defined.
The HTML editor now handles format removal more consistently for headings and other block text. This helps users clean up styled text while preserving the intended base typography, reducing confusing formatting behavior when editing website or document content.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: Styles applied via typography classes such as `display-1-fs`, `display-2-fs`, etc. could not be removed from block elements. eg: `<h1 class="display-1-fs">t[es]t</h1>`. Desired behavior after PR is merged: - HTML tags (`<p>`, `<h1>`, etc.) represent the base typography. - Typography classes (display-*) should be treated like equivalent HTML tags, not as removable styles. - Only display classes (*-fs) are considered for format removal. - When removing format, the editor now restores the font style of the underlying HTML tag. eg: `<h1 class="display-1-fs">t<span class="h1">[es]</span>t</h1>` task-4981275 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The product information popup in Point of Sale now appears after a shorter long press on a product card. This makes the interaction feel quicker and closer to common mobile behavior, improving usability for sales staff on touch devices.
Original PR description
Before this PR, in order to reach the product information on the frontend, the user had to longpress the product card for 2 secondes. This PR aims to reduce the time necessary to display the product info popup, getting closer to what is done by most mobile OS can provide. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now handles inline code formatting more reliably, including wrapping selected text when the backtick key is pressed and supporting empty inline code blocks. This prevents cursor jumps and makes navigation around code-formatted text smoother for users editing content.
Original PR description
**Purpose of this PR:** This PR includes multiple fixes and improvements related to typing and navigating around inline code elements. **Current behavior before this PR:** - Because of the change…
**Purpose of this PR:**
This PR includes multiple fixes and improvements related to typing and navigating around inline code elements.
**Current behavior before this PR:**
- Because of the change made in commit [1], the selection was not set until two backticks were detected. As a result, inserting a single backtick caused the cursor position to change unexpectedly.
- Typing two backticks (``) without any text between them did not properly create an inline code element.
Desired behavior after this PR is merged:
- The text node is merged with its siblings only when two backtick are detected, so no DOM changes occur with a single backtick, and the selection no longer needs to be updated in that case.
- Now, a zws is added as a sibling of the inline code element to ensure proper navigation outside the code element.
- Typing two backticks with nothing in between now correctly creates an empty inline code element.
- Wrap the selected text in a inline code element when the '`' key is pressed.
- Replaced ZWS with feffs around and inside inline code elements.
This improves:
- feffs are now added on editor initialization (like links) and removed during cleanForSave.
- Arrow key navigation no longer skips characters at code boundaries.
- Empty inline code elements can properly hold the cursor(via mouse or arrow keys).
task: 4585706
[1]: https://github.com/odoo/odoo/commit/f792acf0bc66fb77e25bf8a0753c6a2f4284f0e8This update makes the accounting tax calculation helper automatically extract records from the grouping key. It reduces the chance of manual handling errors and makes related tax grouping behavior easier to maintain.
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#233228 Forward-Port-Of: odoo/odoo#231947
Turkish Nilvera e-invoices now accept valid invoice numbering formats beyond a single separator style. The system also checks invoice names before sending, reducing failed submissions caused by XML generation errors.
Original PR description
Before this commit:
- When sending an e-invoice through Nilvera, the invoice name used a hardcoded `.split('/')`, assuming `/` the only valid separator for fetching prefix, year and sequence.
- Invoice name was not validated, which could raise errors during XML generation
After this commit:
- The logic now supports various valid invoice name formats rather than relying only on `/` as a separator.
- Invoice name is validated before sending the e-invoice through Nilvera to ensure they comply with the GIB format, to prevent XML generation errors.
task-5117359The HR contract timeline now shows a contract line beneath the version timeline, making it easier to understand how contract details relate to each version. This improves readability for HR users reviewing employee contract history.
Demo data for WhatsApp accounts has been added back. This helps teams evaluate and demonstrate WhatsApp-related features more easily in demo or test environments.
Original PR description
Purpose of this commit, Adding back the demo data for whatsapp accounts. revert: https://github.com/odoo/enterprise/pull/97138 task-5172791 Forward-Port-Of: odoo/enterprise#98135
3 changes
Enhancements to existing features
The Italian localization no longer allows obsolete Natura tax exemption reasons that are rejected by the Italian Tax Agency. This helps businesses issue electronic invoices with valid tax codes and reduces the risk of submission errors.
Original PR description
There are old Natura (l10n_it_tax_exemption_reason) that are deprecated in favour of more detailed ones. We already have the detailed ones, but we allow the old values, but the Tax Agency considers them invalid already. ref: https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiBeniServizi/DatiRiepilogo/Natura Forward-Port-Of: odoo/odoo#226939
The accounting accrual orders wizard now has a cleaner structure that makes it easier to adapt how reversal entries are created. This supports businesses that need accruals spread across multiple periods, helping future customizations better match invoices over time.
Original PR description
Add a dedicated hook method to facilitate customization of reversal entry generation in the accrued orders wizard. Reason: The current implementation creates a single reversal entry that is applied in the next period. For scenarios requiring accrual allocation across multiple periods, modules need the ability to generate multiple reversal entries (one per period) to properly net-off against actual invoices --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233142
Inventory users can now reset cached links between printers and reports directly from the Inventory app. This makes it easier to resolve printer-report connection issues without navigating through more technical IoT settings.
Original PR description
In order to simplify resetting the link between printers and reports in cache, we added the "Reset Linked Printers" button to the Inventory app. Forward-Port-Of: odoo/enterprise#98028
3 changes
Enhancements to existing features
The Italian localization no longer allows outdated tax exemption reason codes that the Italian Tax Agency now rejects. This helps businesses avoid invalid electronic invoices by using the newer, more detailed codes already available in Odoo.
Original PR description
There are old Natura (l10n_it_tax_exemption_reason) that are deprecated in favour of more detailed ones. We already have the detailed ones, but we allow the old values, but the Tax Agency considers them invalid already. ref: https://fex-app.com/FatturaElettronica/FatturaElettronicaBody/DatiBeniServizi/DatiRiepilogo/Natura
Stock movement validation is faster when putaway rules are involved because the system now reuses the same location calculation across related move lines. This reduces repeated work and can significantly cut processing time for large warehouse operations.
Original PR description
Previously when validating a movement with a location that is used in a rule, move_dest_ids was set which led to it going to check the putaway strategy. The bottleneck was the computation of the computed field child_internal_location_ids which is the same across all smls. This PR utilizes the fact that the smls in the same stock_move would have the same destination location and by proxy the same child_internal_location_ids Speed up: 1000 stock move lines: Before: 2 mins After: 1 mins --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo VoIP now tries to close unused phone registrations when a browser tab is closed and shortens how long abandoned registrations remain active. This helps prevent users from hitting provider limits when they have multiple Odoo tabs open or close tabs unexpectedly.
Original PR description
Some providers like OnSIP allow for a limited number of registrations per user. This is a problem in Odoo because each tab opened creates a new registration for one hour. This commit mitigates the problems in two ways: - Sends an "unregister" request onbeforeunload to try to invalidate the registration upon closing the tab. - Reduces the TTL of registrations so that they get invalidated quicker in case the unregistration failed.