Skip to content

Conversation

@chienandalu
Copy link
Member

superseds #1060

Refactor to use pyHanko and the new Odoo core certificate.certificate model.

For now, a minimal refactor has been made as PoC to:

  • Use PyHanko as the signer library (more complete, mantained and reliable)
  • Remove all the forme java pdfsigner stuff.
  • Be able to use Odoo core certificates.

Main pain points:

  • cryptography version is fixed in Odoo requirements.txt. This makes very hard for other libraries to work with that version.
  • The approach has been using the pyhanko-cli tool as backend so we can install it in it's own venv (or whatever isolation method is desired).

cc @moduon MT-11131

fyi @yajo

antespi and others added 30 commits December 17, 2025 11:15
OCA Transbot updated translations from Transifex
OCA Transbot updated translations from Transifex
These limits were being hit when printing PDF reports with just 80 pages.

OCA Transbot updated translations from Transifex

[UPD] Update report_qweb_signer.pot
- Good dependency chain
- Context for forcing rendering PDF
- Extra test

[UPD] README.rst

[UPD] Update report_qweb_signer.pot

Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-12.0/reporting-engine-12.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-12-0/reporting-engine-12-0-report_qweb_signer/

[UPD] README.rst
`render_qweb_pdf` must return a tuple of `(content, 'pdf')`
Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-12.0/reporting-engine-12.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-12-0/reporting-engine-12-0-report_qweb_signer/
Fix website on manifest
[UPD] Update report_qweb_signer.pot

[UPD] README.rst
Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-13.0/reporting-engine-13.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-13-0/reporting-engine-13-0-report_qweb_signer/
We don't want our custom parameters be reset every time the module
updates.

TT32256
Add a new 'Allowed reports' field on the certificate. Only reports listed in this field can be signed. No report means all reports are allowed.
OCA-git-bot and others added 26 commits December 17, 2025 11:15
Currently translated at 26.0% (12 of 46 strings)

Translation: reporting-engine-14.0/reporting-engine-14.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-report_qweb_signer/it/
Currently translated at 63.0% (29 of 46 strings)

Translation: reporting-engine-14.0/reporting-engine-14.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-report_qweb_signer/sl/
Currently translated at 100.0% (46 of 46 strings)

Translation: reporting-engine-14.0/reporting-engine-14.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-report_qweb_signer/ca/
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-14.0/reporting-engine-14.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-report_qweb_signer/
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-14.0/reporting-engine-14.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-14-0/reporting-engine-14-0-report_qweb_signer/
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: reporting-engine-16.0/reporting-engine-16.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_qweb_signer/
Currently translated at 100.0% (46 of 46 strings)

Translation: reporting-engine-16.0/reporting-engine-16.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_qweb_signer/es/
Currently translated at 100.0% (46 of 46 strings)

Translation: reporting-engine-16.0/reporting-engine-16.0-report_qweb_signer
Translate-URL: https://translation.odoo-community.org/projects/reporting-engine-16-0/reporting-engine-16-0-report_qweb_signer/it/
@chienandalu chienandalu force-pushed the 18.0-mig-report_qweb_signer branch from 29937cb to 71070b5 Compare December 17, 2025 14:06
Refactor to use pyHanko and the new Odoo core `certificate.certificate` model.

For now, a minimal refactor has been made as PoC to:

- Use PyHanko as the signer library (more complete, mantained and reliable)
- Remove all the forme java pdfsigner stuff.
- Be able to use Odoo core certificates.

Main pain points:

- `cryptography` version is fixed in Odoo `requirements.txt`. This makes very hard for other libraries to work with that version.
- The approach has been using the `pyhanko-cli` tool as backend so we can install it in it's own `venv` (or whatever isolation method is desired).

MT-11131
@chienandalu chienandalu force-pushed the 18.0-mig-report_qweb_signer branch from 71070b5 to 212514f Compare December 18, 2025 12:06
Copy link
Member

@yajo yajo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the good work, it looks much better indeed.

Code review with some comments in code.

Please also review tests, which are failing.

def migrate(cr, version):
# 1. Store certificate info (file path) to create the certs on post-mig
# 2. Transform report.certificate to their reports values
pass
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: missing implementation.

and self.signing_allow_only_one
and len(res_ids) > 1
):
_logger.debug(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: higher importance

Suggested change
_logger.debug(
_logger.warning(

Comment on lines +57 to +60
ids = set(
self.env[self.model_id.model].search(safe_eval(self.signing_domain)).ids
)
res_ids = list(ids & set(res_ids))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ids = set(
self.env[self.model_id.model].search(safe_eval(self.signing_domain)).ids
)
res_ids = list(ids & set(res_ids))
res_ids = self.env[self.model_id.model].search([("id", "in", res_ids)] + safe_eval(self.signing_domain)).ids


def _should_be_signed(self, res_ids: list) -> list:
"""Not all the documents should be rendered. Let's find out the right ones"""
if not self._is_report_type_signable():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if not self._is_report_type_signable():
if not self._is_report_type_signable() or not res_ids:

> - Antonio Espinosa
> - Pedro M. Baeza
> - Jairo Llopis
> - David Vidal
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: IMHO Moduon deserves a mention, after this huge refactor.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.