Friday, April 11, 2025
40 changes · saas-18.2
Resolved issues and error corrections
This fix ensures that upgrade preparation steps are also run when newly installed modules are forced through an upgrade flow. It helps prevent incomplete upgrades and reduces the risk of setup issues for fresh modules during system maintenance.
Original PR description
in odoo#189000, ``_force_upgrade_of_fresh_module`` was added for upgrade-util to force upgrade scripts of new modules. But the `pre` scripts were still ignored for ``new_install`` modules. This commit fixes the bug. 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
This fix ensures searches involving user group membership handle all supported conditions correctly. It helps administrators and business workflows get accurate results when filtering users or groups by inherited access groups.
Original PR description
Handle the `any` and `not any` operators on `all_implied_by_ids` field.
Date fields in Sign documents now show a placeholder format based on the company's language settings instead of a fixed format. This helps users see the expected date format for their location and reduces mistakes when preparing documents for signature.
Original PR description
Before this commit, When adding a date sign item, the date format in the placeholder might mismatch the company's location date format since it is a static value. After this commit, the placeholder value is dynamic, it is computed initially from the company lang date_format. task-id: 4607440
Miscellaneous changes
Problem: Images used via `background-image` in Email Marketing disappear upon email delivery. This is due to the CSS sanitization filter removing the `background-image` property. Solution: Add `background-image` related properties to`_style_whitelist`: - background-image - background-position - background-size - background-repeat - background-origin Steps to reproduce: 1. Add a "Header" > "Cover" block in an Email Marketing template. 2. Set a background image on the block. 3. Sen
Original PR description
Problem: Images used via `background-image` in Email Marketing disappear upon email delivery. This is due to the CSS sanitization filter removing the `background-image` property. Solution: Add `background-image` related properties to`_style_whitelist`: - background-image - background-position - background-size - background-repeat - background-origin Steps to reproduce: 1. Add a "Header" > "Cover" block in an Email Marketing template. 2. Set a background image on the block. 3. Send the email. 4. Observe that the background image does not appear in the received email. opw-4558819 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205554
**Steps to reproduce:** - Install Accounting - Go to Settings and configure document layout - Select Folder as layout - Create an invoice with lot of products (~20) that would be printed on 2 pages - Duplicate the created invoice - From the list view, select both invoices - Click on "Send" button - Go to "Settings / Technical / Automation / Scheduled Actions" - Open "Send invoices automatically" action - Click on "Run Manually" **Issue:** A KeyError is raised in "_prepare_invoice_p
Original PR description
**Steps to reproduce:** - Install Accounting - Go to Settings and configure document layout - Select Folder as layout - Create an invoice with lot of products (~20) that would be printed on 2 pages -…
**Steps to reproduce:** - Install Accounting - Go to Settings and configure document layout - Select Folder as layout - Create an invoice with lot of products (~20) that would be printed on 2 pages - Duplicate the created invoice - From the list view, select both invoices - Click on "Send" button - Go to "Settings / Technical / Automation / Scheduled Actions" - Open "Send invoices automatically" action - Click on "Run Manually" **Issue:** A KeyError is raised in "_prepare_invoice_pdf_report" method from the following line: `'raw': content_by_id[invoice.id]` If the invoices have already been sent before clicking on "Run Manually", the traceback can be checked in the logs. **Cause:** Since this commit https://github.com/odoo/odoo/commit/0e73d3f1751495786eb2b18384ea39f4da18e3fb a unique call to "wkhtmltopdf" is made to generate one PDF for all the invoices. This PDF is then split in a dict having an entry for each invoice. When there is more pages than the number of invoices, we check the "outlines" generated by "wkhtmltopdf" to determine which pages are associated to which invoice. "wkhtmltopdf" generates an "outline" for each heading tag (i.e. h1, h2,...). As each layout is only using a heading tag (i.e. h2) for the document title, we can assume that each page between 2 heading tags and therefore outlines belongs to the same invoice. The issue with the Folder layout is that the document title is defined in the header of the layout and not in the body as it is done for the other layouts. But "wkhtmltopdf" only generates "outines" for heading tags in the body, ignoring those defined in the header. In that case, the PDF cannot be split due to the lack of outlines and the dict only contains one element (the whole PDF) with False as key, which raises the error when executing this code `content_by_id[invoice.id]`. **Solution:** 1) Instead of the KeyError, a UserError with a more useful message is raised instead. 2) A heading tag (h3) is added in the body of the Folder layout to allow "wkhtmltopdf" to generate the "outlines" from it. This heading also contains the document title. But in order to prevent having the document title displayed twice, these styles are applied to it: - "opacity: 0" to hide the tag. "display: none" and "visibility: hidden" don't work. No "outline" is generated if there are used. - "height: 0" to remove the space allocated to the hidden tag. This is a very hacky solution but without it, it is not possible to send multiple documents that have more than one page. opw-4592851 opw-4562932 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204158
### Steps to reproduce: *Happening in all LATAM localizations* - Install 'l10n_pe' and switch to a Peruvian company - In Accounting > Configuration > Journals duplicate "Customer Invoices" - In the new journal tick the option "Secure Posted Entries with Hash" - Create a new invoice with this journal, confirm - Duplicate this invoice and try to confirm - Cannot confirm ### Cause: When confirming an invoice with LATAM localization, the fields "sequence_number" and "sequence_prefix" are
Original PR description
### Steps to reproduce: *Happening in all LATAM localizations* - Install 'l10n_pe' and switch to a Peruvian company - In Accounting > Configuration > Journals duplicate "Customer Invoices" - In the…
### Steps to reproduce: *Happening in all LATAM localizations* - Install 'l10n_pe' and switch to a Peruvian company - In Accounting > Configuration > Journals duplicate "Customer Invoices" - In the new journal tick the option "Secure Posted Entries with Hash" - Create a new invoice with this journal, confirm - Duplicate this invoice and try to confirm - Cannot confirm ### Cause: When confirming an invoice with LATAM localization, the fields "sequence_number" and "sequence_prefix" are no longer populated. These fields are necessary with the hash option. During a previous series of commits, a call to `_compute_split_sequence` was removed: - [1st commit](https://github.com/odoo/odoo/commit/10565c6968a5d0f285f93c4bdc610350999a88e3) - [2nd commit](https://github.com/odoo/odoo/commit/658542e17dfe421b83bf610564042c8b643b3b78) - [3rd commit](https://github.com/odoo/odoo/commit/7f08a7ebbcc8fc856f961d7ca6f001ce69e8771c) This for some reason does not compute the fields for invoices in LATAM. ### Solution: Add the call to `_compute_split_sequence`. opw-4685796 Forward-Port-Of: odoo/odoo#205505
Analytic lines partner is not computed when changing the partner of the related move line. To solve this, we add the `move_line_id.partner_id` in the `depends` of the compute. To reproduce: - Create a journal entry - Set an analytic account on one of a line - Confirm journal entry - From the account move line list view, select the lines from the previous entry - Change the partner - Go to analytic reporting -> The partner on the analytic line has not been changed Ticket [link](
Original PR description
Analytic lines partner is not computed when changing the partner of the related move line. To solve this, we add the `move_line_id.partner_id` in the `depends` of the compute. To reproduce: - Create a journal entry - Set an analytic account on one of a line - Confirm journal entry - From the account move line list view, select the lines from the previous entry - Change the partner - Go to analytic reporting -> The partner on the analytic line has not been changed Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4626366) opw-4626366 Forward-Port-Of: odoo/odoo#205546 Forward-Port-Of: odoo/odoo#201512
Since https://github.com/odoo/odoo/pull/143233, when we group by a many2many, the `__domain` of the Falsy group for records that don't have any many2many values) is expressed with `[('many2many', 'not in', <other group values>)]`. We did this because the ORM bypasses the 'ir.rule' for checking this type of domain: `[('many2many', '=', False)]` and changing this semantic is impossible in stable (and even hard to change in master). Unfortunately, this fix is not correct when the read_group() li
Original PR description
Since https://github.com/odoo/odoo/pull/143233, when we group by a many2many, the `__domain` of the Falsy group for records that don't have any many2many values) is expressed with `[('many2many', 'not in', <other group values>)]`. We did this because the ORM bypasses the 'ir.rule' for checking this type of domain: `[('many2many', '=', False)]` and changing this semantic is impossible in stable (and even hard to change in master).
Unfortunately, this fix is not correct when the read_group() limit is reached. In fact, the right part of the domain doesn't contain ids of many2many, which are filtered out by the limit.
Instead, use `[('many2many', 'not any', [])]` as the domain for the False group. Note that this may decrease the performance of the generated search because it will have to check ir.rule in the comodel and will generate more complex queries.
opw-4577443
Forward-Port-Of: odoo/odoo#205278
Forward-Port-Of: odoo/odoo#205030Steps to reproduce: (This are for this specific case) 1. Get website_appointment_sale and a 2nd language for our website. 2. Make sure that for the appointment we select Allow Guests. 3. Now, we go to the website and go to the appointment, until we reach the "Add more details about you" page. 4. Here is when we have to try to modify the translation with editor. Issue: We're receiving an error as "Cannot read properties of null (reading '2')" which arises from the `trans` not being a
Original PR description
Steps to reproduce: (This are for this specific case) 1. Get website_appointment_sale and a 2nd language for our website. 2. Make sure that for the appointment we select Allow Guests. 3. Now, we go to the website and go to the appointment, until we reach the "Add more details about you" page. 4. Here is when we have to try to modify the translation with editor. Issue: We're receiving an error as "Cannot read properties of null (reading '2')" which arises from the `trans` not being appropiate due to the translation regex, which will cause the match to be null when calling it on this "defective" `trans`. Solution: The current solution will make the regex to better match anything in the translation, by modifying `(.*)` to ([\s\S]*?) we make sure that we're matching any character, including new lines. opw-4442038 Forward-Port-Of: odoo/odoo#204131 Forward-Port-Of: odoo/odoo#194416
The missing break was duplicating the file_data. For example, the PDF was there in PDF but also in binary. opw-4510745 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205328
Original PR description
The missing break was duplicating the file_data. For example, the PDF was there in PDF but also in binary. opw-4510745 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205328
Before this PR, the operator was not notified after being forwarded by a bot. This happened because the notification was posted as the operator. Messages are automatically marked as read when a user posts them. As a result, nothing in the UI indicated that the chat was new or required the operator's attention. This PR resolves the issue by posting the message as the chatbot. It both makes sense from a UX perspective (displaying something like "Bot invited the operator to the user") and ensure
Original PR description
Before this PR, the operator was not notified after being forwarded by a bot. This happened because the notification was posted as the operator. Messages are automatically marked as read when a user posts them. As a result, nothing in the UI indicated that the chat was new or required the operator's attention. This PR resolves the issue by posting the message as the chatbot. It both makes sense from a UX perspective (displaying something like "Bot invited the operator to the user") and ensures the chat is properly flagged for the operator. task-4689496 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#205562 Forward-Port-Of: odoo/odoo#205375
### Steps to reproduce: - Install l10n_it_stock_ddt and enable product packaging. - Create a storable product with a sale price of 1 and that can be packed by pack of 6. - Create and confirm an SO for 1 pack of 6. - Validate the delivery for 6 units. - Print the DO. #### > The price correspond to the price of 6 pack of 6. ### Cause of the issue: The `packaging` and product `uom` have been merged in 18.1. As such, the quantity used in the report template needs to be recomputed base
Original PR description
### Steps to reproduce: - Install l10n_it_stock_ddt and enable product packaging. - Create a storable product with a sale price of 1 and that can be packed by pack of 6. - Create and confirm an SO for 1 pack of 6. - Validate the delivery for 6 units. - Print the DO. #### > The price correspond to the price of 6 pack of 6. ### Cause of the issue: The `packaging` and product `uom` have been merged in 18.1. As such, the quantity used in the report template needs to be recomputed based on the uom conversion: https://github.com/odoo/odoo/blob/195e3fb3fbba355e40f55f4ef88ea9ae52545908/addons/l10n_it_stock_ddt/report/l10n_it_ddt_report.xml#L130-L131 opw-4683247 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204586
Issue ----- When in a branch company, products from the parent company are not visible in the catalog. Steps to reproduce ----- - Install "Sales" app - Go to Settings > Users & Companies > Companies - Create the "Main Company" Company - Add Branches to "Main Company" - Switch companies to "Main Company" - Create a product "A" and set the company to "Main Company" - Switch to one of the branch companies - Create a new Quotation -> The product is displayed from the dropdown li
Original PR description
Issue
-----
When in a branch company, products from the parent company are not visible in the catalog.
Steps to reproduce
-----
- Install "Sales" app
- Go to Settings > Users & Companies > Companies
- Create the "Main Company" Company
- Add Branches to "Main Company"
- Switch companies to "Main Company"
- Create a product "A" and set the company to "Main Company"
- Switch to one of the branch companies
- Create a new Quotation
-> The product is displayed from the dropdown list but not in the Catalog
Cause
-----
Branches have a different id from their parent company. The search domain only includes the current companies but not its' parents.
We can simply include the parent company in _get_product_catalog_domain (of the product_catalog_mixin class).
-----
Ticket:
opw-4472464
Forward-Port-Of: odoo/odoo#203902
Forward-Port-Of: odoo/odoo#197620Before this commit, selling an event in PoS would trigger the loading of all event registrations linked to the event. This was unnecessary and caused issues, as it also attempted to load the related PoS order lines, leading to potential errors. opw-4613669 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200010
Original PR description
Before this commit, selling an event in PoS would trigger the loading of all event registrations linked to the event. This was unnecessary and caused issues, as it also attempted to load the related PoS order lines, leading to potential errors. opw-4613669 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200010
### Description: The commit b15bdb6 introduces a bug causing the `account.move.line` to be broken. This is caused by the fact that rather than looping over the move_line_ids of one move, it does it on all of them, causing the moves to all have the same direction, even if the move lines have different directions. ### Fix: Changing the `self` to `record` should fix the issue. ### Reference: b15bdb65b11b3772c1d288b8b65e48f0cb221d24 Forward-Port-Of: odoo/odoo#205558
Original PR description
### Description: The commit b15bdb6 introduces a bug causing the `account.move.line` to be broken. This is caused by the fact that rather than looping over the move_line_ids of one move, it does it on all of them, causing the moves to all have the same direction, even if the move lines have different directions. ### Fix: Changing the `self` to `record` should fix the issue. ### Reference: b15bdb65b11b3772c1d288b8b65e48f0cb221d24 Forward-Port-Of: odoo/odoo#205558
Previously, the round-off amount was not being included in the E-Way Bill request when sending invoices from Odoo. This caused inconsistencies between the generated invoice and the data sent to the E-Way Bill portal. This commit ensures that the round-off amount is properly accounted for in the request, maintaining consistency between the invoice and the E-Way Bill data. opw-4708955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port
Original PR description
Previously, the round-off amount was not being included in the E-Way Bill request when sending invoices from Odoo. This caused inconsistencies between the generated invoice and the data sent to the E-Way Bill portal. This commit ensures that the round-off amount is properly accounted for in the request, maintaining consistency between the invoice and the E-Way Bill data. opw-4708955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205643 Forward-Port-Of: odoo/odoo#205522
Currently, an error occurs when opening a website cart if its `Payment method` record has been deleted. This results in preventing the user from accessing the cart. **Steps to produce:** - Install the `website_sale` module. - Navigate to `Website / Configuration / eCommerce / Payment Methods`. - Delete method `name: Payment method`. - Add the product to the cart and then open it. - Observe the error. **Error:** `ValueError: External ID not found in the system: payment.payment_method_
Original PR description
Currently, an error occurs when opening a website cart if its `Payment method` record has been deleted. This results in preventing the user from accessing the cart. **Steps to produce:** - Install…
Currently, an error occurs when opening a website cart if its `Payment method` record has been deleted. This results in preventing the user from accessing the cart. **Steps to produce:** - Install the `website_sale` module. - Navigate to `Website / Configuration / eCommerce / Payment Methods`. - Delete method `name: Payment method`. - Add the product to the cart and then open it. - Observe the error. **Error:** `ValueError: External ID not found in the system: payment.payment_method_unknown` The error occurs because the system attempts to access id of the payment method `payment.payment_method_unknown` at [1], but it is unavailable as the user has already deleted it. This commit adds validation to prevent deletion of the `payment_method_unknown`. [1] - https://github.com/odoo/odoo/blob/1c896c5da71b58b382269fe6cca556f4a61e4d5d/addons/website_sale/controllers/main.py#L1714 Sentry - 6177955401 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198728
Before this commit, and since the addition of the SFU fallback feature, it was possible that a peer was removed while being created or connected, this could lead to a race condition where we no longer need the peer but some negotiations are still being made. This commit fixes this issue by stopping the negotiation if the peer no longer exist when the promises are resolved. Another race condition could lead to receiving a track from the failed peer-to-peer connection (as tracks are gen
Original PR description
Before this commit, and since the addition of the SFU fallback feature, it was possible that a peer was removed while being created or connected, this could lead to a race condition where we no longer need the peer but some negotiations are still being made. This commit fixes this issue by stopping the negotiation if the peer no longer exist when the promises are resolved. Another race condition could lead to receiving a track from the failed peer-to-peer connection (as tracks are generated when transceiver are created, before we know if the connection is stable), while we already have a track from the SFU. This commit fixes this issue by: 1) Awaiting that the p2p connection is ready before emitting the tracks, which ensures that the API only provides valid tracks (when usable). 2) Adding a concept of sequence to prevent race conditions between connections and tracks. Forward-Port-Of: odoo/odoo#205434 Forward-Port-Of: odoo/odoo#205198
Currently the following tests - test_loyalty_free_product_rewards - test_loyalty_free_product_rewards_2 may fail with the error ``` TypeError: Cannot read properties of undefined (reading 'sale_line_warn') at Proxy.addLineToCurrentOrder (http://127.0.0.1:8959/web/assets/eb52e48/point_of_sale.assets_prod.min.js:17244:235) at Proxy.addLineToCurrentOrder (http://127.0.0.1:8959/web/assets/eb52e48/point_of_sale.assets_prod.min.js:17415:14) at http://127.0.0.1:8959/web/assets/e
Original PR description
Currently the following tests
- test_loyalty_free_product_rewards
- test_loyalty_free_product_rewards_2
may fail with the error
```
TypeError: Cannot read properties of undefined (reading 'sale_line_warn')
at Proxy.addLineToCurrentOrder (http://127.0.0.1:8959/web/assets/eb52e48/point_of_sale.assets_prod.min.js:17244:235)
at Proxy.addLineToCurrentOrder (http://127.0.0.1:8959/web/assets/eb52e48/point_of_sale.assets_prod.min.js:17415:14)
at http://127.0.0.1:8959/web/assets/eb52e48/point_of_sale.assets_prod.min.js:16996:532
```
This occurs because, since 5620a16d55091b0ed74feee694a02252e3d13c17, when adding a line to current order we should specify the product template id
Forward-Port-Of: odoo/odoo#204590Purpose: allow customizing how options are filtered. In documents, we chose to limit the amount of information present in the `label` of `choice`s, but we should still be able to display all our fetched options, even those that do not match what is in the `label`, and is fixed in the related PR. Task-4656596 Forward-Port-Of: odoo/odoo#205414
Original PR description
Purpose: allow customizing how options are filtered. In documents, we chose to limit the amount of information present in the `label` of `choice`s, but we should still be able to display all our fetched options, even those that do not match what is in the `label`, and is fixed in the related PR. Task-4656596 Forward-Port-Of: odoo/odoo#205414
This commit fixes a miss-alignment between the first select and the following many2one field in a reference field. When choosing a longer value in the first select, it overlaps with the many2one field. Steps to reproduce: - Open Marketing Card app - Click to open a record - Choose a longer value in the first select in the Recipients field => overlap between the select's value and the following many2one field task-4387904 Description of the issue/feature this PR addresses: Current
Original PR description
This commit fixes a miss-alignment between the first select and the following many2one field in a reference field. When choosing a longer value in the first select, it overlaps with the many2one field. Steps to reproduce: - Open Marketing Card app - Click to open a record - Choose a longer value in the first select in the Recipients field => overlap between the select's value and the following many2one field task-4387904 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#205514
__Current behavior before commit:__ Sometimes when a Worldline terminal makes a payment with Edenred or Sodexo, it creates a ticket with special ascii characters like `0x0E` that are not supposed to be printed. Some of those characters make the [`createImage`][1] method throw an error with the `onerror` Event. __Description of the fix:__ Added the `sanitizeNodeText` function to remove all problematic ascii characters that should not be printed anyway. Added a test to make sure `htmlToCanva
Original PR description
__Current behavior before commit:__ Sometimes when a Worldline terminal makes a payment with Edenred or Sodexo, it creates a ticket with special ascii characters like `0x0E` that are not supposed to be printed. Some of those characters make the [`createImage`][1] method throw an error with the `onerror` Event. __Description of the fix:__ Added the `sanitizeNodeText` function to remove all problematic ascii characters that should not be printed anyway. Added a test to make sure `htmlToCanvas` can handle all ascii characters without crashing. opw-4322339 [1]:https://github.com/odoo/odoo/blob/a98e802976f6798f3aea07231a366fbcd8002ce2/addons/point_of_sale/static/src/app/utils/html-to-image.js#L217 Forward-Port-Of: odoo/odoo#204480 Forward-Port-Of: odoo/odoo#195004
Imperial UoM can sometime create a discrepancy in between the demand and the actual quantity move, this is mostly expected. However, when the user force set the quantity manually, a ValidationError could be raised because Odoo tried to create a new stock.move.line with the difference. This test ensure that a move line with a product uom quantity of 0 does not impact the Quants reserved quantity. https://github.com/user-attachments/assets/661c23e2-2de1-4328-aad8-b4e6d80e0500 # HOW TO R
Original PR description
Imperial UoM can sometime create a discrepancy in between the demand and the actual quantity move, this is mostly expected. However, when the user force set the quantity manually, a ValidationError…
Imperial UoM can sometime create a discrepancy in between the demand and the actual quantity move, this is mostly expected. However, when the user force set the quantity manually, a ValidationError could be raised because Odoo tried to create a new stock.move.line with the difference. This test ensure that a move line with a product uom quantity of 0 does not impact the Quants reserved quantity. https://github.com/user-attachments/assets/661c23e2-2de1-4328-aad8-b4e6d80e0500 # HOW TO REPRODUCE - Create Product P, with oz uom - Set available quantity to 10 oz - Create delivery transfer for 150g of P > Confirm > Assign - -> Reserved quantity is 149.97 g (expected) which is 5.29 oz - Set Quantity to 150 g - => ValidationError: "Quantity or Reserved Quantity should be set." - Unreserve > Set Quantity to 150g == No problem ... OPW-4659565 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205389 Forward-Port-Of: odoo/odoo#203765
Steps to reproduce the bug: - Install point of sales app, employees app - Make a shop and enable multiple employees per session option - Add another user as a basic right user for any shop - Open a shop session (the one rights are set up for) - Log out of the current user and log in with the other user account - Open the session - The current logged-in user can close the session despite having basic rights Problem: The close session in the XML was having a condition of pos.employeeIsA
Original PR description
Steps to reproduce the bug: - Install point of sales app, employees app - Make a shop and enable multiple employees per session option - Add another user as a basic right user for any shop - Open a…
Steps to reproduce the bug: - Install point of sales app, employees app - Make a shop and enable multiple employees per session option - Add another user as a basic right user for any shop - Open a shop session (the one rights are set up for) - Log out of the current user and log in with the other user account - Open the session - The current logged-in user can close the session despite having basic rights Problem: The close session in the XML was having a condition of pos.employeeIsAdmin, and the employeeIsAdmin flag was checking if the user is having advanced rights on the shop or it is the logged-in Odoo user. So if you are the logged-in user, you will always have the close register option regardless of the access rights you have for a specific shop. opw-4575692 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#204972 Forward-Port-Of: odoo/odoo#198613
In https://github.com/odoo/odoo/pull/188792 we mistakenly removed the check that ensured the spreadsheet_data attachment was a valid JSON file. Task-4657990 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#202471
Original PR description
In https://github.com/odoo/odoo/pull/188792 we mistakenly removed the check that ensured the spreadsheet_data attachment was a valid JSON file. Task-4657990 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#202471
Description of the issue/feature this PR addresses: **Description:** > - When we open the 'Customers' menu on the website, the 'tags' are displayed in a single line **Steps:** > - Install the "website_customer" module. > - Create a "Website Tag" from the Contacts app-> Configurations. > - Add the tag to any partner's "Website Tags" field (inside the "Sales & Purchase" page). > - Go to the website and open the "Customers" menu(from url). Current behavior before PR: Before F
Original PR description
Description of the issue/feature this PR addresses: **Description:** > - When we open the 'Customers' menu on the website, the 'tags' are displayed in a single line **Steps:** > - Install the…
Description of the issue/feature this PR addresses:
**Description:**
> - When we open the 'Customers' menu on the website, the 'tags' are displayed in a single line
**Steps:**
> - Install the "website_customer" module.
> - Create a "Website Tag" from the Contacts app-> Configurations.
> - Add the tag to any partner's "Website Tags" field (inside the "Sales & Purchase" page).
> - Go to the website and open the "Customers" menu(from url).
Current behavior before PR:
Before Fix:

After Fix:

Desired behavior after PR is merged:
- All Tags are appropriately shown after my fix
- The issue comes in version 17.0, 18.0, saas~18.1, and saas~18.2
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#204983
Forward-Port-Of: odoo/odoo#203772Description of the issue/feature this PR addresses: Added my new email on the CLA 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#205479
Original PR description
Description of the issue/feature this PR addresses: Added my new email on the CLA 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#205479
When posting the closing entry of an Italian tax return, with the l10n_it_xml_export module installed, a traceback is raised. Steps to reproduce: 1. Install l10n_it_xml_export. 2. Using an IT company, create a closing entry for the tax return. 3. Post the closing entry, a wizard opens. 4. Validate the values. 5. A traceback is raised. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4715039) opw-4715039 Forward-Port-Of: odoo/enterprise#83284
Original PR description
When posting the closing entry of an Italian tax return, with the l10n_it_xml_export module installed, a traceback is raised. Steps to reproduce: 1. Install l10n_it_xml_export. 2. Using an IT company, create a closing entry for the tax return. 3. Post the closing entry, a wizard opens. 4. Validate the values. 5. A traceback is raised. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4715039) opw-4715039 Forward-Port-Of: odoo/enterprise#83284
Bug === 1. Create a folder, and change 'access_internal = view' (so Demo can view it, but not edit it) 2. Login as Demo 3. Create a shortcut to that folder 4. Click on the shortcut in the sidebar 5. You can upload in the shortcut even if you have no access on the target Now, the "Upload", "Request", etc buttons will be disabled if the user has no edit access on the target. Task-4626766 Forward-Port-Of: odoo/enterprise#80782
Original PR description
Bug === 1. Create a folder, and change 'access_internal = view' (so Demo can view it, but not edit it) 2. Login as Demo 3. Create a shortcut to that folder 4. Click on the shortcut in the sidebar 5. You can upload in the shortcut even if you have no access on the target Now, the "Upload", "Request", etc buttons will be disabled if the user has no edit access on the target. Task-4626766 Forward-Port-Of: odoo/enterprise#80782
## Steps to reproduce: 1. Install l10n_mx. 2. Activate developer mode. 3. Activate Download XSD files (XML validation). 4. Go to accounting configuration > chart of accounts 5. Make sure here to have 2 accounts like 702.XXX. One should have the credit tag and the other one the debit one. 8. Go to reports and select Trial Balance. 9. Click on the download drop list and select COA SAT ## Issue: Up to now we have just intentionally marked this accounts as no valid, we can see that
Original PR description
## Steps to reproduce: 1. Install l10n_mx. 2. Activate developer mode. 3. Activate Download XSD files (XML validation). 4. Go to accounting configuration > chart of accounts 5. Make sure here to have…
## Steps to reproduce: 1. Install l10n_mx. 2. Activate developer mode. 3. Activate Download XSD files (XML validation). 4. Go to accounting configuration > chart of accounts 5. Make sure here to have 2 accounts like 702.XXX. One should have the credit tag and the other one the debit one. 8. Go to reports and select Trial Balance. 9. Click on the download drop list and select COA SAT ## Issue: Up to now we have just intentionally marked this accounts as no valid, we can see that inside trial_balance.py for l10n_mx_reports at L201 this was a known limitation. ## Solution: As we can see from the technical anex in the mexican goverment site https://www.gob.mx/sat/documentos/contabilidad-en-medios-electronicos-anexo-tecnico we can see that there are asset, liability and equity accounts which, by their nature, can be presented as debit or credit. ### Example Scenario: Let's say we have two hypothetical accounts, 701.01.01 and 701.01.02: Account 701.01.01 (perhaps an asset account) would be a Deudora (D). Account 701.01.02 (perhaps a liability account) would be Acreedora (A). The nature (D or A) depends on the type of account according to the categorization provided in the document. So, - Accounts related to Assets, Costs, and Expenses should generally be Deudora (D). - Accounts related to Liabilities, Equity, and Income should generally be Acreedora (A). - Some special accounts may vary and can be both Deudora (D) and Acreedora (A). opw-4185713 Forward-Port-Of: odoo/enterprise#83058 Forward-Port-Of: odoo/enterprise#70113
when access planning by user in field service we will see that inactive user are also get fetched even though they dont have planning set this will happend if user have open assigned tasks with no `planned_date_begin` and `date_deadline` here we have made some refactor [ref](https://github.com/odoo/enterprise/pull/53499) and implemented the hook to prepare the domain to fetch the records of `project.task`, instead of overriding `_group_expand_user_ids` steps to reproduce: - navigate t
Original PR description
when access planning by user in field service we will see that inactive user are also get fetched even though they dont have planning set this will happend if user have open assigned tasks with no `planned_date_begin` and `date_deadline` here we have made some refactor [ref](https://github.com/odoo/enterprise/pull/53499) and implemented the hook to prepare the domain to fetch the records of `project.task`, instead of overriding `_group_expand_user_ids` steps to reproduce: - navigate to `Field Service > Planning > By User`. - open unassigned task - assigned it to user(create new or use existing user) - unschedule the task - archieve the user ref the video: https://drive.google.com/file/d/1hME_bPXXNJgO9wgWT_CPP3-gz1RaLhPe/view?usp=sharing Fix: - fetch the active user if not added filter manually - if manual filter then fetch based on filter **OPW: 4588785** Forward-Port-Of: odoo/enterprise#82862
Steps to reproduce: - install helpdesk_timesheet - Go to `Timesheets` - Select ticket-linked timesheets only. - print report. Issue: - Tickets names are not rendered on the report, causing misalignment. Fix: - Updated condition to display table cell based on task, project, or ticket visibility task-4476391 Forward-Port-Of: odoo/enterprise#79546
Original PR description
Steps to reproduce: - install helpdesk_timesheet - Go to `Timesheets` - Select ticket-linked timesheets only. - print report. Issue: - Tickets names are not rendered on the report, causing misalignment. Fix: - Updated condition to display table cell based on task, project, or ticket visibility task-4476391 Forward-Port-Of: odoo/enterprise#79546
Steps to reproduce: 1) Open the Appointment module without loading demo data. 2) Create a resource-based appointment type using the helper (e.g., 'Book a Resource' or 'Table Booking'). 3) Open the calendar and check the 'Share Availabilities' dropdown menu—resource-based appointments appear there. Issue: Resource-based appointments should not be visible in the dropdown menu. Technical: We have set default value of `staff_user_ids` as self user. Inside the `appointment_get_user_appoint
Original PR description
Steps to reproduce: 1) Open the Appointment module without loading demo data. 2) Create a resource-based appointment type using the helper (e.g., 'Book a Resource' or 'Table Booking'). 3) Open the…
Steps to reproduce: 1) Open the Appointment module without loading demo data. 2) Create a resource-based appointment type using the helper (e.g., 'Book a Resource' or 'Table Booking'). 3) Open the calendar and check the 'Share Availabilities' dropdown menu—resource-based appointments appear there. Issue: Resource-based appointments should not be visible in the dropdown menu. Technical: We have set default value of `staff_user_ids` as self user. Inside the `appointment_get_user_appointment_types`'s domain we only specified, `staff_user_ids` but while creating a resource based appointment from the Helper, we directly select, `schedule_based_on` as `resources`, thus will not see `staff_user_ids` in view, there for its compute will never called, and we will get its default value, as the result that appointment will be valid as per `appointment_get_user_appointment_types`'s domain. After this PR: Only User based appointments will be displayed. Task-4680418 Forward-Port-Of: odoo/enterprise#82736
Currently, when a credit card journal gets disconnected, and has some transactions, the reconnect button won't appear. This is caused by the condition for `display_connect_bank_in_dashboard` added in ae3ec22b6ec64f4600b5a11db2ffda5256bb75fd to omit the 'credit' type journal. Changing this condition to account for 'credit' type journals allows the reconnect button to appear on credit journals that have transactions. opw-4654051 Forward-Port-Of: odoo/enterprise#83142
Original PR description
Currently, when a credit card journal gets disconnected, and has some transactions, the reconnect button won't appear. This is caused by the condition for `display_connect_bank_in_dashboard` added in ae3ec22b6ec64f4600b5a11db2ffda5256bb75fd to omit the 'credit' type journal. Changing this condition to account for 'credit' type journals allows the reconnect button to appear on credit journals that have transactions. opw-4654051 Forward-Port-Of: odoo/enterprise#83142
After https://github.com/odoo/enterprise/pull/8209 we stopped tokenize when the amount match. It is an error. Forward-Port-Of: odoo/enterprise#83227
Original PR description
After https://github.com/odoo/enterprise/pull/8209 we stopped tokenize when the amount match. It is an error. Forward-Port-Of: odoo/enterprise#83227
## [FIX] web_gantt: make sure orm service is defined in gantt renderer Before this commit, when the user reschedules his task with dependencies by clicking on any arrow displayed in the gantt connector. A notification is displayed to notify the user the action is done with success, that notification also contains an `Undo` button to let the user to undo the rescheduling made. However, if the user clicks on the undo button, a traceback occurs. The reason is because `orm` service is not d
Original PR description
## [FIX] web_gantt: make sure orm service is defined in gantt renderer Before this commit, when the user reschedules his task with dependencies by clicking on any arrow displayed in the gantt…
## [FIX] web_gantt: make sure orm service is defined in gantt renderer Before this commit, when the user reschedules his task with dependencies by clicking on any arrow displayed in the gantt connector. A notification is displayed to notify the user the action is done with success, that notification also contains an `Undo` button to let the user to undo the rescheduling made. However, if the user clicks on the undo button, a traceback occurs. The reason is because `orm` service is not defined in the gantt renderer. This commit makes sure the orm service is defined in the gantt renderer to be able to call the `action_rollback_scheduling` method. ## [FIX] web_gantt: don't display undo button if old vals are not given Before this commit, after the `web_gantt_schedule` call was done, a notification is displayed according to the result received by the `web_gantt_schedule` call done. The problem is even if the `old_vals_per_pill_id` is not given when the gantt scheduling has been made with success, the `Undo` button is displayed. The problem is without `old_vals_per_pill_id`, it is impossible to undo the action done, because the initial data before the `web_gantt_schedule` is not known without that data, and so, if the user clicks on `Undo` button a traceback will occur since we cannot retrieve the initial data of the records processed in the `web_gantt_schedule` method. This commit makes sure the `Undo` button is displayed only if we have the information to `undo` the `web_gantt_schedule` method. To know that, the `old_vals_per_pill_id` should be given in the result of `web_gantt_schedule` to be able to revert the changes made by `web_gantt_schedule`. ## [FIX] web_gantt: correctly display warning notification Before this commit, a warning notification was not properly displayed because the method does not return what we expect. Instead of returning the message and notification type, it returns a client action to call `display_notification`. Moreover, the warning notification does not display the right icon, it display `fa-check` instead of `fa-warning`. This commit changes the object returned for the warning to have the expected values returned and changes the icon when the notification is a warning one. task-4687572 Forward-Port-Of: odoo/enterprise#83068 Forward-Port-Of: odoo/enterprise#82690
… by making lambda selection Forward-Port-Of: odoo/enterprise#83146
Original PR description
… by making lambda selection Forward-Port-Of: odoo/enterprise#83146
Reproduce: 1. Create a partner with name "TEST" and email "bob@there.com". 2. Try to share a document using "bob" to find the partner. 3. It doesn't show up, you can't select them. Partners should be findable by their email when trying to share documents with them. Task-4656596 Forward-Port-Of: odoo/enterprise#81713
Original PR description
Reproduce: 1. Create a partner with name "TEST" and email "bob@there.com". 2. Try to share a document using "bob" to find the partner. 3. It doesn't show up, you can't select them. Partners should be findable by their email when trying to share documents with them. Task-4656596 Forward-Port-Of: odoo/enterprise#81713
Currently, public users cannot preview shared documents; instead, the documents are always downloaded. ### Steps to reproduce 1. Install `documents_account`. 2. Share a previewable document (e.g., an image or a PDF) with a link that allows public viewing. 3. Open the share link in an incognito window. 4. Click "Preview file." The file is downloaded instead of being previewed. ### Cause In an override of the route handling document content retrieval, the argument that determines
Original PR description
Currently, public users cannot preview shared documents; instead, the documents are always downloaded. ### Steps to reproduce 1. Install `documents_account`. 2. Share a previewable document (e.g., an…
Currently, public users cannot preview shared documents; instead, the documents are always downloaded. ### Steps to reproduce 1. Install `documents_account`. 2. Share a previewable document (e.g., an image or a PDF) with a link that allows public viewing. 3. Open the share link in an incognito window. 4. Click "Preview file." The file is downloaded instead of being previewed. ### Cause In an override of the route handling document content retrieval, the argument that determines whether the document should be displayed or downloaded is lost in a `super()` call. ### Tests While the base `documents` module includes tests for this behavior, they are tagged with `at_install`, meaning they only validate the functionality at the time of the module's initial installation. This does not account for potential overrides in extension modules like `documents_account`. To address this, the test class is now tagged `post_install`. opw-4490958 Forward-Port-Of: odoo/enterprise#81456
**Step to reproduce** 1. createdb with installing l10n_co_reports in 18.0 2. and install web_studio 3. open studio in customer invoice menu and tap on Daily Journal report **Below mentioned traceback is rasing**: for fixing it adding in blacklist report so it won't show in studio as I have checked in this [commit](https://github.com/odoo/enterprise/commit/e7efdb09742c434f1f72ec9c8f619038c470b464) the purpose this report to show the report using accounting report ``` Traceback (mos
Original PR description
**Step to reproduce** 1. createdb with installing l10n_co_reports in 18.0 2. and install web_studio 3. open studio in customer invoice menu and tap on Daily Journal report **Below mentioned traceback…
**Step to reproduce**
1. createdb with installing l10n_co_reports in 18.0
2. and install web_studio
3. open studio in customer invoice menu and tap on Daily Journal report
**Below mentioned traceback is rasing**:
for fixing it adding in blacklist report so it won't show in studio as I have checked in this [commit](https://github.com/odoo/enterprise/commit/e7efdb09742c434f1f72ec9c8f619038c470b464) the purpose this report to show the report using accounting report
```
Traceback (most recent call last):
File "/home/odoo/odoo/odoo/18.0/odoo/http.py", line 1963, in _transactioning
return service_model.retrying(func, env=self.env)
File "/home/odoo/odoo/odoo/18.0/odoo/service/model.py", line 156, in retrying
result = func()
File "/home/odoo/odoo/odoo/18.0/odoo/http.py", line 1930, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/odoo/odoo/18.0/odoo/http.py", line 2178, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/odoo/odoo/18.0/odoo/addons/base/models/ir_http.py", line 333, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/odoo/odoo/18.0/odoo/http.py", line 727, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/odoo/enterprise/18.0/web_studio/controllers/report.py", line 499, in load_report_editor
report_qweb = self._get_report_qweb(report)
File "/home/odoo/odoo/enterprise/18.0/web_studio/controllers/report.py", line 636, in _get_report_qweb
render_context = report_safe_cr._get_rendering_context(report_safe_cr, [0], {"studio": True})
File "/home/odoo/odoo/enterprise/18.0/web_studio/models/ir_actions_report.py", line 44, in _get_rendering_context
ctx = super()._get_rendering_context(report, docids, data)
File "/home/odoo/odoo/odoo/18.0/addons/account/models/ir_actions_report.py", line 94, in _get_rendering_context
data = super()._get_rendering_context(report, docids, data)
File "/home/odoo/odoo/odoo/18.0/odoo/addons/base/models/ir_actions_report.py", line 1105, in _get_rendering_context
data.update(report_model._get_report_values(docids, data=data))
File "/home/odoo/odoo/enterprise/18.0/l10n_co_reports/report/libro_diario_report.py", line 17, in _get_report_values
report = self.env['account.report'].browse(options['report_id'])
TypeError: 'NoneType' object is not subscriptable
```
opw-4608924
upg-2733166
Forward-Port-Of: odoo/enterprise#83157