Monday, December 1, 2025
13 changes · 18.0
Enhancements to existing features
This update replaces the specific "Uruware" name in the Odoo settings with a generic "UCFE Provider" label for the electronic invoicing provider. This ensures customers contact Odoo support for assistance and maintains a consistent configuration for Uruguayan users. The core functionality remains unchanged.
Original PR description
Before: -In the Settings > Uruguay Localization section, electronic invoicing provider was shown as "Uruware". -This could lead customers to contact Uruware directly instead of Odoo support. After: -Replaced all mentions of `Uruware` with generic name, `UCFE Provider`. -Updated labels and descriptions in both testing and production sections. -The overall configuration and functionality remain unchanged. Impact: -Removes direct provider references from the interface. -Ensures customers contact Odoo support for any assistance. -Keeps the configuration clear and consistent for Uruguayan users. task-5244539 Forward-Port-Of: odoo/enterprise#99065
Resolved issues and error corrections
This update resolves an issue preventing MRP users from correctly validating manufacturing orders with project accounting. The fix ensures the system handles analytic account access properly, allowing users to assign serial numbers and complete work order validation without encountering access errors. This improves the efficiency of project costing and reporting.
Original PR description
Steps to reproduce: - Create a storable product with the following BoM: - Tracking: Serial number - Component “C1”: - Sales price: $10 - Cost: $20 - Operation: OP1 (60 min) - Add any analytic…
Steps to reproduce:
- Create a storable product with the following BoM:
- Tracking: Serial number
- Component “C1”:
- Sales price: $10
- Cost: $20
- Operation: OP1 (60 min)
- Add any analytic distribution
- Give the following access rights to Marc Demo:
- Manufacturing: User
- Timesheets: User
- Log in as Marc Demo
- Confirm the MO
- Start the work order
- Try to assign a new serial number using the "+" button
Problem:
```An access error is raised:
Uh-oh! Looks like you have stumbled upon some top-secret records.
Sorry, Marc Demo (id=6) doesn't have 'write' access to:
Analytic Line (account.analytic.line)
```
Since the user has no access to analytic accounts, calling
`_prepare_analytic_lines()` attempts to modify an existing analytic line
amount, which triggers the access error.
Solution:
Because analytic lines are created using `sudo()`, we also need to
call `_prepare_analytic_lines()` with `sudo()` to avoid write-access
violations.
opw-5258044
Forward-Port-Of: odoo/odoo#237174This update resolves a bug that prevented the generation of SAFT files when journal entries lacked a partner but included receivable accounts. The fix ensures accurate SAFT export functionality, particularly for localized accounting systems like l10n_dk. This prevents export failures and maintains compliance.
Original PR description
If we try to export a SAF-T file when a line doesn't have any partner but having a receivable account, then a traceback is displayed.
(Backport of #98240)
How to reproduce?
1. Use a company with a localization using SAF-T (e.g. l10n_dk)
2. Create and post a journal entry with no partner, and with a line having a receivable account.
3. Go on the general ledger, and export in the SAF-T format
opw-5260937
Forward-Port-Of: odoo/enterprise#100296This update resolves an issue where duplicating an approver within an approval request caused a system error. The fix prevents the same user from being linked to multiple approvers, eliminating the traceback and ensuring approval requests function correctly. This improves stability and prevents disruptions to the approval workflow.
Original PR description
When User duplicates the approver for any approval request and tries to open that approval request, A traceback will appear. Steps to reproduce the error: - Activate the developer mode - Go to Approvals > Create a new approval request > add any approver > Save - Click on the ``View`` button in the approver line - Now, In the Form view > Actions > Duplicate - Go back to that approval request through breadcrumbs Traceback: ``` ValueError: Expected singleton: approval.approver(1, 3) ``` https://github.com/odoo/enterprise/blob/83b6c0e1c052b08bd23c5e009773b5a3148ddeec/approvals/models/approval_request.py#L270 When the customer duplicates the approver, ``user_id`` will be also duplicated. So, Now Same User is linked with multiple approver. So, It will lead to the above traceback. sentry-6642840799
This update resolves an issue preventing payroll officers from accessing salary offer details. The fix prevents access errors when officers attempt to view offers, ensuring they can continue generating salaries without needing recruitment permissions. This improves workflow efficiency for the payroll team.
Original PR description
steps to reproduce: - Install l10n_be_hr_contract_salary - Log in as a payroll officer (without recruitment rights) - Go to Payroll > Contracts > Offers - Open any offer - Notice an 'Access Error' appears: You are not allowed to access 'Candidate' (hr.candidate) records. cause: The module tries to read `employee_id.candidate_id.partner_id` in offer computations. Since payroll officers lack recruitment rights accessing `hr.candidate` triggers an access error. fix: Wrap candidate access in try/except to handle missing permissions. - If accessible, candidate partner data is used as before. - If not accessible, skip without raising an error. This allows payroll officers to open and generate salary offers without requiring recruitment rights. task - 5039712
This update resolves an issue where the Odoo shell command wouldn't consistently start due to problems with imported tools. Specifically, the `hw_drivers` module caused errors when not actively used. This change ensures the Odoo shell starts reliably, improving developer workflow and command execution.
Original PR description
Description of the issue/feature this PR addresses: Not all tools imported in addons that have a `cli` directory may be installed on the system when that module is not used. Importing it will result in errors such as missing modules. In case of `hw_drivers`, there are hardcoded paths for the iot box. Current behavior before PR: Failing to start `odoo-bin shell` because of hw_drivers code. Desired behavior after PR is merged: Start commands. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231151
This update resolves an issue preventing MRP users (like those with Timesheet access) from correctly validating manufacturing orders. The fix ensures the system properly handles analytic account access when creating serial numbers, preventing access errors and allowing for accurate order management. This improves the usability of the manufacturing process for a wider range of users.
Original PR description
Steps to reproduce: - Create a storable product with the following BoM: - Tracking: Serial number - Component “C1”: - Sales price: $10 - Cost: $20 - Operation: OP1 (60 min) - Add any analytic…
Steps to reproduce:
- Create a storable product with the following BoM:
- Tracking: Serial number
- Component “C1”:
- Sales price: $10
- Cost: $20
- Operation: OP1 (60 min)
- Add any analytic distribution
- Give the following access rights to Marc Demo:
- Manufacturing: User
- Timesheets: User
- Log in as Marc Demo
- Confirm the MO
- Start the work order
- Try to assign a new serial number using the "+" button
Problem:
```An access error is raised:
Uh-oh! Looks like you have stumbled upon some top-secret records.
Sorry, Marc Demo (id=6) doesn't have 'write' access to:
Analytic Line (account.analytic.line)
```
Since the user has no access to analytic accounts, calling
`_prepare_analytic_lines()` attempts to modify an existing analytic line
amount, which triggers the access error.
Solution:
Because analytic lines are created using `sudo()`, we also need to
call `_prepare_analytic_lines()` with `sudo()` to avoid write-access
violations.
opw-5258044
Forward-Port-Of: odoo/enterprise#100476This update corrects a bug where discounts from purchase orders were incorrectly being added to sale orders during import. The change ensures sale orders always reflect a discount of 0, aligning with expected business logic. A new check has been implemented to prevent this issue in future versions.
Original PR description
Discounts are always sent by `_retrieve_line_vals` in `account_edi_ubl_cii` In Sale orders, discounts aren't expected to be automatically imported from the purchase order, it should always be 0. `test_so_import_product_from_po` didn't use to fail because discount wasn't checked until the recent refactor https://github.com/odoo/odoo/pull/190310 Check was added in 18.0 to avoid this error in the future. Steps to reproduce: - Disable discount in sale app - Create a PO with a discount on any POL - Enable discounts - Import SO from PO Issue: Discount is added to the Sale order lines. Runbot: 232724 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update optimizes how Odoo calculates mobility budgets for Belgian HR contracts. By switching to a more efficient 'binary search' method, the calculation process is now significantly faster, particularly for larger datasets. This results in quicker reporting and improved system performance.
Original PR description
- optimized the method `_compute_l10n_be_mobility_budget_amount` to use binary search instead of linear loop task-id: 5173389
This update resolves an issue where the 'I agree' button on the website's cookie bar stopped working when its font size was adjusted. The fix corrects a coding error that prevented the button from correctly triggering the cookie acceptance process, ensuring the cookie bar remains functional across different font size settings.
Original PR description
The "I agree" button in the cookie bar would stop working if its font size was changed. Steps to reproduce: =================== - Enable the cookie bar in website settings. - Go to the website and…
The "I agree" button in the cookie bar would stop working if its font size was changed.
Steps to reproduce:
===================
- Enable the cookie bar in website settings.
- Go to the website and enter Edit mode.
- Click on the cookie bar.
- Select the "I agree" button's text and change its font size.
- Save and visit the page as a guest (e.g., in a private window).
- Click on the "I agree" button text.
-> The maps doesn't show and the Cookie bar disappear.
Cause:
======
Applying a font size to the button's text wraps that text within a `<span>` element.
The event listener for accepting cookies is attached to the elements with IDs `#cookies-consent-essential` and `#cookies-consent-all`. in that case it ID `cookies-consent-essential` exist in the parent element. However, the code was checking the ID of `event.target`. When a user clicks directly on the newly created
`<span>`, `event.target` refers to the `<span>` itself, not the element who owns the event.
Since the `<span>` does not have the required ID ('cookies-consent-all'), the condition to accept the cookies was false.
Solution:
=========
Use `event.currentTarget` instead of `event.target`.
Unlike `event.target`, `event.currentTarget` always refers to the element to which the event handler was attached—in.
check:
https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget
opw-5004645
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an installation issue with the l10n_AR module caused by a Python 3.10 compatibility problem. The demo data used a syntax that's no longer valid in Python 3.10, preventing successful installation. This fix ensures the demo data functions correctly with the latest Python version.
Original PR description
**Steps to reproduce:**
- Use Python 3.10
- Install l10n_ar
**Issue:**
The installation fails with a SyntaxError.
**Cause:**
Some demo data use the following format for the taxes definition:
`ref(f'account.{ref('base.company_ri')}_ri_tax_vat_0_compras')`
However, in python 3.10, a quote cannot be used inside f''.
opw-5376152
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes a technical issue that prevented the 'fuel_type' field in employee contracts from being properly translated. By changing how the field's options are defined, this update ensures all translations are correctly displayed, improving the user experience for our Belgian customers.
Original PR description
The selection field `fuel_type` in the `hr.contract` model was not properly translatable, because it used a function yielding static strings for the options. This commit changes the field to use the variable directly, allowing them to be translated. Forward-Port-Of: odoo/enterprise#100748
This update fixes an issue where short feedback messages were incorrectly wrapping the last word, creating a messy layout. The change ensures that feedback messages display cleanly, especially when combined with the rating image, resulting in a better user experience. This backport addresses a minor visual inconsistency.
Original PR description
**Current behavior before PR:** - Short feedback wraps the last word unnecessary.  **Desired behavior after PR is merged:** - Short messages wrapped unnecessarily due to block-level element conflicting with floated rating image. This fix ensures cleaner inline layout.  Backport of this: [Commit](https://github.com/odoo/odoo/commit/52a1913ea7082655009c9eca1201c8c42e4e4037) task-[4788428](https://www.odoo.com/odoo/project/1519/tasks/4788428) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215577