Wednesday, July 23, 2025
27 changes · saas-18.3
Enhancements to existing features
The point of sale SMS module now includes automated test coverage to confirm that a customer's phone number is filled in automatically when sending receipts by SMS. This helps reduce the risk of regressions in receipt sending and supports a smoother checkout experience.
Original PR description
In this commit: -------------------------------------- - Added test case for phone number auto fill for receipt sending. Task: 4781742 Forward-Port-Of: odoo/odoo#209081
The duplicate marker on Point of Sale preparation tickets now says “DUPLICATE” and appears lower on the receipt. This makes duplicate tickets easier for restaurant staff to identify 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   Forward-Port-Of: odoo/odoo#216211
The IoT box image build process now includes the upcoming IoT drivers component when fetching required code. This prepares future upgrades so the needed driver replacement is already available, reducing upgrade risk.
Original PR description
In order for the image (built in `saas-18.1`) to be ready for the replacement of `hw_drivers` and `hw_posbox_homepage` by `iot_drivers` in `saas-18.4`, we add it to git's sparse-checkout. This way, we ensure it is fetched by git when upgrading. Forward-Port-Of: odoo/odoo#218991
Point of Sale no longer repeatedly checks IoT device connection status in the background. This reduces database activity and should improve efficiency for stores using IoT-connected hardware without changing day-to-day workflows.
Original PR description
In order to reduce the amount of search reads from the pos to the database we removed the status loop running to check if devices are still connected to the IoT Box.
Resolved issues and error corrections
Quote PDFs now correctly reflect quotation template changes when documents are removed. This prevents outdated header or other template documents from still appearing after they have been deleted, 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#219089 Forward-Port-Of: odoo/odoo#213206
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 bug was fixed in Odoo's core template rendering so items are no longer skipped when a template combines conditional content with comments. This helps prevent missing content in generated pages or documents and improves reliability for users without changing business workflows.
Original PR description
Forward-Port-Of: odoo/odoo#212159
This fixes an unstable automated test around chat conversations appearing in the chat hub. It helps keep validation runs reliable by ensuring the Discuss app is fully loaded before checking whether chat bubbles should appear.
Original PR description
Before this commit, discuss test "Show conversations with new message in chat hub (outside of discuss app)" failed non-deterministically on runbot with the following error: ``` Failed to find 0 of…
Before this commit, discuss test "Show conversations with new message in chat hub (outside of discuss app)" failed non-deterministically on runbot with the following error: ``` Failed to find 0 of ".o-mail-ChatBubble[name='Dumbledore']" (Timeout of 3 seconds). Found 1 instead. ``` The test checks that new conversations spawn in chat hub on new message when outside of discuss app. At some point, it opens discuss app and then simulate a user posting a new message. When leaving the discuss app we should not expect a chat bubble. The error above says that there's actually a chat bubble when there shouldn't be. The `await openDiscuss()` gives the impression that this waits enough time for discuss being open, but this only awaits the action service doAction() method, which doesn't necessarily mean the client action UI is fully loaded and store has exact flag `discuss.isActive`, which is essential for a new message posted being considered inside the discuss app. This commit fixes the issue by ensuring discuss app is loaded after `openDiscuss()` with `[data-active]`: this data attribute matches the flag `discuss.isActive` which is set reactively from rendering of `discuss_client_action`. Also the handling of chat window / bubble to open is handled with bus notification "discuss.channel/new_message". This is no the same bus notification that changes the counter (`mail.record/insert`), so asserting presence of counter in discuss sidebar doesn't mean the handling of chat window / bubble to open has been performed. Test had race condition to open chat bubble just after openFormView. This commit fixes it by opening the conversation in discuss app and awaiting message is loaded. This should give enough confidence that logic to auto-open chat window / bubble has been performed and decided to not open the chat window / bubble as expected. Fixes runbot-error-230138
This fix stops editing history records from being written to directly, avoiding failures when content is copied or duplicated. It helps keep website editor history data consistent and reduces the chance of copy-related errors.
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 update fixes a Contacts test that could fail when nightly checks run with only one app installed. It ensures the test has a company country available, improving reliability of automated quality checks without changing user-facing behavior.
Original PR description
**PROBLEM** `test_vat_label_string` fail on nightly test **CAUSE** `self.env.user.company_id.country_id` is empty because: - we don't load demo data by default starting from 18.3 - we installed only one app, so the module that sets the default company country (there must be one since runbot non-nightly tests passed) isn't installed. **FIX** set the country to US in the test, so we have a country to work with. see https://runbot.odoo.com/odoo/error/229770
This corrects inconsistent Spanish tax mappings used with fiscal positions. It helps ensure the right taxes are applied in Spanish accounting scenarios, reducing configuration errors for affected companies.
Original PR description
In this [commit](https://github.com/odoo/odoo/commit/8b539c1f303f1b49916c29190c11dcf2cab57d2c) taxes were mapped with fiscal positions but some taxes had inconsistencies. This PR aims to fix that mapping inconsistencies for ES. TaskID:4951601 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix adds missing translated report names for document types in the Argentina, Chile, Ecuador, and Peru localization modules. It helps ensure locally required reports display the correct business-friendly names for users in those countries.
Original PR description
opw-4659964 opw-4947238 opw-4953184 Forward-Port-Of: odoo/odoo#219889
Report tables now keep quantities on one line while allowing long units of measure to wrap. This prevents long unit names from squeezing or cutting off other important report details on invoices, sales, stock, and delivery documents.
Original PR description
*: l10n_gcc_invoice,l10n_it_stock_ddt,sale,stock,web [1]: https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d Issue: [Commit](https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d) introduced a `text-nowrap` on the quantity column, this unnecessarily crops the other columns if we use a long UoM. This commit adds a max-width to the UoM column and applies the text-nowrap to the quantity only, letting the long UoM wrap if too long. task-4478718 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219129 Forward-Port-Of: odoo/odoo#194389
Creating a user from an employee no longer crashes when the employee has an invalid work email. This prevents an error screen and makes the HR user creation flow more reliable for staff records that need email correction.
Original PR description
A traceback occurs when the employee's work email is invalid and a user is created via the Create User action. Steps to reproduce the error: - Install ``hr`` module - Create a new employee > Add a name > Work Email: test > Save - Actions > Create User > Confirm Traceback: ``` NotNullViolation null value in column 'login' of relation 'res_users' violates not-null constraint ``` https://github.com/odoo/odoo/blob/af701b3e5bd9106c6ccea5b4a59b9e79424b3a26/addons/hr/models/hr_employee.py#L360-L370 When an employee's work email is invalid, ``tools.email_normalize(employee.work_email)`` returns ``False``. As a result, the ``login`` field becomes ``False``. So, Attempting to create a user with a ``False login`` value leads to the above traceback. sentry-6685198779 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The partner invoicing tab now keeps the General section, including bank details, visible for basic invoicing users. Advanced accounting fields are hidden unless the full accountant module is installed, reducing confusion and showing users only the options relevant to their access level.
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
Fixed an issue where activities configured on reconciliation models were not being added to the related bank statement lines. This ensures follow-up tasks are created as expected when a matching reconciliation rule is triggered, helping accounting teams avoid missed actions.
Original PR description
On a reco model, you can set an activity that should be applied on the statement line where the reco model is triggered. Before this commit the activity was not set. task-4954201
This fix updates the description shown for subscription products that are goods invoiced based on delivered quantity. It helps users see accurate guidance when configuring subscription products, reducing 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 point of sale deposit flow now prevents users from validating a customer deposit with a zero amount. Instead of causing an error screen, the system shows a warning so cashiers can correct the amount and continue smoothly.
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 Forward-Port-Of: odoo/enterprise#87709
This change updates an automated test for SEPA direct debit payment reconciliation to match the intended behavior when entries are still in draft. It helps keep quality checks reliable so future updates do not accidentally disrupt payment processing workflows.
Original PR description
See community commit for details. Forward-Port-Of: odoo/enterprise#87772
This fix prevents an error when saving a Helpdesk ticket after all tags are removed. Teams using tag-based automatic assignment can now update tickets without interruptions, improving reliability for support agents.
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
This fix prevents users from running into an access error when updating activities related to mail and VoIP workflows. It helps keep activity management reliable for teams using Odoo communications features.
Original PR description
this is the test for this fix : https://github.com/odoo/odoo/pull/212769 opw-4778418 Forward-Port-Of: odoo/enterprise#88999
The Dutch reports settings page now reliably shows the SBR certificate option. This prevents administrators from missing an important configuration setting needed for 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 users could encounter an error when opening the On Hand inventory view from a product added to an approval request. The approval screen no longer carries over a product search setting that disrupted the inventory view, so stock information displays as expected.
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
This update adjusts an internal subscription billing test so it no longer depends on a specific recurring invoice process. This helps ensure the test remains valid for deployments that customize how subscription invoices are generated, without changing customer-facing behavior.
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
This fix prevents an error when viewing technical data for product variants while the POS pricer feature is installed. It ensures the pricer display price always has a safe default value, avoiding unexpected crashes for users managing products.
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 banking section on partner forms. This fixes a visibility issue while keeping advanced accounting settings 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
Related 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