Daily updates from Odoo
Friday, May 29, 2026
30 changes · master
Resolved issues and error corrections
This update fixes a technical issue that caused an error when a contract's start date was left blank. The fix automatically uses today's date in these situations, ensuring calculations and reporting functions work correctly. This prevents unexpected errors and maintains data integrity.
Original PR description
Version: - saas-19.4 Steps to reproduce: - Generate an offer - Empty the contract_start_date field - Click away to change the focus so that computations are triggered - You should get a traceback Issue: - When empty contract start date occure error. Cause: - When contract_start_date is empty, it returns False instead of a date. This causes max() to fail as it cannot compare a boolean with a date. Fix: - Added a fallback to use today's date when contract_start_date is empty, so max() always receives valid date values. Task-6235072
This update fixes an issue where a key system call was incorrectly placed within the wrong module. The call is now correctly routed to the `pos_restaurant_preparation_display` module, ensuring proper functionality for preparation display within the restaurant point-of-sale system. This resolves a technical error impacting the display of preparation details.
Original PR description
Issue: The implementation of the call fire course for the preparation display, was done in the wrong module pos_restaurant. Fix: The call is now done in the right module pos_restaurant_preparation_display. rb-error-939014
This update resolves a minor technical issue where a file name was incorrectly spelled ('fitlers' instead of 'filters'). This change ensures proper functionality within the Spreadsheet Edition module and avoids potential errors. The fix was implemented as part of a larger task to improve code quality.
Original PR description
File were named `fitlers` instead of `filters`. Task: [6246338](https://www.odoo.com/web#id=6246338&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
This update fixes a performance issue that slowed down Odoo's rendering, particularly when viewing large reports or navigating complex tables. By simplifying the CSS rules, the system now recalculates styles faster, leading to a smoother user experience and quicker response times.
Original PR description
Avoid using `:has` selector with using a class on body to replace the has behavior. This change made a gain of in the `(re)calculate style` step when we hover a node on large table like a `report selector` on `Accounting`. The recalculation time during actions like window resize, heavy scrolling, or table sorting. Replacing it with using the specific class reduces those global checks and improves rendering performance. Forward-Port-Of: odoo/enterprise#118464 Forward-Port-Of: odoo/enterprise#118362
This update corrects a bug where certain quality control test types were incorrectly displayed during work order creation. The change ensures that these test types are only available for manufacturing operations, improving data accuracy and preventing users from selecting inappropriate options. This resolves an issue caused by an optimization in Odoo's domain filtering.
Original PR description
### Issue: The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation. ### Expected behavior:…
### Issue:
The `Print Label`, `Register Production`, `Register By-products`and `Register Consumed Materials` are all available in the test types at control point creation.
### Expected behavior:
These test types are only meant for manufacturing operations and are supposed to be hidden by the field domain:
https://github.com/odoo/enterprise/blob/f56aa85b4ad32c5d9ad5593df1366d72e88da0e4/mrp_workorder/models/quality.py#L102-L104 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
### Cause of the issue:
Since saas-18.1: 5ef007a2116e528b796ebe80fb291ba5f1a94c8f domains are optimised into equivalents SQL clause with better sql performances. This optimization results in the following match for boolean fields:
`('field', '=', True)` -> `('field', 'in', OrderedSet([True]))`
`('field', '=', False)` -> `('field', ' not in', OrderedSet([True]))`
Because of these:
https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1058-L1079 https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L1215-L1236
Now the issue is that the specific `search_method` of the `allow_registration` field is then called with this optimized domain: https://github.com/odoo/odoo/blob/82b16e8feb3d60a9a3855e3adb3164ae5a6c041d/odoo/orm/domains.py#L860-L866 https://github.com/odoo/enterprise/blob/00d6cccd75c402378698a6fd11ee2692f2361c7f/mrp_workorder/models/quality.py#L20-L24
And since `value` is defined as a non empty ordered set in both cases it the search method returns a True leaf as search domain.
opw-5915197
Forward-Port-Of: odoo/enterprise#118212
Forward-Port-Of: odoo/enterprise#117068This update optimizes how the system tracks subscription usage, leading to faster reporting and a smoother experience for users managing subscriptions. The change addresses a performance issue related to query counts, ensuring the system remains responsive even with a large number of subscriptions. This improves overall efficiency for sales and subscription management.
Original PR description
runbot-163667 Forward-Port-Of: odoo/enterprise#117266
This update resolves an issue where setting Intrastat fields on product templates without associated products would trigger an error. The fix ensures that the system correctly handles product templates without variants, preventing unexpected errors and improving data integrity. This ensures accurate Intrastat reporting.
Original PR description
Problem: The Intrastat fields on product.template are computed without being stored. They are stored in product.product and the same values are used when computing the values on product.template. When trying to set the Intrastat fields on a product template without any product, an RPC error is raised without specifying the reason. Steps to reproduce: 1. Create a new product (product.template) 2. Add an attribute to the product with Variant Creation set to Dynamic, this will set no product variants (product.product) for the product template. 3. Try to set the Intrastat Commodity Code on the product template 4. Save the product template 5. Notice the RPC error raised without any explanation opw-6179705 Forward-Port-Of: odoo/enterprise#117856
This update replaces the term 'VAT' with 'Tax ID' across Odoo Enterprise, addressing a previous incomplete change. This ensures clarity and accuracy when handling tax information for users in the US and other countries where 'VAT' is not commonly understood, improving data consistency.
Original PR description
Similar changes were made before but were incomplete [1]. In the US and many other countries the term VAT is not understood. Use the universally understood Tax ID instead. [1] https://github.com/odoo/odoo/pull/239362 task-6231891 Forward-Port-Of: odoo/enterprise#117955
This update corrects a dependency issue within the Italian reporting module (l10n_it_reports). Specifically, a new filter was added to address a conflict related to pension fund types, originally defined in a separate module. This ensures the Italian reporting functionality operates correctly and reliably.
Original PR description
Commit: 0a5657297f312cb3e5f6c3ab6a281acf71fbee3b added a filter for the field l10n_it_pension_fund_type which is defined in l10n_it_edi_withholding and not l10n_it_reports runbot-242217 Forward-Port-Of: odoo/enterprise#113185
This update resolves an issue where a test for the tax return journal failed because the test database lacked a related module. The fix ensures the journal is always visible during testing, preventing the test from timing out and streamlining the development process.
Original PR description
The tour clicks a Tax Returns button rendered on the tax-return journal's kanban card on the accounting dashboard. That button only appears when show_on_dashboard is True on the journal, which is flipped by an inverse defined in the accountant module. Since account_reports does not depend on accountant, running this test on a database without accountant installed (e.g. account_reports only) leaves the journal hidden and the tour times out on the first step. To fix this we force the journal to be shown in this test rather than relying on accountant. runbot-error-242120 Forward-Port-Of: odoo/enterprise#116806
A recent update to the l10n_be_coda module incorrectly commented out a test instead of updating it. This fix ensures that tests are properly updated, maintaining the reliability of the module's functionality for Belgian accounting processes. This resolves a minor issue that could have impacted test reporting.
Original PR description
Test was commented instead of updated in this commit https://github.com/odoo/enterprise/commit/f1fafe0060c221e4a268c897af30455cc3d029ef task-none Forward-Port-Of: odoo/enterprise#118428 Forward-Port-Of: odoo/enterprise#117924
This update fixes an issue where the 'Send Report' action was removed from the planning slot views. This change ensures users can easily generate reports directly from the planning slot form, improving workflow efficiency. The fix mirrors a previous enhancement to maintain consistency across related views.
Original PR description
Issue: ---------------------------------------- Some actions that were in Field Service task form view app aren't anymore in planning slot form view. Steps to reproduce: ---------------------------------------- - Go to the list view of planning view and select some slots - In the cog the action "Send Report" is there - Go in the slot's form view - In the cog, the action is not there Cause: ---------------------------------------- During the merge of Field Srevice in Planning. The action was removed from the form view. Solution: ---------------------------------------- Like in [saas-19.1](https://github.com/odoo/enterprise/blob/62b11599d08afa93cb9391f0b5aee3c610a754c8/industry_fsm_report/views/project_task_views.xml#L135-L146) we add "Send report" to the cog menu in list view. opw-6227745 Forward-Port-Of: odoo/enterprise#117744
This update resolves an issue preventing accurate employee attendance filtering within the Saudi HR Payroll module. The change grants necessary access to read employee country codes, ensuring correct filtering based on location. This improves the reliability of attendance tracking for employees in Saudi Arabia.
Original PR description
/hr_attendance:TestAttendanceManager.test_attendance_manager_rights uses write function defined in l10n_sa_hr_payroll_attendance which in some cases requires to read the country_code of an employee to filter. Access rights on employees blocked it from reading country_code. Added sudo on employee for reading and filtering on country_code. task-6226413 Forward-Port-Of: odoo/enterprise#117718
This update corrects a bug where the Email Alias helper wasn't visible in Helpdesk teams when the default external email server was disabled. The issue stemmed from a misinterpretation of the system parameter, which was incorrectly treated as a boolean value. This fix ensures the helper is correctly displayed regardless of the server configuration.
Original PR description
**Steps to reproduce:**
- Go to Settings > System parameters
- Set the `base_setup.default_external_email_server` to `False`
- Install Helpdesk app
- Go to any Helpdesk Team
- Email alias helper is not visible
**Issue:**
`has_external_mail_server` is a Boolean field computed from the `base_setup.default_external_email_server` system parameter.
After [1] it is parsed as a string with `get_str`, which means that the conversion from string to boolean will return `True` when the value is set and not null.
```py
bool('False') -> True
```
(It also seems that on saas this value is set by default)
**Fix:**
Properly parse it as a boolean using `get_bool`.
[1] https://github.com/odoo/enterprise/commit/c710031215c76a9e7ddb694d2a2787c8cca40dcd
opw-6229696
Forward-Port-Of: odoo/enterprise#118425This update fixes an issue where CFDI (Mexican electronic invoice) documents were being generated with incorrect length limits for key attributes like 'Folio' and 'Serie'. Swapping these values ensures the documents comply with Mexican regulations and prevents generation of invalid invoices. This change does not impact existing valid invoices.
Original PR description
Issue: length limits for attributes `Folio` and `Serie` of the `<cfdi:Comprobante>` elements were swapped, which could result in generation of invalid documents. Solution: swapping the values. This should not affect anything for existing valid documents. task-6046738 Forward-Port-Of: odoo/enterprise#118452 Forward-Port-Of: odoo/enterprise#116955
This update resolves an issue where incorrect data in payslips could cause warnings. The change improves how the system handles these errors, preventing potential disruptions to payroll processing. This ensures more reliable and accurate payroll calculations.
Original PR description
…ta and versions Task: 6133111 Forward-Port-Of: odoo/enterprise#117752 Forward-Port-Of: odoo/enterprise#114778
This update resolves a problem where users couldn't link invoices to the chatter feature in Odoo. The fix prevents a security check from failing when copying attachments, ensuring users with appropriate permissions can successfully link documents. This improves the usability of the documents module.
Original PR description
**Steps to reproduce:** 1. Create user with role: User. Sales: Administrator, Accounting: Administrator and Documents: System Administrator. 2. Create a SO, create invoice, confirm, and send. 3. Now…
**Steps to reproduce:** 1. Create user with role: User. Sales: Administrator, Accounting: Administrator and Documents: System Administrator. 2. Create a SO, create invoice, confirm, and send. 3. Now go back to the SO, and try to link the INV document to the chatter. **Cause:** When linking an existing document to the composer, the underlying attachment is copied. If the source attachment is bound to a specific field (e.g., `res_field = 'invoice_pdf_report_file'`), the `copy()` operation duplicates this field reference. Odoo's native security checks then attempt to verify access to that specific field on the target model (`mail.compose.message`). Because the composer does not have this field, the check fails and throws an AccessError, even if the user has full rights to the source document. **Solution:** Explicitly set `"res_field": False` during the copy operation. This strips the original field binding, cleanly converting the file into a standard, generic chatter attachment for the composer without bypassing the standard security framework. opw-5916364 Forward-Port-Of: odoo/enterprise#117347 Forward-Port-Of: odoo/enterprise#107723
This update fixes a confusing naming convention for quarterly returns. Previously, returns were labeled with 'Q1,' 'Q2,' etc., regardless of the company's fiscal year. Now, returns are named with the actual month and year range (e.g., 'January 2024 - March 2024'), making them easier to understand and use.
Original PR description
Currently, if the company fiscal year doesnot align with calender year, i.e Fiscal year end is not december and any month in between like India (March 31), while creating quarterly returns, the return name has Q1 for Jan - Mar, Q2 for Apr - Jun, and so on, which is not aligned with the fiscal year quarters. This commit fixes that issue by naming it like "From Month Year - To Month Year" for quarterly returns. task-6124692 Forward-Port-Of: odoo/enterprise#117298 Forward-Port-Of: odoo/enterprise#114438
This update corrects a technical issue where multiple executions of a process could create invalid CFDI invoices with duplicate Addenda nodes. The fix ensures CFDI invoices comply with SAT standards, preventing potential rejection by recipient systems. This maintains data integrity and avoids errors in invoice processing.
Original PR description
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes. This…
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes.
This occurred because the method manually injects the new Addenda string at the end of the XML without checking if one was already present from a previous execution.
According to the SAT's Anexo 20 and the CFDI 4.0 XSD, the Addenda must be a single node and the last element of the Comprobante. Duplicating root-level nodes like `cfdi:Addenda` is a bad XML formation practice that can cause rejection by the recipient's automated systems.
This fix ensures the CFDI structure remains valid by:
1. Searching for an existing `{*}Addenda` node in the CFDI string.
2. Removing the old node before reconstructing the XML.
3. Preventing the string replacement logic from stacking multiple Addenda blocks.
This ensures that the CFDI remains clean and compliant with the official standard even if the process is triggered multiple times.
Forward-Port-Of: odoo/enterprise#109760This update optimizes the performance of large spreadsheet tables, particularly in areas like the Accounting > Balances Sheets. By streamlining how the system checks styles, it reduces loading times during actions like hovering, resizing, and sorting, leading to a smoother user experience.
Original PR description
Avoid using the :has() selector and use a specific class on the body instead to replicate the same behavior. This reduces work during the "Recalculate Style" phase (for example when hovering rows in large tables such as the Accounting > Balances Sheets). It lowers recalculation time during window resizes, heavy scrolling, and table sorting by preventing broad selector matches and limiting style checks to elements with the specific class. Forward-Port-Of: odoo/enterprise#118600 Forward-Port-Of: odoo/enterprise#118535
This update resolves an issue that prevented users from expanding depreciation schedule reports for assets without depreciation. The fix ensures the system handles assets with the 'no_depreciation' method correctly, preventing a technical error and improving report functionality. This ensures all asset reports are accurate and accessible.
Original PR description
When a user expands the report line of a no-depreciation asset in the depreciation schedule report, a traceback is raised. Steps to reproduce the error: - Install ``account_asset`` module with demo…
When a user expands the report line of a no-depreciation asset in the depreciation schedule report, a traceback is raised. Steps to reproduce the error: - Install ``account_asset`` module with demo data - Go to Accounting > Accounting > Assets > Create a new asset > Set Depreciation Model: No depreciation and Fixed Asset Account > Confirm - Go to Accounting > Review > Depreciation Schedule - Select the current fiscal year in filters - Expand the asset report line Traceback: ```py UnboundLocalError cannot access local variable 'period_suffix' where it is not associated with a value ``` https://github.com/odoo/enterprise/blob/5edd033ce05d65a79bc5b21ad2d1559a1af78056/account_asset/models/account_assets_report.py#L388-L390 Here, ``period_suffix`` is only assigned when the asset method is ``linear`` or ``degressive``, For assets using the ``no_depreciation`` method, the variable remains undefined, leading to the traceback when returning the depreciation rate string. sentry-7504906018 Forward-Port-Of: odoo/enterprise#118485
This update ensures Knowledge articles always print correctly, regardless of how printing is initiated. The changes involved standardizing asset loading and refining CSS rules to prevent unintended styling issues in other Odoo modules. This improves the overall printing experience for users.
Original PR description
Previously, the file containing the Knowledge print assets was lazy-loaded when the user triggered a print action through the UI. However, printing can also be initiated through other mechanisms…
Previously, the file containing the Knowledge print assets was lazy-loaded when the user triggered a print action through the UI. However, printing can also be initiated through other mechanisms (keyboard shortcuts, contextual menu, etc.), which prevented us from consistently detecting when to load the assets. In those cases, the assets were not loaded and the article appeared blank (see: odoo/enterprise#70243). To ensure the assets are always loaded regardless of how printing is triggered, we moved them to the common print bundle and adopted the standard asset-loading approach. This change also simplifies the codebase by removing JavaScript workarounds previously used to load the assets dynamically. However, some CSS rules in the Knowledge print stylesheet target global elements such as the web client container. Since the stylesheet is now included in a global asset bundle and always loaded, these rules apply to all modules and may cause rendering issues when printing views outside of Knowledge. To prevent such side effects, the CSS rules in `knowledge_print.scss` will be updated to use more specific selectors. The rules will be scoped so they only apply when the container includes the Knowledge view (using the `:has`). This PR also refactors the stylesheet by removing outdated rules that no longer match any elements. Several of these rules predate the major UI refactoring introduced in Odoo 16. Task-5999878 Forward-Port-Of: odoo/enterprise#118448 Forward-Port-Of: odoo/enterprise#109379
This update resolves an issue that caused temporary problems during Odoo upgrades. It replaces a complex workaround with a simpler method of managing settings related to service timesheets, preventing the creation of unnecessary data records and ensuring smoother upgrades.
Original PR description
Replace the `res.config.settings transient record + execute()` hack with a direct group implication on `group_field_service_allow_material` to avoid orphan transient records during upgrade. see: https://github.com/odoo/upgrade/pull/10310#issuecomment-4518235969 Forward-Port-Of: odoo/enterprise#118178
This update corrects a technical issue related to how currency rates are configured in Odoo. The change ensures that the system correctly retrieves configuration data, preventing a potential error that could have impacted functionality. This is a routine maintenance update.
Original PR description
Since saas-19.1, get_param has been removed from ir.config_parameter and replaced by typed helpers such as get_int, get_float, and get_bool, etc. This commit replaces the deprecated get_param call with get_int to prevent an AttributeError. Forward-Port-Of: odoo/enterprise#118621
This update resolves an issue where account reports were returning incorrect data due to a problem with how audit amounts were calculated. Specifically, the system was unable to handle `NULL` values in the SQL, leading to errors in derived calculations. The fix ensures accurate reporting by returning a default value of 0.0 when audit data is unavailable.
Original PR description
Fetching `compute_sql` fields directly can make generic `read()` calls fetch account audit fields outside an audit working file context. In that case, the audit amount SQL returned a bare `NULL`. This became problematic for derived fields such as `audit_var_n_1`, whose SQL expression subtracts the current and previous balances. PostgreSQL cannot resolve `NULL - NULL` because both operands have unknown type. Return `0.0` for audit amount SQL when there is no working file, matching the Python compute fallback and keeping derived audit expressions typed. Related to: https://github.com/odoo/odoo/pull/264305
A recent update caused the Helpdesk Kanban view to crash. This fix removes a lingering reference to a previously removed color field, resolving the instability. This ensures the Kanban view functions reliably for users.
Original PR description
Steps to Reproduce: - Open Helpdesk app. - Open Helpdesk Stages from configurartion. - Switch to Kanban view. Issue: - View crashes. Reason: - Residual usage of color field which removed in https://github.com/odoo/enterprise/pull/105595 is being used in kanban highlight color. Fix: - Remove the kanban highlight color attribute. task-5485507
This update resolves inconsistencies in the demo data for the sales commission module, specifically related to date calculations. Previously, the demo data would fail to load correctly depending on when the module was installed, leading to inaccurate reporting. This fix ensures the demo data always functions as expected, providing reliable demonstration of the module's features.
Original PR description
Before this commit, issue could be observed with demo data sometimes: - If the module was installed on the 31th of decembre --> the date_from of the second sale.commission.plan.user would start after the date_to of the plan, causing an error. - If the module was installed on the first of January --> the date_to of the first period would be the 28th of February, which does not correspond to the end of the first quarter. It is possible to reproduce the issue with faketime: faketime "2027-01-01 23:59 UTC" ./odoo-bin -c ../launch.conf -d post -i sale_commission runbot-939060
Code cleanup and technical improvements
This update clarifies the naming of a key widget from 'RemainingDaysField' to 'RelativeDateField'. This change addresses a previous misunderstanding about the widget's functionality, which accurately represents both past and future dates. This ensures consistent and accurate date calculations across various modules.
Original PR description
*: helpdesk, hr_appraisal, l10n_au_hr_payroll_account, pos_settle_due, sale_renting, web_studio: widget usages adaptations The widget name 'RemainingDaysField' was misleading as it implies a focus on future countdowns, whereas the widget is also used for past dates. task-6175442
This update modernizes the Clickbot by restructuring it as an ES6 class, enhancing its organization and maintainability. The changes also integrate the Clickbot with the application's menu system for more efficient navigation and data collection. This improves the overall user experience.
Original PR description
This commit completely revamps the Clickbot. The major modifications include: * The Clickbot is no longer a collection of procedural functions, but rather a structured ES6 class. * The Clickbot now utilizes the `menuService` to collect application and menu information, as well as to handle navigation between menus. task-id 6249942
This update streamlines the Belgian payroll process by moving the 'fixed_term' field to the dedicated l10n_be_hr_payroll module. This ensures the field is only displayed for Belgian employees, simplifying data and improving accuracy within the payroll system.
Original PR description
The fixed_term field is defined on employee and version in the hr and hr_payroll models. However, it is only ever useful in l10n_be_hr_payroll. Here, we want to move the field to that module and avoid showing it if the employee is not belgian. Here we remove the field from the employee and version models of the hr_payroll module, and add it back to the l10n_be_hr_payroll_module and its view. Task: 6229539