Daily updates from Odoo
Saturday, August 1, 2026
19 changes
2 changes
Resolved issues and error corrections
German DATEV general ledger exports now show the exchange rate in the correct foreign-to-base currency direction and round it to six decimal places. This improves compliance with DATEV format expectations and avoids confusing, overly long values in exported CSV files.
Original PR description
### Steps to Reproduce: 1. Activate l10n_de 2. Navigate to the General Ledger and export the "Datev DATA" 3. Column D, "Kurs," is incorrect ### Description of the issue/feature this PR addresses:…
### Steps to Reproduce: 1. Activate l10n_de 2. Navigate to the General Ledger and export the "Datev DATA" 3. Column D, "Kurs," is incorrect ### Description of the issue/feature this PR addresses: **Issue:** DATEV documentation states that the column for "Kurs" should be the ratio of WKZ-Umsatz : WKZ-Basisumsatz, which is Foreign : Base Currency. Additionally, all sample files show this column's values being rounded to 6 decimal places. Currently, when Odoo exports the general ledger as DATEV data, there is no rounding of decimal places and the formula does base / foreign amount, `line_amount / line_amount_currency`. **Solution:** In the `datev_export_csv.py` file, the relevant method is called `_l10n_de_datev_get_csv()`. In there, we can fix the line to round the value of `line_amount_currency / line_amount` to 6 decimal places. ### Current behavior before PR: Exporting the general ledger as DATEV data currently gives the reverse foreign currency rate and fails to round to 6 decimal places, which causes some values to be extremely long. ### Desired behavior after PR: The csv files should output the correct rate and be rounded appropriately. **Releted Documentation:** https://developer.datev.de/en/file-format/details/datev-format/format-description/booking-batch opw-6366276s Forward-Port-Of: odoo/enterprise#125097
Fixed an issue where the On Sale Price for product variants using cost-based pricelists showed an outdated value after changing the cost. This ensures sales pricing reflects the latest product cost immediately, reducing pricing errors in point-of-sale workflows.
Original PR description
When we create a product variant and have a pricelist which is based on the cost price, and change the cost price, the on_sale_price doesn't update correctly. It gets delayed by one update because the product._origin isn't getting updated with the new onchanged value. Steps to Reproduce: 1.Create a pricelist and add a line with "formula" price type, and based on "cost", 2.Create a product variant, and add the pricelist just created. 3.Change the "Cost". The "On Sale Price" updates based on the value before. To fix the issue, we need to update the product._origin for standard_price just like the lst_price before computing the on_sale_price opw-5947995 Forward-Port-Of: odoo/enterprise#122391 Forward-Port-Of: odoo/enterprise#119470
2 changes
Resolved issues and error corrections
The Timesheets Assistant now avoids duplicate loading, opens in a clearer chronological view, and keeps dismissed suggestions from reappearing. It also improves selection display and better recognizes Discord browser activity, making time entry suggestions more reliable and easier to use.
Original PR description
## [FIX] timesheet_grid: remove duplicate rpc call Before this commit, the `loadTimesheets` method is called 2 times in a row, that method does a rpc call to load the existing timesheets and so, it…
## [FIX] timesheet_grid: remove duplicate rpc call Before this commit, the `loadTimesheets` method is called 2 times in a row, that method does a rpc call to load the existing timesheets and so, it is not needed to call it 2 times since the rpc will return the exact same result. This commit removes the rpc call when we compute the suggestions to only load the timesheets when we load all the data. ## [FIX] timesheet_grid: show chronological view instead of project view Before this commit, the `by project` view were loaded first in the timesheet assistant action, to group the suggestion by project, the problem is at the beginning the view will not really show a perfect matching and so the user could think the feature does not work and he will not understand how to correctly match the suggestions shown in the view. This commit changes the view loaded by default in Timesheets Assistant to first show the chronological view, that view is more logical for the current user to rethink what he did in the past to correctly map the events to a project and a task when he generates his timesheets thanks to those events. The by project view is still useful afterwards when the system has learned the choices made by the current user. ## [FIX] timesheet_grid: ensure events are consumed forever Before this commit, the suggestions removed by the current user comes back when he changes the date and come back to the day he removes the suggestions. The reason is because a shallow copy of events consumed is made and that copy alters the duration of the initial object. This commit avoids copying the consumed events object to make sure the initial object is not altered when processing the events to remove them if they are removed before by the user. ### Steps to reproduce the issue: 1. install timesheet_grid and Activity watch, makes sure Activity watch collects some activities on your computer. 2. Go to Assistant menu in timesheets app. 3. Remove some suggestions displayed in the right panel. 4. Go to next date. 5. Come back to previous date. ### Expected Behavior: The suggestions removed should not appear again. ### Actual Behavior: The suggestions removed come back in the view. ## [FIX] timesheet_grid: fix flicker when suggestion selected Before this commit, when the user selects a suggestion in timesheet assistant, there is a small flicker appears because the height of the row grows because of the border added to highlight the suggestion selected. This commit reviews a bit the style to make sure the border bottom in the previous element is removed if the element is not selected or if the 2 consecutives suggestions are selected. ## [FIX] timesheet_grid: fix discord rules to handle discord in web Before this commit, when the user uses discord in its browser instead of the app on his computer, the discord rules don't catch the activity watch events because the tab title is different than the windows name in the app. This commit adapts the regex of Discord rules to handle the both use cases. task-[6385639](https://www.odoo.com/odoo/project.task/6385639) Forward-Port-Of: odoo/enterprise#124855
This fixes an issue where deleting a product in the self-order kiosk could still be treated as an active order line when the Belgian blackbox module was installed. Businesses using Belgian POS compliance features get more reliable kiosk orders and fewer checkout errors.
Original PR description
Fix issue when deleting a product in the Kiosk with the blackbox module installed task-id: 6438820 FW of this PR: https://github.com/odoo/enterprise/pull/126378
1 change
Enhancements to existing features
ISO20022 payment XML files now include the building number field in address details. This prepares SEPA credit transfer and direct debit exports for upcoming banking requirements that become mandatory in November 2026.
Original PR description
This commit adds the <BldgNb> node in the iso20022 XML files, as it will be mandatory starting November 2026. Linked: https://github.com/odoo/odoo/pull/271855 task-6317758 Forward-Port-Of: odoo/enterprise#126298 Forward-Port-Of: odoo/enterprise#121674
8 changes
Enhancements to existing features
The Documents button on a company or contact now shows documents linked to the full partner hierarchy, including child contacts such as branches or employees. This gives users a more complete view and a more accurate document count from the partner record.
Original PR description
Previously, the Documents smart button on a partner record only displayed documents directly linked to that specific partner. For a parent company, this meant documents associated with its child contacts (branches, employees, etc.) were not visible, and the 'document_count' was inaccurate. This commit implements hierarchy-aware behavior: - The smart button now displays all documents related to the partner hierarchy (parent and children). - The 'document_count' is updated to reflect the total number of documents across the entire hierarchy. Task-6343919
Bank reconciliation now allows a small 3% difference when invoice and bank transaction currencies differ. This helps account for exchange rate fluctuations and reduces unnecessary manual adjustments during reconciliation.
Original PR description
When doing a reconciliation while having a different currency between the invoice and the bank transaction allow a 3% tolerance to compensate the currency exchange rate. task-6143815
This update aligns Field Service sales flows for stock and timesheet products with recent platform changes. It helps keep product catalog, stock tracking, and timesheet-related sales behavior consistent and reliable for users after the underlying community update.
Original PR description
*= stock, timesheet Community PR: - https://github.com/odoo/odoo/pull/257853 task-5942647
Sales teams can now follow up with shoppers who leave items in their cart using WhatsApp, in addition to email. A new setting lets businesses enable this channel and choose the message template, helping improve cart recovery through a more immediate communication option.
Original PR description
This PR allows users to receive a follow-up for their cart via WhatsApp. Previously, only an email follow-up was possible. A new setting parameter allows enabling WhatsApp in addition to emails. Community PR: https://github.com/odoo/odoo/pull/251790 Upgrade PR: https://github.com/odoo/upgrade/pull/9607 tasks-5404823
The rental dashboard has been refined to focus on the most useful quotation and rental status categories, including Today, Pickups, Returns, Late, To Confirm, and To Invoice. Users can now select several dashboard items at once, even when a category has no current records, making it easier to combine filters and review rental work more efficiently.
Original PR description
This change improves the rental dashboard by focusing on quotation statuses. The dashboard now includes the following items: Today, Pickups, Returns, Late, To Confirm, and To Invoice. Additionally, users can now select multiple dashboard items to combine their filters, including items with a count of 0. task-6354117
Belgian payroll bicycle reimbursement amounts are updated for the rates effective October 1, 2026. This ensures payroll calculations use the new €0.32 per kilometer rate and €12.80 daily tax-exempt limit.
Original PR description
This PR updates the Belgian bicycle reimbursement rates to reflect the amounts applicable from October 1, 2026. ### Changes - Increase the bicycle reimbursement rate from the previous amount to €0.32/km. - Increase the maximum daily tax-exempt reimbursement to €12.80/day. These values are aligned with the latest Belgian regulations and are required for payroll calculations from October 1, 2026. Task-6385742 Forward-Port-Of: odoo/enterprise#126116 Forward-Port-Of: odoo/enterprise#124481
Resolved issues and error corrections
The German DATEV general ledger export now calculates foreign currency exchange rates in the direction expected by DATEV and rounds them to six decimal places. This helps exported accounting files match DATEV requirements and avoids overly long or incorrect rate values.
Original PR description
### Steps to Reproduce: 1. Activate l10n_de 2. Navigate to the General Ledger and export the "Datev DATA" 3. Column D, "Kurs," is incorrect ### Description of the issue/feature this PR addresses:…
### Steps to Reproduce: 1. Activate l10n_de 2. Navigate to the General Ledger and export the "Datev DATA" 3. Column D, "Kurs," is incorrect ### Description of the issue/feature this PR addresses: **Issue:** DATEV documentation states that the column for "Kurs" should be the ratio of WKZ-Umsatz : WKZ-Basisumsatz, which is Foreign : Base Currency. Additionally, all sample files show this column's values being rounded to 6 decimal places. Currently, when Odoo exports the general ledger as DATEV data, there is no rounding of decimal places and the formula does base / foreign amount, `line_amount / line_amount_currency`. **Solution:** In the `datev_export_csv.py` file, the relevant method is called `_l10n_de_datev_get_csv()`. In there, we can fix the line to round the value of `line_amount_currency / line_amount` to 6 decimal places. ### Current behavior before PR: Exporting the general ledger as DATEV data currently gives the reverse foreign currency rate and fails to round to 6 decimal places, which causes some values to be extremely long. ### Desired behavior after PR: The csv files should output the correct rate and be rounded appropriately. **Releted Documentation:** https://developer.datev.de/en/file-format/details/datev-format/format-description/booking-batch opw-6366276s Forward-Port-Of: odoo/enterprise#125097
The point-of-sale pricer now recalculates a product variant's On Sale Price immediately when its cost changes under cost-based pricelists. This prevents outdated prices from appearing after the first update, helping businesses keep displayed sale prices accurate.
Original PR description
When we create a product variant and have a pricelist which is based on the cost price, and change the cost price, the on_sale_price doesn't update correctly. It gets delayed by one update because the product._origin isn't getting updated with the new onchanged value. Steps to Reproduce: 1.Create a pricelist and add a line with "formula" price type, and based on "cost", 2.Create a product variant, and add the pricelist just created. 3.Change the "Cost". The "On Sale Price" updates based on the value before. To fix the issue, we need to update the product._origin for standard_price just like the lst_price before computing the on_sale_price opw-5947995 Forward-Port-Of: odoo/enterprise#122391 Forward-Port-Of: odoo/enterprise#119470
5 changes
Enhancements to existing features
Payment XML files now include the building number field required by upcoming ISO 20022 address standards. This helps keep SEPA credit transfer and direct debit exports compliant ahead of the November 2026 mandate, reducing future payment processing risks.
Original PR description
This commit adds the <BldgNb> node in the iso20022 XML files, as it will be mandatory starting November 2026. Linked: https://github.com/odoo/odoo/pull/271855 task-6317758 Forward-Port-Of: odoo/enterprise#126298 Forward-Port-Of: odoo/enterprise#121674
Resolved issues and error corrections
This fixes an error that blocked users from confirming several Brazilian customer invoices at once when Avalara Brazil tax mapping was enabled. Businesses can now process invoice batches without interruption, improving billing reliability and reducing manual workarounds.
Original PR description
**_Steps to reproduce:_** * Install `l10n_br_avatax` and configure Avalara Brazil. * Create at least two customer invoices. * Ensure the fiscal position is set to **Automatic Tax Mapping (Avalara…
**_Steps to reproduce:_** * Install `l10n_br_avatax` and configure Avalara Brazil. * Create at least two customer invoices. * Ensure the fiscal position is set to **Automatic Tax Mapping (Avalara Brazil)**. * Select the invoices and click **Action → Confirm Entries**. **_Observed behavior:_** * A traceback is raised with `ValueError: Expected singleton: account.move(...)` and the invoices cannot be validated. **_Cause:_** * During tax extraction, `_extract_tax_values_from_l10n_br_avatax_detail` accesses `self.invoice_filter_type_domain` while `self` may contain multiple `account.move` records. * Accessing `invoice_filter_type_domain` on a multi-recordset raises an `Expected singleton` error, preventing the validation of multiple invoices. **_Fix:_** * Build the returned tax values by iterating over each invoice in the recordset and using the corresponding `invoice_filter_type_domain`. * This ensures `_extract_tax_values_from_l10n_br_avatax_detail` correctly handles multiple invoices during validation without raising a singleton error. opw-6334761
The POS preparation display order-count badge now uses the same rules as the preparation screen. This prevents orders from disappearing from the badge after midnight or remaining counted after a reset, giving staff a consistent view of pending work.
Original PR description
Steps to reproduce: - Configure a preparation display on a POS config with a product category - Place an order and leave it in a non-final stage - Keep the session open past midnight Issue: The…
Steps to reproduce: - Configure a preparation display on a POS config with a product category - Place an order and leave it in a non-final stage - Keep the session open past midnight Issue: The kanban order-count badge drops the order once its create_date falls behind "today", while the preparation screen still lists it. The same divergence makes the badge keep counting an order that a "Reset" already removed from the screen. _compute_order_count() scoped its search on pos_config_id and create_date >= today, whereas the screen is built by get_preparation_display_order() from _get_open_orders_in_display() and _get_stageless_orders_in_display(), which have no date filter and instead bound the set by the order stage `done` flag and the session state. An order open across midnight is therefore in the screen set but not in the badge set. Conversely reset() marks the current stage done, which drops the order from the screen set, but the badge only skipped orders whose latest stage is the final stage, so an order reset while still in the first stage stayed counted. opw-6414302 Forward-Port-Of: odoo/enterprise#126139 Forward-Port-Of: odoo/enterprise#125984
This fix ensures Indian localization reports classify POS and other non-purchase entries correctly when determining transaction type. It prevents general journal POS moves from being treated as purchases and updates existing databases with the corrected values.
Original PR description
Description: In #118297 non-sales journal moves were considered purchase moves during l10n_in_transaction_type computation, which is not correct for POS moves as their journal is of type 'general'. Fix: Compare only the purchase journal moves state against the partner state. Other moves treated as sales and their state compared against the company state. Add a migration script to update existing databases. opw-638646
This fix prevents deleted products in kiosk self-order flows from being incorrectly tracked when the Belgian blackbox module is installed. It helps avoid checkout or compliance-related errors when customers change their order before confirming.
Original PR description
Fix issue when deleting a product in the Kiosk with the blackbox module installed task-id: 6438820 community pr: https://github.com/odoo/odoo/pull/279778
1 change
Resolved issues and error corrections
This fix prevents users in multi-company environments from hitting an unsolvable error when creating quality-related operation steps. It ensures the default quality team can be used appropriately when only the base quality module is present, improving reliability for manufacturing workflows.
Original PR description
This commit actually reverts [1] and manually forwards [2]. Suppose `mrp_workorder` installed and `quality_control` uninstalled. Because of the default value provided by [1], the only existing quality team is linked to the first company. As a result, when using another company, if the user tries to create an operation step (i.e., a QCP), it will raise an error when the onchange tries to load the default team in charge: https://github.com/odoo/enterprise/blob/f9c99f937bd64e5a0acb4bc88b1fc08249250c4e/quality/models/quality.py#L141-L142 However, the `quality` module doesn't provide any view to create such a team. tldr The module raises an error that is actually impossible to solve... Let's avoid it in the above situation. [1] https://github.com/odoo/enterprise/commit/f9c99f937bd64e5a0acb4bc88b1fc08249250c4e [2] https://github.com/odoo/enterprise/commit/8cd5c9322bef7db49a90d4aef844dd0ba267058e