Daily updates from Odoo
Friday, January 9, 2026
29 changes · master
Enhancements to existing features
This update refactors the core Odoo HTTP module into smaller, more manageable components. This change improves code organization and potentially reduces memory usage, particularly when handling large files. The focus is on streamlining imports and optimizing file streaming.
Original PR description
The odoo.http module is a huge file with thousands of lines. In this work we split it in many smaller chunks. The desire to split odoo.http has been in the air for quite some time, notably with the…
The odoo.http module is a huge file with thousands of lines. In this work we split it in many smaller chunks. The desire to split odoo.http has been in the air for quite some time, notably with the introduction of the many facade objects. This work only moves the constants, functions and classes in new dedicated odoo.http-submodules. In order to make the diff easier to gasp, we decided *not* to do other changes such as moving methods around. That's job for a future work. We decided to re-expose under the "odoo.http" namespace only the four Controller, route, Response and request. All the other symbols are much less so used and are to be imported from their dedicated module. `content_disposition` is kinda a special one, it is often imported by controllers that load an entire file in memory before sending it. We are opinated and think it would be a better idea to stream to files in order to keep memory usage in check. We moved the function next to the Stream class so the latter can be discovered.
This update enhances the Time Off Overview by ensuring all employees are visible regardless of filtering options. Previously, the overview only displayed employees when viewed solely by individual employee groups. This change provides a more complete and accurate view of employee time off requests.
Original PR description
We show all employees in the timeoff overview only when the view is grouped only by employee and no leave filters are applied.
Task: 4852912Resolved issues and error corrections
This update resolves an issue where the progress bar in financial reports was not displaying correctly. The change updates the underlying template structure to ensure the progress bar is rendered accurately. This ensures consistent and reliable reporting for users.
Original PR description
This PR fixes a broken QWeb inheritance caused by a change in the `ProgressBarField` template structure. The inherited view was still targeting the old template layout, which caused element lookup failures at render time. The inheritance has been updated to target the new `ProgressBarField.valueBlock` template, restoring the expected behavior. TaskID-5164148
This update fixes a bug that occurred when the 'Default 48 hours/week' working schedule was deleted. The 'Payroll: Update data' cron job now handles this scenario gracefully, preventing an error and ensuring payroll data updates continue to function correctly.
Original PR description
When the ``Default 48 hours/week`` working schedule is deleted and the ``Payroll: Update data`` cron runs, a traceback is raised. Steps to reproduce the error: - Install ``l10n_mx_hr_payroll`` module…
When the ``Default 48 hours/week`` working schedule is deleted and
the ``Payroll: Update data`` cron runs, a traceback is raised.
Steps to reproduce the error:
- Install ``l10n_mx_hr_payroll`` module with demo data
- Switch to ``INNOVACION VALOR Y DESARROLLO SA SA`` company
- Go to Employees > Configuration > Settings > Change Company Working Hours
- Go to Working Schedules > Delete ``Default 48 hours/week`` working schedule
- Run the ``Payroll: Update data`` cron
Traceback:
```py
ValueError: External ID not found in the system: l10n_mx_hr_payroll.resource_calendar_def_48h
ParseError: while parsing /home/odoo/src/enterprise/l10n_mx_hr_payroll/data/hr_payroll_structure_type_data.xml:3, somewhere inside <record id="l10n_mx_employee" model="hr.payroll.structure.type">
<field name="name">Mexico: Employee</field>
<field name="default_resource_calendar_id" ref="l10n_mx_hr_payroll.resource_calendar_def_48h"/>
<field name="country_id" ref="base.mx"/>
</record>
```
The ``Payroll: Update data`` cron updates payroll data that references the ``Default 48 hours/week`` working schedule.
If the user has deleted this working schedule, the external ID no longer exists, leading to the above traceback.
sentry-7166574553
Forward-Port-Of: odoo/enterprise#103323This update resolves a bug where quickly typing in the helpdesk forum tour input field would erase the entered text. The fix ensures the popover is displayed before text input, preventing this issue and improving the user experience. This change ensures a smoother and more reliable experience for users interacting with the helpdesk forum.
Original PR description
if you write too fast, the opening of the popover erases the text in the input. In this commit, we add a step to ensure the popover is shown before writing in the input Forward-Port-Of: odoo/enterprise#103495
This update resolves a technical issue where deleting equity transactions triggered a JavaScript error in the dashboard. The problem stemmed from the sample data incorrectly assuming a company ID of '1', leading to errors when that ID wasn't found. This fix ensures the dashboard functions correctly after clearing transaction data.
Original PR description
**PROBLEM** If you delete all the equity transactions, the equity dashboard will try to load the sample data. Depending on the id of the current company, there is a js traceback. **STEP TO REPRODUCE** - On runbot, go to the equity app and delete all transactions. - Select a company. - Goes to the dashboard, there should be a js traceback (if not, try with another company). **ISSUE** The sample data create a partner data for the current company, but it assumes its id is 1. If the current company id is not present in the partner_data ids we will try to get the display_name of an undefined object, leading to a traceback. opw-5364100 Forward-Port-Of: odoo/enterprise#102207
This update resolves an issue where signing documents with non-mandatory selection fields would trigger an error. The fix ensures that a specific function isn't incorrectly applied to selection fields, preventing invalid data conversions during validation. This ensures documents can be signed without interruption.
Original PR description
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to…
Currently, an error occurs when signing a document containing a non-mandatory selection field that is left unchanged. **Steps to Reproduce:** 1. Install the Sign module. 2. Add a _Selection_ field to a document template and define at least one option. Make sure the field is not mandatory. 3. Click **"Sign Now"**, then **"Validate & Send Completed Document"** without modifying the selection field. **Error:** `ValueError - invalid literal for int() with base 10: 'Selection125340'` Cause: After this commit [1], `textareaApplyLineBreak()` is executed for all item types. For selection type, this updates the item value from `undefined` to a generated string (e.g. **Selection132**), which later causes an invalid integer conversion during validation. **Fix:** This commit ensures `textareaApplyLineBreak` is only applied to textarea items and not to other field types. [1]: https://github.com/odoo/enterprise/commit/c1bfc84505ca8053a073c23b6a7b569021e9ca0c sentry-7089120038 opw-5402249 Forward-Port-Of: odoo/enterprise#102124
This update corrects inconsistencies in the documentation for several Odoo modules. The changes ensure that all public documentation aligns with recent code updates, improving clarity and maintainability. This enhances the overall user experience and supports easier understanding of the system.
Original PR description
Forward-Port-Of: odoo/enterprise#103569 Forward-Port-Of: odoo/enterprise#101655
This update ensures our tax reporting tests accurately reflect the latest changes in how VAT payable is calculated (VP14). These adjustments maintain consistency between the test suite and the core Odoo system, guaranteeing reliable tax reporting results. This is a routine maintenance fix.
Original PR description
Update the tax report carryover tests to reflect the recent changes in the VP14 VAT payable computation. These adjustments ensure the test suite remains consistent with the updated community-side logic. Forward-Port-Of: odoo/enterprise#103656
This update removes a misleading caret symbol from the icon creator within the web_studio module. Previously, clicking the caret had no effect. This change simplifies the user interface and ensures a more intuitive experience for creating icons.
Original PR description
Before this commit: the caret is rendered outside the button and clicking it had no effect. After this commit: the caret is removed from the icon creator. task-5470025 Forward-Port-Of: odoo/enterprise#103664
This update resolves an issue where the bank reconciliation process would fail when multiple reconciliation models (like fees and write-offs) were applied to a single bank statement line. The fix combines the names of these models, ensuring the system can correctly process and validate complex reconciliation scenarios. This enhances the reliability of bank statement matching.
Original PR description
Steps to reproduce: - Configure several reconciliation models matching the same statement line. - Reconcile the line and validate When reconciling a bank statement line, multiple reconciliation models can be applied (e.g. fees + write-off). The matching confirmation message assumed a single record and crashed when accessing `reconcile_model.name`. Fix by joining the names of the applied reconciliation models. OPW-5416031 Forward-Port-Of: odoo/enterprise#103538 Forward-Port-Of: odoo/enterprise#103069
This update resolves an issue where unnecessary tax authority partners were pre-loaded in new Odoo databases, causing discomfort for users in sectors like restaurants. Now, partners are archived and activated only when the first return requiring them is created, streamlining the process and improving user experience.
Original PR description
New DBs are preloaded with tax authority partners, it makes users uncomfortable in some sectors(e.g restaurants). Archive these partners and activate them on the first return requiring them is created. task-5391773 Forward-Port-Of: odoo/enterprise#102701
This update streamlines the refund process in Odoo's Point of Sale module. Now, when a user sets the refund quantity for a line to its maximum, the system automatically selects the next available refundable line, eliminating the need for manual clicks. This improves efficiency and reduces the chance of errors during refunds.
Original PR description
Before this commit : ----------- - After set the refund quantity of a line to the maximum, the user had to manually click on the next line to refund. After this commit : ------------ - When the user sets the refund quantity of a line to the maximum (equal to the refundable quantity), the next refundable line is automatically selected. Task-5334572 Related PR-https://github.com/odoo/odoo/pull/236491
This update modifies how annual leave is calculated within the Odoo Enterprise system. The 'Annual Leave' type has been removed from leave type configurations and moved to the payroll settings. Consequently, the system no longer automatically computes total annual leave days for employees.
Original PR description
Removed Annual Leave type from leave types and added it in Payroll settings, total leave days per year are not computed anymore Task: 5048791
This update allows users to successfully sync bank accounts that have been previously archived. Previously, attempting to sync an archived account would result in an error. Now, users can reconnect and synchronize these accounts, improving data accuracy and usability.
Original PR description
Before this commit: When a user tries to sync a bank account that was previously archived, the bank sync throws an error. After this commit: Users can now sync a bank account that is in an archived state. task-5261784
This update fixes a technical issue that was causing tracebacks when generating reports. The underlying code was incorrectly referencing a parameter that had been removed, leading to errors. This change ensures reports generate correctly and reliably.
Original PR description
The method still declared a progress parameter even after it was removed from the underlying call, resulting in a traceback when unfolding the report line. The parameter is now removed. ref commit: https://github.com/odoo/enterprise/commit/ff2895144ecfc66d2b23bb872b39f5b446ae0da6 task-5476442 Forward-Port-Of: odoo/enterprise#103672
This update fixes an issue where Odoo pivot reports incorrectly displayed dimension names. Specifically, when adding a dimension based on a related field (like 'country_id.name'), the display name was not properly formatted. This change ensures dimensions are shown with the correct, user-friendly names, improving report clarity and usability.
Original PR description
Steps to reproduce:
- Insert an Odoo pivot
- Click on "defer update"
- Add a dimension with a relation ("country_id.name") => The dimension is added but marked as invalid and the display name is incorrect ("country_id.name" instead of "Country > Name")
Task: 5411336
Forward-Port-Of: odoo/enterprise#103695
Forward-Port-Of: odoo/enterprise#102237This update corrects a visual issue in the upsell subscription quotation preview where section columns were incorrectly aligned. Recent improvements to the base sale module impacted how subscription columns were calculated, leading to this misalignment. The fix ensures that all sections display correctly in the preview.
Original PR description
Steps to Reproduce: - Create an upsell subscription quotation with sections - Click on the `Preview` button Issue: - Sections colspan is misaligned compared to the rest of the lines Cause: - After recent section improvements in sale, upsell subscription columns were not taken into account while computing the section colspan Solution: - Adjust the colspan when the subscription is an upsell subscription opw-5476669 Affected Version: 19.0 Before: <img width="1920" height="932" alt="image" src="https://github.com/user-attachments/assets/2321d7d7-cb6f-465f-a1af-b143d7a8ccd3" /> After: <img width="1909" height="934" alt="image" src="https://github.com/user-attachments/assets/991eef3f-d3dd-4ee3-8316-b2370009435f" /> Forward-Port-Of: odoo/enterprise#103635
This update fixes a technical issue where sales orders were being sent to the blackbox service multiple times. The change ensures that orders are only transmitted once, improving system efficiency and reducing potential data overload. This improves the reliability of our reporting and monitoring processes.
Original PR description
This fix ensure we don't send twice the same NS (normal sale) to the blackbox. We only push the order to the blackbox if it does not contain a signature yet. Forward-Port-Of: odoo/enterprise#102564 Forward-Port-Of: odoo/enterprise#102434
This update corrects a small typographical error within the order payment validation process in the Enterprise module. The fix ensures consistent and accurate data processing, preventing potential minor disruptions to financial transactions. This is a routine maintenance update.
Original PR description
Fix small typo introduced here: https://github.com/odoo/enterprise/pull/99202 Forward-Port-Of: odoo/enterprise#103559
A technical issue causing tracebacks when using the bank reconciliation widget in debug mode has been resolved. This fix prevents errors related to popover validation when reconciling statements with invoices in different currencies, ensuring a smoother user experience.
Original PR description
In Bank reconciliation widget, when reconciling a statement with a move in different currency, users may display a popover to access some reconciliation info. Currently, accessing this component in debug mode may raise a traceback. Steps to reproduce: - Have a Bank statement in company currency - Reconcile with an invoice in foreign currency - Go in debug mode - From the reconciliation widget, locate the reconciled bank statement - Click on the reconciled bank statement popover button Issue: Traceback is shown `OwlError: Invalid props for component 'BankRecLineInfoPopOver': 'exchangeMove' is not a object` It occurs because props validation of the Owl component will fail BankRecLineInfoPopOver opw-5355964 Forward-Port-Of: odoo/enterprise#103731
This update addresses a missing 'Load More' feature in custom reports, ensuring users can efficiently browse larger datasets. A temporary workaround was implemented to accommodate reports without standard report lines, prioritizing functionality over perfect summation. This change impacts several localized reporting modules.
Original PR description
Since the new Load more which was introduced in odoo/enterprise#96974, the Load more on custom expand function was missing. Since most of the reports dont have report lines, we need to hack a bit the function. This wont support the sum of the load more lines for the columns that would have supported it but this is a compromise we have taken since it would have required to create a fake report line. The following reports dont need a load more since they have a very limited amount of lines (such as accounts or months): - account_fiscal_categories/report/account_fiscal_report_handler.py - account_fiscal_categories_fleet/report/account_fiscal_categories_fleet_report_handler.py - l10n_co_reports/models/l10n_co_reports_fuente.py - l10n_co_reports/models/l10n_co_reports_ica.py - l10n_co_reports/models/l10n_co_reports_iva.py Forward-Port-Of: odoo/enterprise#103257
This update resolves an issue with the demo data for the account_transfer module. Previously, the demo data wasn't correctly configured, leading to inaccurate reporting. This change ensures the demo data accurately reflects the module's functionality.
Original PR description
This commit fixes demo data of account_transfer module by using company_xmlid to create account.transfer.model records. opw-5391764 Forward-Port-Of: odoo/enterprise#103720 Forward-Port-Of: odoo/enterprise#103640
This update automatically clocks in users when they access the Point of Sale (POS) system. Previously, users were prompted to clock in manually before using the POS. This change streamlines the POS experience and eliminates a potential user friction point.
Original PR description
Instead of telling the user he must clock in before using its pos, we now do it for him. see odoo/odoo#241542 Task: 5433405 Forward-Port-Of: odoo/enterprise#103722 Forward-Port-Of: odoo/enterprise#102992
This update fixes a technical issue that caused JavaScript errors when opening Helpdesk tickets with SLA policies enabled in debug mode. The problem stemmed from an incorrect configuration of a key component, leading to validation failures. The fix ensures that the system handles tag props correctly, preventing these errors and improving stability.
Original PR description
Steps to reproduce: - - Open Helpdesk with developer mode enabled - Open a ticket that has an SLA policy applied - A JavaScript traceback is raised Issue: - Opening a ticket with an SLA policy applied triggers an OwlError: Uncaught Promise > Invalid props for component 'SLATag': 'onDelete' is undefined Cause: - The many2many tag field always passes the onDelete prop, but its value depends on the field configuration and may be undefined. The SLATag did not declare it as optional, causing OWL validation to fail in debug mode. Solution: - Declare onDelete as an optional prop in SLATag to align with the many2many tag field behavior and prevent the traceback. task-5368827 Forward-Port-Of: odoo/enterprise#103127
Features or functions removed from Odoo
This update removes a feature that incorrectly attempted to generate vendors based on Stripe data. The original implementation mistakenly assumed Stripe tax IDs were VAT numbers, leading to validation errors. Since a dedicated field for vendor information exists, this unnecessary step has been removed for improved efficiency.
Original PR description
In the original Stripe Issuing implementation, it was believed that in the specific case where a vendor is located in France, the `tax_id` received from Stripe in the authorizations and transactions would be the VAT number. In reality, the number received is the SIREN which fail VIES validation. As we only try to create a vendor in that very specific case, and there is no field for the SIREN (`company_registry` is the SIRET), we simply remove the feature altogether. NOTE: Remove method in master Forward-Port-Of: odoo/enterprise#103221
Code cleanup and technical improvements
This update simplifies how templates use dynamic data, making them more efficient and easier to maintain. The change updates the 't-call' syntax to pass variables directly as attributes, eliminating a previous, more complex method. This improves the overall performance and stability of Odoo's templates.
Original PR description
The `t-call` syntax is updated to use the new semantic, which passes values *as attributes/parameters* on the `<t>` (with `t-call`) tag itself, instead of relying on nested `t-set` directive. - Old (Deprecated): Used nested `<t t-set="var_name" t-value="x"/>` tags inside the calling element to define variables. - New: Variables are passed as attributes directly on the element where the `t-call` is located (e.g., `<t t-call="module.template" var_name="x"/>`). A warning is added to alert developers when using the old deprecated syntax. see: https://github.com/odoo/odoo/pull/197296 The script to automate the process has been added to: https://github.com/odoo/odoo/pull/235469
This update refactors WhatsApp code within the Odoo Enterprise platform to better organize channel-related functionality. Specifically, key data and actions are now tied to the WhatsApp channel, improving stability and maintainability. This change enhances the overall WhatsApp experience for users.
Original PR description
PR community: https://github.com/odoo/odoo/pull/242598
This update streamlines how vehicle changes are tracked within the system. Previously, separate fields were used for cars and bikes, but now the vehicle model directly stores this information. This simplifies data management and eliminates unnecessary distinctions.
Original PR description
Before https://github.com/odoo/odoo/commit/078fbba4decb32ae4b5d9878ee3788f7042382e8, plan_to_change_car and plan_to_change_bike were historically related from the driver that could have both car and bike so it made sense to have them separated. Since they are now stored on vehicle model directly, there is no reason to keep them separated anymore. The vehicle is either a car or a bike (or whatever it could be) and the concept of planning to change the vehicle is not dependant of the type of the current vehicle. This commit applies the changes done in Community Fleet module. Task-4966460