Wednesday, January 29, 2025
57 changes · saas-18.1
Enhancements to existing features
Kanban views will no longer show the default grouping as a removable search filter. This keeps the search bar simpler and avoids presenting users with an option that is not useful for how Kanban boards are typically used.
Original PR description
Since https://github.com/odoo/odoo/pull/179887, the default_group_by is displayed inside the facets of the search bar. This feature has been deemed useless in the case of the kanban view since removing groupbys in this view doesn't make much sense functionally. task-4489226
Resolved issues and error corrections
This fix restores a reliable way for developers and testers to simulate read-only database behavior locally without needing a real replica. It reduces confusion in configuration handling and helps prevent accidental read-only behavior when no replica is intended.
Original PR description
A regression introduced by #193728 removes the support for local read-only testing without a real replica. Before this change, it was possible to test a readonly like behavior by providing a `--db_replica_host=` to the command line. The empty replica will still use a socket connection to the main server, but would work as if a replica host was given. The distinction between an empty string and False was used to make it work Since b1f7be518e2075c546bcedc0f4ba6dd62dff3c8f the default is not False but an empty string, leading to the readonly behavior even without a replica. This pr proposes to introduce a new dev mode flag to enable the replica mode, without False vs empty string check avoiding some confusion.
Miscellaneous changes
When the list of sources is longer than the `<AutoComplete>` height, navigating with the arrow keys did not scroll the menu. This commit makes sure the active option is always in focus and visible. task-3758859 Forward-Port-Of: odoo/odoo#184250
Original PR description
When the list of sources is longer than the `<AutoComplete>` height, navigating with the arrow keys did not scroll the menu. This commit makes sure the active option is always in focus and visible. task-3758859 Forward-Port-Of: odoo/odoo#184250
The mail avatar stack now shows the overflow counter on top of the previous avatar instead of hiding it. This makes participant counts clearer when many people are shown in a compact avatar list.
Original PR description
The avatar stack displays several avatar on top of each other. When there are too many avatars to display, a counter is shown. However, this counter is hidden by the previous avatar. In order for the stack to work, each item should have an higher z index than the previous one. It's correctly done for avatars but not for the counter. This pr fixes the issue. | Before | After | | ------------- | ------------- | |  |  |
Live chat users can now confirm the close confirmation dialog with the Enter key as expected. Focus also returns to the message composer when cancelling, making it easier to continue typing or reopen the confirmation with the keyboard.
Original PR description
Before this commit, the Enter hotkey did not work to confirm the CloseConfirmation in livechat. This happened because: - The `keydown` event is currently captured by the chat window not the CloseConfirmation component because the focused element is not properly detected. - `useAutofocus` doesn't detect the focus target element because it checks only for the main tree DOM root, not the shadow root. This PR changes the `useAutofocus` to handle the shadow roots and puts the focus on the chat window composer on cancel so it's more effective in case the user needs to type or use Esc to reopen close confirmation.
This update cleans up recently added emoji picker code by using clearer method names and ensuring mouse events are passed correctly. It is a low-risk maintenance fix that helps keep the interface reliable and easier to maintain.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/195236 PR above add new methods to emoji picker for nice little feature. Commit had minor issues that this PR fixes: - names were poor: onMouseEnter => onMouseenterEmoji (mouseenter event on an emoji) onMouseLeave => onMouseleaveEmoji (mouseleave event on an emoji) currentSelectedEmoji => activeEmoji (simpler and consistent with existing attributes on this component) - ev of mouseenter and mouseleave were not propagated correctly to the handler methods (even if not used... yet?)
This fixes how hierarchy-based searches handle text input, so matching records are found before their related hierarchy is resolved. It helps prevent missed results in filters that use names or other text values instead of exact record IDs.
Original PR description
Domains such as `[('id', 'child_of', 'some_str')]` should search the corecords using ilike before resolving the hierarchy. Adding tests for this use case.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes a small visual issue where icons and labels in mail message and chat action menus did not line up neatly. The change makes the interface look more polished and easier to scan without affecting functionality.
Original PR description
They were slightly misaligned visually, which didn't look great. This is fixes by replacing `.align-items-center` by `.align-items.baseline`    
A bug in Manufacturing Planning Schedule forecast details was fixed so the system now uses the correct purchase order line field. This prevents an error that could interrupt users when viewing or calculating forecast quantities.
Original PR description
Currently, a traceback occurs while executing the compute method `_compute_quantity_and_label`. The error is occurring from the below line https://github.com/odoo/enterprise/blob/272f945e1ca427316fd7d08b7bb611074bed2a6f/mrp_mps/wizard/mrp_mps_forecast_details.py#L40 This is because in `purchase_order_line`, the `product_uom` field is renamed to the `product_uom_id` from the below commit. https://github.com/odoo/odoo/pull/186250/files#diff-5684edced9bdfc98021a85de4c6cdf691ea7add74e56ab50334a1d7db9ef4224R33 So indeed an attribute error will occur from the above mentioned line. Error:- ``` AttributeError: 'purchase.order.line' object has no attribute 'product_uom' ``` By giving the valid attribute we can resolve this issue. sentry-6248119730, 6240577568
Since render.qweb was replaced by renderToElement, the spam input search crashes if more than one post meets the search. This commit renders a fragment instead of an element to bypass this limitation. Steps to reproduce: - Connect as Admin - Flag 2 posts on the forum ("..." at the bottom of a post > Flag) - Go to the flagged posts in the moderation tools (left bar) - Click on "Filter Tool" - Select the "Text" tab - Type "e" (to select both posts) => Traceback. (No linked task) Forwa
Original PR description
Since render.qweb was replaced by renderToElement, the spam input search crashes if more than one post meets the search. This commit renders a fragment instead of an element to bypass this limitation.
Steps to reproduce:
- Connect as Admin
- Flag 2 posts on the forum ("..." at the bottom of a post > Flag)
- Go to the flagged posts in the moderation tools (left bar)
- Click on "Filter Tool"
- Select the "Text" tab
- Type "e" (to select both posts) => Traceback.
(No linked task)
Forward-Port-Of: odoo/odoo#195502
Forward-Port-Of: odoo/odoo#191389**Issue:** When "l10n_it" is installed, an override of "_message_set_main_attachment_id" method is changing the default value of "filter_xml" param from True to False, which is impacting the general behavior when the module is installed. As a consequence, xml files can be set as main attachment of a bill, which generates unreadable PDF files when using "Print > Original Bills" action on a bill. opw-4439034 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/s
Original PR description
**Issue:** When "l10n_it" is installed, an override of "_message_set_main_attachment_id" method is changing the default value of "filter_xml" param from True to False, which is impacting the general behavior when the module is installed. As a consequence, xml files can be set as main attachment of a bill, which generates unreadable PDF files when using "Print > Original Bills" action on a bill. opw-4439034 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195317
`partner_gid` was missing from `res_company_form_view_onboarding` view which was creating a bug when applying the partner autocomplete. Rollback of odoo/195000 as it created issues if you uninstalled `partner_autocomplete`. The field will still be present in the view, but it wouldn't exist in the database. opw-4489441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195251
Original PR description
`partner_gid` was missing from `res_company_form_view_onboarding` view which was creating a bug when applying the partner autocomplete. Rollback of odoo/195000 as it created issues if you uninstalled `partner_autocomplete`. The field will still be present in the view, but it wouldn't exist in the database. opw-4489441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195251
The error was caused by calling .trim() on a variable that could be undefined. This commit adds a check to ensure the variable is defined before calling .trim() Forward-Port-Of: odoo/odoo#195421
Original PR description
The error was caused by calling .trim() on a variable that could be undefined. This commit adds a check to ensure the variable is defined before calling .trim() Forward-Port-Of: odoo/odoo#195421
Versions -------- - 17.0+ Steps ----- 1. Enable Wire Transfer as a payment provider; 2. in eCommerce, add an item to cart; 3. go to checkout; 4. pay via wire transfer. Issue ----- The order reference isn't shown below the "Thank you for your order" message because the payment transaction hasn't been approved yet. Solution -------- Show the order reference regardless of transaction status. opw-3844583 Forward-Port-Of: odoo/odoo#195228
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable Wire Transfer as a payment provider; 2. in eCommerce, add an item to cart; 3. go to checkout; 4. pay via wire transfer. Issue ----- The order reference isn't shown below the "Thank you for your order" message because the payment transaction hasn't been approved yet. Solution -------- Show the order reference regardless of transaction status. opw-3844583 Forward-Port-Of: odoo/odoo#195228
Fix the error displayed error. The current code causes a key error. task-no Forward-Port-Of: odoo/odoo#195388
Original PR description
Fix the error displayed error. The current code causes a key error. task-no Forward-Port-Of: odoo/odoo#195388
### Issue: - The negative values in Vendor Bills are not being reflected in the Analytic Account linked to a project. - the negative value does not reduce the project’s total cost in the Analytic Report cost calculations. ### Steps to reproduce: 1- Create a project and set an analytic account or use the "Renovations" project. 2- Create a vendor bill. 3- On the VB add two lines one with a positive Price and the other with a negative Price. 4- on `Analytic` of each line set the projec
Original PR description
### Issue: - The negative values in Vendor Bills are not being reflected in the Analytic Account linked to a project. - the negative value does not reduce the project’s total cost in the Analytic…
### Issue:
- The negative values in Vendor Bills are not being reflected in the Analytic Account linked to a project.
- the negative value does not reduce the project’s total cost in the Analytic Report cost calculations.
### Steps to reproduce:
1- Create a project and set an analytic account or use the "Renovations" project.
2- Create a vendor bill.
3- On the VB add two lines one with a positive Price and the other with a negative Price.
4- on `Analytic` of each line set the project to `Renovations` or the project you created.
5- Validate the vendor bill.
6- Go to the project app and click on the 3 dots of the project you choose and click on `Project Updates`.
7- Notice the total cost of the project is not reflecting the negative value of the vendor bill.
### Solution:
- The issue is caused by the condition ('price_subtotal', '>', 0) in the query for account.move.line.
- Removing this condition ensures both positive and negative price_subtotal values are included.
opw-[4416931](https://www.odoo.com/web#id=4416931&view_type=form&model=project.task)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#195071
Forward-Port-Of: odoo/odoo#194300Prior to this commit, the PayPal SDK was used to render a single payment button that replaced the generic submit button of the payment form. This prevented disabling the button when the conditions were not met to allow the payment (e.g., the "Terms and Conditions checkbox was not ticked) as this mechanism relies on the PaymentButton public widget, which was incompatible with PayPal's custom buttons. This commit ensures that PayPal buttons, too, are disabled when the payment is not allowed by
Original PR description
Prior to this commit, the PayPal SDK was used to render a single payment button that replaced the generic submit button of the payment form. This prevented disabling the button when the conditions were not met to allow the payment (e.g., the "Terms and Conditions checkbox was not ticked) as this mechanism relies on the PaymentButton public widget, which was incompatible with PayPal's custom buttons. This commit ensures that PayPal buttons, too, are disabled when the payment is not allowed by making the PaymentButton widget attach itself to the PayPal button container, creating two PayPal buttons - one enabled and one permanently disabled - instead of one, and alternately showing them depending on whether the payment is allowed. opw-4354267 Forward-Port-Of: odoo/odoo#194997
### Steps to reproduce: - Create a new Contact - Set the country to Morocco - Add "52258521" as a VAT number - Try to validate -> Error ### Cause: Only occurs after saas-17.4 because it is related to the library `stdnum`. The version of this library change when the Python version is >3.11. As the SaaS version use Python3.12 since saas-17.4 and Python3.10 before, the bug only appears in saas-17.4, but this change targets 17.0 because 17.0 supports Python > 3.10. The cause of the bug i
Original PR description
### Steps to reproduce: - Create a new Contact - Set the country to Morocco - Add "52258521" as a VAT number - Try to validate -> Error ### Cause: Only occurs after saas-17.4 because it is related to the library `stdnum`. The version of this library change when the Python version is >3.11. As the SaaS version use Python3.12 since saas-17.4 and Python3.10 before, the bug only appears in saas-17.4, but this change targets 17.0 because 17.0 supports Python > 3.10. The cause of the bug is the new version of the library which implements a verification method that corresponds to Moroccan ICE numbers and not VAT numbers. ### Solution: Create the method to check the Moroccan VAT numbers. The format is just a number with 8 digits. opw-4447478 Forward-Port-Of: odoo/odoo#194592
Steps to reproduce the bug: - Create a storable product “C1”: - MTO + Manufacture - BoM: - Component: 1 unit of C2 - Create a storable product “P1” - Component: 1 unit of C1 - Create a MO to produce one unit of P1: - Confirm - A child MO with one unit of C1 is created - Update the qty producing of P1 to 2 - A new MO to produce one unit of C1 is created Problem: The MO of P1 is linked only to the last MO of C1. This occurs because the “created_productio
Original PR description
Steps to reproduce the bug: - Create a storable product “C1”: - MTO + Manufacture - BoM: - Component: 1 unit of C2 - Create a storable product “P1” - Component: 1 unit of C1 - Create a MO to produce…
Steps to reproduce the bug:
- Create a storable product “C1”:
- MTO + Manufacture
- BoM:
- Component: 1 unit of C2
- Create a storable product “P1”
- Component: 1 unit of C1
- Create a MO to produce one unit of P1:
- Confirm
- A child MO with one unit of C1 is created
- Update the qty producing of P1 to 2
- A new MO to produce one unit of C1 is created
Problem:
The MO of P1 is linked only to the last MO of C1.
This occurs because the “created_production_id” field in the stock move of C1 (associated with the MO of P1) is updated to reference the most recent MO of C1. Additionally, since the following fix:
https://github.com/odoo/odoo/commit/c5b3f41fbd442def9e97acb023a00862e7d03eb3#diff-6d86bc8c3e9aa22586656b702849c5bbbb00c9b97ffd08bc0842e0e68f8948f9R74
Each new MO has its own procurement group.
As a result, when using the _get_children method:
- The method retrieves stock moves linked to the current procurement group.
- It uses their created_production_id to fetch the associated procurement group and then retrieves the related production_id.
However, since the two child MOs of C1 belong to different procurement groups, only the latest MO is returned.
opw-4450210
Forward-Port-Of: odoo/odoo#194032
Forward-Port-Of: odoo/odoo#192952### Description of the issue/feature this PR addresses: When a product is configured with both buy and manufacture routes, the manufacture route is always prioritized, regardless of the sequence defined in the routes. ### Current behavior before PR: The method extract_rule stops evaluating routes once it finds a valid rule, even if other rules with a lower sequence exist. This leads to the manufacture route being prioritized over buy, which is not the intended behavior. ### Desired behav
Original PR description
### Description of the issue/feature this PR addresses: When a product is configured with both buy and manufacture routes, the manufacture route is always prioritized, regardless of the sequence defined in the routes. ### Current behavior before PR: The method extract_rule stops evaluating routes once it finds a valid rule, even if other rules with a lower sequence exist. This leads to the manufacture route being prioritized over buy, which is not the intended behavior. ### Desired behavior after PR is merged: The routes are now evaluated based on their sequence, ensuring that rules associated with routes of lower sequence are considered first. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr cc @ForgeFlow Forward-Port-Of: odoo/odoo#194922 Forward-Port-Of: odoo/odoo#188846
In this commit, we fix multiple tours on step that can cause non deterministic behaviors: - show_expense_receipt_tour: Wait the chatter is loaded to prevent lost focus on the input targetted on the next step. - discuss_channel_tour: use hover helper to concat three steps. - website_gray_color_palette: use range hoot helper and wait ui loading appears before to wait it disappears... In the goal to change tour engine and base it on waitFor instead of MutationObserver, these additionnal steps
Original PR description
In this commit, we fix multiple tours on step that can cause non deterministic behaviors: - show_expense_receipt_tour: Wait the chatter is loaded to prevent lost focus on the input targetted on the next step. - discuss_channel_tour: use hover helper to concat three steps. - website_gray_color_palette: use range hoot helper and wait ui loading appears before to wait it disappears... In the goal to change tour engine and base it on waitFor instead of MutationObserver, these additionnal steps are crucial. - website_form_contactus_submit: wait livechat if module is installed. - course_member: wait the modal is shown before click on element inside. 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#195284
Steps ----- 1. Add an item to the cart (ensure the total price has decimals). 2. During checkout, apply a coupon (e.g., a 50% discount). 3. Attempt to validate the payment. Issue ----- The frontend user encounters the following error: "Cannot process payment: applied reward was changed or has expired." Cause ----- In some cases, the comparison between initial_amount and the new amount_total fails due to a small decimal difference (e.g., 0.00002). Solution -------- Use the f
Original PR description
Steps ----- 1. Add an item to the cart (ensure the total price has decimals). 2. During checkout, apply a coupon (e.g., a 50% discount). 3. Attempt to validate the payment. Issue ----- The frontend user encounters the following error: "Cannot process payment: applied reward was changed or has expired." Cause ----- In some cases, the comparison between initial_amount and the new amount_total fails due to a small decimal difference (e.g., 0.00002). Solution -------- Use the float_compare function to handle precise rounding. 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#195340 Forward-Port-Of: odoo/odoo#195266
To reproduce: ============= - create an event on calendar with description containing html - on calendar view, click on the event to open the popover and hover on the description field -> the tooltip is displayed with raw html content Fix: ==== hide the tooltip on html fields in calendar popover as it's not needed opw-4356581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195149 Forward-Port-Of: odoo/odoo#192104
Original PR description
To reproduce: ============= - create an event on calendar with description containing html - on calendar view, click on the event to open the popover and hover on the description field -> the tooltip is displayed with raw html content Fix: ==== hide the tooltip on html fields in calendar popover as it's not needed opw-4356581 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195149 Forward-Port-Of: odoo/odoo#192104
Check the commit message for description. Forward-Port-Of: odoo/odoo#195089
Original PR description
Check the commit message for description. Forward-Port-Of: odoo/odoo#195089
Steps: - Install sale app. - Enable Loyalty settings. - Try to create a card on a loyalty. Issue: - Giving validation error. Casue: - In [PR] forgot to check expiration_date set or not before raise an error. Fix: - Added condition to check if expiration_date set or not on card before raising an error. [PR]: https://github.com/odoo/odoo/pull/171453 opw-4492179 opw-4490587 opw-4504188 opw-4495530 Forward-Port-Of: odoo/odoo#195289 Forward-Port-Of: odoo/odoo#194785
Original PR description
Steps: - Install sale app. - Enable Loyalty settings. - Try to create a card on a loyalty. Issue: - Giving validation error. Casue: - In [PR] forgot to check expiration_date set or not before raise an error. Fix: - Added condition to check if expiration_date set or not on card before raising an error. [PR]: https://github.com/odoo/odoo/pull/171453 opw-4492179 opw-4490587 opw-4504188 opw-4495530 Forward-Port-Of: odoo/odoo#195289 Forward-Port-Of: odoo/odoo#194785
A traceback occurs when the user tries to open IAP accounts after uninstalling the SMS module. To reproduce: 1) Install hr 2) open IAP accounts from settings/technical/iap/iap accounts 3) Create a new iap account with service as `SMS` 4) Uninstall `SMS` module 5) Try to open the iap accounts again Error:- ``` ValueError: Invalid field 'sender_name' in 'iap.account' ``` This error occurs from the below line https://github.com/odoo/odoo/blob/1e7c2ca8c929d15c9015b960f7fcbe45604
Original PR description
A traceback occurs when the user tries to open IAP accounts after uninstalling the SMS module. To reproduce: 1) Install hr 2) open IAP accounts from settings/technical/iap/iap accounts 3) Create a…
A traceback occurs when the user tries to open IAP accounts after uninstalling the SMS module. To reproduce: 1) Install hr 2) open IAP accounts from settings/technical/iap/iap accounts 3) Create a new iap account with service as `SMS` 4) Uninstall `SMS` module 5) Try to open the iap accounts again Error:- ``` ValueError: Invalid field 'sender_name' in 'iap.account' ``` This error occurs from the below line https://github.com/odoo/odoo/blob/1e7c2ca8c929d15c9015b960f7fcbe4560413e98/addons/iap/models/iap_account.py#L128 Because when the user creates an iap account with service_name as `SMS`, We include `sender_name` in the dict of updating fields. https://github.com/odoo/odoo/blob/1e7c2ca8c929d15c9015b960f7fcbe4560413e98/addons/iap/models/iap_account.py#L123-L126 But, the `sender_name` field is defined in the SMS module, So it will lead to the above traceback as the `SMS` module is uninstalled. https://github.com/odoo/odoo/blob/1e7c2ca8c929d15c9015b960f7fcbe4560413e98/addons/sms/models/iap_account.py#L9 sentry-6249864173 Forward-Port-Of: odoo/odoo#195252
Follow-up of https://github.com/odoo/odoo/pull/176758 Commit above adds elligible partners in `@` mention suggestions, when the channel is restricted. However, channel threads could mention anyone, which is unintended. Steps to reproduce: - open a restricted channel, e.g. `#general` - open or make a sub-thread on this channel - type `@` in composer => non-internal users are shows in suggestion list. This happens because when the channel is restricted, this limits the amount of
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/176758 Commit above adds elligible partners in `@` mention suggestions, when the channel is restricted. However, channel threads could mention anyone,…
Follow-up of https://github.com/odoo/odoo/pull/176758 Commit above adds elligible partners in `@` mention suggestions, when the channel is restricted. However, channel threads could mention anyone, which is unintended. Steps to reproduce: - open a restricted channel, e.g. `#general` - open or make a sub-thread on this channel - type `@` in composer => non-internal users are shows in suggestion list. This happens because when the channel is restricted, this limits the amount of partners in the mention list. Problem is that channel threads do not set their `group_public_id`, and instead the parent value should be checked. This was not taken into account, which lead to unrestricted list of suggestions in these channels. This commit fixes the issue by checking the parent channel `group_public_id` for listing the elligible people that can be mentioned. Before  After  Forward-Port-Of: odoo/odoo#195064
Steps: - Install `account_sepa_drect_debit` - Duplicate the default bank journal and add a bank account - Create an invoice for a partner with valid mandate - Open the payment register wizard - Change journal from default one to the duplicated one - Select 'SEPA Direct Debit' as payment method - Click on 'Create payments' -> Validation Error: "The selected payment method is not available ..." Cause: In `account_sepa_direct_debit.action_create_payments`, the `journal_id` is recomp
Original PR description
Steps: - Install `account_sepa_drect_debit` - Duplicate the default bank journal and add a bank account - Create an invoice for a partner with valid mandate - Open the payment register wizard - Change journal from default one to the duplicated one - Select 'SEPA Direct Debit' as payment method - Click on 'Create payments' -> Validation Error: "The selected payment method is not available ..." Cause: In `account_sepa_direct_debit.action_create_payments`, the `journal_id` is recomputed when calling the `write` method on the wizard. Fix: Dont recompute the `journal_id` if it is already in `available_journal_ids` Note: We do the same for `payment_method_line_id` opw-4485191 Forward-Port-Of: odoo/odoo#195304
This commit makes the same fix as [1] but it does t for kanban views instead of list views. We discovered in task [2] we were developing for the master branch that we needed this fix and that we wanted to fix it from 17.0 [1]: ecc0a38a1d3b04f854d761fd498b120a4dfef5ad [2]: opw-4370092 Task: opw-4370092 Forward-Port-Of: odoo/odoo#195130 Forward-Port-Of: odoo/odoo#194859
Original PR description
This commit makes the same fix as [1] but it does t for kanban views instead of list views. We discovered in task [2] we were developing for the master branch that we needed this fix and that we wanted to fix it from 17.0 [1]: ecc0a38a1d3b04f854d761fd498b120a4dfef5ad [2]: opw-4370092 Task: opw-4370092 Forward-Port-Of: odoo/odoo#195130 Forward-Port-Of: odoo/odoo#194859
This PR addresses an issue where selecting a video and pressing Ctrl+K would introduce a link(anchor tag) on top of the video. The fix ensures that pressing Ctrl+K while a video is focused will no longer insert a link, resolving the issue of an empty link being added. task-2819776 Forward-Port-Of: odoo/odoo#195270 Forward-Port-Of: odoo/odoo#162615
Original PR description
This PR addresses an issue where selecting a video and pressing Ctrl+K would introduce a link(anchor tag) on top of the video. The fix ensures that pressing Ctrl+K while a video is focused will no longer insert a link, resolving the issue of an empty link being added. task-2819776 Forward-Port-Of: odoo/odoo#195270 Forward-Port-Of: odoo/odoo#162615
Since the update of FullCalendar some styling was not properly applied. Which leads to the following issues: - Missing borders - Cropped text in month views - Double borders task-3833841 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191056
Original PR description
Since the update of FullCalendar some styling was not properly applied. Which leads to the following issues: - Missing borders - Cropped text in month views - Double borders task-3833841 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#191056
Before this commit: - Enable the "Log in with employees" - Log in as any employee, add a product, and go to the payment screen - Lock the session - Enter the session again This sequence of actions would result in an error in the console. opw-4435559 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193238
Original PR description
Before this commit: - Enable the "Log in with employees" - Log in as any employee, add a product, and go to the payment screen - Lock the session - Enter the session again This sequence of actions would result in an error in the console. opw-4435559 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#193238
Goods invoices go through a central, federal API. Service invoices however, go through an API maintained by the city the business is located in. Because of this, there are thousands of different APIs. Avatax sits between us and those city APIs, but certain differences are not handled by them. The most blocking is the format of the NCM code. We based our NCM codes on the official law [1], but unfortunately the required format differs between cities. Some cities require a leading zero in front
Original PR description
Goods invoices go through a central, federal API. Service invoices however, go through an API maintained by the city the business is located in. Because of this, there are thousands of different…
Goods invoices go through a central, federal API. Service invoices however, go through an API maintained by the city the business is located in. Because of this, there are thousands of different APIs. Avatax sits between us and those city APIs, but certain differences are not handled by them. The most blocking is the format of the NCM code. We based our NCM codes on the official law [1], but unfortunately the required format differs between cities. Some cities require a leading zero in front of the code (e.g., 04.10 instead of 4.10), presumably because that's what non-service NCM codes look like. Other cities may not require periods. Cities reject invoices with "wrong" NCM codes, so at the moment our service invoice integration doesn't work there. This seems to affect around 25% of cities. Avalara states they cannot translate the codes for us due to the large number of cities involved. So, users will have to figure out the required format of the NCM code from their city hall and edit the NCM codes based on that. In order to do so we make the NCM codes editable for accountants and provide views and menu items. NCM codes are loaded from CSV and are non-updateable (noupdate=False) by default. To avoid changes being overwritten during module updates we turn them updateable in the model's init() (called during module update). In master this can be removed and done in post_init_hook instead, so that it only happens once during module installation. It's not needed to change the post_init_hook here. After module installation the records will be noupdate=False, but init() always runs before l10n_br.ncm.code.csv is reloaded so manual changes will persist. [1] https://www.planalto.gov.br/ccivil_03/leis/lcp/lcp116.htm task-4374334 Forward-Port-Of: odoo/enterprise#77805
**Steps to reproduce:** - Install stock_barcode and Sales - In Inventory settings, enable "Multi-Step Routes" - Go to "Inventory / Configuration / Warehouse Management / Routes" - Configure the rule of "Deliver in 1 step (ship)": * Propagation of Procurement Group: Fixed * Fixed Procurement Group: [create a new one] - Create a product tracked by lot - Update the quantity (e.g. 100) of the created product and assign it to a lot - Create a SO for a customer with the created product -
Original PR description
**Steps to reproduce:** - Install stock_barcode and Sales - In Inventory settings, enable "Multi-Step Routes" - Go to "Inventory / Configuration / Warehouse Management / Routes" - Configure the rule…
**Steps to reproduce:** - Install stock_barcode and Sales - In Inventory settings, enable "Multi-Step Routes" - Go to "Inventory / Configuration / Warehouse Management / Routes" - Configure the rule of "Deliver in 1 step (ship)": * Propagation of Procurement Group: Fixed * Fixed Procurement Group: [create a new one] - Create a product tracked by lot - Update the quantity (e.g. 100) of the created product and assign it to a lot - Create a SO for a customer with the created product - Confirm the SO - Create another SO for the same customer with the same product => A delivery order should be created with 2 operations with the same product - Open the delivery order in Barcode - Scan the source location - Select the 2nd line - Scan the lot **Issue:** The first line is incremented instead of the second one. Even when all the products for the first line will be scanned, it will not be possible to scan the lot to increment the second line. **Cause:** The selected line is not taken into account when searching the line on which the scanned lot should be applied. **Solution:** Unshift the selected line to the first position of the array of lines to prioritize it when searching for the adequate line for a scanned lot. opw-4208612 Forward-Port-Of: odoo/enterprise#77963 Forward-Port-Of: odoo/enterprise#76713
**Issue:** A error shows up when trying to insert a grouped and ordered list into spreadsheet. **Expected:** The displayed list, even if groups or orders are applied, should be insertable into spreadsheet. **Steps to reproduce:** - Activate Employees app (or any app using lists and allowing to group results) and enter in it; - Display employees as a list; - Add a `Group By` constraint (e.g. `Manager`) and order it by clicking the 2 arrows (appearing on hover);  - Open a toggled section; - Select several (or all) employees; - Using `Actions`, try `Insert in spreadsheet`. **Cause:** The list renderer doesn't manage the `Group By` constraints. **Fix:** Ignore grouped constraints. opw-4254376 Forward-Port-Of: odoo/enterprise#78022 Forward-Port-Of: odoo/enterprise#76283
Steps to reproduce: ----- - Create a FSM task - Add products - Mark as done - Create invoice - Duplicate the task Issue: ----- The newly created task is linked to the invoice of the duplicated task. This comportment is not intended. Fix: ---- Creation of the copy method so the sale_order_id and the sale_line_id get set to false when duplicating a record. opw-4393596 Forward-Port-Of: odoo/enterprise#77656 Forward-Port-Of: odoo/enterprise#76547
Original PR description
Steps to reproduce: ----- - Create a FSM task - Add products - Mark as done - Create invoice - Duplicate the task Issue: ----- The newly created task is linked to the invoice of the duplicated task. This comportment is not intended. Fix: ---- Creation of the copy method so the sale_order_id and the sale_line_id get set to false when duplicating a record. opw-4393596 Forward-Port-Of: odoo/enterprise#77656 Forward-Port-Of: odoo/enterprise#76547
Steps to reproduce the bug: - Create a storable product "P1" with a BoM. - Go to ECO stage > In Progress > add two approvals: - approval 1: Mitchel admin + Marc Demo - approval 2: Mitchel admin + Marc Demo - Navigate to PLM > BoM Update and create a new ECO: - Create a new ECO: - Type: BoM Update - Apply On: BoM - Product P1 - Start the revision - Move the ECO to In Progress. Problem: A validation error occurs: “The operation cannot be completed: Error
Original PR description
Steps to reproduce the bug:
- Create a storable product "P1" with a BoM.
- Go to ECO stage > In Progress > add two approvals:
- approval 1: Mitchel admin + Marc Demo
- approval 2: Mitchel admin + Marc Demo
- Navigate to PLM > BoM Update and create a new ECO:
- Create a new ECO:
- Type: BoM Update
- Apply On: BoM
- Product P1
- Start the revision
- Move the ECO to In Progress.
Problem:
A validation error occurs:
“The operation cannot be completed: Error, a partner cannot follow twice the same object.”
opw-4421352
Forward-Port-Of: odoo/enterprise#77950
Forward-Port-Of: odoo/enterprise#76232Steps to reproduce: 1. Install l10n_mx on runbot and go to MX company 2. Set rates for Day 1 (19.839 MXN/USD) and Day 2 (19.9338 MXN/USD) 3. Create an invoice with date Day 1 for 23,664 USD 4. Add a payment for 9 USD on Day 1 5. Create a bank transaction for a large MXN amount (let's say 600,000) on Day 2 6. Click "Match" for this transaction 7. In reconciliation widget, select invoice created before 8. Change amount in currency reconciled from invoice to 6,954.76 USD (amount in MXN shou
Original PR description
Steps to reproduce: 1. Install l10n_mx on runbot and go to MX company 2. Set rates for Day 1 (19.839 MXN/USD) and Day 2 (19.9338 MXN/USD) 3. Create an invoice with date Day 1 for 23,664 USD 4. Add a…
Steps to reproduce: 1. Install l10n_mx on runbot and go to MX company 2. Set rates for Day 1 (19.839 MXN/USD) and Day 2 (19.9338 MXN/USD) 3. Create an invoice with date Day 1 for 23,664 USD 4. Add a payment for 9 USD on Day 1 5. Create a bank transaction for a large MXN amount (let's say 600,000) on Day 2 6. Click "Match" for this transaction 7. In reconciliation widget, select invoice created before 8. Change amount in currency reconciled from invoice to 6,954.76 USD (amount in MXN should update to 137,975.49) 9. Validate the reconciliation 10. Go to the journal items and show items from journal entry linked to invoice > check partial reconciliation. The reconciled item has a residual of -0.01 and not 0. Analysis: During reconciliation, the rate used is always that of the invoice, not the rate of the invoice residuals. https://github.com/odoo/odoo/blob/4e724323d811dec76c186b5cfff6e4b0135b2128/addons/account/models/account_move_line.py#L1874 However, in the bank reconciliation widget, the residuals' rate was being used to compute the company currency balance of the new AML to create. This led to a different amount than the amount that can actually be reconciled. See [this google sheet](https://docs.google.com/spreadsheets/d/1IoKfuOmSeBS9MrU_DkH_73PGtJd7tb73KuAKm5QsrqI/edit?usp=sharing) for analysis Solution: Use the invoice rate in the bank reconciliation widget. opw-4222310 Forward-Port-Of: odoo/enterprise#77780 Forward-Port-Of: odoo/enterprise#76935
Steps to reproduce ================== - Install account_accountant,contacts,web_studio - Go to contacts - Open any record - Open studio - Switch to the Accounting notebook - Edit the subview form - Add a smart button => It crashes Cause of the issue ================== The button_box operation is not made to work inside a subview. We should not be able to add buttons inside subviews as they are not displayed outside studio anyways. opw-4379868 Forward-Port-Of: odoo/enterprise
Original PR description
Steps to reproduce ================== - Install account_accountant,contacts,web_studio - Go to contacts - Open any record - Open studio - Switch to the Accounting notebook - Edit the subview form - Add a smart button => It crashes Cause of the issue ================== The button_box operation is not made to work inside a subview. We should not be able to add buttons inside subviews as they are not displayed outside studio anyways. opw-4379868 Forward-Port-Of: odoo/enterprise#77085 Forward-Port-Of: odoo/enterprise#76297
When we have a report line that has a sequence lower than the sequence of its parent, the line is not shown in report builder interface. This prevents users to be able to fix the issue. Also, the report will show a traceback. This commit replaces the traceback with a UserError that states the issue. It also shows and highlights the line that is out of sequence so users can fix the issue. Forward-Port-Of: odoo/enterprise#77891 Forward-Port-Of: odoo/enterprise#76788
Original PR description
When we have a report line that has a sequence lower than the sequence of its parent, the line is not shown in report builder interface. This prevents users to be able to fix the issue. Also, the report will show a traceback. This commit replaces the traceback with a UserError that states the issue. It also shows and highlights the line that is out of sequence so users can fix the issue. Forward-Port-Of: odoo/enterprise#77891 Forward-Port-Of: odoo/enterprise#76788
Currently an exception was generated when [1] found as multiple state. error: `ValueError: Expected singleton: res.country.state(1674, 18)` This is because [1] searches the state based on state name, but in many scenario the state name maybe repeated for different country eg. United States of America an Uruguay both has same state 'Florida'  This commit will fix the above issue by add
Original PR description
Currently an exception was generated when [1] found as multiple state. error: `ValueError: Expected singleton: res.country.state(1674, 18)` This is because [1] searches the state based on state name, but in many scenario the state name maybe repeated for different country eg. United States of America an Uruguay both has same state 'Florida'  This commit will fix the above issue by adding country id in searching state so we always get state based on country. [1] - https://github.com/odoo/enterprise/blob/f3957dc33d956f55b77520167fc9b8ce9dad8c43/account_invoice_extract/models/account_invoice.py#L574 Sentry-6130462157 Forward-Port-Of: odoo/enterprise#77166
The aim of this commit is making sure cron that runs every 6 hours and which checks all the payment status is only used when we do have payment that needs to be checked. no task id Forward-Port-Of: odoo/enterprise#77468
Original PR description
The aim of this commit is making sure cron that runs every 6 hours and which checks all the payment status is only used when we do have payment that needs to be checked. no task id Forward-Port-Of: odoo/enterprise#77468
Issue: - When creating a SO with two service type products, configured to plan services. When auto planning, only one service gets planned. Steps to reproduce: 1- Create a SO with two service type products. 2- Configure the products to plan services. 3- Confirm the SO. 4- Click on the "To Plan" smart button. 5- Click on the "Auto plan" button. 6- Notice that only one service (the first one) gets planned. Solution: - in `action_view_planning` method, we rely on 'search_defaul
Original PR description
Issue: - When creating a SO with two service type products, configured to plan services. When auto planning, only one service gets planned. Steps to reproduce: 1- Create a SO with two service type products. 2- Configure the products to plan services. 3- Confirm the SO. 4- Click on the "To Plan" smart button. 5- Click on the "Auto plan" button. 6- Notice that only one service (the first one) gets planned. Solution: - in `action_view_planning` method, we rely on 'search_default_role_id' in the context to get our role_id. - however when we have an array of `role_id`, `search_default_` eventually calls `visitField` https://github.com/odoo/odoo/blob/a711818e93fb253d52a8925a9b12540e4d83d798/addons/web/static/src/search/search_arch_parser.js#L132 where we take only the first value of the array. - So I added a domain. opw-4350959 Forward-Port-Of: odoo/enterprise#77724
### Steps to reproduce: - Create a new Contact - Set the country to Morocco - Add "52258521" as a VAT number - Try to validate -> Error ### Cause: Only occurs after saas-17.4 because it is related to the library `stdnum`. The version of this library change when the Python version is >3.11. As the SaaS version use Python3.12 since saas-17.4 and Python3.10 before, the bug only appears in saas-17.4, but this change targets 17.0 because 17.0 supports Python > 3.10. The cause of the bug i
Original PR description
### Steps to reproduce: - Create a new Contact - Set the country to Morocco - Add "52258521" as a VAT number - Try to validate -> Error ### Cause: Only occurs after saas-17.4 because it is related to the library `stdnum`. The version of this library change when the Python version is >3.11. As the SaaS version use Python3.12 since saas-17.4 and Python3.10 before, the bug only appears in saas-17.4, but this change targets 17.0 because 17.0 supports Python > 3.10. The cause of the bug is the new version of the library which implements a verification method that corresponds to Moroccan ICE numbers and not VAT numbers. ### Solution: Create the method to check the Moroccan VAT numbers. The format is just a number with 8 digits. opw-4447478 Forward-Port-Of: odoo/enterprise#77878
The problem right now is that if you use a new UoM, the related Kenya eTIMS code is not in the category view. Also, the error message you get, does not tell there is a problem with the UoM in itself as it is not checked before sending the item to eTIMS. So, we add the code in the UoM category view and provide a message when it is missing. opw-4395902 Forward-Port-Of: odoo/enterprise#77116
Original PR description
The problem right now is that if you use a new UoM, the related Kenya eTIMS code is not in the category view. Also, the error message you get, does not tell there is a problem with the UoM in itself as it is not checked before sending the item to eTIMS. So, we add the code in the UoM category view and provide a message when it is missing. opw-4395902 Forward-Port-Of: odoo/enterprise#77116
Since version Chrome 128, the "new" headless mode has been set as default but the `payroll_dashboard_ui_tour` failed on a step relying on the "blur" event to update the Todo's name. After very long and quite thorough research what was discovered are the following: - this issue happens only once the `website` module has been installed - the tour is started from "/" (in Python) but actually run from "/web" (in JS), resulting in a useless first load. - the "blur" event triggered by the `text_
Original PR description
Since version Chrome 128, the "new" headless mode has been set as default but the `payroll_dashboard_ui_tour` failed on a step relying on the "blur" event to update the Todo's name. After very long…
Since version Chrome 128, the "new" headless mode has been set as default but the `payroll_dashboard_ui_tour` failed on a step relying on the "blur" event to update the Todo's name.
After very long and quite thorough research what was discovered are the following:
- this issue happens only once the `website` module has been installed
- the tour is started from "/" (in Python) but actually run from "/web" (in JS), resulting in a useless first load.
- the "blur" event triggered by the `text_run ...` tour's command never reaches the `t-on-blur` OWL's handler, while no listener that may have "eaten" the event has been found...
- making the "blur" event bubble (which is not its normal behavior) does have some impact on the issue...
- running the tour directly from the backend (e.g. `start_tour("/web", ...)` doesn't present this issue.
While the exact root cause of this issue hasn't been identified so fare, this commit sets the tour to be run directly from the backend (which makes sense as it is a backend-only test tour anyway) as a workaround.
Note: while being an issue in automated test, the feature operated by an actual user looks to be working properly.
Forward-Port-Of: odoo/enterprise#77823**Before this PR:** Upload fails(normal) but there is no proper error message. **Technical:** We previously received an error message in the "handleUploadError" function, such as "result.error." However, after the commit https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the error now appears directly in the "result". **After this PR:** An appropriate error message will be shown. Task-4357390 Forward-Port-Of: odoo/enterprise#75344
Original PR description
**Before this PR:** Upload fails(normal) but there is no proper error message. **Technical:** We previously received an error message in the "handleUploadError" function, such as "result.error." However, after the commit https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the error now appears directly in the "result". **After this PR:** An appropriate error message will be shown. Task-4357390 Forward-Port-Of: odoo/enterprise#75344
Bug === When uploading a big image in documents, it's resized. It has been fixed in 17.4 with `Task-3944609`, but we re-introduced the issue during the refactor of documents. Task-4505777 Forward-Port-Of: odoo/enterprise#77566
Original PR description
Bug === When uploading a big image in documents, it's resized. It has been fixed in 17.4 with `Task-3944609`, but we re-introduced the issue during the refactor of documents. Task-4505777 Forward-Port-Of: odoo/enterprise#77566
Commit 6845ca19567577f70910ed269f91232453c93b20 let some fields visible in the view where they should only be available in debug mode. Also allows to manually change which product should have its inventory synced. Forward-Port-Of: odoo/enterprise#77881
Original PR description
Commit 6845ca19567577f70910ed269f91232453c93b20 let some fields visible in the view where they should only be available in debug mode. Also allows to manually change which product should have its inventory synced. Forward-Port-Of: odoo/enterprise#77881
Before this commit their was a little undeterminism in a tour. Adding a bit of delay within a step should do the trick. runbot-error-112182 Forward-Port-Of: odoo/enterprise#77355
Original PR description
Before this commit their was a little undeterminism in a tour. Adding a bit of delay within a step should do the trick. runbot-error-112182 Forward-Port-Of: odoo/enterprise#77355
task-4497852 Forward-Port-Of: odoo/enterprise#77779
Original PR description
task-4497852 Forward-Port-Of: odoo/enterprise#77779
The return was forgotten in a previous commit for an override of the `read_pos_data` method in the `pos_order` model. Forward-Port-Of: odoo/enterprise#77972
Original PR description
The return was forgotten in a previous commit for an override of the `read_pos_data` method in the `pos_order` model. Forward-Port-Of: odoo/enterprise#77972
This commit adds 2025 codes based on https://www.nbb.be/en/statistics/foreign-trade/nomenclature-and-codes Task: 4461223 Forward-Port-Of: odoo/enterprise#77666
Original PR description
This commit adds 2025 codes based on https://www.nbb.be/en/statistics/foreign-trade/nomenclature-and-codes Task: 4461223 Forward-Port-Of: odoo/enterprise#77666
…footer Before this commit, when in the report editor, trying to add a field in the footer, the main doc's fields were proposed. This was wrong because header and footer are generic views that can treat any record at once. They just set an internal variable for the company of the record, which should be the only available model to add fields from. After this commit, it is not possible to add fields from anything else than the "company" variable opw-4471868 Forward-Port-Of: odoo/ente
Original PR description
…footer Before this commit, when in the report editor, trying to add a field in the footer, the main doc's fields were proposed. This was wrong because header and footer are generic views that can treat any record at once. They just set an internal variable for the company of the record, which should be the only available model to add fields from. After this commit, it is not possible to add fields from anything else than the "company" variable opw-4471868 Forward-Port-Of: odoo/enterprise#77684 Forward-Port-Of: odoo/enterprise#77234
This PR fixes an issue about the `$o-color-original` color map values sometimes not matching the light mode one. | //////// | saas-16.3 and above | This PR | |--------|--------|--------| | Light mode |  |  | | Dark mode |  |  |  | | Dark mode |  |  | When we introduced the redesign of the dark mode with Milk (`saas-16.3`), we fine-tuned the badges design in dark mode by slightly tweaking some colors from the `$o-color-original` map, which contains the colors that will be used on badges (as well as other UI elements). While most of the colors were normally tweaked, some colors received a new hue value, meaning the color would not match the light mode one. As this is inconsistent and unexpected, we review the colors to match the light mode ones. task-4522539 Forward-Port-Of: odoo/enterprise#77989
Steps: - Duplicate the default bank journal and add a bank account - Create an invoice for a partner with valid mandate - Open the payment register wizard - Change journal from default one to the duplicated one - Select 'SEPA Direct Debit' as payment method - Click on 'Create payments' -> Validation Error: "The selected payment method is not available ..." Cause: In `action_create_payments`, the `journal_id` is recomputed when calling the `write` method on the wizard. Fix: Adding the `journ
Original PR description
Steps: - Duplicate the default bank journal and add a bank account - Create an invoice for a partner with valid mandate - Open the payment register wizard - Change journal from default one to the duplicated one - Select 'SEPA Direct Debit' as payment method - Click on 'Create payments' -> Validation Error: "The selected payment method is not available ..." Cause: In `action_create_payments`, the `journal_id` is recomputed when calling the `write` method on the wizard. Fix: Adding the `journal_id` in the write vals avoids it to be recomputed opw-4485191 Forward-Port-Of: odoo/enterprise#77602
Before this commit, opening the calendar event Gantt view called the `calendar.event` model, but the `appointment.type` ID was passed. This mismatch could lead to an error when attempting to load the view. opw-4493685 Forward-Port-Of: odoo/enterprise#77447
Original PR description
Before this commit, opening the calendar event Gantt view called the `calendar.event` model, but the `appointment.type` ID was passed. This mismatch could lead to an error when attempting to load the view. opw-4493685 Forward-Port-Of: odoo/enterprise#77447