Daily updates from Odoo
Saturday, June 27, 2026
10 changes
1 change
Enhancements to existing features
The Point of Sale has been updated to support the new Belgian blackbox v2 requirements. This mostly restructures internal POS flows so local Belgian rules can control payment, cashier, receipt, and order-synchronization behavior without disrupting standard use.
Original PR description
Note: this PR is a forward of https://github.com/odoo/odoo/pull/229692 Refactor several POS core methods into overridable hooks so that l10n_be_pos_blackbox (v2) can intercept and extend critical…
Note: this PR is a forward of https://github.com/odoo/odoo/pull/229692 Refactor several POS core methods into overridable hooks so that l10n_be_pos_blackbox (v2) can intercept and extend critical flows to implement the new blackbox requirements. point_of_sale: - pos_store.js: extract posBackOnline(), openCashbox(), getSelfOrderToPrint(), and resetCashier() as dedicated methods; setCashier() now returns a boolean; preSyncAllOrders() now returns the orders array, and the sync loop skips an order when it returns falsy (allows blackbox to block premature syncing); add orderReceiptComponent class property so the receipt component can be substituted by submodules. - order_payment_validation.js: extract canPrintReceipt getter (makes it overridable); fix absolute import path for error_handlers; fix typo "occured" → "occurred". - pos_session.py: load product.template / product.product before account.tax in _load_pos_data_models to satisfy the blackbox data dependency order; include account_move id in the invoice list returned by the session sales-details report. pos_hr: - Split setCashier() into setCashier() + setCashierUpdateSession() so the session-update side-effect can be called independently by the blackbox during clock-in/out flows. Return true from setCashier() consistently with the base method. pos_loyalty: - Override displayPrice on order lines so gift-card trigger products always display a positive price, even when the order is a refund. pos_restaurant: - Refactor mergeOrders() into _mergeOrders() + _mergeLines() private helpers; add getLinesToMerge() hook so blackbox can filter which lines participate in a merge; mergeOrders() now returns the destination order; extract syncRestoredOrders() for overridability; replace the while-loop-with-guard-counter with a plain for-of loop. pos_self_order: - Add orderReceiptComponent property; extract handleKioskSessionStatusChange() so the kiosk status-change behaviour can be overridden by the blackbox self-order bridge. enterprise PR: https://github.com/odoo/enterprise/pull/121799 task-id: 5864870 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
1 change
Enhancements to existing features
This update prepares the Austrian accounting configuration for a VAT rate change effective July 1, 2026, reducing tax from 10% to 4.9% for certain food categories. It also updates the related chart of accounts and tax return mapping so businesses stay compliant and reporting remains accurate.
Original PR description
From first of July 2026, the VAT will change from 10% to 4.9% for some food categories. Adapt the taxes, the CoA and the tax return accordingly. task-6273259 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272321 Forward-Port-Of: odoo/odoo#268278
4 changes
Enhancements to existing features
Odoo now automatically emails companies when Stripe reports that their connected account may soon be restricted because required information or documents are missing. This helps businesses fix compliance issues before payments or account access are affected.
Original PR description
When a company tries to create a connected account, some official documentation need to be submitted to Stripe. Stripe takes care of the KYC steps and might restrict some account which don't meet the requirements. Odoo receives the details about the error and the date of the restriction. This task aims at sending automatic emails to the said companies to let them know that they need to fix the identified issues. task: 5441662 Forward-Port-Of: odoo/enterprise#107918
This update adjusts the AI website builder to match recent template changes in the main Odoo codebase. It helps ensure the feature continues to work correctly when users edit or build website content, without unexpected breakage from the underlying XML changes.
Original PR description
Adapt the XPath to the XML changes in community for the website.WebsiteBuilder template. task-6251151 Forward-Port-Of: odoo/enterprise#121655
The bank reconciliation screen now has a clearer, easier-to-use layout on mobile devices. Users can also see key statement details and the remaining balance at a glance, which helps them reconcile accounts with more context and less effort.
Original PR description
Current behavior before PR: On mobile devices, the bank reconciliation dialog relied on the base kanban view of account move line, which is difficult to handle and lacked contextual information about…
Current behavior before PR: On mobile devices, the bank reconciliation dialog relied on the base kanban view of account move line, which is difficult to handle and lacked contextual information about the statement being reconciled. Desired behavior after PR is merged: The bank reconciliation flow on mobile uses a dedicated kanban view with a simplified layout. An informational line is displayed above the main view, showing the statement date, reference, and remaining balance for better context. Changes implemented: - Added a mobile-specific kanban view for bank reconciliation dialog. - Displayed an information line above the kanban view with statement date, reference, and balance like desktop view for bank reconciliation dialog. - Moved 'onSelectionChanged' to 'BankRecSelectCreateDialog' and shared it through 'bankRecInfo', moved 'remainingAmountFormatted' into the state, and removed the duplicated getters from the list and kanban renderers. - Kept the existing desktop layout and behavior unchanged. - Added a HOOT test to check the mobile bank reconciliation dialog. task-5502469 Forward-Port-Of: odoo/enterprise#106565
This change prevents avoidable warning logs when the system checks whether certain attachments are multi-page documents. It mainly benefits integrations and automated processes that create URL-based attachments, by keeping logs cleaner and avoiding extra error handling.
Original PR description
Return None when datas is empty alongside the existing mimetype check. Avoids unnecessary exception handling leading to logspam for URL type attachments where binary data is unavailable. This issue is only reproducible programmaticaly as the mimetype is not available with url type attachment in Odoo. Thus, it's a problem that only impact third party integrations, EDI connectors or any workflow that creates ir.attachment records directly. opw-6010528 Forward-Port-Of: odoo/enterprise#116080 Forward-Port-Of: odoo/enterprise#113396
1 change
Enhancements to existing features
This update adds two new delivery provider options: Food Zapp for the UAE and Enqueue for Saudi Arabia. It helps businesses in these markets connect their point of sale delivery setup to more local provider choices.
Original PR description
In this commit: - We are introducing two new providers, FoodZapp and Enqueue, for the UAE and KSA, respectively. Task-6263190,6263310
3 changes
Enhancements to existing features
The POS fiscal integration now sends buyer address details only when they are actually available. This avoids transmitting placeholder values like “N/A”, which makes the submitted data cleaner and more accurate for Fiskaly.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133
Backorder creation during receipt validation has been optimized so it can handle very large operations much faster. This reduces the risk of timeouts and database memory errors, helping busy warehouses complete receipts more reliably.
Original PR description
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of…
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of moves in the picking, and M is the number of moves being processed for valuation. This happened while computing price units for moves one by one: each move filtered all picking moves to find the ones with the same `product_id`. Another issue was a PostgreSQL `"memory exhausted"` error caused by generating a large number of OR'ed conditions, equal to the number of processed moves. ## The Solution The massive filtering was fixed by filtering moves of the `purchase_line` instead of the `picking`, which is typically associated with only a few moves. This is still correct as the loop just after already ignores moves that don't have the same `purchase_line_id` of `self` anyways. The PostgreSQL error was fixed by grouping moves by `location_dest_id` and generating one condition per location using an `in` clause, which is typically much smaller than generating one condition per move. ## Benchmark Benchmark on a customer database, validating a receipt with 10k+ operations by creating a backorder: ```text Time: timeout -> 6 min ``` OPW-6272667
This update brings back automated flow tests for the French Point of Sale payment reporting and invoicing process. It helps ensure the merged e-reporting and e-invoicing logic continues to work as expected and reduces the risk of regressions.
Original PR description
During the merge of l10n_fr_pdp e-reporting and e-invoicing, some tests had to be removed. Task-6296356