Files
ash_cz_qr_payment/models
TomasandClaude Sonnet 5 d381249225 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>
2026-08-25 02:08:03 +02:00
..