PFR API ključ, fiskalni račun formatiranje, popravke

- PFR API ključ (pfr_api_key) u podešavanjima i fiskalizaciji
- Formatiranje fiskalnog računa: veličina fonta, QR kod, layout
- PFR mock: QR box_size/border, automatski PIN retry posle BE restarta
- Servis: animirane kanban kartice, formatiranje računa
- Dashboard i testovi: sitne ispravke
This commit is contained in:
2026-07-30 02:25:12 +02:00
parent ee265f81a9
commit 0fb9fe1e37
16 changed files with 119 additions and 36 deletions
+17 -4
View File
@@ -227,7 +227,10 @@ def log(msg):
# ── QR ──────────────────────────────────────────────────────
def generate_qr(url):
img = qrcode.make(url)
qr = qrcode.QRCode(box_size=4, border=2)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
buf = io.BytesIO()
img.save(buf, format="PNG")
return base64.b64encode(buf.getvalue()).decode("utf-8")
@@ -366,12 +369,22 @@ def _build_invoice_response(req, request_id):
"total_amount": total_amount,
})
# Ako je BE restovan posle naše PIN verifikacije, pinUnesen je opet False —
# resetuj flag, ponovo verifikuj PIN, pa probaj sign još jednom.
if sign.get("status") != "ok" and "PIN" in (sign.get("message") or ""):
global _be_pin_verifikovan
_be_pin_verifikovan = False
_osiguraj_be_pin()
sign = be_command({
"command": "sign",
"invoice_type": invoice_type,
"transaction_type": transaction_type,
"total_amount": total_amount,
})
if sign.get("status") == "blocked":
raise RuntimeError(f"Kartica blokirana: {sign.get('message')}")
if sign.get("status") != "ok":
# npr. "error"/2101 (PIN nije verifikovan) — ne sme tiho da propadne u
# podrazumevane vrednosti counter=1 (v. BUG.md #34), jer bi to izdalo
# fiskalni broj koji se ponavlja iz računa u račun.
raise RuntimeError(f"Kartica potpis nije uspeo: {sign.get('message', sign.get('status'))}")
jid = cert.get("jid", ESIR_ID)