Daily updates from Odoo
Wednesday, February 25, 2026
20 changes · 19.0
Enhancements to existing features
This update adds the representation of 'page 2 bis' to the 390 boe report format within the Spanish tax reporting module (l10n_es_reports). This enhancement ensures that all required data for Spanish tax filings is accurately included, improving compliance and reporting accuracy.
Original PR description
In this commit: - We are adding representation of page 2 bis to the 390 boe.txt task-5881396 Forward-Port-Of: odoo/enterprise#106861
This update enhances the restaurant order display by allowing users to group preparation cards by course (e.g., Appetizer, Main Course, Dessert). This provides a more organized and intuitive view of the order preparation process, making it easier for staff to manage and track items.
Original PR description
Adds the possibility to organize the preparation display by course instead of a flat list of orders. - Preparation Display: Added 'organize_by_course' boolean field to the configuration model and form view. - Frontend Display: Implemented a new layout that groups order cards under labeled course headers (e.g., "Course 1", "Course 2") when the option is active. task-id: 5969167
Resolved issues and error corrections
This update resolves an issue where helpdesk users with limited access were unable to view tickets due to a restriction in accessing related stock records. The fix adds a necessary permission group, allowing helpdesk users to correctly read ticket information and access associated products. This ensures all helpdesk users can efficiently manage tickets.
Original PR description
To reproduce: ============= - install helpdesk_stock - with user having only User rights on helpdesk and nothing on other modules - try to access a ticket -> AccessError Problem: ======== when reading the ticket, the field `suitable_product_ids` is computed, and it requires read access to records the user doesn't have access to, which raises an AccessError. Solution: ========= Add the group `stock.group_stock_user` to the field, so that only users having access can read it. backport of https://github.com/odoo/enterprise/pull/59605 opw-5907657 Forward-Port-Of: odoo/enterprise#108139 Forward-Port-Of: odoo/enterprise#107291
This update resolves an issue where the payroll data update process would fail when the 'Standard 40 hours/week' working schedule was deleted. The fix ensures the system correctly handles the absence of this schedule, preventing errors and maintaining accurate payroll calculations for supported countries. This ensures consistent payroll processing across multiple regions.
Original PR description
*:ae,au,bd,be,ch,eg,id,jo,ke,lt,lu,ma,my,nl,pk,pl,ro,sk,tr,us When the ``Standard 40 hours/week`` working schedule is deleted and the ``Payroll: Update data`` cron runs, a traceback is raised. For…
*:ae,au,bd,be,ch,eg,id,jo,ke,lt,lu,ma,my,nl,pk,pl,ro,sk,tr,us
When the ``Standard 40 hours/week`` working schedule is deleted
and the ``Payroll: Update data`` cron runs, a traceback is raised.
For ``l10n_us_hr_payroll`` module
Steps to reproduce the error:
- Install ``l10n_us_hr_payroll`` module with demo data
- Go to Employees > Configuration > Settings > Change Company Working Hours
- Go to Working Schedules > Delete ``Standard 40 hours/week`` working schedule
- Run the ``Payroll: Update data`` cron
Traceback:
```py
ValueError: External ID not found in the system: resource.resource_calendar_std
ParseError: while parsing /home/odoo/src/enterprise/l10n_us_hr_payroll/data/hr_payroll_structure_type_data.xml:3, somewhere inside <record id="structure_type_employee_us" model="hr.payroll.structure.type">
<field name="name">United States: Employee</field>
<field name="default_resource_calendar_id" ref="resource.resource_calendar_std"/>
<field name="country_id" ref="base.us"/>
</record>
```
The ``Payroll: Update data`` cron updates payroll data that references
the ``Standard 40 hours/week`` working schedule.
If the user has deleted this working schedule, the external ID no longer exists,
leading to the above traceback.
sentry-7166574553This update resolves an error that occurred when computing payslips with salary rules that used hidden input fields. The issue stemmed from how the system tracked folded input sections, leading to a data type mismatch. This fix ensures that these hidden inputs are correctly ignored during payslip calculations, preventing errors and ensuring accurate payroll processing.
Original PR description
**Steps to reproduce** - Have a salary rule - Condition based on: Salary Input - Input on: Employee - On the employee form, click on "Add inputs" in the Payroll tab - Add an input - Enter a value - Click on "Inputs" to fold the section and hide the input - Try to compute a new payslip for this employee, error: `ValueError: invalid literal for int() with base 10: 'separator_1'` **Cause** By default, the separator doesn't have a `value` key, but after the first interaction to hide its elements, it is added to keep track of the folded state (see `_toggleSeparators` in `web`). **Solution** Ensure separators are ignored. opw-5928247
This update fixes a bug where the planning report generated through the standard print menu produced blank PDFs. The fix ensures users are directed to the correct Print button in the calendar view to generate the report, preventing errors and ensuring accurate report output.
Original PR description
**Problem:** When users in debug mode manually add the planning report action through Settings/Technical/Reports and then print from the list or form view, they receive a blank/invalid PDF report.…
**Problem:** When users in debug mode manually add the planning report action through Settings/Technical/Reports and then print from the list or form view, they receive a blank/invalid PDF report. **Steps to reproduce:** 1. Go to Settings app and enable debug mode 2. Navigate to Technical → Reports 3. Search for "slot_report" 4. Click "Add to print menu" button 5. Refresh the browser 6. Go to Planning app and switch to list view 7. Select a few planning.slot records 8. Click Print → Planning **Current behavior:** A blank or invalid PDF is generated. **Expected behavior:** Users should receive a clear error message directing them to use the correct print method from the calendar view. **Cause of the issue:** The planning report requires a pre-processed data structure (weeks, grouped slots per day/week, and group-by mappings) that is only prepared by the action_print_plannings() method called from the custom Print button in the calendar view. The standard print menu invokes _render_qweb_pdf() directly without this data preparation, and there is no mechanism to pass this complex data structure through the standard print workflow. This results in the template receiving empty data contexts, producing blank reports. **Fix:** Block the planning report from being printed through _render_qweb_pdf() when called without the proper data context. This is done by checking if the report name is 'planning.slot_report' and raising a UserError with a clear message directing users to use the Print button in the calendar view instead. This prevents the generation of invalid reports while guiding users to the correct workflow that properly prepares the required data. opw-5477184
This update fixes a bug where accounts without a code in the consolidating company were being excluded from reports, leading to inaccurate totals. Now, the system will automatically find a matching code on other companies to ensure accurate report consolidation and consistent financial data.
Original PR description
Description of the issue this commit addresses: When consolidating reports, any account that doesn't have a code on the consolidating company is filtered out of the consolidation. This will lead to amounts that do not match which should not happen. --- Desired behavior after this commit is merged: When an account should be used but is filtered out because of not having a code in the per company mapping, we try to find its code on any of the other companies he is and use that one as anchor in the consolidation. --- task-5911409
This update corrects a formatting issue in the Eco Voucher export file generated by the payroll module, ensuring it aligns with the requirements of the Monizze system. This resolves a potential export error, guaranteeing accurate data transmission for payroll reporting to Monizze.
Original PR description
This commit realigns the xlsx header with what's expected by Monizze for the eco voucher export.
This update fixes an issue where the Journal Audit report displayed incorrectly with large monetary amounts, causing tables to overflow. The fix adjusts the report's layout to handle these amounts properly, ensuring data is presented clearly and without errors. This improves the user experience when reviewing financial reports.
Original PR description
[FIX] account_reports: journal audit tax display **Problem:** The tax summary tables in the Journal Audit report overflow and collide when displaying large monetary amounts (9+ digits). **Steps to…
[FIX] account_reports: journal audit tax display **Problem:** The tax summary tables in the Journal Audit report overflow and collide when displaying large monetary amounts (9+ digits). **Steps to reproduce:** 1. Create and post invoices/bills with large amounts (e.g. 999,999,999) 2. Go to Accounting > Reporting > Audit Reports > Journal Audit 3. Observe the tax summary tables overflow their columns **Current behavior:** Large numbers overflow and collide because the sub-tables use `table-layout: fixed` and are placed in separate `<td>` elements with hardcoded `colspan`, preventing them from adapting to content width. **Expected behavior:** The tax summary tables should adapt their widths to accommodate large monetary amounts without overflow or collision. **Cause of the issue:** Several layout issues combined to waste space and cause overflow: - The sub-tables were in separate `<td>` elements with fixed `colspan` values (2 and 5), unrelated to actual content width - `table-layout: fixed` forced thin columns (e.g. country code) to take equal space as wider columns (amounts), causing larger values to overflow - The "Taxes Applied" header colspan used `taxesByCountry.length` which doesn't work on objects (always undefined), so the header never spanned the full width in multi-country scenarios - Full country names (e.g. "United States") consumed unnecessary horizontal space - Long tax names (common with OSS) wrapped to multiple lines, making the table very tall **Fix:** By placing both sub-tables inside a single `<td>` with a flex container, they can share the available width dynamically based on content rather than being constrained by arbitrary colspan splits. Removing `table-layout: fixed` lets columns size naturally to their content. Using country codes instead of full names and adding ellipsis on long tax names further reduces the space pressure. Backport of: ba8099ab7bad7a7a9fe445ed6fda8c4daa7abcbd opw-5477029
This update corrects a technical issue causing duplicate receipts to be printed for point of sale transactions. The problem stemmed from a system error triggered by a specific browser interaction, leading to unnecessary receipt confirmations. This fix ensures accurate and consistent receipt generation for all transactions.
Original PR description
This PR fixes two same worldline receipts appearing on the point of sale ticket Reproduced by blocking the action url in browser but not the event one. Websocket fallback action is sent and the confirmation is sent both to the longpolling and websocket, resulting in _setCardAndReceipt method being called twice.
This update fixes an issue where generated Swiss payment XMLs (pain.001) were invalid due to incorrect use of bank identification codes (BIC). The change ensures that only one of BIC or ClrSysMmbId is used, aligning with Swiss banking standards. This prevents payment processing errors and ensures compliance.
Original PR description
**Steps to reproduce:** - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor…
**Steps to reproduce:** - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor bill for a Swiss partner or payrun report - Pay with "Swiss ISO20022" > generate xml pain001 - Validate against xsd or any swiss pain001 test plateform > Incorrect rules usage ! not valid xml ! **Cause:** In the XML the field BIC and ClrSysMmbId are present. Only one of them can be present. See the [documentation (page 27 and 33)](https://www.six-group.com/dam/download/banking-services/interbank-clearing/fr/standardization/iso/swiss-recommendations/archives/implementation-guidelines-ct/implementation-guidelines-ct_v1_6_1.pdf). **Solution:** Create the method `_get_ClrSysMmbId()` which will only return for Swiss if there is no BIC number. This is a partial unrevert of [this commit](https://github.com/odoo/enterprise/commit/177c7bbc890c3d142010de2cb7d0d9d6752c7fd9#diff-282e44e861d61542f3bc6d40e61b73fd1556f659d53ecd8bf9430dcec79c2fd6). opw-4872507
This update resolves an issue where the SRI payment method wasn't correctly applied to invoices for POS orders paid entirely with gift cards in Ecuador. The fix automatically sets the SRI payment method (code '01') when no other payments are associated with the order, ensuring accurate invoice generation and compliance. This prevents errors and improves the user experience for Ecuadorian POS operations.
Original PR description
When a POS order has no payment associated (e.g. when the order is fully paid with a gift card), the SRI payment method was not set on the invoice Steps to reproduce: ------------------- * Create a PoS in Ecuador with the l10n_ec_edi_pos module installed * Create a gift card program and some gift cards * Create a PoS order and pay it fully with a gift card and invoice it > Observation: You get an error saying that the SRI payment method is required Why the fix: ------------ When setting the SRI payment method on the invoice, we check if there are more than 1 payment associated with the order, and if not we fallback on the SRI payment with code "01" opw-5432004
This update addresses a long-overdue refresh of tax codes within the Avatax module, ensuring continued accuracy for sales and accounting calculations. The change is a routine maintenance fix to maintain compatibility and avoid potential issues with tax regulations. A future enhancement will automate this process for users.
Original PR description
It's been 4 years since the last update [1]. No codes were removed. At some point it would be nice to add this to the avatax_sync_company_params() method so it can be initiated by the user. But we need to update this file regardless, and the mechanism would need to be smart enough to not cause duplicates when e.g. the user has synced it themselves, we then update the csv and they then update the module. [1] https://github.com/odoo/enterprise/pull/30220 opw-5928245 Forward-Port-Of: odoo/enterprise#108209
This update fixes an issue where warehouse names with only numbers (e.g., '01') were displayed incorrectly in the barcode app. The fix removes a browser setting that caused numerical warehouse codes to be reversed, ensuring accurate and consistent display of warehouse names regardless of their format.
Original PR description
### Steps to detect the bug: - Download stock apps - Enable "storage locations" settings under warehouse index - Change name of warehouse with a name composed only of numbers (ex. 01) - Create a…
### Steps to detect the bug:
- Download stock apps
- Enable "storage locations" settings under warehouse index
- Change name of warehouse with a name composed only of numbers (ex. 01)
- Create a product (with barcode number)
- Insert a number of products available with smart button "on hand"
- Create a new delivery for that product
- Go to barcode app and search for the delivery you just created
- Click on it and see that the name of the warehouse will be stock/01 instead of the correct 01/stock
### The problem:
The previous configuration used direction: rtl; on the warehouse name
element in the barcode app. So if the string contains only letters the
standard visual order is maintained, however, when the string consists
entirely of numbers the rtl property forces the browser to reorder them
from right to left.
### The reson to introduce the fix:
By removing this property, it is ensured that numerical warehouse codes are displayed in their natural sequence without being flipped.
opw-5730199
Forward-Port-Of: odoo/enterprise#107920This update removes an unnecessary wrapper div from article content, streamlining the HTML structure. Previously, the system added a `div` to ensure proper parsing of article bodies, but this caused increased HTML depth. This change improves efficiency and maintains consistent article formatting.
Original PR description
Prior to this commit, `_get_transformed_body_from` wrapped the source body in a `div` because `lxml.html.fragment_fromstring` is used with a `create_parent=True` argument. That argument is required because otherwise, the function throws an error if there are multiple root nodes in the parsed string, which is frequent in an article body. The final returned string still contained that additional `div` ancestor. This does not break an article per se, but repeated usage would increase the html structure depth by 1 every time, and that additional `div` was not part of the function desired transformations. task-5960616 Forward-Port-Of: odoo/enterprise#108310
This update resolves a validation error occurring during tax calculations for Brazilian invoices using the Avatax service. The fix clears incorrect tax data from the invoice before sending it to Avatax, preventing a mismatch between totals and ensuring invoices are processed correctly. This improves invoice accuracy and avoids disruptions to the invoicing process.
Original PR description
Steps to reproduce: - Set up a Company with BR localization - Create a product as follows: - [General Information] Product Type: Service - [Sales] LC116 Code: 14.01 - [Sales] Purpose of Use: Not…
Steps to reproduce: - Set up a Company with BR localization - Create a product as follows: - [General Information] Product Type: Service - [Sales] LC116 Code: 14.01 - [Sales] Purpose of Use: Not applicable - [Sales] Service Code Origin: 14.01.3/168061/1524 - [Sales] Service Codes: 14.01.3/168061/1524 - Create an Invoice with Document Type "Electronic Service Invoice - NFS-e" - Add the product on the line - Compute taxes - Compute taxes again Issue: Action will be blocked by a validation error resulting from the external taxes call ``` odoo.exceptions.ValidationError: Odoo could not fetch the taxes related to Draft Invoice. Errors: Rejection: Total Installments doesnt match Total Lines ∑ installments[m]grossValue - ∑ (lines[n].lineAmount-line[n].lineTaxedDiscount) <> 0 ``` It occurs because during the call the system is considering the existing taxes on the line and it will send to the avatax service wrong amounts opw-5412456 opw-5409735 Forward-Port-Of: odoo/enterprise#108088
This update fixes an issue where international UPS shipments were generating commercial invoices with incorrect freight charges (showing $0.00). The fix ensures that freight charges are properly included on the invoice by specifying the necessary parameter during the shipment process. This ensures accurate customs documentation and avoids potential delays.
Original PR description
Issue ----- For international deliveries, the commercial invoice used for customs does not include the freight charges (it is set to 0). Steps to reproduce ----- - Create an international UPS sale - Confirm the delivery - Open the "UPSCommercialInvoice.pdf" file > In the price breakdown, freight is set to 0.0 Cause ----- It has to be specified in the `ship` request as `ShipmentServiceOptions.InternationalForms.FreightCharges.MonetaryValue` (source https://docs.rocketshipit.com/rs/docs/ups-api-parameters.html#shipment) Expected result ----- <img width="1912" height="963" alt="image" src="https://github.com/user-attachments/assets/170e49f7-6575-4524-b186-3829f4c20430" /> ----- Ticket: opw-5135494 Forward-Port-Of: odoo/enterprise#108465 Forward-Port-Of: odoo/enterprise#105505
This update resolves an issue preventing the BOE report export when using multi-company mode with companies having different VATs. The fix ensures the report correctly handles branch company selections, now requiring users to select all companies in the hierarchy for successful export.
Original PR description
**Steps to reproduce:** * Install the **l10n_es_reports** module. * Create a parent company with two branch companies with all has different VATs. * Enable **multi-company mode** with all companies selected. * Go to tax report `Mod 390` * From gear icon clck on `BOE`. **Observed behavior:** * A warning appears: Please select the main company and its branches in the company selector to proceed. * Not able to export BOE. **Cause:** * This is because the tax report's options only consider one of the two companies (because they have different VAT numbers). The button is not declared as branch_allowed, so when clicked, it checks whether all the companies of the branch hierachy are in the options => they're not => error. **Fix:** * Added the `'branch_allowed': True` to the `BOE` button options. opw-5891472 Forward-Port-Of: odoo/enterprise#107252
This update fixes an issue in the barcode picking interface where multiple extra product scans would repeatedly open a confirmation dialog. Now, the dialog opens only once and allows users to easily select or deselect extra items before confirming the addition, streamlining the picking process.
Original PR description
When adding extra products in the barcode picking interface, the confirmation dialog did not handle correctly the scan of multiple extra items. Before: Scanning multiple extra products successively opened (mutex + promise) the dialog multiple times. The user had to confirm/cancel each extra product addition one by one. After: The dialog is now only opened once and updated when scanning multiple extra products before confirming. The user can select/deselect the extra products to add before validating. [opw-5193269](https://www.odoo.com/odoo/project/49/tasks/5193269) Forward-Port-Of: odoo/enterprise#108393 Forward-Port-Of: odoo/enterprise#104932
Features or functions removed from Odoo
This update removes a temporary feature that automatically disabled longpolling after device connection errors. We've shifted to a model where clients are expected to have reliable networks, so errors are handled gracefully. This change improves system stability and reduces unnecessary interruptions.
Original PR description
We used to disable longpolling for 5 min after a failure, in order not to lose time while making requests to an unreachable device, and jump directly to WebSocket. As we now recommand using LNA, clients should have a correctly configured network: if an error occurs the next one should work correctly. We then removed the longpolling auto disable feature.