_header{
"type": "TASK",
"id": "c0888",
"naziv": "ARHIVA-1.5 — Token Generator UI za QR kampanju",
"status": "TODO",
"priority": "P1",
"autor": "CC Agent",
"kreiran": "2026-05-16T22:45:00Z",
"sesija": "2026-05-16_fenix_v3_campaign",
"procjena_sati": 4,
"bloker_za": "QR kampanja launch"
}
problem{
"opis": "Dispo i vozači trebaju jednostavan UI da kreiraju QR kodove za upload. Sada je backend spreman (ScanToken model postoji), trebam samo UI.",
"uzrok": "Završena je backend struktura ali nedostaje frontend",
"impact": "Bez ovoga, vozači ne mogu skenirati QR i uploadati dokumente — kampanja je blokirana"
}
specifikacija{
"feature_id": "ARHIVA-1.5",
"ruta": "/hr/documents/arhiva/tokens/",
"view_klasa": "ScanTokenGeneratorView",
"model": "ScanToken (already exists)",
"template": "arhiva/token_generator.html"
}
sjecisni_dijelovi[
{
"dio": 1,
"naziv": "View — ScanTokenGeneratorView",
"lokacija": "/var/www/fenix-v3/arhiva/views.py",
"akcije": [
"- Kreiraj CBV (LoginRequired)",
"- GET: prikaži formu + listu aktivnih tokena",
"- POST: kreiraj novi ScanToken sa parametrima",
" - komitent (FK ili choice)",
" - upload_limit (int, default 50)",
" - expires_days (int, default 7)",
"- Vrni JSON: {token, qr_url, whatsapp_link, expires_at}"
]
},
{
"dio": 2,
testiranje{
"test_sljedovi": [
"1. Login kao dispo (test korisnik sa kompanijom)",
"2. Idi na /hr/documents/arhiva/tokens/",
"3. Odaberi komitenta 'Forma Ideale'",
"4. Unesi 'upload_limit' = 50",
"5. Klikni 'Generiraj QR'",
"6. Modal pokazuje QR kod",
"7. Klikni 'Copy link' → provjerI je li link u clipboardu",
"8. Klikni 'Send WhatsApp' → provjeri je li WhatsApp otvoren",
"9. Tablica 'Active tokens' pokazuje novi token sa statusom"
],
"provjere": [
"- ScanToke
dependencije[
"- ScanToken model mora biti migriran (trebam provjeriti)",
"- qrcode library trebam pip install",
"- ScanToken.objects.create() mora raditi"
]
blockers[
"DNS fix — dok se ne fixa limit-connect.com na EU, /beta/ ne radi javno",
"Folija middleware instalacija — nije kritično za ovo, ali trebalo bi"
]
acceptance_criteria[
"✓ Form je dostupan na /hr/documents/arhiva/tokens/",
"✓ Vozač može kliknuti 'Generiraj QR'",
"✓ QR kod se prikazuje i skenira se",
"✓ Link 'Copy' kopira URL u clipboard",
"✓ WhatsApp button otvara aplikaciju sa predloženum tekstom",
"✓ Tablica pokazuje sve aktivne tokene",
"✓ Token se ističe nakon 7 dana (ili custom expiry)"
]
napomene{
"arhitektura": "ScanToken je already u modelu, trebam samo UI wrapper",
"slicne_komponente": [
"- /hr/companies/ — seznam kompanije (similar pattern)",
"- /hr/documents/arhiva/ — list view (copy styling)",
"- /beta/manifest.json — već ima QR generator (inspect sources)"
],
"performance": "QR je statički, cache 24h. Bez performansnfih briga.",
"security": "LoginRequired mixin, CsrfViewMixin (Django default), token je random UUID"
}