Daily updates from Odoo
Wednesday, January 21, 2026
8 changes · 17.0
Resolved issues and error corrections
This update resolves a bug preventing the generation of PDFs with custom header and footer pages when using Python 3.10. The issue was caused by an incompatibility with the previous PyPDF2 version. Upgrading to version 2.12.1 ensures proper PDF rendering and functionality.
Original PR description
The feature of printing PDF with custom header / footer pages does not work with the old version of PyPDF2 on python 3.10. Bump to newer version of PyPDF2 2.12.1. Description of the issue/feature…
The feature of printing PDF with custom header / footer pages does not work
with the old version of PyPDF2 on python 3.10.
Bump to newer version of PyPDF2 2.12.1.
Description of the issue/feature this PR addresses:
Current behavior before PR:
Detail error message with old PyPDF2 version (Ubuntu 20.04 - python 3.10):
```
RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/17.0/addons/web/controllers/[report.py](https://report.py/)", line 113, in report_download
response = self.report_routes(reportname, docids=docids, converter=converter, context=context)
File "/opt/odoo/17.0/odoo/[http.py](https://http.py/)", line 786, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/opt/odoo/17.0/addons/web/controllers/[report.py](https://report.py/)", line 42, in report_routes
pdf = report.with_context(context)._render_qweb_pdf(reportname, docids, data=data)[0]
File "/opt/odoo/17.0/addons/account/models/[ir_actions_report.py](https://ir_actions_report.py/)", line 58, in _render_qweb_pdf
return super()._render_qweb_pdf(report_ref, res_ids=res_ids, data=data)
File "/opt/odoo/17.0/odoo/addons/base/models/[ir_actions_report.py](https://ir_actions_report.py/)", line 925, in _render_qweb_pdf
collected_streams = self._render_qweb_pdf_prepare_streams(report_ref, data, res_ids=res_ids)
File "/opt/odoo/17.0/addons/sale_pdf_quote_builder/models/[ir_actions_report.py](https://ir_actions_report.py/)", line 57, in _render_qweb_pdf_prepare_streams
pdf.fill_form_fields_pdf(writer, form_fields=form_fields)
File "/opt/odoo/17.0/odoo/tools/pdf/[__init__.py](https://__init__.py/)", line 167, in fill_form_fields_pdf
writer.update_page_form_field_values(page, form_fields)
File "/opt/python3.10-venv/odoo17/lib/python3.10/site-packages/pypdf/[_writer.py](https://_writer.py/)", line 978, in update_page_form_field_values
raise PyPdfError("No /Fields dictionary in Pdf in PdfWriter Object")
pypdf.errors.PyPdfError: No /Fields dictionary in Pdf in PdfWriter Object
```
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an error that occurred when generating PDF accounting reports if a contact lacked a name. The fix ensures that the report exports correctly even when a contact doesn't have a defined name, improving report generation reliability.
Original PR description
Currently, an error occurs when exporting an accounting report to PDF if any of the selected contacts do not have a name. **Steps to reproduce:** - Install the `account_reports` and `contacts`…
Currently, an error occurs when exporting an accounting report to PDF if any of the selected contacts do not have a name. **Steps to reproduce:** - Install the `account_reports` and `contacts` modules. - Go to Contacts and open any contact (e.g., Azure Interior). - Click `Add` > `Save & Close`, then `save` the contact. - Navigate to Accounting > Reporting > Aged Receivable. - Click `Partners` button and select the newly created contact (e.g., `Azure Interior, Other Address`). - Click `PDF` to export the report. **Error:** `TypeError: sequence item 0: expected str instance, bool found` **Root Cause:** At [1], `options['selected_partner_ids']` is built using `partner.name`, which may be `False` for unnamed contacts. At [2], the `partner_value` list may therefore contain `False` entries coming from `options['selected_partner_ids']`. When calling `', '.join(partner_value)`, an error is raised because the list contains `non-string` (`bool`) values. **Fix:** This commit prevents errors when exporting reports to PDF and ensures that partner names are displayed in the report the same way as in the partner selection widget. [1]: https://github.com/odoo/enterprise/blob/a0ec2fcdc043cf52f1a646e84b9b97466072d47f/account_reports/models/account_report.py#L745 [2]: https://github.com/odoo/enterprise/blob/099c7b94ad08f83873c05ec528e16fbf806f47f2/account_reports/data/pdf_export_templates.xml#L84-L93 opw-5467321
This update corrects a fiscal inconsistency in the MX e-invoicing process. The default payment method 'Por Definir' was causing issues with invoices using the PUE payment policy. The fix removes this default, ensuring accurate fiscal reporting and a clearer user experience.
Original PR description
### Issue: The payment method `99 – Por Definir` was used as the default value for invoices, sale orders, and POS orders This leads to fiscal inconsistencies, especially when invoices use the `PUE` payment policy, where this payment method is invalid ### Cause: In the `_compute_l10n_mx_edi_payment_method_id` methods, the default value was always set to `Por Definir` ### Fix: After discussion with the PO (MIAL), the chosen solution is to archive the payment method `99 – Por Definir`and remove it as a default value All valid cases should already be handled explicitly, making it clear to the user that something is missing when the data is blank ### Steps to reproduce: - Install `l10n_mx_edi` and switch to the MX company - Create an invoice with today’s invoice date - The payment policy is set to PUE - Before the fix, the payment method is set to `Por Definir` For Sale Order and POS Order tests, it's the default value as soon as you create an order opw-5406038
This update fixes a bug that caused Odoo server crashes when module descriptions contained invalid formatting (like Markdown). The fix allows for raw text rendering of module descriptions, resolving the issue and improving stability during module installation and updates. This ensures smoother operation for all Odoo modules.
Original PR description
Modules containing valid Markdown in their description or README.md could cause Odoo to crash during startup or module updates if the content confused the reStructuredText (RST) parser. ### Steps to…
Modules containing valid Markdown in their description or README.md could cause Odoo to crash during startup or module updates if the content confused the reStructuredText (RST) parser.
### Steps to reproduce
1. Create a module with a manifest like this:
```py
{
'name': 'base',
'description': """
....
""",
}
```
2. Start the Odoo server or attempt to install or update update the module.
3. The server crashes:
```
docutils.utils.SystemMessage: (SEVERE/4) Unexpected section title or transition.
```
### Cause
The crash occurs during the execution of the `_get_desc` method in the `ir.module.module` model, which computes the `description_html` field.
When Odoo processes a module, it checks for a pre-rendered HTML description at `static/description/index.html`. If this file is missing, the `_get_desc` method attempts to generate HTML from the module's `description` field (often populated from the `README.md` file) by calling the `docutils.core.publish_string` function.
The **docutils** library is designed specifically for **reStructuredText (RST)**. If the input text contains structural patterns that violate RST rules—such as inconsistent header levels or "transitions" in invalid contexts—docutils flags a severe error and raises a `docutils.utils.SystemMessage` exception.
### Fix
This commit handles these exceptions and falls back to a raw text rendering. It also improves the logic by removing the restriction that prevented non-application modules from rendering their description via RST.
opw-5424131This update enhances the security and reliability of our Peppol integration by implementing a safer server-initiated deregistration process. Previously, a critical issue led to disruptions, and this change addresses that by allowing the server to gracefully handle participant departures while providing a mechanism for users to re-register. This improves the overall stability and resilience of the Peppol connection.
Original PR description
Reintroduce server-initiated deregistration on `client_gone`, but only for implementations that explicitly handle it. The base proxy client now just raises the error. Peppol opts in by soft-resetting its configuration so users can re-register. See the IAP postmortem for the rationale and incident history. https://github.com/odoo/iap-apps/pull/1317 no-task Forward-Port-Of: odoo/odoo#239254
This update optimizes how notifications are sent and received, specifically addressing performance bottlenecks under heavy server load. By using a faster JSON serialization library (orjson), the system processes notifications more efficiently, reducing delays and improving overall responsiveness. This results in a smoother user experience.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load.
This update provides more specific error messages when the message list fails to load. Previously, users only saw a generic 'Ann error occurred' message. Now, the commit displays the underlying error details, giving administrators a clearer understanding of the cause and enabling faster troubleshooting.
Original PR description
Backport of https://github.com/odoo/odoo/pull/244094 Before this commit, when message list failed to load, it just displays a "Ann error occurred" generic message with a retry button. This assumes that error happens rarely and when so this is temporarily. However some errors are persistent and it's frustrating to have no clue on why there's error or what may have caused it. This commit shows the `Error.toString()` from fetch message RPC failure on UI, so that there's a clue on the reason the fetch of messages failed. Before / After <img width="305" height="67" alt="Screenshot 2026-01-20 at 15 10 38" src="https://github.com/user-attachments/assets/34c546df-71e6-4055-9f85-8d85a9c89b35" /> <img width="334" height="100" alt="Screenshot 2026-01-20 at 15 09 07" src="https://github.com/user-attachments/assets/5fadd0b7-7ea0-43ca-8c28-0ac1d33650ff" />
This pull request updates the core spreadsheet component within Odoo. It addresses several minor bugs and improves the component's functionality, ensuring a smoother user experience when working with spreadsheets. These changes were made by a team of developers to maintain the stability and performance of this critical module.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0343060efa [REL] 17.0.85 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/0343060efa [REL] 17.0.85 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/7c8456d935 [FIX] Actions: ensure the sequence is applied on action children [Task: 5452669](https://www.odoo.com/odoo/2328/tasks/5452669) https://github.com/odoo/o-spreadsheet/commit/ab325f29c5 [FIX] header_size: wrong row size from wrapped number [Task: 4878338](https://www.odoo.com/odoo/2328/tasks/4878338) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>