Daily updates from Odoo
Wednesday, June 18, 2025
29 changes ยท master
Enhancements to existing features
Odoo now provides clearer installation guidance when required external components are missing, including the relevant apt install command. This helps administrators resolve setup issues faster across affected apps and reduces delays during deployment or maintenance.
Original PR description
Community: https://github.com/odoo/odoo/pull/214190
Batch and wave transfer screens now include keyboard shortcuts for common actions such as opening the map, validating transfers, and accessing quality checks. This helps warehouse users complete frequent tasks faster with less mouse navigation.
Original PR description
Added keyboard shortcuts in Batch & Wave transfer - "Map" : alt + G - "Validate" : alt + V - "Quality Checks" : alt + shift + Z Task Id : 4672389
The AI module now has a dedicated way to store and read vector data, which is used for AI-powered features such as embeddings. This reduces custom database handling and makes future AI functionality easier to maintain and extend.
Original PR description
This commit introduce a new `Vector` field for the AI module. Before, the module was defining the vector column by manually adding the sql queries (see `ai.embedding` module). This commit solves that issue by introducing a new orm field `Vector` which takes care of the creation and read of columns of type vector. task-4763397
Automatically created reconciliation rules are now hidden by default in the list view, so users see the rules they created themselves first. A separate filter lets users view automatically generated rules when needed, reducing clutter while keeping those records accessible.
Original PR description
Follow-up to 687e237 which introduced automatic reconciliation rule creation. This commit adds a domain on the account.reconcile.model action to hide models that were created automatically, using a new `created_automatically` field added in master. This ensures only user-defined rules appear in the list view. task-4783623
The document signing flow now returns information in a consistent format across standard Sign and itsme signing. This reduces unexpected behavior and helps keep signing pages more reliable for users.
Original PR description
**Before:**
- The get_document_qweb_context some time return dict or sometime Qweb rendered
template.
**After:**
- After this commit always return a dictionary
{'rendering_context': {}, 'rendered_template': XX}
task-4784288Accounting users can now download a ready-made spreadsheet template directly from the import screen for vendor bills and credit notes. This makes it easier to prepare files in the expected format and reduces import mistakes.
Original PR description
This commit adds a button to download the template on the import screen for vendor bills and credit notes. task-4875863
The spreadsheet filter side panel has been refined to make its layout cleaner and easier to use. This small visual improvement helps users work with spreadsheet filters more comfortably without changing functionality.
Original PR description
This commit finetunes the layout of the filter side panel. task-4864014
Resolved issues and error corrections
The payroll empty dashboard now applies icon sizing only where intended. This prevents unrelated icons from being resized, keeping the payroll interface cleaner and more consistent for users.
Original PR description
The CSS class selector for the icon size in the payroll empty dashboard also selected other icons. This commit fixes the issue by adding specific selectors for the empty payroll dashboard.
The employee contract information view now shows the extra hours checkbox when the work entry source is not attendance. This ensures HR users can see and manage the expected overtime setting consistently, avoiding confusion or missing configuration.
Original PR description
In this PR, We added the missing extra hours checkbox when the work entry source is not attendance in the Contract Information in employee view. Before:  After:  Task 4869074.
The appointment HR performance test was adjusted to reflect an expected extra data lookup after recent HR data model changes. This keeps automated checks aligned with the current system behavior and prevents false failure reports.
Original PR description
Since hr has been refactored and lot of hr.employee fields moved to hr.version model, we have to increase Querycount by one as now _slot_availability_prepare_users_values_workhours function calls for hr.version together with hr.employee to get all the right values. Original function flamegraph  Since https://github.com/odoo/odoo/pull/202869, extra call for hr.version when we are trying to read employees[0].resource_calendar_id  Fixing [Runbot error 226700](https://runbot.odoo.com/odoo/error/226700)
The Sign app menu now uses the standard Odoo dropdown styling for a signature request action. This prevents the icon from appearing at the wrong size when users open or click the menu, improving visual consistency.
Original PR description
This commit adds the class `o_menu_item` in order to update our custom dropdown item to match the Odoo's dropdown, fixing the scale of the icon when clicking on the menu. task-4876538
A budget-related automated test was updated so it no longer depends on demo company data that may not be available in some test runs. This helps keep internal quality checks stable and reduces false failures during development.
Original PR description
This fix addresses a test failure in runbot. The test previously relied on base.main_company, which causes issues when running the test suite on master without the --with-demo flag enabled. To ensure compatibility, the test has been updated to use self.company directly instead of base.main_company no-task
Code cleanup and technical improvements
This update improves how shared website and report templates are loaded by processing related template calls in batches. It should make template-heavy pages and report editing more efficient while keeping the user experience unchanged.
Demo product attribute data has been reorganized so it can be shared from the core product area instead of being duplicated across related features. This makes sample data easier to maintain and keeps product, rental, manufacturing, and barcode demo examples more consistent.
Original PR description
See Also: https://github.com/odoo/odoo/pull/205187
Miscellaneous changes
Zipping the generator "tests" was producing an empty result. Then, the loop wasn't asserting anything. Forward-Port-Of: odoo/enterprise#87890 Forward-Port-Of: odoo/enterprise#87315
Original PR description
Zipping the generator "tests" was producing an empty result. Then, the loop wasn't asserting anything. Forward-Port-Of: odoo/enterprise#87890 Forward-Port-Of: odoo/enterprise#87315
Before this commit, when entering the search view dialog a searchRead was done to create a dict of displayed move line per id. This dict is useful to compute the residual amount when selecting a line. The problem is that we don't have any limit on the search which is bad perf wise. no task id Forward-Port-Of: odoo/enterprise#87312
Original PR description
Before this commit, when entering the search view dialog a searchRead was done to create a dict of displayed move line per id. This dict is useful to compute the residual amount when selecting a line. The problem is that we don't have any limit on the search which is bad perf wise. no task id Forward-Port-Of: odoo/enterprise#87312
Currently an error occurs when the user tries to remove the currency on any monetary field through web studio. Steps to replicate: - Open any list view with web_studio. - Drag and drop a monetary field and remove the currency field and save. Error: `TypeError: Argument must be bytes or unicode, got 'NoneType'` This error occurs because the `attrs` dictionary contains `{'name': None}`, and `etree.Element()` doesn't accept attributes with None values, causing it to raise a `TypeError`.
Original PR description
Currently an error occurs when the user tries to remove the currency on any monetary field through web studio.
Steps to replicate:
- Open any list view with web_studio.
- Drag and drop a monetary field and remove the currency field and save.
Error:
`TypeError: Argument must be bytes or unicode, got 'NoneType'`
This error occurs because the `attrs` dictionary contains `{'name': None}`, and `etree.Element()` doesn't accept attributes with None values, causing it to raise a `TypeError`.
This commit fixes the issue by making the field required so that user cant remove the value from currency field and hence preventing error at line [1].
[1]-https://github.com/odoo/enterprise/blob/a41cca06bc1e25614390f9207c937566557350a0/web_studio/controllers/main.py#L928
sentry-4244801243
Forward-Port-Of: odoo/enterprise#87879
Forward-Port-Of: odoo/enterprise#85565The website generator cron crashed when trying to deactivate itself due to crons no longer being able to modify themselves. Now use _commit_progress() instead and check only in the cron and not during write() Forward-Port-Of: odoo/enterprise#87510
Original PR description
The website generator cron crashed when trying to deactivate itself due to crons no longer being able to modify themselves. Now use _commit_progress() instead and check only in the cron and not during write() Forward-Port-Of: odoo/enterprise#87510
This commit introduces two improvements to the 'Add Properties' button in the cog menu of the Asset model: 1. Hides the button if the record has state = 'model'. Previously, the button was available but no action was triggered. 2. Raises an error message if the button 'Add Properties' is clicked in an asset without an asset model associated. Previously, only a warning with the unclear message "You need edit access on the parent doument to update these property fields" was shown. task-482209
Original PR description
This commit introduces two improvements to the 'Add Properties' button in the cog menu of the Asset model: 1. Hides the button if the record has state = 'model'. Previously, the button was available but no action was triggered. 2. Raises an error message if the button 'Add Properties' is clicked in an asset without an asset model associated. Previously, only a warning with the unclear message "You need edit access on the parent doument to update these property fields" was shown. task-4822091 Forward-Port-Of: odoo/enterprise#86651
In this PR, we : - Readapt the Gantt progress calculation for attendance Related Community PR : https://github.com/odoo/odoo/pull/209570 task-4771288 Forward-Port-Of: odoo/enterprise#87033 Forward-Port-Of: odoo/enterprise#85368
Original PR description
In this PR, we : - Readapt the Gantt progress calculation for attendance Related Community PR : https://github.com/odoo/odoo/pull/209570 task-4771288 Forward-Port-Of: odoo/enterprise#87033 Forward-Port-Of: odoo/enterprise#85368
Adds a test to the fix done in the commit [814b1b2](https://github.com/odoo/enterprise/commit/814b1b21f60189715c82c96397c36da706736490) opw-4836094 Forward-Port-Of: odoo/enterprise#87166
Original PR description
Adds a test to the fix done in the commit [814b1b2](https://github.com/odoo/enterprise/commit/814b1b21f60189715c82c96397c36da706736490) opw-4836094 Forward-Port-Of: odoo/enterprise#87166
In this PR, we change the paid net rule code to NET to align with other localizations. Forward-Port-Of: odoo/enterprise#87727
Original PR description
In this PR, we change the paid net rule code to NET to align with other localizations. Forward-Port-Of: odoo/enterprise#87727
Before this commit, if the module was installed, the delivered quantity for non-rental products in a sale order paid through PoS would be doubled. opw-4805368 Forward-Port-Of: odoo/enterprise#87259 Forward-Port-Of: odoo/enterprise#87175
Original PR description
Before this commit, if the module was installed, the delivered quantity for non-rental products in a sale order paid through PoS would be doubled. opw-4805368 Forward-Port-Of: odoo/enterprise#87259 Forward-Port-Of: odoo/enterprise#87175
Before this commit: ------------------- In the QC (Quality Check) step "Register Production", the lot/serial name was not shown immediately after registration. Instead, the qty producing/demand ratio was displayed first, followed by the lot/serial name. Steps to reproduce: ------------------- 1. Create a MO for a lot/serial tracked product with a Register Production step(QC). 2. Go to the workorder and open the Register Production step. 3. Click the Quick Registration (+) button to gene
Original PR description
Before this commit: ------------------- In the QC (Quality Check) step "Register Production", the lot/serial name was not shown immediately after registration. Instead, the qty producing/demand ratio was displayed first, followed by the lot/serial name. Steps to reproduce: ------------------- 1. Create a MO for a lot/serial tracked product with a Register Production step(QC). 2. Go to the workorder and open the Register Production step. 3. Click the Quick Registration (+) button to generate a lot/serial. 4. The step first shows the qty producing/demand ratio, then the lot/serial name. In this commit: --------------- The step now directly shows the generated lot/serial name, as the registered quantity is already available in the workorder card header. task-4824899 Forward-Port-Of: odoo/enterprise#86689
Runbot error: https://runbot.odoo.com/odoo/error/160977 This commit fixes the tour by moving the steps related to the contract management in the python part of the test. Also fixes the formatting of the tour file. Forward-Port-Of: odoo/enterprise#86106 Forward-Port-Of: odoo/enterprise#83686
Original PR description
Runbot error: https://runbot.odoo.com/odoo/error/160977 This commit fixes the tour by moving the steps related to the contract management in the python part of the test. Also fixes the formatting of the tour file. Forward-Port-Of: odoo/enterprise#86106 Forward-Port-Of: odoo/enterprise#83686
Steps to reproduce the issue: - Allow a portal user, e.g. Joel (login portal) in runbot, to edit a knowledge article. - When the portal user logs in and tries to modify the article, the AI button and the ChatGPT command are available to him. The UI does nothing when the command is triggered. - But there is Access error in the server log. Solution: Only show the chatgpt command to internal users. TASK-ID: 4853088 Forward-Port-Of: odoo/enterprise#87324
Original PR description
Steps to reproduce the issue: - Allow a portal user, e.g. Joel (login portal) in runbot, to edit a knowledge article. - When the portal user logs in and tries to modify the article, the AI button and the ChatGPT command are available to him. The UI does nothing when the command is triggered. - But there is Access error in the server log. Solution: Only show the chatgpt command to internal users. TASK-ID: 4853088 Forward-Port-Of: odoo/enterprise#87324
When we create a fiscal position, we are checking if the user has the taxes for that country create and display a button to have the user download them. Previously, we were trying to create the tax reports for that fiscal position when creating it, however since the l10n_report is loaded with the taxes, the creation of the tax return wouldn't be triggered. Now, we are creating the tax returns after the user has downloaded the taxes needed for that fiscal position. task-4840412 Forward-
Original PR description
When we create a fiscal position, we are checking if the user has the taxes for that country create and display a button to have the user download them. Previously, we were trying to create the tax reports for that fiscal position when creating it, however since the l10n_report is loaded with the taxes, the creation of the tax return wouldn't be triggered. Now, we are creating the tax returns after the user has downloaded the taxes needed for that fiscal position. task-4840412 Forward-Port-Of: odoo/enterprise#87023
Creating documents through a mail alias for a folder that was not the default company on the database would cause an error. This was due to the company on the inactive alias that was being created for this new document not matching the company of the owner document. Added the company id to the vals_list before the creation of the document in order to use the proper company on the alias. opw-4717277 Forward-Port-Of: odoo/enterprise#86677 Forward-Port-Of: odoo/enterprise#84719
Original PR description
Creating documents through a mail alias for a folder that was not the default company on the database would cause an error. This was due to the company on the inactive alias that was being created for this new document not matching the company of the owner document. Added the company id to the vals_list before the creation of the document in order to use the proper company on the alias. opw-4717277 Forward-Port-Of: odoo/enterprise#86677 Forward-Port-Of: odoo/enterprise#84719
Problem --------- Follow-ups can be configured to execute multiple type of follow-ups (email, whatsapp, sms, ...) One of those is to print a letter, but it's not the most used. When you try to execute a follow-up manually, a wizard opens and follows the setup of the to-be-executed level ; so for example if the next level is configured to send a SMS, SMS should be ticket by default. But the "Print" option is always ticked, even if the "Letter" option is not selected in the configuration o
Original PR description
Problem --------- Follow-ups can be configured to execute multiple type of follow-ups (email, whatsapp, sms, ...) One of those is to print a letter, but it's not the most used. When you try to execute a follow-up manually, a wizard opens and follows the setup of the to-be-executed level ; so for example if the next level is configured to send a SMS, SMS should be ticket by default. But the "Print" option is always ticked, even if the "Letter" option is not selected in the configuration of the level. This always generates an additional PDF that is often not needed. Objective --------- Do not tick "Print" by default when manually executing a follow-up level, unless "Letter" is ticket in the configuration of the level. Solution --------- Set "Print" default value in the wizard to the "Letter" value of the follow up line instead of leaving it as True (which is the default). task-4574971 Forward-Port-Of: odoo/enterprise#86750 Forward-Port-Of: odoo/enterprise#80116