Thursday, June 26, 2025
31 changes
11 changes
Resolved issues and error corrections
This fix ensures text highlights appear in the correct position when selected content includes a line break. It improves the visual reliability of the website builder so users can apply highlights without unexpected misalignment.
Original PR description
Steps to reproduce: - Go to the website builder in edit mode - Select "We build great products ... to optimize their performance", the goal here is to have a `<br>` in the selection - Highlight the selection | Expected behaviour | Current behaviour | |--------|--------| |  |  | | Highlights are well positioned | The highlights SVGs are not well positioned, the br shift everything |
This fix ensures the website editor's link popover closes when users click elsewhere, such as another menu or top bar item. It prevents stale popovers from staying on screen and makes editing website navigation feel cleaner and less confusing.
Original PR description
Before this commit clicking on certain elements with a link popover open would not cause the link popover to close. Steps to reproduce: - go to the website homepage - open the editor - click on any top menu links like Home or Contact Us - click on the user dropdwon in the topbar (usually Administrator) - the popover from the first click is still open After the change clicking anywere that's not the popover's current link will cause the popover to close.
The IoT printer list now consistently keeps the same printer when duplicate printers share the same IP address and device ID. This prevents printers from appearing or disappearing randomly in the device list, improving reliability for users managing connected printers.
Original PR description
There was a flaw in the printer deduplication logic that meant that in the case where we have two printers with the same IP and the same device-id, the printer that was returned could change randomly with each `get_devices` call. The result was the printers appearing and disappearing randomly in the device list. We fix this by sorting the list of printers first. If multiple printers could be chosen, we take the first one based on identifier. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures Romanian electronic invoicing only searches invoices and bills within the relevant company. It helps prevent records from other companies from being included in multi-company environments, improving accuracy and data separation.
Original PR description
Add the company to the domain to avoid searching invoices/bills from other companies. task-####### --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an internal automated test so it works correctly when only the Purchase Stock app is being tested. It ensures a related feature is available before checking extra behavior, helping keep future updates reliable without changing day-to-day user workflows.
Original PR description
This commit fixes the `test_move_description` introduced in odoo/odoo#177390. The test failed in single app tests because part of the functionality depended on the existence of `product_matrix` module. This commit makes sure that the module is installed when checking for those extra parts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could occur when users grouped records by custom property fields in web views. The change helps reports and grouped lists load reliably when property-based fields are used, and adds test coverage to prevent the issue from returning.
Original PR description
We get a KeyError in `self._fields[groupby_spec.split(':')[0]]` in the `_open_groups` when we group by a property field because groupby_spec contains a property path (properties.property_name).
Fix it and add a test for it.This fix restores a consistent visual appearance for animated text options in the website builder after a recent redesign. It also makes highlighted text options look more aligned with the animated text controls, improving clarity for users editing website content.
Original PR description
With the redesign after the initial website builder refactor, the appearance of option for animated text was broken: it mixed light on dark and dark on light elements. After the initial website builder refactor, the appearance of the option for highlighted text was a bit weird. This commit changes it to be closer to the animated text option. Redesign commit: 0bbf24a4b0d6d6160e1964f18391f86b4513fc72 Website refactor: 9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4367641
This update corrects a test setup issue for electronic invoicing so nightly checks use the intended company registration number. It helps keep automated quality checks reliable and prevents false failures in the community test environment.
Original PR description
The TestUblBis3 tests are failing in the nightly community runbot because the company_registry is not set on the company, causing the peppol_eas and peppol_endpoint to use the company's VAT number rather than its company_registry number. runbot-227638
The website editor once again shows the size of a selected image. This helps content editors quickly check image weight while building pages, supporting better page performance decisions.
Original PR description
When converting the website builder to `html_builder`, the tag that displayed the selected image's size was forgotten. This commit re-introduces it. task-4367641
Empty HTML property fields now display as blank in list views instead of showing the word "False". This makes records easier to read and avoids confusion for users reviewing lists with optional HTML content.
Original PR description
Bug === Create an HTML properties, and don't set a value. It is displayed as "False" in the list view, while it should be an empty string. Change the HTML formatter, so it's consistent with the text formatter. Task-4896271
Website forms with many conditional visibility rules now load much faster. The change avoids repeated recalculation of the same form information, reducing delays for visitors and improving the form experience.
Original PR description
**Problem** Before this commit, the `Form` interaction handled visibility calculations inefficiently. Large forms making massive use of visibility conditions could take seconds to be loaded. The function `getFormDataIncludingDisabledFields` (see [1]) was called more often than necessary, leading to the entire form being cloned for every single entry being checked. **Solution** This commit introduces a simple caching mechanism for the form data. The cached value is updated via `getFormDataIncludingDisabledFields` only at the start of the interaction and when receiving user input (debounced). [1] https://github.com/odoo/odoo/pull/213643 task-4367641
4 changes
Resolved issues and error corrections
This fix removes extra blank separators from an address used in Ecuadorian electronic delivery guide tests. It helps keep automated checks aligned with the expected address format, reducing false test failures and improving release reliability.
Original PR description
The address formatting in test case included redundant separators, resulting in: `Libertador Simón Bolívar 1155 - - Quito - Ecuador` This has been corrected to remove the empty segment, for a valid address format: `Libertador Simón Bolívar 1155 - Quito - Ecuador` reference PR : https://github.com/odoo/odoo/pull/215562
16 changes
Resolved issues and error corrections
This fix prevents invoice line units of measure from being changed unnecessarily when related Kenya localization logic is triggered. It helps avoid incorrect invoice details and keeps accounting calculations, such as quantities and discounts, consistent.
Original PR description
This solves a runbot error occuring on the single l10n trigger for Kenya. Cause: l10n_ke_edi_oscu_stock adds a [compute…
This solves a runbot error occuring on the single l10n trigger for Kenya. Cause: l10n_ke_edi_oscu_stock adds a [compute function](https://github.com/odoo/enterprise/blob/18.0/l10n_ke_edi_oscu_stock/models/account_move.py#L166) to the `product_id` field on invoice lines. The ORM triggers computes for all items in the chain - irrespective of whether the value was changed or not. Therefore, when the Kenya modules are installed, the `_compute_product_uom_id` function is triggered - which changes the unit of measure. Solution: Improve the account.move.line's `_compute_product_uom_id` to only change the UoM when necessary. Considered Alternatives: - Whilst the l10n_ke_edi compute functions are not ideal - it was done because there was no PO/Bill matching feature at the time. Ideally these computes should be removed - but that would impact the stable policy and may have knock on effects. - changing the tests would simply hide issues arising from uom's and discounts. runbot-75230
Kenyan electronic stock reporting no longer changes calculation behavior unless a Kenyan vendor bill is actually being imported. This prevents unintended effects on regular accounting workflows while preserving the intended import behavior.
Original PR description
…KE vendor bill
This update fixes an error that could occur when changing selected bank reconciliation lines if no lines were properly selected. It helps users continue reconciliation work without unexpected interruptions.
Original PR description
This fix the traceback where selected lines is undefined and so when going to changeInSelectedMoveLine the check on the length crashes opw-4879020 opw-4892495 opw-4895837
This fixes commission achievement reporting so it no longer depends on a sales team field that was removed earlier. It helps prevent reporting errors and keeps commission calculations aligned with the current data model.
Original PR description
Since https://github.com/odoo/enterprise/pull/80888/files#diff-c5cbf70467370daa35b2be432bf26a385b61430164e32347906d6751209bcfa8L14 the team_id field is no longer available on the sale.commission.achievement model. taskid: 4844215
This fix prevents an unnecessary error from appearing when a direct call connection is closed while the system is switching to a fallback connection method. It improves call reliability by avoiding misleading tracebacks, with no expected change to normal user behavior.
Original PR description
Before this commit, there could be a race condition where the peer connection gets closed while an offer is being negotiated. This could happen for example when offers are being sent to establish a p2p connection and the fallback to the SFU kicks in and clears the connection. This would lead to a traceback but no functional issue.
This fixes an unreliable bus monitoring test that could fail when the browser reported no network connection. The connection status is now handled consistently regardless of whether the issue comes from the network, client, or server, helping keep automated validation stable.
Original PR description
This commit fixes the non-deterministic `connection considered as lost after failed reconnect attempt` test. The monitoring service does not show the connection as lost when the navigator online property is false which makes this test fail when network is not available. This check makes no sense, it doesn't matter if we lost the connection because of a server/client error or because the network is down. This commit removes this check on the "online" navigator property and fixes this test. fixes runbot-226892 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
Customers using self-ordering are now sent back to the product page if their cart is empty instead of being allowed to continue to payment. This prevents checkout errors and creates a smoother ordering experience.
Original PR description
Before this commit: ================ Users could attempt to proceed with payment even when the cart had no orderlines After this commit: =============== If the cart is empty, the user is automatically redirected back to the product page, preventing the error and ensuring a smoother user experience. Task-4880984
Fixes an issue where deleting a signature could leave behind an invisible signature area that caused newly typed content to be placed in the wrong container. This makes editing emails or documents with signatures behave more predictably after users clear signature content.
Original PR description
### Steps to Reproduce: - Insert a signature (e.g., using /signature). - Press Ctrl + A, then press Backspace — signature content is removed. - Press Backspace again — o-signature-container div remains. - Any new content is inserted inside the empty o-signature-container. ### Description of the issue/feature this PR addresses: - Empty signature containers were not converted to base containers on backspace. ### Desired behavior after PR is merged: - A predicate was added that checks for empty blocks of types: pre, heading, blockquote, and signature. This ensures empty signature containers are also converted to base containers on backspace. task-4793734 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Merging purchase orders that include note or section lines now completes without triggering an error. This prevents users from being blocked when consolidating purchase orders, improving reliability in the purchasing workflow.
Original PR description
Steps to reproduce the bug:
- Create two purchase orders and add a note
- Try to merge them
Problem:
A traceback is triggered:
```
ValueError: AttributeError("'int' object has no attribute
'total_seconds'") while evaluating 'if records:\n
action = records.action_merge()'
```
opw-4890120Sales orders that create multiple service projects now reuse the intended analytic account instead of creating extra ones. This keeps project accounting cleaner and avoids redundant records when timesheets are enabled.
Original PR description
Prior to this commit, when a sale order was created with some service products configured to generate projects at SO confirmation, we would generate an analytic account per project instead of just one for all the generated projects. As a result, we would get redundant analytic accounts, which is not desirable. This is because we were creating the new projects without specifying the analytic account that would be set to it (because we would assume that the project would be first created without AA, then we would populate it later). The issue is that if `hr_timesheet` is installed, every new project is by default timesheetable, so that it generates an AA automatically at creation of the project (see `create()` method of `hr_timesheet`) To mitigate that, we now specify the analytic account to be used when creating the projects that have to be generated from `_timesheet_create_project()`. version-18.0 task-4854817
The analytic distribution table now remains usable on mobile devices when many columns are present. Users can horizontally scroll the table instead of having content hidden, making expense and accounting workflows easier on small screens.
Original PR description
The analytic distribution table is not scrollable on mobile devices, resulting in hidden content and an unusable layout when there is horizontal overflow due to many columns. We added…
The analytic distribution table is not scrollable on mobile devices, resulting in hidden content and an unusable layout when there is horizontal overflow due to many columns. We added style="max-width: 100vw;" to table-responsive wrapper to enable horizontal scrolling on smaller screens. Steps to Reproduce: 1. Install the Expenses and Accounting modules. 2. Go to Settings → Search for Analytic Accounting → Enable it. 3. Add multiple analytic plans with sufficient data to cause horizontal overflow. 4. Navigate to Expenses → Open any record. 5. Open Inspect in your browser → Switch to mobile view. 6. Click on Analytic Distribution. <details><summary>Images</summary> <p> before FIX:  after FIX:  </p> </details> Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4805590) opw-4805590
Removing a linked image in the HTML editor now properly closes the link popover and cleans up the empty link. This prevents a confusing leftover popup and keeps edited content cleaner.
Original PR description
Before this commit: 1. Insert an image and add a link to it. 2. Click on the image and remove it by clicking the remove button in the toolbar. 3. The link popover remains open and only disappears after clicking away. This occurs because the default behavior of a link with text preserves the link element to allow the possibility of completely changing the label of the link directly in the editing area. After this commit: The link popover is properly closed when an image link is removed, and the link element is removed when the link element associated with the image is empty. task-4805029 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Colombian electronic mandate module now clearly requires the Colombian DIAN module it depends on. This prevents installation, upgrade, or uninstall errors when companies use Colombian electronic invoicing features.
Original PR description
The module `l10n_co_edi_mandate` [inherits](https://github.com/odoo/enterprise/blob/ce9eed675db4de3bcd1b283688c5c44d2e1ecf12/l10n_co_edi_mandate/models/account_edi_xml_ubl_dian.py#L5) a model defined…
The module `l10n_co_edi_mandate` [inherits](https://github.com/odoo/enterprise/blob/ce9eed675db4de3bcd1b283688c5c44d2e1ecf12/l10n_co_edi_mandate/models/account_edi_xml_ubl_dian.py#L5) a model defined in `l10n_co_dian` module, and the workflow in the module also depends[[1]](https://github.com/odoo/enterprise/blob/ce9eed675db4de3bcd1b283688c5c44d2e1ecf12/l10n_co_edi_mandate/models/account_invoice.py#L9)[[2]](https://github.com/odoo/enterprise/blob/ce9eed675db4de3bcd1b283688c5c44d2e1ecf12/l10n_co_edi_mandate/models/product_template.py#L8) on DIAN being installed. Both modules have the same dependency `l10n_co_edi` and are autoinstalled. This can easily break if the user chooses to uninstall the dian module. The module will fail to install if dian is not installed. The uninstall of the dian module will also cause an error if this module is installed. The upgrade will fail if the user has dian uninstalled (edi_mandate is a new module and will try to autoinstall) This fix makes the dependency explicit.
The Philippine BIR 2307 XLS export checks now reflect the required ZIP code field and use the correct tax description for the nature of payment. This helps ensure withholding tax reports match regulatory expectations and reduces the risk of incorrect export validation.
Original PR description
The BIR 2307 XLS export was missing the `ZIP_code` and incorrectly showing the `nature` of payment from the invoice line instead of the tax description. In this commit: --- - updates the tests to include the `zip_code` column and fetch the correct `nature` from the tax description. - adjust name fields to reflect `individual` vs `company` partner logic. task-4880921 community- odoo/odoo#214940
PDF versions of accounting reports now display correctly when using right-to-left languages, even with many columns. This prevents report content from being cut off, making printed Aged Payable and similar reports usable for RTL-language users.
Original PR description
Steps to reproduce: - Set language to RTL Orientation - Go to Accounting > Reporting > Aged Payable - Add multiple columns to report - Print as PDF Issue: When enough columns have been added to the report, the report will overflow the right side of the page Cause: Wkhtmltopdf does not correctly shrink the table if the direction is specified on the body of the document opw-4746361
Recurring field service tasks created from subscription sales now keep the related sales order item. This helps teams maintain accurate links between repeat service work and the customer order, avoiding missing sales context on follow-up tasks.
Original PR description
Steps to reproduce
- install `industry_fsm_sale_subscription`
- go to settings -> enable `recurring task`
- create product with following configs :
* enable `subscription`
* product type : `service`
* create on order `task`
* project `Field service`

- create a SO with this product
- go to `Tasks` smart button
- select the task and mark it done
- open the second task, from "recurring tasks" smart button
Obervation: in newly created task `Sales Order Item` is not linked
Issue:
- after this commit odoo/enterprise@be201cd ,sale fields are not copied for fsm task. while this is true for simple tasks, we would require such fields to be copied for recurrence tasks
Fix:
- allow sale fields to be copied for recurring tasks
opw-4875830Fixes an issue in Barcode receipts where removing serial-numbered product lines could remove the wrong serial number. This prevents valid serial numbers from being incorrectly marked as already used when warehouse staff re-enter them.
Original PR description
Steps to reproduce: - Install Purchase, Stock and Barcode apps - Create a product tracked by serial number - Create a PO of this product and confirm it (demand 3) - Open Barcode application for the PO's receipt - Start entering serial numbers for the 3 products - For each line, use the decrement button and remove all 3 lines - Make sure the last removed line is not the first scanned serial - Re-enter the serial number of the last removed line Issue: The parent line of the 3 sublines has the lot_name fixed on the first scanned serial_number. So when decrementing the last_line, it will always use the virtual_id of the first serial_number scanned, leading to decrementing the wrong serial number. It starts showing that the next scanned number is already used, because it wasn't properly removed in the first place. opw-4646765
Fixed an issue that could cause translated referral sharing links to fail. This helps employees share referral links more reliably across languages.
Original PR description
Issue: Prior to this commit, a translation issue occurred due to the use of a list comprehension. The _get_translation_source function attempts to scan the local variables, but in the context of a list comprehension, only variables defined within the comprehension are accessible. As a result, variables like uuid and cursor were not available to the _get_lang function, ultimately leading to an error. Fix: Replaced the list comprehension with a standard for loop to ensure proper access to local variables. runbot-98198
The timer now correctly resumes from the paused point instead of counting the time spent paused. This helps users and managers rely on accurate time tracking for work logs, billing, and productivity reporting.
Original PR description
Before this commit, when a timer was paused and then resumed, it incorrectly included the paused duration in the time. This commit ensures the timer resumes from the paused time using the initial offset, resulting in accurate time tracking. task-4734681