Wednesday, July 23, 2025
29 changes · saas-18.2
Enhancements to existing features
Restaurant preparation tickets now show the duplicate label in English and lower on the receipt. This makes duplicate tickets easier for staff to spot when ticket holders cover the top of the paper.
Original PR description
In this commit: =============== - Replaced `DUPLICATA` with `DUPLICATE`. - Repositioned the `DUPLICATE` label on the preparation ticket. - This change was made because most restaurants use ticket holders that obscure the top portion of the ticket, making the original placement of the label difficult to see. Task: 4893867  
Adds automated checks to ensure customer phone numbers are filled in correctly when sending POS receipts by SMS. This helps protect the checkout receipt flow from regressions and supports a smoother customer communication experience.
Original PR description
In this commit: -------------------------------------- - Added test case for phone number auto fill for receipt sending. Task: 4781742
French-localized invoices now use improved spacing and column sizing in the information section. This makes invoices easier to read when they include many details such as sales references, delivery addresses, incoterms, customer addresses, and operation types.
Original PR description
Backport of: https://github.com/odoo/odoo/commit/7f93cd1c82b0f0250b3f19e4b408775fb211482a This commit https://github.com/odoo/odoo/commit/d10174e49759a58058aed6c44026060a4d293cc3 made a change in the report invoice information block and changed the class to only use col which was not changed in the french localisation. Adapted the layout to be more readable by using proper spacing and column sizing when displaying a lot of information (Sales reference, delivery address, incoterm, customer address, operation type). Task ID: 4555856 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218289
Resolved issues and error corrections
This update makes an automated Mail test more reliable by shortening the simulated reconnect timing for a disconnected messaging service. It helps prevent false test failures in busy environments without changing the user-facing product behavior.
Original PR description
The "show warning when bus connection encounters issues" test simulates a disconnected WebSocket that fails to reconnect. In this scenario, an alert is shown to warn the user that some features may…
The "show warning when bus connection encounters issues" test simulates a disconnected WebSocket that fails to reconnect. In this scenario, an alert is shown to warn the user that some features may be unavailable or slow. However, the websocket worker’s initial reconnect delay is 1.5s, with an added random jitter up to 1 second which means the first reconnect attempt can take up to 2.5s. The test waits up to 2.5s for the alert to show, which is not always enough. The reconnect attempt alone may be that long, and under high CPU load, processing the resulting event can take even longer. This commit reduces the initial reconnect delay and the jitter during this test, ensuring that the reconnect attempt fails and the alert is shown within the expected time. fixes runbot-226443 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#219649
Miscellaneous changes
Related to https://github.com/odoo/enterprise/pull/90736 Forward-Port-Of: odoo/odoo#220031
Original PR description
Related to https://github.com/odoo/enterprise/pull/90736 Forward-Port-Of: odoo/odoo#220031
A missing permission was added for an automated purchase and stock test so it can access the required unit-of-measure field. This helps keep the test suite reliable and prevents false build failures without changing day-to-day user behavior.
Original PR description
The `product_uom_id` field was causing test failures in `test_reordering_rule.py` because it was not present in the `product.supplierinfo` form view . This commit adds the group permission `uom.group_uom` to the user who is running the test, to ensure that the `product_uom_id` field is available and preventing the test failure. build_error-111983 Forward-Port-Of: odoo/odoo#206688
The automatic invoice sending job now reports its progress accurately instead of repeatedly showing that zero records were processed. This makes scheduled invoice processing easier to monitor and reduces confusion for administrators reviewing job logs.
Original PR description
The scheduled action for the automatic sending of invoices currently does not explictly use the `_notify_progress` method introduced since Odoo 18 to track the progress of CRON jobs. This means that implicitly, by default the CRON will log `processed 0 records, 0 records remaining` at each run. This can be confusing, as the automatic invoice sending CRON is batched, and might run multiple times in sucession, reporting each time that it processed 0 records (which might not be true). ## Proposed fix: We correctly count the total account moves that need to be processed (using a `search_count`) and calculate the number of processed records and the remaining ones. opw-4926541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218763
This fix adds missing translated report names for document types used in Argentina, Chile, Ecuador, and Peru. It helps ensure printed or generated reports display the correct local names, reducing confusion for users in those countries.
Original PR description
opw-4659964 opw-4947238 opw-4953184
The partner invoicing tab now shows the General section, including bank details, to basic invoicing users while hiding advanced accounting fields unless the full accounting module is installed. This keeps essential partner billing information accessible without exposing fields that are not relevant for simpler accounting setups.
Original PR description
In this PR: - Keep General section with bank field visible for basic invoicing users and hide account fields (receivable/payable/autopost) when only account or account_accountant is installed. - Show account fields only when full accountant module is installed . Task-4953707 Forward-Port-Of: odoo/odoo#219655
Vietnamese payment QR code generation now accepts cases where the city field is empty but the state is provided, such as Hanoi or Hai Phong. This prevents unnecessary errors for businesses using Vietnam localization and makes payment setup more reliable.
Original PR description
* Problem: Using Vietnam localisation, leave city empty and just input state_id as Hà Nội or Hải Phòng, try to use vietqr code -> Raise error missing city * Solution: Just like https://github.com/odoo/odoo/pull/218984 we should check for state too although according to VietQR document, merchant city is not required see (https://vietqr.net/portal-service/download/documents/QR_Format_T&C_v1.0_VN_092021.pdf and search for term 'Merchant City') 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#219566
This fixes a website editor crash that could happen when a search element’s hidden sorting field was accidentally removed while editing text. The editor now relies on the search element itself to save correctly, reducing interruptions for users maintaining website pages.
Original PR description
Problem: Removing the `order_by` hidden input from a form and then saving results in a traceback. Cause: When a search element is added inside a text block, it may get accidentally deleted while editing the text. In version 18.1 and earlier, this did not cause a traceback because jQuery was used to get the form from the `order_by` input, and missing elements in the DOM did not cause a failure. Solution: Retrieve the form from the search element itself, rather than relying on the presence of the `order_by` hidden input. Steps to reproduce: - Add a "Title" text block - Insert a search element before the text - Delete all the text - Use backspace to delete the header block - Save -> Traceback occurs opw-4863089 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Quotes now correctly stop including template documents that were deleted after being selected in the quote builder. This prevents outdated headers or other documents from appearing in generated quote PDFs, keeping customer-facing quotations accurate.
Original PR description
## Version 18.0+ ## Issue On a quotation setup with a template, when a document is selected in the quote builder and then deleted from the template, it still appears when rendering the quote PDF. ## Steps to reproduce - Create a new quotation template with a header document - Create a new quote using the quotation template: - Under the 'Quote Builder' tab, select the header document - On the quotation template, delete the header document - Come back to the quote - *(Optional: check the 'Quote Builder' tab - it should be empty)* - Print the PDF: - The header appears on the document opw-4712958 Forward-Port-Of: odoo/odoo#213206
This fix prevents direct changes to website editor history records and avoids copying history data when duplicating content. It reduces failed save or copy operations and helps keep editing history reliable.
Original PR description
This commit prevent direct write to history, also, removes it from copy_data as it would fail anyway when trying to write the history Forward-Port-Of: odoo/odoo#217951 Forward-Port-Of: odoo/odoo#217167
This fixes an issue where certain page templates could accidentally skip content when conditional display rules appeared alongside comments. It helps ensure pages and reports render all expected items consistently.
Original PR description
Forward-Port-Of: odoo/odoo#212159
Point of Sale sessions now respect custom numbering prefixes instead of adding the shop name in front of them. This keeps session IDs consistent with the business’s configured sequence, making records easier to read and reconcile.
Original PR description
Description of the issue/feature this PR addresses: The sequencing for new PoS Session isn't right when set to another value than the default. Current behavior before PR: The PoS name was added before the intended sequence. For example, if you set the pos.session sequence to TEST/ with the Furniture Shop, it return Furniture ShopTEST/00001. Desired behavior after PR is merged: The PoS Session name should be using only the sequence if the sequence isn't the default one. When the pos.session sequence is set to TEST/ and you open the Furniture Shop, it should return TEST/00001. Steps to reproduce: - change the default sequence prefix for pos.session - open a pos session and Open Register - go to Point of Sale > Orders > Sessions - check the Session ID opw-4822673 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The checkout extra step no longer adds the Turnstile verification code into sale order notes. This keeps order records cleaner and avoids exposing unnecessary technical data to staff reviewing customer orders.
Original PR description
Scenario:
- enable extra step in website ecommerce
- enable turnstile
- do the checkout process until after "extra step" step
- go check the sale order
Result: there is a big "turnstile_captcha: {1000 character hash}" that is
logged each time the customer filled the "extra step" step.
Cause:
turnstile if enabled is activated for all website_form and will add a
turnstile_captcha parameter.
For other website.form, the captcha is removed from the params when
calling:
request.env['ir.http']._verify_request_recaptcha_token('website_form')
but the custom route /website/form/shop.sale.order doesn't do that so
the captcha is logged in note.
Fix:
Recaptcha is already disabled on the extra_step with the class:
s_website_form_no_recaptcha, so it makes sense to just have the
same behavior for turnstile.
opw-4934132
Forward-Port-Of: odoo/odoo#219545
Forward-Port-Of: odoo/odoo#219269This fix prevents an error from appearing when users or integrations access signature requests that are not in the shared state. The share link is now left empty when it does not apply, making record viewing and data access more reliable.
Original PR description
### Issue Commit [58425a0](https://github.com/odoo/enterprise/commit/58425a0022c79f2c45f23fdd5a5476d8c20a887e) introduced a new field `share_link` in `sign.request` that gets computed for requests…
### Issue Commit [58425a0](https://github.com/odoo/enterprise/commit/58425a0022c79f2c45f23fdd5a5476d8c20a887e) introduced a new field `share_link` in `sign.request` that gets computed for requests that are in the 'shared' state. However this compute method fails for requests not in the 'shared' state leading to a traceback error. This commit fixes it by setting the default as False for the sign.request records that do not have state='shared' so the traceback error is handled. This can be reproduced in v17 and above by: 1. Open any sign.request record that isn't in the shared state 2. Enable Developer Mode 3. Using the debug icon, click on view record data The traceback will be visible here which mentions that the compute method failed to assign It can also be re-produced by using an xml-rpc / json-rpc ORM call to search_read the sign.request records that does not have state = 'shared' ### Before https://github.com/user-attachments/assets/24c07f2a-2398-44b4-8969-30abb576876a ### After https://github.com/user-attachments/assets/e92b1212-5405-4b98-ba41-c81b2ac547d7 [opw-4864159](https://www.odoo.com/odoo/project/49/tasks/4864159) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#90576
An empty, unused file in the Documents app was removed after it had previously been left behind by mistake. This is a minor cleanup that reduces unnecessary code clutter without changing user-facing behavior.
Original PR description
During sharepocalypse, the file was emptied but not deleted, it's not used anymore. Introduced in https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e (18.0). Already removed in https://github.com/odoo/enterprise/commit/bb196623f348795536368287eb1a6e1ac5f5bc44 (saas-18.3). Forward-Port-Of: odoo/enterprise#89518
This update adjusts an internal subscription test so it creates the first invoice using simpler, more direct steps. This matters because it avoids conflicts with custom subscription rules while still verifying that future invoices exclude one-time charges correctly.
Original PR description
The commit 0d1b3dd03629c8e0499f537056c5ccd45cf094cd introduces a new test `test_subscription_invoice_after_second_period_payment` that uses `_create_recurring_invoice` to create a first invoice. However, overriding modules might consider that recurring invoices should only create invoices for subscriptions that have a payment token (as we do in our internal codebase). Since this test wants to check that the second invoice won't include the non-recurring lines, and not how the `_create_recurring_invoice` method behaves, it can use more basic calls to create this invoice. Forward-Port-Of: odoo/enterprise#90635
The product description shown for subscription products using goods with delivered quantity invoicing has been corrected. This helps users see accurate guidance when configuring subscription products and reduces confusion during setup.
Original PR description
To reproduce: ============== 1- go to subscription 2- go to product 3- select product type : goods and invoicing_policy : Delivered Quantity Problem: ========= wrong description. Solution: ========== update description. opw-4929735 Forward-Port-Of: odoo/enterprise#90143
The Dutch reports settings page now reliably shows the SBR certificate option. This fixes a configuration display issue caused by overlapping settings views, helping users find the certificate setting when preparing Dutch reporting.
Original PR description
Due to concurrent settings views, one of them wasn't displayed. Changed to be in one file, with different ids Forward-Port-Of: odoo/enterprise#90411
Fixed an issue where saving a Helpdesk ticket could fail after its tags were removed when tag-based automatic assignment was enabled. This prevents an error from interrupting ticket updates and keeps support workflows running smoothly.
Original PR description
Currently, an error occurs when the user tries to save the ticket after removing the tag. Steps to produce: --- - Install `Helpdesk` module. - Create the `Helpdesk team` with `Automatic Assignment` as `Dispatch tickets based on tags` - `All Ticket` > Create a new ticket and set the Helpdesk Team as the newly created team and set any tag, and click save - Remove the tag and save Traceback: --- `IndexError: list index out of range` At [1], the error occurs because `added_tags` is empty, which causes `vals_list` to be empty. As a result, attempting to unpack it using `zip(*vals_list)` leads to an IndexError. [1]: https://github.com/odoo/enterprise/blob/6763c997bce8c5a42fd7c2b99d36ae8af5d8d238/helpdesk/models/helpdesk_ticket.py#L689 sentry-6754498068 Forward-Port-Of: odoo/enterprise#90526
Opening the On Hand stock details from an approval product could fail with an error instead of showing available quantities. This update prevents approval-specific settings from carrying over into the stock view, so users can reliably check inventory from approval records.
Original PR description
<b>Steps to reproduce:</b> 1. Install the `approval`,`stock` module. 2. settings Inventory> Warehouse > check storage Loaction 3. Go to approval > Manager> All Approvals 4. Select an Approval > add…
<b>Steps to reproduce:</b> 1. Install the `approval`,`stock` module. 2. settings Inventory> Warehouse > check storage Loaction 3. Go to approval > Manager> All Approvals 4. Select an Approval > add storable product with on hand quantity > 0. 5. Go through the product > stat button On Hand <b>Issue:</b> - A traceback for unknown name field occurs when opening the On hand (stock.quant list view) <b>Cause:</b> - The context `search_view_ref` is passed from the `approval_product_line_view_tree` via the `product_id` field, which interferes with the Quant list view rendering. As a result, the On Hand button fails to display the expected stock information. <b>Solution:</b> - Removed `search_view_ref` from the `product_id` field context in the approval product line tree view. This prevents the context from unintentionally affecting unrelated views i.e. stock.quant list, ensuring On Hand smart button works as expected. <b>opw-4916178</b> Forward-Port-Of: odoo/enterprise#89973
Fixes an error that could appear when viewing product variant data with the POS Pricer module installed. The change ensures the product pricing display value is always set, preventing an unexpected traceback for users and administrators.
Original PR description
**Step to reproduce:** 1. Install pos_pricer module: 2. Open the Point of Sale app and create a product. 3. Go to the Product Variants menu. 4. Open that product. 5. Activate developer mode. 6. Click…
**Step to reproduce:** 1. Install pos_pricer module: 2. Open the Point of Sale app and create a product. 3. Go to the Product Variants menu. 4. Open that product. 5. Activate developer mode. 6. Click on the Bug icon (top-right corner). 7. Click on Data. **Issue:** A traceback is raised with the error: `Compute method failed to assign product.product(191,).pricer_display_price` The method `_compute_pricer_display_price` was removed in this commit https://github.com/odoo/enterprise/commit/87b1672ac7c1d27cd9eab05138b78f6a9439fea7 , and was reintroduced in a later commit https://github.com/odoo/enterprise/commit/4575d3dfdbd0ccd9bf57bddbd35a89bd47c48798 to avoid the AttributeError. **Cause:** The computed field `pricer_display_price` is a type Char and and is non-stored was not being assigned a value inside the compute method. So ORM requires that records to be assigned a value in a compute method. **Solution:** To fix this, assign a default value to `pricer_display_price` inside the compute method to prevent the error. opw-4887318 Forward-Port-Of: odoo/enterprise#88517
Users with Invoicing & Banks access can now see the General section with bank fields on partner records. This fixes a visibility issue while keeping advanced accounting configuration limited to full accounting users.
Original PR description
In this PR: Changed General section groups from `account.group_account_user` to `account.group_account_basic `to ensure users with **Invoicing & Banks** access can see bank fields in partner form. This resolves the issue where the General section was completely hidden when only account_accountant was installed, while maintaining restriction of account configuration fields to full accounting users only. Task-4953707 Forward-Port-Of: odoo/enterprise#90593
This update adjusts an automated check for SEPA direct debit payment handling so it continues to reflect the correct behavior for draft records. It helps keep accounting payment validation reliable without changing day-to-day user workflows.
Original PR description
See community commit for details.
Point of Sale users now see a clear warning when trying to validate a customer deposit for zero amount. This prevents an error screen and keeps the checkout flow stable for staff.
Original PR description
Steps to reproduce: =================== - From the POS UI, select a customer - Select Deposit Money - Try to deposit `0` amount by clicking Validate button Issue: ====== A traceback is raised when attempting to validate a deposit with zero amount. Cause: ====== The system does not check for zero-amount orders when creating a deposit payment line. Fix: ==== Add a dialog warning when the deposit amount is zero to prevent further processing. Task: 4862811
Users without administration settings access can now use the Reload AI Data button on invoices without hitting an access error. This keeps invoice AI data refreshes working for regular accounting users and avoids an unnecessary traceback.
Original PR description
When clicking on the "Reload AI Data" button (`account.move::action_reload_ai_data`), a user not in `base.group_system` group encounters an access rights error when searching on `ir.module.module` model in `account.move::is_indian_taxes()`:
```python
def is_indian_taxes(self):
l10n_in = self.env['ir.module.module'].search([('name', '=', 'l10n_in')])
return self.company_id.country_id.code == "IN" and l10n_in and l10n_in.state == 'installed'
```
This commit adds `sudo()` to the `search` call to ensure that the check for the 'l10n_in' module does not fail for users not belonging to "Administration/Settings" group.
This prevents a traceback and ensures that functional users can reload AI data.
Forward-Port-Of: odoo/enterprise#90021Related to https://github.com/odoo/odoo/pull/220031 Forward-Port-Of: odoo/enterprise#90736
Original PR description
Related to https://github.com/odoo/odoo/pull/220031 Forward-Port-Of: odoo/enterprise#90736