Daily updates from Odoo
Wednesday, November 19, 2025
29 changes
3 changes
Enhancements to existing features
The Point of Sale sales report now includes a more detailed view of payments grouped by payment method. This helps teams understand how customers pay and makes sales analysis and reconciliation easier.
Original PR description
In this commit: ----------- - Enhances the PoS sales report by adding detailed breakdowns of payments grouped by payment method. task-5184319 Forward-Port-Of: odoo/odoo#234486
The mail plugin now includes a way to identify the Odoo version it is connected to. This lets Odoo warn users when the new add-in is not supported on their version, avoiding confusion and failed usage.
Original PR description
Purpose ======= The new addin has been refactored and doesn't work with older Odoo version, and so we add an endpoint to be able to show a message if we don't support that Odoo version. Task-4727609 Forward-Port-Of: odoo/odoo#236286 Forward-Port-Of: odoo/odoo#236047
IoT Box information is now loaded ahead of time, so IoT requests can continue working even when the connection is unstable or temporarily offline. This also reduces the number of database requests, which should improve overall performance for connected point of sale and self-order flows.
Original PR description
In order to allow iot requests to work offline, and also reduce the amount of orm requests sent to the db, we now preload IoT Box records in the `iot_http` service. Task: 5258886
4 changes
Enhancements to existing features
The Point of Sale sales report now includes a more detailed view of payments, grouped by payment method. This makes it easier for teams to understand how customers paid and to review sales performance more clearly.
Original PR description
In this commit: ----------- - Enhances the PoS sales report by adding detailed breakdowns of payments grouped by payment method. task-5184319 Forward-Port-Of: odoo/odoo#234486
The mail plugin now includes a way to identify the Odoo version it is connecting to. This lets Odoo display a clear message when the add-in is used with an older, unsupported version instead of failing without explanation.
Original PR description
Purpose ======= The new addin has been refactored and doesn't work with older Odoo version, and so we add an endpoint to be able to show a message if we don't support that Odoo version. Task-4727609 Forward-Port-Of: odoo/odoo#236286 Forward-Port-Of: odoo/odoo#236047
Invoice delivery to customers and government EDI systems is now deferred until after the payment transaction is fully committed. This reduces the risk of invoices being sent and then lost due to a rollback, helping keep Odoo records aligned with external government numbering and customer communications.
Original PR description
When the payment transactions trigger the creation of invoices and then the sending of those invoices by mail and through the EDI to the government, any concurrent update can make that entire process…
When the payment transactions trigger the creation of invoices and then the sending of those invoices by mail and through the EDI to the government, any concurrent update can make that entire process fail all at once. This mainly happens when the user himself is paying through the portal as this will create the invoice from the payment. When invoices are sent to the government however, we want to be sure that when sent, it gets updated in Odoo as well, so we are aware what is happening. The problem we got is that invoice 1 is sent to the government (l10n_in_edi) as number 01 and then that transaction is totally rolled back that the invoice is not even there anymore, it risks that the government's numbers and your numbers do not correspond anymore. So, we should avoid that that invoice can be sent when before there is a concurrent update (on payment transaction in this case) waiting for destroying it when committing. So, the simple idea would be to only do the invoice sending through a post commit. As we are locking the invoice itself for the sending to the government that should be enough to avoid the invoice sending for not being registered in Odoo. 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
Finnish tax reporting now includes triangular taxes, which helps generate the EC Sales List more accurately. This improves compliance and reduces manual adjustments for businesses operating across EU borders.
Original PR description
The aim of this commit is adding the triangular taxes into the tax report to use it in EC Sales List report. task-5126664 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229269
16 changes
Enhancements to existing features
Jordan payroll now uses overtime amounts already calculated from work entries instead of relying on manual payslip inputs. This reduces manual payroll setup, improves consistency, and keeps overtime rules aligned with attendance records.
Original PR description
Before: - Overtime salary rules calculated amounts manually from payslip inputs After: - Link Jordan overtime rules to their respective work entry types in the hr_work_entry_attendance bridge module - Update overtime salary rules to read values directly from worked_days entries - Simplify salary rule logic: use pre-calculated amounts from work entries - Remove obsolete manual payslip input types Task-5103913
VoIP activity cards have been refined to show clearer, more useful information across calls, CRM leads, recruitment applicants, and SMS actions. This helps users understand and act on communication activities faster from the softphone interface.
Original PR description
Task-5207647
Bank reconciliation users can now choose to show transaction details as an optional column in the transaction list. The details are displayed in an easier-to-read format with a hover preview, helping users review bank entries more quickly without opening extra records.
Original PR description
This commit enhances the bank reconciliation widget by adding the transaction_details field as an optional column in the transaction list view. Changes: - Added transaction_details field to the optional hide/show configuration in bank statement list view - Implemented custom formatted_transaction_details widget to display JSON data in human-readable format with hover preview task-5121929
Payroll validation has been optimized to use far fewer database queries, reducing processing overhead when confirming payslips. This should make payroll runs faster and more efficient, especially for larger batches.
Original PR description
Before this changes the number of query needed to do the payslip validation was 274 and with this changes it's only 76 :sunglasses:
Saudi payroll now calculates end-of-service benefits more closely in line with legal wording, including an option to use actual calendar days or an annual approximation. Retirement is treated like contract completion, and payslip provisions better reflect each employee’s employment duration, improving accuracy for HR and payroll teams.
Original PR description
- added field `l10n_sa_use_actual_number_of_days` to mark if we use actual number of days in the year or an approximation. - adjusted the calculation of end of service benefit to be check if we want to use actual number of days or not and changed the calculations to use total years instead of total days to be compatible with how it's stated by the law - changed the case of retirement to be handled the same as the case of contract ending and not resignation - changed the way eos provision is calculated on the payslip to account for the duration of employment of the employee - added test for eos benefit calculation which checks using actual number of days and approximation for the cases of resignation and end of contract - changed the string and tooltip of `l10n_sa_number_of_days` to be more descriptive of what it does task-id: 4766060
Employees can now view available VoIP providers and select the one they need without administrator help. Access remains limited to the necessary provider information, keeping sensitive configuration details protected.
Original PR description
We now allow base.group_user to have read access to voip.provider so that user can change provider by themselves. Note that the visible fields to base.group_user are still limited. Task-5262635 Forward-Port-Of: odoo/enterprise#99530
Belgian SODA payroll imports can now handle multiple files for the same accounting month, such as 13th-month payroll cases, by keeping entries uniquely identifiable. Entries are also dated at the end of the accounting period, or just after a locked period when needed, improving accounting accuracy and compliance with period controls.
Original PR description
in some cases it is needed to upload more than one soda files for the same month (i.e. 13th months), in this case we add _xx after the sequence number in the ref of the entry also we changed the date to the last day of the accounting period instead of the gendate and in the case the accounting period is locked it will be the first day after the locked period task-5270270
The Odoo Compliance Assistant now follows updated guidance and is restricted to using only its approved information sources. A sample question was also changed to use New Jersey instead of Japan so demo results are more relevant and useful.
Original PR description
Updated the system prompt for the `Odoo Compliance Assistant` as per the new proposition. Also previously, we were using the prompt `Do I have any customer in Japan?` which returned `I did not find any`. It has been changed to `Do I have any customer in New Jersey?` to get valid results. Task-5153818
UAE payroll benefits are now handled through salary rules instead of separate benefit setup. This makes payroll calculations more consistent and easier to maintain, with updated demo data and tests to reflect the new approach.
Original PR description
In this commit, we converted the payroll benefits into salary rules and adjusted the demo data. task-5122366
When reconnecting or retrying a bank account synchronization, Odoo now reuses the existing journal instead of creating a duplicate. This keeps accounting records cleaner and avoids confusion caused by expired or failed connection links.
Original PR description
[IMP] account_online_synchronization: avoid duplicate journal This commit prevents user to create duplicate journals when synchronizing a bank account. When a user tries to add a new bank account, a journal is created. But if the connection link expires or is in error, we don't want to create a new journal, we just want to replace the online_account (and so the online_link) in the existing journal. task-5042462
Odoo spreadsheets in the trash now behave like CSV and Excel files: users must restore them before opening. This creates a more consistent document experience and helps avoid accidental use of trashed files.
Original PR description
Current behavior before PR: - Trashed Odoo spreadsheets could be opened directly, unlike CSV/Excel files that required restoring first. Desired behavior after PR is merged: - Odoo spreadsheets now follow the same behavior as CSV/Excel files. Trashed files must be restored before they can be opened. Task: 5030282
Point of Sale settings can now be changed even when a session is already open. This reduces operational interruptions by letting businesses adjust enterprise and UrbanPiper-related configuration without waiting for sessions to close.
Original PR description
### in this commit: - Removed restriction preventing config changes during an open session. task-5187838
IoT devices can now be recognized by a stable backup identifier, such as a printer's MAC address, when their main identifier changes. This prevents duplicate device records and keeps existing POS configurations working without manual updates.
Original PR description
Community PR: https://github.com/odoo/odoo/pull/235455 Before this commit, if a device such as a printer were to have its identifier change (usually because its IP changes) then a new device entry would be created, leaving the old device entry non-functional but still linked to e.g. a POS config. After this commit, a new `alternate_identifier` field is added, which a driver can provide for a device as a fallback. In the printer case, it sends the MAC address of the printer here. If we receive a device with an `alternate_identifier` that matches an existing device, we can update that existing device instead of creating a new entry. This way, the configuration of the POS using the device does not need to change. We also adapt the existing blackbox logic to handle this process to use this new `alternate_identifier` field. task-5059488
Improves the warnings and errors shown when generating Saudi WPS reports for validated payslips, making issues easier for payroll users to understand and resolve. It also renames the bank account field from Establishment ID to Establishment Code to better match its business meaning.
Original PR description
This commit improves the warning and error messages shown to the user when generating WPS reports for validated payslips in Saudi Arabia. task-5220230
New menus make it easier for accounting users to review sales and purchase order accruals, including viewing balances as of a chosen past date. The reports now open the related order directly from each line, helping teams investigate prepaid expenses, bills to receive, deferred revenue, and invoices to be issued more efficiently.
Original PR description
*: purchase_accountant,sale_account_accountant This commit adds new menu for SO and PO accruals. A custom list view (`js_class`) was created for those reports: `accrual_list_view`. AccrualListView…
*: purchase_accountant,sale_account_accountant This commit adds new menu for SO and PO accruals. A custom list view (`js_class`) was created for those reports: `accrual_list_view`. AccrualListView =============== This view is used both by `sale.order.line` and `purchase.order.line`. Its functionnalities are: - The user can choose a date to see records' values in the past; - If a line is clicked, instead of opening the line's form view, it will open its order form view instead. Technical notes about this view: - The chosen date is passed to the context but there is issue when the view is grouped (and it is by default): while the grouped lines uses the right context with the selected date, the contained lines sometime use an old version of this context with a previously selected date which means the grouped data are not the same than the single lines data. To fix that, we force the context on each group. - The "at_date" fields are non-stored computed fields. By default, there is no sum value for those fields. Server side, we override the `_read_group` method to "manually" compute those fields sum. To be able to do that, we tweak the aggregate config in this view. Boolean fields ============== Four boolean fields are created: - `prepaid_expense` and `bill_to_receive` for `purchase.order.line`; - `deferred_revenue` and `invoice_to_be_issued` for `sale.order.line`. Those fields are usefull to fetch right order lines for the right accrual and are always a balance between delivered/received quantity and invoiced quantity. [task-5075455](https://www.odoo.com/odoo/966/tasks/5075455) Community PR: odoo/odoo#231510 Forward-Port-Of: odoo/enterprise#97151
This update makes it easier for Odoo features to remember user preferences in the browser and keep them consistent across tabs. It also adds a safer way to preserve those preferences when storage formats change during upgrades, reducing the risk that users lose settings after updates.
Original PR description
*: frontdesk Before this commit, having a record field saved in local storage and synced among browser tabs was cumbersome. Roughly this was defined as follow: ```js class Settings extends Record {…
*: frontdesk
Before this commit, having a record field saved in local storage and synced among browser tabs was cumbersome. Roughly this was defined as follow:
```js
class Settings extends Record {
static new(...args) {
const settings = super.new(...args);
settings.onStorage = settings.onStorage.bind(settings);
browser.addEventListener("storage", onStorage);
return settings;
}
delete() {
super.delete();
browser.removeEventListener("storage", onStorage);
}
onStorage(ev) {
if (ev.key === USE_BLUR_KEY) {
this.useBlur = ev.newValue === "true";
}
}
useBlur = fields.Attr(false, {
compute: () => browser.localStorage.getItem(USE_BLUR_KEY) === "true",
onUpdate: () =>
this.useBlur
? browser.localStorage.seItem(USE_BLUR_KEY, "true")
: browser.localStorage.removeItem(USE_BLUR_KEY),
});
}
```
This commit simplifies drastically how to define fields that are saved and synced to local storage:
```js
class Settings extends Record {
useBlur = fields.Attr(false, { localStorage: true });
}
```
The write in local storage is made only when the field value differs from default:
- if value is same as default value, then remove from local storage
- if value is different than default value, write current value in local storage
This commit also introduces local storage upgrade scripts. Since local storage keys and values are expected to change but we want to keep user preferences, these scripts help upgrade old local storage values to newer ones.
To define an upgrade script:
```js
import { addUpgrade } from "./upgrade_helpers";
addUpgrade({
version: NEW_VERSION,
key: OLD_KEY,
upgrade: ({ value: oldValue }) => ({
key: NEW_KEY,
value: NEW_VALUE,
}),
});
```
This upgrades `OLD_KEY` local storage entry to `NEW_KEY` local storage entry with `NEW_VALUE`.
Upgrades are executed from oldest to newest version. Range is based on version in local storage at bottom and curent odoo version at the top.
Part of Task-50030123 changes
Enhancements to existing features
The mail plugin can now detect which Odoo version is in use. This lets it display a clear message when the version is not supported, helping users understand why the add-in may not work.
Original PR description
Purpose ======= The new addin has been refactored and doesn't work with older Odoo version, and so we add an endpoint to be able to show a message if we don't support that Odoo version. Task-4727609 Forward-Port-Of: odoo/odoo#236286 Forward-Port-Of: odoo/odoo#236047
The Point of Sale sales report now includes a clearer breakdown of payments by method, making it easier to see how customers paid. This helps businesses review sales patterns and reconcile reports more quickly.
Original PR description
In this commit: ----------- - Enhances the PoS sales report by adding detailed breakdowns of payments grouped by payment method. task-5184319 Forward-Port-Of: odoo/odoo#234486
When a company installs a chart template from the SEPA region, the related ISO 20022 payment support is now installed automatically. This makes setup smoother and helps ensure the right payment features are available from the start.
Original PR description
This commit will allow to install account_iso20022 when installing a chart template from the SEPA zone. task-5163045
2 changes
Enhancements to existing features
This update makes it easier to adapt how Odoo identifies the warehouse name used for SendCloud sender details. It helps businesses match the correct sender address even when their naming setup does not follow a simple one-to-one rule.
Original PR description
As choosing the proper sender address in SendCloud can be more complex than matching a name to a fixed name in Odoo we open up the freedom to inherit the retrieval of the warehouse name. Info: @wt-io-it Forward-Port-Of: odoo/enterprise#97595
This update clears existing UrbanPiper menu links and rebuilds them with a fresh synchronization. It helps keep the menu data aligned between Odoo and UrbanPiper, reducing mismatches after changes.
Original PR description
Following this commit: - Flush out all existing UrbanPiper product menu linkages and performs a fresh menu sync. task-5231247
1 change
Enhancements to existing features
This update makes delivery lookup by lot much faster by changing how the system gathers the needed information. It reduces delays for users working with many lots, especially in large stock operations, so screens and processes complete more quickly.
Original PR description
### Description: This refactoring replaces the recursive calculation in `_find_delivery_ids_by_lot` with an iterative process. This change significantly reduces the amount of database queries by prefetching and batching all required lines in a single pass, and it also eliminates the overhead caused by repeated recursive function calls. ### Benchmark: | Total Lots | Before | After | |------------|--------|--------| | 69 | 1 sec | 106 ms | | 1152 | 1 min | 5 sec | ### Reference: opw-5096599