Thursday, June 26, 2025
100 changes
18 changes
Enhancements to existing features
This update improves how Odoo exposes model field information internally, reducing overhead in frequently used operations. It should help core system performance without changing how business users interact with Odoo.
Original PR description
Currently, the `_fields` attribute in the model is an instance of a `ReadonlyDict`. For performance reasons, we had to expose its internal dictionary in a way that is not completely satisfactory. Also, the methods `values()` and `items()`, which are frequently used by the ORM, are less efficient than a plain dict. This commit adds a `_fields__` attribute, which is the mutable structure containing the fields. It is safely exposed as a `MappingProxyType` in attribute `_fields`. This new strategy has the advantage of removing the performance overhead introduced by the former `ReadonlyDict`. task-4808836
When users create or edit a link, the editor now recognizes when the selected text is already a valid web address and automatically fills it into the URL field. This reduces manual typing and helps users create links faster with fewer mistakes.
Original PR description
This commit ensures that when opening link popover, if selected label text is a valid URL then URL input in link popover is prefilled by the corresponding URL. task-4844337 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds automated checks around live chat status behavior to help ensure recent changes keep working as intended. It reduces the risk of regressions in the live chat experience without changing customer-facing functionality.
Original PR description
Adding essential tests regarding to the previous PR. follow-up of https://github.com/odoo/odoo/pull/215246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fix ensures text highlights appear in the correct position when selected content includes a line break. It improves the visual reliability of the website builder so users can apply highlights without unexpected misalignment.
Original PR description
Steps to reproduce: - Go to the website builder in edit mode - Select "We build great products ... to optimize their performance", the goal here is to have a `<br>` in the selection - Highlight the selection | Expected behaviour | Current behaviour | |--------|--------| |  |  | | Highlights are well positioned | The highlights SVGs are not well positioned, the br shift everything |
Code cleanup and technical improvements
This update reorganizes website builder code so key editing actions can be reused by other parts of Odoo. It supports cleaner future development and easier extension of website features, with no expected direct change for end users.
Original PR description
This refactor adds `export` to all classes extending `BuilderAction`, allowing them to be reused or imported from other modules. It improves modularity.
Miscellaneous changes
In lxml from 4.6.0 to 5.2.0: [1] introduces an issue where "style" tags will always be cleaned if there is more than one data url inside it (the regex is too greedy) in 4.6.0 [2] fixes the issue in the lxml_html_clean module version 0.1.1 which is the dependency that replaces lxml.html.clean from lxml 5.2.0 and up We apply the fix from [2] in odoo directly. With many checks to ensure we don't override any potential deviation from the original regex. The issue only appear from 18.
Original PR description
In lxml from 4.6.0 to 5.2.0: [1] introduces an issue where "style" tags will always be cleaned if there is more than one data url inside it (the regex is too greedy) in 4.6.0 [2] fixes the issue in the lxml_html_clean module version 0.1.1 which is the dependency that replaces lxml.html.clean from lxml 5.2.0 and up We apply the fix from [2] in odoo directly. With many checks to ensure we don't override any potential deviation from the original regex. The issue only appear from 18.0 onwards, as that's when "email_outgoing" sanitation started being applied [3] [1]: https://github.com/lxml/lxml/commit/73778681f14359fe6d16644e69aaca276eba525a [2]: https://github.com/fedora-python/lxml_html_clean/commit/97402b5f6e94583c8f1c3f6070ef19ce1df90da8 [3]: https://github.com/odoo/odoo/commit/24731938f75358fd3c72b91465b72ab80d62d208 runbot-105525 Forward-Port-Of: odoo/odoo#215981 Forward-Port-Of: odoo/odoo#213393
7 changes
Resolved issues and error corrections
This fix removes extra blank separators from an address used in Ecuadorian electronic delivery guide tests. It helps keep automated checks aligned with the expected address format, reducing false test failures and improving release reliability.
Original PR description
The address formatting in test case included redundant separators, resulting in: `Libertador Simón Bolívar 1155 - - Quito - Ecuador` This has been corrected to remove the empty segment, for a valid address format: `Libertador Simón Bolívar 1155 - Quito - Ecuador` reference PR : https://github.com/odoo/odoo/pull/215562
This fix ensures the website editor's link popover closes when users click elsewhere, such as another menu or top bar item. It prevents stale popovers from staying on screen and makes editing website navigation feel cleaner and less confusing.
Original PR description
Before this commit clicking on certain elements with a link popover open would not cause the link popover to close. Steps to reproduce: - go to the website homepage - open the editor - click on any top menu links like Home or Contact Us - click on the user dropdwon in the topbar (usually Administrator) - the popover from the first click is still open After the change clicking anywere that's not the popover's current link will cause the popover to close.
This fix ensures Romanian electronic invoicing only searches invoices and bills within the relevant company. It helps prevent records from other companies from being included in multi-company environments, improving accuracy and data separation.
Original PR description
Add the company to the domain to avoid searching invoices/bills from other companies. task-####### --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an internal automated test so it works correctly when only the Purchase Stock app is being tested. It ensures a related feature is available before checking extra behavior, helping keep future updates reliable without changing day-to-day user workflows.
Original PR description
This commit fixes the `test_move_description` introduced in odoo/odoo#177390. The test failed in single app tests because part of the functionality depended on the existence of `product_matrix` module. This commit makes sure that the module is installed when checking for those extra parts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could occur when users grouped records by custom property fields in web views. The change helps reports and grouped lists load reliably when property-based fields are used, and adds test coverage to prevent the issue from returning.
Original PR description
We get a KeyError in `self._fields[groupby_spec.split(':')[0]]` in the `_open_groups` when we group by a property field because groupby_spec contains a property path (properties.property_name).
Fix it and add a test for it.This fix restores a consistent visual appearance for animated text options in the website builder after a recent redesign. It also makes highlighted text options look more aligned with the animated text controls, improving clarity for users editing website content.
Original PR description
With the redesign after the initial website builder refactor, the appearance of option for animated text was broken: it mixed light on dark and dark on light elements. After the initial website builder refactor, the appearance of the option for highlighted text was a bit weird. This commit changes it to be closer to the animated text option. Redesign commit: 0bbf24a4b0d6d6160e1964f18391f86b4513fc72 Website refactor: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
This update corrects a test setup issue for electronic invoicing so nightly checks use the intended company registration number. It helps keep automated quality checks reliable and prevents false failures in the community test environment.
Original PR description
The TestUblBis3 tests are failing in the nightly community runbot because the company_registry is not set on the company, causing the peppol_eas and peppol_endpoint to use the company's VAT number rather than its company_registry number. runbot-227638
There is a typo in the name of the Hebrew language. This commit fixes it. Task-4742567 Forward-Port-Of: odoo/odoo#212439 Forward-Port-Of: odoo/odoo#212160
Original PR description
There is a typo in the name of the Hebrew language. This commit fixes it. Task-4742567 Forward-Port-Of: odoo/odoo#212439 Forward-Port-Of: odoo/odoo#212160
Description of the issue this PR addresses: - The video settings popup has toggle options like autoplay and loop. These need styles from the website module to look like switches. Without that module, they show as checkboxes. Current behavior before PR: - When the website module is not installed, Toggle options look like checkboxes instead of switches. Desired behavior after PR is merged: - Basic switch styles are added directly in the html_editor module. Toggles now look correct e
Original PR description
Description of the issue this PR addresses: - The video settings popup has toggle options like autoplay and loop. These need styles from the website module to look like switches. Without that module, they show as checkboxes. Current behavior before PR: - When the website module is not installed, Toggle options look like checkboxes instead of switches. Desired behavior after PR is merged: - Basic switch styles are added directly in the html_editor module. Toggles now look correct even without the website module. task-4865400 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#214148
\*: website_mail This PR addresses several issues in the blog module, including: Commit [1]: retain follow-us input button when logged in - Steps to reproduce: 1. Go to any blog post. 2. Enable the sidebar. 3. Select any category (e.g., Travel). Issue: A subscribe button appears in the 'Follow Us' section. - Solution: Currently, the input field is only shown to public users. This happens because the input element is restricted by the `base.groups_public` group in the XML code. Si
Original PR description
\*: website_mail This PR addresses several issues in the blog module, including: Commit [1]: retain follow-us input button when logged in - Steps to reproduce: 1. Go to any blog post. 2. Enable the…
\*: website_mail This PR addresses several issues in the blog module, including: Commit [1]: retain follow-us input button when logged in - Steps to reproduce: 1. Go to any blog post. 2. Enable the sidebar. 3. Select any category (e.g., Travel). Issue: A subscribe button appears in the 'Follow Us' section. - Solution: Currently, the input field is only shown to public users. This happens because the input element is restricted by the `base.groups_public` group in the XML code. Since this is an XML change in v17.0 (stable version), we need to implement the fix in JS instead. After that, we will adapt the code from the master branch. Commit [2]: remove unnecessary months from blog category - Steps to reproduce: 1. Have a blog post in a category (e.g., Astronomy) published in Feb-2025. 2. In another category (e.g., Travel), have blog posts in both Jan-2025 and Feb-2025. 3. When selecting the Astronomy category, the sidebar `Archives` filter shows all months, even if no blog post exists in Jan 2025. - Solution: It will now show only months that contain blog posts for the selected category. Filter out from the backend according to their publishing date. Commit [3]: correct tag redirection to backend in blog posts - Steps to reproduce: 1. Go to any blog post. 2. Turn on the sidebar. 3. Create a new blog post. 4. Save it. Issue : clicking `add some` on tags redirects to the homepage instead of the backend of that blog post. - Solution: a wrong URL was inserted in the anchor tag. For stable, we changed it from JS, but it will be applied to XML in master. task-4546888 Forward-Port-Of: odoo/odoo#214746 Forward-Port-Of: odoo/odoo#197172
@moduon MT-10568 MT-10569 MT-10567 MT-10566 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#214739
Original PR description
@moduon MT-10568 MT-10569 MT-10567 MT-10566 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#214739
Steps to reproduce: 1. Set company warehouse to two-step manufacturing. 2. Create products: X, A, B, C. 3. Add on-hand quantities: A = 10, C = 5. 4. Create a BOM for X with A and B as components. 5. Create and confirm a MO for X in the two-step warehouse. 6. Check product B's forecast report → shows -1. 7. Add a reordering rule for B → forecast shows -1. 8. Edit X’s BOM: remove B and add C instead. 9. Update the MO using the `update_bom` button. 10. Check MO components. 11. Check WH/P
Original PR description
Steps to reproduce: 1. Set company warehouse to two-step manufacturing. 2. Create products: X, A, B, C. 3. Add on-hand quantities: A = 10, C = 5. 4. Create a BOM for X with A and B as components. 5.…
Steps to reproduce: 1. Set company warehouse to two-step manufacturing. 2. Create products: X, A, B, C. 3. Add on-hand quantities: A = 10, C = 5. 4. Create a BOM for X with A and B as components. 5. Create and confirm a MO for X in the two-step warehouse. 6. Check product B's forecast report → shows -1. 7. Add a reordering rule for B → forecast shows -1. 8. Edit X’s BOM: remove B and add C instead. 9. Update the MO using the `update_bom` button. 10. Check MO components. 11. Check WH/Preprod transfer → B is still there. 12. Re-check steps 6 and 7. **Issue**: In two-step manufacturing, two stock moves are created: - move1: WH/Stock → WH/Preprod - move2: WH/Preprod → Virtual/Production The forecast report uses the company warehouse (WH) as the location domain and includes move2. It calculates: forecast = qty_available - demand = 0 - 1 = -1 The reordering rule uses WH/Stock (its default location) and includes move1, resulting in the same forecast: -1. After updating the BOM to remove B: - move2 is deleted correctly. - move1 remains on the pre-production transfer. This causes an inconsistency: - Forecast report (based on move2) → shows 0 - Reordering rule (based on move1) → still shows -1 We set the product_uom_qty to 0 of the prepoduction moves so procurement runs with negative qty move and it is merged with the existing ones in the preproduction picking. This will make the moves in the preprod picking be 0 and not deleted to avoid deleting manually added moves from the client in the preproduction picking. **Limitation** The current setup will update the pre_prod_pick moves with 0 demand, but for the post_prod_pick moves there is no pull rule that will trigger a procurement with -ve old demand to update the post_prod_pick move leaving it not updated to the bom changes. This will not be an issue in 18.0+ because of changing to push rules as the post_prod_pick will not be there unless the MO is done, so BoM updates will not be needed to be reflected. opw-4746230 Forward-Port-Of: odoo/odoo#215693 Forward-Port-Of: odoo/odoo#209642
Modifies a test to check the tax disclaimer added by 4ec8d2198a1a0 (and fixed by 3d4027b6ab115) to prevent regression. opw-4454112 Forward-Port-Of: odoo/odoo#215895 Forward-Port-Of: odoo/odoo#215572
Original PR description
Modifies a test to check the tax disclaimer added by 4ec8d2198a1a0 (and fixed by 3d4027b6ab115) to prevent regression. opw-4454112 Forward-Port-Of: odoo/odoo#215895 Forward-Port-Of: odoo/odoo#215572
Kenyan electronic stock reporting no longer changes calculation behavior unless a Kenyan vendor bill is actually being imported. This prevents unintended effects on regular accounting workflows while preserving the intended import behavior.
Original PR description
…KE vendor bill
This update fixes an error that could occur when changing selected bank reconciliation lines if no lines were properly selected. It helps users continue reconciliation work without unexpected interruptions.
Original PR description
This fix the traceback where selected lines is undefined and so when going to changeInSelectedMoveLine the check on the length crashes opw-4879020 opw-4892495 opw-4895837
This fixes commission achievement reporting so it no longer depends on a sales team field that was removed earlier. It helps prevent reporting errors and keeps commission calculations aligned with the current data model.
Original PR description
Since https://github.com/odoo/enterprise/pull/80888/files#diff-c5cbf70467370daa35b2be432bf26a385b61430164e32347906d6751209bcfa8L14 the team_id field is no longer available on the sale.commission.achievement model. taskid: 4844215
Miscellaneous changes
This commit solves the following bugs in Norwegian saft as per customer feedback: 1. Removed the StandardAccountID 2. Added the CreditAmount tag value to the XML file if the both debit and credit values is 0 for an entry The latter point in needed because the SAF-T XML validator expects CreditAmount/DebitAmount tag even if the entry is empty. This case may happen if, for example, we have an exchange rate entry = $0.000001. Since the journal entry is approximating to only 2 decimal places,
Original PR description
This commit solves the following bugs in Norwegian saft as per customer feedback: 1. Removed the StandardAccountID 2. Added the CreditAmount tag value to the XML file if the both debit and credit values is 0 for an entry The latter point in needed because the SAF-T XML validator expects CreditAmount/DebitAmount tag even if the entry is empty. This case may happen if, for example, we have an exchange rate entry = $0.000001. Since the journal entry is approximating to only 2 decimal places, the amounts on the entry end up being 0s. task-4714764 Forward-Port-Of: odoo/enterprise#88580 Forward-Port-Of: odoo/enterprise#83963
**= pos_restaurant_preparation_display Following this commit: - In preparation display, translation has been introduced which translates the course ( first letter i.e. C ) into user language. - Presets have been made centered in the UI and encapsulated in the pill for better representation. - Preset background color has been added in the preparation display same as set in the backend. - the `I` button in the preparation display is removed. task-4668552 Community PR - https://github.co
Original PR description
**= pos_restaurant_preparation_display Following this commit: - In preparation display, translation has been introduced which translates the course ( first letter i.e. C ) into user language. - Presets have been made centered in the UI and encapsulated in the pill for better representation. - Preset background color has been added in the preparation display same as set in the backend. - the `I` button in the preparation display is removed. task-4668552 Community PR - https://github.com/odoo/odoo/pull/203442 Forward-Port-Of: odoo/enterprise#82177
This commit will change the condition of display of the coda_split_transactions allowing users to choose whether transactions are imported individually or in batch. opw-4873108 Forward-Port-Of: odoo/enterprise#88370
Original PR description
This commit will change the condition of display of the coda_split_transactions allowing users to choose whether transactions are imported individually or in batch. opw-4873108 Forward-Port-Of: odoo/enterprise#88370