Thursday, October 17, 2024
26 changes · saas-17.2
Resolved issues and error corrections
Adds test coverage to confirm dropship orders are correctly recognized in inter-company sales and purchase flows. This helps reduce the risk of incorrect handling when companies sell and fulfill orders across related entities.
Original PR description
Following the changes made in the community side in odoo/odoo#183190, adapts the tests to check that the dropships are properly considered as dropships in inter-company transactions.
Miscellaneous changes
This commit addresses the issue of applying incorrect exchange rates for foreign currency transactions. Previously, we were using the rate from the last closing date instead of the rate applicable to the transaction day. Moving forward, the correct exchange rate will be used based on the day to which the quote applies, as outlined in the official guidelines for foreign currency operations by the Dirección General Impositiva (DGI). For reference: https://www.gub.uy/direccion-general-impositiva/
Original PR description
This commit addresses the issue of applying incorrect exchange rates for foreign currency transactions. Previously, we were using the rate from the last closing date instead of the rate applicable to the transaction day. Moving forward, the correct exchange rate will be used based on the day to which the quote applies, as outlined in the official guidelines for foreign currency operations by the Dirección General Impositiva (DGI). For reference: https://www.gub.uy/direccion-general-impositiva/comunicacion/publicaciones/operaciones-moneda-extranjera. latam-task: 1264 adhoc-side-task: 43762 Forward-Port-Of: odoo/enterprise#70335
When doing a groupby on a non-relational field (e.g. a char), if the field contains NULL values in DB, they appear as `None` in the keys of the `group_lines_by_keys` dict. If the comparison operator is not implemented between the field type and `NoneType`, `sorted` will fail with a traceback. Solution: sort on keys `(k is None, k)`. if k is None, then `k is None = True`. Because `True > False`, these values are pushed to the end by the sorting. task-none Forward-Port-Of: odoo/enterpri
Original PR description
When doing a groupby on a non-relational field (e.g. a char), if the field contains NULL values in DB, they appear as `None` in the keys of the `group_lines_by_keys` dict. If the comparison operator is not implemented between the field type and `NoneType`, `sorted` will fail with a traceback. Solution: sort on keys `(k is None, k)`. if k is None, then `k is None = True`. Because `True > False`, these values are pushed to the end by the sorting. task-none Forward-Port-Of: odoo/enterprise#72008
Before this commit, when a user doesn't have any hr right, he can't see employee's picture. With this commit, this issue is fixed and the user can access to the public employee form when he clicks on this picture. And "mark as done" option in three dot menu is invisible if the goal is already done. task-4240631 Forward-Port-Of: odoo/enterprise#71459
Original PR description
Before this commit, when a user doesn't have any hr right, he can't see employee's picture. With this commit, this issue is fixed and the user can access to the public employee form when he clicks on this picture. And "mark as done" option in three dot menu is invisible if the goal is already done. task-4240631 Forward-Port-Of: odoo/enterprise#71459
With this commit, the user will not have to wait for the acknowledge message coming through the websocket to process it, it will be processed directly after the message is sent, if the message is accepted server-side. With this commit, we are now robust to the case the websocket connection is dropped **and** the user is alone in the spreadsheet. Task: 4243943 Forward-Port-Of: odoo/enterprise#71981 Forward-Port-Of: odoo/enterprise#71782
Original PR description
With this commit, the user will not have to wait for the acknowledge message coming through the websocket to process it, it will be processed directly after the message is sent, if the message is accepted server-side. With this commit, we are now robust to the case the websocket connection is dropped **and** the user is alone in the spreadsheet. Task: 4243943 Forward-Port-Of: odoo/enterprise#71981 Forward-Port-Of: odoo/enterprise#71782
**Steps to reproduce:** - Create a working calendar 8:00 - 12:00 13:00 - 15:00 - Set in employee and company, as you mentioned everywhere. - The create a shift template 11 :00 - 15:00 (3 hrs) - Now create a planning slot with this shift template. - Expected start date - End date 11:00 - 15:00 - Actual start - end 11:00 - 14:00 **Current behavior before PR:** The end time is not calculated correctly if we have working calendar because we just add the duration to the start time wit
Original PR description
**Steps to reproduce:** - Create a working calendar 8:00 - 12:00 13:00 - 15:00 - Set in employee and company, as you mentioned everywhere. - The create a shift template 11 :00 - 15:00 (3 hrs) - Now create a planning slot with this shift template. - Expected start date - End date 11:00 - 15:00 - Actual start - end 11:00 - 14:00 **Current behavior before PR:** The end time is not calculated correctly if we have working calendar because we just add the duration to the start time without taking into consideration that there might be a break hour in the middle of the duration. **Desired behavior after PR is merged:** We are now considering the employee resource calendar in our calculation for the time of the slot. opw-3890629 Forward-Port-Of: odoo/enterprise#71914 Forward-Port-Of: odoo/enterprise#63002
There are currently these issues in the bank reconcilation report 1. There may be a traceback due to a division by 0 error 2. The residual amounts are not correctly computed in the report. It always displays the full amount; even if the move is partly "reconciled" already. 3. Duplicate entries can appear. All issues are solved by rewriting the generation logic a bit. Issue (1) i.e. happens due to move lines with a 0 balance in the move associated with the bank statement (line). All
Original PR description
There are currently these issues in the bank reconcilation report 1. There may be a traceback due to a division by 0 error 2. The residual amounts are not correctly computed in the report. It always…
There are currently these issues in the bank reconcilation report 1. There may be a traceback due to a division by 0 error 2. The residual amounts are not correctly computed in the report. It always displays the full amount; even if the move is partly "reconciled" already. 3. Duplicate entries can appear. All issues are solved by rewriting the generation logic a bit. Issue (1) i.e. happens due to move lines with a 0 balance in the move associated with the bank statement (line). All 3 issues can happen due to the way the entries in the report are generated: Consider a single bank statement (line) / its associated "bank move". To generate the line the report we join the bank statement line and bank move to each line of the bank move (except the liquidity line). The report groups by move line id. This generates 1 row in the report per move line (except the liquidity line) of the bank move. This directly causes issue (3). It also causes issue (2) due to the following: The reason we join all the move lines in the first place is to compute the unreconciled amount of the bank move. (By summing amounts on the move lines). But when generating a single row of the report we only have the information about 1 line (due to the grouping by id) and not the whole sum. Thus we do not have the full residual information. opw-4178134 (Issue 1) community PR: https://github.com/odoo/odoo/pull/182589 Forward-Port-Of: odoo/enterprise#71243
Problem: The `is_available` flag was used to check both product availability and conflicts with other rentals. However, the UI message was misleading, stating "Other rental(s) in conflict" even when the product was simply not available. Steps to reproduce: - Create a rental product with a quantity of 0. - Add a rental order for that product. - In the Schedule Gantt view, hover over the order. - A warning appears stating "Other rental(s) in conflict," even though no other rentals exist
Original PR description
Problem: The `is_available` flag was used to check both product availability and conflicts with other rentals. However, the UI message was misleading, stating "Other rental(s) in conflict" even when the product was simply not available. Steps to reproduce: - Create a rental product with a quantity of 0. - Add a rental order for that product. - In the Schedule Gantt view, hover over the order. - A warning appears stating "Other rental(s) in conflict," even though no other rentals exist on the same date; the actual issue is that the product is not available. opw-4085496 Forward-Port-Of: odoo/enterprise#69783
Currently, an error was generated when the user tries to filter `Customer/Saleperson` in the subscription dashboard. error: `Invalid field sale.subscription.report.message_partner_ids in leaf ('message_partner_ids', 'in', [3])` This is because we have used fields 'message_partner_ids' and 'activity_user_id' to filter out records, but this field is not available in the model. This commit will fix the above issue by using fielels 'partner_id' and 'user_id' to fielter records. sentry-56
Original PR description
Currently, an error was generated when the user tries to filter `Customer/Saleperson` in the subscription dashboard.
error: `Invalid field sale.subscription.report.message_partner_ids in leaf ('message_partner_ids', 'in', [3])`
This is because we have used fields 'message_partner_ids' and 'activity_user_id' to filter out records, but this field is not available in the model.
This commit will fix the above issue by using fielels 'partner_id' and 'user_id' to fielter records.
sentry-5657224204
Forward-Port-Of: odoo/enterprise#71360Problem: In version 17.0, the `partner_id` doesnt exist, and instead, the correct field to use is `partner`. This mismatch causes a traceback when processing invoices in the PoS. Steps to Reproduce: - Install the Chilean localization module (`l10n_cl`). - Go to PoS > Order > Invoice > Pay. - A traceback appears in the console due to the incorrect field reference. opw-4204528 Forward-Port-Of: odoo/enterprise#71737
Original PR description
Problem: In version 17.0, the `partner_id` doesnt exist, and instead, the correct field to use is `partner`. This mismatch causes a traceback when processing invoices in the PoS. Steps to Reproduce: - Install the Chilean localization module (`l10n_cl`). - Go to PoS > Order > Invoice > Pay. - A traceback appears in the console due to the incorrect field reference. opw-4204528 Forward-Port-Of: odoo/enterprise#71737
Before this commit, the data given to the spreadsheet init callback in the case of inserting a pivot view was not used. This could lead to an error if the data was too big to be stored in the browser's session storage. This commit removes the useless data given to the spreadsheet init. Note that it's not necessary to write a new test for this, as the existing tests already cover this case. Task: 4255049 Forward-Port-Of: odoo/enterprise#71847
Original PR description
Before this commit, the data given to the spreadsheet init callback in the case of inserting a pivot view was not used. This could lead to an error if the data was too big to be stored in the browser's session storage. This commit removes the useless data given to the spreadsheet init. Note that it's not necessary to write a new test for this, as the existing tests already cover this case. Task: 4255049 Forward-Port-Of: odoo/enterprise#71847
When reconciliing and invoice with a misc entry line, we display the amount currency of the total amount of the entry instead of the partial. Steps: - With USD company currency and EUR foreign currency - Make an invoice for 2000 EUR - Register a payment for 1000 EUR - Make a journal entry in USD, 3 credit lines 1000 USD each on the receivable account, for the invoice's partner - Come back to the invoice and reconcile it with two misc lines via the outstanding credit widget - O
Original PR description
When reconciliing and invoice with a misc entry line, we display the amount currency of the total amount of the entry instead of the partial. Steps: - With USD company currency and EUR foreign currency - Make an invoice for 2000 EUR - Register a payment for 1000 EUR - Make a journal entry in USD, 3 credit lines 1000 USD each on the receivable account, for the invoice's partner - Come back to the invoice and reconcile it with two misc lines via the outstanding credit widget - Open the payment and print the payment receipt -> The Amount Currency column of the misc entry lines show -$3000 instead of $-1000 and $-528.89 (depending of the current rate) With this commit we take the debit or credit amount currency from the partial instead of the total amount of the entry. opw-4089534 Forward-Port-Of: odoo/odoo#183819 Forward-Port-Of: odoo/odoo#180189
Versions -------- - 17.0+ Steps ----- 1. Have an SO selling a timesheet-based service; 2. have at least some hours delivered via timesheets; 3. click on "Create Invoice"; 4. select a date for "Timesheets Period". Issue ----- It first shows a datepicker for only the start date, only after closing it can you select a second date. Cause ----- The `daterange` widget doesn't actually default to a range, unless the date field is marked as required. As seen in the `isRange` funct
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have an SO selling a timesheet-based service; 2. have at least some hours delivered via timesheets; 3. click on "Create Invoice"; 4. select a date for "Timesheets Period". Issue ----- It first shows a datepicker for only the start date, only after closing it can you select a second date. Cause ----- The `daterange` widget doesn't actually default to a range, unless the date field is marked as required. As seen in the `isRange` function, it opens a range picker when there are two values present, the field is required, or the `alwaysRange` property is `true`: https://github.com/odoo/odoo/blob/39029710bbce55889c6b951fc423c1254e05ff22/addons/web/static/src/views/fields/datetime/datetime_field.js#L215-L224 Solution -------- Force the range picker on the `daterange` widget by setting the `always_range` option. opw-4049959 Forward-Port-Of: odoo/odoo#181079
*: test_website Since [1], the code responsible for resetting broken view failed to consider that during a "hard" reset, the 'arch_updated' field should be set to False. Steps to reproduce (on a local server): - Activate the developer mode - Navigate to Website and click on "Go to Website" - Click on the menu "Pages" > "Manage Pages" - At the /contactus line, click on the "bug" button to access the view - Click on "Edit" to be able to change the architecture - Add something that
Original PR description
*: test_website Since [1], the code responsible for resetting broken view failed to consider that during a "hard" reset, the 'arch_updated' field should be set to False. Steps to reproduce (on a…
*: test_website Since [1], the code responsible for resetting broken view failed to consider that during a "hard" reset, the 'arch_updated' field should be set to False. Steps to reproduce (on a local server): - Activate the developer mode - Navigate to Website and click on "Go to Website" - Click on the menu "Pages" > "Manage Pages" - At the /contactus line, click on the "bug" button to access the view - Click on "Edit" to be able to change the architecture - Add something that breaks the view in the template (i.e : ```<p t-field="no_field.exists"></p>```) - Click on "Save" and after "Go to Page Manager" - Click on the /contactus url link - An internal server error page appears with the possibility to restore the previous version of the view (soft reset) or to reset to initial version (hard reset). Click on "Hard Reset" - With your DB manager, search in the table ir.ui.view, the record with the key website.contactus. Observe that the field arch_updated is still True while the view is reset and shouldn't be in an updated state. This commit ensures consistent updating of this field. A "Hard" reset of a broken view will remove its previous architecture used for "Soft" reset, since there is no real usage where a "Previous" reset is needed after a "Hard" one. [1]: https://github.com/odoo/odoo/commit/479585140caca9fdc758709f043da500297e8046 task-3743850 Forward-Port-Of: odoo/odoo#164929
Before this commit, logging into the PoS with a user not present in another session and then navigating back to the backend to open a different session resulted in an error due to the missing employee. This commit resolves the issue by incorporating the confid ID when saving employee ID in sessionStorage, ensuring employee information is accurately maintained. opw-4255768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#1
Original PR description
Before this commit, logging into the PoS with a user not present in another session and then navigating back to the backend to open a different session resulted in an error due to the missing employee. This commit resolves the issue by incorporating the confid ID when saving employee ID in sessionStorage, ensuring employee information is accurately maintained. opw-4255768 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183566
When changing the move associated with the bank statement line we i.e. update the `amount_currency` field on the bank statement line. But currently we just set it to the `amount_currency` value of the suspense line. This may not be correct in case we also have other lines on the move: We should have (liquidity = suspense + other) and the `amount_currency` on the bank statement line expresses the liquidity (total amount) and not the suspense (residual amount). After this commit we also include t
Original PR description
When changing the move associated with the bank statement line we i.e. update the `amount_currency` field on the bank statement line. But currently we just set it to the `amount_currency` value of the suspense line. This may not be correct in case we also have other lines on the move: We should have (liquidity = suspense + other) and the `amount_currency` on the bank statement line expresses the liquidity (total amount) and not the suspense (residual amount). After this commit we also include the other lines in the computation. (Note: We cannot just use the liquidity line It is in journal currency / company currency but the `amount_currency` of the bank statement line may be in a foreign currency that is neither the company nor the journal currency.) enterprise PR which needs the change: https://github.com/odoo/enterprise/pull/71243 Forward-Port-Of: odoo/odoo#182589
Reproduce --- - -i hr_holidays - open two secure user sessions - 1st user session: set to handle notifications in odoo - 2nd user session: tag 1st user in the chatter of a approved time off - 1st user session: receives notification just fine - 2nd user session: Refuse opened time off - 1st user session: Traceback opw-4138108 Forward-Port-Of: odoo/odoo#183759
Original PR description
Reproduce --- - -i hr_holidays - open two secure user sessions - 1st user session: set to handle notifications in odoo - 2nd user session: tag 1st user in the chatter of a approved time off - 1st user session: receives notification just fine - 2nd user session: Refuse opened time off - 1st user session: Traceback opw-4138108 Forward-Port-Of: odoo/odoo#183759
Issue: ===== The cover template of the training theme template doesn't show in the sent email. Steps to reproduce the issue: ============================= - Create a new mailing with training template - Send a test email - Cover snippet missing Origin of the issue: ==================== While converting the template from bootstrap to table we expect to have `container` -> `row` -> `col` classes but the template was missing the `col` class opw-3944347 Forward-Port-Of: odoo/odoo#1
Original PR description
Issue: ===== The cover template of the training theme template doesn't show in the sent email. Steps to reproduce the issue: ============================= - Create a new mailing with training template - Send a test email - Cover snippet missing Origin of the issue: ==================== While converting the template from bootstrap to table we expect to have `container` -> `row` -> `col` classes but the template was missing the `col` class opw-3944347 Forward-Port-Of: odoo/odoo#183105
**Behaviour before PR:** - In chatgpt prompt dialog, `submitPrompt` method gets called twice when user presses `ctrl + enter` after writing something. As result chatgpt responds twice with same content. This happens because in `dialog.js` a hotkey service is active on `ctrl + enter` which is responsible to trigger a click event on submit button of dialog and `submitPrompt` gets called second time. - Moreover, if text-area is empty and user hits `enter` then an empty prompt is sent to chatGPT
Original PR description
**Behaviour before PR:** - In chatgpt prompt dialog, `submitPrompt` method gets called twice when user presses `ctrl + enter` after writing something. As result chatgpt responds twice with same content. This happens because in `dialog.js` a hotkey service is active on `ctrl + enter` which is responsible to trigger a click event on submit button of dialog and `submitPrompt` gets called second time. - Moreover, if text-area is empty and user hits `enter` then an empty prompt is sent to chatGPT resulting in a meaningless response. **Behaviour after PR:** - Now, `submitPrompt` method gets called once on `ctrl + enter.` - If text-area is empty then pressing `enter` will not submit prompt. task-4207108 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#181334
Steps to reproduce ================== - Go to CRM - Open a lead - Open studio - Add a new notebook page - Add a many2many field - Select the task model - Save and exit studio - Switch to the new notebook page - Add a new task => Record does not exist or has been deleted. Cause of the issue ================== The CrmFormRecord is also used for the Many2Many popup. project.task also has a stage_id field, checkRainbowmanMessage is then called, but with the id of the task ht
Original PR description
Steps to reproduce ================== - Go to CRM - Open a lead - Open studio - Add a new notebook page - Add a many2many field - Select the task model - Save and exit studio - Switch to the new notebook page - Add a new task => Record does not exist or has been deleted. Cause of the issue ================== The CrmFormRecord is also used for the Many2Many popup. project.task also has a stage_id field, checkRainbowmanMessage is then called, but with the id of the task https://github.com/odoo/odoo/blob/54d6a19444bfa4f01d03117e4542a5244f274429/addons/crm/static/src/views/crm_form/crm_form.js#L44-L51 Solution ======== It makes no sense to do this if we are not acting on a crm.lead record => We check the resModel before proceeding opw-4101752 Forward-Port-Of: odoo/odoo#183375
The LATERAL was destroying perfs to compute the account roots. It took more than 7 sec on a db that only had 660k move lines. Replaced it by a simple JOIN which reduced it to 1.2 sec. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170689
Original PR description
The LATERAL was destroying perfs to compute the account roots. It took more than 7 sec on a db that only had 660k move lines. Replaced it by a simple JOIN which reduced it to 1.2 sec. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#170689
Commands that stop and start the LED service in `posbox_update.sh` were removed in commit `bf96199`, however these were necessary to prevent the filesystem getting stuck in write-mode and potentially getting corrupted (see #54339). The fix is to restore these commands in `posbox_update.sh`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183868
Original PR description
Commands that stop and start the LED service in `posbox_update.sh` were removed in commit `bf96199`, however these were necessary to prevent the filesystem getting stuck in write-mode and potentially getting corrupted (see #54339). The fix is to restore these commands in `posbox_update.sh`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183868
Issue: ====== Going to next record in to do overrides the next record content with the older one. Steps to reproduce the issue: ============================== - Go to do and create 2 to-dos - Add an image using copy paste - Go to next record using the pager - The record has the same content as the first one Origin of the issue: ==================== The main reason behind the issue is a race condition. Basically there are 2 flows being executed in parallel: - First flow is from `o
Original PR description
Issue: ====== Going to next record in to do overrides the next record content with the older one. Steps to reproduce the issue: ============================== - Go to do and create 2 to-dos - Add an…
Issue: ====== Going to next record in to do overrides the next record content with the older one. Steps to reproduce the issue: ============================== - Go to do and create 2 to-dos - Add an image using copy paste - Go to next record using the pager - The record has the same content as the first one Origin of the issue: ==================== The main reason behind the issue is a race condition. Basically there are 2 flows being executed in parallel: - First flow is from `onWysiygBlur` which calls commit changes and save image changes. Since we have an image in the content, it will take longer to finish. the commit that was called now is fron emty content to the base64 image. - The scond flow comes from the pager update which finds the content dirty because its old content is the base64 image ans its new content is the image with the url so it will call commit changes itself and it will load the next id. - Currently we have the `_update` of the `commitChanges` from the `blur` event isn't done yet but we already changed the id of the record to the id of the new recod (comes fron pager). - Now when the `_update` of the old `blur` event is executed, it will update the body of the new record and not the old record. Solution: ========= If the html field is already saving sonething we wait for it first. so In our case, the commit changes of the paged will do nothing since it will wait for the one of the `blur` event and the editable after it will be not dirty. task-4082860 Forward-Port-Of: odoo/odoo#180759
revert commit 30c561b422d58d7622f7ee173fae2f8158a14657 because it broke existing optimization and users were unable to access the website instead the functionality was moved to `_get_pl_partner_order()` because it's a cached method and the extra search added by the `.sorted()` wouldn't be an issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183805
Original PR description
revert commit 30c561b422d58d7622f7ee173fae2f8158a14657 because it broke existing optimization and users were unable to access the website instead the functionality was moved to `_get_pl_partner_order()` because it's a cached method and the extra search added by the `.sorted()` wouldn't be an issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183805
Prior to this commit, when a URL started with an underscore (_) and didn’t match any existing controller, Odoo attempted to resolve the first part of the URL as a language code. If the first segment started with an underscore and was not a valid language code, Odoo would split at the underscore and attempt to match the empty string (''), causing it to default to the first available language. For example, accessing https://www.odoo.com/__NULL__ on odoo.com would result in the language being
Original PR description
Prior to this commit, when a URL started with an underscore (_) and didn’t match any existing controller, Odoo attempted to resolve the first part of the URL as a language code.
If the first segment started with an underscore and was not a valid language code, Odoo would split at the underscore and attempt to match the empty string (''), causing it to default to the first available language.
For example, accessing https://www.odoo.com/__NULL__ on odoo.com would result in the language being incorrectly set to Arabic, and a redirection to https://www.odoo.com/ar.
Forward-Port-Of: odoo/odoo#182982Currently, the cron job "Base Action Rule: check and execute" has its frequency set dynamically based on the shortest delay of time based automated actions. Nevertheless, when a time based automated action has a negative delay, the frequency of the cron job is set to shortest frequency. This causes load on the server more than needed. This can be solved by adding an absolute and treating the negative delay like the a normal delay which results in more representative frequency.
Original PR description
Currently, the cron job "Base Action Rule: check and execute" has its frequency set dynamically based on the shortest delay of time based automated actions. Nevertheless, when a time based automated action has a negative delay, the frequency of the cron job is set to shortest frequency. This causes load on the server more than needed. This can be solved by adding an absolute and treating the negative delay like the a normal delay which results in more representative frequency. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#183182 Forward-Port-Of: odoo/odoo#182799