Friday, June 6, 2025
28 changes · master
Enhancements to existing features
Updates were made to WhatsApp-related security tests to keep them aligned with recent platform changes. This helps maintain reliable quality checks without changing the user-facing WhatsApp experience.
Original PR description
PR community: https://github.com/odoo/odoo/pull/212074 task-4675777
Knowledge article rows now only show the expand caret when an article has child pages. This reduces visual clutter and helps users understand which articles can be expanded.
Original PR description
Hide the caret icon when the article has no children. task-4830534
The manufacturing work order tests were adjusted after shared test data was reorganized. This keeps the test coverage aligned with recent community changes without affecting day-to-day user workflows.
Original PR description
Some data was removed from the commons and moved to the two specific test classes using those.
The bank statement OFX import feature now loads its parsing tools only when they are actually needed. This can slightly improve system startup time while keeping the import process unchanged for users.
Original PR description
Parsing is often not needed during startup and only used during the related business processes. Therefore, we load it lazily. ofxparser depends on bs4 and both of them can take 100ms to import. odoo/odoo#212408
This update strengthens internal mail performance tests so they better reflect real-world messaging scenarios, including followers, push notifications, and tracking details. It also prevents test runs from making external notification requests and fixes a small issue in mention detection, helping maintain messaging quality with lower release risk.
Original PR description
Improve post performance tests so that
* it effectively includes followers (having a subtype_id);
* it sends push notifications (creating devices and using 'comment'
message type);
* it includes tracking values;
Add mock for push notifications, to avoid VERBOTEN external requests.
Update counters accordingly.
Prepares Task-4845982Appointment website snippets now take configured country availability into account when showing appointment options. This helps visitors see more relevant appointment choices while preserving the existing setup behavior for online appointment configuration.
Original PR description
Take into account the country domain for the appointment snippet. This is not applied to the option of s_appointment_online as it could prevent user to configure the website correctly. task-4461289
Internal test-only helper tools were moved into the testing area to reduce the chance they are used incorrectly in production code. This keeps business features unchanged while improving code organization and long-term reliability across affected test suites.
Original PR description
The `DotDict` class can produce unexpected behaviour if used incorrectly. This commit moves this class so that it is only used in tests. The `MockRequest` context manager uses the `DotDict`. As we cannot import objects from the test framework and `MockRequest` is only used in tests, it makes sense to move it to `odoo.addons.web.tests.utils`. task-4822364
The test setup was simplified so that post-installation tests run by default, removing the need to mark them individually. This reduces maintenance work and helps keep quality checks consistent across Odoo's enterprise accounting modules.
Original PR description
https://github.com/odoo/odoo/pull/143757 https://github.com/odoo/design-themes/pull/764 https://github.com/odoo/documentation/pull/6670
Resolved issues and error corrections
Search tests for appointments and knowledge articles have been updated to work with the redesigned website builder. This helps ensure those website search experiences remain reliable after layout changes.
Original PR description
*= appointment, knowledge The ```test_searchbar_within_appointments, test_searchbar_within_knowledge_articles``` tour was previously broken due to DOM structure changes introduced by the new website builder and was consequently disabled. This commit updates the tour steps to align with the new DOM and re-enables the associated test.
Code cleanup and technical improvements
Spreadsheet filter data has been streamlined to align with related platform changes. This helps keep enterprise spreadsheet features consistent and easier to maintain, with minimal direct impact for business users.
Original PR description
This commit adapts the enterprise codebase to the changes made in https://github.com/odoo/odoo/pull/212961
Miscellaneous changes
The `MoveArticleDialog` component uses the display name to indicate which article will be moved. However, this field is not loaded on the record object, resulting in an undefined value. As a result, the modal incorrectly displays the article as untitled. Steps to reproduce the issue: 1. Open an article in Knowledge 2. Make sure that the article has a title 3. Click on the "Move To" option from the kebab menu => The modal says "Move the untitled article under:" TO BE: The modal should
Original PR description
The `MoveArticleDialog` component uses the display name to indicate which article will be moved. However, this field is not loaded on the record object, resulting in an undefined value. As a result, the modal incorrectly displays the article as untitled. Steps to reproduce the issue: 1. Open an article in Knowledge 2. Make sure that the article has a title 3. Click on the "Move To" option from the kebab menu => The modal says "Move the untitled article under:" TO BE: The modal should say: "Move <display_name> under:" To fix the issue, we will add the `display_name` field to the field dependencies of the `KnowledgeTopbar` component. Task-4636494 Forward-Port-Of: odoo/enterprise#87135 Forward-Port-Of: odoo/enterprise#86059
This change reorganizes a testing helper so it lives with other test utilities instead of production-facing code. It should not affect day-to-day users, but it helps keep the codebase cleaner and easier to maintain across modules that rely on tests.
Original PR description
The `MockRequest` context manager is only used in tests. Move it to `odoo.addons.web.tests.utils.py`. task-4822364
In this commit: ========== - We will display the provider's order ID in the order receipt header. Before this commit: ----------  After this commit: ----------  task-4840924 Forward-Port-Of: odoo/enterprise#87128 Forward-Port-Of: odoo/enterprise#86790
Original PR description
In this commit: ========== - We will display the provider's order ID in the order receipt header. Before this commit: ----------  After this commit: ----------  task-4840924 Forward-Port-Of: odoo/enterprise#87128 Forward-Port-Of: odoo/enterprise#86790
In this commit: - We are replacing the XPath class `o_portal_details` to `o_customer_address_fill` according to changes in the related community PR. task-4649241 Related PR: - Community: https://github.com/odoo/odoo/pull/201995 Forward-Port-Of: odoo/enterprise#87087 Forward-Port-Of: odoo/enterprise#81639
Original PR description
In this commit: - We are replacing the XPath class `o_portal_details` to `o_customer_address_fill` according to changes in the related community PR. task-4649241 Related PR: - Community: https://github.com/odoo/odoo/pull/201995 Forward-Port-Of: odoo/enterprise#87087 Forward-Port-Of: odoo/enterprise#81639
Before when we would open the return kanban, it would set for every other kanban the variable MAX_NUMBER_OPENED_GROUPS to max integer. This is not what we want, we only weant to restrict that to the Return Kanban Model only not every relational model. Forward-Port-Of: odoo/enterprise#87189
Original PR description
Before when we would open the return kanban, it would set for every other kanban the variable MAX_NUMBER_OPENED_GROUPS to max integer. This is not what we want, we only weant to restrict that to the Return Kanban Model only not every relational model. Forward-Port-Of: odoo/enterprise#87189
This commit moves the 3 first reco models, present in the dropdown menu, to the button list of statement line. If the user has more than 3 matching models, the other ones will remain in the dropdown menu. This is only for desktop views, nothing changed in mobile. Also few style and layout changes, see related commits. task-4804584 Forward-Port-Of: odoo/enterprise#86783
Original PR description
This commit moves the 3 first reco models, present in the dropdown menu, to the button list of statement line. If the user has more than 3 matching models, the other ones will remain in the dropdown menu. This is only for desktop views, nothing changed in mobile. Also few style and layout changes, see related commits. task-4804584 Forward-Port-Of: odoo/enterprise#86783
We added back the amount of devices connected to an IoT Box on the IoT Box card. We also added the pairing date on the card, for a user to spot faster an IoT Box. If an IoT Box is linked to a PoS, the PoS configs where devices are linked are now listed on the IoT Box cards. Some elements have been moved, and some sentences have been rephrased on the wizards to pair an IoT Box. Task: 4585446 Forward-Port-Of: odoo/enterprise#84543
Original PR description
We added back the amount of devices connected to an IoT Box on the IoT Box card. We also added the pairing date on the card, for a user to spot faster an IoT Box. If an IoT Box is linked to a PoS, the PoS configs where devices are linked are now listed on the IoT Box cards. Some elements have been moved, and some sentences have been rephrased on the wizards to pair an IoT Box. Task: 4585446 Forward-Port-Of: odoo/enterprise#84543
Before this commit, selecting a contact of type "company" on the payment screen would result in the following error: `TypeError: Cannot read properties of undefined (reading 'name')` This occurred because selecting a company contact automatically set the order to be invoiced, even if the required fields were not filled in. To prevent this error, the process now checks that all necessary fields are completed before setting the order to invoice. opw-4773831 Forward-Port-Of: odoo/en
Original PR description
Before this commit, selecting a contact of type "company" on the payment screen would result in the following error: `TypeError: Cannot read properties of undefined (reading 'name')` This occurred because selecting a company contact automatically set the order to be invoiced, even if the required fields were not filled in. To prevent this error, the process now checks that all necessary fields are completed before setting the order to invoice. opw-4773831 Forward-Port-Of: odoo/enterprise#86512 Forward-Port-Of: odoo/enterprise#85123
Before this commit, validating an order from the mobile menu caused an error because the 'name' field was removed from the order in the process_order method of self order. Since the 'pos_reference' field exists and is correct to use (unlike 'name', which may be '/'), the code has been updated to use 'pos_reference' instead. opw-4758288 Forward-Port-Of: odoo/enterprise#85266
Original PR description
Before this commit, validating an order from the mobile menu caused an error because the 'name' field was removed from the order in the process_order method of self order. Since the 'pos_reference' field exists and is correct to use (unlike 'name', which may be '/'), the code has been updated to use 'pos_reference' instead. opw-4758288 Forward-Port-Of: odoo/enterprise#85266
### Issue: When trying to upload the video for a Youtube post, we are getting a traceback with "UncaughtPromiseError > TypeError", caused by not having the `youtube_video_category_id` field properly loaded, at the time where we are trying to evaluate `_preprocessReferenceChanges` we try to access the type of the field as `this.fields[fieldName].type === "reference"` where `fieldName` is `youtube_video_category_id`, but the field is not loaded yet (this.fields[fieldName] is undefined), so we get
Original PR description
### Issue: When trying to upload the video for a Youtube post, we are getting a traceback with "UncaughtPromiseError > TypeError", caused by not having the `youtube_video_category_id` field properly loaded, at the time where we are trying to evaluate `_preprocessReferenceChanges` we try to access the type of the field as `this.fields[fieldName].type === "reference"` where `fieldName` is `youtube_video_category_id`, but the field is not loaded yet (this.fields[fieldName] is undefined), so we get an error. ### Solution: This commit adds this field as a field dependecy for the `YoutubeUploadField` widget, so that it is loaded when we try to access it. opw-4646432 Forward-Port-Of: odoo/enterprise#83571
Description of the issue this commit addresses: Since the new Tax Returns features in saas-18.3, a method that was used by the method that was generating the xml export of the italian periodic vat report was replaced by one of a different name. The one used by the xml export system has not been modified and therefore tries to call a method that doesn't exist leading to a traceback. --- Steps to reproduce: 1. Install l10n_it_xml_export. 2. Using an Italian company, go to the montly v
Original PR description
Description of the issue this commit addresses: Since the new Tax Returns features in saas-18.3, a method that was used by the method that was generating the xml export of the italian periodic vat report was replaced by one of a different name. The one used by the xml export system has not been modified and therefore tries to call a method that doesn't exist leading to a traceback. --- Steps to reproduce: 1. Install l10n_it_xml_export. 2. Using an Italian company, go to the montly vat report. 3. Create the closing entry and post it. 4. A traceback shows up. --- Desired behavior after this commit is merged: No traceback shows up during the xml export of the italian periodic vat report closing entry posting process. --- task-4825706 Forward-Port-Of: odoo/enterprise#86518
A previous fix removed one column without updating the colspan of the custom header. https://github.com/odoo/enterprise/commit/78265a864fafd789df10c0f75590aaa605547b33 Forward-Port-Of: odoo/enterprise#87124
Original PR description
A previous fix removed one column without updating the colspan of the custom header. https://github.com/odoo/enterprise/commit/78265a864fafd789df10c0f75590aaa605547b33 Forward-Port-Of: odoo/enterprise#87124
Before this commit the opening balance in the iras audit export was always at 0. This was caused because it would call _query_values which was not returning the initial balances. The fix was to instead call _get_initial_balance_values. With this we could finally get the opening balances. task-4826744 Forward-Port-Of: odoo/enterprise#86907 Forward-Port-Of: odoo/enterprise#86600
Original PR description
Before this commit the opening balance in the iras audit export was always at 0. This was caused because it would call _query_values which was not returning the initial balances. The fix was to instead call _get_initial_balance_values. With this we could finally get the opening balances. task-4826744 Forward-Port-Of: odoo/enterprise#86907 Forward-Port-Of: odoo/enterprise#86600
**PROBLEM** When confirming an invoice, the payment policy of the invoice was overridden by the payment policy assigned to the partner, and the user had to reselect the correct policy. **STEP TO REPRODUCE** 1. On a fresh database, install the l10n_mx_edi module. 2. Select the "ZAPATERIA URTADO ÑERI" as your company (demo mexican company). 3. Set a payment policy on a client. 4. Create an invoice with this client, and set the payment policy equal to a different policy than the client. 5.
Original PR description
**PROBLEM** When confirming an invoice, the payment policy of the invoice was overridden by the payment policy assigned to the partner, and the user had to reselect the correct policy. **STEP TO…
**PROBLEM** When confirming an invoice, the payment policy of the invoice was overridden by the payment policy assigned to the partner, and the user had to reselect the correct policy. **STEP TO REPRODUCE** 1. On a fresh database, install the l10n_mx_edi module. 2. Select the "ZAPATERIA URTADO ÑERI" as your company (demo mexican company). 3. Set a payment policy on a client. 4. Create an invoice with this client, and set the payment policy equal to a different policy than the client. 5. Confirm the invoice, the payment policy field will take the value of the client policy, overriding what we set in the invoice. **CAUSE** https://github.com/odoo/enterprise/blob/3f42e4322dbd684d9431a172c11a369090b21c0c/l10n_mx_edi/models/account_move.py#L615-L620 The payment policy compute method is incorrect, we should select the partner policy as a last resort to avoid overriding what the user chose. **FIX** Reorder the fallback: If the invoice is a refund, payment policy should be PUE. Else, if the user set a payment policy in the invoice form, we should keep it. Finally, if the partner has a payment policy, select it. opw-4820139 Forward-Port-Of: odoo/enterprise#86918
Before this commit, when several achievements were done on the same period for the same record, they would share the same id and therefore could not be properly processed in the interface. In order to fix this, we decide to use the achievement date to compute the id. As a result, for achievement based on MRR (subscription), if two sale.order.log corresponds to the same order, on the same date, we will end up with a duplicated id too. It happens because the related_res_model and related_res_i
Original PR description
Before this commit, when several achievements were done on the same period for the same record, they would share the same id and therefore could not be properly processed in the interface. In order…
Before this commit, when several achievements were done on the same period for the same record, they would share the same id and therefore could not be properly processed in the interface. In order to fix this, we decide to use the achievement date to compute the id. As a result, for achievement based on MRR (subscription), if two sale.order.log corresponds to the same order, on the same date, we will end up with a duplicated id too. It happens because the related_res_model and related_res_id of achievement based on MRR is the order linked to the sale.order.log. To avoid this issue, we introduce another source of entropy in the computation of the achievement's id: the write date of the record. In that case, we are free to use the write_date of the sale.order.log and therefore they should be different. Same apply for sale.order and account.move for other kind of achievements because of the UNION ALL. taskid: 4845096 Forward-Port-Of: odoo/enterprise#87001 Forward-Port-Of: odoo/enterprise#86644
Reproduce: Check the front page of an appointment type with no resources or staff users. This commit avoids duplicating the ‘No slot’ message on the front page of appointment types for which there is no slot available. related: odoo/enterprise@36da382fceba76f3de69306e24c9c6fa018cde9f Task-4750234 Forward-Port-Of: odoo/enterprise#84246
Original PR description
Reproduce: Check the front page of an appointment type with no resources or staff users. This commit avoids duplicating the ‘No slot’ message on the front page of appointment types for which there is no slot available. related: odoo/enterprise@36da382fceba76f3de69306e24c9c6fa018cde9f Task-4750234 Forward-Port-Of: odoo/enterprise#84246
When the user opens the chatter and expands the sidebar, the chatter's topbar overlaps the sidebar. This overlap disrupts the layout and can be frustrating, as it may hide some article links. To fix this, we'll update the sidebar's z-index so it sits above regular elements but remains below modals. Task-4636494 Forward-Port-Of: odoo/enterprise#86462
Original PR description
When the user opens the chatter and expands the sidebar, the chatter's topbar overlaps the sidebar. This overlap disrupts the layout and can be frustrating, as it may hide some article links. To fix this, we'll update the sidebar's z-index so it sits above regular elements but remains below modals. Task-4636494 Forward-Port-Of: odoo/enterprise#86462
Related to odoo/odoo#209846 Forward-Port-Of: odoo/enterprise#86585 Forward-Port-Of: odoo/enterprise#85454
Original PR description
Related to odoo/odoo#209846 Forward-Port-Of: odoo/enterprise#86585 Forward-Port-Of: odoo/enterprise#85454