Daily updates from Odoo
Wednesday, December 10, 2025
108 changes
11 changes
Resolved issues and error corrections
This update fixes a visual bug where clicking the shape selector caused unwanted scrolling in smaller browser windows. The fix prevents the entire viewport from scrolling, resulting in a cleaner user experience. The change ensures consistent appearance across different screen sizes.
Original PR description
**Description of the problem** If the browser window has a limited height, clicking on a shape category in the shape selector scrolls both the shape selector pager (wanted) and the full viewport (not…
**Description of the problem** If the browser window has a limited height, clicking on a shape category in the shape selector scrolls both the shape selector pager (wanted) and the full viewport (not wanted), leading to white bands appearing at the bottom of the viewport. **How to reproduce** 1. Drop `s_picture` snippet 2. Open the background shape selector 3. Reduce the window height until only ~4 rows of shapes are visible 4. Click on "Linear" or "Creative" category 5. BUG: the viewport scrolled **Why the problem happens** When a shape category in the shape selector is clicked, the function `scrollIntoView` is used to bring the first shape of that category into view. By default, `scrollIntoView` scrolls all ancestor scroll-containers (and possibly the viewport) until the desired element is visible. This means that in specific situations the viewport could scroll too. **Fix** The function `scrollIntoView` should support the option `container: "nearest"`, which would force only the first scroll-container to scroll, avoiding scrolling the viewport. However, at the moment this option is not widely supported across browsers [1]. Thus `scrollIntoView` has been removed and its behaviour has been replicated by changing the `scrollTop` property of the `ShapeSelector` scroll-container. [1]: https://caniuse.com/mdn-api_element_scrollintoview_options_parameter_container_option task-5262945
This update resolves an issue where freezing a spreadsheet with empty lists didn't accurately represent the data. Specifically, the system incorrectly reported empty lists as containing text. This change ensures that frozen spreadsheets accurately reflect the absence of data, improving spreadsheet reliability and data consistency.
Original PR description
Steps to reproduce: - insert a list - expand the list beyond the number of records in order to have ODOO.LIST with no result - add =ISTEXT( <a reference to an empty ODOO.LIST> ) -> the result is TRUE - Freeze and share the spreadsheet => the result of ISTEXT is FALSE in the frozen version task-5360561 opw-5359100 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 Forward-Port-Of: odoo/odoo#237970 Forward-Port-Of: odoo/odoo#237511
This update resolves an issue where the system incorrectly processed invoice sequences without spaces, leading to errors. The change uses a more flexible method to extract the invoice number, ensuring compatibility with various sequence formats (including those without spaces). This prevents errors and improves the reliability of the CL-EDI functionality.
Original PR description
Before this commit, the method `_get_last_sequence` assumed that the document sequence always contained a space separator (e.g., "INV 12345") It attempted to extract the folio number using `res.split(" ")[-1]`.
If the sequence format did not contain a space, such as the standard Odoo format `INV/2025/01234`, the split would return the entire string. This caused a `ValueError` when trying to cast the non-numeric string to an integer:
ValueError: invalid literal for int() with base 10: 'INV/2025/01234'
This commit fixes the issue by using a regular expression to extract the last group of digits from the sequence string. This ensures the folio number is correctly retrieved regardless of the separator used (slash, space, or hyphen).
opw-5401509
Forward-Port-Of: odoo/enterprise#101665This update corrects a display issue on the Odoo portal where users were seeing outdated document counts. Now, users only see documents that are currently in their signing sequence, ensuring a more accurate and user-friendly experience. This improves clarity and prevents confusion for users managing sequential documents.
Original PR description
Version: - 18.0 Steps to reproduce: - Install sign - Upload document. - Add multiple signers - Set a sequential signing order Issue: - When documents require sequential signing, portal users see a banner saying there’s a new document to sign, even if it’s not yet their turn. Solution: - Update the counter to show only the documents that the user can currently sign. Impact: - Portal users now only see documents when it’s their turn to sign. Task-5226240 Forward-Port-Of: odoo/enterprise#98671
A technical issue in the Accounting module prevented users from opening a specific Studio menu item, resulting in a confusing traceback. This fix replaces the error with a clear message, guiding users to properly filter their views and ensuring a smoother user experience. This improves usability and prevents data access problems.
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 Forward-Port-Of: odoo/odoo#239076 Forward-Port-Of: odoo/odoo#236665
This update adds a new account for 'Salaries & Wages Payable' within the Hong Kong localization (l10n_hk) for Odoo. This resolves a previous accounting error and ensures accurate payroll reporting under Hong Kong's NET rules, improving financial accuracy.
Original PR description
Adds a new Salaries & Wages Payable account of type current liabilities in order to use it in payroll for the NET rules and solve a misconfiguration in the default data. task-5042786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237884
This update resolves an issue in the Hong Kong payroll module by changing the default account used for net salary payments. The change ensures accurate payslip generation and payment processing, addressing a previous error that caused payment problems. The new 'Salaries & Wages Payable' account is now used across most payroll structures.
Original PR description
Fixes the default account for NET salary rules in the Hong Kong payroll, which is using the wrong account type and causes issues when trying to pay payslips. It is replaced by a new Salaries & Wages Payable account, and we also set it for the structures other than 'Monthly Pay' task-5042786 Forward-Port-Of: odoo/enterprise#100835
This update clarifies the documentation for the HTML Editor's position plugin, ensuring developers have a better understanding of its functionality. The change improves clarity and reduces potential confusion when using this key component of the HTML Editor. This is a routine documentation update.
Original PR description
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 Forward-Port-Of: odoo/odoo#239168
This update addresses a requirement from the Belgian Peppol Authority. Users can still register with 9925, but a warning has been added to guide them towards the preferred 0208 (BCE/KBO) registration method. This ensures compliance and simplifies the registration process for our Belgian users.
Original PR description
The Belgian Peppol Authority wants us to register belgian users with 0208 (BCE/KBO) and not 9925 (BE VAT). It should still be possible to register with 9925 for some edge case, but let's make it clear to our users that this is not the regular path. task-none (feedback from support + TSB) Forward-Port-Of: odoo/odoo#239208 Forward-Port-Of: odoo/odoo#238737
This update fixes a problem where blog post publishing tests were inconsistent due to timing variations. By freezing time during key test steps, the tests now reliably produce the same results, ensuring accurate performance monitoring. This improves the reliability of our blog performance metrics.
Original PR description
Some blog post are published with a post_date matching the time the test is run meaning that they are not considered published. We have multiple possibilities when _get_url_hot_query is called: - all call to /blog are executed before the publication date: 9 - some call to /blog are executed after the publication date: 11 - only the last call is executed after the publication date: ~40-50 Using freezetime after the publication date ensures a consistent result This can be easily reproduced by freezing the time on the first calls in _get_url_hot_query and not on the last one. Runbot error [55754](https://runbot.odoo.com/odoo/error/55754) Forward-Port-Of: odoo/odoo#239236
This update fixes a potential issue where the system was incorrectly removing outdated sub-channels. The change ensures that the cleanup process only targets actual sub-channels, preventing unintended consequences and maintaining data integrity. This improves the stability and reliability of the channel management feature.
Original PR description
In [1], the `_gc_unpin_outdated_sub_channels` method was updated to avoid unpinning sub-channels multiple times. However, a condition is missing on `parent_channel_id` to restrict this gc to actual sub- channels. [1]: https://github.com/odoo/odoo/pull/238493 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 Forward-Port-Of: odoo/odoo#239248
26 changes
Resolved issues and error corrections
This update corrects an issue where the payment term line name wasn't updated when changing the 'Customer Reference' on an invoice. The fix addresses a technical detail within the invoicing system, ensuring consistent and accurate naming of payment terms across invoices. This improves data clarity and reduces potential errors.
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-5246917
Forward-Port-Of: odoo/odoo#237710This update addresses a requirement for Swiss payroll reporting (ELM transmission) by adding a specific group to the teleworking field in the HR contract and employee modules. This ensures accurate data is sent to the tax authorities, complying with Swiss regulations and avoiding potential reporting errors. The change was implemented as a fix to a previously identified issue.
Original PR description
Forward-Port-Of: odoo/enterprise#101691
This update resolves an issue where the system incorrectly processed invoice sequences without spaces, leading to errors. The change utilizes a regular expression to reliably extract the folio number regardless of the sequence format (space, slash, or hyphen), ensuring accurate invoice processing. This improves data integrity and prevents potential errors related to invoice generation.
Original PR description
Before this commit, the method `_get_last_sequence` assumed that the document sequence always contained a space separator (e.g., "INV 12345") It attempted to extract the folio number using `res.split(" ")[-1]`.
If the sequence format did not contain a space, such as the standard Odoo format `INV/2025/01234`, the split would return the entire string. This caused a `ValueError` when trying to cast the non-numeric string to an integer:
ValueError: invalid literal for int() with base 10: 'INV/2025/01234'
This commit fixes the issue by using a regular expression to extract the last group of digits from the sequence string. This ensures the folio number is correctly retrieved regardless of the separator used (slash, space, or hyphen).
opw-5401509
Forward-Port-Of: odoo/enterprise#101665This update corrects a technical issue that was preventing the generation of WPS payroll reports. The fix resolves traceback errors caused by an incorrect function usage, ensuring accurate report creation for Saudi Arabia. This improves the reliability of payroll reporting.
Original PR description
this commit addresses traceback errors occured due to incorrect usage of `_` function. task-5310946 Forward-Port-Of: odoo/enterprise#99789
This update corrects a display issue on the Odoo portal where users were seeing outdated document counts. Now, the portal only shows documents that are currently in the user's signing sequence, ensuring a more accurate and user-friendly experience. This improves clarity and prevents confusion for users managing sequential signatures.
Original PR description
Version: - 18.0 Steps to reproduce: - Install sign - Upload document. - Add multiple signers - Set a sequential signing order Issue: - When documents require sequential signing, portal users see a banner saying there’s a new document to sign, even if it’s not yet their turn. Solution: - Update the counter to show only the documents that the user can currently sign. Impact: - Portal users now only see documents when it’s their turn to sign. Task-5226240 Forward-Port-Of: odoo/enterprise#98671
A technical issue in the Accounting module prevented users from opening a Studio-created menu item linked to the account.code.mapping model, resulting in a confusing traceback. This fix replaces the error with a clear message, improving the user experience and preventing technical issues when accessing this feature.
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 Forward-Port-Of: odoo/odoo#239076 Forward-Port-Of: odoo/odoo#236665
This update clarifies the documentation for the HTML Editor's position plugin, ensuring developers understand how to use and configure it correctly. The change improves clarity and reduces potential confusion, leading to smoother development and integration of the HTML Editor feature. This is a minor documentation update.
Original PR description
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 Forward-Port-Of: odoo/odoo#239168
This update adds a new account for 'Salaries & Wages Payable' within the Odoo accounting system for Hong Kong (l10n_hk). This resolves a previous misconfiguration and ensures accurate tracking of payroll liabilities under Hong Kong's NET tax rules. It improves the reliability of payroll reporting and compliance.
Original PR description
Adds a new Salaries & Wages Payable account of type current liabilities in order to use it in payroll for the NET rules and solve a misconfiguration in the default data. task-5042786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237884
This update resolves a technical issue that caused a traceback when reloading the WorkEntries page in Studio. The fix ensures Studio correctly loads the page action, preventing errors and improving stability for users. This change enhances the overall Studio experience.
Original PR description
**Verison:** - saas-18.2 **Steps to reproduce:** - Go to an employee form view. - Click on the WorkEntries smart button. - Open Studio. - Reload page. **Issue:** - A traceback appears after reloading the page in Studio. **Cause:** - The smart button URL uses the model name hr.work.entry, but Studio’s service_action expects a path without dots. Because the action cannot be loaded correctly, the view breaks and triggers the traceback. **Solution:** - Return the proper path instead of the model name so that the action loads correctly. This prevents the error when reloading the page. task-5236317 Forward-Port-Of: odoo/odoo#235662
This update addresses a requirement from the Belgian Peppol Authority. Users can still register with 9925, but a warning has been added to guide them towards the preferred 0208 (BCE/KBO) registration method. This ensures compliance and provides clearer guidance for our Belgian users.
Original PR description
The Belgian Peppol Authority wants us to register belgian users with 0208 (BCE/KBO) and not 9925 (BE VAT). It should still be possible to register with 9925 for some edge case, but let's make it clear to our users that this is not the regular path. task-none (feedback from support + TSB) Forward-Port-Of: odoo/odoo#239208 Forward-Port-Of: odoo/odoo#238737
This update resolves an issue where internal URLs (like 'blob:') in tests previously required a mock 'fetch' to function correctly. This change ensures internal URLs work seamlessly without the need for mocking, improving the reliability and consistency of our test environment. It also addresses a previous issue where test mocks were being used outside of tests, now with stricter enforcement.
Original PR description
Before this commit, internal URLs (i.e. "blob:" and "data:") required 'fetch' to be mocked to work. This is wierd because these requests are handled directly by the browser and shouldn't require any…
Before this commit, internal URLs (i.e. "blob:" and "data:") required
'fetch' to be mocked to work. This is wierd because these requests are
handled directly by the browser and shouldn't require any particular
manipulation from the (mocked) server.
This commit ensures that internal URLs still work without fetch being
mocked.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
- Enterprise: https://github.com/odoo/enterprise/pull/101780
Forward-Port-Of: odoo/odoo#239011This update resolves a technical issue that was causing test failures. The change prevents the use of internal testing tools outside of the testing environment, ensuring the stability and reliability of our tests. This improves the overall quality and consistency of the Odoo Enterprise software.
Original PR description
This commit adapts tests failing due to a recent fix preventing the use of 'mock...' helpers outside of tests. - Community: https://github.com/odoo/odoo/pull/239237
This update fixes a problem where blog post publication times were inconsistent during performance tests. The change ensures that test results are always reliable by freezing time during key operations, preventing variations in how blog posts are processed. This improves the accuracy of our performance metrics.
Original PR description
Some blog post are published with a post_date matching the time the test is run meaning that they are not considered published. We have multiple possibilities when _get_url_hot_query is called: - all call to /blog are executed before the publication date: 9 - some call to /blog are executed after the publication date: 11 - only the last call is executed after the publication date: ~40-50 Using freezetime after the publication date ensures a consistent result This can be easily reproduced by freezing the time on the first calls in _get_url_hot_query and not on the last one. Runbot error [55754](https://runbot.odoo.com/odoo/error/55754) Forward-Port-Of: odoo/odoo#239236
This update fixes a potential issue where the system was incorrectly removing outdated sub-channels. The change adds a crucial check to ensure the cleanup process only affects actual sub-channels, preventing unnecessary actions and maintaining data integrity. This ensures a smoother and more reliable experience for users managing their channels.
Original PR description
In [1], the `_gc_unpin_outdated_sub_channels` method was updated to avoid unpinning sub-channels multiple times. However, a condition is missing on `parent_channel_id` to restrict this gc to actual sub- channels. [1]: https://github.com/odoo/odoo/pull/238493 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 Forward-Port-Of: odoo/odoo#239248
This update fixes a flaw in a stock test that could lead to inaccurate results. The test was failing due to slight timing differences in how moves were created, causing assertions to be incorrect. To ensure consistent and reliable test outcomes, the test now freezes time, guaranteeing the test always behaves as intended.
Original PR description
In a previous fix in #174442, we ensured that the order of moves when freeing reservation would remain deterministic, even if move dates were the same. In the test however, we didn't make sure that both moves were created at the exact same time, meaning that in some case, a millisecond could pass between the two moves creation, making the later assert checking if both dates are the same wrong, and making the test irrelevant. Now freeze the time at an irrelevant date just to make sure the test always does what it was intended to do. runbot-233470 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239229
This update resolves an issue where users with access to multiple companies but only one employee were unable to schedule planning slots for those companies. The fix restores the previous behavior, allowing users to assign themselves to planning slots across all companies they have access to, regardless of the number of employees they have within those companies. This ensures consistent planning functionality.
Original PR description
Since #91616, if a user has access to multiple companies but only has an employee in one, they are unable to assign themselves to a planning slot from a company other than that of their employee. This was not the case in previous versions and is causing issues in our internal db. To restore the previous behavior, any user with access to a company but only 1 employee will be able to assign themselves to slots of said company. opw-5163200
This update fixes an issue where subscription details weren't being displayed correctly within the dashboard. Specifically, it addressed a problem with how subscription data was filtered and presented, ensuring subscription titles are now shown accurately and preventing related sale order items from appearing in the wrong section. This improves the user experience for managing subscriptions.
Original PR description
Before this commit, when subscriptions were linked to the analytic account of a project, the sale order items appears in an unwanted section when the section is unfolded. Meanwhile, when the subscription section is unfolded the title of the subscriptions items are not correctly displayed. The first issue is due to the fact that we did not correctly exclude the subscriptions items from the domain. The second issue is due to the fact that we fetch the field 'name' from the subscription search instead of the field 'display_name' task-5159781 Forward-Port-Of: odoo/enterprise#97238
This update fixes an issue where multiple quality checks were being created for the same picking when adding additional products. The change ensures that only one quality check is generated per operation, streamlining the picking process and preventing unnecessary quality control tasks. This improves efficiency and reduces potential errors.
Original PR description
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations…
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations field). 3. Create a Receipt containing one product. 4. Click the Mark as To Do button. 5. Add another product to the same Receipt and save it. Observation: -------------------------- Two quality checks are generated for the same picking, despite the tooltip indicating that only one check should be created per operation. Issue: -------------------------- No validation existed to verify whether an operation-based quality check had already been created for the picking when adding additional stock moves after confirmation. Solution: -------------------------- Add a check ensuring that if a quality check already exists for the same picking type and operation (with no product or category criteria), no additional operation-based quality checks are created. opw-5249233 Forward-Port-Of: odoo/enterprise#100118
This update ensures that newly imported customer and supplier records are automatically recognized as ‘companies’ within Odoo. This improves data accuracy and streamlines processes related to invoicing and reporting. 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 Forward-Port-Of: odoo/odoo#239116 Forward-Port-Of: odoo/odoo#238793
This update fixes an issue where the LWF report incorrectly included data from previous runs when a department was selected. The fix clears existing report data before generating a new report, ensuring accurate reporting with department selection. This improves the reliability of the LWF report for payroll calculations.
Original PR description
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. -…
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. - Download report , all employee will come in report. - Now select any department and download report again. - All employee(It is fetching previous data) + employee from selected department will come in report. Cause: - In '_compute_line_ids()' wizard computed field 'line_ids' doesn't properly reset previous lines as a result previous data remains in lines. - When the department is changed, the wizard id remain same, so previously lines added to wizard are coming with new lines. - Using `Command.link()` for new lines is invalid because it requires an existing database record ID, but wizard lines are creating inside a compute method so their IDs are only saved after the flush. Fix: - Since this is a stable version, clear the previously existing lines using 'Command.clear()' before creating new ones. Task - 5366498 Forward-Port-Of: odoo/enterprise#101190
This update resolves an issue where outdated records in the system's data management (ir.model.data) persisted after a model was removed. These lingering records could cause unexpected errors and performance problems. This fix ensures data is cleaned up properly, improving system stability and reliability.
Original PR description
When a model is unlinked, the `ir.model.data` related to that model wasn't cleaned up. This leaves dangling records that can generate issues. sentry-6938852090 Forward-Port-Of: odoo/odoo#236615
This update resolves an issue where the demo stock data installation incorrectly used US currency, causing problems when users have databases with different currencies (like EUR). The fix ensures the demo data installation works correctly regardless of the company's currency setting, improving data consistency.
Original PR description
Currently in the `_merge_move_itemgetter` the system call `self.company_id.currency_id.decimal_places`. However the demo data of stock create a database with US currency and some `stock.move` in it. If we have an existing database with EUR for example. The upper call will return a `currency_id.decimal_places` since we have multiple currency. The best solution, would be to split `_action_confirm` to do a loop by company. But it would need a small refactoring and we will do a minimal diff to fix this issue. Using the smallest currency among all the company is not always correct but it's a super edge case and we should probably remove this code since it went to far. Close #230965, #234078 Forward-Port-Of: odoo/odoo#239273
This update fixes an issue where job activity counts on the dashboard were not updating correctly after activities were marked as completed. The change ensures that only active activities are considered in the dashboard reporting, preventing inaccurate counts and improving the reliability of recruitment data. This resolves a previous bug related to activity persistence and archiving.
Original PR description
**Steps to reproduce:** - Create an activity type with `keep_done` enabled - Go to Recruitment - Open a job position - Select an application - Create an activity with the new activity type - Ensure its date is in the past - Go to the dashboard, you will see the overdue activity - Go to the record and mark the activity as done - Go back to the dashboard, the activity count is not updated **Issue:** Before https://github.com/odoo/odoo/commit/d290f3f3f23e activities were not kept by default in the database when marked as done. But it was still possible to enable this in the activity type using `keep_done`. The current behavior is to always keep the activity and archive it on done. In both cases the `_compute_activities` raw query should not take archived activities into account. **Fix:** Added the activity active check to the raw query. opw-5108204 Forward-Port-Of: odoo/odoo#238856 Forward-Port-Of: odoo/odoo#236591
This update fixes an issue where pressing Enter multiple times before a star rating created duplicate elements. It also resolves a problem with line breaks next to non-editable elements, ensuring line breaks now function correctly. This improves the user experience and stability of the HTML editor.
Original PR description
**Current behavior before PR:** - When pressing Enter twice before a star rating (3-star or 5-star), the previous paragraph incorrectly ended up containing a single star. - When performing a line break next to a contenteditable false element, `deepEditableSelection` returned a selection whose anchor was inside that non-editable element. Since the selection was inside a contenteditable false element, the `insertLineBreakElement` method returned early without doing anything. **Desired behavior after PR is merged:** - Pressing Enter before the star rating no longer duplicates a star in the previous paragraph. - When `deepEditableSelection` returns a selection whose anchor lies inside a contenteditable false element, we now use an editable selection instead. This prevents the anchor from ending up inside a non-editable element and allows the line break to work correctly. task-5079270 Forward-Port-Of: odoo/odoo#226433
This update resolves an issue where adding a second tax to a bank rec line would delete the first. It now correctly allows multiple taxes to be applied, addressing inconsistencies in how tax calculations were handled, particularly when dealing with refunds.
Original PR description
This commit will allow to add multiple taxes on a move line in the bank rec widget. For the moment, when having a line with a tax, and then add one more. The previous tax get deleted. task-5081786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue where changes to parser rules couldn't be saved after the parser was initially set up. This change ensures that parser rules are consistently applied, improving data accuracy and stability. It's a routine maintenance update.
Original PR description
The parser rules cannot be modified once the parser has been instantiated. task-5091744 Forward-Port-Of: odoo/odoo#239046
3 changes
Resolved issues and error corrections
This update corrects a display issue on the Odoo portal where users were seeing outdated document counts. Now, the portal only shows users documents that are currently in their signing sequence, improving the user experience and preventing confusion. This ensures users are only notified of new documents when it's their turn to sign.
Original PR description
Version: - 18.0 Steps to reproduce: - Install sign - Upload document. - Add multiple signers - Set a sequential signing order Issue: - When documents require sequential signing, portal users see a banner saying there’s a new document to sign, even if it’s not yet their turn. Solution: - Update the counter to show only the documents that the user can currently sign. Impact: - Portal users now only see documents when it’s their turn to sign. Task-5226240 Forward-Port-Of: odoo/enterprise#98671
This update fixes an issue where multiple quality checks were being created for the same picking when adding additional products. The change ensures that only one quality check is generated per operation type (Receipts), streamlining the process and preventing data inconsistencies. This improves efficiency and accuracy in stock management.
Original PR description
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations…
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations field). 3. Create a Receipt containing one product. 4. Click the Mark as To Do button. 5. Add another product to the same Receipt and save it. Observation: -------------------------- Two quality checks are generated for the same picking, despite the tooltip indicating that only one check should be created per operation. Issue: -------------------------- No validation existed to verify whether an operation-based quality check had already been created for the picking when adding additional stock moves after confirmation. Solution: -------------------------- Add a check ensuring that if a quality check already exists for the same picking type and operation (with no product or category criteria), no additional operation-based quality checks are created. opw-5249233 Forward-Port-Of: odoo/enterprise#100118
This update corrects a translation issue within the Odoo Enterprise reports for Marathi-speaking users. The translations were previously stored in separate files, leading to inconsistencies. This change consolidates all necessary translations within the report XML files, ensuring accurate reporting in Marathi.
9 changes
Resolved issues and error corrections
This update corrects a discrepancy in the tests for Odoo's Hong Kong payroll module. The changes ensure the tests accurately reflect the specific salary property requirements for Hong Kong, leading to more reliable payroll calculations. This improves the overall accuracy and compliance of the system.
Original PR description
task-5380844
This update simplifies the appraisal process by removing a duplicate menu option within the Odoo Enterprise system. Previously, users could initiate an appraisal campaign through two different pathways, leading to unnecessary complexity. This change consolidates the launch process for a more intuitive user experience.
Original PR description
purpose: The way to launch an appraisal campaign is double, you can have it from the secondary button and from the cog wheel. Hence, removing it from the cog wheel as it's not necessary task-id: 5395096
This update fixes an issue where holiday pay recovery was incorrectly applied to employees with older contracts. The change ensures that holiday pay recovery is applied appropriately when contracts are reopened, reflecting the employee's status as a new hire.
Original PR description
Purpose ======= Normally contracts start and end dates should be configured without being closed and reopened at each version date. But, if it is the case, holiday pay recovery could be applied on older employees because it is considered the employee just joined the company, and there is an amount to recover. Forward-Port-Of: odoo/enterprise#101564
This update resolves an issue where clicking a Field Service record in the kanban view with the middle mouse button opened it in the same tab. The fix ensures that records now open in a new tab, improving user workflow and efficiency. This change was made to address a usability concern.
Original PR description
Steps to reproduce: 1. Install `industry_fsm` 2. Open Field service module 3. In the kanban view, click a record with the middle mouse button Issue: - The record opens in the same tab instead of a new tab. Cause: - `FsmMyTaskKanbanRecord` overrides `onGlobalClick` without propagating the `newWindow` argument, preventing the expected new-tab behavior. Solution: - Forward the `newWindow` parameter to the parent implementation to restore the correct handling of the middle mouse click opw-5351842 Forward-Port-Of: odoo/enterprise#100926
This update resolves a misleading warning banner that appeared when processing SEPA batch payments for partners without addresses. The system now correctly uses the linked employee's address, ensuring accurate report generation without unnecessary alerts. This improves the user experience and avoids confusion.
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 resolves an issue where the AI feature would crash when accessed during the forecast report generation process. The fix addresses a technical incompatibility between the AI's code and the type of action being used (ir.actions.client), preventing the error and ensuring the AI functionality remains stable.
Original PR description
Asking the AI while the user is in the ``ir.actions.client`` action (e.g., forecast report) triggers a traceback. Steps to reproduce the error: - Install ``Inventory`` module - Open any product > Click the forecast report smart button - Click the AI icon from the systray - Ask anything in AI Traceback: ```py AttributeError: 'ir.actions.client' object has no attribute 'search_view_id' ``` https://github.com/odoo/enterprise/blob/ba78913e01f215b44389a5bf0bca0e6886deab1e/ai/models/ai_agent.py#L770-L778 Here, only ``ir.actions.act_window`` actions have the ``search_view_id`` field, while ``ir.actions.client`` does not. So when the ``current_action`` is an ``ir.actions.client``, accessing ``search_view_id`` results in the above error. sentry-6942041136 Forward-Port-Of: odoo/enterprise#100609
This update makes the transcript field in VoIP calls read-only, preventing accidental modifications. This ensures the integrity of call recordings and improves data accuracy for reporting and analysis. This change enhances data reliability within the VoIP AI module.
Original PR description
Task-5404471
This update refines how ringtones are handled in the VoIP system. Previously, ringtones were a global setting, but now they are linked to individual user sessions, aligning with how ringtones are triggered by session activity. This improves system efficiency and accuracy.
Original PR description
Before this commit, ringtones were modeled as a global concept, but this is not correct: ringtones should be tied to a session. This becomes clear when you consider what triggers a ringtone: it's always linked to a progress in the lifecycle of a session. Guards such as `if (isActiveSession)` before playing or stopping ringtones are also a clear symptom of bad modeling, where some concerns are made global when they shouldn't be. After this commit, ringtones are tied to a session.
This update fixes a problem where running IoT tests were causing disruptions to other tests within Odoo. The change ensures that temporary modifications made during IoT testing are removed afterward, preventing interference and ensuring more reliable test results. This improves the stability and accuracy of our overall testing process.
Original PR description
Running iot tests may impact other tests due to monkeypatching done when importing iot_drivers (notably requests methods and http dispatchers). This commit ensures those patches are reverted at the end of the iot tests Runbot error [233918](https://runbot.odoo.com/odoo/runbot.build.error/233918)
32 changes
Resolved issues and error corrections
This update corrects a display issue on the Odoo portal where users were seeing outdated document counts. Now, the portal only shows users documents that are currently in their signing sequence, improving the user experience and ensuring accurate document tracking. This prevents confusion and streamlines the signing process.
Original PR description
Version: - 18.0 Steps to reproduce: - Install sign - Upload document. - Add multiple signers - Set a sequential signing order Issue: - When documents require sequential signing, portal users see a banner saying there’s a new document to sign, even if it’s not yet their turn. Solution: - Update the counter to show only the documents that the user can currently sign. Impact: - Portal users now only see documents when it’s their turn to sign. Task-5226240 Forward-Port-Of: odoo/enterprise#98671
This update prevents a confusing traceback error when using Studio to create a menu item for the account.code.mapping model. The fix replaces a technical error with a user-friendly message, ensuring a smoother experience for users creating and accessing this feature.
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 Forward-Port-Of: odoo/odoo#239076 Forward-Port-Of: odoo/odoo#236665
This update ensures that older IoT boxes running Odoo 19.1 or later will always be upgraded to Odoo 19.0. This prevents issues caused by a change in Python version requirements, safeguarding the IoT boxes from potential malfunctions.
Original PR description
The IoT boxes using image 25.07 or less are running Python 3.11. In Odoo 19.1 the minimum Python version will change to 3.12. In order to prevent IoT boxes from being bricked after checking out, we add a check to make sure that 19.0 will be checked out if the database is using a version of 19.1 or higher. task-5380815 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a potential issue where the system was incorrectly removing outdated sub-channels. The change adds a crucial check to ensure the cleanup process only affects actual sub-channels, preventing unintended consequences and maintaining data integrity. This ensures our email system operates more reliably.
Original PR description
In [1], the `_gc_unpin_outdated_sub_channels` method was updated to avoid unpinning sub-channels multiple times. However, a condition is missing on `parent_channel_id` to restrict this gc to actual sub- channels. [1]: https://github.com/odoo/odoo/pull/238493 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 Forward-Port-Of: odoo/odoo#239248
This update resolves an issue where freezing a spreadsheet containing empty data rows incorrectly reported the data as text. The fix ensures that empty strings are handled correctly when freezing, preventing false positive results in data analysis. This improves the reliability of spreadsheet reports.
Original PR description
Steps to reproduce: - insert a list - expand the list beyond the number of records in order to have ODOO.LIST with no result - add =ISTEXT( <a reference to an empty ODOO.LIST> ) -> the result is TRUE - Freeze and share the spreadsheet => the result of ISTEXT is FALSE in the frozen version task-5360561 opw-5359100 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 Forward-Port-Of: odoo/odoo#239107 Forward-Port-Of: odoo/odoo#237511
This update adds a new account for 'Salaries & Wages Payable' within the Odoo Hong Kong localization. This change is necessary to correctly account for payroll liabilities under Hong Kong's NET rules and resolves an existing issue with default data configuration. It ensures accurate financial reporting related to employee compensation.
Original PR description
Adds a new Salaries & Wages Payable account of type current liabilities in order to use it in payroll for the NET rules and solve a misconfiguration in the default data. task-5042786 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237884
This update addresses a requirement from the Belgian Peppol Authority. The system now provides a warning to users attempting to register with the 9925 (BE VAT) method, as this is no longer the standard approach. This ensures users are guided toward the correct 0208 (BCE/KBO) registration for optimal compliance.
Original PR description
The Belgian Peppol Authority wants us to register belgian users with 0208 (BCE/KBO) and not 9925 (BE VAT). It should still be possible to register with 9925 for some edge case, but let's make it clear to our users that this is not the regular path. task-none (feedback from support + TSB) Forward-Port-Of: odoo/odoo#239208 Forward-Port-Of: odoo/odoo#238737
This update fixes an issue where repair order moves weren't properly linked in the inventory reporting system. The change was necessary due to a previous update that removed a key field. The fix ensures that repair order moves are accurately reflected in move history reports, improving data accuracy.
Original PR description
### Steps to reproduce: - Create and confirm a repair order for a storable product - Go to Inventory > Reporting > Moves History #### > The related move line appears without reference ### Issue: The…
### Steps to reproduce: - Create and confirm a repair order for a storable product - Go to Inventory > Reporting > Moves History #### > The related move line appears without reference ### Issue: The issue has been introduced with facf4eba6cd0504aae949c23454c6ffa9eaa9c3f which purpose is was to remove the `name` field of the `stock.move` model. However, prior to saas-18.4, the reference of the move relied on its name: https://github.com/odoo/odoo/blob/404cb10283cbc706eae67dd793ced363273f3602/addons/stock/models/stock_move.py#L325-L328 To not lose this reference an override of the `_compute_reference` compute method was introduced for repair orders. But it is currently ineffective since `moves_with_reference` is a set of records and not a set of ides which makes it the method call its super method on every records including the repair orders. opw-5385004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239215
This update fixes a flaw in a stock test that caused inconsistent results due to timing differences. The test now freezes time to ensure consistent execution, guaranteeing the test accurately reflects the intended functionality. This improves the reliability of our stock management testing.
Original PR description
In a previous fix in #174442, we ensured that the order of moves when freeing reservation would remain deterministic, even if move dates were the same. In the test however, we didn't make sure that both moves were created at the exact same time, meaning that in some case, a millisecond could pass between the two moves creation, making the later assert checking if both dates are the same wrong, and making the test irrelevant. Now freeze the time at an irrelevant date just to make sure the test always does what it was intended to do. runbot-233470 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239229
This update resolves an issue where duplicate contacts were incorrectly flagged as linked to employees, preventing their deletion. The change ensures that contacts are properly linked to employee records, allowing for accurate contact management and deletion functionality. This was caused by a previous update and has been corrected to use the `employee_ids` field for validation.
Original PR description
Steps to reproduce: 1. Take or create a contact linked to an employee. 2. Duplicate that contact. (The duplication won't be linked to any employee) 3. Try to delete the duplicated contact. This behavior was introduced in the commit 834ec2d. Replace the computed boolean `employee` field with direct `employee_ids` check to ensure we're validating against actual linked employee records. opw-5209516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update caused an error when using the AI feature within certain reports (like forecast reports). This fix prevents the error by ensuring the AI functionality doesn't attempt to access a field that isn't available in the 'ir.actions.client' action type. This ensures the AI feature is consistently reliable.
Original PR description
Asking the AI while the user is in the ``ir.actions.client`` action (e.g., forecast report) triggers a traceback. Steps to reproduce the error: - Install ``Inventory`` module - Open any product > Click the forecast report smart button - Click the AI icon from the systray - Ask anything in AI Traceback: ```py AttributeError: 'ir.actions.client' object has no attribute 'search_view_id' ``` https://github.com/odoo/enterprise/blob/ba78913e01f215b44389a5bf0bca0e6886deab1e/ai/models/ai_agent.py#L770-L778 Here, only ``ir.actions.act_window`` actions have the ``search_view_id`` field, while ``ir.actions.client`` does not. So when the ``current_action`` is an ``ir.actions.client``, accessing ``search_view_id`` results in the above error. sentry-6942041136
A test within the hr_payroll_account module failed when run without the standard demo data. This was due to a missing default account configuration. The update adds a default account to the test environment and corrects the accounting balance, ensuring the test now passes reliably.
Original PR description
Steps to reproduce: Install hr_payroll_account on a fresh db without demo data. Run the test test_payment_hr_payslip. The test fails. Cause: With demo data, the us payroll was installed and with it, the payroll accounts were configured. Without demo data, default account is missing. Fix: Add a default account in the test and fix the amount balance with a new debit rule to balance the credit one. Task: 5386528 Runbot Error: 161615 Forward-Port-Of: odoo/enterprise#101299
This update resolves a technical issue causing errors in the generation of WPS payroll reports for Saudi Arabia. The fix corrects an incorrect use of a function within the payroll module, ensuring reports are now created without errors. This improves the reliability of payroll reporting.
Original PR description
this commit addresses traceback errors occured due to incorrect usage of `_` function. task-5310946 Forward-Port-Of: odoo/enterprise#99789
This update fixes a technical issue where sub-channels were incorrectly being unpinned, leading to unnecessary notifications. The change also prevents unpinning sub-channels if members still have unread messages, ensuring the pin feature functions as intended for accessing important threads. This improves the reliability of notifications and the overall user 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. Forward-Port-Of: odoo/odoo#239242 Forward-Port-Of: odoo/odoo#238493
This update resolves a visual bug where the shape selector would cause unwanted scrolling on the browser window when viewing limited shape categories. The fix adjusts the scrolling behavior to prevent viewport disruption, ensuring a cleaner user experience when the window is small.
Original PR description
**Description of the problem** If the browser window has a limited height, clicking on a shape category in the shape selector scrolls both the shape selector pager (wanted) and the full viewport (not…
**Description of the problem** If the browser window has a limited height, clicking on a shape category in the shape selector scrolls both the shape selector pager (wanted) and the full viewport (not wanted), leading to white bands appearing at the bottom of the viewport. **How to reproduce** 1. Drop `s_picture` snippet 2. Open the background shape selector 3. Reduce the window height until only ~4 rows of shapes are visible 4. Click on "Linear" or "Creative" category 5. BUG: the viewport scrolled **Why the problem happens** When a shape category in the shape selector is clicked, the function `scrollIntoView` is used to bring the first shape of that category into view. By default, `scrollIntoView` scrolls all ancestor scroll-containers (and possibly the viewport) until the desired element is visible. This means that in specific situations the viewport could scroll too. **Fix** The function `scrollIntoView` should support the option `container: "nearest"`, which would force only the first scroll-container to scroll, avoiding scrolling the viewport. However, at the moment this option is not widely supported across browsers [1]. Thus `scrollIntoView` has been removed and its behaviour has been replicated by changing the `scrollTop` property of the `ShapeSelector` scroll-container. [1]: https://caniuse.com/mdn-api_element_scrollintoview_options_parameter_container_option task-5262945 Forward-Port-Of: odoo/odoo#237767
This update resolves a problem in the pos_settle_due tests that were failing due to a hardcoded year. The fix ensures the tests work correctly regardless of the current year, improving the reliability of the testing process. This prevents potential disruptions to the POS settlement functionality.
Original PR description
When running the pos_settle_due tests with faketime, the tour pos_settle_account_due was failing cause of a hardcoded year which would not work on another year. This is now fixed. runbot-error: 234052 Forward-Port-Of: odoo/enterprise#101217
This update ensures that when new partner records are imported into Odoo, they are automatically designated as 'companies.' This correction improves data accuracy and streamlines processes related to account management and EDI billing. 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 Forward-Port-Of: odoo/odoo#239116 Forward-Port-Of: odoo/odoo#238793
This update fixes an issue where the LWF report incorrectly included data from previous runs when a department was selected. The fix clears existing report data before generating a new report, ensuring accurate reporting for employees across departments. This improves the reliability of payroll reporting.
Original PR description
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. -…
Step to reproduce: - Install l10n_in_hr_payroll. - Create 3-4 employee with labour welfare fund, all in different departments. - Open the LWF report wizard and do not select any department. - Download report , all employee will come in report. - Now select any department and download report again. - All employee(It is fetching previous data) + employee from selected department will come in report. Cause: - In '_compute_line_ids()' wizard computed field 'line_ids' doesn't properly reset previous lines as a result previous data remains in lines. - When the department is changed, the wizard id remain same, so previously lines added to wizard are coming with new lines. - Using `Command.link()` for new lines is invalid because it requires an existing database record ID, but wizard lines are creating inside a compute method so their IDs are only saved after the flush. Fix: - Since this is a stable version, clear the previously existing lines using 'Command.clear()' before creating new ones. Task - 5366498 Forward-Port-Of: odoo/enterprise#101190
This update resolves a potential issue where upgrading to a newer Odoo version (19.1) could cause compatibility problems with older IoT box hardware. The change prevents automatic checkout of versions above 19.0, ensuring stability and preventing the need for a database re-flash. It also confirms compatibility between the 19.0 IoT Box and the 19.1 database.
Original PR description
To avoid reflashing after a db update to 19.1, which would lead to python version incompatibility (3.12 min but iot box v25_07 and under have 3.10), we now prevent checkout above v19.0. We also ensure that 19.0 IoT Box is compatible with 19.1 db. Task: 5380815
This update enhances the website builder by adding URL autocomplete suggestions when replacing images. Previously, users couldn't easily enter URLs for image replacements, leading to a less efficient workflow. Now, users will receive helpful suggestions as they type, streamlining the image replacement process.
Original PR description
This commit extends the default BuilderUrlPicker by WebsiteUrlPicker for ReplaceMediaOption to enable URL suggestions/autocomplete. Steps to reproduce: - Drop a snippet with an image - Click on the image - Click on the chain icon next to "Replace" button - Type in "Your URL" field - No url suggestion or autocomplete task-5090136
This update fixes a problem where blog posts weren't consistently appearing as published during performance tests due to timing variations. By freezing time during specific test calls, the tests now produce reliable and repeatable results, ensuring accurate performance measurements. This improves the stability and accuracy of our blog performance monitoring.
Original PR description
Some blog post are published with a post_date matching the time the test is run meaning that they are not considered published. We have multiple possibilities when _get_url_hot_query is called: - all call to /blog are executed before the publication date: 9 - some call to /blog are executed after the publication date: 11 - only the last call is executed after the publication date: ~40-50 Using freezetime after the publication date ensures a consistent result This can be easily reproduced by freezing the time on the first calls in _get_url_hot_query and not on the last one. Runbot error [55754](https://runbot.odoo.com/odoo/error/55754) Forward-Port-Of: odoo/odoo#239236
This update resolves an issue where data records related to deleted models remained in the system, potentially causing errors. The fix ensures that these records are properly removed when a model is no longer needed, improving data integrity and stability. This prevents potential problems and ensures a cleaner system.
Original PR description
When a model is unlinked, the `ir.model.data` related to that model wasn't cleaned up. This leaves dangling records that can generate issues. sentry-6938852090 Forward-Port-Of: odoo/odoo#236615
This update resolves an issue where the demo stock data installation incorrectly used US currency, causing problems when users have databases with different currencies (like EUR). The fix ensures the demo data installation works correctly regardless of the company's currency setting, improving data consistency.
Original PR description
Currently in the `_merge_move_itemgetter` the system call `self.company_id.currency_id.decimal_places`. However the demo data of stock create a database with US currency and some `stock.move` in it. If we have an existing database with EUR for example. The upper call will return a `currency_id.decimal_places` since we have multiple currency. The best solution, would be to split `_action_confirm` to do a loop by company. But it would need a small refactoring and we will do a minimal diff to fix this issue. Using the smallest currency among all the company is not always correct but it's a super edge case and we should probably remove this code since it went to far. Close #230965, #234078 Forward-Port-Of: odoo/odoo#239273
This update fixes a bug that prevented users from deleting subthreads in group chats without encountering an error. The change ensures the system correctly handles the deletion process by clearing the recordlist, preventing errors related to missing data. This improves the stability and reliability of the chat functionality.
Original PR description
Before this commit, in some cases deleting the subthread would result in an error. The `correspondent` field on the thread model would be set to undefined. The deletion would react due to owl and request the `correspondent` value which fails since undefined at that time. Steps to reproduce: - install mail and im_livechat modules - create a group chat (3 users minimum) - create a subthread - delete the subthread This commit aims to clear the recordlist instead of forcing undefined (if possible) therefore making calls to get the value while deleting still possible. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a visual issue where calendar event popovers were misaligned, particularly with longer events. The fix enhances the popover's positioning flexibility, allowing for more accurate display. Additionally, the team reverted a previous change and removed an unnecessary code component for improved stability.
Original PR description
Fixes an issue where the calendar event popover was positioned incorrectly for long events displayed in the day scale. The fix introduces a new positioning parameter that allows the popover logic to test a wider range of possibilities, including center positioning, which resolves the identified bug case. Additionally, this commit: - Restores the default calendar popover position back to 'right', as the previous change (https://github.com/odoo/odoo/pull/236503) did not properly address the root issue. - Removes an unnecessary useEffect hook from the Many2ManyAttendeeExpandable component. task-5401647
This update fixes an issue where search suggestions in Odoo (Command Palette, Many2X fields, Settings) displayed escaped HTML entities. The change refines the search logic to now show unescaped HTML entities, improving the user experience and allowing for proper rendering of special characters in search results. This ensures search suggestions accurately reflect the underlying data.
Original PR description
**Before this commit:** Search suggestions **(Command Palette, Many2X fields, Settings)** displayed escaped HTML entities because both the user input and the source data were being escaped before regex matching. For eg: **(e.g. & -> &)**. **After this commit:** Search suggestions now displays unescaped HTML entities. This is achieved by refining the regex to avoid matching characters inside **&...;** sequences. The regex is tailored around the characters escaped by `htmlEscape` in **OWL: ["&", "<", ">", "'", "\"", ""]`**. task-5124883 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update optimizes the automated testing of Odoo's email functionality. Initially, a frequent check was implemented to ensure accurate test results, but this caused significant CPU load. This change reduces the check frequency and focuses it only on specific elements, improving overall test execution times without negatively impacting system performance.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/238747
PR above improves execution time of the `@mail` suite by checking selector every 100ms tick, as sometimes the mutation observer fails to see changes and the contains pass after the 3 seconds timeout, thus wasting time. The affected selectors are the ones targeting the `:value` or with param `{ value }`.
However 100ms tick adds significant CPU load, which is a problem as runbot execution time is quite heavily reliant on CPU load. So while this makes `@mail` test suite faster in ideal condition, this worsen execution time in some cases [1].
This commit minimizes the problem by increasing the tick from 100ms to 500ms, and also limit the tick behavior to selectors targeting `:value` or `{ value }`. That way the majority of the time it relies on mutation observer so doesn't worsen CPU load, and only with value that this uses tick system.
[1]: https://runbot.odoo.com/runbot/build/95207707This update allows regular users to find contacts during VoIP call creation by enabling the search for contact extensions. Previously, this feature was limited to users with elevated permissions due to access restrictions on user extension data. This change improves the usability of the VoIP module for all users.
Original PR description
When a call is created, VoIP tries to associate it with a contact based, among other things, one the contact's extension. However, the extension is stored on the res.users.settings record of other users, which regular users don't have access to. This commit updates get_contact_info to perform the search for the extension in sudo mode, so that regular users also get meaningful results. [Task-5395010](https://www.odoo.com/odoo/project/5778/tasks/5395010)
This update clarifies the ‘Refresh e-Invoices status’ button to only update status information, separating it from the automated process of fetching e-invoice documents. Previously, this button triggered a combined update of status and document synchronization, causing potential delays. Now, document retrieval continues to be handled by scheduled background tasks.
Original PR description
The “Refresh e-Invoices status” button previously also triggered the crons that fetch eArchive and eInvoice sales documents, mixing status updates with document synchronization. This change scopes the button to status updates only. Fetching eArchive/eInvoice sales documents remains handled by their scheduled crons. task-5344128
This update streamlines the process of obtaining Nilvera PDFs for invoices created within Odoo. Previously, a complex system was in place that wasn't functioning correctly. Now, a dedicated cron job automatically fetches the PDF and attaches it to the invoice, ensuring accurate Einvoice documentation.
Original PR description
Commit 2e1b0f16d8732e9450caf9ac313312e7ad42a2b2 extended _l10n_tr_nilvera_get_documents with a flow for invoices created in Odoo (fetch Nilvera PDF + set provider reference). This mixed two distinct…
Commit 2e1b0f16d8732e9450caf9ac313312e7ad42a2b2 extended _l10n_tr_nilvera_get_documents with a flow for invoices created in Odoo (fetch Nilvera PDF + set provider reference). This mixed two distinct flows. Rationale: - The reference from Nilvera is not needed. We also have this data since we are the senders. - _l10n_tr_nilvera_get_documents should only import documents (moves) originating from the provider. - The added logic was never executed because the method skips moves that already exist in Odoo. Changes: - Revert the parts of _l10n_tr_nilvera_get_documents related to Odoo-created invoices. - Add a dedicated cron to fetch Nilvera-generated PDFs for invoices created and sent from Odoo. To do this in stable without adding a new field, the cron targets moves where message_main_attachment_id points to the PDF created by Odoo. Once the PDF from Nilvera is fetched, it is set as the main attachment instead. - Add a button to the list and the form view for invoices to fetch the Nilvera PDF. - Add that PDF in the email attachments. task-5265045
This update fixes a potential issue where users could inadvertently modify parser rules after the parser was initially set up. This change ensures data integrity and stability by preventing these edits, safeguarding against unexpected behavior within Odoo.
Original PR description
The parser rules cannot be modified once the parser has been instantiated. task-5091744 Forward-Port-Of: odoo/odoo#239046
This update fixes an issue where selection placeholders weren't working correctly within Odoo's HTML editor's table cells. Now, users can reliably select and manipulate content within table cells, including non-editable elements, improving the overall editing experience. This ensures consistent functionality when working with tables in the HTML editor.
Original PR description
### Steps to reproduce: - Create a table inside the Todo. - Insert a banner into any table cell. - Place the cursor inside the banner and press Backspace. - Banner cannot be deleted and no selection placeholders are inserted. ### Description of the issue/feature this PR addresses: - Selection placeholders were not inserted inside table cells. when they contained contenteditable=false nodes. ### Desired behavior after PR is merged: - Table cells are allowed as valid selection placeholder containers. - When a non-editable element exists inside a table cell, placeholders are inserted before and after it. task-5357197 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
16 changes
Resolved issues and error corrections
This update fixes an issue where multiple quality checks were being created for the same receiving operation, leading to inefficiencies. The change adds a validation step to ensure only one quality check is generated per operation, streamlining the receiving process and reducing potential errors. This improves data accuracy and operational efficiency.
Original PR description
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations…
Steps to reproduce: -------------------------- 1. Install the Quality module. 2. Create a Quality Control Point with: * Control per: Control on Operation. * Operation: Receipts (set in the Operations field). 3. Create a Receipt containing one product. 4. Click the Mark as To Do button. 5. Add another product to the same Receipt and save it. Observation: -------------------------- Two quality checks are generated for the same picking, despite the tooltip indicating that only one check should be created per operation. Issue: -------------------------- No validation existed to verify whether an operation-based quality check had already been created for the picking when adding additional stock moves after confirmation. Solution: -------------------------- Add a check ensuring that if a quality check already exists for the same picking type and operation (with no product or category criteria), no additional operation-based quality checks are created. opw-5249233 Forward-Port-Of: odoo/enterprise#100118
This update enhances the stability of the Account EDI client by preventing automatic deletion of connections when the IAP API returns an error indicating a user no longer exists. This resolves past incidents caused by IAP issues, ensuring smoother operation and reducing potential disruptions to account processing.
Original PR description
We already have had multiple IAP-side incidents leading to IAP API returning `no_such_user`. This error code should not lead to user deletion client-side. Thus this commit addresses this by avoiding to archive long-standing IAP connections even when `no_such_user` error is received. Forward-Port-Of: odoo/odoo#234073
This update fixes an issue where invoice reports in the KE (Kenya) localization module were not correctly formatting the total and taxable amounts with commas. The fix removes a duplicate XPath and applies proper formatting options, ensuring invoices display prices accurately for KE customers. This improves clarity and compliance for financial reporting.
Original PR description
Steps to reproduce: 1. install `l10n_ke` 2. Switch to KE Company 3. Create a product with all KRA eTIMS details set on the Accounting page. 4. Create an invoice to KE Company with that product and set unitprice > 10000 5. Confirm the invoice and send it. Now, see the invoice report Issue: 1. xpath for `td_subtotal` was duplicated 2. The total amount and taxable amount were not formatted as prices (no commas). Before: <img width="771" height="397" alt="image" src="https://github.com/user-attachments/assets/492fe911-18d6-4e01-a16d-d7450c17373f" /> After: <img width="766" height="389" alt="image" src="https://github.com/user-attachments/assets/bbe5d4e2-b337-445c-833a-06492a8c827d" /> Solution: Updated the invoice report to: - Remove the duplicated `td_subtotal` xpath. - Properly format the total and taxable amounts with `t-options`. opw-5341578 Forward-Port-Of: odoo/enterprise#100279
This update fixes an issue where the QR code popup for online payments was displaying an incorrect order reference (showing a forward slash instead of the actual order name). This change ensures that customers receive accurate order information when making payments via QR code, improving the payment process. The fix was implemented as part of the Odoo 18.0 release.
Original PR description
When using the `POS Online Payment` method, the QR popup was displaying an incorrect order reference (e.g., `/`) instead of the actual order name. Steps to reproduce: 1. Activate a payment method for a `Point of Sale` and set it as `POS Online Payment`. 2. Create an order in the POS and select the configured payment method. 3. When the QR popup appears, the amount is correct but the order name shows `/` instead of the real reference. This fix ensures the correct order name is displayed in the QR popup. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the number of reconciliation entries displayed on the dashboard was incorrect. The system was filtering out draft journal entries, which could be reconciled. Now, all entries, including draft ones, are accurately counted, ensuring users see the correct number of reconciliations available.
Original PR description
Steps to reproduce: - go to daschboard > N to reconcile - validate the first entry - back to dashboard you will N-1 to reconcile - Reset to to draft the journal entry associated with the reconciliation - Reset the bank reconciliation Issue Back to the dashboard you will see N-1 to reconcile but when clicking on it you will have 8 entries to reconcile Cause: We filter out non posted entries. In Odoo, draft entrie can be reconciled. opw-5102016
A minor bug in the HTML editor's testing process was causing intermittent test failures. This update refined the test's targeting to avoid false positives related to the toolbar, ensuring consistent and reliable test results. This improves the overall stability of the HTML editor module.
Original PR description
Because of the toolbar being sometimes opened, the test added in odoo#238735 would sometimes failed. This was due to the selector "span" also targetting the elements in the toolbar. To prevent this test from failing, the selector "span" was updated to be more specific.
This update fixes a problem where blog post publication times were inconsistent during performance tests. The change ensures that tests always produce the same results by freezing time during initial data retrieval, preventing variations in post publication timing. This improves the reliability of our blog performance metrics.
Original PR description
Some blog post are published with a post_date matching the time the test is run meaning that they are not considered published. We have multiple possibilities when _get_url_hot_query is called: - all call to /blog are executed before the publication date: 9 - some call to /blog are executed after the publication date: 11 - only the last call is executed after the publication date: ~40-50 Using freezetime after the publication date ensures a consistent result This can be easily reproduced by freezing the time on the first calls in _get_url_hot_query and not on the last one. Runbot error [55754](https://runbot.odoo.com/odoo/error/55754) Forward-Port-Of: odoo/odoo#239236
This update ensures that users' presence status is accurately reflected after returning from periods of inactivity. Previously, updates were missed if the user hadn't been away during the last status check. This fix guarantees consistent and reliable presence information for users.
Original PR description
Before this commit, the user's presence might not be updated after returning from inactivity. This occurs because the status service only sends an update if the user was away during the previous update. However, this condition doesn't account for cases where the update was never sent. Forward-Port-Of: odoo/odoo#239202
This update corrects a technical issue related to the transmission of Swiss payroll data (ELM). Specifically, it adds a necessary group to the teleworking field in the HR contract and employee models. This ensures accurate reporting to Swiss tax authorities, complying with local regulations.
Original PR description
Forward-Port-Of: odoo/enterprise#101691
This update resolves an issue where scanning a lot in a batch transfer incorrectly updated line quantities. Specifically, when a subline without a lot was scanned, it was incorrectly updating a completed line instead of the intended subline. This change ensures accurate lot tracking and quantity updates during barcode scanning processes.
Original PR description
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create…
…f related line is complete ### Steps to reproduce: - In the settings enable Lots & Serials and Batch transfers - On the delivery operation types enable show reserved lots in the barcode tab - Create a storable product tracked by lots and put 10 x lot1 in stock - Create and confirm a delivery for 10 units - Create a batch transfer with your delivery - Process your transfer from the barcode app - Scan one unit of LOT1 and put in pack - Toggle sublines select the 0/9 subline without lots nor package - Scan LOT1 #### > The 1/1 LOT1 line with a pack is updated to 2/1 rather than the 0/9 ### Cause of the issue: Since e45249c2f6883d743a4e7d19e736c622e26a3d58 and 27bfb985a29e9f0abe94dec8a76bf6d08560fbc9 an override of the `_findLine` method has been introduced in `BarcodePickingBatchModel` to ensure that scanning a lot referenced by an already existing line of the batch transfer triggers an update of that line rather than an override of the lot of an other line. However, these lines should not priorities a completed line when there is line without a set lot. opw-5340865
This update fixes an issue where mobile invoices incorrectly displayed both purchase and sales taxes. The change copies the tax selection options from the desktop version, ensuring users on mobile devices see the appropriate taxes available for their invoices. This improves the user experience and accuracy of mobile invoicing.
Original PR description
Steps to reproduce ================== - Use a mobile viewport - Create an new invoice - Add an invoice line - Click on the Taxes field => Both purchase and sales taxes are available Solution ======== Copy the domain from the desktop list view https://github.com/odoo/odoo/blob/fcc677e900c2fccb9fa0bd88ef01c559cadfa08a/addons/account/views/account_move_views.xml#L1051-L1055 We also add the corresponding context and options opw-5124536
This update resolves an issue where large product images on the Shop page appeared blurred. The fix ensures product images maintain their original aspect ratio when displayed, providing a consistent and professional look for customers. This improvement enhances the user experience and visual quality of product listings.
Original PR description
Steps to reproduce: =================== 1- Add a product with a very large image width & publish product. 2. Go to the Shop page & type product name. -> The product image is blurred. Cause: ====== The product images have `h-100 w-100` classes which force them to fill the container dimensions exactly, ignoring their intrinsic aspect ratio. Solution: ========= Add the `object-fit-contain` class to the image. This ensures the image scales to fit within the container while preserving its aspect ratio. Side note: `object-fit-contain` class will be added only in version 17.0 In the next versions the class already exists. opw-5258658 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238108
This update resolves an issue where data records linked to deleted models remained in the system, potentially causing errors and instability. By cleaning up these records when a model is removed, we ensure data integrity and prevent future problems. This improves overall system reliability.
Original PR description
When a model is unlinked, the `ir.model.data` related to that model wasn't cleaned up. This leaves dangling records that can generate issues. sentry-6938852090 Forward-Port-Of: odoo/odoo#236615
This update resolves an issue where the demo stock data installation incorrectly used US currency, causing problems when existing databases used different currencies (like EUR). The fix ensures the demo data installation works correctly regardless of the company's currency setting, improving data consistency.
Original PR description
Currently in the `_merge_move_itemgetter` the system call `self.company_id.currency_id.decimal_places`. However the demo data of stock create a database with US currency and some `stock.move` in it. If we have an existing database with EUR for example. The upper call will return a `currency_id.decimal_places` since we have multiple currency. The best solution, would be to split `_action_confirm` to do a loop by company. But it would need a small refactoring and we will do a minimal diff to fix this issue. Using the smallest currency among all the company is not always correct but it's a super edge case and we should probably remove this code since it went to far. Close #230965, #234078 Forward-Port-Of: odoo/odoo#239273
This update fixes an issue where users without assigned tasks were not visible in the Gantt view when searching or filtering. The fix simplifies a conditional check within the project task search logic, ensuring the correct user rows are displayed. This improves the usability of the Gantt view for all users.
Original PR description
**Steps to reproduce:** Go to Project Go to All Tasks. Switch to the Gantt view. Search for an assignee who has no tasks assigned. **Cause:** The method was adding multiple conditions for the same field because both if statements were being applied. This made the domain incorrect when searching for users or custom filter on user **Issue:** The searched user’s row did not appear in the gantt view if they had no tasks. **Fix:** Changed the second if to elif so only one condition is applied at a time, ensuring the correct domain is used and the user row is visible. Task-5076701 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where assignee rows weren't displayed in the Gantt view when users had no assigned tasks. Now, all users are always visible, and searching by assignee filters results show only unassigned tasks within a specific project, improving usability and reporting accuracy.
Original PR description
**Before this commit:** When searching for an assignee in the gantt view, the corresponding row was not displayed if the user had no tasks assigned. Similarly, when applying a custom filter on the assignee also not working properly. **After this commit:** When searching or filtering by an assignee, the corresponding user row is now always visible in the gantt view, even if the user has no assigned tasks. Custom filters on assignee also work properly. task-5076701
3 changes
Resolved issues and error corrections
This update resolves a technical issue that caused the Gantt chart to crash when an event's start or end date was cleared. The fix ensures the Gantt calculation only runs when a valid date range exists, preventing errors and improving stability.
Original PR description
When removing the start or end date on an Event, the system raises a traceback during Gantt information computation. **Steps to Reproduce:** 1. Install `website_event_track_gantt` module. 2. Create a new Event. 3. Add at least one **Track** with a track **Date** and **Duration**. 4. In the Event form, clear the Start or End Date field. **Error:** `TypeError: '<' not supported between instances of 'datetime.datetime' and 'bool'` **Cause:** When the event start or end date is removed, those fields become False. During computation, the system attempts to compare these False values with the track dates (which are real datetimes), resulting in an invalid datetime-boolean comparison, causing the error. **Fix:** This commit ensures the Gantt calculation only executes when the event has a valid date range, avoiding comparisons that include missing values. no id
This update fixes an issue where the barcode app wouldn't correctly assign a package as the 'result package' when it already contained items. The fix ensures that packages, regardless of their contents, can be properly used as destination packages during internal transfers, improving the reliability of the barcode scanning process.
Original PR description
Issue ===== When scanning a package as result package, if the package is empty, it works, but if this package already has content, it doesn't work. How to reproduce ================ 1. Enable…
Issue ===== When scanning a package as result package, if the package is empty, it works, but if this package already has content, it doesn't work. How to reproduce ================ 1. Enable "Packages" and "Storage Locations" settings; 2. Create two packages with some content in WH/Stock/Shelf 1; 3. Create an empty package; 4. Create an internal transfer directly from the Barcode app; 5. Scan Shelf 1 barcode and scan first package; 6. Scan the empty package => It's assigned as the result package; 7. Confirm the operation; 8. Create another internal transfer; 9. Scan Shelf 1 barcode and scan second package; 10. Scan the no more empty package => This time, it's not assigned as the result package. Reason ====== A package was assigned as the result package only if one of the following conditions is matched: 1. The scanned package is empty (it's what's happening in 6.); 2. The selected line has no result package yet and the scanned package is in the selected line's destination location. Here, it doesn't work because since we move a package, the barcode line has already a destination package (the same then the source package.) Fix === For the condition 2., adapt the condition to make it works too if the selected line has the same package as the source and result package. [opw-5326234](https://www.odoo.com/odoo/project/49/tasks/5326234)
This update fixes a potential issue where changes to parser rules couldn't be saved after the parser was initially set up. This change ensures that parser rules are consistently applied, improving data integrity and preventing unexpected behavior. It's a routine maintenance update.
Original PR description
The parser rules cannot be modified once the parser has been instantiated. task-5091744 Forward-Port-Of: odoo/odoo#239046