Daily updates from Odoo
Wednesday, November 19, 2025
27 changes · master
Enhancements to existing features
This update adds automated checks for the IoT connection messaging code, helping ensure messages are sent and received as expected. It reduces the risk of future changes breaking connected device communication without changing day-to-day user workflows.
Original PR description
This commit adds a suite of tests for the `IotWebsocket` class. The tests comprehensively cover the functionality of `sendMessage` and `onMessage`. Type hints are also added to these methods.
Appointment pages no longer allow users to edit placeholder images for staff or resources on the website. This avoids confusion because those placeholder edits were never saved and real profile images are not editable from the front end.
Original PR description
Remove the possibility to edit the user/resource image placeholders on the front-end. Editing the placeholders is useless as they won't be saved on page reload anyway. Also, the user/resource record images (displayed when Display Pictures option is set) aren't editable from the front-end. Meaning being able to edit the placeholders could be confusing for the users. Task-5079021
Barcode-related automated tests now use dedicated test company and warehouse data instead of relying on default demo records. This makes test results more stable, fixes a known build failure, and slightly speeds up some barcode test runs without changing day-to-day user workflows.
Original PR description
*: stock_barcode_mrp, stock_barcode_mrp_subcontracting, stock_barcode_picking_batch Until now, the default warehouse (WH) was the warehouse used in the `stock_barcode` tests which means all the tests depends of it and are influenced by the changes done in this warehouse (like changes done by the demo data.) A better way to run the tests would be to use a warehouse created for this occasion, and what a chance, that's why this commit does! Incidentally, this commit also fixes [runbot built error 233274](https://runbot.odoo.com/odoo/runbot.build.error/233274) **Community PR:** odoo/odoo#234483 Forward-Port-Of: odoo/enterprise#96657
SendCloud delivery integration can now determine the warehouse name through a customizable process instead of relying only on a fixed name match. This helps businesses with more complex sender-address rules choose the right shipping origin more reliably.
Original PR description
As choosing the proper sender address in SendCloud can be more complex than matching a name to a fixed name in Odoo we open up the freedom to inherit the retrieval of the warehouse name. Info: @wt-io-it Forward-Port-Of: odoo/enterprise#97595
The Philippine reporting module’s automated tests were updated to match a recent change in report descriptions. This helps ensure reporting checks stay aligned with the latest expected wording and reduces the risk of false test failures.
Original PR description
Related PR: https://github.com/odoo/odoo/pull/235448 TaskID-5248240 Forward-Port-Of: odoo/enterprise#99354
Financial report lines now use consistent spacing between hierarchy levels. This makes nested report sections easier to scan and improves readability without changing the report data.
Original PR description
This commit ensures that indentation difference between reports lines on different levels is identical. Before this commit, a line at level 2 would have indentation of 4px, and for further levels, this number would increase by 8px. This commit makes indentation start at 8px for level 2 to make indentation differences consistent. task-5232821
The IoT Box technical information now links its displayed software commit hash directly to the related GitHub commit page. This makes it faster for support or administrators to confirm exactly which software version is running when diagnosing issues.
Original PR description
To ease checking the HEAD commit on the IoT Box, we now compute the github url to the commit, and redirect to it clicking on the hash in the technical information tab. Forward-Port-Of: odoo/enterprise#99673 Forward-Port-Of: odoo/enterprise#99422
Resolved issues and error corrections
When the Belgian POS cannot reach the Blackbox due to a timeout, it now shows a more accurate error instead of saying the fiscal module is missing. This helps cashiers and support teams understand the real issue faster and avoid unnecessary troubleshooting.
Original PR description
Before this commit, in the case when there is a timeout communicating with the Blackbox in the POS, an incorrect error message was shown stating that "The IoT Box is connected but the Fiscal Data Module isn't". This message should only be shown when we receive a reply from the IoT box, but it tells us it cannot find the Blackbox. <img width="695" height="240" alt="image" src="https://github.com/user-attachments/assets/ec011f4a-42dd-4ffd-8741-350032897471" /> Forward-Port-Of: odoo/enterprise#99652
German companies with a dot in their name can now export DATEV reports without encountering an error. This prevents export failures in the General Ledger and keeps accounting reporting workflows running smoothly.
Original PR description
Currently companies with a dot ('.') in the name cannot export the DATEV report due to a traceback.
Steps to reproduce:
- Select a German (DE) Company having a dot in the name.
- Open Accounting / Reporting / Ledgers / General Ledger
- Click cog > Datev DATA (zip)
Issue:
A Traceback will occur
`Error "ValueError: too many values to unpack (expected 2)"`
This occurs because the system separate the filename from the extension without halting to the first `.`, leading to the error.
opw-5232073
Forward-Port-Of: odoo/enterprise#99578Spreadsheet sharing now avoids showing a warning that cannot lead to any action when edit access is blocked for external users. This makes the sharing dialog less confusing by presenting only the relevant message.
Original PR description
Bug === 1. Create a spreadsheet 2. Add a partner as viewer 3. Set access vial link to edit => 2 warning are displayed (that the right will be extended, and that we can not share spreadsheet in edit mode to non-internal users). The first warning make no sens, because we can not save the modal. Task-5169034 Forward-Port-Of: odoo/enterprise#97857
This update prevents an intermittent failure in an automated manufacturing work order test by avoiding a timing issue in the component selection dialog. It also ensures the intended product appears first, making the test more stable without changing business workflows.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
VoIP now avoids starting a new connection registration when a user naturally leaves or closes the page. This prevents conflicting requests that could trigger errors during page unload, improving call service stability without changing user workflows.
Original PR description
On page unload, two conflicting things happen: - A REGISTER request with expires=0 is sent to invalidate the registration - The WebSocket disconnects, triggering the reconnection mechanism that attempts to reissue a registration These two concurrent and conflicting REGISTER requests result in the following error: > RequestPendingError: REGISTER request already in progress, waiting for final response This commit prevents the reconnection mechanism from occurring in the event of a "natural" disconnection, such as one triggered by a page unload. This way, the two conflicting REGISTER requests aren't sent on page unload. [Task-5261940](https://www.odoo.com/odoo/project/5778/tasks/5261940) Forward-Port-Of: odoo/enterprise#99560 Forward-Port-Of: odoo/enterprise#99376
The report editor now keeps the user's cursor and selection in the right place after inserting an X2Many table in a new report. This prevents editing disruptions and lets users continue typing immediately after adding the table.
Original PR description
On a new report, add a X2Many table in a new Report. In many cases there will be some issues with the selection as, when inserting the Element via the command of the report Editor we explicitly focus the editable of the html_editor. We need the document inside the iframe to get the focus, because our flow implied to click on some popover bound to the main window. But focusing the editable element changed the selection. So, instead, we focus the iframe's inner window, and the selection stays at the right place, and the user can immediately interact with it (by continuing typing after the insertion) task-5159482 Forward-Port-Of: odoo/enterprise#99430 Forward-Port-Of: odoo/enterprise#97642
This change fixes a payroll configuration issue that caused automated build tests to fail for some country-specific payroll setups. The overtime attendance setting is now handled only by the module that provides it, improving reliability without changing day-to-day payroll workflows.
Original PR description
The issue occurs because the _get_whitelist_fields_from_template() method includes the overtime_from_attendance field, introduced in this https://github.com/odoo/enterprise/pull/92093. This field comes from the hr_work_entry_attendance module, which is not listed as a dependency in all payroll localisations. As a result, the field cannot be found during test execution. Solution: Remove the overtime_from_attendance field from all _get_whitelist_fields_from_template overrides in the localisation modules, and instead include this field by overriding the function in the hr_work_entry_attendance module. build error-243483 task-5169211 Forward-Port-Of: odoo/enterprise#97201
The French reporting EDI export form now shows formatted status and error messages instead of raw HTML text. This makes report results easier to read and helps users quickly identify errors highlighted in the interface.
Original PR description
Currently, the message field in the EDI export form displays raw HTML tags instead of properly formatted content, making it difficult for users to read the report status and error details. We now ensure that HTML is rendered. This allows the structured list of statuses and error details (with proper formatting and red color for errors) to display correctly in the UI Note: Wrap the computed message with Markup() during concatenation in _compute_message() to prevent the HTML from being escaped when combined with translated strings. Task-5113752
This update fixes an internal link from payslips so it opens the related employee record in the proper form view. Payroll users can navigate more reliably without being sent to the wrong screen or view.
Original PR description
The contract template form view is now written on the formview_action directly. This is a backport of https://github.com/odoo/enterprise/pull/97463 task-5082709 Forward-Port-Of: odoo/enterprise#99486
Vendor batch payments now use the correct outgoing payment numbering sequence instead of accidentally using the incoming payment sequence. This prevents confusing or incorrect batch names when validating supplier payment batches.
Original PR description
Currently when creating a vendor batch payment, the system may incorrectly use the inbound batch payment sequence to generate the batch name Steps to reproduce: - Create a Vendor payment. - Create a Vendor batch payment, add the payment, validate it. Issue: Name has been set using the incoming batch payment sequence This occurs because `batch_type` is set to readonly when a payment is added to the list. As result, the current batch type is never sent to the backend that will use the default 'inbound'. opw-5128426 Forward-Port-Of: odoo/enterprise#99570
Restaurant floor plans now receive website table booking notifications only when the booking uses the appointment type configured for that POS. If table booking is disabled or no appointment type is selected, irrelevant notifications are avoided, reducing confusion for staff.
Original PR description
Task: [#5005216](https://www.odoo.com/odoo/my-tasks/5005216) Enterprise v17.0: [#93714](https://github.com/odoo/enterprise/pull/93714) --- **Before:** If no appointment type is specified in the POS config and a table is booked via the website, the floor plan is notified of a new booking because the resource used is one of the POS config resources. However, if the page is refreshed, the booking disappears since no appointment type is defined in the POS config **After:** The floor plan is notified of a new booking only if the appointment type of the booking matches the one specified in the POS config. If no appointment type is set in the POS config, no booking notifications are sent. Additionally, when the "Table Booking" field is unchecked in the POS config, the appointment type is automatically unset. Forward-Port-Of: odoo/enterprise#98887 Forward-Port-Of: odoo/enterprise#93636
OSS sales returns will no longer be created when their eligibility conditions are not met. OSS import returns now use similar eligibility checks, reducing unnecessary reports and helping users avoid incorrect compliance paperwork.
Original PR description
The OSS Sales returns was generated even when its condition wasn't met since auto_generate was still at True. The OSS Imports didn't have any condition and has one which is similar to the OSS Sales. Forward-Port-Of: odoo/enterprise#99700
Draft payslips can now have their period date removed without causing an exception. This prevents interruptions for payroll users while editing payslips and adds test coverage to help keep the flow reliable.
Original PR description
When removing the date in a draft payslip an exception was raised. This was fixed and a test was added to check the flow. Related to odoo/odoo#231247 task-5159666 Forward-Port-Of: odoo/enterprise#99723 Forward-Port-Of: odoo/enterprise#97013
Fixed an issue that could prevent users from opening the payroll payrun view. This restores access to payrun information in the Payroll app after an underlying interface template changed.
Original PR description
Reproduce: 1. open payroll app 2. try to access the payrun view Issue: The `web.KanbanHeader` template is update and replace a `t-esc` with `t-out` when we have an xpath on the old value Solution: update the xpath expr Task: 5323275
This update corrects how IoT websocket messages are sent so the message type is included as expected. It helps ensure websocket communication can be tested reliably and reduces the risk of issues in connected IoT workflows.
Original PR description
In order to allow testing the websocket protocol, we need to provide the message type to the `sendMessage` method. This was forgotten in odoo/enterprise#97525. Forward-Port-Of: odoo/enterprise#98568
The due button on a contact now remains visible whenever that contact has at least one customer or vendor invoice, even if nothing is currently owed. This keeps quick access to financial details and customer statements available when teams need to review past activity.
Original PR description
The `Due Button` on `res.partner` is a convenient shortcut to access the partner’s current financial situation, especially the Customer Statement report. Even if the partner has no outstanding balance, the shortcut remains useful. So in this commit, we update the visibility logic of the `Due Button` so it appears as long as the partner has at least one `invoice (in/out)` linked to them. This means the button will remain visible even when the total `due amount is `zero`, ensuring the shortcut is always accessible. Task-5264512 Forward-Port-Of: odoo/enterprise#99514
The employee profile's Reviews button now correctly displays related contract review records after an offer is signed. This prevents users from seeing an empty list even when the button indicates records exist, improving confidence in employee contract workflows.
Original PR description
Issue:
When an offer is created and signed by the employee, the `Reviews` smart button appears on the employee profile. Although it indicates that there are records, clicking the button redirects to an empty list.
Reason:
After converting contracts to the versioning system, the action for the Reviews button does not properly display contract versions, regardless of whether they are active or inactive, as it did in the previous version.
Fix:
Added a context `{"active_test": False}` to show active or inactive records.
task-5155455
Forward-Port-Of: odoo/enterprise#96808The spreadsheet pivot side panel now respects debug mode when adding a column, so advanced users can search and see technical field names as expected. This restores the intended behavior for configuring pivot data in spreadsheets and reduces friction for support, implementation, and power users.
Original PR description
Steps to reproduce: - Activate debug mode - Insert a pivot in a spreadsheet - In the side panel, click on "Add column" => the component is not in debug mode, so the technical name cannot be searched and is not displayed Task: 5264589 Forward-Port-Of: odoo/enterprise#99484
Payroll now respects the setting that disables change tracking when employees are edited through the salary configurator. This avoids unnecessary log entries and keeps employee records cleaner for HR teams.
Original PR description
We use a hack to force the tracking of some fields on the employee. It causes some problem when you work with the salary configurator as we don't want the changes logged in this case. The solution is to not track prepare the fields if there is a tracking disable in the context, like mail does. Forward-Port-Of: odoo/enterprise#99800
Check messages in the EU OSS reports now display in a cleaner, more consistent format. This improves readability for users reviewing report checks and removes an awkward multi-line presentation issue.
Original PR description
Multi-line messages for checks are displayed on multiples lines starting in 19.0. This is ugly and we fix this so every checks have a similar look. Before: <img width="368" height="103" alt="image" src="https://github.com/user-attachments/assets/67bb84f9-ac61-4c0d-84ba-b8a886763546" /> After: <img width="337" height="74" alt="image" src="https://github.com/user-attachments/assets/4f45b368-cf60-4b46-b10a-dd1b75ceb9f9" /> Forward-Port-Of: odoo/enterprise#99772