Tuesday, December 23, 2025
13 changes · saas-18.2
Enhancements to existing features
Spanish tax labels are now included in the Spain localization data, so Spanish users can view tax names in their own language instead of English. This improves usability and clarity when reviewing or configuring taxes in Odoo.
Original PR description
Description of the issue/feature this PR addresses: Add the column `name@es` to make the names of taxes available in Spanish, making it more usable for Spanish users. Current behavior before PR: Taxes always come with their English names, which are not very understandable for Spanish users. Desired behavior after PR is merged: To have taxes translated into Spanish. <img width="285" height="893" alt="imagen" src="https://github.com/user-attachments/assets/7f5521a2-cf2b-4f3b-aa1d-79ac15ec89d6" /> <img width="285" height="893" alt="imagen" src="https://github.com/user-attachments/assets/868a9616-81c0-48d4-a65e-bfad32f32fd4" /> MT-12396 @moduon @rafaelbn @EmilioPascual @chklop @jco-odoo --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234682
Resolved issues and error corrections
The Point of Sale combo product configurator now respects the setting that hides product images. This keeps the checkout experience consistent for staff when businesses choose not to show product pictures.
Original PR description
Before this commit: ==================== In POS, when product images were configured to be hidden, the setting was correctly applied to normal products. However, in the combo product configurator, product images were still displayed, causing inconsistency with the configured behavior. After this commit: ====================== The combo product configurator now respects the product image visibility configuration, ensuring consistent behavior across all product types in the POS interface. Task-5163955 Forward-Port-Of: odoo/odoo#231366
Point of Sale now correctly combines repeated purchases of the same product even when its price uses more decimal places than the currency display. This prevents cluttered orders and reduces cashier confusion caused by duplicate lines for identical items.
Original PR description
Before this commit, when a product had a price with more decimals than the currency, adding it multiple times to the order would create multiple orderlines instead of merging them. This was due to rounding issue when comparing the prices of the orderlines. opw-5341735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238639
Fixed an issue where the “Sales - 3” website navigation template could display too many menu items outside the available space. The menu now stays contained, improving the appearance and usability of affected website headers.
Original PR description
Scenario: - edit the website navbar and set template "Sales - 3" (penultimate) - edit menu to add several menu items that will be larger than possible Result: the menu overflows Cause: a parent element of the menu doesn't overflow, so when computing autoHideMenu where we compute what overflow the list of menu, nothing overflows it since the overflow already happened in the limitless parent element. Fix: using CSS to prevent the parent from overflowing. opw-5178552 __pr note:__ this is happening in 17.0 but I'm targeting 18.0 since the ticket is in 18.0 and code is the same in 18.0 up to master. Forward-Port-Of: odoo/odoo#240433
The sales order line now shows the correct remaining prepaid service time when hours are tracked in larger unit packs. This prevents small rounding errors from making overconsumption look off by a minute, improving clarity for service billing and project tracking.
Original PR description
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order…
Steps to reproduce: - Create service product with UoM 'pack of 20 hours' and prepaid policy - Sell the product and confirm the Sales Order - Create a helpdesk ticket/task linked to the Sales Order Line - Log 22:00 on timesheets Current behavior: Sales Order Line shows '-2:01 remaining' Expected behavior: Should show '-02:00' to reflect two hours overconsumed without rounding. Root cause: Python's float type follows the IEEE 754 double-precision standard, where only base-2 fractions can be stored precisely. Base-10 fractions cannot be represented exactly, introducing tiny rounding errors. During chained operations such as multiple conversions or subtractions, these small errors accumulate into larger discrepancies. The float_round() function uses a small constant epsilon to correct rounding noise, but as arithmetic chains grow, errors exceed epsilon's tolerance and it can no longer correct them. Since a single global epsilon cannot handle every case (small vs. large values, chained vs. single operations, or regressions), rounding drift is inevitable when rounding happens repeatedly. Fix: To prevent these rounding errors from compounding, the solution is to stop intermediate rounding altogether. By using conversions with round=False, all arithmetic is done in the base unit (hours) with full float precision, and rounding is applied only once when displaying the final value. This eliminates error accumulation and ensures consistent, drift-free results. task-5090240 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240042 Forward-Port-Of: odoo/odoo#229282
Converted todos now hide the conversion option once they are linked to a project. This prevents users from accidentally converting the same item again and changing its project details unexpectedly.
Original PR description
Steps to reproduce: - Create a Todo and convert into task using cog Menu option. - Todo is converted to task and is displayed. - Through breadcrumb go back to Todo - Try to convert it again Issue: - The converted todo is again converted (change of project etc) Fix: - Hiding the convert cog menu when a project is set. task-5075327 Forward-Port-Of: odoo/odoo#240750 Forward-Port-Of: odoo/odoo#230031
The Danish localization module description has been corrected to fix wording mistakes in the Danish text. This helps users better understand the module with clearer and more accurate information, without changing how the system works.
Original PR description
There were some mistakes in the Danish part of the module description. This commit corrects those mistakes. Forward-Port-Of: odoo/odoo#239180
The website cookie bar now ignores the Escape key when it is displayed alongside modal behavior. This prevents a brief visual glitch, creating a smoother experience for visitors managing cookie preferences.
Original PR description
When pressing `Escape` with a Bootstrap modal open, even if the config key `keyboard` is set to `false` (preventing escape from closing the modal), Bootstrap sets a class `modal-static` on the modal element and removes it shortly after. This causes a UI glitch in the case of the cookies bar. Stopping the event propagation prevents it from happening. task-5421993
Sending an invoice through Peppol no longer crashes when an invoice line has no product name or label. Instead, users receive a clear message explaining that each invoice line must include a product or label, helping them correct the invoice and continue.
Original PR description
Before this commit: When sending an invoice via Peppol with an invoice line that has no product name, the system crashes with a TypeError instead of showing a error message. Steps to reproduce: 1. Go to Accounting 2. Navigate to Customers > Invoices 3. Create a new invoice 4. Add an invoice line without entering a product name 5. Click 'Send' 6. Select 'by Peppol (Demo)' 7. Click 'Send' -> TypeError: 'NoneType' object is not subscriptable After this commit: System validates that the product name exists before accessing its text content. Users see a clear, error message: `Each invoice line should have a product or a label.` task-5432061 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240908
This update prevents unintended inventory quantity changes when product quantities are recalculated. It helps keep stock figures reliable and avoids incorrect updates during internal inventory computations.
Original PR description
The foward port https://github.com/odoo/odoo/pull/239918 did not correctly handle the new `skip_qty_available_update` flag when setting 0.0 quantities, causing some side effects when `_compute_quantities` is run. This commit correctly adds the flag in the needed cases.
This update allows businesses using the Mexican tax (CFDI) module to define a unique sequence prefix for their branch invoices. Previously, the system relied on a standard sequence, which is now configurable, ensuring accurate tax reporting and compliance for branch operations in Mexico. This change addresses a specific requirement for branch-level reporting.
Original PR description
Add a way to set a custom prefix for GI sequences on the settings for MX. Get this sequence first on the branch before looking to the one on root company. opw-5096687 Forward-Port-Of: odoo/enterprise#100017
This update fixes a misleading error message displayed when deleting sale orders with associated bookings. Previously, users received an incorrect instruction to reduce order quantities. Now, the system correctly informs users that they must cancel the order before deletion, aligning with expected business processes. This ensures a smoother user experience and prevents confusion.
Original PR description
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed.…
Problem: When the module is installed and there are bookings with answers linked to sale orders, the order lines are deleted before the order, causing the wrong error message to be displayed. Solution: The order lines should not be manually unlinked from the sale order. It should be the bookings linked to the order lines that should be unlinked before the sale order deletion. Expected Behavior: When deleting a sale order whose lines have bookings, the following error message shoud be displayed: "You can not delete a sent quotation or a confirmed sales order. You must first cancel it." Current Behavior: When deleting a sale order whose lines have bookings, the following error message is displayed: "Once a sales order is confirmed, you can't remove one of its lines (we need to track if something gets invoiced or delivered). Set the quantity to 0 instead." Steps to reproduce on Runbot: 1. Install Appointments and ecommerce 2. For the dental care appointment, edit and enable "Up-front payment" 3. On the website, book an appointment for dental care and proceed to payment 4. Delete the sale order with the booking 5. Observe the incorrect error message being displayed opw-5092349 Forward-Port-Of: odoo/enterprise#100371
This update expands Odoo's support for the itsme digital ID system to align with the official coverage provided by itsme-id.com. This ensures that users in more countries can successfully utilize itsme for authentication, improving the system's accessibility and compliance.
Original PR description
Extend itsme availability beyond BE and NL to match the official itsme coverage: https://www.itsme-id.com/en-BE/business/coverage task-5424818 Forward-Port-Of: odoo/enterprise#102423