Thursday, May 29, 2025
17 changes · saas-18.2
Resolved issues and error corrections
This fixes an issue where loading the Point of Sale bakery sample could fail if product categories had been manually removed. The sample data now uses a fallback category so businesses can load demo bakery products without interruption.
Original PR description
Currently, an exception is generated when the system tries to find the product category for the newly added `product_flour` if all categories have been deleted manually before loading demo data. Steps to reproduce: 1. Install the `point_of_sale` module without demo data. 2. Navigate to Inventory -> Configuration -> Categories. 3. Delete food categories. 4. Navigate to Point of Sale -> load sample of bakery 5. An error occurs. Error: ``` ParseError while parsing /home/odoo/src/odoo/saas-18.2/addons/product/data/product_demo.xml:30, somewhere inside ``` This issue occurs because `product_flour` also references a missing product category. As with previous products, this change ensures a fallback to avoid failure when no categories exist. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where conversations were not marked as read when a user focused on a message thread and scrolled to the bottom without using the composer. It restores the expected unread-message behavior so users see more accurate read status in mail conversations.
Original PR description
Follow-up of https://github.com/odoo/odoo/pull/211720 PR above backport behaviour of (un)read conversations, i.e. mark as read on scroll bottom, new message separator, and unread message banner. One of the improvements are made possible thanks to adding concept of thread focused (without composer), which allow to mark as read even when focusing the thread without composer. The backport made a mistake in omitting onFocusin on thread in template, which made it not possible to mark as read on scroll bottom with just focus on thread. This commit fixes it by adding in template. Handler was already there. Test for scroll to bottom that marks unread is adapted to focus the thread without composer.
The Discuss app now uses softer separators, lighter pinned message cards, and slightly improved spacing around message notifications. These small fixes make conversations easier to scan without distracting users from important content.
Original PR description
1. lower opacity on pinned message cards 2. show low opacity separator above discuss app 3. better spacing between msg bubble and next msg notification
Fixes an error that could block recruiters when requesting a signature for a newly created job application. The change removes a reference to outdated contact data, allowing the signature request flow to proceed normally.
Original PR description
When clicking on the `Request Signature` button after creating a new application a traceback would occur due to missing record data. Steps to reproduce: --- - Install `hr_recruitment_sign` module - Recruitment > Applications > All Applications - Create New and in action button `Request Signature` Traceback: --- ``ValueError: Invalid field 'mobile' on model 'res.partner'`` The `mobile` field was removed from `res.partner` (see related commit), but it was not removed from this module. This commit cleans it up to avoid referencing a non-existent field. commit- https://github.com/odoo/odoo/commit/6b820eb6fc6f782ba6a83d605d87b4a1dd2a87be sentry-6588612861
Miscellaneous changes
Before this commit, the bus GC would remove every message older than 120 seconds. This could lead to missed messages if a disconnection occurred during the GC process. To minimize the impact of GC, the retention window should be extended. This commit introduces the `bus.gc_retention_seconds` config parameter, which allows customizing this window. The default is set to 24 hours, which seems reasonable (messages won't be cleared overnight). Since the GC will now process larger batches,
Original PR description
Before this commit, the bus GC would remove every message older than 120 seconds. This could lead to missed messages if a disconnection occurred during the GC process. To minimize the impact of GC, the retention window should be extended. This commit introduces the `bus.gc_retention_seconds` config parameter, which allows customizing this window. The default is set to 24 hours, which seems reasonable (messages won't be cleared overnight). Since the GC will now process larger batches, the deletion is not made with a direct query: no need to fetch all records before calling `unlink`, no need to schedule other vacuums when the batch is too big. Forward-Port-Of: odoo/odoo#212018 Forward-Port-Of: odoo/odoo#211806
**Before this PR:** When a user attempts to add a review, the label on the "Review tab" doesn't update, and the portal chatter fails to display the review message. https://youtu.be/H1XRamn9Koc **Technical:** The code related to these features was removed in commit 368eb78a9cedfce0802b64fd2782e1c018541e40, but it was never addressed afterward. **After this PR:** Adding a review updates the tab label and displays the message in portal chatter. **Task**-4677251 Forward-Port-Of: odoo/
Original PR description
**Before this PR:** When a user attempts to add a review, the label on the "Review tab" doesn't update, and the portal chatter fails to display the review message. https://youtu.be/H1XRamn9Koc **Technical:** The code related to these features was removed in commit 368eb78a9cedfce0802b64fd2782e1c018541e40, but it was never addressed afterward. **After this PR:** Adding a review updates the tab label and displays the message in portal chatter. **Task**-4677251 Forward-Port-Of: odoo/odoo#207242
When the user tries to export a file of attachment in xlsx format, A traceback will appear. Steps to reproduce the error: - Open attachments > Upload a file that does not contain base64-encoded content - Select that file > Actions > Export > Export Format: XLSX > Add File content(raw) field > Export Traceback: ``` AttributeError: 'ExportXlsxWriter' object has no attribute 'field_names' ``` In this commit: https://github.com/odoo/odoo/commit/a4e04518a437f09d6a10e25a35900c4adfe11
Original PR description
When the user tries to export a file of attachment in xlsx format, A traceback will appear. Steps to reproduce the error: - Open attachments > Upload a file that does not contain base64-encoded content - Select that file > Actions > Export > Export Format: XLSX > Add File content(raw) field > Export Traceback: ``` AttributeError: 'ExportXlsxWriter' object has no attribute 'field_names' ``` In this commit: https://github.com/odoo/odoo/commit/a4e04518a437f09d6a10e25a35900c4adfe11dc6 ``field_names`` is renamed to ``fields``. https://github.com/odoo/odoo/blob/0e98b684834cf9e1d646e55599e7bc00aa5997f0/addons/web/controllers/export.py#L231 Here, ``field_names`` is still used. So, it will lead to the above traceback. sentry-6096581800 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189110
This commit updates the legacy dhl connector module title and description in the base POT file. Enterprise PR: odoo/enterprise#73908 Task-3759205 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211672 Forward-Port-Of: odoo/odoo#187409
Original PR description
This commit updates the legacy dhl connector module title and description in the base POT file. Enterprise PR: odoo/enterprise#73908 Task-3759205 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211672 Forward-Port-Of: odoo/odoo#187409
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. #### Correct | Product | Qty | Unit Price | Discount | VAT % | Formula | Total | |-----------|-----|------------|----------|-------|----------------------------------|-----------| | Product 1 | 2 | 5.00 | 3.00 | 22% | `2 * (5 - 3) * 1.22` | 4.8
Original PR description
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. ####…
Fix the import of vendor bills that use per-line ScontoMaggiorazione. The discount/surcharge should be applied to the price unit before taxes, instead of summed and subtracted from the total. #### Correct | Product | Qty | Unit Price | Discount | VAT % | Formula | Total | |-----------|-----|------------|----------|-------|----------------------------------|-----------| | Product 1 | 2 | 5.00 | 3.00 | 22% | `2 * (5 - 3) * 1.22` | 4.88 | | Product 2 | 1 | 10.00 | 3.00 | 10% | `1 * (10 - 3) * 1.10` | 7.70 | | | | | | | | **12.58** | #### Before the scontomaggiorazione is not managed line by line. We have to manage line by line because the ScontoMaggiorazione should decrease the "Imponibile" and than calculate the amount tax line by line because each line can have different tax % . ATTENTION: the ScontoMaggiorazione on ImportoTotaleDocumento is not the sum of the ScontoMaggiorazione on the lines. It is a discount on the amount tax included Forward-Port-Of: odoo/odoo#206238
Steps to reproduce: ---- - Install pos_self_order - Configuration > Settings > Under Mobile self-order & Kiosk - Select Self Ordering Mode as QR menu + Ordering and save changes - Click Preview Web Interface Issue: ---- - Slideshow is not working in QR menu + Ordering mode. Cause: ---- - It was intentionally bypassed for the QR menu + Ordering mode. Fix: ---- - Removed unnecessary code which caused the issue. --- task-4745666 Forward-Port-Of: odoo/odoo#207235
Original PR description
Steps to reproduce: ---- - Install pos_self_order - Configuration > Settings > Under Mobile self-order & Kiosk - Select Self Ordering Mode as QR menu + Ordering and save changes - Click Preview Web Interface Issue: ---- - Slideshow is not working in QR menu + Ordering mode. Cause: ---- - It was intentionally bypassed for the QR menu + Ordering mode. Fix: ---- - Removed unnecessary code which caused the issue. --- task-4745666 Forward-Port-Of: odoo/odoo#207235
Description of the issue/feature this PR addresses: Replace all usages of `mapped('id')` by `ids`. The former is slower and does not work in domains because NewId is not a valid value for psycopg. Current behavior before PR: The `mapped` call returns `.id` for each record, which on new records returns a NewId. That value is not supported in domains or as SQL parameters. (impacted modules: at least l10n_uk*) Desired behavior after PR is merged: Simply use `.ids`. odoo/enterprise#8627
Original PR description
Description of the issue/feature this PR addresses:
Replace all usages of `mapped('id')` by `ids`.
The former is slower and does not work in domains because NewId is not a valid value for psycopg.
Current behavior before PR:
The `mapped` call returns `.id` for each record, which on new records returns a NewId. That value is not supported in domains or as SQL parameters. (impacted modules: at least l10n_uk*)
Desired behavior after PR is merged:
Simply use `.ids`.
odoo/enterprise#86275
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#211391**Current behavior before PR**: Reply backlink doesn't work for deleted parent message **Desired behavior after PR is merged**: Reply backlink works for deleted parent message task:4593352 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202993
Original PR description
**Current behavior before PR**: Reply backlink doesn't work for deleted parent message **Desired behavior after PR is merged**: Reply backlink works for deleted parent message task:4593352 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202993
## Issue: Completing a flow from quotation to payment (down payment → settle) via Point of Sale does not properly update the sale order lines when settling. ## Reason: During the down payment process, the PoS adds new lines to the sale order. These are added during the order validation stage. However, the updated order lines are not written back to IndexedDB. If the user attempts to settle the order without reloading the session or clearing the cache, the PoS relies on stale data from In
Original PR description
## Issue: Completing a flow from quotation to payment (down payment → settle) via Point of Sale does not properly update the sale order lines when settling. ## Reason: During the down payment…
## Issue: Completing a flow from quotation to payment (down payment → settle) via Point of Sale does not properly update the sale order lines when settling. ## Reason: During the down payment process, the PoS adds new lines to the sale order. These are added during the order validation stage. However, the updated order lines are not written back to IndexedDB. If the user attempts to settle the order without reloading the session or clearing the cache, the PoS relies on stale data from IndexedDB. This causes Odoo to see outdated `order_lines`, usually only the original item(s), leading to incorrect behavior such as product quantities resetting to 0. ## Fix: To ensure data consistency, we explicitly remove the affected sale orders from IndexedDB after the down payment is completed. This forces the PoS to re-fetch the updated order from the backend. The re-fetch happens through the `missingRecursive` function, which will retrieve the complete and up-to-date sale order data, including the new order lines, ensuring accurate behavior during the settlement process. ## Steps to reproduce: 1. Create a service product with "Ordered quantities" as the invoicing policy. 2. Create a quotation using this product. 3. Open the PoS. 4. Click "Actions" → "Quotations" → select the quotation. 5. Choose the "Down Payment" option (any type) and set amount/percentage. 6. Pay the order. 7. Again, go to "Actions" → "Quotations" and select the same order. 8. Click "Settle the order". 9. At this point, Odoo will incorrectly reset product quantity to 0. OPW-4811612 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212017 Forward-Port-Of: odoo/odoo#211139
Purpose: Splitting QR codes should not be done in documents. They are unusable if broken and some of them have legal impications. Problem Cause: If the QR code is contained in `<div>` that has class `row`, the css property `display: flex;` would cause it to be split among pages when needed. All EDI modules with QR codes were visited, but the problem was only spotted in Mexico and Peru. Solution: `<div>` containing QR codes and having `row` class should also have class `avoid-pa
Original PR description
Purpose: Splitting QR codes should not be done in documents. They are unusable if broken and some of them have legal impications. Problem Cause: If the QR code is contained in `<div>` that has class `row`, the css property `display: flex;` would cause it to be split among pages when needed. All EDI modules with QR codes were visited, but the problem was only spotted in Mexico and Peru. Solution: `<div>` containing QR codes and having `row` class should also have class `avoid-page-break-inside` task-4756331 Forward-Port-Of: odoo/enterprise#85038
odoo/odoo#211391 Forward-Port-Of: odoo/enterprise#86275
Original PR description
odoo/odoo#211391 Forward-Port-Of: odoo/enterprise#86275
The system failed to retrieve `worked_days.payslip_id.date_to` because user remove end period Steps to Reproduce: 1. Switch to `My Mexican Company`. 2. Go to Payroll > click Payslips > To Pay > Click New 3. Select Employee from the selection 4. Remove end date from period (Right One). Error: `TypeError: unsupported operand type(s) for -: 'bool' and 'datetime.date'` Solution: Ensure that if worked_days.payslip_id.date_to, start_date, end_date are not present then continue the flo
Original PR description
The system failed to retrieve `worked_days.payslip_id.date_to` because user remove end period Steps to Reproduce: 1. Switch to `My Mexican Company`. 2. Go to Payroll > click Payslips > To Pay > Click New 3. Select Employee from the selection 4. Remove end date from period (Right One). Error: `TypeError: unsupported operand type(s) for -: 'bool' and 'datetime.date'` Solution: Ensure that if worked_days.payslip_id.date_to, start_date, end_date are not present then continue the flow Sentry - 6473512002 Forward-Port-Of: odoo/enterprise#82675
This new module should replace the existing implementation for DHL integration which uses XML and is no longer recommended by DHL: https://developer.dhl.com/dhl-express-xml-developer-portal-sunset. The new integration uses ["MyDHL API](https://developer.dhl.com/api-reference/dhl-express-mydhl-ap)" which is based on REST. Community PR: odoo/odoo#187409 Task-3759205 Forward-Port-Of: odoo/enterprise#86426 Forward-Port-Of: odoo/enterprise#73908
Original PR description
This new module should replace the existing implementation for DHL integration which uses XML and is no longer recommended by DHL: https://developer.dhl.com/dhl-express-xml-developer-portal-sunset. The new integration uses ["MyDHL API](https://developer.dhl.com/api-reference/dhl-express-mydhl-ap)" which is based on REST. Community PR: odoo/odoo#187409 Task-3759205 Forward-Port-Of: odoo/enterprise#86426 Forward-Port-Of: odoo/enterprise#73908