Monday, December 8, 2025
18 changes · 18.0
Enhancements to existing features
This update ensures that newly imported partner records are automatically recognized as companies within the Odoo system. This improves data accuracy and streamlines processes related to invoicing and reporting for business partners. It addresses a previous issue where imported partners weren't correctly categorized.
Original PR description
Ensure imported partner records are marked as companies when creating new partners. Task-5353923 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update fixes a bug that prevented users with multiple company employees from correctly creating helpdesk tickets. The change ensures that resources are filtered by company to avoid incorrect working interval calculations, preventing errors and ensuring accurate ticket creation for all users.
Original PR description
after https://github.com/odoo/enterprise/commit/6268dbaf07d742b5371a08dbf9f2dbb5fc0f8ce5 when computing working intervals for users, we filter resources by company to avoid concidering resources from employees in other companies different than the helpdesk team one. the method `_get_working_user_interval` is overriden in `helpdesk_holidays` and was not updated to follow same logic, which lead ro a traceback when a user with multiple employees in different companies was assigned is part of a helpdesk team and you try to create a ticket for that team. this commit fix the issue and add a test case covering this scenario. opw-5223717
This update resolves an issue where the server logger was experiencing excessive logging activity, leading to potential performance slowdowns. The change reverts a recent adjustment to the logging interval, restoring it to a more stable setting to ensure reliable and efficient logging of system events. This improves overall system stability and responsiveness.
Original PR description
Based on this review of https://github.com/odoo/odoo/pull/238740 this pr reverts the flush interval to 0.5s introduced in https://github.com/odoo/odoo/pull/238648 to avoid queue saturation. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238912
This update resolves an issue where removing a video URL in the website editor would create a broken link, resulting in a 404 error. The fix ensures that the 'Add' button is disabled when a video URL is empty, preventing the creation of invalid links and improving the user experience. This ensures videos display correctly.
Original PR description
*=website **Steps to reproduce:** 1. Drop a video 2. Reopen the media dialog 3. Remove the URL 4. Confirm **Issue:** When the URL was removed and confirmed, an iframe without a valid source was saved, leading to a 404 error. **Fix:** When the video URL is cleared, VideoSelector component calls selectMedia with an empty object. MediaDialog did not previously handle this case, so the media selection was not cleared. Now we Update MediaDialog to treat an empty object as a clear-selection signal and disable the Add button accordingly. task-5190485 Forward-Port-Of: odoo/odoo#234085
This update fixes an issue where new employees were incorrectly generating timesheets due to a misconfiguration with time off entries. The change ensures that only global time offs are considered, resolving this problem and improving timesheet accuracy for all employees.
Original PR description
**Steps to reproduce** 1. Have a future `resource.calendar.leaves` without a `calendar_id` but with a `resource_id`. To achieve this, you can for example install Payroll and Attendance, create a contract with the work entry source being attendances and with no working schedule. Then, create a time off in hours for that employee and validate it. In that case, the `hr.leave` has no `resource_calendar_id` as computed in `_compute_resource_calendar_id`. This leads to a `resource.calendar.leaves` record without a `calendar_id` once the time off is validated. 2. Create a new employee. A timesheet corresponding to the previously created time off is created. **Change** Make sure only global time offs are considered. opw-5248992
This update fixes an issue where outdated sub-channels were incorrectly unpinned, leading to unnecessary email notifications. The change now prevents unpinning sub-channels if there are still unread messages, ensuring users can easily access important threads. This improves the overall email experience.
Original PR description
Before this commit, outdated sub-channels were unpinned each time the vacuum ran. It occurs because a condition on sub-channel being pinned is missing. In practice, it's not a big deal funtionnaly but leads to useless notifications being sent. While at it, this PR prevents unpins when there are still unread messages in the sub-channel: the pin feature is used to see unread messages on otherwise hidden threads.
This update resolves a technical error within the Luxembourg payroll module (l10n_lu_hr_payroll) where a duplicate method was present. This fix ensures the payroll calculations are accurate and reliable, preventing potential discrepancies in employee payments.
Original PR description
There was a duplicate method in hr_payslip.py of Luxembourg Loca. Runbot error: 234334 Task: 5391399
This update resolves an issue preventing errors when sending vendor bills to eTIMS. The problem was triggered by removing product names or descriptions from the bill. This fix ensures smooth eTIMS integration for Kenyan businesses using the l10n_ke_edi_oscu module.
Original PR description
Backport of commit https://github.com/odoo/enterprise/pull/77750/commits/ed19d1db79d8ea3a228eee15b02dd8668123dd3c Because the issue is also reproducible in 18.0 using the same steps (removing the product name and the product description). sentry-7027319462
This update resolves an issue where a warning banner appeared during SEPA batch payments if a linked employee lacked an address. The change ensures the system correctly generates XML reports using the employee's address, even when the primary partner's address is missing. This improves the reliability of batch payment processing.
Original PR description
…oyee has an address Doing batch payment for sepa payment would generate a warning banner if the partner has no address ( city and country ) However in reality ( already working ) the xml report will be generated with the linked employee address in the case of absence of the partner address thus it should not show a warning. The change removes the warning in this case. task: 5266346 Forward-Port-Of: odoo/enterprise#99928
This update prevents a confusing traceback error that appeared when users tried to access the account.code.mapping view through Studio. The fix replaces a technical error with a clear message, guiding users to properly filter their searches and improving the overall user experience.
Original PR description
**Steps to reproduce:** * Install **Accounting** and ensure Studio is available. * Using **Studio**, create a new menu item pointing to the model *account.code.mapping*. * Save the menu and click it to open the corresponding view. **Observed behavior:** * Opening the Studio-created menu triggers a full traceback. **Cause:** * The model *account.code.mapping* overrides `_search()` and raises `NotImplementedError` when no `account_ids` can be extracted from the domain, which is the case when opening the view without filters. * The missing `_search` logic for empty domains was never implemented, and the resulting exception propagates to the UI as a traceback. **Fix:** * Replace the `NotImplementedError` with a user-friendly `UserError` explaining that the view cannot be opened without specifying relevant filters, preventing the traceback and improving clarity. opw-5183909
This update resolves an issue that previously blocked users from creating new Amazon accounts within a newly created company. The fix ensures that the system correctly handles the absence of warehouses and stock locations when a company is first set up, preventing a technical error.
Original PR description
Currently, an error occurs when user tries to create a new amazon account on a new company. Steps to replicate: - Install `sale_amazon`. - Create a new company and switch to it. - Go to Settings >…
Currently, an error occurs when user tries to create a new amazon account on a new company.
Steps to replicate:
- Install `sale_amazon`.
- Create a new company and switch to it.
- Go to Settings > Amazon account > Try to Create a new account.
Error:
```
File /home/odoo/odoo18/enterprise/sale_amazon/models/amazon_account.py, line 214, in create
'location_id': parent_location_data[0]['view_location_id'][0],
IndexError: list index out of range
```
Cause:
- Whenever a new company is created, it doesnt have any warehouses [1] and amazon stock locations [2].
- This causes the `parent_location_data` to be an empty list and causes error at line [3].
Solution:
- Assigning the `location_id` if the `parent_location_data` exists.
[1]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L206-L210
[2]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L201-L204
[3]: https://github.com/odoo/enterprise/blob/23f085bdba333807a25a2d41214b25f474c7edf8/sale_amazon/models/amazon_account.py#L214
sentry-7086464738This update corrects an issue where shipping labels for FedEx deliveries weren't including the company name entered during checkout. The fix ensures that the correct company name is used on shipping labels, improving order accuracy and customer experience. This was caused by a misunderstanding of how contact information is handled in the ecommerce system.
Original PR description
Steps to reproduce: - install ecommerce (i.e. website_sale) and delivery_fedex_rest - setup demo payment + fedex delivery method (including publishing it) - open the db while not logged in (i.e. in private browsing) - add something in the ecommerce page to cart + checkout > checkout - type in random contact info INCLUDING "Company Name" - continue checkout > select FEDEX as delivery method > pay now - go to Sales App > Sale orders > open the SO generated by ecommerce - open delivery + validate Expected result: - Shipping label with the name + company name from the ecommerce form Actual result: - company name is missing Issue is due to a company not being generated by ecommerce. Instead a string field is filled in (which is not visible when creating a contact directly via the contacts app). Code has been adapted to consider this use case. opw-5119089 Forward-Port-Of: odoo/enterprise#101376
This update fixes an issue where website form fields were displaying a placeholder text of 'null' instead of an empty field. This change ensures that all form fields, regardless of their type, appear blank when initially presented to users. This improves the user experience and consistency across the website.
Original PR description
Steps to see the issue: - Open website and start editing - Drop a form - Add a new field, or click on an optional field, the type of which we can modify - Set the field type to 'Selection' or 'Radio Buttons' (or any other that does not have placeholders) - Set the field type back to 'Text' => Field's placeholder is `'null'`, but it should just be empty. task-5383835
This update fixes an issue where downloading invoices as PDFs in version 18.0 resulted in a proforma document instead of the actual invoice. The fix ensures that the correct invoice PDF is generated when downloading via the 'Download' option, resolving a discrepancy in report delivery.
Original PR description
## Issue: In 18.0, downloading an invoice via the Download option returns a proforma PDF instead of the proper invoice The PDF (without payment) works as expected ## Cause: The standard report is hidden and therefore not listed in the Print options An equivalent report is added in the Download options by `get_extra_print_items()` But this action relies on `_get_invoice_legal_documents()` which only returns the invoice if it was already generated using `Send` The `Print` button works correctly because it uses the proper report directly ## Steps to reproduce: - Open an Invoice - Use the gear to Download > PDF - The file is a proforma opw-5111272
This update resolves an issue where the payment term line name wasn't correctly updated when changing the 'Customer Reference' on an invoice. The fix addresses a technical detail within the invoice processing logic, ensuring consistent and accurate naming of payment terms across invoices. This improves invoice clarity and reduces potential discrepancies.
Original PR description
### Issue: When changing the "Customer Reference" on an invoice, the name of the payment term line is not updated. ### Steps to reproduce: - Create an invoice with payment terms, confirm it - Modify…
### Issue:
When changing the "Customer Reference" on an invoice, the name of the payment term line is not updated.
### Steps to reproduce:
- Create an invoice with payment terms, confirm it
- Modify its "Customer Reference" to 'test' for example
- In the page "Journal Items" the name of the terms line has been recomputed to "test - INV/2025/XXXXX"
- Modify again its "Customer Reference" to 'abcdef' for example
- In the page "Journal Items" the name of the terms line was not recomputed
### Cause:
In `_compute_name()` we only write the name if this condition is `True`:
```py
if n_terms > 1 or not line.name or line._origin.name == line._origin.move_id.payment_reference or (
line._origin.move_id.payment_reference and line._origin.move_id.ref
and line._origin.name == f'{line._origin.move_id.ref} - {line._origin.move_id.payment_reference}'
):
line.name = name
```
The purpose of this line is to keep the name of the line if it was manually inputted. So the logic is: we only write the computed name if the previous name was computed. To check this, we check if `line._origin.name == f'{line._origin.move_id.ref} - {line._origin.move_id.payment_reference}'`.
The issue comes from the use of `_origin` in a compute. `_origin` refers to the record before we make any change. But it is meant to be used for `onchange` methods, in these the values are not yet written so `_origin` refers to the record before saving.
Here, when saving, `line._origin` is the same as `line`, so
- `line._origin.move_id.ref` is the new ref.
- `line._origin.name` uses the old ref (it's currently being recomputed).
### Solution:
Unfortunately, in the compute, there are no trace left of what were the previous values as the write already occurred.
The initial complaint justifying to keep custom line names was that on bills, the line name is empty. So when inputting a custom line name, it was removed by the compute method. The previous fix wanted to be more general by always keeping custom line names.
Considering this, this commit removes part of the previous fix: Now we only keep the custom line name when the compute method wants to remove it. So we keep the previous fix for bills.
### Note
There was a test verifying exactly that when manually deleting the line name, in the end
the line does not have a name. This will no longer be the case but a decision must be made between:
1. updating the line name when changing the ref
2. not recomputing line name when it has been changed manually
3. removing the line name when it's manually deleted
We can have 2 and 3 but not with 1 afaik.
opw-5246917This update simplifies MPF accounting within Odoo by making the MPF accounts unreconcilable by default. Previously, separate payments for MPF and wages were registered, creating complexity. Now, accountants will directly reconcile statements with the government account, streamlining the process.
Original PR description
Currently, we register two separate payments for MPF at the same time as we do for the employee's wages. This is not what we want to do; as both are not paid at the same time. MPF is also handled separately, and paid outside of Odoo on the government platform, making the registration of separate payments more complex for not many benefits. Thus, we make these accounts un-reconcilable by default, and will expect accountants to reconcile the statement with the account directly. task-5349299 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update introduces a flexible hook within the stock module's barcode functionality. This allows for adjustments to how barcodes are handled specifically when processing rental transactions within the sale stock module. Previously, there was no way to customize this behavior, and this change provides a controlled mechanism for adapting to future rental requirements.
Original PR description
Add a hook method to be used in barcode that can be overriden for `sale_stock_renting`. As there is no common module for these two module, this was put in their common ancestor. opw-5265874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves issues with the snippet modal's appearance in dark mode across different browsers. Specifically, it ensures consistent background colors and corrects the text color, regardless of the user's chosen color scheme. This improves the user experience and visual consistency within the Odoo editor.
Original PR description
This commit aims to fix two issues with the snippet modal in dark mode: 1. Streamline the background color accross browsers. Chrome takes into account the classes on the iframe for the background…
This commit aims to fix two issues with the snippet modal in dark mode: 1. Streamline the background color accross browsers. Chrome takes into account the classes on the iframe for the background color but Firefox and Safari don't. 2. The text below the custom snippets is always black, regardless of the color scheme selected. These 2 issues are fixed by using the color-scheme cookie value inside the snippet modal's iframe, adding as a meta tag and a custom class. task-5095262 | Browser(s) | Before | After | |--------|--------|--------| | Firefox/Safari | <img width="1192" height="847" alt="image" src="https://github.com/user-attachments/assets/f38f4944-3379-4300-8ec7-78a73dcce7f1" /> | <img width="1174" height="828" alt="image" src="https://github.com/user-attachments/assets/06e93051-737e-4abe-b937-79ce9a4e0a33" /> | | Chrome | <img width="1171" height="828" alt="image" src="https://github.com/user-attachments/assets/c5f1fcb4-eb55-4a26-83f5-e2c3c65ad0dd" /> | <img width="1174" height="833" alt="image" src="https://github.com/user-attachments/assets/c4066e4d-876c-455c-92eb-1ab0e115500c" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr