Friday, April 4, 2025
49 changes · saas-18.2
Resolved issues and error corrections
This fix prevents errors when updating a company address in the Indian localization. Taxes are now adjusted using the company’s fiscal setup rather than the address country, making company detail changes safer and more reliable.
Original PR description
This commit ensures that taxes are updated based on the company's fiscal country instead of the company address country, preventing errors when modifying the company’s address. Steps to reproduce the issue: 1. Install Indian localization (`l10n_in`). 2. Create a new company, set any country, and load its localization (except India). 3. Change the country in the company address. 4. Add a GSTIN (VAT) number. Before this fix, changing the company’s country caused a traceback due to incorrect tax modifications. Task ID: 4680276
Fixes an issue in the HTML editor where opening the link editing popover left the formatting toolbar visible. This reduces visual clutter and makes the link editing experience behave as users expect.
Original PR description
**Problem**: When clicking "Link" in the toolbar, the link popover opens, but the toolbar remains visible instead of closing. **Cause**: Previously (`saas-18.1`), clicking "Link" created an `<a>` tag…
**Problem**: When clicking "Link" in the toolbar, the link popover opens, but the toolbar remains visible instead of closing. **Cause**: Previously (`saas-18.1`), clicking "Link" created an `<a>` tag and changed the selection to it. This triggered `updateToolbarVisibility`, which detected the selection on a link (where `[data-prevent-closing-overlay]` was `false`), allowing the toolbar to close. Now, the `<a>` tag is created only when applying link changes. So `updateToolbarVisibility` is triggered with selection inside the link popover’s input field (where `[data-prevent-closing-overlay]` is `true`), preventing the toolbar from closing. **Solution**: remove `data-prevent-closing-overlay` from link popover and only close toolbar if selection is inside link popover using `.o-we-linkpopover` as selector. **Steps to Reproduce**: 1. Open the toolbar. 2. Click "Link". - **Issue**: The link popover opens, but the toolbar remains open. **opw-4639049** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes an automated check for user group settings more dependable by waiting for the relevant screen section to appear before continuing. It helps reduce random test failures, improving confidence in release validation without changing user-facing behavior.
Original PR description
This commit makes the mentionned tour more robust by ensuring that we wait for the notebook tab to be displayed before going further. runbot issue-134552 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
The event booth booking flow now handles cases where a visitor has not selected a booth location without triggering an error. This prevents a broken booking experience and correctly keeps the booking button disabled until a valid booth location is chosen.
Original PR description
Steps to reproduce ==================== - Go to an event that has a booth option. - Try to book a booth without selecting a location. Technical ========== - Here ```countSelectedBooths``` method is already returning the length as an integer, and so doing again .length on an integer leads to an alteration in the value of ```isSelectionEmpty``` - Also, we inverted the value of ```isSelectionEmpty``` because when the location is not selected button needs to be disabled - An issue arises during our recent interaction conversion https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Task-4680767
This fixes an internal issue that could prevent forced upgrade scripts from running correctly when the system reloads its registry multiple times. It helps ensure upgrades are applied consistently, reducing the risk of incomplete update operations.
Original PR description
Since https://github.com/odoo/odoo/pull/189000, the `config['update']` becomes static. Using `upgrade_modules` instead `config['update']` in case the registry is loaded multiple times. Details https://github.com/odoo/odoo/pull/202014/files#r1999022512 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
Miscellaneous changes
**Problem**: If the selection does not include unsplittable nodes but the `commonAncestorContainer` contains one, the AI/Translation button will be disabled. **Solution**: Instead of relying on `commonAncestorContainer`, check only the traversed nodes to determine if the selection is valid. **Steps to reproduce**: 1. Open Full Composer with a signature. 2. Add text. 3. Select only the text you added. - **Issue**: The AI/Translation button is disabled. **opw-4649819** --- I
Original PR description
**Problem**: If the selection does not include unsplittable nodes but the `commonAncestorContainer` contains one, the AI/Translation button will be disabled. **Solution**: Instead of relying on `commonAncestorContainer`, check only the traversed nodes to determine if the selection is valid. **Steps to reproduce**: 1. Open Full Composer with a signature. 2. Add text. 3. Select only the text you added. - **Issue**: The AI/Translation button is disabled. **opw-4649819** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204628
**Problem**: File boxes contain elements with `contenteditable=true`. Once saved, portal users can edit them even when the editor is disabled. **Solution**: Use the new mechanism introduced in [69fb021](https://github.com/odoo/odoo/pull/201139/commits/69fb0216dee2bbea407ca6f3c3ef9f1cc71a2f6b), by adding `o-contenteditable-true` and `o-contenteditable-false` classes to file banners. **Steps to reproduce**: 1. Navigate to **Sales > Product**. 2. Open any product. 3. In the **Sales** ta
Original PR description
**Problem**: File boxes contain elements with `contenteditable=true`. Once saved, portal users can edit them even when the editor is disabled. **Solution**: Use the new mechanism introduced in [69fb021](https://github.com/odoo/odoo/pull/201139/commits/69fb0216dee2bbea407ca6f3c3ef9f1cc71a2f6b), by adding `o-contenteditable-true` and `o-contenteditable-false` classes to file banners. **Steps to reproduce**: 1. Navigate to **Sales > Product**. 2. Open any product. 3. In the **Sales** tab, add a **banner** to "Ecommerce Description". 4. Save and click **Go to Website**. - **Issue**: The banner remains editable, even when the editor is disabled. **opw-4597744** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204750
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204617 Forward-Port-Of: odoo/odoo#186235
Original PR description
Serbia has implemented a mandatory e-invoicing system named eFaktura. This module utilizes the eFaktura API to enable users to submit their e-invoices. task-4004913 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204617 Forward-Port-Of: odoo/odoo#186235
Steps to reproduce: - Activate developer mode - Install website Google Maps module - Navigate to Website in edit mode - Drop the google maps snippet - Enter a correct API key - The dialog closes but the snippet is removed This is due to a promise not resolved when confirming the API key. Forward-Port-Of: odoo/odoo#204139
Original PR description
Steps to reproduce: - Activate developer mode - Install website Google Maps module - Navigate to Website in edit mode - Drop the google maps snippet - Enter a correct API key - The dialog closes but the snippet is removed This is due to a promise not resolved when confirming the API key. Forward-Port-Of: odoo/odoo#204139
Steps to reproduce ================== - Use a mobile viewport - Go to any list/kanban view - Open a record - Use the pager to switch to the next record => "1 / x" is displayed where x is the total amount of records - Click next => "2 / x" is displayed - Click previous => "3 / x" is displayed The pager is displaying the values before the switch has been made. Cause of the issue ================== When sending `this.value` on the `PAGER_UPDATED_EVENT` bus, the props have not bee
Original PR description
Steps to reproduce ================== - Use a mobile viewport - Go to any list/kanban view - Open a record - Use the pager to switch to the next record => "1 / x" is displayed where x is the total amount of records - Click next => "2 / x" is displayed - Click previous => "3 / x" is displayed The pager is displaying the values before the switch has been made. Cause of the issue ================== When sending `this.value` on the `PAGER_UPDATED_EVENT` bus, the props have not been updated yet. This means that we send the previous value. Solution ======== We send the event once either the offset, limit or total props have been updated. opw-4666878 Forward-Port-Of: odoo/odoo#204168
Steps to reproduce the issue: - Enter Website edit mode. - Click on the "Theme" tab. - Pick a black color for the website background (4th color button). - Click on a link in the website navbar to make the link popover appear. - Bug: The popover background is black, and its buttons are not visible as they are also black. Bug introduced by this commit [1], where popover colors were updated to match the website's theme. The goal was to align popovers, such as the one for the e-commerce ca
Original PR description
Steps to reproduce the issue: - Enter Website edit mode. - Click on the "Theme" tab. - Pick a black color for the website background (4th color button). - Click on a link in the website navbar to…
Steps to reproduce the issue: - Enter Website edit mode. - Click on the "Theme" tab. - Pick a black color for the website background (4th color button). - Click on a link in the website navbar to make the link popover appear. - Bug: The popover background is black, and its buttons are not visible as they are also black. Bug introduced by this commit [1], where popover colors were updated to match the website's theme. The goal was to align popovers, such as the one for the e-commerce cart button, with the theme colors. However, the change unfortunately also affected the link editing popover, which should remain neutral as it is part of the interface elements. [1]: https://github.com/odoo/odoo/commit/0d96be06faf8aad1a92183bd2b6371253980c7e6 task-4422810 | Before | After | | ------------- | ------------- | |  |  | Forward-Port-Of: odoo/odoo#203958
**Current behavior before PR:** - When clicking on a dynamic field, both the qweb overlay and the toolbar would appear simultaneously, causing an overlap. **Desired behavior after PR is merged:** - The qweb overlay will now only be shown when the selection is collapsed, ensuring that it does not overlap with the toolbar when it is visible. task:4243987 Forward-Port-Of: odoo/odoo#195436
Original PR description
**Current behavior before PR:** - When clicking on a dynamic field, both the qweb overlay and the toolbar would appear simultaneously, causing an overlap. **Desired behavior after PR is merged:** - The qweb overlay will now only be shown when the selection is collapsed, ensuring that it does not overlap with the toolbar when it is visible. task:4243987 Forward-Port-Of: odoo/odoo#195436
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a quant of the product with this lot - Create a quotation on the product and confirm the SO - Confirm the delivery - Activate the lot valuation on the product - Make a return delivery based on the delivery we had - Confirm the return **Issue**: Traceback is thrown ```py new_std_price = ((amo
Original PR description
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a…
Steps to reproduce: - Install stock, stock_account, sales - Create a product with pricing policy not standard(AVCO, FIFO) - Track this product by lot and keep lot valuation **unchecked** - Add a quant of the product with this lot - Create a quotation on the product and confirm the SO - Confirm the delivery - Activate the lot valuation on the product - Make a return delivery based on the delivery we had - Confirm the return **Issue**: Traceback is thrown ```py new_std_price = ((amount_unit * qty_avail) + (move_cost[lot] * qty)) / (qty_avail + qty) KeyError: stock.lot(55,) ``` Because `move_cost` is a dictionary returned by `_get_price_unit()`, which gets the current lots’ valuations. Since the pick is a return one, then `_get_price_unit()` uses the original pick stock valuation layers and hence we were disabling the valuation on the original delivery then the layers don’t have the lot of the product valuated. Then the `move_cost` dict is not having the lot of the product while valuating it currently, hence the KeyError is thrown. This issue happens with the AVCO, FIFO because both valuation models depend on the already valuated lots values using the `_get_price_unit()`. **FIX**: Ensure `_get_price_unit()` properly handles cases where lot valuation was disabled at the time of the original move but is enabled later by adding lots of the return pick if not included in the valuation layers of original pick. opw-4662744 opw-4660094 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#204452
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provid
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provided in the notification data. Store this in the `provider_reference` field if the transaction is pending. When processing the pending transaction, initiate a redirect flow, which redirects the user to the authorization url. opw-4669110 Forward-Port-Of: odoo/odoo#204599 Forward-Port-Of: odoo/odoo#204322
In a form snippet, enabling the "Description" option for a field and then undoing this action caused the field to lose its styling and available customization options. Steps to reproduce: - Enter Edit mode. - Add a Form snippet. - Select any field (e.g., "Your Name"). - Enable the "Description" option from the customization panel. - Undo the action (Ctrl+Z). This results in the field losing its padding and the "Description" and other options being removed. Cause: A redundant line
Original PR description
In a form snippet, enabling the "Description" option for a field and then undoing this action caused the field to lose its styling and available customization options. Steps to reproduce: - Enter Edit mode. - Add a Form snippet. - Select any field (e.g., "Your Name"). - Enable the "Description" option from the customization panel. - Undo the action (Ctrl+Z). This results in the field losing its padding and the "Description" and other options being removed. Cause: A redundant line of code was adding an extra step in the mutation history. When undoing, this extra step caused the removal of essential classes from the field, leading to the loss of styling and options. Fix: Removed the redundant line to ensure undoing the action correctly restores the previous state without affecting the field’s styling or customization options. task-4013551 Forward-Port-Of: odoo/odoo#179858
On the IoT box status display, there is supposed to be an entry showing the URL of the connected database. However, prior to this commit it was using the incorrect key (`odoo_server_url` instead of `server_status`). This commit fixes the functionality by using the correct key. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204427
Original PR description
On the IoT box status display, there is supposed to be an entry showing the URL of the connected database. However, prior to this commit it was using the incorrect key (`odoo_server_url` instead of `server_status`). This commit fixes the functionality by using the correct key. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204427
**Current behavior before PR:** - Before commit [1], when pasting a single paragraph node, only its content was inserted, and the paragraph tag was omitted. However, due to these changes, the entire paragraph node is now inserted instead of just its content, causing the target node to be replaced by the paragraph node. **Desired behavior after PR is merged:** - When pasting a single base container, only its content will be inserted. As a result,the base container will no lon
Original PR description
**Current behavior before PR:** - Before commit [1], when pasting a single paragraph node, only its content was inserted, and the paragraph tag was omitted. However, due to these changes, the entire paragraph node is now inserted instead of just its content, causing the target node to be replaced by the paragraph node. **Desired behavior after PR is merged:** - When pasting a single base container, only its content will be inserted. As a result,the base container will no longer replace the target block format. [1]: https://github.com/odoo/odoo/commit/fef32b42beb80eb27bd3c2cfa8c4c2f3c86ad12d task: 4585788 Forward-Port-Of: odoo/odoo#200142
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/accoun
Original PR description
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or…
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L66-L67 After that when the user attempts to sign the document through the list view, it leads to the traceback. This happens because we are passing self instead of the invoices to the method `action_sign_invoices`. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L73 https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L106 As a result, self contains all draft invoices (if selected by the user), leading to the traceback since the value of l10n_eg_eta_json_doc_id is False for the reset draft invoice. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/eta_thumb_drive.py#L34-L35 sentry-6448238266 Forward-Port-Of: odoo/odoo#203064
In addition to the fix in #204331 to unblock Wi-Fi, we additionally need to ensure the Wi-Fi radio is enabled at boot as it is no longer the default. This commit adds the command in `rc.local` so that it is run every boot. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204570
Original PR description
In addition to the fix in #204331 to unblock Wi-Fi, we additionally need to ensure the Wi-Fi radio is enabled at boot as it is no longer the default. This commit adds the command in `rc.local` so that it is run every boot. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204570
**Current behavior before PR:** - Inserting an emoji using the emoji picker caused the page to scroll up. **Desired behavior after PR is merged:** - The page no longer scrolls up when an emoji is inserted using the emoji picker. task:4686860 Forward-Port-Of: odoo/odoo#204311
Original PR description
**Current behavior before PR:** - Inserting an emoji using the emoji picker caused the page to scroll up. **Desired behavior after PR is merged:** - The page no longer scrolls up when an emoji is inserted using the emoji picker. task:4686860 Forward-Port-Of: odoo/odoo#204311
### Steps to reproduce: - In Accounting create a new Payment Term with an early discount set on "Always(upon invoice)" - Create a new Contact and add the payment term to this contact - Open POS and create an order - Select the new contact as the customer - Go to payment, select the option to create an invoice and validate - The receipt and the generated invoice have different amounts: the payment terms were applied on the invoice but not on the receipt ### Cause: POS does not consider
Original PR description
### Steps to reproduce: - In Accounting create a new Payment Term with an early discount set on "Always(upon invoice)" - Create a new Contact and add the payment term to this contact - Open POS and create an order - Select the new contact as the customer - Go to payment, select the option to create an invoice and validate - The receipt and the generated invoice have different amounts: the payment terms were applied on the invoice but not on the receipt ### Cause: POS does not consider at any point the payment terms so the total to be paid does not include the payment terms. Payment terms were included in invoices from POS with this [commit](https://github.com/odoo/odoo/pull/100100/commits/c1cd62f0b207b3f3bbf5a03009bd8e34ee9b479f) ### Solution: Remove the payment terms on invoices from POS. opw-4458036 Forward-Port-Of: odoo/odoo#203252 Forward-Port-Of: odoo/odoo#199385
Before this commit, making a down payment for a sale order with a product that has a long name would cause a horizontal scroll bar to appear in the receipt. Before: <img width="259" alt="image" src="https://github.com/user-attachments/assets/3db17ad0-e1a7-4653-9e50-edd9dd8c4e9e" /> After: <img width="383" alt="image" src="https://github.com/user-attachments/assets/faa0c3ea-c400-4cb6-96ed-2b496236710f" /> opw-4604797 --- I confirm I have signed the CLA and read the PR guidelines
Original PR description
Before this commit, making a down payment for a sale order with a product that has a long name would cause a horizontal scroll bar to appear in the receipt. Before: <img width="259" alt="image" src="https://github.com/user-attachments/assets/3db17ad0-e1a7-4653-9e50-edd9dd8c4e9e" /> After: <img width="383" alt="image" src="https://github.com/user-attachments/assets/faa0c3ea-c400-4cb6-96ed-2b496236710f" /> opw-4604797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200718 Forward-Port-Of: odoo/odoo#200387
Versions -------- - 18.0+ Steps ----- 1. Have a promo code that applies a 50% discount; 2. have a fixed price delivery method; 3. apply code on an order with said delivery method. Issue ----- The 50% discount is applied to the shipping costs. Cause ----- When calculating the discountable amount in `_discountable_amount`, it uses the `_get_no_effect_on_threshold_lines` method to filter out sale order lines that shouldn't impact the amount discounted. This value gets stored in t
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have a promo code that applies a 50% discount; 2. have a fixed price delivery method; 3. apply code on an order with said delivery method. Issue ----- The 50% discount is applied to the shipping costs. Cause ----- When calculating the discountable amount in `_discountable_amount`, it uses the `_get_no_effect_on_threshold_lines` method to filter out sale order lines that shouldn't impact the amount discounted. This value gets stored in the `lines` recordset. Commit d0e7be7832672 overlooked the existence of this variable when modifying the `_discountable_amount` method, and instead used `self.order_line`, using all lines to calculate the discountable amount. Solution -------- Use the filtered recordset to calculate the discountable amount. opw-4658702 Forward-Port-Of: odoo/odoo#204620 Forward-Port-Of: odoo/odoo#202519
Commit 2afc30a introduced reward validation before payment, due to this if promotion expired during payment step during checkout, error informing that promotion was expired was thrown, but user was not able to do anything about. Info about refreshing page has been added. opw-4573640 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.co
Original PR description
Commit 2afc30a introduced reward validation before payment, due to this if promotion expired during payment step during checkout, error informing that promotion was expired was thrown, but user was not able to do anything about. Info about refreshing page has been added. opw-4573640 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#203564 Forward-Port-Of: odoo/odoo#203395
This commit adds a new helper in dom_test_helpers' contains which allows to open a dropdown and select the first item which matches with the input value. Forward-Port-Of: odoo/odoo#204516
Original PR description
This commit adds a new helper in dom_test_helpers' contains which allows to open a dropdown and select the first item which matches with the input value. Forward-Port-Of: odoo/odoo#204516
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. Steps to reproduce: - Open Marketing Card app - Open the form view for one of the campaign - Click "Send" button - A dialog opens and display the preview of the mail to send - Double-click an image in the Mail Body tab (or add one first, if none are present) => the file viewer appears behind the dialog and is not usable.
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. Steps to reproduce: - Open Marketing Card app - Open the form view for one of the campaign - Click "Send" button - A dialog opens and display the preview of the mail to send - Double-click an image in the Mail Body tab (or add one first, if none are present) => the file viewer appears behind the dialog and is not usable. task-4387904 Forward-Port-Of: odoo/odoo#203462
One issue remained for the 'Multiple choice: multiple answers allowed' option in this task: https://www.odoo.com/odoo/project.task/4663115 Task- 4663115 Forward-Port-Of: odoo/odoo#204603
Original PR description
One issue remained for the 'Multiple choice: multiple answers allowed' option in this task: https://www.odoo.com/odoo/project.task/4663115 Task- 4663115 Forward-Port-Of: odoo/odoo#204603
This commit orders the stock valuation layer of multiple stock moves by product to make sure the assert targets the right layer index in the loop. runbot: 99086 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#201668 Forward-Port-Of: odoo/odoo#201435
Original PR description
This commit orders the stock valuation layer of multiple stock moves by product to make sure the assert targets the right layer index in the loop. runbot: 99086 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#201668 Forward-Port-Of: odoo/odoo#201435
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the bu
Original PR description
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a…
* stock{,_barcode, _barcode_quality_control}, quality_control
### Issue:
Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the button validate. As a result, we will not create the quality checks related to these additional moves.
The above issue can be triggered in many situations. Here are the two major ones:
### Use case I:
Creating a delivery or an internal transfer on the fly from the barcode app.
### Steps to reproduce:
- Create a storable product P with a barcode: XXX
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product: Control per: "Operation" Operations: "Delivery"
- Go to the barcode app > Operations > Delivery > New
- Scan your product
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
The `save_barcode_data` will launch the creation of the move line related to the barcode line you edited from the barcode app. During the create of this 'stock.move.line', an associated move will be created and its initial "state" will be the current state of the picking: https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L354-L356 https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L942 At this point the picking state is "draft" and the move will be correctly created in draft. However, just a few lines after its creation, we will check if a reservation should be done with that move and if its state should be recomputed:
https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L379-L396 the discrepancy is caused by the fact that `move._should_bypass_reservation` will be true if the picking is a receipt and false for the other types because you should bypass reservation for moves whose source is not an internal location but you should not for others. This will leave the moves and picking in draft state if its a receipt and update it for other types. However, only draft pickings are confirmed at the beginning of the button validate: https://github.com/odoo/odoo/blob/b0cfeecacfc6b95659778dfe4d62435556aaa92c/addons/stock/models/stock_picking.py#L1131-L1133
### Use case II:
Create and confirm a picking of any type so that it ends up being assigned. Add manually a move line via the detailled operations.
### Steps to reproduce:
- Create two storable product P1 and P2 put 10 units of both in stock
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product P2: Control per: "Operation" Operations: "Delivery"
- Create and confirm a Delivery for 1 unit P1
- Go to Detailed Operations > create a new line for 1 unit of P2
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
For the same reasons as above, the newly created move is assigned as it mimics the state of the current picking which is assigned since we have already reserved the already existing move.
### Fix:
We ensure the creation of quality checks for moves that end up being created but will never be confirmed.
### Technical limitation:
Unfortunately, it is not possible to manage the use case of quality checks related the component of a kit product without disrupting the barcode flows. Indeed, in barcode flows, the move line as well as its related move is created by a `save_barcode_data`. If we were to confirm the newly created moves rather than just trying to create the QC, it would indeed first explode the bom and then create the related QC for each component. However, the barcode data would not coincide anymore with the back end data since the line we just saved would have been exploded at backend creation. For that reason we do not yet support the above use cases for kit products.
Enterprise: https://github.com/odoo/enterprise/pull/81850
opw-4480104
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#203662
Forward-Port-Of: odoo/odoo#202725The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
Original PR description
The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. - With COMP 1 as main active company, create and confirm an SO for COMP2 > A pick picking has been created for COMP2 - Validate The pick picking #### > The ship picking was not created ### Cause of the issue: During the `_action_done`of the pick move, we will run a `_push_apply` on the mo
Original PR description
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. -…
### Steps to reproduce: - In the settings: enable Multi-steps route. - Have two companies active (each with an existing warehouse): COMP 1, 2 - Put the warehouse of COMP 2 in delivery in 2 steps. - With COMP 1 as main active company, create and confirm an SO for COMP2 > A pick picking has been created for COMP2 - Validate The pick picking #### > The ship picking was not created ### Cause of the issue: During the `_action_done`of the pick move, we will run a `_push_apply` on the move and try to trigger any push rule related to its destination. However, since de destination location of tha move (COMP2 output) does not belong to the main active company, the warehouse for which we search the rule is set to False and the rule ends up not being found: https://github.com/odoo/odoo/blob/cc05d9d50ac668eaa26363e1127f914897a4b125/addons/stock/models/stock_move.py#L1058-L1066 opw-4670760 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204170
An internal server error happened when trying to acces json from the url in the employees app Steps to reproduce: ------------------- * Open employees app * Change /odoo/ for /json/ in the url > Observation: ValueError: NameError("name allowed_company_ids is not defined") while evaluating "[(company_id, in, allowed_company_ids)]" Why the fix: ------------ With the odoo web route allowed_company_ids is added to the context here https://github.com/odoo/odoo/blob/648956b75bdd09396bae
Original PR description
An internal server error happened when trying to acces json from the url in the employees app
Steps to reproduce:
-------------------
* Open employees app
* Change /odoo/ for /json/ in the url
> Observation:
ValueError: NameError("name allowed_company_ids is not defined") while evaluating
"[(company_id, in, allowed_company_ids)]"
Why the fix:
------------
With the odoo web route allowed_company_ids is added to the context here https://github.com/odoo/odoo/blob/648956b75bdd09396bae3b7162f236236fccae23/addons/web/static/src/webclient/actions/action_service.js#L346 from user.context.
With the json route we need to add it manually as it's not in the env
opw-4601689
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#204135
Forward-Port-Of: odoo/odoo#201226Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle.
Original PR description
Steps to reproduce ================== - Install account_accountant - Enable the debug mode - Copy a very long text in the "Terms and Conditions" section - Click on debug > Set Defaults - Click on the Default selection => Chrome crashes Depending on the window manager/OS, a weird Chrome window can appear spanning across multiple displays. Or Chrome can simply crash. Cause of the issue ================== The text value inside the select option is too long for Chrome to handle. Solution ======== We can truncate the displayed text. opw-4572496 Forward-Port-Of: odoo/odoo#204189 Forward-Port-Of: odoo/odoo#202324
Prior to this commit, using a `/banner` block would create elements that always have `contenteditable` attributes when saving, that are always different from the server value which removes these `contenteditable` attributes, resulting in a new `Wysiwyg` instance being constructed after each `save`. Resolution: 1- Introduce new classes to handle the `contenteditable` attribute: `o-contenteditable-true` and `o-contenteditable-false` to avoid a namespace conflict with `website` specifi
Original PR description
Prior to this commit, using a `/banner` block would create elements that always have `contenteditable` attributes when saving, that are always different from the server value which removes these…
Prior to this commit, using a `/banner` block would create elements that always have `contenteditable` attributes when saving, that are always different from the server value which removes these `contenteditable` attributes, resulting in a new `Wysiwyg` instance being constructed after each `save`. Resolution: 1- Introduce new classes to handle the `contenteditable` attribute: `o-contenteditable-true` and `o-contenteditable-false` to avoid a namespace conflict with `website` specific features. They replace `o_editable` and `o_not_editable` for the `banner` block. 2- Ensure that `contenteditable` attribute handled by these classes are removed during `cleanForSave`, to create a value comparable to the server value. This is because the server sanitizes the `contenteditable` attribute. If both compared values are not equal, the current `Wysiwyg` and `Editor` instances would be fully replaced after each save, resulting in a loss of edition history. This should ideally never happen. 3- Ensure the attributes `role` and `aria-label` which are also sanitized by the server are removed during `cleanForSave` and maintained during `normalize` through `data-oe-role` and `data-oe-aria-label`. 4- Introduce a `o_editor_banner_content` class for the `banner` content, for ease of selector creation. 5- Ensure that the `baseContainer` created before the `banner` if it is the first element in the `editable` has the proper `tagName` based on the `HtmlField` configuration. A `html_migrations` version is added to adjust existing `banners` to the new classes usage. task-4640490 Forward-Port-Of: odoo/odoo#204656 Forward-Port-Of: odoo/odoo#201139
Currently, if a serialization error occurs right after sending an invoice to SDI, Odoo retries the submission. This causes issues as the move’s transaction ID will be updated to the second attempt, not the first. Additionally, SDI will detect a duplicate submission and return a "notificaScarto" status. Since only the second transaction ID is stored, Odoo will incorrectly display the invoice as rejected, even though the first submission was actually accepted. This fix ensures the move
Original PR description
Currently, if a serialization error occurs right after sending an invoice to SDI, Odoo retries the submission. This causes issues as the move’s transaction ID will be updated to the second attempt, not the first. Additionally, SDI will detect a duplicate submission and return a "notificaScarto" status. Since only the second transaction ID is stored, Odoo will incorrectly display the invoice as rejected, even though the first submission was actually accepted. This fix ensures the move is locked before sending to SDI, preventing this issue. opw-4643686 Forward-Port-Of: odoo/odoo#202693
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite `global_filter_editor.test.js` with 51 tests - make a snapshot of memory after test => observe that there's thousands of RecordList objects kept in memory (8976) instead of a few hundreds (176) These tests do not make use of any mail code, but the manifest has dependency on `@mail` thus it loads mail sto
Original PR description
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite…
Before this commit, when running a HOOT test suite with a dependency on `@mail`, the memory snapshot at end of suite test was higher than expected. Steps to reproduce: - run HOOT suite `global_filter_editor.test.js` with 51 tests - make a snapshot of memory after test => observe that there's thousands of RecordList objects kept in memory (8976) instead of a few hundreds (176) These tests do not make use of any mail code, but the manifest has dependency on `@mail` thus it loads mail store. This test suite is a good candidate to show constant memory issue from discuss code: 51 tests each having 176 record lists result in 8976 record lists in total. The JS records are expected to be garbage collected after each test, thanks to store not being accessible from components and services (app is unmounted at end of test). However, `Rtc.iceServers` field was preventing this and leads to keeping store in memory. This is happening because the default value of this field is `DEFAULT_ICE_SERVERS`, which is defined on window object globally and is shared among all the different stores in the test suite. The field is computed too, so an internal `onChange` also contributed in keeping a reference to observing this shared object. This commit fixes the issue by providing a deep copy of this global variable as the default value of `iceServers`, allowing proper gc of store between tests of the suite. Forward-Port-Of: odoo/odoo#204521
Description ------------ Fix a performance issue in the partner search functionality used in the sharing widget. The problem was related to the PostgreSQL query planner choosing a suboptimal execution plan when using a limit of 4 records. With a very low limit of 4, PostgreSQL would choose to perform an index scan on the `complete_name` index instead of using the more efficient trigram indexes. This resulted in high I/O operations as it traversed the index from A until finding matches, caus
Original PR description
Description ------------ Fix a performance issue in the partner search functionality used in the sharing widget. The problem was related to the PostgreSQL query planner choosing a suboptimal…
Description ------------ Fix a performance issue in the partner search functionality used in the sharing widget. The problem was related to the PostgreSQL query planner choosing a suboptimal execution plan when using a limit of 4 records. With a very low limit of 4, PostgreSQL would choose to perform an index scan on the `complete_name` index instead of using the more efficient trigram indexes. This resulted in high I/O operations as it traversed the index from A until finding matches, causing significant performance degradation. The fix simply increases the limit to 8, consistent with other `name_search` operations, ensuring the query planner consistently chooses the trigram index path regardless of the search term. Benchmark ---------- On a database with over 8 digits count of partners, a non selective search of a partner (5 chars) took: | Before | After | Speedup | |--------|-------|---------| | 27.4s | 42ms | 652x | Reference --------- task-4686893 Forward-Port-Of: odoo/enterprise#82680
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2. Install Employees and Project apps 3. Go to Employees > Contracts 4. Select a contract from Mitchell Admin 5. Empty the Working Schedule Field 6. Set Planning or Attendances as work entries > Save 7. Go to project app 8. Select a project 9. Switch to the Gantt view 10. An error messa
Original PR description
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2.…
…with empty working schedule **Issue** When setting the working schedule to empty, opening the Gantt view is not possible as an error is displayed Steps to Reproduce: 1. Login as Mitchell Admin 2. Install Employees and Project apps 3. Go to Employees > Contracts 4. Select a contract from Mitchell Admin 5. Empty the Working Schedule Field 6. Set Planning or Attendances as work entries > Save 7. Go to project app 8. Select a project 9. Switch to the Gantt view 10. An error message appears 11. Expected Behavior: Gantt view should be displayed without errors. Actual Behavior: Gantt view is not displayed, and an error message appears. **Root Cause** The issue occurs because before processing the work intervals, the system checks for the presence and uniqueness of a calendar. If a user has no assigned schedule, the function attempts to process a None value, which results in an error when calling ensure_one in _attendance_intervals_batch. **Fix** To prevent the error, users without a working schedule are skipped when computing valid work intervals. If a user has no assigned schedule, they will not be included in _work_intervals_batch, ensuring the function executes correctly without attempting to process an empty calendar. opw-4462241 Forward-Port-Of: odoo/enterprise#79159
Fixing the tour that has been introduce here https://github.com/odoo/enterprise/pull/75658/commits/c2d18cea5db278b5a3203c4d3646411fc9bbd450 runbot-110627 Forward-Port-Of: odoo/enterprise#81776
Original PR description
Fixing the tour that has been introduce here https://github.com/odoo/enterprise/pull/75658/commits/c2d18cea5db278b5a3203c4d3646411fc9bbd450 runbot-110627 Forward-Port-Of: odoo/enterprise#81776
Versions -------- - saas-17.4+ Price already hidden in 17.0 & earlier. Steps ----- 1. Set website to prevent sale of zero-priced products; 2. create a zero-priced pricelist; 3. create a rental product; 4. set a rental price of $0 on the zero-priced pricelist; 5. go to rental product page on website. Issue ----- It displays "$0.00/day" above the "Not Available for Sale" text. Cause ----- The rental price element doesn't check whether zero-priced products should be made ava
Original PR description
Versions -------- - saas-17.4+ Price already hidden in 17.0 & earlier. Steps ----- 1. Set website to prevent sale of zero-priced products; 2. create a zero-priced pricelist; 3. create a rental product; 4. set a rental price of $0 on the zero-priced pricelist; 5. go to rental product page on website. Issue ----- It displays "$0.00/day" above the "Not Available for Sale" text. Cause ----- The rental price element doesn't check whether zero-priced products should be made available for sale. Solution -------- If the rental price is zero, and the website prevents sale of zero-priced products, hide the rental price element. We can use `combination_info['prevent_zero_price_sale']` for this thanks to commit 1f827ac1fad opw-4643155 Forward-Port-Of: odoo/enterprise#82535
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are created in "Draft" status for user review, complete with attached PDF and XML files. Also this pull request allows to create vendor bills from XML files on uruguayan journals. **Key Features**: - **_Automatic Bill Creation_**: Bills are generated in "Draft" status to enable manual verification a
Original PR description
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are…
This pull request (PR) facilitates the integration of Odoo with the Uruguayan electronic billing system, allowing automatic synchronization of vendor bills every 10 minutes. Synchronized bills are created in "Draft" status for user review, complete with attached PDF and XML files. Also this pull request allows to create vendor bills from XML files on uruguayan journals. **Key Features**: - **_Automatic Bill Creation_**: Bills are generated in "Draft" status to enable manual verification against vendor invoices and attachments. - **_Necessary Configuration_**: 1) The database must connect to Uruware. 2) A Uruguayan company must be set up with an appropriate chart of accounts. 3) Notifications must be activated in the Uruguayan billing system. **Important Considerations**: - Errors during synchronization will still create invoices in "Draft" with error messages for user review. - Invoice lines are created without products; if a vendor doesn’t exist, it will be automatically created based on RUT. - Any unregistered taxes will be flagged. **Technical Overview**: - **_Notification Mechanism_**: Notifications for each received CFE are managed through a web service, allowing users to check, request details, and discard notifications. - **_Synchronization Process_**: Notifications are read and processed sequentially, with each CFE generating a corresponding document in Odoo. Notifications must be discarded to continue processing. Related Tasks: Adhoc Task: 43467 LATAM Task: 1249 Forward-Port-Of: odoo/enterprise#71234
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. This is the counterpart of the related community change in FileViewer. Forward-Port-Of: odoo/enterprise#82186
Original PR description
This commit fixes the overlapping between the dialog and file viewer due to a combination of the z-index value set by the .modal class and the .fixed-top utility class. This is the counterpart of the related community change in FileViewer. Forward-Port-Of: odoo/enterprise#82186
Steps to reproduce the bug: - Create a storable product “P1”: - Create a BoM - Go back to the product form and create an ECO: - Apply on: “Bill of Materials” - The created BoM will be selected automatically. - Save. - Return to the product form. - The ECO count in the smart button is 1. - Click on it. Problem: No ECO is displayed because the domain filters only ECOs applied to the product: https://github.com/odoo/enterprise/blob/ec6b4717f49ccd5b651be80aed21494ed
Original PR description
Steps to reproduce the bug: - Create a storable product “P1”: - Create a BoM - Go back to the product form and create an ECO: - Apply on: “Bill of Materials” - The created BoM will be selected…
Steps to reproduce the bug:
- Create a storable product “P1”:
- Create a BoM
- Go back to the product form and create an ECO:
- Apply on: “Bill of Materials”
- The created BoM will be selected automatically.
- Save.
- Return to the product form.
- The ECO count in the smart button is 1.
- Click on it.
Problem:
No ECO is displayed because the domain filters only ECOs applied to the product:
https://github.com/odoo/enterprise/blob/ec6b4717f49ccd5b651be80aed21494ed500f580/mrp_plm/models/product.py#L17-L20
Solution:
only ECOs of type "Product" should be counted in the product form.
Issue 2:
- Try updating the "Apply on" field of the ECO to “Product.”
Problem:
The "Bill of Materials" field becomes invisible but is not cleared. As a result, when counting the number of ECOs linked to the BoM, the count will be incorrect.
https://github.com/odoo/odoo/blob/f2923dec56b5ba2436bc244337c1e430a85e7e94/addons/stock/models/stock_move.py#L45-L48
opw-4653598
Forward-Port-Of: odoo/enterprise#82576* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the bu
Original PR description
* stock{,_barcode, _barcode_quality_control}, quality_control ### Issue: Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a…
* stock{,_barcode, _barcode_quality_control}, quality_control
### Issue:
Quality checks per operation and per product are generated by an override of the action confirm of the move. However, if a move line is created on a non draft picking, it will end up in a move that will never be confirmed. This happends because the move is created with a state to match its already existing picking and hence is not confirmed at creation and since only draft pickings are confirmed at the start of the button validate. As a result, we will not create the quality checks related to these additional moves.
The above issue can be triggered in many situations. Here are the two major ones:
### Use case I:
Creating a delivery or an internal transfer on the fly from the barcode app.
### Steps to reproduce:
- Create a storable product P with a barcode: XXX
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product: Control per: "Operation" Operations: "Delivery"
- Go to the barcode app > Operations > Delivery > New
- Scan your product
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
The `save_barcode_data` will launch the creation of the move line related to the barcode line you edited from the barcode app. During the create of this 'stock.move.line', an associated move will be created and its initial "state" will be the current state of the picking: https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L354-L356 https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L942 At this point the picking state is "draft" and the move will be correctly created in draft. However, just a few lines after its creation, we will check if a reservation should be done with that move and if its state should be recomputed:
https://github.com/odoo/odoo/blob/ba799a020dd2b07c9d6c379e23acee1e6fcc5e0a/addons/stock/models/stock_move_line.py#L379-L396 the discrepancy is caused by the fact that `move._should_bypass_reservation` will be true if the picking is a receipt and false for the other types because you should bypass reservation for moves whose source is not an internal location but you should not for others. This will leave the moves and picking in draft state if its a receipt and update it for other types. However, only draft pickings are confirmed at the beginning of the button validate: https://github.com/odoo/odoo/blob/b0cfeecacfc6b95659778dfe4d62435556aaa92c/addons/stock/models/stock_picking.py#L1131-L1133
### Use case II:
Create and confirm a picking of any type so that it ends up being assigned. Add manually a move line via the detailed operations.
### Steps to reproduce:
- Create two storable product P1 and P2 put 10 units of both in stock
- Go to Quality > Quality Control > Quality Points > New
- Create a new quality point for your product P2: Control per: "Operation" Operations: "Delivery"
- Create and confirm a Delivery for 1 unit P1
- Go to Detailed Operations > create a new line for 1 unit of P2
- Validate the Delivery
#### > the picking is done but no QC was created nor processed.
### Cause of the issue:
For the same reasons as above, the newly created move is assigned as it mimics the state of the current picking which is assigned since we have already reserved the already existing move.
### Fix:
We ensure the creation of quality checks for moves that end up being created but will never be confirmed.
### Technical limitation:
Unfortunately, it is not possible to manage the use case of quality checks related the component of a kit product without disrupting the barcode flows. Indeed, in barcode flows, the move line as well as its related move is created by a `save_barcode_data`. If we were to confirm the newly created moves rather than just trying to create the QC, it would indeed first explode the bom and then create the related QC for each component. However, the barcode data would not coincide anymore with the back end data since the line we just saved would have been exploded at backend creation. For that reason we do not yet support the above use cases for kit products.
Community: https://github.com/odoo/odoo/pull/202725
opw-4480104
Forward-Port-Of: odoo/enterprise#82643
Forward-Port-Of: odoo/enterprise#81850[FIX] hr_appraisal: prevent TypeError for raw record data The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None. This occurred because the code attempted to create a set from the None value directly. Steps to reproduce: ------------------- * Open Appraisal app and click on an employee's card * Activate debug mode * From the bug dropdown click on 'View Raw Record Date' or 'Data' in 18.0+ > Observation: Fil
Original PR description
[FIX] hr_appraisal: prevent TypeError for raw record data The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None. This…
[FIX] hr_appraisal: prevent TypeError for raw record data
The read method in hr_appraisal.py was raising a TypeError 'NoneType object is not iterable' when the fields parameter was None.
This occurred because the code attempted to create a set from the None value directly.
Steps to reproduce:
-------------------
* Open Appraisal app and click on an employee's card
* Activate debug mode
* From the bug dropdown click on 'View Raw Record Date' or 'Data' in 18.0+
> Observation:
File "/data/build/enterprise/hr_appraisal/models/hr_appraisal.py", line 539, in read
check_notes = set(fields) & {'note', 'assessment_note'}
^^^^^^^^^^^
TypeError: 'NoneType' object is not iterable
Why the fix:
------------
set() requires an iterable. By adding this condition, we avoid iterating over NoneType. This maintains the intended default functionality while preventing the crash.
opw-4631142
Forward-Port-Of: odoo/enterprise#82711
Forward-Port-Of: odoo/enterprise#81758Pytz raises a `NonExistentTimeError` or an `AmbiguousTimeError` when trying to get the offset of a non localized datetime during the daylight saving changing time. Remark: the `_is_customer_in_the_same_timezone` method name should be changed in master as it does the complete opposite. runbot error 162039 Fix courtesy of @Xavier-Do Forward-Port-Of: odoo/enterprise#82810
Original PR description
Pytz raises a `NonExistentTimeError` or an `AmbiguousTimeError` when trying to get the offset of a non localized datetime during the daylight saving changing time. Remark: the `_is_customer_in_the_same_timezone` method name should be changed in master as it does the complete opposite. runbot error 162039 Fix courtesy of @Xavier-Do Forward-Port-Of: odoo/enterprise#82810
- l10n_de_pos_res_cert/static/tests/tours/fiskaly_tour.js Add wait request steps (to fix undeterministic behavior). - mrp_workorder/tests/test_shopfloor.py Add a step_delay=500. This step delay will be removed from codebase soon. This is an intermediate fix. - website_sale_renting/static/tests/tours/website_sale_renting_select... Avoid the usage of datepicker interface that causes problems for now in tours. Forward-Port-Of: odoo/enterprise#82554 Forward-Port-Of: odoo/enterprise#82524
Original PR description
- l10n_de_pos_res_cert/static/tests/tours/fiskaly_tour.js Add wait request steps (to fix undeterministic behavior). - mrp_workorder/tests/test_shopfloor.py Add a step_delay=500. This step delay will be removed from codebase soon. This is an intermediate fix. - website_sale_renting/static/tests/tours/website_sale_renting_select... Avoid the usage of datepicker interface that causes problems for now in tours. Forward-Port-Of: odoo/enterprise#82554 Forward-Port-Of: odoo/enterprise#82524
Dynamically use the latest `html_migrations` version in the `knowledge_history_tour` to avoid having to update the test every time a new html version is deployed. task-4640490 Forward-Port-Of: odoo/enterprise#82817 Forward-Port-Of: odoo/enterprise#81344
Original PR description
Dynamically use the latest `html_migrations` version in the `knowledge_history_tour` to avoid having to update the test every time a new html version is deployed. task-4640490 Forward-Port-Of: odoo/enterprise#82817 Forward-Port-Of: odoo/enterprise#81344
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user. **Steps to reproduce:** - Install the `account` and `l10n_hr_payroll` modules. - Navigate to the **Vendors** view and delete the `Register for State Labour Welfare Fund Deduction` record. - In **Scheduled Actions**, manually execute `Payroll: Update data`. - Observer the backend error. **Error:** `ValueError - ParseError('while parsing /home/odoo/src/
Original PR description
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user. **Steps to reproduce:** - Install the `account` and…
Currently, an error is produced when updating payroll data if a referenced partner record in salary rules has been deleted by the user.
**Steps to reproduce:**
- Install the `account` and `l10n_hr_payroll` modules.
- Navigate to the **Vendors** view and delete the `Register for State Labour Welfare Fund Deduction` record.
- In **Scheduled Actions**, manually execute `Payroll: Update data`.
- Observer the backend error.
**Error:**
`ValueError - ParseError('while parsing /home/odoo/src/enterprise/saas-18.2/l10n_in_hr_payroll/data/salary_rules/hr_salary_rule_ind_emp_data...`
The error occurs because the method at [1] attempts to load the `hr_salary_rule_ind_emp_data.xml` file that references a deleted `partner_id` [2], leading to a parsing error.
[1] - https://github.com/odoo/enterprise/blob/46f838403c8d60760a5b37cb5fe8d052d2307999/l10n_in_hr_payroll/models/hr_payslip.py#L44-L54
[2] - https://github.com/odoo/enterprise/blob/46f838403c8d60760a5b37cb5fe8d052d2307999/l10n_in_hr_payroll/data/salary_rules/hr_salary_rule_ind_emp_data.xml#L364
This commit ensures that `res_partner_data.xml` is loaded before `hr_salary_rule_ind_emp_data.xml`, preventing errors due to missing partners.
Sentry - 6429993371
Forward-Port-Of: odoo/enterprise#81917