Daily updates from Odoo
Navigate
Branch
Tuesday, April 29, 2025
73 changes
29 changes
Resolved issues and error corrections
This fixes the order in which certain hardware device drivers are selected so that the correct driver runs first. It prevents Adam equipment handling from interfering with Blackbox devices, improving reliability for connected IoT hardware.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/84122 Since commit ae16d9d, the Adam driver priority has been incorrectly set higher than it should be. The issue was a side-effect of removing…
Enterprise PR: https://github.com/odoo/enterprise/pull/84122 Since commit ae16d9d, the Adam driver priority has been incorrectly set higher than it should be. The issue was a side-effect of removing the meta-class, since it no longer registered the `Driver` base class as a driver. The fix was just to simplify the priority system to not be affected by inheritance. Then we manually set the Adam priority to -1, and the Blackbox priority to 1. Everything else will have priority 0. For a detailed breakdown of the old behaviour and the cause of the bug, keep reading: The priority system was influenced by inheritance - the more levels of inheritance, the higher the priority. For example, in saas-18.1, you get these priorities: - `SerialBaseDriver`: 1 - `BlackBoxDriver`: 2 - `ScaleDriver`: 2 - `Toledo8217Driver`: 3 The Adam driver sets its priority to zero, but it still gets +1 from the meta class. So the final priorities are as follows in saas-18.1: - `SerialBaseDriver`: 1 - `AdamEquipmentDriver`: 1 - `BlackBoxDriver`: 2 - `ScaleDriver`: 2 - `Toledo8217Driver`: 3 This results in the Adam driver runs last. In saas-18.2, the priorities are shifted by 1 due to the `Driver` base class not being registered, but the Adam driver still ends up with the same value. So the priorities now look like this: - `SerialBaseDriver`: 0 - `AdamEquipmentDriver`: 1 - `BlackBoxDriver`: 1 - `ScaleDriver`: 1 - `Toledo8217Driver`: 2 The Adam driver and blackbox driver have the same priority, so the Adam driver could end up running first and breaking the blackbox. task-4750364 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Automation rules that run custom Python code now handle individual record errors more safely. This prevents one failed rule execution from repeatedly disrupting scheduled automation runs, improving reliability for administrators using automated actions.
Original PR description
SQL traceback occurs when user creates their own automation rule involving python code. **Steps to reproduce:** Install base_automation,discuss if not already installed * `Setting>…
SQL traceback occurs when user creates their own automation rule involving python code.
**Steps to reproduce:**
Install base_automation,discuss if not already installed
* `Setting> Technical>Automation rules`
* name it as `Whatsapp add admin`
* model as `discuss channel` and trigger `after creation` any amount of time
* `Add an action>Execute code`
* Add the following code:
```python
try:
env['discuss.channel.member'].create({ 'partner_id': 1, # Likely invalid 'channel_id': 1, })
except Exception:
pass
env['res.partner'].search([], limit=1)
```
* Go to `techinical>automation>scheduled actions>Automation rules:check and execute` run it manually.
`ValueError:InFailedSqlTransaction('current transaction is aborted, commands ignored until end of transaction block\n') while evaluating
'model._cron_process_time_based_actions()'`
**Solution:**
* Place try and except inside the loop to handle errors per record and allow the loop to continue and handle the transaction error better.
* This will only one occurence of the error instead of repeating occurrence each time the cron runs.
**Sentry-6562754804**
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix restores a previously disabled website test by replacing an external service call with a proper substitute. It improves release validation reliability without changing the customer-facing website experience.
Original PR description
test_01_beacon was disabled to allow an easier forwardport of #207720 This commit fixes the issue by providing a correct substitution for the external call. Runbot error: 182085
Miscellaneous changes
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page. ## Steps to reproduce: - Install Sales app; - Navigate to the Settings app: - Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected; - Navigate to the Sales app: - Create a new quote with 8x `Chair floo
Original PR description
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the…
## Version:
18.0+
## Issue:
PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page.
## Steps to reproduce:
- Install Sales app;
- Navigate to the Settings app:
- Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected;
- Navigate to the Sales app:
- Create a new quote with 8x `Chair floor protection`;
- Via the `Actions` gear button, print the `PDF Quote`.
## Cause:
Complete code refactoring for documents layouts styles introduced by https://github.com/odoo/odoo/pull/169512 has probably not been tested on that use case.
## Fix:
<img width="1105" alt="Capture d’écran 2025-04-03 à 10 25 58" src="https://github.com/user-attachments/assets/67bce15e-c5e9-40f8-9fbf-7721afc98ae5" />
opw-4624623
opw-4627809
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#204575Build error 162704 Follow-up on other WebSocket fixes, this time for the execution of the WebSocket request inside the same test, but not after a Chrome browser. This case is quite specific and is related to a low timeout set on websocket_connect, leading to the request being randomly executed inside the test. This is a problem for the current test (fixed by increasing the timeout), but also for the next test: if the TestCursor rollback fails, the cursor_stack of the TestCursor is not empt
Original PR description
Build error 162704 Follow-up on other WebSocket fixes, this time for the execution of the WebSocket request inside the same test, but not after a Chrome browser. This case is quite specific and is related to a low timeout set on websocket_connect, leading to the request being randomly executed inside the test. This is a problem for the current test (fixed by increasing the timeout), but also for the next test: if the TestCursor rollback fails, the cursor_stack of the TestCursor is not emptied, leading to a case where an existing read-only test cursor in the stack makes the next TestCursor read-only, causing chain failures. Forward-Port-Of: odoo/odoo#207974
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
Original PR description
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
Original PR description
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some records for each field. * Open session, make a sale, close register * Edit employees configuration, delete one, change rights advanced -> minimal * Reopen the session > Observation: The employee deleted is still visible in the list of cashiers and the employee that has now minimal rights is
Original PR description
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some…
Currently, since we read most data from cache, if an employee right was changed, it is not reflected in the pos. Steps to reproduce: ------------------- * Enable "Log in with employees" and set some records for each field. * Open session, make a sale, close register * Edit employees configuration, delete one, change rights advanced -> minimal * Reopen the session > Observation: The employee deleted is still visible in the list of cashiers and the employee that has now minimal rights is still having advanced rights. Why the fix: ------------ When removing rights from an employee it is important to have it reflected as soon as possible. A possible solution would have been to recompute `last_data_change` when making any modification on the employee rights but this would recompute everything and we lose the performance added by the caching feature. Instead, by adding the model to `uniqueModels` we ensure that anytime we reload the pos, all `hr.employee` records will be dropped from the indexedDB, which ends up using the data loaded. https://github.com/odoo/odoo/blob/5d52373b4c9d64968316c4e883d6b49c7cd1d048/addons/point_of_sale/static/src/app/services/data_service.js#L246-L251 Fix during forward: ------------------- The data related to hr employees is not sent to the frontend. After this commit https://github.com/odoo/odoo/commit/96ee0b6288e4cc16aaf45162c5341fd2b9c7e60f there is a difference in the data loaded regarding hr_employees. With this change: https://github.com/odoo/odoo/commit/96ee0b6288e4cc16aaf45162c5341fd2b9c7e60f#diff-86db45bc09231ecbc49a64405de92e0a022a6833980f46a9111501f8c8832760L172-R175 We see that we first load data with `_load_pos_data` then that data is post processed with `_post_read_pos_data` `_load_pos_data` does not return any product. Previous to the commit, `_post_read_pos_data` was called `_load_pos_data` and the domain to read hr employees was: `self._load_pos_data_domain(data)` but now the domain is computed withinh `pos_load_mixin.py` with `self._server_date_to_domain(self._load_pos_data_domain(data))` So now the only hr employees that are going to be loaded to the frontend are the employees which have been modified after `_last_data_change`. Since hr employees are needed to know which rights they have we want to load those related to the config everytime. opw-4699241 Forward-Port-Of: odoo/odoo#206099
- SaveLastPreparationChangesTour To fix the error, add the three last steps to ensure floor plan is well rendered before close the browser. runbot-error-id~114344 - FinishResidualOrder Wait the screen floor is completely loaded before clicking on table 5 or the order can sometimes not be well loaded. runbot-error-id~161595 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed th
Original PR description
- SaveLastPreparationChangesTour To fix the error, add the three last steps to ensure floor plan is well rendered before close the browser. runbot-error-id~114344 - FinishResidualOrder Wait the screen floor is completely loaded before clicking on table 5 or the order can sometimes not be well loaded. runbot-error-id~161595 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#207573 Forward-Port-Of: odoo/odoo#207469
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been s
Original PR description
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been set by mistake it is impossible to change it, and a credit note is needed. opw-4683997 Forward-Port-Of: odoo/odoo#206965
Before this commit: ===================== - The combo selection dialog flickered when a combo product had only one choice and was non-configurable, as it opened and closed rapidly. - In self-order mode, a traceback occurred in this scenario, and the auto- selection of the combo choice was missing, unlike in the main POS. After this commit: ============== - The dialog no longer flickers and will not open if there is only one non- configurable choice. It now only opens when multip
Original PR description
Before this commit: ===================== - The combo selection dialog flickered when a combo product had only one choice and was non-configurable, as it opened and closed rapidly. - In self-order mode, a traceback occurred in this scenario, and the auto- selection of the combo choice was missing, unlike in the main POS. After this commit: ============== - The dialog no longer flickers and will not open if there is only one non- configurable choice. It now only opens when multiple choices are available or configuration is required. - The auto-selection of the combo choice is now consistent between self-order mode and the main POS, preventing tracebacks. Task-4664491 Forward-Port-Of: odoo/odoo#207730 Forward-Port-Of: odoo/odoo#203211
Removes low value logs in order to have lighter log files and less confusing messages 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#207051
Original PR description
Removes low value logs in order to have lighter log files and less confusing messages 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#207051
After this commit: === - Allowed all presets to be set as default. - Added a shortcut to edit presets from settings. - Renamed `Others` to `Available` for clarity. - Users can select a `default` preset only from `available presets`. - Enabled users to change preset identification, even if set as default. - Improved field names for better usability. - Restricted deletion of master and in-use presets. Task: 4523232 Related PR: odoo/odoo#202640 Forward-Port-Of: odoo/odoo#19
Original PR description
After this commit: === - Allowed all presets to be set as default. - Added a shortcut to edit presets from settings. - Renamed `Others` to `Available` for clarity. - Users can select a `default` preset only from `available presets`. - Enabled users to change preset identification, even if set as default. - Improved field names for better usability. - Restricted deletion of master and in-use presets. Task: 4523232 Related PR: odoo/odoo#202640 Forward-Port-Of: odoo/odoo#196800
When selling a physical gift card, and invoicing it. The code and partner id where not taken into account. Steps to reproduce: ------------------- * Open PoS * Add a gift card to the order * Click on selling a physical gift card * Enter any code * Validate the order and invoice it > Observation: If you check the gift card in the backend, you will see that the code and partner id are not set correctly. Why the fix: ------------ When updating the rewards, the code and partner id
Original PR description
When selling a physical gift card, and invoicing it. The code and partner id where not taken into account. Steps to reproduce: ------------------- * Open PoS * Add a gift card to the order * Click on selling a physical gift card * Enter any code * Validate the order and invoice it > Observation: If you check the gift card in the backend, you will see that the code and partner id are not set correctly. Why the fix: ------------ When updating the rewards, the code and partner id were never set. opw-4597330 Forward-Port-Of: odoo/odoo#206545 Forward-Port-Of: odoo/odoo#206071
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs
Original PR description
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient…
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs on cash desk 2 during payment: could not obtain lock on row in relation “ir_sequence”. The odoo.service.model retries to create the order and since the ir_sequence of pos_config used in the pos_order name is not set to "no_gap", the pos_order names have a gap equal to the number of retries. Task-4708543 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#207555 Forward-Port-Of: odoo/odoo#205935
Previously, when using a payment method integrated with the Bank App (QR code), a QR code was shown on the customer display. This functionality was lost during the refactoring of the customer display into a standalone OWL app: https://github.com/odoo/odoo/commit/acf78c27b12cf014cd80d20ea5853e63ab9ca03f It was later removed entirely with the deletion of the point_of_sale.CustomerFacingQR template: https://github.com/odoo/odoo/commit/49116abd0916ac835e0ad1f6ba1714b8e80c4272 This commit
Original PR description
Previously, when using a payment method integrated with the Bank App (QR code), a QR code was shown on the customer display. This functionality was lost during the refactoring of the customer display into a standalone OWL app: https://github.com/odoo/odoo/commit/acf78c27b12cf014cd80d20ea5853e63ab9ca03f It was later removed entirely with the deletion of the point_of_sale.CustomerFacingQR template: https://github.com/odoo/odoo/commit/49116abd0916ac835e0ad1f6ba1714b8e80c4272 This commit reintroduces the QR code on the customer display. Forward-Port-Of: odoo/odoo#207627 Forward-Port-Of: odoo/odoo#206872
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 Descrip
Original PR description
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 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#207430 Forward-Port-Of: odoo/odoo#204164
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime object, which are automatically converted into the `datetime.date`/`datetime.datetime` when the xls(x) file is parsed in python. When an xls(X) file contains at the same time date values under date/datetime objects and under strings with the user format `%d/%m/%Y` (rather than the server format `%Y-%m-
Original PR description
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime…
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime object, which are automatically converted into the `datetime.date`/`datetime.datetime` when the xls(x) file is parsed in python. When an xls(X) file contains at the same time date values under date/datetime objects and under strings with the user format `%d/%m/%Y` (rather than the server format `%Y-%m-%d`), the import was failing with the error `time data '06/30/2025' does not match format '%Y-%m-%d'` This error normally happens when the user tries to do an import with different kind of date formats under strings in the same file e.g. `06/30/2025` and `2025-07-01` and this is understandable that Odoo doesn't know what to do in such a case. But, if you stick to the same format, either only `%d/%m/%Y` either only '%Y-%m-%d'`, Odoo supports it. However the case here is trickier: it's when the file contains at the same time dates under a string format, e.g. `06/30/2025` and under date objects, e.g. `datetime.date(2025, 6, 30)`. Which can happen quite easily, as Google Spreadsheet for instance tends to automatically convert the cells holding a date value into date object. And it's then easy to have a file containing both date objects and strings for date, which looks visually the same in the Google Spreadsheet interface. In addition Google Spreadsheet tends to convert automatically only dates below the 12 of the month because of the american format. e.g. if you set `01/06/2025`, it gets converted into a datetime object if you set `13/06/2025`, it doesn't get converted into a datetime object, the value stays as a string. The goal of this revision is to support to have the possibility of having date values under date objects and string in a user format The problem lied in the fact, during the xls parsing, date objects were converted into strings using the server date format. And then you could finish with data containing both the user format and the server format. The idea is to no longer automatically convert date objects and to support having date objects in the import parsing. And when trying to guess the date/datetime format of the file, date objects are simply ignored, as they do not need to be parsed. Forward-Port-Of: odoo/odoo#206876
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures t
Original PR description
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures that the missed notification check is performed on all connections after the initial one, not only during a "reconnect". [1]: https://github.com/odoo/odoo/pull/206106 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#207557 Forward-Port-Of: odoo/odoo#207392
Since #203903 the user `im_status` is sent directly from the identity model in order to take into account other module overrides without having to re-establish them client side. This commit removes the method patching `updateImStatus` as the value arrives client side already patched from `hr_holidays`. Forward-Port-Of: odoo/odoo#207471
Original PR description
Since #203903 the user `im_status` is sent directly from the identity model in order to take into account other module overrides without having to re-establish them client side. This commit removes the method patching `updateImStatus` as the value arrives client side already patched from `hr_holidays`. Forward-Port-Of: odoo/odoo#207471
Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6. open link in private window. Issue ----- > 500: Internal Server Error > Error while render the template > ValueError: Expected singleton: product.product() Cause ----- Commit 9aa52dd6418e removed the creation of a "Down payment" product. Before it, order lines were either of typ
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6.…
Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6. open link in private window. Issue ----- > 500: Internal Server Error > Error while render the template > ValueError: Expected singleton: product.product() Cause ----- Commit 9aa52dd6418e removed the creation of a "Down payment" product. Before it, order lines were either of type `display_section` or they had a `product_id` value. After the commit, a third option is for `is_downpayment` to be true. This regressed the fix to this issue added by 34d4ffa01d57d, as instead of ensuring lines have a `product_id` value before checking if reorder is allowed, it decided to check whether they're not of `display_type`. Solution -------- Ensure there's a `product_id` in `sale.order.line` instead of only relying on the caller to filter those out beforehand. opw-4711297 Forward-Port-Of: odoo/odoo#207772 Forward-Port-Of: odoo/odoo#206435
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time. ## How to reproduce - Create product P, storable, tracked in Kg - Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg -> Stock Valuation is updated by 0.02Kg OPW-4734980 --- Test result without fix: ``` 2025-04-22 13:40:45,088 38626 ERROR oes_tes
Original PR description
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced…
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time.
## How to reproduce
- Create product P, storable, tracked in Kg
- Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg
-> Stock Valuation is updated by 0.02Kg
OPW-4734980
---
Test result without fix:
```
2025-04-22 13:40:45,088 38626 ERROR oes_test_16 odoo.addons.stock_account.tests.test_stockvaluation: FAIL: TestStockValuation.test_valuation_rounding_method
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/16.0/odoo/addons/stock_account/tests/test_stockvaluation.py", line 4397, in test_valuation_rounding_method
self.assertEqual(receipt.move_ids.stock_valuation_layer_ids.quantity, 0.01)
AssertionError: 0.02 != 0.01
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207401
Forward-Port-Of: odoo/odoo#206884Problem --------- SPV requires the CIUS-RO xml. However, when selecting the "sending to SPV" uniquely in the move send wizard, it fails becuase it's missing the XML. Solution --------- When sending to SPV, generate the XML by default instead of doing nothing if it's not present. task-4720583 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207574 Forward-Port-Of: odoo/odoo#206828
Original PR description
Problem --------- SPV requires the CIUS-RO xml. However, when selecting the "sending to SPV" uniquely in the move send wizard, it fails becuase it's missing the XML. Solution --------- When sending to SPV, generate the XML by default instead of doing nothing if it's not present. task-4720583 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207574 Forward-Port-Of: odoo/odoo#206828
* = pos_restaurant In this commit: === - Ensured that when a popup is open and the screensaver appears, the popup no longer overlays the screensaver. - Fixed an issue in the restaurant module is installed, after the screensaver appears on the login screen, clicking would bring back the login screen, but attempting to open a session would trigger the screensaver again. task-4607035 Forward-Port-Of: odoo/odoo#207696 Forward-Port-Of: odoo/odoo#199528
Original PR description
* = pos_restaurant In this commit: === - Ensured that when a popup is open and the screensaver appears, the popup no longer overlays the screensaver. - Fixed an issue in the restaurant module is installed, after the screensaver appears on the login screen, clicking would bring back the login screen, but attempting to open a session would trigger the screensaver again. task-4607035 Forward-Port-Of: odoo/odoo#207696 Forward-Port-Of: odoo/odoo#199528
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by giving employee name 3) Click on the call icon of work phone 4) Now tries to save the new employee record Error: `KeyError: name` This issue occurs because, while clicking the call widget, it creates the record but does not update it in the browser. As a result, when the user tries to sa
Original PR description
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by…
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by giving employee name 3) Click on the call icon of work phone 4) Now tries to save the new employee record Error: `KeyError: name` This issue occurs because, while clicking the call widget, it creates the record but does not update it in the browser. As a result, when the user tries to save manually, It again creates the record with an empty vals_list. So it will leads to the above traceback from the below lines https://github.com/odoo/odoo/blob/2d64d94487d24278dc3c6615343a793e1ec94daf/addons/hr/models/hr_employee.py#L386 This fix resolves the issue by ensuring that clicking the call icon before saving retains the user input. Additionally, I have added a test to verify this behavior. sentry-6234873849 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206710 Forward-Port-Of: odoo/odoo#195278
**Steps to Reproduce:** - Go to Sales - Make a user-defined filter and make it the default filter - Try to access the JSON link (/json/sales) - You will see an error **Issue:** - When users apply default filters like 'My Quotations' or 'My Documents', Odoo saves 'uid' in the filter's domain to represent the logged-in user. - However, when the system tries to process this filter, it fails because 'uid' is just a placeholder and not a valid value. This results in an **internal server erro
Original PR description
**Steps to Reproduce:** - Go to Sales - Make a user-defined filter and make it the default filter - Try to access the JSON link (/json/sales) - You will see an error **Issue:** - When users apply…
**Steps to Reproduce:**
- Go to Sales
- Make a user-defined filter and make it the default filter
- Try to access the JSON link (/json/sales)
- You will see an error
**Issue:**
- When users apply default filters like 'My Quotations' or 'My Documents', Odoo saves 'uid' in the filter's domain to represent the logged-in user.
- However, when the system tries to process this filter, it fails because 'uid' is just a placeholder and not a valid value. This results in an **internal server error**, preventing users from applying these filters correctly.
**Cause:**
This issue is caused after this commit: https://github.com/odoo/odoo/pull/182196
- The domain string stored in 'ir.filters' includes 'uid' instead of the actual user ID.
- When Odoo('ast.literal_eval()') tries to evaluate the filter, it doesn’t know what 'uid' means, causing an error.
**Fix:**
- Replace 'uid' with `str(model.env.uid)` before evaluating the domain.
- This ensures 'ast.literal_eval()' processes a valid domain.
**Affected version:** 18.0~master
**opw**-4645608
Forward-Port-Of: odoo/odoo#202890Steps to reproduce: - enable qr code - create an invoice with a swiss client - try to print it Issue: An error is raised Cause: There is no reference for a Swiss invoice in draft. If there is no reference, it is not possible to print the qr code in Switzerland. Solution: We prevent QR code generation whenever the invoice is in draft. opw-4585574 Forward-Port-Of: odoo/odoo#204661 Forward-Port-Of: odoo/odoo#198498
Original PR description
Steps to reproduce: - enable qr code - create an invoice with a swiss client - try to print it Issue: An error is raised Cause: There is no reference for a Swiss invoice in draft. If there is no reference, it is not possible to print the qr code in Switzerland. Solution: We prevent QR code generation whenever the invoice is in draft. opw-4585574 Forward-Port-Of: odoo/odoo#204661 Forward-Port-Of: odoo/odoo#198498
Before this commit: - Changing the state via the GST warning did not update the fiscal position. After this commit: - Changing the state via the GST warning correctly update the fiscal position. Task-4681566 Forward-Port-Of: odoo/odoo#207078 Forward-Port-Of: odoo/odoo#205000
Original PR description
Before this commit: - Changing the state via the GST warning did not update the fiscal position. After this commit: - Changing the state via the GST warning correctly update the fiscal position. Task-4681566 Forward-Port-Of: odoo/odoo#207078 Forward-Port-Of: odoo/odoo#205000
As per the ATO guidelines, the BAS should be rounded down to whole dollars. task-4734528 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206380
Original PR description
As per the ATO guidelines, the BAS should be rounded down to whole dollars. task-4734528 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206380
35 changes
Enhancements to existing features
Internal users now receive a dedicated signature request activity instead of a generic to-do when their signature is needed. Opening that activity takes them directly to the signature request, reducing extra steps and making document signing faster.
Original PR description
In this commit, - Change the activity type to request signature from to-do type when user create sign request for internal user. - Prevent opening wizard for request signature activity when the record is linked to signature record and open signature request directly for the user. task-4369848
The IoT Box communication format has been simplified to make message handling easier to maintain. This should reduce complexity behind connected workflows such as delivery, reporting, and self-ordering without changing the user experience.
Original PR description
The websocket messaged handling on the IoT Box was hardly readable. The message structure has been simplified, as well as the message handling. Enterprise PR: odoo/odoo#207741 Task: 4756709
The Mexican e-invoicing flow now supports linking multiple related CFDI documents, aligning with SAT CFDI 4.0 requirements. This helps businesses correctly document invoice relationships across invoices, payments, POS orders, and stock transport records.
Original PR description
As per updates from the Mexican Tax Authority (SAT) regarding the CFDI 4.0 changes, it is now possible to link more than one CFDI. For this. Is required to use as many nodes as necessary to link the relevant CFDI. This commit introduces the possibility to add multiple cfdi divided by multiple relations target: master task-4376007
The Belgian VAT listing report no longer flags customers just because their country is missing. This reduces unnecessary blocking checks when preparing Belgian tax reporting, helping users complete the VAT listing with fewer false issues.
Original PR description
task-4627315
Recruitment and referral screens have been refreshed to make key actions easier to find and forms easier to use. Job posting details, reporting views, and related settings were also adjusted so recruiters see clearer information in the right places.
Original PR description
hr_recruitment - Remove the `Referral Campaign` cog menu button in `hr_job` form view and replace it with an action button to be more discoverable. - Revamp the `Referral Campaign` wizard form view to improve usability. - Show `Mission Dates` on Job Position form view only when job_boards (hr_recruitment_integration_base) is installed hr_recruitment_reports - made the changes for the Reports views hr_recruitment_extract - made the changes for the settings views Task: 4463696
Users can more smoothly reorder items in grouped list views where supported. This update aligns related reporting and customization screens with the latest list-view behavior, reducing inconsistencies when working with ordered records.
Original PR description
*: account_reports, web_studio This commit removes the parameter of list renderer's getActiveColumns method in its extensions as it is no longer useful due to https://github.com/odoo/odoo/pull/207198 Part of task-4613142
This update broadens annual closing support from Belgium-specific handling to a more generic process across localizations, while also including related accounting and reporting adjustments. It helps businesses manage year-end accounting workflows more consistently across countries.
Original PR description
Some follow-up items to fix after the shop floor redesign from [1]. Please refer to the individual commits for details about the different fixes. [1] https://github.com/odoo/enterprise/pull/80469 task-4731403
Journal entries now include start and end date fields, making it easier to manage and review deferred revenue and expense periods. The workflow also avoids showing an unnecessary error when generated entries exist, opening the relevant entries instead.
Original PR description
1. Added 'Start Date' and 'End Date' fields on journal entry views and allow inserting start date and end date for all entries 2.Do not pop ''No entry to generate.'' error message open the the list view or form view in more than 1 of the generated entries. task-4636850
This update adds a way to record when a WhatsApp contact was last seen. It helps teams better understand recent customer activity and can support more timely follow-ups.
Original PR description
PR community: https://github.com/odoo/odoo/pull/170690
The field service sales product catalog now better supports organizing products into sections, making orders easier to structure and review. Related stock and sales tests were updated to keep these workflows reliable as the catalog behavior evolves.
Resolved issues and error corrections
Invoice and sales documents now keep the correct tax column behavior when Avatax is used. This prevents tax columns from being shown or hidden incorrectly, improving consistency for customer-facing documents and portal views.
Original PR description
Before this fix, inherited views from account_avatax and sale were overwriting attributes from the community modules, causing the tax column to behave incorrectly in certain cases. This update ensures that both the Avatax-specific logic and the original community template logic are applied correctly, preserving consistent tax column behavior. Implementation Details: - Using a separator, both conditions are now integrated into the inherited views. - If is_avatax is true, the tax column will be hidden to follow the Avatax-specific behavior. - If is_avatax is false, the tax column will be displayed according to the display_taxes logic, ensuring accurate visibility based on tax application in order/invoice lines. This change prevents overwriting the original conditions from the account and sale modules, ensuring better compatibility with the community code. Community: odoo/odoo#205166 Upgrade: odoo/upgrade#7594 task-4705734
Users can no longer try to create AI tools from the related search window in AI topic setup. This avoids an error screen and keeps AI tool creation limited to the intended workflow.
Original PR description
When attempting to create an AI tool from the 'Search More' view within the ai.topic form view, a traceback occurs. This change resolves the issue by restricting the creation of ai.tool from that view, as ai.tool is not intended to be generated on the fly by users.
Long document names no longer cause action buttons in the document preview header to shift out of alignment. On larger screens, these actions are grouped under the More menu to keep the viewer clean and easier to use.
Original PR description
Steps to Reproduce: 1. document with long title 2. Upload document 3. preview the document When a document had a long title, action buttons in the DocumentsFileViewer header became misaligned. After this commit: If the screen is not small, all action buttons are moved inside the More dropdown to maintain alignment. Task-4600177
Features or functions removed from Odoo
The Timesheets Analysis report has been removed from timesheet-related modules. This simplifies the available reporting options and may affect users who previously relied on this specific report for reviewing timesheet data.
Original PR description
task-4047790
Code cleanup and technical improvements
This refactor standardizes the test setup for Point of Sale-related modules by using shared products with simple prices and tax rates. It makes future testing easier and removes or merges duplicated backend tests where equivalent frontend coverage already exists, with no expected change for everyday users.
Original PR description
*: l10n_br_edi_pos, l10n_ke_edi_oscu_pos The aim of this commit is to make test writing easier, by choosing easy-to-calculate prices with their corresponding taxes. The products created have prices…
*: l10n_br_edi_pos, l10n_ke_edi_oscu_pos
The aim of this commit is to make test writing easier, by choosing
easy-to-calculate prices with their corresponding taxes.
The products created have prices of 10 or 20 with taxes of 5, 10 or 15
percent.
A global class will be created and inherited by all Point of Sale tests,
with the aim of always using products already available. If a different
product is required in a specific test, existing products can be
modified.
---
Test in file: `point_of_sale/tests/test_point_of_sale_flow.py`:
- Test `test_order_refund_lots` is removed and adapted in the frontend
tour `test_lot`
- Test `test_order_to_invoice` is removed because frontend is already
testing this behavior, related tests:
- Test `test_02_pos_with_invoiced`
- Test `test_order_and_invoice_amounts`
- And more in submodules...
- Test `test_order_with_deleted_tax` is removed because it is using
`sync_from_ui` method which should not be used in the backend.
Frontend tours are already testing its behavior
- Test `test_order_refund_picking` is merged with `test_order_to_picking`
- Test `test_order_with_different_payments_and_refund` is removed
because its description don't correspond to the actual behavior of the
test. The goal of the test isn't clear.
- Test `test_product_combo_creation` is removed because its already
tested in owner module.
- Test `test_order_refund_with_owner` was merged with the frontend
test `test_lot`
- Test `test_change_is_deducted_from_cash` was merged with the frontend
test `test_tracking_number_closing_session`This update standardizes how linked record values are handled across Odoo screens such as forms, lists, kanban views, documents, accounting, appointments, helpdesk, field service, and knowledge. The change is mostly internal, helping the platform support richer related information while keeping standard server data calls unchanged.
Original PR description
Currently, in the RelationalModel, the value of a many2one is represented by an Array [id, display_name]. In the PR [1], we already introduced a change on their value. The value is still an Array but properties are set on it too. This allows to add relatedFields on many2ones. With this commit, we fully replace the array value by an object thus properties 0 and 1 are not available anymore. Calling an orm method like read or search_read still gives the array representation, the change is done only by using RelationalModel (in form view, list, kanban, fields, etc.). [1]: https://github.com/odoo/odoo/pull/202534 task-3547961 task-4658840
Miscellaneous changes
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient because it wasn't leveraging any batch optimization of the ORM. This PR breaks down the for-loop into smaller ones that aggregate vals and performs a single call to create records, instead of individual creations. Same approach was taken for unlinked records and posting moves. The assumption is that rec
Original PR description
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient…
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient because it wasn't leveraging any batch optimization of the ORM. This PR breaks down the for-loop into smaller ones that aggregate vals and performs a single call to create records, instead of individual creations. Same approach was taken for unlinked records and posting moves.
The assumption is that records are created in the same order of the values list. This allows for breaking the for-loop because consecutive for-loops can simply inherit the order from the lists created in the loop just before. Another leverage point is that simply adding move_id to account.move.line(s) before creation is equivalent to `move.write({'line_ids': \[...\]})`. Based on the 2 assumptions, we could decouple the creation of moves and their lines into separate loops to aggregate their values.
After this PR creations, unlinks and posting operations are all batched to leverage the power of ORM optimization.
Benchmarks:
|Num deferred expenses | Time before | Time After | Num queries before | Num queries After |
|--------------------- | ----------- | ---------- | ------------------ | ----------------- |
| 100 | 23.9s | 13.1s | 3768 | 2918 |
| 1,000 |181.4s | 66.5s | 17885 | 9530 |
| 10,000 |TIMEOUT(>1200s)| 616,7s | 1379 | 1010 |
opw-4480919
opw-4403217
Forward-Port-Of: odoo/enterprise#81440
Forward-Port-Of: odoo/enterprise#79255### Step to reproduce: - In the settings enable Multi-step routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in manufacturing in 2 steps - Create a bill of material for a final product FP with one raw: - 3 x COMP (storable product with 10 units in stock) - Create and confirm an MO for 1 unit of FP. > This create a picking from stock to preprod for 3 unit of COMP - In the shopfloor on your MO click on the 3 dots and add components - Register
Original PR description
### Step to reproduce: - In the settings enable Multi-step routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in manufacturing in 2 steps - Create a bill of…
### Step to reproduce:
- In the settings enable Multi-step routes
- Inventory > Configuration > Warehouse Management > Warehouses
- Put you warehouse in manufacturing in 2 steps
- Create a bill of material for a final product FP with one raw:
- 3 x COMP (storable product with 10 units in stock)
- Create and confirm an MO for 1 unit of FP.
> This create a picking from stock to preprod for 3 unit of COMP
- In the shopfloor on your MO click on the 3 dots and add components
- Register a new unit of COMP
> The picking from stock to pre-prod was updated twice, hence for 5 units
### Cause of the issue:
When you add a product from the shopfloor, we create a new move from pre-prod to virtual/production with the corresponding `product_uom_qty` of 1 and confirm it:
https://github.com/odoo/enterprise/blob/fc1fb4c56da916b165c43d8f6b6a4b903733a12f/mrp_workorder/wizard/additional_product.py#L63-L68 Since the procure method of this move has been adjusted, this confirmation will correctly create and run a procurement to generate a move from stock to pre-prod. Note that this part of the flow is strictly necessary if the additional product is not already part of the component raw of the MO. However, since in the present case there is already move raw from pre-prod to virtual/production associated to that product, the action confirm will also merge our additional move with the current existing one and hence modify its `product_uom_qty`. However, an override of mrp ensures that when such modification happen, we should also run the procurement to ensure that modifying the demand of a move will also update the related pickings:
https://github.com/odoo/odoo/blob/7def831bea18a91e4fa0f9c6aa6de34f4d6d18c8/addons/mrp/models/stock_move.py#L413-L419 Since we already run that same procurement we should bypass this call in our case.
opw-4562965
Forward-Port-Of: odoo/enterprise#83555
Forward-Port-Of: odoo/enterprise#81818### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order,
Original PR description
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose…
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order, add shipping and get the shipping rate for your set up fedex UK. #### > Fedex request error: `CURRENCY.TYPE.INVALID` ### Cause of the issue: The currency used in the fedex request is the currency of the order: https://github.com/odoo/enterprise/blob/07845988daad911b10de3b7199b81cc4ed3cfba9/delivery_fedex_rest/models/delivery_fedex.py#L133-L141 that is GBP, however since 44e32359bb79eed08a41861e155c98f664c6d09a we do not automatically convert the GBP currency in UKL. Since Fedex API does not seem to support the GBP we raise the error. ### Fix: We should use the currency conversion available between GBP and UKL. opw-4712354 Forward-Port-Of: odoo/enterprise#83388
## Display Callee Suggestions The dialer's "Show More" button - which appears when your search returns more than one result - can now be clicked and open a list of all the results, grouped by whether they match the contact's name or phone number. ## Separate Dialer from Keypad The "keypad" part of the Dialer component is extracted into its own component, as it will be reused in the upcoming Transfer view. ## Improve i18n support Normalization helpers needed by the match function are add
Original PR description
## Display Callee Suggestions The dialer's "Show More" button - which appears when your search returns more than one result - can now be clicked and open a list of all the results, grouped by whether they match the contact's name or phone number. ## Separate Dialer from Keypad The "keypad" part of the Dialer component is extracted into its own component, as it will be reused in the upcoming Transfer view. ## Improve i18n support Normalization helpers needed by the match function are added. These are more complete than the ones in web/ and are based, among other things, on the list of characters handled by PostgreSQL's unaccent function. At some point it'd be nice to move the helpers to web. Part of task-4642428 Forward-Port-Of: odoo/enterprise#84013
In the VAT report return, we check that there are no draft moves in the period. However, we only want customer invoices and bills, MISC entries should not be included in the check. task-4627315 Forward-Port-Of: odoo/enterprise#84046
Original PR description
In the VAT report return, we check that there are no draft moves in the period. However, we only want customer invoices and bills, MISC entries should not be included in the check. task-4627315 Forward-Port-Of: odoo/enterprise#84046
fix wrong formulas in different tables: - in "worst churn" under Value, starting the 7th line, the value used was "recurring_monthly" instead of "amount_signed" - in "worst contraction", the 10th line didn't use the list 4 like the rest of the table - in "top expansion", the 10th line didn't use the list 2 like the rest of the table Task: 4711532 Forward-Port-Of: odoo/enterprise#84242 Forward-Port-Of: odoo/enterprise#83019
Original PR description
fix wrong formulas in different tables: - in "worst churn" under Value, starting the 7th line, the value used was "recurring_monthly" instead of "amount_signed" - in "worst contraction", the 10th line didn't use the list 4 like the rest of the table - in "top expansion", the 10th line didn't use the list 2 like the rest of the table Task: 4711532 Forward-Port-Of: odoo/enterprise#84242 Forward-Port-Of: odoo/enterprise#83019
This PR updates the chevron icons with the OI version to remain consistent with the frontend design. task-4720641 Requires: - https://github.com/odoo/odoo/pull/205691 | Before | After | |--------|--------| |  |  | Forward-Port-Of: odoo/ente
Original PR description
This PR updates the chevron icons with the OI version to remain consistent with the frontend design. task-4720641 Requires: - https://github.com/odoo/odoo/pull/205691 | Before | After | |--------|--------| |  |  | Forward-Port-Of: odoo/enterprise#83293
Forward-Port-Of: odoo/enterprise#84237
Original PR description
Forward-Port-Of: odoo/enterprise#84237
Forward-Port-Of: odoo/enterprise#84038 Forward-Port-Of: odoo/enterprise#83992
Original PR description
Forward-Port-Of: odoo/enterprise#84038 Forward-Port-Of: odoo/enterprise#83992
This is illegal. https://runbot.odoo.com/odoo/error/161658 Forward-Port-Of: odoo/enterprise#84270
Original PR description
This is illegal. https://runbot.odoo.com/odoo/error/161658 Forward-Port-Of: odoo/enterprise#84270
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to
Original PR description
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce:…
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to be send on zebra printer * Create a sale order, using fedex international as shipping * Confirm the SO * Select the delivery * Duplicate the delivery * Validate both deliveries delivery > Observation: I have 4 jobs send for printing instead of 2 Why the fix: ------------ Actually the issue has the same explanation as this commit https://github.com/odoo/enterprise/commit/34267c4fa8c9aaa7c0216de13111a81fb53a67f1 as the IoT overrides `message_post` to send printing jobs each time a message is posted in the chatter. https://github.com/odoo/enterprise/blob/8075101192fb81a78f2a984cf2adf67fc77c0194/delivery_iot/models/stock_picking.py#L30-L46 opw-4526013 Forward-Port-Of: odoo/enterprise#82091
### Steps to reproduce: - Accounting dashboard - Click on the three dots of the "Bank" card - Click "import file" - Try importing a CAMT file with the namespace "camt" - Traceback Other issue: - Try importing a CAMT file with a custom Code in `ns:Domn/ns:Cd` (example: "IC1") - Traceback ### Cause: Namespaces can be used in CAMT files but the way Odoo handled them was incorrect. We were creating a dictionary using `root.nsmap`. It only worked when the file didn't have a namespace ke
Original PR description
### Steps to reproduce: - Accounting dashboard - Click on the three dots of the "Bank" card - Click "import file" - Try importing a CAMT file with the namespace "camt" - Traceback Other issue: - Try…
### Steps to reproduce: - Accounting dashboard - Click on the three dots of the "Bank" card - Click "import file" - Try importing a CAMT file with the namespace "camt" - Traceback Other issue: - Try importing a CAMT file with a custom Code in `ns:Domn/ns:Cd` (example: "IC1") - Traceback ### Cause: Namespaces can be used in CAMT files but the way Odoo handled them was incorrect. We were creating a dictionary using `root.nsmap`. It only worked when the file didn't have a namespace key because if the key was different from 'ns' the `findall` didn't work. Second issue: Some banks use their own codes in the CAMT files. The specification has numerous codes which Odoo added in a dictionary, and it reads from this dictionary to get a description. When there is a custom code, Odoo tries to read a key which doesn't exist explaining the traceback. ### Solution: - Change the way namespace is computed using the tag. - If the code is not in the dictionary, we take the custom code. opw-4553152 Forward-Port-Of: odoo/enterprise#82888
- Set default `filter_account_type` to 'receivable' in follow-up report view for more relevant results. - Update the selection of default journal types to 'sale', 'bank' and 'cash' for follow-up reports. opw-[4724675](https://www.odoo.com/odoo/project/967/tasks/4724675), [4735031](https://www.odoo.com/odoo/project/967/tasks/4735031) Forward-Port-Of: odoo/enterprise#84214 Forward-Port-Of: odoo/enterprise#83513
Original PR description
- Set default `filter_account_type` to 'receivable' in follow-up report view for more relevant results. - Update the selection of default journal types to 'sale', 'bank' and 'cash' for follow-up reports. opw-[4724675](https://www.odoo.com/odoo/project/967/tasks/4724675), [4735031](https://www.odoo.com/odoo/project/967/tasks/4735031) Forward-Port-Of: odoo/enterprise#84214 Forward-Port-Of: odoo/enterprise#83513
In this commit, --------------- When multi-domains are configured in Odoo, it will generate various webhooks at UrbanPiper, which leads to the creation of duplicate draft orders along with the original order. Added a check to restrict duplicate orders with the same delivery ID and the same delivery provider. task - 4727174 Forward-Port-Of: odoo/enterprise#84182 Forward-Port-Of: odoo/enterprise#83583
Original PR description
In this commit, --------------- When multi-domains are configured in Odoo, it will generate various webhooks at UrbanPiper, which leads to the creation of duplicate draft orders along with the original order. Added a check to restrict duplicate orders with the same delivery ID and the same delivery provider. task - 4727174 Forward-Port-Of: odoo/enterprise#84182 Forward-Port-Of: odoo/enterprise#83583
Interaction with the amazon marketplace models requires sales admin access. Furthermore, these accesses are also necessary during the `l10n_es_sale_amazon` tests (which use this setup), so adding then removing the group for the setup or locally using `sudo` doesn't seem like a great option. https://runbot.odoo.com/odoo/error/163666 Forward-Port-Of: odoo/enterprise#84262
Original PR description
Interaction with the amazon marketplace models requires sales admin access. Furthermore, these accesses are also necessary during the `l10n_es_sale_amazon` tests (which use this setup), so adding then removing the group for the setup or locally using `sudo` doesn't seem like a great option. https://runbot.odoo.com/odoo/error/163666 Forward-Port-Of: odoo/enterprise#84262
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation d
Original PR description
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp…
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation duplicate key value violates unique constraint "discuss_channel_member_partner_unique" DETAIL: Key (channel_id, partner_id)=(84, 175) already exists. ``` https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L250 At lines [1] and [2], the same partner(s) (e.g., Mitchell Admin) are added to ``partners_to_notify`` multiple times. Channel members should be unique. So, when it tries to create ``channel_member_ids`` with same partners, It will lead to the above traceback. 1- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L219 2- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L249 sentry-6252537579 Forward-Port-Of: odoo/enterprise#83908
current implementation of `_get_linked_record_action` searches in `ir.actions.act_window` model to fetch data to create action for `Back button`, a user might not have access to the this model which comes from "Settings/Administration" group, this leads to Access Error steps to reproduce: 1. install sign and sales module 2. login with demo user 3. create a sign template 4. open a sale order and request a sign 5. sign the document 6. Access error (though the document is signed properly)
Original PR description
current implementation of `_get_linked_record_action` searches in `ir.actions.act_window` model to fetch data to create action for `Back button`, a user might not have access to the this model which comes from "Settings/Administration" group, this leads to Access Error steps to reproduce: 1. install sign and sales module 2. login with demo user 3. create a sign template 4. open a sale order and request a sign 5. sign the document 6. Access error (though the document is signed properly) [opw-4575288](https://www.odoo.com/odoo/project/49/tasks/4575288) Forward-Port-Of: odoo/enterprise#83138
This is a fix for a bug that happens from time to time. It was reported more than once that another user was viewed as a caller instead of the actual caller. This happened because when someone calls from a local number, they have a `0` at the beginning of their number. For that case, we use a wildcard that matches anything that the phone number is a suffix to. So, it happened that it matched more than one number when the calling local number is a suffix to more than one international number.
Original PR description
This is a fix for a bug that happens from time to time. It was reported more than once that another user was viewed as a caller instead of the actual caller. This happened because when someone calls from a local number, they have a `0` at the beginning of their number. For that case, we use a wildcard that matches anything that the phone number is a suffix to. So, it happened that it matched more than one number when the calling local number is a suffix to more than one international number. Then, the code just picks the first one randomly, which may be incorrect. This commit fixes this bug by removing the logic of using a wildcard when the call is made through a local number. Instead, we use an exact match. Task-4707543 Forward-Port-Of: odoo/enterprise#84129
When submitting message templates to the WhatsApp API, the request could occasionally time out before receiving a response. This resulted in templates being created on Facebook's side, but not registered in Odoo, as the template ID assigned by Facebook was never received. Since template names must be unique, resubmitting the same template fails, leaving the systems out of sync. This commit increases the request timeout to (10s connect, 30s read) to reduce the chance of timeouts. opw-470
Original PR description
When submitting message templates to the WhatsApp API, the request could occasionally time out before receiving a response. This resulted in templates being created on Facebook's side, but not registered in Odoo, as the template ID assigned by Facebook was never received. Since template names must be unique, resubmitting the same template fails, leaving the systems out of sync. This commit increases the request timeout to (10s connect, 30s read) to reduce the chance of timeouts. opw-4706852 opw-4720635 Forward-Port-Of: odoo/enterprise#84209 Forward-Port-Of: odoo/enterprise#83581
9 changes
Enhancements to existing features
Product images sent to UrbanPiper are now converted to a more compatible format, reducing the chance of missing or broken menu images on connected delivery platforms. Tax code formatting for Swiggy and Zomato has also been corrected, helping orders and menu data carry the right tax information.
Original PR description
*: pos_urban_piper_swiggy, pos_urban_piper_zomato In this commit: === - Added _get_jpeg_datas method to convert WebP images to JPEG using QWeb for better compatibility with UrbanPiper. - Updated _get_public_image_url to use the new JPEG conversion logic and improve attachment handling. - Removed convert_to_webp image option from product form view to ensure JPEG usage. - Corrected tax code generation logic for Swiggy and Zomato to avoid incorrect string interpolation.
Resolved issues and error corrections
Belgian payroll declarations now support the updated Dimona V2 requirements. This helps companies remain compliant when submitting employee contract information to the Belgian authorities.
Printed payslips now respect the payslip structure setting for worked day lines. When worked day lines are disabled on the payslip form, the printed report no longer shows that table, avoiding confusion for employees and payroll teams.
Original PR description
- If the payslip sturct has `use_worked_day_lines = False` the printed payslip shoud not have worked_days_table Task: 4720429
Salary attachments, such as garnishments or deductions, are now applied only when the employee's payslip uses the appropriate input-based salary structure. This prevents incorrect payroll calculations in cases where a different salary structure is used, helping ensure employees are paid accurately.
Original PR description
task-4751862
Customer statement PDFs sent for multiple partners now use the correct company information when generated in the background. This prevents wrong addresses, footers, and other company details from appearing on statements in multi-company setups.
Original PR description
### Steps to reproduce: - Accounting > Reporting > Partner Ledger - Select multiple partners - Select "Customer Statements" as report - Click "Send" - Go to the one of the partner in question and open the generated PDF - The address is not the one of the company, the footer doesn't show the right company, etc ### Cause: When sending to multiple partners, the action is dispatched with cron so a new `env` is created. This `env` has all companies active and the first one as main company. So in the end the wrong company is used to generate the report. ### Solution: In the cron when calling `_process_send_and_print` we give `report.with_company(company)` to make sure that the value the report will us are the one from the correct company. Also revert the small [fix](https://github.com/odoo/enterprise/pull/82320/files) that was made before, which is no longer needed. opw-4635283
Miscellaneous changes
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong asset bundle. It's now removed from `assets_backend` and added to `assets_web_dark` to fix the issue. - **Focus Issue When Using Keyboard** When using the keyboard to move around the spreadsheet, opening a comment popup would focus the composer, stopping navigation. The composer now
Original PR description
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong…
## Description This PR fixes several issues related to comments in spreadsheet cells: - **Dark Mode Styling** The comment styles were broken in dark mode because the dark SCSS file was in the wrong asset bundle. It's now removed from `assets_backend` and added to `assets_web_dark` to fix the issue. - **Focus Issue When Using Keyboard** When using the keyboard to move around the spreadsheet, opening a comment popup would focus the composer, stopping navigation. The composer now doesn’t take focus, so keyboard navigation keeps working smoothly. - **Upload Button & Error Fixes** - The upload button was showing for spreadsheet cell comments but didn’t work. It’s now hidden. - There was also an error when editing a comment because `this.thread` wasn’t always available. Now it falls back to `this.message?.thread` when editing the message. - **Popover Visibility Fix** When posting the first comment and hovering over it, the action buttons (edit, favorite, delete) were partly cut off. This is now fixed by adding some padding to the thread style.  **Task**: [4708400](https://www.odoo.com/odoo/project/2328/tasks/4708400) Forward-Port-Of: odoo/enterprise#83410
…terms Steps to reproduce: - With an ES company setup - Create 1 invoice to an EU partner with the payment term "30% Now, Balance 60 Days" - Make sure Mod349 Invoice Type is set - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Amount shown on lines "Total amount of intra-community operations" and "E. Intra-community sales" is doubled. This occurs because each installment of the payment terms will be a payment term line, an
Original PR description
…terms Steps to reproduce: - With an ES company setup - Create 1 invoice to an EU partner with the payment term "30% Now, Balance 60 Days" - Make sure Mod349 Invoice Type is set - Go to Accounting / Reporting / Statement Reports / Tax Report - Select Tax Report (Mod 349) (ES) Issue: Amount shown on lines "Total amount of intra-community operations" and "E. Intra-community sales" is doubled. This occurs because each installment of the payment terms will be a payment term line, and the query retrieving values to compose MOD349 will take the whole move amount for each payment term line. opw-4637439 Forward-Port-Of: odoo/enterprise#83841 Forward-Port-Of: odoo/enterprise#82435
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to
Original PR description
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce:…
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to be send on zebra printer * Create a sale order, using fedex international as shipping * Confirm the SO * Select the delivery * Duplicate the delivery * Validate both deliveries delivery > Observation: I have 4 jobs send for printing instead of 2 Why the fix: ------------ Actually the issue has the same explanation as this commit https://github.com/odoo/enterprise/commit/34267c4fa8c9aaa7c0216de13111a81fb53a67f1 as the IoT overrides `message_post` to send printing jobs each time a message is posted in the chatter. https://github.com/odoo/enterprise/blob/8075101192fb81a78f2a984cf2adf67fc77c0194/delivery_iot/models/stock_picking.py#L30-L46 opw-4526013 Forward-Port-Of: odoo/enterprise#82091
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation d
Original PR description
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp…
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation duplicate key value violates unique constraint "discuss_channel_member_partner_unique" DETAIL: Key (channel_id, partner_id)=(84, 175) already exists. ``` https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L250 At lines [1] and [2], the same partner(s) (e.g., Mitchell Admin) are added to ``partners_to_notify`` multiple times. Channel members should be unique. So, when it tries to create ``channel_member_ids`` with same partners, It will lead to the above traceback. 1- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L219 2- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L249 sentry-6252537579 Forward-Port-Of: odoo/enterprise#83908