Thursday, June 26, 2025
54 changes · saas-18.4
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
The web interface no longer shows the reset filter button in the action helper. This simplifies the filtering experience and removes an extra control that was no longer needed.
Original PR description
This commit removes the button used to reset filters in the action helper. task-4891535
Installing the main AI module now also installs the related AI Fields and AI Server Actions features. This makes setup simpler and ensures users get the full AI experience without needing to install extra modules separately.
Original PR description
Improving UX by adding all of the AI related functionalities when AI module is installed. issue ticket task-4855178 Divagations --- In the future (19.0) the ai_fields and ai_server_actions modules should be merged into the ai module. with ticket task-4889610
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 |
Features or functions removed from Odoo
The bank reconciliation list now relies on the standard Odoo selection behavior instead of a module-specific customization. This keeps the user experience consistent across list views while preserving the ability to add lines to a selection by clicking them.
Original PR description
This reverts commit f40533c0b3410676aee29a2b48454213966613f7. In this commit, we added a customization for the bank rec widget by changing the way selection records in a list view works. Before the change: selecting a record then clicking on the line of another record -> the last record is selected, others already selected are ignored After the change: selecting a record then clicking on the line of another record -> the last record is added to the selection But after this: https://github.com/odoo/odoo/pull/212148, this is the standard behaviour, so the bank rec customization is no more needed. task-4816580
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
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.
The IoT printer list now consistently keeps the same printer when duplicate printers share the same IP address and device ID. This prevents printers from appearing or disappearing randomly in the device list, improving reliability for users managing connected printers.
Original PR description
There was a flaw in the printer deduplication logic that meant that in the case where we have two printers with the same IP and the same device-id, the printer that was returned could change randomly with each `get_devices` call. The result was the printers appearing and disappearing randomly in the device list. We fix this by sorting the list of printers first. If multiple printers could be chosen, we take the first one based on identifier. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
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
The website editor once again shows the size of a selected image. This helps content editors quickly check image weight while building pages, supporting better page performance decisions.
Original PR description
When converting the website builder to `html_builder`, the tag that displayed the selected image's size was forgotten. This commit re-introduces it. task-4367641
Empty HTML property fields now display as blank in list views instead of showing the word "False". This makes records easier to read and avoids confusion for users reviewing lists with optional HTML content.
Original PR description
Bug === Create an HTML properties, and don't set a value. It is displayed as "False" in the list view, while it should be an empty string. Change the HTML formatter, so it's consistent with the text formatter. Task-4896271
Website forms with many conditional visibility rules now load much faster. The change avoids repeated recalculation of the same form information, reducing delays for visitors and improving the form experience.
Original PR description
**Problem** Before this commit, the `Form` interaction handled visibility calculations inefficiently. Large forms making massive use of visibility conditions could take seconds to be loaded. The function `getFormDataIncludingDisabledFields` (see [1]) was called more often than necessary, leading to the entire form being cloned for every single entry being checked. **Solution** This commit introduces a simple caching mechanism for the form data. The cached value is updated via `getFormDataIncludingDisabledFields` only at the start of the interaction and when receiving user input (debounced). [1] https://github.com/odoo/odoo/pull/213643 task-4367641
This internal cleanup makes appointment, rental, and website studio builder components easier to reuse across modules. It improves maintainability and supports future enhancements without changing the user experience.
Original PR description
*: website_sale_renting, website_studio This refactor adds `export` to all classes extending `BuilderAction`, allowing them to be reused or imported from other modules. It improves modularity.
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
runbot-error-223159 runbot-error-223635 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212102
Original PR description
runbot-error-223159 runbot-error-223635 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212102
Currently, when a loyalty program has expired, loyalty card are still getting created even though points are not granted. Steps to reproduce: ------------------- * Create a loyatly program and make it sot that is has already expired * Open pos and make an order selecting any customer * Go to the backend and check the loyalty program > Observation: 1 card has been created with 0 points Why the fix: ------------ Not loading the expired programs prevent the creation of loyalty cards.
Original PR description
Currently, when a loyalty program has expired, loyalty card are still getting created even though points are not granted. Steps to reproduce: ------------------- * Create a loyatly program and make it sot that is has already expired * Open pos and make an order selecting any customer * Go to the backend and check the loyalty program > Observation: 1 card has been created with 0 points Why the fix: ------------ Not loading the expired programs prevent the creation of loyalty cards. Using the same logic as module `sale_loyalty` https://github.com/odoo-dev/odoo/blob/5acb89b8ba9be0e18bca65e26c03f47199fcfb4b/addons/sale_loyalty/models/sale_order.py#L461-L465 opw-4671522 Forward-Port-Of: odoo/odoo#208730 Forward-Port-Of: odoo/odoo#208134
Currently, an error is raised when attempting to export the XML for a draft invoice. **Steps to Reproduce:** - Install the `account_edi_ubl_cii` module. - Create an invoice with customer **OpenWood**. - Without confirming the invoice, go to `Print > Export XML`. **Error:** `AttributeError - 'bool' object has no attribute 'replace'` **Cause:** In draft state, the invoice name is `False`, leading to an `AttributeError` when calling `replace()` on bolean value. - [1] [1] - https://
Original PR description
Currently, an error is raised when attempting to export the XML for a draft invoice. **Steps to Reproduce:** - Install the `account_edi_ubl_cii` module. - Create an invoice with customer **OpenWood**. - Without confirming the invoice, go to `Print > Export XML`. **Error:** `AttributeError - 'bool' object has no attribute 'replace'` **Cause:** In draft state, the invoice name is `False`, leading to an `AttributeError` when calling `replace()` on bolean value. - [1] [1] - https://github.com/odoo/odoo/blob/8bc24feca01a7d0e45606ac97e45ddf442670392/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py#L32-L33 Restrict the XML export feature to only allow export for posted invoices, where the name is always defined. Sentry - 6695898207 Forward-Port-Of: odoo/odoo#215389
[FIX] website: fix the website_form_editor_tour tour The primary objective of this commit was to solve the `website_form_editor_tour` tour that was failing undeterministically because this flow happend; - The user types something ("A") as input and clicks somewhere else to commit its change. - The DOM is updated with the new value. - The user types something else ("B") on the same input. - The options are rebuild with the DOM value. -> "A" is displayed in the option input and "B" is
Original PR description
[FIX] website: fix the website_form_editor_tour tour
The primary objective of this commit was to solve the
`website_form_editor_tour` tour that was failing undeterministically
because this flow happend;
- The user types something ("A") as input and clicks somewhere else to
commit its change.
- The DOM is updated with the new value.
- The user types something else ("B") on the same input.
- The options are rebuild with the DOM value.
-> "A" is displayed in the option input and "B" is lost.
From version 18.4, [this commit] was merged to solve the problem so the
fix of the tour is removed.
The `timeout` of the tour is increased as it failed in the multi-build
due to a `Script timeout exceeded` error.
runbot-64572
[this commit]: https://github.com/odoo/odoo/commit/e4191c983ec6444b866f7d16de7b3bc9208ab8c3
Forward-Port-Of: odoo/odoo#213417
Forward-Port-Of: odoo/odoo#213197## Version 18.0+ ## Issue When an animation is set on wishlist button icon, only one product appears per eCommerce page. Same behavior for compare and add-to-cart buttons. ## Steps to reproduce - Enable wishlists from `Settings` App; - Go to shop frontend view in edit mode: - Select a wishlist button icon on any product by clicking on it; - From editor's view, move to `Icon` section: - Add an animation (e.g. `On Appearance`). - Save and refresh; - Move to any shop pag
Original PR description
## Version
18.0+
## Issue
When an animation is set on wishlist button icon, only one product appears per eCommerce page.
Same behavior for compare and add-to-cart buttons.
## Steps to reproduce
- Enable wishlists from `Settings` App;
- Go to shop frontend view in edit mode:
- Select a wishlist button icon on any product by clicking on it;
- From editor's view, move to `Icon` section:
- Add an animation (e.g. `On Appearance`).
- Save and refresh;
- Move to any shop page and see only 1 product.
> [!important]
> Not reproducible in FireFox or Safari.
opw-4784323
Forward-Port-Of: odoo/odoo#215409
Forward-Port-Of: odoo/odoo#213773The field priority is not required (even if it has a default) so it is possible to have False instead of a str. Traceback occures when merging leads that contains historical data. ``` File "/home/odoo/src/odoo/saas-18.3/addons/crm/models/crm_lead.py", line 1501, in _merge_opportunity merged_data = opportunities._merge_data(self._merge_get_fields()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/odoo/src/odoo/saas-18.3/addons/crm/models/crm_lead.
Original PR description
The field priority is not required (even if it has a default) so it is possible to have False instead of a str.
Traceback occures when merging leads that contains historical data.
```
File "/home/odoo/src/odoo/saas-18.3/addons/crm/models/crm_lead.py", line 1501, in _merge_opportunity
merged_data = opportunities._merge_data(self._merge_get_fields())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-18.3/addons/crm/models/crm_lead.py", line 1457, in _merge_data
data[field_name] = fcallable(field_name, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-18.3/addons/crm/models/crm_lead.py", line 1555, in <lambda>
'priority': lambda fname, leads: max(leads.mapped('priority')) if leads else False,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '>' not supported between instances of 'str' and 'bool'
```
Forward-Port-Of: odoo/odoo#214152**Version**: - saas-18.3 **issue**: - The calendar privacy field has no label. **cause**: - after merge this PR https://github.com/odoo/odoo/pull/195101 a new group was added in the mail module, which caused the label to no longer display. **solution**: - Add the new group in the calendar module to restore the label visibility. task-4748282 Forward-Port-Of: odoo/odoo#207952
Original PR description
**Version**: - saas-18.3 **issue**: - The calendar privacy field has no label. **cause**: - after merge this PR https://github.com/odoo/odoo/pull/195101 a new group was added in the mail module, which caused the label to no longer display. **solution**: - Add the new group in the calendar module to restore the label visibility. task-4748282 Forward-Port-Of: odoo/odoo#207952
We added a function in the ticket screen in order to override it in the modules `pos_urban_piper` and `pos_blackbox_be`. task-id: 4781945 enterprise PR: https://github.com/odoo/enterprise/pull/87989 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215300 Forward-Port-Of: odoo/odoo#214861
Original PR description
We added a function in the ticket screen in order to override it in the modules `pos_urban_piper` and `pos_blackbox_be`. task-id: 4781945 enterprise PR: https://github.com/odoo/enterprise/pull/87989 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215300 Forward-Port-Of: odoo/odoo#214861
This PR https://github.com/odoo/odoo/pull/214829 caused a Runbot error. The test introduced in the PR is failing because it compared a list converted from a set to a hardcoded list, leading to inconsistent order. Using a sorted list when converting the set fixes the issue. Forward-Port-Of: odoo/odoo#215773
Original PR description
This PR https://github.com/odoo/odoo/pull/214829 caused a Runbot error. The test introduced in the PR is failing because it compared a list converted from a set to a hardcoded list, leading to inconsistent order. Using a sorted list when converting the set fixes the issue. Forward-Port-Of: odoo/odoo#215773
In this commit, we add a step to ensure that the popover comparator is visible in the DOM before moving on to the next check step. 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#215810
Original PR description
In this commit, we add a step to ensure that the popover comparator is visible in the DOM before moving on to the next check step. 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#215810
`odoo-bin cloc -p /mypath` should work on the given path, but results in an error when trying to split the database because `',' in opt.database` fails as it is `None`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215604
Original PR description
`odoo-bin cloc -p /mypath` should work on the given path, but results in an error when trying to split the database because `',' in opt.database` fails as it is `None`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215604
When there is invalid characters in the field, sending may lead to unexpected behaviour. normalize and keep only the first one Task-id: 4894083 Forward-Port-Of: odoo/odoo#215784 Forward-Port-Of: odoo/odoo#215580
Original PR description
When there is invalid characters in the field, sending may lead to unexpected behaviour. normalize and keep only the first one Task-id: 4894083 Forward-Port-Of: odoo/odoo#215784 Forward-Port-Of: odoo/odoo#215580
Allow batch write on model using the `HtmlFieldHistory` mixin. task-4852381 task-4731389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215010 Forward-Port-Of: odoo/odoo#213116
Original PR description
Allow batch write on model using the `HtmlFieldHistory` mixin. task-4852381 task-4731389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215010 Forward-Port-Of: odoo/odoo#213116
Before this commit, the widget integer was used for a float and was raised as an error. This commit fix it. 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#213727
Original PR description
Before this commit, the widget integer was used for a float and was raised as an error. This commit fix it. 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#213727
Before this commit the opacity slider in the custom color picker ( introduced in this [commit]) in the custom tab would change its opacity at the top based on the opacity of the color you selected, which isn't expected behaviour. To see the issue: - go to any apps where you can edit text (for example, Knowledge) - select any text and expand the toolbar to see the colors options - click on "Apply font color" and navigate to the Custom tab - slide the opacity slider down => slider's opac
Original PR description
Before this commit the opacity slider in the custom color picker ( introduced in this [commit]) in the custom tab would change its opacity at the top based on the opacity of the color you selected, which isn't expected behaviour. To see the issue: - go to any apps where you can edit text (for example, Knowledge) - select any text and expand the toolbar to see the colors options - click on "Apply font color" and navigate to the Custom tab - slide the opacity slider down => slider's opacity changes, this happens because its style's linear gradient goes from our colors opacity value to 0 instead of 100 to 0. [commit]: https://github.com/odoo/odoo/commit/7bbe05b34541d641dd431662e835d2a26e1adfab Forward-Port-Of: odoo/odoo#215434
To adapt to the merge of `hw_drivers` and `hw_posbox_homepage` into `iot_drivers`, we need to update the `odoo.conf` file to change the modules to load. Task: 4860513 Forward-Port-Of: odoo/odoo#215725 Forward-Port-Of: odoo/odoo#215536
Original PR description
To adapt to the merge of `hw_drivers` and `hw_posbox_homepage` into `iot_drivers`, we need to update the `odoo.conf` file to change the modules to load. Task: 4860513 Forward-Port-Of: odoo/odoo#215725 Forward-Port-Of: odoo/odoo#215536
Before this commit, when plain text (e.g., "Some tax") was imported from a CSV file into the HTML field `description`, the system wrapped it in a `<p>` tag during normalization via `html_normalize`, since plain text is not valid HTML. After this commit, we add a check before record creation: - If the value is plain text without any HTML, we wrap it in a `<div>` to make it valid HTML. - If it already contains HTML, we leave it untouched. This avoids unintended `<p>` wrapping by `html_n
Original PR description
Before this commit, when plain text (e.g., "Some tax") was imported from a CSV file into the HTML field `description`, the system wrapped it in a `<p>` tag during normalization via `html_normalize`, since plain text is not valid HTML. After this commit, we add a check before record creation: - If the value is plain text without any HTML, we wrap it in a `<div>` to make it valid HTML. - If it already contains HTML, we leave it untouched. This avoids unintended `<p>` wrapping by `html_normalize`. Note: if content is wrapped in a `<div>`, `html_normalize` will strip it out. This ensures consistent HTML formatting for the description field during create/write operations and prevents unexpected automatic wrapping by the system. task-4862728 Forward-Port-Of: odoo/odoo#215469 Forward-Port-Of: odoo/odoo#214113
For Jordan E-invoicing, the reason for return of a credit note is mandatory in the XML. Before this commit, if the return reason (`ref`) was empty in a credit note, an error from JoFotara pops up during validation. This commit makes sure the user is notified of missing `ref` before submitting the XML to JoFotara. task-4869028 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215542
Original PR description
For Jordan E-invoicing, the reason for return of a credit note is mandatory in the XML. Before this commit, if the return reason (`ref`) was empty in a credit note, an error from JoFotara pops up during validation. This commit makes sure the user is notified of missing `ref` before submitting the XML to JoFotara. task-4869028 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215542
Task: 4610586 If an operator is added in the side panel of Shop Floor, and an MO has multiple work orders, then after marking all of the steps as done, the selected user is assigned to all of them except the final one. This commit fixes the error, assigning the selected operator to all completed work orders. Forward-Port-Of: odoo/enterprise#87019 Forward-Port-Of: odoo/enterprise#84790
Original PR description
Task: 4610586 If an operator is added in the side panel of Shop Floor, and an MO has multiple work orders, then after marking all of the steps as done, the selected user is assigned to all of them except the final one. This commit fixes the error, assigning the selected operator to all completed work orders. Forward-Port-Of: odoo/enterprise#87019 Forward-Port-Of: odoo/enterprise#84790
Steps to reproduce: - Install payroll, l10n_mx_hr_payroll (mexican localisation) - Install l10n_mx_hr_payroll_account - Switch to a Mexican Company - Create a payslip for a mexican employee with amount < 4000 - Compute the sheet for the payslip Error message appears, this error message is not a descriptive to the user or not telling what could have gone wrong. This happens because the mexican pay structure has some salary rules that has to be computed, one of these rules is `Retiremen
Original PR description
Steps to reproduce: - Install payroll, l10n_mx_hr_payroll (mexican localisation) - Install l10n_mx_hr_payroll_account - Switch to a Mexican Company - Create a payslip for a mexican employee with…
Steps to reproduce: - Install payroll, l10n_mx_hr_payroll (mexican localisation) - Install l10n_mx_hr_payroll_account - Switch to a Mexican Company - Create a payslip for a mexican employee with amount < 4000 - Compute the sheet for the payslip Error message appears, this error message is not a descriptive to the user or not telling what could have gone wrong. This happens because the mexican pay structure has some salary rules that has to be computed, one of these rules is `Retirement, assault in elderly and old age (CEAV) IMSS (Employer)` that has mode of code. This mode means calling safe_eval on the code raw text of it written in the xml file on the data folder. This rule aims to find the suitable taxation level to be applied on the salary. It reads the limits of each level and check if the `integrated_daily_wage` of the employee falls in this level and applies that taxation level. There is no upper limit on the salary, But there is a min level, hence if the integrated_daily_wage < mdw (minimum daily wage) the function returns None that used as index in the taxation table leading to an unreadable Exception from the safe_eval call. https://github.com/odoo/enterprise/blob/747482f34ca8210d89d81b3363ec5a8fc3a4ff6f/l10n_mx_hr_payroll/data/salary_rules/hr_salary_rule_regular_pay_data.xml#L1111-L1120 opw-4576482 Forward-Port-Of: odoo/enterprise#88308 Forward-Port-Of: odoo/enterprise#83364
When generating the German tax report, field Kz83 was included in the XML even when the value was 0.00. This caused the exported file to be rejected by the ELSTER platform. This fix removes Kz83 from the XML when its value is null or zero. The ELSTER platform automatically calculates this field if it's missing. source: https://help.deltek.com/product/maconomy/documentation/BPMReporting/CountryReports/Appendix_Germany.html opw-4783544 Forward-Port-Of: odoo/enterprise#86978
Original PR description
When generating the German tax report, field Kz83 was included in the XML even when the value was 0.00. This caused the exported file to be rejected by the ELSTER platform. This fix removes Kz83 from the XML when its value is null or zero. The ELSTER platform automatically calculates this field if it's missing. source: https://help.deltek.com/product/maconomy/documentation/BPMReporting/CountryReports/Appendix_Germany.html opw-4783544 Forward-Port-Of: odoo/enterprise#86978
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
In the Datev standard export, sales with foreign currency and currency indicator are exported to the wrong column. Steps to reproduce: - With a DE Company - Open Accounting / Reporting / Audit Reports / General Ledger - Click "Datev Data (ZIP)" - Open EXTF_accounting_entries.csv According to the documentation https://apps.datev.de/help-center/documents/1003221 Chapter 3. when a journal entry is in a foreign currency: - The amount in foreign currency should go into Column B - The c
Original PR description
In the Datev standard export, sales with foreign currency and currency indicator are exported to the wrong column. Steps to reproduce: - With a DE Company - Open Accounting / Reporting / Audit Reports / General Ledger - Click "Datev Data (ZIP)" - Open EXTF_accounting_entries.csv According to the documentation https://apps.datev.de/help-center/documents/1003221 Chapter 3. when a journal entry is in a foreign currency: - The amount in foreign currency should go into Column B - The currency code should go into Column C - The base currency amount (i.e. the company's local currency) should be shown in Columns E and F opw-4701001 Forward-Port-Of: odoo/enterprise#87786 Forward-Port-Of: odoo/enterprise#87002
- We authorize to make payments for orders coming from Urban Piper. - After updating the order as paid, we send it to the pos_blackbox_be. task-id: 4781945 community PR: https://github.com/odoo/odoo/pull/214861 Forward-Port-Of: odoo/enterprise#87989
Original PR description
- We authorize to make payments for orders coming from Urban Piper. - After updating the order as paid, we send it to the pos_blackbox_be. task-id: 4781945 community PR: https://github.com/odoo/odoo/pull/214861 Forward-Port-Of: odoo/enterprise#87989
In this commit: https://github.com/odoo/enterprise/commit/74306d39479f9cfb24bb749a520c533df3f7e404 change the computation of the remaining amount of the reconcile wizard. Since selectedLineSum compute the sum of the line selected when adding 2 lines the remaining amount would be changed and kept in the state. Then adding a line again, the selectedLineSum would be the sum of the 3 lines and not just the new line that we just added. no task id Forward-Port-Of: odoo/enterprise#88067
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/74306d39479f9cfb24bb749a520c533df3f7e404 change the computation of the remaining amount of the reconcile wizard. Since selectedLineSum compute the sum of the line selected when adding 2 lines the remaining amount would be changed and kept in the state. Then adding a line again, the selectedLineSum would be the sum of the 3 lines and not just the new line that we just added. no task id Forward-Port-Of: odoo/enterprise#88067
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
### Steps to reproduce: - Create 2 storable products: Product A, Product B - Create a control point pass/fail control by quantity on receipt and set both products on it. - Create and confirm a receipt with 2 moves: - 2 x Product A - 2 x Product B - Click on the "Quality Check" button and mark one unit of Product A as failed. > This should open the QC for product B. - Close the QC for prodcut B wihtout setting it as failed or passed. - Click on the "Quality Check" button ####
Original PR description
### Steps to reproduce: - Create 2 storable products: Product A, Product B - Create a control point pass/fail control by quantity on receipt and set both products on it. - Create and confirm a…
### Steps to reproduce:
- Create 2 storable products: Product A, Product B
- Create a control point pass/fail control by quantity on receipt and set both products on it.
- Create and confirm a receipt with 2 moves:
- 2 x Product A
- 2 x Product B
- Click on the "Quality Check" button and mark one unit of Product A as failed.
> This should open the QC for product B.
- Close the QC for prodcut B wihtout setting it as failed or passed.
- Click on the "Quality Check" button
#### > Nothing happends
### Expected behavior:
The QC for product B should open.
### Cause of the issue:
When the quality check is marked as failed, the related move is picked: https://github.com/odoo/enterprise/blob/679c81924e05e7544eecfdb960c9ed9611e9cdd5/quality_control/models/quality.py#L438-L451 However, the move for your second porduct is not and hence, its product is not considered to be checkable by the `check_quality` action: https://github.com/odoo/enterprise/blob/679c81924e05e7544eecfdb960c9ed9611e9cdd5/quality_control/models/stock_picking.py#L61-L69
Since these lines were added in c83728f3a7f1504b272f4ef97e4187868338adb3 to not bypass the QC of the unpicked move at validation we should probably only add that filtering condition in that case and continue to consider the unchecked moves as checkable prior to validation.
opw-4765075
Forward-Port-Of: odoo/enterprise#84743This commit automatically enables the 'Units of Measure' setting when the user auto-fixes their settings to make their POS scale certified. While this is not a strict requirement, it helps the users to then quickly set the correct units for their products (e.g. kg) task-4885681 Forward-Port-Of: odoo/enterprise#88451 Forward-Port-Of: odoo/enterprise#88134
Original PR description
This commit automatically enables the 'Units of Measure' setting when the user auto-fixes their settings to make their POS scale certified. While this is not a strict requirement, it helps the users to then quickly set the correct units for their products (e.g. kg) task-4885681 Forward-Port-Of: odoo/enterprise#88451 Forward-Port-Of: odoo/enterprise#88134