Daily updates from Odoo
Tuesday, February 3, 2026
62 changes · saas-19.1
New functionality added to Odoo
This update introduces demo data for the Swiss HR Payroll Localization, enabling easier testing and demonstrations of the payroll functionality. The data includes a sample company, employee, and a year's worth of payslips, providing a realistic scenario for understanding the Swiss payroll process. This supports internal testing and showcases the localization's capabilities.
Original PR description
This commit adds demo data for the Swiss HR Payroll Localization to facilitate testing and demonstration of Swiss payroll. The demo data includes the company setup, employee with relevant details, and 1 year of payslip history for that employee. Task: 5870506 Forward-Port-Of: odoo/enterprise#105872
This update introduces a new field for 'CPV code' on products, addressing a requirement for B2C invoices in Romania. When enabled, the module automatically adds the CPV code to the RO-CIUS XML generated for invoices, ensuring compliance with local regulations. This improves data accuracy for Romanian customers.
Original PR description
In This PR: - We add a new module to add a new field 'CPV code' in the product. - Till now, in Odoo, customers can't input that CPV identification number on products, and the field is always left empty. That's an issue with B2C invoices, where the field is mandatory. - If the module is installed and a product with a CPV category is set on an invoice, we add the value of the CPV code in the RO-CIUS XML generated on an invoice. Task [link](https://www.odoo.com/odoo/project.task/5416833) task-5416833 Forward-Port-Of: odoo/odoo#240219
This update introduces a new test suite specifically designed to verify the integration with the Nilvera Turkish e-invoice API. Previously, there were no automated tests for this critical component, and this addition ensures proper functionality and reliability of the Turkish e-invoice module. This improves the overall stability and accuracy of the system.
Original PR description
There are no tests for the Turkish e-invoice module. This commit adds that. Task ID: 4655864 Forward-Port-Of: odoo/odoo#239359 Forward-Port-Of: odoo/odoo#216179
This update extends the tax reporting capabilities within Odoo Enterprise to include EC Sales Lists and Intrastat returns for key European markets. Specifically, it supports Austria, Germany, Italy, Poland, Portugal, and The Netherlands, ensuring compliance with local regulations and improving reporting accuracy for businesses operating in these regions.
Original PR description
Following the implementation of the Tax returns feature in 18.3 which was focused on the general implementation and Belgium, we want to add the specification for other country and in this case Austria, Germany, The Netherlands, Italy, Poland, and Portugal. Adding EC sales list, Intrastat specific deadlines and periodicities. task-4776236 Forward-Port-Of: odoo/enterprise#97615
Enhancements to existing features
This update enhances the user experience by adding a cursor pointer to the headers of statement summaries in the accounting module. This allows users to easily navigate and explore their financial data, improving usability and efficiency.
Original PR description
This improves the user experience by indicating that the headers are clickable. No task ID Forward-Port-Of: odoo/enterprise#105078 Forward-Port-Of: odoo/enterprise#105023
Resolved issues and error corrections
The portal payment screen now displays a warning message when no payment providers are available, preventing the screen from scrolling to the bottom when the 'Pay' button is clicked. This ensures a better user experience and clearly communicates to customers that payment options are unavailable.
Original PR description
The portal payment screen incorrectly scrolls to the bottom when the Pay button is clicked, but no payment methods or warning message are shown. This happens when no payment provider is published. This PR fixes the issue by ensuring the "no provider" warning message appears in all cases. task-5388313 Forward-Port-Of: odoo/enterprise#101632
This update ensures that dates sent to ECPay (a payment gateway) are correctly formatted in Taiwan's time zone. Previously, dates were stored in UTC, leading to errors when ECPay searched for invoices. This fix prevents invoice retrieval failures and ensures accurate processing.
Original PR description
sending to ECPay The date store in Odoo is in utc format, we need to convert it to tw time when sending the date to ECPay. The APIs are using the date to search for the invoices, if the date is not correct, it cannot find the invoices and return error. task-5884616 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#246504 Forward-Port-Of: odoo/odoo#246039
This update resolves an issue preventing the burndown chart from loading correctly in sample mode. The change ensures the necessary context is set for the chart's data retrieval, addressing a 'TypeError' error. This improvement ensures the burndown chart functions as expected across all Odoo environments.
Original PR description
The burndown chart embedded actions use action_id which bypasses the
Python method that sets required context (stage_name_and_sequence_per_id).
Without this context, the JS model makes RPC calls that fail in sample
mode when no project record is selected.
This change replaces action_id with python_method, following the same
pattern used by hr_timesheet for similar embedded actions.
Steps to reproduce:
1. Open Project app
2. Access burndown chart via embedded action without records
3. Sample mode triggers the crash
Current behavior: TypeError reading undefined field type
Expected behavior: Burndown chart loads with proper context
task-5347524
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-prThis update fixes a visual inconsistency in the live chat info panel. Previously, the 'Open Tickets' and 'Open Leads' section titles had a different font size than other sections. This change ensures a uniform and professional appearance for the live chat interface, improving the overall user experience.
Original PR description
**Description of the issue this PR addresses:** ------------------------------------------------ In the live chat info side panel, the "Open Tickets" and "Open Leads" section titles were displayed with a different font size compared to the other section titles. This created an inconsistent visual appearance in the info side panel. **Current behavior before PR:** --------------------------------- - "Open Tickets" and "Open Leads" titles use a different font size **Desired behavior after PR is merged:** ----------------------------------------- - "Open Tickets" and "Open Leads" titles use the same font size as other sections - Info side panel displays a consistent and uniform style **Task:** [5385392](https://www.odoo.com/odoo/project/1519/tasks/5385392) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244699
This update ensures Odoo correctly processes refund notifications from QFPay. QFPay recently changed the notification type for refunds, and this fix adjusts Odoo's system to recognize and handle these 'refund' notifications accurately. This ensures that refunds are processed correctly and reported accurately within Odoo.
Original PR description
QFPay changed the notify_type for refund notifications from "cancel" to "refund". https://sdk.qfapi.com/docs/common-api/async-notifications/ --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245834
This update resolves a crash that occurred when users selected taxes within Journal Entry items in the mobile view. The fix replaces a problematic widget with a standard one, ensuring tax changes are saved correctly and preventing the web client from freezing. This improves stability for mobile users.
Original PR description
**Steps to reproduce:** * Install the **Accounting** module. * Open a **Journal Entry** in mobile view. * Add a **Journal Item**, opening it in a form dialog. * Select a tax in the **Taxes Applied**…
**Steps to reproduce:** * Install the **Accounting** module. * Open a **Journal Entry** in mobile view. * Add a **Journal Item**, opening it in a form dialog. * Select a tax in the **Taxes Applied** field. * Click on the **Save and close** button. **Observed behavior:** * The web client crashes with `TypeError: Cannot read properties of undefined (reading 'resId')`. **Cause:** * The `autosave_many2many_tags` widget triggers `model.root.save()` immediately when a tag is selected. * When executing this save from within a transient dialog (common in mobile views), the client fails to correctly handle the record reload/synchronization leading to a crash when accessing `resId`. **Fix:** * Replace the autosave widget with the standard `many2many_tags` widget for **Journal Items** for form. * Tax changes are now kept locally in the dialog and saved only when the user explicitly saves and closes it. **Note:** * The crash happens when `autosave_many2many_tags` calls `model.root.save()` on a **new** `account.move` from within a dialog. * In QUnit tests, the mock server (`mockWebSave`) [1](https://github.com/odoo/odoo/blob/ca4d74c2a5d749ff8d41cd2fff80a73ba550a843/addons/web/static/tests/helpers/mock_server.js#L627). which creates records [2.](https://github.com/odoo/odoo/blob/ca4d74c2a5d749ff8d41cd2fff80a73ba550a843/addons/web/static/tests/helpers/mock_server.js#L1936) in-memory and does not trigger form reloads or component destruction. * As a result, the crash cannot be reproduced in tests. opw-5497342 Forward-Port-Of: odoo/odoo#246699 Forward-Port-Of: odoo/odoo#246084
This update resolves a warning that occurred when updating the Chart of Accounts in the l10n_ie module. The issue stemmed from updating the Chart of Accounts too late – after the main Odoo modules had loaded. Moving the update to an ‘end-script’ ensures it happens when all modules are ready, preventing the warning and maintaining system stability.
Original PR description
We faced a warning because this update doing a try_loading is called in `post-` scripts (after the module is loaded) and not in `end-` scripts (when all modules are loaded). All l10n_* modules were changed in this PR: https://github.com/odoo/odoo/pull/183359 Regarding the changes in this PR related to Registry: https://github.com/odoo/odoo/pull/186467 see: https://github.com/odoo/odoo/pull/222186 upg-3828301 **Reference Image** <img width="1769" height="39" alt="2026-01-28_18-44" src="https://github.com/user-attachments/assets/8aa5f213-b150-403b-b2a1-0bc9ed4a4ccc" /> 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#246541
This update resolves an issue where customer invoices sent via Peppol were generating duplicate attachments, leading to a cluttered user experience. The fix ensures that attachments are updated instead of created anew, preventing this duplication and streamlining the invoicing process. This improves the clarity and efficiency of invoice delivery.
Original PR description
When sending a customer invoice via Peppol, the system creates duplicate attachments (4 instead of 2 expected), cluttering the chatter and the attachment sidebar. This commit: - Implements a search-and-update logic for attachments to ensure idempotency (updates existing instead of creating duplicates). task-5438951 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#246345 Forward-Port-Of: odoo/odoo#241130
This update resolves an issue that prevented invoices with specific attachments from being correctly imported into Odoo. The problem stemmed from a double decoding of base64-encoded data, causing an error. This fix ensures invoices with attachments are now imported successfully, improving the reliability of invoice processing.
Original PR description
When importing invoices, some text files encoded in `<Attachments>` cause a traceback and prevent the XML from importing. This error appears to be the direct result of decoding the text files twice, introduced in PR #212726. Steps to reproduce: 1. Install `l10n_it_edi`. 2. Create a customer invoice for Biscotti Oslengi, then send the xml to the SDI. Download the XML file. 3. In a text editor, replace the base64-encoded PDF information inside `<Attachments>` with `VGhpcyBpcyBhIHRlc3Qgc3RyaW5nLg0K`. This is the base64 encoded string `"This is a test string.\r\n"`. 4. Change the `<FormatoAttachment>` from `PDF` to `TXT`. 5. Upload the edited invoice file to Accounting > Customers > Invoices. 6. The exception `Invalid base64-encoded string` is raised. [opw-5388360](https://www.odoo.com/odoo/unassigned-tasks/5388360) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246220
This update fixes an issue where the total quantity and value were incorrectly calculated in the Avco report when the report was displayed in multiple pages. The fix prevents errors when processing records not visible on the current page, ensuring accurate reporting of inventory values. This improves the reliability of the Avco audit report.
Original PR description
**Problem:** when there is multiple pages for the avco reports the total value and quantity are not correctly computed **Steps to reproduce:** - create an avco storable product with a cost of 10 -…
**Problem:** when there is multiple pages for the avco reports the total value and quantity are not correctly computed **Steps to reproduce:** - create an avco storable product with a cost of 10 - create and validate 3 in moves for a quantiy of 1 each - navigate to Inventory/ Stock and search your product - click on the unit cost - (see how the total quantity is 3 and total value is 30) - change the view to display only the first 2 records (write 1-2/4 on the top write) **Current behavior:** the total quantity is now 2 and total value 20 **Expected behavior:** it should still be 3 and 30 **Cause of the issue:** inside _compute_cumulative_fields, we start with a total_value and total_quantity of 0, then those variables are increased or decreased by each record in records https://github.com/odoo/odoo/blob/89cc95266fa0d9a0fd4caae9abe1effbfea1a41a/addons/stock_account/report/stock_avco_audit_report.py#L94-L104 but records is computed based on self which contains the lines displayed on the view https://github.com/odoo/odoo/blob/89cc95266fa0d9a0fd4caae9abe1effbfea1a41a/addons/stock_account/report/stock_avco_audit_report.py#L91 **fix** I need to add an if statement to avoid writing on the records not displayed on the view because this causes an access_error opw-5421925 Forward-Port-Of: odoo/odoo#244070
This update resolves an issue where auto-batching wasn't triggered for deliveries with partially assigned moves. The fix ensures that a batch transfer is created automatically when a delivery is ready, regardless of the initial stock levels, improving inventory management efficiency. This change corrects a bug impacting delivery processing.
Original PR description
### Steps to reproduce: - In the settings enable: Batch, Wave & Cluster transfers - Inventory > Configuration > > Warehouse Management > Operation types - Enable Auto-batches, Batch grouping by…
### Steps to reproduce: - In the settings enable: Batch, Wave & Cluster transfers - Inventory > Configuration > > Warehouse Management > Operation types - Enable Auto-batches, Batch grouping by partner on Delivery orders - Create and confirm a delivery for 2 units of a storable product that you do not have in stock. - Change the quantity of the move to 1 unit #### > The delivery is not auto-batched ### Expected behavior: As the delivery becomes ready a batch transfer containing your delivery should be created. This is by the way what happens if you had at least 1 unit in stock when you confirm the deliver. ### Cause of the issue: The auto-batching is suppose to be applied on assigned pickings via the `_find_auto_batch` method: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/stock_picking_batch/models/stock_picking.py#L194-L198 That being said a picking is only batchable if it is Ready hence his state is 'assigned'. Now, the issue is that the `_find_auto_batch` is only callable in two places in our workflow: First at confirmation: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/stock_picking_batch/models/stock_picking.py#L138-L142 Which will fail in our case but wokrs in the use case where you have at least one unit in stock since the delivery is respectively not "assigned" or "assigned" at this point. And, else, wehn the sate of a move of the delivery is assigned: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/stock_picking_batch/models/stock_move.py#L30-L38 Now, the only issue with this call is that the picking becomes assigned if a move is partially assigned: https://github.com/odoo/odoo/blob/604d07ab324caa5f3aa6f3baa9902c2137ea24db/addons/stock/models/stock_picking.py#L841-L845 But since the move is not "assigned" but only "partially_vailable" this will not trigger a call of the `_find_auto_batch`. opw-5441718 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246164 Forward-Port-Of: odoo/odoo#245542
This update resolves a technical issue causing live chat tabs to occasionally freeze or consume excessive CPU resources. The fix prevents conflicting updates to local storage, ensuring a smoother and more reliable chat experience for users. It addresses a race condition related to how live chat data was being synchronized across tabs.
Original PR description
A bad pattern has been used for some time in discuss for fields stored in localStorage. The field updates via the `onUpdate` function in the current tab and writes to localStorage. Other tabs use the `storage` event to update their field. This pattern can cause race conditions, leading to loops, high CPU usage, and freezes. When a tab receives a storage event, it may write back an outdated value, triggering further writes and conflicts across tabs. Storage events should be treated as read-only. Only user actions should update the local storage. This commit fixes the problematic fields. 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#246588 Forward-Port-Of: odoo/odoo#245717
This update resolves a problem with a test related to image saving on the website. Previously, the test was unreliable because the image modification process wasn't consistently triggered. The fix ensures the test runs predictably by waiting for the necessary image update to complete, improving the stability of our website tests.
Original PR description
The purpose of this commit is to fix the non-deterministic test “Save image with correct parameter.” There is no guarantee that ‘modify_image’ will be executed during the next animationFrame. Solution: Use “expect.waitForSteps” to wait for “modify_image” to be executed. error-238377 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#246788
A recent test for adding cover images to the website was occasionally failing. This was caused by delays in loading images through a system process, which exceeded a pre-set time limit. This update ensures the test consistently passes by waiting for the image loading process to complete, improving website image functionality.
Original PR description
The test "Add image as cover" was failing intermittently due to image loading depending on an RPC with an unpredictable duration. This could exceed the 200ms timeout used in waitFor. Use `waitSidebarUpdated`` to wait for the ongoing action to finish and ensure the sidebar is fully updated. error-Add image as cover 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#246553 Forward-Port-Of: odoo/odoo#246470
This update resolves a technical problem in Odoo's API documentation that prevented accurate representation of list type annotations in Python 3.10. The change ensures that list type definitions are correctly formatted for documentation, improving the clarity and reliability of the API reference.
Original PR description
In python 3.10, `parse_signature` causes some issues with some of the newer type annotations (eg: `list[int]`). This broke several test cases in api_doc where signatures were stringified except when converted from `Self`, `models.BaseModel` and `models.Model`. This commit forces those type aliases to be replaced by the string `'list[int]'`. runbot-237792 Forward-Port-Of: odoo/odoo#246563
This update resolves a visual bug in Firefox where the separator line below list headers would disappear at certain zoom levels when sticky headers were enabled. The fix ensures the list header border remains visible, improving the user experience and consistency across browsers.
Original PR description
In Firefox, the separator below the list header could disappear at certain zoom levels when using sticky headers. After this commit, the list header border will not disappear. Task-5249221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245405
This update resolves a testing issue by streamlining the dependencies for the hr_payroll_account_iso20022 module. It now relies solely on hr_payroll and account_iso20022, eliminating errors caused by an outdated dependency requirement. This ensures smoother testing and consistent functionality.
Original PR description
hr_payroll_account_iso20022 did not depend on hr_payroll_account but only on hr_payroll and account_iso20022. This was causing some errors in tests that were expecting hr_payroll_account to be installed. Runbot Error: 237797
This update resolves issues with the generation of XML invoices for HR EDI, specifically correcting an incorrect XML structure and improving error handling during payment reporting. These changes ensure accurate invoice processing and a more reliable user experience for users of the HR EDI module.
Original PR description
- Adjusting the hrextac xmlns to the updated one - Adjusting MER payment report button to not show incorrectly - Improving error handling for MER payment reporting task-none --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246654 Forward-Port-Of: odoo/odoo#246083
This update fixes a technical issue that was causing intermittent errors during the website tour setup. The fix ensures the system correctly waits for the main loading screen to disappear, preventing a confusing warning message and improving the overall tour experience for users. This resolves a stability problem.
Original PR description
`insertSnippet` has a step to wait for `o_loading_screen` to disappear, but it is querying the iframe inside the dialog instead of the main iframe. This issue causes the following undeterministic warning error: ``` should not have any "characterData", "remove" or "add" mutations in current step when you update the selection ``` Ensure we are waiting for the loading screen of the correct iframe. runbot-229803 Backport-Of: https://github.com/odoo/odoo/pull/246750 Forward-Port-Of: odoo/odoo#246819
This update resolves an issue that caused a display error when creating and previewing subscription quotations/orders. Specifically, the system was encountering a problem when accessing price information for subsections. This fix ensures a smoother and more reliable preview experience for users.
Original PR description
Steps to reproduce: ------------------- 1. Install sale_management with demo data 2. Create a new quotation/order and add a section and a subsection 3. Drag the subsection line above the section line…
Steps to reproduce:
-------------------
1. Install sale_management with demo data
2. Create a new quotation/order and add a section and a subsection
3. Drag the subsection line above the section line
4. Confirm it and click on Preview
Issue:
------
```python
Traceback (most recent call last):
The error occurred while rendering the template sale_subscription.subscription_portal_content and evaluating the following expression: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
Error while rendering the template:
AttributeError: 'NoneType' object has no attribute 'collapse_prices'
Template: sale_subscription.subscription_portal_content
Reference: 1713
Path: /t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]
Element: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
From: (1712, '/t/t', '<t t-call="portal.portal_layout"/>')
(1712, '/t/t/body/div[1]/div/div[2]/div[11]/div/t', '<t t-call="#{sale_order._get_name_portal_content_view()}"/>')
(1713, '/t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]', '<t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>')
```
Cause:
------
Since current_section is None in this case, it leads to the
above traceback when trying to fetch the collapse_prices value.
Solution:
---------
Convert subsection lines without a parent_id into section lines
to prevent the traceback.
Related enterprise PR: https://github.com/odoo/enterprise/pull/103686
opw-5367739
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#241634This update resolves a technical issue that prevented the subscription preview from displaying correctly for certain subscription types. The problem stemmed from how recurring products were being handled within the subscription setup, specifically related to section and subsection pricing. This fix ensures the preview renders accurately, improving the user experience.
Original PR description
Steps to reproduce: ------------------- 1. Install sale_subscription with demo data. 2. Create a new subscription and add a Section and a Subsection. 3. Add a recurring product (Invoice_policy =…
Steps to reproduce:
-------------------
1. Install sale_subscription with demo data.
2. Create a new subscription and add a Section and a Subsection.
3. Add a recurring product (Invoice_policy = 'order') and configure a recurring plan.
4. Confirm the subscription and click Preview.
Issue:
------
```python
Traceback (most recent call last):
The error occurred while rendering the template sale_subscription.subscription_portal_content and evaluating the following expression: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
Error while rendering the template:
AttributeError: 'NoneType' object has no attribute 'collapse_prices'
Template: sale_subscription.subscription_portal_content
Reference: 1713
Path: /t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]
Element: <t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>
From: (1712, '/t/t', '<t t-call="portal.portal_layout"/>')
(1712, '/t/t/body/div[1]/div/div[2]/div[11]/div/t', '<t t-call="#{sale_order._get_name_portal_content_view()}"/>')
(1713, '/t/div[4]/section[1]/div[1]/table/tbody/t[4]/t[11]/t[3]', '<t t-set="collapse_prices" t-value="current_section.collapse_prices or line.collapse_prices"/>')
```
Cause:
------
`_get_invoiceable_lines` does not treat subsection lines as children of their parent section.
As a result, `lines_to_report` contains a subsection without its corresponding section,
leaving current_section set to None and causing the traceback when accessing current_section.collapse_prices.
Solution:
---------
Ensure subsection lines are appended together with their parent section
when an invoiceable line is encountered
Related community PR: https://github.com/odoo/odoo/pull/241634
opw-5367739
Forward-Port-Of: odoo/enterprise#103686This update fixes an issue where certain Odoo records wouldn't open correctly in their default form view. The change ensures that records can be opened with other views enabled, providing a smoother and more flexible user experience. This resolves a technical glitch that was impacting how records are accessed.
Original PR description
Records of some models may not want to be shown in their form view by default. See related ENT PR for documents. We re-export to avoid patching order issues. In particular, this makes sure that if we are in the webclient, the chat window is opened before executing the "real" open. Task-5386466 Forward-Port-Of: odoo/odoo#246525 Forward-Port-Of: odoo/odoo#244289
This update refines how the HTML editor handles selections, particularly within nested editing contexts. The change resolves issues where nested edits could corrupt cursor states, ensuring consistent and reliable selection management across the editor. This improves the overall stability and usability of the HTML editor.
Original PR description
Summary: Refactor `preserveSelection()` to use a stack-based approach (`preservedCursors` array) instead of a single cursor reference. This allows nested calls to `preserveSelection()` to operate…
Summary:
Refactor `preserveSelection()` to use a stack-based approach (`preservedCursors` array) instead of a single cursor reference. This allows nested calls to `preserveSelection()` to operate independently while keeping cursor updates synchronized across active contexts.
Problem:
Using a single stored cursor caused issues in nested calls to `preserveSelection()`:
1. **State overwrite:** Inner calls could overwrite or clear the outer cursor.
2. **Stale references:** If an inner function replaced a DOM node, the outer cursor could still point to a removed node and fail on restore.
Solution:
Use an array of cursor subscribers
- **Shared updates:** When calling `remapNode` on a cursor, it iterates over all active subscribers in the stack. This ensures node replacements performed in inner contexts also update outer cursor references.
- **Scoped cleanup:** `restore()` now removes only the corresponding cursor instance from the stack, ensuring proper lifecycle management.
Example:
The key improvement is that outer scopes receive updates performed by inner scopes.
```javascript
// Function A (outer)
function wrapperFunction() {
const cursor = this.preserveSelection();
replaceTextWithSpan();
cursor.restore();
}
// Function B (inner)
function replaceTextWithSpan() {
const innerCursor = this.preserveSelection();
const oldNode = document.querySelector('text');
const newNode = document.createElement('span');
oldNode.replaceWith(newNode);
innerCursor.remapNode(oldNode, newNode);
innerCursor.restore();
}
```
opw-5386862
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#244758
Forward-Port-Of: odoo/odoo#238989This update resolves an issue where the background color of nested columns within tabs was being incorrectly overridden. The fix ensures that tab styling applies correctly, regardless of the column structure used within the tab panes. This improves the visual consistency of the Odoo interface.
Original PR description
Steps to reproduce: =================== 1- Drop the block tab snippet 2- Inside one of the tab panes, drop a Columns snippet. 3- Select background_color for one of the columns 4- Change tab style to…
Steps to reproduce: =================== 1- Drop the block tab snippet 2- Inside one of the tab panes, drop a Columns snippet. 3- Select background_color for one of the columns 4- Change tab style to tab -> The background color of the inner column is overridden. Cause: ====== When the "Tabs" snippet style is set, a `.card` class is added to its container (See [1]) A generic CSS rule, intended to style these tabs, was targeting any `.card` element with a `.card-body` child. (See [2]) However, the Columns snippet also uses a `.card > .card-body` structure (distinguished by a `data-vxml` attribute). This caused the overly broad tab-styling rule to incorrectly cascade and override the background color of the nested column. Solution ======== The SCSS selector has been made more specific so that works if `card-body` class doesn't have any parent class with class `card` and has attribute `data-vxml` [1]: https://github.com/odoo/odoo/blob/4cb3ffc09507fdfdb1aeabb70b2c93105f992700/addons/website/static/src/snippets/s_tabs/options.js#L149 [2]: https://github.com/odoo/odoo/blob/4cb3ffc09507fdfdb1aeabb70b2c93105f992700/addons/web/static/src/scss/bootstrap_review_frontend.scss#L55 opw-5394480 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241118
This update fixes an issue where new CRM contacts created using the quick create feature weren't automatically linked to the company's address. The fix ensures that when a company is selected, the new contact's address is correctly populated, improving data accuracy and streamlining CRM workflows. This enhancement impacts the Sales and CRM applications.
Original PR description
**Steps to reproduce:** - Install Sales/CRM apps - Go to CRM app - Create new opportunity card - Set a company (`commercial_partner_id`) - Create a new contact using `quick_create` - The new contact is linked to the company but it doesn't inherit the company address **Issue:** Kanban quick create of crm app was modified to allow a company field, which is used as `default_parent_id` when creating a new partner from the card. This properly set the partner `parent_id` and `commercial_partner_id` but without applying the logic of `_fields_sync()` which also added the address (only for quick_create). **Fix:** Check if a default value was given for `parent_id` in `_fields_sync()`. related: https://github.com/odoo/odoo/commit/a6c3ebc21c066ab4d5711f535ca5fc858e6485b0 opw-4932114 Forward-Port-Of: odoo/odoo#229234
This update fixes an issue where multiple product filters were not consistently saved during pagination, leading to incorrect product listings. The change ensures that all selected filters are correctly passed to the URL, maintaining accurate filtering across different pages. This improves the user experience and ensures products are displayed as intended.
Original PR description
Current behavior: When a user selects multiple filters (attributes) that result in multiple pages of products, navigating to the second page causes some filters to be lost. Specifically, only the…
Current behavior:
When a user selects multiple filters (attributes) that result in multiple pages of products, navigating to the second page causes some filters to be lost. Specifically, only the last selected attribute value is kept in the URL of the pager.
This happens because the `/shop` controller processes query parameters using a standard Python dictionary (**post). Since a dictionary cannot hold duplicate keys, an URL like `?attrib=1&attrib=2` is reduced to `{'attrib': '2'}`, losing all previous values.
Steps to reproduce:
1. Install `website_sale`.
2. Reduce "Products per Page" (e.g., to 4) to easily trigger pagination.
3. Go to the /shop page.
4. Select a first attribute (e.g., Color: White).
5. Select a second attribute (e.g., Size: M).
6. Ensure the result spans at least two pages.
7. Click on page "2".
8. Observation: The second attribute filter is lost, and the product list changes incorrectly.
Fix:
Ensure that `attribute_values` are stored as a list within the `url_args` passed to the pager. Since Odoo's `website.pager` uses `url_encode` internally, passing a list of values for a single key correctly generates repeated parameters in the resulting URL (e.g., `attrib=1&attrib=2`).
opw-4152637
Forward-Port-Of: odoo/odoo#245784
Forward-Port-Of: odoo/odoo#244941This update addresses a visual issue in the Point of Sale action dialog where disabled buttons had insufficient contrast. We've enhanced button visibility by using a consistent lighter background color for disabled states and added a border, ensuring better clarity for users, especially in bright environments. This improves the overall user experience and accessibility.
Original PR description
Before this PR there was a contrast issue between disabled and active secondary buttons in the action dialog. This was due to a customization where the `btn-secondary`'s default background color was…
Before this PR there was a contrast issue between disabled and active secondary buttons in the action dialog. This was due to a customization where the `btn-secondary`'s default background color was lightened. To fix this, we used the same lighter background color for disabled `.btn-secondary`, reduced the opacity of its text and desaturated tho whole button for whenever there is color such as the "reward" button. This way we can distinguish between the two states. A border was added to `.btn-secondary` in order to make the button more visible in light-challenging situations (in broad daylight for example). task-5186928 | Before | After | | ------------- | ------------- | | <img width="1002" height="647" alt="Screenshot 2025-11-06 at 13 17 27" src="https://github.com/user-attachments/assets/cc63d6e1-8587-427e-b5cd-de99e96df8c0" />|<img width="1004" height="645" alt="Screenshot 2025-11-06 at 12 58 07" src="https://github.com/user-attachments/assets/f199fd94-1223-4c6b-869b-e8d66d99bc82" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232969
This update makes it easier to manage channel members by displaying the '...' action (for options) directly on member items within the 'Members' panel. This enhancement, similar to the 'Discuss' sidebar, ensures actions are readily discoverable, especially on mobile devices. Additionally, the ability to remove guests from the member list has been added, addressing a previous limitation.
Original PR description
Before this commit, the channel member actions were hard to find: - Click on Members panel. - Click on Member to open popover card. - Click on "..." in top-right corner of card. This is hard because…
Before this commit, the channel member actions were hard to find: - Click on Members panel. - Click on Member to open popover card. - Click on "..." in top-right corner of card. This is hard because only this avatar card from this menu has the "..." button, and the actions are hidden in this menu. This is easy to miss since avatar cards in message list or other places don't have this "...", and since the actions are hidden there many people could easily miss these actions. This commit improves the visibility of action by their showing as a "..." on the member item on hover in the "Members" panel. This works like the "..." button in the discuss left sidebar, where the button is shown on mouse-hover. Mobile view (small or mobile device) shows the button all the time next to member, making the discoverability of the action very clear. Task-5871730 Before / After <img width="589" height="385" alt="Screenshot 2026-01-23 at 14 45 17" src="https://github.com/user-attachments/assets/bca66975-13cd-423a-a43d-9eb2be03741a" /> <img width="249" height="270" alt="Screenshot 2026-01-26 at 11 56 09" src="https://github.com/user-attachments/assets/edfe34c9-6b4c-4394-b532-7f79f9653b4a" /> ---- This PR also makes channel member actions available in guest items, so we can now "Remove Member" on guests too. <img width="252" height="296" alt="Screenshot 2026-01-27 at 18 25 54" src="https://github.com/user-attachments/assets/ee4b1271-0529-4e96-bda1-e621d7592555" />
This update enhances the Point of Sale mobile experience by ensuring that product categories are displayed efficiently on smaller screens. The UI now automatically scrolls to show all categories when more than three are present, and a small visual improvement (padding) has been added to the product list for a cleaner look. This improves usability for mobile sales staff.
Original PR description
Only three rows needs be displayed on small devices and if there are more, it must be scrollable. Adding of padding for the product in the product list to render a bit prettier. task : 5490918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where product descriptions couldn't be edited on completed or cancelled stock picks. Now, users can correct descriptions for finished orders, improving data accuracy and reducing manual rework. This change ensures that product information is always up-to-date.
Original PR description
Once a picking is no longer in draft, it's not possible to edit a product description anymore and there's no easy way to correct a mistake. Solution: only make it readonly in done or cancel state. task 5083104 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246611 Forward-Port-Of: odoo/odoo#243109
This update fixes a bug related to how Odoo handles responses from the Zatca system when obtaining CCSID or PCSID information. Previously, missing error messages caused confusing tracebacks for users. Now, the system checks CSR field lengths and displays a helpful message to the user, ensuring smoother Zatca onboarding.
Original PR description
Previously, it was assumed that if no 'error' or 'errors' key was present that means we've received a valid response for obtaining CCSID or PCSID. But sometimes the error is not sent with those keys, and the binarySecurityToken is missing, therefore a traceback is shown to the user because the invalid requests passes through the validation unnoticed. This kind of response is the result of a new change introduced by zatca requiring csr fields to be at most 64 characters long. This commit improves the error handling mechanism of CSID responses, to show the user an informative message, and handles the length check for csr fields on the client side before sending to zatca. task-5347269 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246714 Forward-Port-Of: odoo/odoo#244507
This update allows users to star persistent messages like sign requests, even if they aren't part of a conversation thread. Previously, these messages couldn't be starred. This change simplifies the starring process and improves user functionality.
Original PR description
**Description of the issue this PR addresses:** Starring a message should depend on whether the message is persistent and whether the current user is allowed to star it, not on whether the message is attached to a thread. **Current behavior before PR:** Some persistent messages (such as user notifications) can be displayed in Inbox without an associated thread. In such cases, the star action was unavailable even though the message itself was valid and persistent. **Desired behavior after PR is merged:** This change removes the dependency on thread presence when determining whether a message can be starred. As a result, users can now star persistent messages without a thread, including Inbox notifications such as sign requests. task-[5473438](https://www.odoo.com/odoo/project/1519/tasks/5473438) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246787 Forward-Port-Of: odoo/odoo#244204
This update resolves an issue where canceling multiple Point of Sale orders would cause a system crash. The fix ensures correct argument formatting for order cancellation, allowing users to reliably cancel multiple orders at once. This improves the stability and usability of the Point of Sale module.
Original PR description
In 3f95dd4, we can call `action_pos_order_cancel` with either one or more orders; In the case of calling it with multiple orders, we were passing as argument an array of order ids as params for the python method, but since the method only expects a single argumetn, `self`, it will crash if we passed an array. The fix is to pass `[[1, 2, 3]]` instead of `[1, 2, 3]` for multiple orders. This still works for a single order too as both `[1]` and `[[1]]` works. Forward-Port-Of: odoo/odoo#246803
This update resolves a bug where the timer stopped appearing for survey participants after submitting their answers in live sessions. The fix ensures the timer correctly displays for the intended duration, regardless of whether the participant is in a live session, improving the survey experience. This change was made to ensure consistent functionality across all survey types.
Original PR description
Description of the issue/feature this PR addresses: Fixes timer not showing to participants of a live session after submitting an answer. Current behavior before PR: Steps to reproduce: Create a…
Description of the issue/feature this PR addresses: Fixes timer not showing to participants of a live session after submitting an answer. Current behavior before PR: Steps to reproduce: Create a Survey with two questions of any type. Set some Question Time Limit on both. Create Live Session for that Survey. Access Live Session as a participant. Start Survey as the host. The first question appears to the participant, with the timer on the top right. Answer the question as the participant and click Submit or press Enter. On the host side move to the next question. Bug: timer for the second question does not appear to the participant. Desired behavior after PR is merged: Fix: The logic to hide the timer is on `survey_form.js`. In the `_nextScreen` function. Specifically, when `options.isFinish` is set to `true`. It is set to `true` in the `_onSubmit` function. This function triggers when the participant submits an answer. The fix: only set that flag to `true` if there isn't a session in progress. This aligns with the other calls to `_nextScreen` for live sessions. That is, when a timer expires and the form is submitted: `'isFinish': !this.options.sessionInProgress` and when a notification is received for the session: `isFinish: nextPageEvent.type === 'end_session'` Meaning that for live sessions the only time `isFinish` should be set to `true`, is when the `end_session` notification is received. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246789 Forward-Port-Of: odoo/odoo#241086
This update resolves an issue preventing website designers with 'Editor and Designer' access from optimizing the SEO settings for product categories. The fix grants necessary write permissions to category records, allowing designers to implement SEO best practices directly within the website. This improves the functionality for our website design team.
Original PR description
### Issue: Due to this issue, website designer cannot optimize seo on category. #### Steps to reproduce: 1- Create a `eCommerce Category`. 2- In demo user, set Sale access to `All Documents` and Website access to `Editor and Designer`. 3- Login with demo user and navigate to website. 4- In shop page, open category. 5- From site tab, click on `Optimize SEO`. You get access error. Expected: You should be able to optimize seo with `Editor and Designer` access. ### Cause: The user needs write access on record in order to optimize seo: https://github.com/odoo/odoo/blob/ec5da99ca3f52420e7d973c3cf07167bd4104ffa/addons/website/controllers/main.py#L831-L834 opw-5443854 Forward-Port-Of: odoo/odoo#246900 Forward-Port-Of: odoo/odoo#244724
This update resolves a UI error that prevented link previews from working correctly when creating buttons within Odoo's email templates. The fix ensures that link previews function consistently across both the standard website view and template editor, improving the user experience for creating marketing content.
Original PR description
**Steps to reproduce:** - Install `mass_mailing` and `website_sale`. - Go to Email Marketing > Create new record. - In the template editor, insert a /button. - Set the URL to `/shop` and select it…
**Steps to reproduce:** - Install `mass_mailing` and `website_sale`. - Go to Email Marketing > Create new record. - In the template editor, insert a /button. - Set the URL to `/shop` and select it from the app URLs. - Click on Apply, then click on the newly created button. **Issue:** - Clicking on the button raises a UI error: `This URL is invalid. Preview couldn't be updated.` **Root cause:** - In [1], `this.props.document.url` is used. - This works in the website editor, but in template view `this.props.document` points to the iframe document, not the document. **Solution:** - Replace `this.props.document.url` with `document.URL`. - This ensures the preview works correctly in both website and template views. [1]https://github.com/odoo/odoo/blob/12d63b536dddc40428fb5edb6f6b3302605dc72d/addons/html_editor/static/src/main/link/link_popover.js#L506-L507 **Before:** <img width="381" height="123" alt="image" src="https://github.com/user-attachments/assets/1370b04d-8bc6-40b9-b7b0-77413a36bd51" /> **After:** <img width="419" height="119" alt="image" src="https://github.com/user-attachments/assets/d5d47a47-1805-4b1f-b852-88ea725beaba" /> opw-5428680 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240836
This update resolves an issue where website previews with hover-triggered animations experienced a noticeable delay. The fix eliminates this delay and ensures previews revert instantly as the user types, preventing data loss. This improves the overall user experience and responsiveness of the website builder.
Original PR description
With commit aa3a2a694930d077aab5ff55e72655cc453a64ff, the delay of one animation frame in the preview of `templatePreviewableWebsiteConfig` is not necessary anymore. This was the only preview with a delay that can be triggered by hovering a button (the others needs to open a dropdown or input in text field). With commit be032732d1f5d1f7b28da3fa7bf19bffbef4a46d, previews are reverted as soon as the user starts typing, to avoid loosing the typed text when the preview is reverted. But this does not handle completely previews that are async: they may revert just after the first character is typed, and thus loose that character. This commit eliminates async preview that can be triggered while keeping focus in the editor. task-5493193 Forward-Port-Of: odoo/odoo#243727
This update resolves an issue where public users couldn't access their carts after a sale order's expiration date. The fix corrects a location within the code where the expiration status was incorrectly checked, preventing users from viewing or modifying their carts when the order was no longer valid. This ensures a smoother customer experience for sales transactions.
Original PR description
### Issue: Due to this issue public and portal users cannot access their carts once the so is expired. #### Steps to reproduce: 1- Using a public user, add a product to cart. 2- Using the admin user, go to the sale order created for the cart. 3- Change the date to an earlier date. 4- Back to public user, try to access the cart. You will see the error message: `The sale order has expired.` ### Cause: This regression is due to #245772. `_get_payment_values` is not the right place to check if the so is expired, as it is also used inside `_get_express_shop_payment_values`. opw-5903033 Forward-Port-Of: odoo/odoo#246962
This update resolves an issue where customers using self-service invoicing with Peppol received duplicate invoices repeatedly. The root cause was a technical glitch in how Odoo handles invoice creation with EDI API calls, leading to rollback and subsequent redundant sending. This fix ensures invoices are sent only once, improving efficiency and accuracy for Peppol customers.
Original PR description
Steps to reproduce: - Set up a test company with Peppol enabled - Create a Peppol customer and ensure they can receive invoices - In the POS settings, enable the “Self-service invoicing” option - Create a POS order linked to the Peppol customer - Log in as this customer - Enter the POS order information to access the invoice download view (from /pos/ticket) - Repeatedly click the “Request invoice” button - On the Peppol side, you will notice that the same invoice is sent as many times as the button is clicked Why ? This error is not really Peppol related, it can actually happen with all EDI making API call: the transaction is rolled-back when Odoo tries to create multiple invoices with a serialization error but the API call happened so, in this cas, the invoice is sent over Peppol. opw-5469467 Forward-Port-Of: odoo/odoo#246731
This update ensures that documents are correctly accessed when users click links to them, regardless of the initial view (like a systray notification or a discussion thread). Previously, the system wasn't consistently opening the document's form view, leading to a frustrating user experience. This fix resolves these inconsistencies and provides a smoother access flow.
Original PR description
Users do not want to access the form view of the document by default. This PR solves three cases for accessing documents.document records that were not covered before: * From the basic path pattern `odoo/x/documents.document/<id>` * From a systray notification "Open Form View" * when we are not yet in Documents * when we already are in Documents * From the Discuss app, on the record's thread Tests for most of these are included. Additionally, make sure the document is selected on accessing from `_get_access_action`. Task-5386466 Forward-Port-Of: odoo/enterprise#106009 Forward-Port-Of: odoo/enterprise#104622
This update resolves a test failure related to a date selection field in the EC accounting module. The test was failing because the date range was restricted, and 2021 was no longer a valid option. A simple change to the wizard's selection process ensures the test uses the correct 'frozen selection' data, addressing a potential future issue with long-running servers.
Original PR description
The selection field of the dividend_fiscal_year has a restricted range based on dates, which has implication for the frozen dates in the test. That is why the test will fail today: 2021 is not anymore in the selection. But, suppose however that you have a server running for 3 years, it could be problematic as well. (quite theoretical however) So we can simply make the selection field selection in the wizard a lambda method and that way also in the test, it will take the 'frozen selection'. build error 237681 https://runbot.odoo.com/odoo/runbot.build.error/237681 Forward-Port-Of: odoo/enterprise#106132
This update resolves a technical error that prevented printing from IoT printers within the Point of Sale system. The fix addresses an 'undefined' error, ensuring reliable printing functionality for users. This improvement enhances the overall reliability of the Odoo Enterprise system.
Original PR description
This PR fixed "error: undefined" when printing via websocket with iot printers in point of sale task-5496890
This update removes outdated comments and notes from the sale_renting module, stemming from a previous exploration of a feature change. This improves the clarity and organization of the codebase, ensuring it remains focused on its core functionality. The change is a routine maintenance task.
Original PR description
During the development of #102625, the idea of splitting the conversion date from the order date was explored. However, it was quickly dismissed, and some outdated comments slipped through.
This update fixes a bug that occurred when users copied and then undid copying planning slots. The issue was triggered when a previously deleted slot was involved in the undo process, resulting in an error message. The fix ensures the system verifies a record exists before attempting to delete it, preventing the error.
Original PR description
### Steps to reproduce: - Install Planning - Navigate to the gantt view for planning slots - Copy previous week's slots - Delete one of the newly copied records - Undo the copying action - Notice an Error is raised that a record doesn't exist ### Cause: When undoing the copy process we unlink all the newly created records but if the user has already deleted one of them it will trigger an error that this record doesn't exist and it has already been deleted ### Fix: We check the existence of the records before deleting them. opw-5490327 Forward-Port-Of: odoo/enterprise#105530
This update fixes an issue where the 'Next Booking Start' field for rooms was displaying incorrectly when a room had future bookings. The change removes a filtering rule that prevented the system from calculating the next available start time for occupied rooms, ensuring accurate booking information is displayed.
Original PR description
Steps to reproduce:
1. Install `room`
2. Create a room.
3. Create a booking for the current time (so the room becomes occupied).
4. Create another booking for tomorrow.
5. Open the list view of rooms.
Current Behavior:
- The `Next Booking Start` field is empty for the created room, despite Having future bookings.
Cause:
- The method `_compute_next_booking_start` filters the rooms using `self.filtered('is_available')`. Since the room is currently occupied (due to the active booking), the room is excluded from the query entirely.
Solution:
- Remove the `is_available` filter from the search domain. The next booking start time is now calculated for all rooms, regardless of whether they are currently available or occupied.
opw-5360101
Forward-Port-Of: odoo/enterprise#102129This update resolves a problem preventing the l10n_be_hr_payroll_fleet module from installing correctly when automatic dependencies aren't enabled. The fix ensures the necessary 'hr_fleet' module is installed, preventing a data error during demo data creation. This ensures the module functions as intended.
Original PR description
Steps to reproduce: 1. Install l10n_be_hr_payroll_fleet with --skip-auto-install and demo data. 2. Traceback when creating demo data because driver_employee_id is missing on the model fleet.vehicle Cause: The module depends on fleet instead of hr_fleet so hr_fleet is only auto installed. Thus, when skipping auto install, the field driver_employee_id doesn't exist. Fix: Change the dependency from fleet to hr_fleet to force the module to be installed. Runbot error: https://runbot.odoo.com/odoo/runbot.build.error/237909 Task: 5875410 Forward-Port-Of: odoo/enterprise#106199
This update resolves an issue where sending a voice message without text would cause the WhatsApp integration to fail. The fix ensures that the system correctly handles empty voice messages, preventing errors and allowing users to send voice messages without additional steps. This improves the reliability of the WhatsApp channel within the Odoo platform.
Original PR description
Sending a voice message without any text can trigger a WhatsApp API error because the empty HTML body is incorrectly treated as a valid text message. ### Reproduction Steps 1. Open the Discuss app.…
Sending a voice message without any text can trigger a WhatsApp API error because the empty HTML body is incorrectly treated as a valid text message. ### Reproduction Steps 1. Open the Discuss app. 2. Select a WhatsApp channel. 3. Record and send a voice message without typing any text in the composer. 4. Observe the message status. Result: The status changes from "Sent" to "Failed" with the error `(#100) The parameter text['body'] is required`. ### Cause The WhatsApp API does not support captions for audio files. Messages containing both audio and text are split into two separate WhatsApp messages: one for the audio file and one for the text body. Whether the text message is created depends on whether the message body is considered non-empty. Since commit odoo/odoo@f4dcc83adf552466ba7b05f09a4c651fe69f18ff , the composer’s default content is an empty HTML element. Although visually empty, this HTML is still a non-empty string at the data level. As a result, the system incorrectly determines that a text message is required and creates a secondary `whatsapp.message` record. When processed, the empty HTML is converted to a plain text string (`""`). Sending this as a text message fails validation because WhatsApp requires a non-empty body for text messages. ### Fix 1. Update `DiscussChannel.message_post()` to use `tools.is_html_empty(body)` to detect semantically empty HTML. This prevents creating a separate text message for audio attachments when the composer content is effectively empty. 2. Update `WhatsappMessage._send_message()` to check the truthiness of the converted plaintext `body` rather than the raw HTML field before adding a caption. This prevents sending an empty `caption` parameter for attachments when the body is empty. opw-5266805 Forward-Port-Of: odoo/enterprise#103213
This update simplifies the subscription plan view by removing irrelevant order line details like sections and discounts. The change focuses only on subscription products, making it easier for users to configure and understand their subscription plans. This improves usability and reduces visual clutter.
Original PR description
The subscription plan view was displaying all order line types, including sections, notes, and discount lines, which added unnecessary clutter. This update filters the order lines to display only actual subscription products, improving clarity and usability in the plan configuration. task-5404614 Forward-Port-Of: odoo/enterprise#106076 Forward-Port-Of: odoo/enterprise#101796
This update fixes a translation issue where warnings on Swiss payroll slips didn't correctly display translated field names. The fix ensures that all missing information fields are translated into French (CH) for improved clarity and compliance. This improves the user experience for French-speaking Swiss users.
Original PR description
The warnings that appear on a payslip when the employee's form misses information are not fully translated Steps to reproduce: 1. Install module l10n_ch_hr_payroll 2. Switch to "My Swiss Company" and change language to French (CH) 3. Open app "Paie" and create a new employee (only add a name) 4. Click on "Contrats" in the stat button and create a new contract for the employee (only add a name), save it and set it as "En cours" in the status bar 5. Go to "Fiches de paie" > "Toutes les fiches de paie" and create a new payslip 6. Add the newly created employee to the payslip 7. The warnings in the form displaying the missing fields from the employee form do not translate the name of the missing fields Solution: Use `get_description` to get the translated name of the missing fields opw-5403634 Forward-Port-Of: odoo/enterprise#106188 Forward-Port-Of: odoo/enterprise#104499
A recent issue preventing the sign tour from working correctly has been resolved. The fix ensures the tour opens the document in the correct signing view, restoring successful test results and improving the document signing experience. This resolves a bug that was impacting UI tests.
Original PR description
The sign_tour was failing because the `.o_sign_sign_directly` button was not found in the document view, causing the tour step to timeout and breaking both sign UI tests. This was due to the tour not properly opening the document in the signing view. The tour now relies on a stable selector, restoring successful execution of `test_sign_tour` and `test_sign_tour_without_sign`. Runbot issue: https://runbot.odoo.com/odoo/runbot.build.error/234923 Forward-Port-Of: odoo/enterprise#105844
This update corrects a temporary issue with the automatic download of Swiss tax rates. Recent changes by the Federal Tax Administration required adjustments to the URLs used for importing these rates, ensuring the payroll system continues to function correctly. This ensures accurate payroll calculations for our Swiss clients.
Original PR description
Due to recent updates on the Federal Tax Administration website, the single-canton import feature was made temporarly unavailable, this PR adjusts the new URLs for downloading the tax rates Forward-Port-Of: odoo/enterprise#106288
This update corrects a bug where canceled refunds were incorrectly included in global invoices generated from Point of Sale (PoS) orders. The fix filters out canceled refund lines during invoice generation, ensuring accurate reporting. This improves invoice accuracy and data integrity for Mexican VAT reporting.
Original PR description
When generating global invoices for orders in the PoS, refund of those orders are also included in the global invoice. However, if the refund has been canceled, it should not be included in the global invoice. Steps to reproduce: ------------------- * Create a PoS order and validate it. * Go to the backend and create a refund for that order. * Cancel the refund. * Go to the PoS order list and select the original order * Click on "Generate Global Invoice" > Observation: The canceled refund is included in the global invoice. Why the fix: ------------ We simply filter out the canceled orders when searching for refunded order lines. opw-5492576 Forward-Port-Of: odoo/enterprise#105959 Forward-Port-Of: odoo/enterprise#105868
This update corrects a technical issue with the XML code used for invoices and withhold documents in the Odoo Enterprise accounting module. The fix removes an extra closing tag, ensuring the system generates properly formatted invoices and avoids potential errors. This ensures accurate financial reporting.
Original PR description
Currently, the `account_move_form_invoice_and_withhold_view` contains an invalid closing group tag (`</group>>`) introduced by PR [1], at [2]. The extra `>` results in malformed XML. This commit removes the stray character and restores a properly closed `</group>` tag. [1]: https://github.com/odoo/enterprise/pull/77592 [2]: https://github.com/odoo/enterprise/blob/7c574d758ff5b1404b808cc647d4a2ae40f5f0c0/l10n_ec_edi/views/account_move_views.xml#L79 **No task Id** Forward-Port-Of: odoo/enterprise#106104
This update fixes a potential issue where old, unused account synchronization links could cause problems, preventing new connections. By focusing on fresh, uninitialized links, the system now reliably establishes and maintains account synchronization. This ensures smoother data flow and avoids disruptions for users.
Original PR description
Prevent reusing stale account.online.link records that have a provider_type set, which can leave an unusable row and block new connections. By adjusting the search domain in action_new_synchronization, we only reuse clean, uninitialized links. opw-5868438 opw-5867799 Forward-Port-Of: odoo/enterprise#106259 Forward-Port-Of: odoo/enterprise#105187
This update resolves a test failure within the Enterprise module's web_studio functionality. The change prevents unintended modifications to a key configuration setting, ensuring consistent test results and preventing disruptions during the full system deployment process. This improves the reliability of our automated testing.
Original PR description
Updating the fieldsets of `DEFAULT_FIELDS_TO_EXECUTE` in place changes the behaviour of `test_23_export_hardcoded_models_and_fields` if that test runs after `_compute_excluded_fields` has been executed for one reason or an other, which apparently does not occur during post_install but *does* occur during at_install, and so fails in the "full" enterprise test running everything in a single job. https://runbot.odoo.com/odoo/error/238451 https://runbot.odoo.com/odoo/error/238449 https://runbot.odoo.com/odoo/error/238497 Forward-Port-Of: odoo/enterprise#106110
This update ensures the accounting dashboard data is compatible with the latest Odoo version (19.1). It upgrades the underlying data format to address a compatibility issue, preventing errors and maintaining the dashboard's functionality. While partially functional for simple filters, further improvements are needed for more complex filter options.
Original PR description
This commit upgrades the data for the accounting dashboard from the 18.4.x file format to 18.5.x The goal is to avoid having `ODOO.FILTER.VALUE` being upgraded to `ODOO.FILTER.VALUE.V18` because the dashboard was already adapted to work[*] with the new formula see 682d6ec1ddb825674999e0db1fc0cc48c3be67c5 *: it only half-works. It only works for simple values of filters (years, quarter, months), but it doesn't work properly with others (Last 7 days, etc.) Forward-Port-Of: odoo/enterprise#106269
Documentation and clarification updates
This pull request updates Odoo documentation to reflect a change made by Moduon (MT-13567). It’s a legal update related to their integration, ensuring compliance and clarity for our partnership. This change primarily impacts our documentation and legal agreements.
Original PR description
@moduon MT-13567 Forward-Port-Of: odoo/odoo#246701