Rework: use native res.partner.bank qr_code_method instead of report xpath

Register 'spayd' as a proper qr_code_method on res.partner.bank (same
extension point account_qr_code_sepa uses for EPC/'sct_qr'), sequence=6
so it's tried before EPC (sequence 20). Eligibility now requires CZK/EUR
currency AND a Czech customer country - previously the report template
replaced EPC for *any* customer as long as the invoice currency was CZK
or EUR, which would incorrectly show a Czech SPAYD code to e.g. a German
customer being invoiced in EUR.

account.move._generate_qr_code() already tries all registered methods in
priority order and the existing div#qrcode block in
account.report_invoice_document already renders whatever comes back, so
this needs no report template override at all.

- Move get_cz_qr_code_base64()/cz_to_iban() from account_move.py into
  res_partner_bank.py (as _get_qr_code_generation_params/_spayd_to_iban);
  fix bank_code not being zero-padded to 4 digits, which could throw off
  the mod-97 checksum for short local bank codes. Verified the checksum
  against the standard 19-2000145399/0800 -> CZ6508000000192000145399
  reference example and general IBAN mod-97 validity.
- Remove views/report_invoice.xml (nothing left to override) and the now
  unnecessary qrcode Python dependency (Odoo's own barcode report action
  renders the image; this module only supplies the SPAYD string).
- Update README FAQ to match the new eligibility rule.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Tomas
2026-08-25 02:08:03 +02:00
co-authored by Claude Sonnet 5
parent cbf5fe3450
commit d381249225
8 changed files with 98 additions and 136 deletions
+7 -8
View File
@@ -20,8 +20,12 @@ Key Features:
-------------
* **Standard SPAYD Support:** Fully compatible with all major Czech banking apps (ČSOB, Komerční banka, Česká spořitelna, etc.)
* **Smart IBAN Conversion:** Automatically converts local account numbers (e.g. 123-456/0800) to IBAN format.
* **Multi-country IBAN Support:** Works with Czech (CZ), Slovak (SK), and other SEPA IBANs.
* **Integration:** Works with standard Odoo invoice templates.
* **Multi-country IBAN Support:** Works with Czech (CZ), Slovak (SK), and other IBANs.
* **Integration:** Registers as a native Odoo QR-code method (res.partner.bank
qr_code_method='spayd', same mechanism account_qr_code_sepa uses for EPC) -
no changes to the invoice print template are needed, and it's automatically
preferred over EPC for Czech customers, falling back to EPC otherwise.
Users can still switch manually via the "Payment QR-code" field.
* **Currency Support:** CZK and EUR (for cross-border payments).
Usage for Slovak Companies:
@@ -37,12 +41,7 @@ Note: Czech banks will process EUR payments if the recipient has a EUR account.
'author': 'Ash technology s.r.o.',
'website': 'https://github.com/ash-technology/l10n_cz_extra',
'license': 'LGPL-3',
'external_dependencies': {
'python': ['qrcode'],
},
'data': [
'views/report_invoice.xml',
],
'data': [],
'installable': True,
'auto_install': False,
'application': False,