Daily updates from Odoo
Monday, August 17, 2026
16 changes
3 changes
Enhancements to existing features
The Belgian payroll meal voucher report now calculates total voucher value correctly when vouchers are postponed. This helps payroll teams produce more accurate reports and avoids incorrect meal voucher amounts for affected employees.
Original PR description
-Adjust the total value for meal voucher report in case of postponed meal vouchers. Forward-Port-Of: odoo/enterprise#127941
Before this commit, ensuring the web client updated its context when a warehouse was created relied on intercepting RPC responses on the frontend. This approach was inefficient and relied on the client to guess when backend access groups were modified. With this commit, we shift the responsibility to the backend. The server now explicitly sends a bus notification (`stock_group_sync`) to user when the `group_stock_multi_warehouses` or `group_stock_multi_locations` groups are assigned/una
Original PR description
Before this commit, ensuring the web client updated its context when a warehouse was created relied on intercepting RPC responses on the frontend. This approach was inefficient and relied on the client to guess when backend access groups were modified. With this commit, we shift the responsibility to the backend. The server now explicitly sends a bus notification (`stock_group_sync`) to user when the `group_stock_multi_warehouses` or `group_stock_multi_locations` groups are assigned/unassigned. The `stock_warehouse` frontend service now simply subscribes to this event to perform a `reload_context`, making the process much more robust and performant. task-6381795
Before this commit, when importing and invoice/bill, we predicted the invoice line account based on previous invoices/bills. If the predicted account had default tax, it was ignored during tax matching. With this commit, first checks whether the predicted account has a default tax. If it finds one that matches the tax percentage from the imported XML, that tax is applied. Otherwise, or if the account has no default tax, the existing tax matching logic is used. task-6345661 Forward-Po
Original PR description
Before this commit, when importing and invoice/bill, we predicted the invoice line account based on previous invoices/bills. If the predicted account had default tax, it was ignored during tax matching. With this commit, first checks whether the predicted account has a default tax. If it finds one that matches the tax percentage from the imported XML, that tax is applied. Otherwise, or if the account has no default tax, the existing tax matching logic is used. task-6345661 Forward-Port-Of: odoo/odoo#281424 Forward-Port-Of: odoo/odoo#279940
4 changes
Enhancements to existing features
Odoo now checks whether a payment or batch payment exceeds the maximum amount allowed by the connected financial institution before starting the transfer. This helps prevent failed payment attempts and gives businesses earlier clarity when a bank or provider enforces transaction limits.
Original PR description
Before trying to initiate payments through Odoo/Odoofin, we should check that the total amount for the (batch) payment does not exceed the maximum payment amount allowed by the institution (some Powens institutions introduced that limit). task-6310729 Forward-Port-Of: odoo/enterprise#126955 Forward-Port-Of: odoo/enterprise#121513
Timesheet Assistant suggestions for Helpdesk tickets now show the actual ticket name and fill it into the timesheet form when users add a suggestion. The update also prevents unrelated assistant events from being grouped under the wrong name, reducing duplicate entries and incorrect time totals.
Original PR description
Before this commit, the Timesheet Assistant displayed static labels for Helpdesk Tickets. Furthermore, when a user clicked "Add" on a ticket suggestion, the Timesheet Inline Form did not auto-populate the ticket name, as the source ID was lost during the grouping phase. Task: 6320652 Forward-Port-Of: odoo/enterprise#121662
Filters are now completely exclusive, which prevent 0 results but also prevents more "open" searches as "Lenovo" OR "HP" AND "512GB SSD". Stop updating the filters based on selected attribute values to avoid the extra product query and allow selecting non exclusive filters from the same attribute. task-6341310 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
Filters are now completely exclusive, which prevent 0 results but also prevents more "open" searches as "Lenovo" OR "HP" AND "512GB SSD". Stop updating the filters based on selected attribute values to avoid the extra product query and allow selecting non exclusive filters from the same attribute. task-6341310 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Doing an euclidean division on floats with the native operators is unreliable: because of IEEE-754 representation errors, `value1 % value2` can return a spurious remainder (e.g. `50.4 % 16.8 == 16.799999999999997` instead of 0.0) and `int(value1 / value2)` can truncate the quotient one step too low (e.g. `int(0.3 / 0.1) == 2` instead of 3). `float_div` returns the `(quotient, remainder)` pair free of those errors. The key is to never run a lossy `%` or `//` on the raw floats. Instead both ope
Original PR description
Doing an euclidean division on floats with the native operators is unreliable: because of IEEE-754 representation errors, `value1 % value2` can return a spurious remainder (e.g. `50.4 % 16.8 ==…
Doing an euclidean division on floats with the native operators is unreliable: because of IEEE-754 representation errors, `value1 % value2` can return a spurious remainder (e.g. `50.4 % 16.8 == 16.799999999999997` instead of 0.0) and `int(value1 / value2)` can truncate the quotient one step too low (e.g. `int(0.3 / 0.1) == 2` instead of 3). `float_div` returns the `(quotient, remainder)` pair free of those errors. The key is to never run a lossy `%` or `//` on the raw floats. Instead both operands are first snapped onto the precision grid with `float_round` and then scaled to integers: since a grid-snapped value is a multiple of `rounding`, dividing it by `rounding` counts how many grid steps it spans. That division is still noisy (`4.35 / 0.05 == 86.99999999999999`), so the result is passed through `builtins.round` to coerce it to the exact integer step count. The euclidean division itself is then a plain integer `divmod`, which is exact, and the remainder is scaled back to real units. This is why the correction is applied to the inputs and not to the output: rounding the result of a native `%` would only round an already-corrupt value, and would still misreport the quotient in the corner cases the util exists to handle. Dividing by `rounding` is meaningful for any precision, not only powers of ten: the grid step can be `0.05`, `0.25`, `0.5`, `0.03`, ... and `value / step` counts the steps in every case. This mirrors the normalize/denormalize scheme `float_round` already uses internally. The util shares `float_round`'s inherent limitation: the scaled step count must stay representable as an exact `float` integer, so exactness is lost past ~2**53 grid steps (extreme magnitudes at a fine precision). This is the IEEE-754 double-precision ceiling and is well outside any realistic quantity or price range. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#280883 Forward-Port-Of: odoo/odoo#277160
1 change
Enhancements to existing features
Timesheet Assistant suggestions for helpdesk tickets now show the actual ticket name and fill it into the timesheet form when selected. This makes time entry faster and avoids duplicate or incorrect assistant suggestions that could inflate calendar-based durations.
Original PR description
Before this commit, the Timesheet Assistant displayed static labels for Helpdesk Tickets. Furthermore, when a user clicked "Add" on a ticket suggestion, the Timesheet Inline Form did not auto-populate the ticket name, as the source ID was lost during the grouping phase. Task: 6320652
2 changes
Enhancements to existing features
Belgian Blackbox point-of-sale flows now move on without waiting for receipt printing when an order is canceled. This reduces delays for staff and keeps checkout operations smoother when cancellations happen.
Original PR description
Stop awaiting the receipt print in the POS for canceled orders task-id: 6425204 community PR: https://github.com/odoo/odoo/pull/280002 Forward-Port-Of: odoo/enterprise#127818
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#282339 Forward-Port-Of: odoo/odoo#280593
4 changes
Enhancements to existing features
Spreadsheet pivot tables can now include calculated fields based on SQL data, expanding what users can analyze directly in spreadsheets. This improves reporting flexibility for teams that rely on pivot views to explore business data without leaving Odoo.
Original PR description
Task: 6442237 Forward-Port-Of: odoo/enterprise#126645
Belgian payroll meal voucher reports now calculate the total value correctly when vouchers are postponed. This helps payroll teams rely on more accurate reporting for employee benefits and related follow-up.
Original PR description
-Adjust the total value for meal voucher report in case of postponed meal vouchers. Forward-Port-Of: odoo/enterprise#127941
Subscription and rental portal pages now use the refreshed sale order layout, making key details such as rental dates, subscription plans, periods, and invoices easier to find in the sidebar. The update also improves status labels and action placement, creating a clearer and more consistent customer experience across related portal pages.
Original PR description
*: sale_renting, helpdesk, planning_field_service, sign Before this commit, subscription and rental portal pages still relied on the previous sale order layout, with key info (rental dates, plan, start/period, invoices,.) living in the main view as table-based blocks. This commit aligns subscriptions and rentals with the upcoming sale order portal design: rental dates, subscription plan/period and invoices are moved from the main view to the sidebar, the intro row is reworked with restyled status badges and inline metadata, sidebar actions are re-hierarchized.. requires: https://github.com/odoo/odoo/pull/264918 task-5404797
Bank statement reconciliation can now match invoices even when payment references are written with minor formatting differences, such as missing slashes. This helps reduce manual reconciliation work and improves automatic matching accuracy.
Original PR description
Before this commit, the "try_auto_reconcile" algorithm was finding moves when there was a perfect match with either the ref of a move line, the move name, the payment reference and now a sanitize version of the payment ref. For example if an invoice had SO12/1234 as the payment reference, if the statement line has a label SO121234 nothing was found. This commit will then add a new non stored computed field to sanitize the payment ref on the invoice level to help those cases task-6119841
1 change
Enhancements to existing features
Allow resetting sent moves to draft. Ensures a rectificative flow exists or is created. Allow to create an empty rectificative report (if no more invoices to report after being reset to draft). Task: 6273211 Backport of https://github.com/odoo/odoo/commit/801051138621d884ca53324a1befb6de47d83306 This commit also makes minor changes that where done in the 18+ forward ports but not in the 18.0 branch itself (removing 'l10n_fr_pdp_bypass_draft_check' in tests and correcting one comment). F
Original PR description
Allow resetting sent moves to draft. Ensures a rectificative flow exists or is created. Allow to create an empty rectificative report (if no more invoices to report after being reset to draft). Task: 6273211 Backport of https://github.com/odoo/odoo/commit/801051138621d884ca53324a1befb6de47d83306 This commit also makes minor changes that where done in the 18+ forward ports but not in the 18.0 branch itself (removing 'l10n_fr_pdp_bypass_draft_check' in tests and correcting one comment). Forward-Port-Of: odoo/odoo#282260
1 change
Enhancements to existing features
*: website, test_http This commit adds the X-Robots-Tag: noindex response header to images of published website records so search engines do not index their raw image URLs while allowing the containing pages to remain indexable. task-6226860 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Original PR description
*: website, test_http This commit adds the X-Robots-Tag: noindex response header to images of published website records so search engines do not index their raw image URLs while allowing the containing pages to remain indexable. task-6226860 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr