Thursday, June 26, 2025
16 changes · 18.0
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
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