Daily updates from Odoo
Tuesday, December 23, 2025
13 changes · 17.0
Enhancements to existing features
This update adjusts payroll rule parameters to reflect changes in US payroll regulations for the 2026 tax year. Ensuring these parameters are current is crucial for accurate salary calculations and maintaining compliance with US tax laws. This update directly impacts payroll processing.
Original PR description
Purpose: Certain US Payroll values changes yearly. The payroll rule parameters must be updated for accurate salary calculation for 2026 for compliance. task-5409739
Resolved issues and error corrections
This update resolves an issue where the Amazon connector wasn't correctly recognizing key delivery modules for major shipping carriers like UPS, FedEx, USPS, and DHL. By mapping these modules, the connector now functions properly with these carriers, ensuring accurate sales order data and shipping integrations.
Original PR description
Amazon connector did not recognize the _rest delivery modules (ups_rest, fedex_rest, usps_rest, dhl_rest). This maps them to the correct carrier names, consistent with existing mappings.
This update corrects a technical issue within the account_edi_ubl_cii module by removing an outdated database call. Specifically, a function using the @api.model annotation was incorrectly attempting to create a new record. This change improves efficiency and stability.
Original PR description
[FIX] account_edi_ubl_cii: remove ensure_one call in api.model This is incorrect to call self.ensure_one() in a function with the @api.model annotation. introduced by 574a67c73633 no-task
This update expands the supported countries for the 'itsme' authentication process within Odoo Enterprise. The change aligns Odoo's functionality with the official itsme coverage list, ensuring compliance and a better user experience for customers in more regions. This improves the reliability and usability of the sign-up process.
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
This update prevents unnecessary email reminders from being sent related to timesheet approvals. The system now only sends reminders when there are actual timesheets needing review, or when an employee lacks a manager or approver. This reduces email clutter and improves efficiency.
Original PR description
prevent cron from sending approver reminder if no timesheet assigned to approver Send the reminder email if: - there are timesheets to validate - AND if the user is set as either the manager or timesheet approver of an employee with timesheets left to be validated - OR if the said employee has no manager or timesheet approver set Task-3624610
This update fixes an issue where removing an icon from a paragraph would leave it unusable. The change ensures that paragraphs remain accessible after icon removal or when inserting content, preventing disruptions to the editor's functionality. It also addresses a bug where pressing Enter wouldn't work before an icon, now correctly handling cursor placement.
Original PR description
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that…
**Issue 1:** Steps to reproduce: - Insert a icon in an empty paragraph. - Remove the inserted icon. - The paragraph becomes unreachable. Cause: - When a paragraph contains only an icon, removing that icon during the delete process does not trigger `fillEmpty`. As a result, the paragraph ends up with no content, leaving it empty and unreachable. Solution: - During the delete process, after the icon is removed, call the `fillEmpty` method. This ensures that if the block becomes empty, a `<br>` is inserted inside the paragraph, keeping it accessible. **Issue 2:** Steps to reproduce - Insert an icon in an empty paragraph. - Place the cursor before the icon. - Press Enter. - Nothing happens. Cause - When the cursor is placed before a `contenteditable=false` element, `getDeepRange` sets the selection deep inside the non-editable element as a result, when Enter is pressed, the action is ignored because the selection is not in an editable context. Solution - Instead of setting the selection inside `getDeepRange`, set the selection after calling `getDeepRange` only if the returned range is not within a `contenteditable=false` element. task-3540454 Forward-Port-Of: odoo/odoo#237891
This update optimizes how Odoo searches for product quantities, significantly speeding up searches in large product catalogs. The change avoids unnecessary calculations and filtering, resulting in faster response times when checking product availability. This improves the overall user experience and system performance.
Original PR description
The performance when searching by `qty_available`, `virtual_available`, `free_qty`, `incoming_qty`, or `outgoing_qty` on databases with a large number of `product.product`s is currently poor. Both…
The performance when searching by `qty_available`, `virtual_available`, `free_qty`, `incoming_qty`, or `outgoing_qty` on databases with a large number of `product.product`s is currently poor. Both `product.product.type` and `product.product.uom_id` are computed from `product_tmpl_id`. With large databases, `_compute_related()` is a large bottleneck when running `_compute_quantities()` We fix this performance issue using two fast paths. Instead of searching all products, we specify `type != 'service'` within the search domain in `_search_product_quantity()` and skip the filter in the compute methods. And in `_compute_quantities_dict()` we directly set quantities to 0.0 if there are no quants or moves for the current product, skipping the unnecessary `uom_id` and `float_round()` computations. Benchmark | `product.product` count | Before this PR | After this PR | | ----------------------- | -------------- | ------------- | | 5,000 | 1.01s | 0.41s | | 50,000 | 9.97s | 2.90s | | 500,000 | 144s | 43s | opw-4930856
This update resolves a minor visual glitch that occasionally appeared when using modals (pop-up windows) on the website. Specifically, pressing the Escape key while a modal was open caused a temporary display issue with the cookies bar. This fix prevents the glitch from occurring.
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
This update resolves a problem where tests for the Mexican VAT reporting module (l10n_mx_edi) were consistently failing due to a specific test date. The fix sets a more standard test date, ensuring the tests run reliably and accurately without being affected by calendar dates.
Original PR description
Some tests are making "self.frozen_today - timedelta(days=1)". It means some tests are failing only the first of January. To avoid that, let's make "frozen_today" to be in the middle of the year.
This update fixes an issue where invoice addresses in UBL files were incorrectly labeled as 'XXXX, Invoice address'. Now, the invoice address accurately reflects the customer's default name, ensuring proper data formatting for electronic invoices. This improves the reliability of our UBL exports.
Original PR description
Before this commit: - The invoice address for a customer without a specific name is displayed as `XXXX, Invoice address` in UBL files. After this commit: - The invoice address is correctly named using the partner's default name in the XML, instead of the placeholder `XXXX, Invoice address.` Backport of https://github.com/odoo/odoo/pull/232819 task-4614564 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update ensures that packaging quantities for kit products are rounded correctly, aligning with how non-kit products are handled. Previously, the system didn't round kit quantities, leading to discrepancies in delivery slips. This change improves accuracy and consistency in order fulfillment.
Original PR description
Problem: There is no rounding done for the packaging quantity computation for kit products. This is inconsistent with non-kit products as we call _compute_qty and round. Purpose: This will properly…
Problem: There is no rounding done for the packaging quantity computation for kit products. This is inconsistent with non-kit products as we call _compute_qty and round. Purpose: This will properly round the kit quantity and make the behavior consistent with the non-kit products. Steps to Reproduce on Runbot: 1. Enable product packages and display lots on delivery slips. 2. Create a kit product. 3. On the kit product create a product package that holds 9 units. 4. Create a component product and make it tracked by lots. 5. On the component product create one lot with 9.0 units and a second lot with 12.6 units. 6. Create a kit type BoM for the kit product and add the component product with a quantity of 0.1 units. 7. Create a sale order for 216 units of the kit product, which will use 24 packages. 8. Validate the receipt and print the delivery slip. 9. Observe that the delivery slip shows 13 packages used for the 12.6 units instead of 14. opw-5258735 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue preventing portal users from downloading e-learning course slides when using a CDN. The change adds a new route to ensure CDN access aligns with documented configurations and expected public content availability. This improves the user experience for accessing course materials.
Original PR description
Currently if you have a cdn configured to the route '/web/content' and you try to download files in a e-learning course as a portal user, you won't be able to. You get a not found error instead since you are not logged in in the cdn server, so no access to the resource. Given that configuring a cdn to this route is in our documentation and that other contents on that route are expected to be public (so available trough cdn) this is unexpected behaviour. This adds a route to slides that calls the same method as the old one, so that you can cdn that route and this will still work opw-4918546 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
This update fixes an issue where closing a Point of Sale (POS) session with a new rescue session would incorrectly report the balance. The change ensures the closing balance is calculated accurately, reflecting the true end-of-session balance regardless of whether a rescue session was used. This improves the reliability of financial reporting for POS transactions.
Original PR description
Before this commit, when calculating the end balance during closing a POS session, if a new rescue session was created after opening the current session, the closing balance calculation would incorrectly consider the rescue session as the last session. This led to an inaccurate closing balance as the opening balance of the rescue session is always zero. opw-5222527 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr