Daily updates from Odoo
Thursday, January 15, 2026
24 changes · master
Enhancements to existing features
This pull request makes small adjustments to the HR Payroll module's user interface. Specifically, the location of a disabled field has been changed. These adjustments are intended to improve the overall usability and clarity of the payroll system.
Original PR description
- changed the position of the disabled field. task-5452740
This update adds a new checkbox to IoT box settings, allowing administrators to control whether HTTP or HTTPS is used when communicating with the device. Previously, this setting was limited to the POS, but now it's configurable per IoT box, providing greater flexibility and control over network access.
Original PR description
Before this commit, LNA for IoT boxes could only be enabled globally, not per IoT box, and it was only ever enabled in the POS. After this commit, we add a 'Use Local Network Access' checkbox to the IoT box form view. It functions in the same way as the checkbox for the `pos.printer` model. When enabled, HTTP instead of HTTPS will always be used when contacting that IoT box. The setting applies everywhere instead of just in the POS, as long as the `iot_http_service` is being used. task-5494461
This update enhances the thumbnail displayed for the Spreadsheet Edition of Odoo by adding a graph visualization. This provides a clearer visual representation of data within the spreadsheet, making it easier for users to quickly understand the key information. This is an improvement to the user experience.
Original PR description
Task: 4236179
This update streamlines the Fiskaly setup process for Odoo Enterprise users in Austria. Key changes include automated credential authentication and clearer alerts guiding users through the configuration, improving ease of use and reducing potential errors.
Original PR description
Task: [#5354476](https://www.odoo.com/odoo/project/1737/tasks/5354476) --- The Fiskaly configuration for Austrian companies has been edited: - Generating new credentials will try to authenticate right after generating them. - The *Test Fiskaly* buttons is now only visible in debug mode. - The *Generate Credentials* button won't be visible if the authentication has been successful except if the user is in debug mode. - The *Authenticate Keys* button is only available when the authentication has failed. - The *Manage by Odoo* checkbox has been removed and we force its value to True when generating new credentials. - An alert is displayed to guide the user depending on the state of the Fiskaly configuration (not authenticated, must regenerate credentials, etc). Forward-Port-Of: odoo/enterprise#100583
This update expands the list of models automatically included in Odoo's preset export configurations. This ensures that the exporter consistently includes essential models, streamlining the process of backing up and restoring Odoo databases. It's a small improvement that enhances data protection and simplifies system recovery.
Original PR description
In this PR we add several models to the **PRESET_MODELS_DEFAULTS** list such that the exporter includes necessary models by default. Forward-Port-Of: odoo/enterprise#86287
Resolved issues and error corrections
This update resolves a technical issue that caused a traceback error when removing a selected pay category for employees in the payroll section. The fix ensures the system handles the removal of pay category selections correctly, preventing errors and improving payroll stability. This change impacts the HR Payroll module.
Original PR description
Fixed a traceback bug that appears when removing unselecting the Pay Category in the Employee's form payroll tab Steps to reproduce: - Select a pay category for an employee - Delete your selection - Traceback appears Cause: _compute_display_be checks on the name of the structure_type_id without checking that this field is not null, producing a bug when its value is removed task-5453432
This update fixes a minor issue in the Thai tax reporting module where trailing spaces were causing incorrect calculations in tax reports. The change removes this space, restoring the reports to accurately reflect tax liabilities. This ensures data integrity for Thai businesses using Odoo Enterprise.
Original PR description
-Report line formula was converted from Char to Text, which no longer strips trailing spaces. -The fix removes the trailing space from "formula" to restore correct behavior. Related Community PR: https://github.com/odoo/odoo/pull/242462 task-5468804
This update corrects a database error that prevented the Tax Report from properly expanding invoice lines. The fix ensures accurate report generation by using the correct database table for tax descriptions. New test cases have been added to verify the report's functionality.
Original PR description
Before: The `query_tax_lines` method was incorrectly using the account tag alias to access the `description` field, which does not exist on that table. This caused a database error when expanding invoice lines from the Tax Report. After: Now the query correctly uses the `account_tax` table alias to fetch the tax description. - Also added test cases for sales and purchase reports to ensure correct generation of report lines and proper expansion of the hierarchical structure. task-5461512 Forward-Port-Of: odoo/enterprise#104111 Forward-Port-Of: odoo/enterprise#103668
This update fixes a technical issue preventing AI server tools from running correctly. The problem stemmed from an unnecessary inclusion of '__end_message' in tool arguments, causing validation errors. The fix ensures correct tool execution by removing this element before validation.
Original PR description
When executing AI server actions, tools with `ai_tool_schema` defined would fail with "Missing definition for __end_message" error. Root cause: - `_prepare_tools` adds `__end_message` to the schema sent to the LLM - The LLM returns tool calls with `__end_message` in arguments - `_ai_tool_run` validates arguments against the original schema (which doesn't have `__end_message`) - Validation fails with "Missing definition for __end_message" Fix: Use `pop` instead of `get` to extract and remove `__end_message` from arguments before calling the tool executor. This ensures that it's not passed to the tool validation. TASK-ID: 5423756 Forward-Port-Of: odoo/enterprise#103779
This update fixes a dashboard display issue that previously showed incomplete employee information during payroll exports. The changes now correctly list employees without version ID export codes and incorporate Prisma code for a better user experience. This ensures accurate and complete payroll export data.
Original PR description
\* = {acerta, group_s, prisma}
Dashboard warnings opened a contract template containing the version data of the employee, while not showing employee's name or id, this commit changes the redirected view to a list of employees that do not have the version id's export code.
This commit also adds Prisma code to the external codes group for better UX
task: 5212681
Forward-Port-Of: odoo/enterprise#98389This update fixes a random failure in a key tour that simulates unpacking packages onto pallets within the stock management system. The issue stemmed from a timing conflict during the tour's steps, leading to incomplete actions. The fix adds a verification step to ensure the first pallet line is fully unpacked before proceeding, improving the tour's reliability.
Original PR description
Before this commit, the tour `test_internal_picking_reserved_move_packages_into_new_palet` was randomly failing. In this tour, we have two palets we unpack. The issue is, after unpacked the first one, we complete the second one line and then we unpack it. But it can happen the click on the button to complete the second line was done too quickly (in the meantime the first palet line is unpacked) and thus, because of this race condition, the second palet line was not complete (either it's just a visual bug due to a refresh in the wrong time, either the complete action is dropped due to the first line unpacking action.) To fix that, this commit adds a step to verify the first line is correctly unpacked before going further. runbot-build-error: [237801](https://runbot.odoo.com/odoo/runbot.build.error/237801) Forward-Port-Of: odoo/enterprise#104261
This update resolves a technical error that occurred when a sale order lacked an invoice date. The fix ensures that stock move filters now correctly use either the order's last invoice date or today's date, preventing a traceback and ensuring accurate stock management for subscription orders. This improves the reliability of the subscription order fulfillment process.
Original PR description
The Issue: Prior to this commit, When the sale order last_invoice_date is False, a traceback is thrown The Fix: To resolve this, We get the last_invoice_date or todays date opw-4403557 Forward-Port-Of: odoo/enterprise#75717
This update fixes an issue preventing non-administrator users from updating GI CFDI sequences. Previously, the system required elevated privileges, limiting functionality. Now, sequence updates are available to all users, streamlining the process for generating CFDI documents.
Original PR description
In odoo/enterprise#102500, support was added for custom GI CFDI sequences at branch level. However, the sequence consumption fails for non-admin users due to missing write access on ir.sequence, so sudo() is required when updating number_next. Forward-Port-Of: odoo/enterprise#104242
This update resolves an issue related to the DmfA declaration in the Belgian payroll module. The change adapts the payroll calculations to align with recent refactoring efforts within the Odoo Enterprise platform. This ensures accurate and compliant payroll processing for Belgian employees.
Original PR description
Forward-Port-Of: odoo/enterprise#104175
This update corrects a technical error that impacted the processing of annual leave data. The group assigned to a key feature related to annual leaves was mistakenly changed, leading to a runbot error. This fix ensures accurate tracking and reporting of employee leave balances.
Original PR description
Following a runbot error, the group on l10n_ae_annual_leaves_taken was changed from hr to the payroll group task-5498578
This update resolves an issue where the payroll rule parameter module would generate a technical error when configured with a future date. The fix ensures that computed fields are properly initialized, preventing the traceback and guaranteeing accurate calculations for payroll rules. This improves the stability and reliability of the payroll processing.
Original PR description
Steps to reproduce: -------------------------------- 1. Install `hr_payroll` module without demo 2. Go to Payroll > Configuration > Rule Parameters 3. Create a new rule parameter with code 4. In…
Steps to reproduce:
--------------------------------
1. Install `hr_payroll` module without demo
2. Go to Payroll > Configuration > Rule Parameters
3. Create a new rule parameter with code
4. In history page select the date in future
Observation:
--------------------------------
Traceback occurs:
```
File '/home/odoo/odoo/community/odoo/orm/fields.py', line 1456, in __get__
raise ValueError(f'Compute method failed to assign {missing_recs}.{self.name}')
ValueError: Compute method failed to assign hr.rule.parameter(2,).current_value_one_line
```
Issue:
--------------------------------
https://github.com/odoo/enterprise/blob/bbf53fbfc19e4c422cfefabd4689fc0f5156d359/hr_payroll/models/hr_rule_parameter.py#L88-L106 The compute method assigns values only inside conditional blocks. When both conditions fail, the method exits without assigning any value to the computed fields, causing a compute error
Solution:
--------------------------------
Initialize the computed fields with `False` before the conditional logic. If the second condition is met, the correct value is then assigned. This prevents the traceback and ensures proper field computation.
opw-5438500
Forward-Port-Of: odoo/enterprise#104346
Forward-Port-Of: odoo/enterprise#102924This update resolves a minor issue in the invoice import process where the wrong company's purchase tax was sometimes selected when importing invoices in a business with multiple companies. This has been fixed to ensure accurate tax calculations across all company setups. The fix was part of a larger refactoring effort.
Original PR description
In v18.4, the invoice import has been refactored with these 2 PRs: - [189979](https://github.com/odoo/odoo/pull/189979) - [75327](https://github.com/odoo/enterprise/pull/75327) This introduced a small bug where, in a multi-company setup, an `account.tax` could be selected from the wrong company when `_fetch_mail()` was called from the cron `Mail: Fetchmail Service` or if the method was called manually from the wrong company. Ticket: opw-5375785 Forward-Port-Of: odoo/enterprise#104075 Forward-Port-Of: odoo/enterprise#103190
This update corrects a terminology issue in our accounting reports. Specifically, it replaces instances of 'VAT' with 'tax' across various locations, ensuring consistent and accurate reporting for US and international users. This change improves clarity and avoids confusion related to tax terminology.
Original PR description
In the US and many other countries, the term "VAT" doesn't really exist. Most countries have their own term to refer to a sales tax or other types of taxes and have already adjusted it via translations. Given that we can't create a translation for en_US just to translate VAT -> Tax, we have to swap the few places that refer to taxes as VAT to actually use tax as it is a more universal term than VAT. task-5401292
This update resolves an error that prevented users from creating and saving bank statements within the accounting module. The issue stemmed from a problem accessing data within the system, now corrected by using a more reliable method for data retrieval. This ensures a smoother experience when managing bank transactions.
Original PR description
We get an owl error: `TypeError: Cannot read properties of undefined (reading 'root').` The code tries to read data from this.env.model, but it is undefined. Steps To Reproduce: 1. Install `account_accountant` 2. Go to Accounting Dashboard > Bank > `...` > Transactions 3. Open in the list view 4. Select any number of transactions 5. Type something in the statement field of one of the rows 6. Press Create and Edit to create a new Statement 8. Save the statement Ticket [link](https://www.odoo.com/odoo/project.task/5352277) opw-5352277 Forward-Port-Of: odoo/enterprise#104072 Forward-Port-Of: odoo/enterprise#101232
This update fixes a display issue in search results, now consistently showing a helpful 'Domain is invalid' message instead of errors. Additionally, the search logic has been optimized for better performance and allows users to easily filter for records that don't meet specific criteria (e.g., 'Is Not Set').
Original PR description
Search method logic was rewritten so since commit:
https://github.com/odoo/odoo/commit/92301a5b300dec1ddfca44dc35318b83d67c56fa
`raise NotImplementedError(_("some text"))`
no longer raises an error nor does it ever show the error message. Instead a notification that says "Domain is invalid. Please correct it" is always displayed when the method is unable to run the search. Therefore we update the legacy way of doing it in these search methods so that the code is clean (i.e. so no one copies it) and to avoid translating strings that will never be visible.
Additionally, the search logic was also updated such that the `value` exists is no longer needed and the `=`/`!=` operators are handled by `in` for optimized code. This change makes it so users can now do the "Is Not Set" search since it will return only the records that do not match the "Is Set" logic.
Forward-Port-Of: odoo/enterprise#104213
Forward-Port-Of: odoo/enterprise#104115This update resolves a technical issue that caused a traceback error when using pivot tables within Odoo's spreadsheet functionality. The fix ensures pivot tables now function correctly, regardless of the data dimensions used, improving spreadsheet usability for users. This improves data analysis and reporting.
Original PR description
Task: 5085724 Forward-Port-Of: odoo/enterprise#103369
This update resolves an issue where FrontDesk hosts with limited access were unable to check out visitors via email. The fix allows the checkout process to run with elevated permissions, ensuring all hosts can successfully complete the visitor checkout. This improves the user experience for FrontDesk staff.
Original PR description
Steps to reproduce: * Create a visitor record with a host who has only FrontDesk user access. * Ensure Notify with Email is enabled on the station. * Click Check Out Visitor from the received email → access error appears. Issue: * Hosts with only FrontDesk user access received an access error when clicking the “Check Out Visitor” button from the email notification. * They were unable to complete the visitor checkout process. Fix: * Run the checkout action with sudo() so the host can successfully check out the visitor from the email link. Impact: * Hosts can now check out visitors without encountering permission errors. task-5373026 Forward-Port-Of: odoo/enterprise#104250 Forward-Port-Of: odoo/enterprise#101179
Code cleanup and technical improvements
This pull request improves the consistency and readability of the Amazon and Shopee integration code by applying linting and formatting. Specifically, error handling has been refined to focus only on errors related to API requests, ensuring a cleaner and more maintainable codebase. This change doesn't impact functionality.
Original PR description
task-5436779 See also: - https://github.com/odoo/odoo/pull/243877
This update introduces a unified template for generating Point of Sale receipts across multiple Odoo modules. By consolidating receipt templates, maintenance is simplified and ensures consistent formatting for all POS transactions. This change avoids duplication and improves overall system efficiency.
Original PR description
*: l10n_at_pos, l10n_br_edi_pos, l10n_de_pos_cert, l10n_eu_iot_scale_cert, l10n_ke_edi_oscu_pos, l10n_se_pos, pos_tyro, pos_blackbox_be, pos_enterprise, pos_urban_piper This commit introduces a new…
*: l10n_at_pos, l10n_br_edi_pos, l10n_de_pos_cert,
l10n_eu_iot_scale_cert, l10n_ke_edi_oscu_pos, l10n_se_pos, pos_tyro,
pos_blackbox_be, pos_enterprise, pos_urban_piper
This commit introduces a new `point_of_sale.pos_order_receipt` template
that can be used to generate receipts via the QWeb Python & JS renderer.
The main idea was to avoid duplicating the receipt template, as it is
overridden in almost all modules related to the Point of Sale.
Duplicating this template would have been tedious to maintain.
As a result, this new template stored in the Point of Sale data is a
"simple" template in which we cannot use directives that are only
understandable by Python or JS. Here are the directives that can be used
- `t-if`
- `t-elif`
- `t-else`
- `t-foreach`
- `t-att-*`
- `t-attf-*`
- `t-call`
- `t-out`
- `t-set`
- `t-as`
- `t-name`
- `t-value`
This template then takes a pre-built object from a command and retrieves
all the necessary information from it. It is important to remember that
JS and Python must generate the same object.
---
About evaluations:
JS rendering is more permissive than Python. For example, calling an
undefined index `order['lines']['data']` will be accepted by JS but not
by Python.
We therefore assume that Python will be the reference when modifying
the template.
Complex evaluations in Python/JS are not allowed, as they require overly
complex conversion.
---
Template conversion:
When downloading the template in JS, these conversions are performed:
- Addition of `t-key` for `t-foreach`
- Replacement of `.get('something')` with `['something']`
- The operator `and` becomes `&&`.
- The `or` operator becomes `||`.
- The `not` operator becomes `!`.
- `True` becomes `true`
- `False` becomes `false`
- `None` becomes `null`
This conversion is simple and matches the template's requirements.
The method used cannot be used with other ASIS backend templates.
taskId: 5113480