Commit Graph
280 Commits
Author SHA1 Message Date
Dasko fedd4b5d60 Prodaja: uklopljen mobilni raspored filter trake
Traka za pretragu/filtere na telefonu je bila samo flex-wrap red koji se
zbijao nezgodno. Sada: '+ Nova prodaja' preko cele širine na vrhu, pretraga
preko cele širine u svom redu, Od/Do datum jedan pored drugog, a dugmad
(Stornirano/Prikaži/Resetuj/Ovaj mesec) se sam uklapa po dva u red.
2026-07-01 17:10:30 +02:00
Dasko 7fe40096cc Servis: dogruzavanje rezultata pri pretrazi postojećeg klijenta
Dropdown za pretragu klijenta u Novom nalogu je imao tvrdi limit od 100
rezultata. Sada radi po istom obrascu kao u Novoj prodaji — učitava po 30,
i dogrejava sledećih 30 kad korisnik skroluje do dna liste.
2026-07-01 16:57:09 +02:00
Dasko e7a130bb90 Prilagođena pozadina: čitljivost teksta van kartica preko pozadinske slike
Kad je postavljena pozadinska slika (Podešavanja → Izgled), tekst van .kartica
(filter labele, naslovi sekcija, prazna stanja, paginacija, radio-dugmad bez
klase) ostajao je u tamnoj boji teme i gubio se preko slike. Dodato: pravilo
za .polje-labela/.sekcija-naslov/.prazno-stanje, opšte pravilo za elemente sa
inline bojom teme, i podrazumevana bela boja za ceo glavni sadržaj (.sadrzaj)
koja se nasleđuje na gole elemente bez ijedne klase.
2026-07-01 16:57:03 +02:00
Dasko 4356997f5e Prodaja: podrazumevani filter na današnji dan, dugme 'Samo stornirano', raspored zaglavlja
Lista prodaje po prvom ulasku (bez upit parametara) prikazuje samo današnje
naloge; čim korisnik pošalje formu (i praznu), poštuje se njegov izbor.
Čekboks 'Samo stornirano' sada je stilizovan kao dugme-prekidač. Dugme
'+ Nova prodaja' premešteno ispred trake za pretragu/filtere.
2026-07-01 16:56:55 +02:00
Dasko 7463563c16 Klijenti: automatsko prepoznavanje JMBG/lične karte, ukinuto ručno biranje vrste dokumenta
Vrsta dokumenta se više ne bira ručno u formi — određuje se iz dužine unetog
broja (13 cifara = JMBG, 9 = broj lične karte). Dodata provera JMBG kontrolne
cifre i datuma rođenja po standardnom mod-11 algoritmu.
2026-07-01 16:56:49 +02:00
Dasko 046fcace8e Klijenti: adresa (obavezna za pravna lica) + prikaz svih podataka klijenta u Novoj prodaji
Zakon o PDV (čl. 42, sadržaj računa) zahteva adresu kupca na fakturi za
pravna lica — polje 'Mesto' (grad) samo nije dovoljno. Dodata kolona
adresa u klijenti, novo polje na formi, obavezno kad je tip pravno.

Kartica izabranog klijenta u Novoj prodaji sad prikazuje PIB/JMBG
(zavisno od tipa), adresu, mesto, telefon i email — svako popunjeno
polje u svom redu, samo kad je klijent već izabran.
2026-07-01 16:05:13 +02:00
Dasko c5a519a848 Toast obaveštenja: slaganje više toastova, ujednačen mobilni prelom sa flash porukama
window.ntechToast je crtao svaki novi toast na istoj fiksnoj poziciji pa
su se preklapali kad se više njih pojavi zaredom (npr. auto-snimanje
više polja). Sad se dodaju u zajednički kontejner koji ih slaže jedan
iznad drugog preko flex-a.

Flash poruke su menjale raspored na 480px dok ostatak aplikacije koristi
768px kao mobilni prelom — ujednačeno na 768px.
2026-07-01 15:41:59 +02:00
Dasko a923082736 Prodaja: obavezna identifikacija kupca kod refundacije, ispravljeno mapiranje načina plaćanja
Refundacija po propisu zahteva PIB/JMBG kupca — ako nalog nema klijenta
sa upisanim poreskim brojem, storno sad traži ručni unos pre nego što
se pošalje fiskalni refund zahtev.

TipPlacanja je upoređivao velika slova (Gotovina/Kartica/Virman) dok
Prodaja čuva nazive malim slovima (gotovina/kartica/prenos) — svaka
prodaja je zato padala na paymentType "Other" umesto stvarnog načina
plaćanja. Poređenje je sad case-insensitive.
2026-07-01 15:41:51 +02:00
Dasko f29b003e66 Prodaja forma: ispravljen responsive prelom za polja Klijent/Način plaćanja
Red sa poljima nije imao klasu forma-grid-2, pa se nije sažimao u jednu
kolonu na mobilnom (768px) kao ostatak forme.
2026-07-01 13:57:20 +02:00
Dasko 89fa31b392 Prodaja: filteri liste (period, storno) i pretraga klijenta u novoj prodaji
- Lista prodaje: filter po periodu (od/do), prečica 'Ovaj mesec', filter samo stornirano
- Nova prodaja: pretraga klijenta sa filterom tipa (sva/pravna/fizička lica) umesto
  običnog dropdown-a, sa dogruzavanjem rezultata pri skrolu
- Ispravljen nedostajući CSRF token u formi nove prodaje (POST je uvek padao na 403)
- Ispravljeno vizuelno poravnanje polja Način plaćanja
2026-07-01 13:55:00 +02:00
Dasko d2f8153845 KPR: popunjavanje datum_placanja iz nabavke
Kolona datum_placanja je postojala u pdv_kpr tabeli ali se nikad nije
popunjavala za auto-upise iz nabavke — relevantno za gotovinski PDV odbitak.
Dodato polje Nabavka.DatumPlacanja (migracija 096, opciono polje u formi
nabavke, prikaz u detaljima), KprIzNabavke ga sada prosleđuje u KPR zapis.
2026-07-01 12:49:55 +02:00
Dasko b5e2aac3cd PDV KIR: upozorenje kad je dnevni pazar zastareo u odnosu na promet
Zbirni 'rucno' KIR zapis dnevnog pazara nema povratnu vezu ka pojedinačnim
maloprodajnim nalozima, pa ga naknadni storno ili nova prodaja tog dana ne
mogu sami korigovati. Umesto tihog auto-prepisivanja poreske evidencije,
PdvKir handler sada upoređuje upisani Ukupno sa trenutno preračunatim
DnevniPrometMaloprodaje i u listi prikazuje bedž 'zastareo iznos' sa linkom
na formu za osvežavanje (koja već ima logiku zamene starog zapisa).
2026-07-01 12:36:04 +02:00
Dasko 1adf49e8cc PDV KIR: dnevni pazar se ažurira (zamenjuje) umesto tvrde blokade
Prethodna zaštita od duplog unosa (77320d2) je trajno onemogućavala ispravku
zbirnog KIR zapisa jednom kad bi bio sačuvan — a taj zapis nema vezu nazad ka
pojedinačnim nalozima, pa naknadni storno ili nova prodaja istog dana ne mogu da
ga koriguju kroz postojeće mehanizme (ObrisiPoIzvoru radi samo za B2B auto-KIR).

Sad se ponovni upis za isti dan tretira kao ažuriranje: stari zapis (po broju
dokumenta FISK-YYYYMMDD) se briše i zamenjuje trenutno tačnim iznosima. Forma i
dalje upozorava da zapis već postoji, ali dugme dozvoljava svesno ažuriranje
umesto da bude trajno sakriveno.
2026-07-01 11:59:37 +02:00
Dasko 77320d2030 PDV KIR: zaštita od duplog upisa dnevnog pazara maloprodaje
SacuvajDnevniPazarKir je upisivao ručni zbirni KIR zapis za dati dan bez provere
da li već postoji — za razliku od auto-KIR-a iz pojedinačnih faktura (koji ima
PostojiZaIzvor zaštitu), ovde ništa nije sprečavalo duplo klikanje/ponovni unos
istog dana, što bi duplo precenilo PDV osnov u zvaničnoj evidenciji.

Broj dokumenta (FISK-YYYYMMDD) je već deterministički po danu, pa se koristi kao
prirodni ključ za proveru. Forma sad prikazuje upozorenje i sakriva dugme za upis
ako je dan već zaveden.
2026-07-01 11:54:35 +02:00
Dasko bd5a63511b Merge feature/prodaja-fiskal-retry → develop 2026-07-01 11:36:59 +02:00
Dasko b5f2742aa9 Ispravka: CSRF polje mora biti _csrf, ne csrf_token (dugmad tiho vraćala 403) 2026-07-01 11:36:43 +02:00
Dasko 0f47c3e56b Prodaja: retry fiskalizacije kad ESIR nije dostupan pri kreiranju 2026-07-01 11:35:17 +02:00
Dasko e7dcaf4433 Prodaja: oznaka storniranih naloga u listi, sakriveno dugme Storno 2026-07-01 11:21:51 +02:00
Dasko d39df48a56 Servis: oznaka naloga bez izdatog fiskalnog računa u arhivi 2026-07-01 11:21:46 +02:00
Dasko 18f242d73f Servis: servisni_log tabela — praćenje datuma događaja za eskalacioni list 2026-06-30 22:57:01 +02:00
Dasko c971b5d075 Servis: upozorenje i retry fiskalizacije kad ESIR nije dostupan pri preuzimanju 2026-06-30 22:47:26 +02:00
Dasko 80d7dd69f1 Servis: eskalacioni list — interni dokument praćenja rokova naloga 2026-06-30 22:42:45 +02:00
Dasko af67daf7de Servis: rok za podizanje (DatumZavrsetka + 30 dana) u detaljima naloga i javnoj status stranici 2026-06-30 22:33:09 +02:00
Dasko 432a559902 KPO: knjiga o ostvarenom prometu — lista, ručni unos, backfill, auto-upis iz prodaje i servisa 2026-06-30 21:13:16 +02:00
Dasko 3166a93e1d Fiskalizacija: refund pri stornu, dnevni pazar KIR, popust na stavci 2026-06-30 20:52:50 +02:00
Dasko 76a0df1c09 KIR: PostojiZaIzvor + backfill iz prodaje (dugme u KIR listi) 2026-06-30 20:37:38 +02:00
Dasko 82a2484c10 Nabavka: broj računa, datum računa, PDV iznos + KPR backfill za stare nabavke 2026-06-30 20:25:44 +02:00
Dasko ac7c9df2eb prodaja: popust, kategorija, cene po režimu, pretraga, zabrana brisanja
Migracija 092: popust_procenat na stavke_prodaje.
Model: PopustProcenat u StavkaProdaje, KategorijaNaziv u StavkaProdajeSaArtiklom.
Repo: pretraga prodaje proširena na klijenta i napomenu. DohvatiStavke dodaje popust i kategoriju. Kreiraj primenjuje popust na ukupno.
Handler: artikalUJSONSaCenom proširen sa sifra, barkod, cena_sa_pdv, kategorija_naziv. parseFormuProdaje parsira popust. ObrisiProdaju sada koristi storno (zabrana fizičkog brisanja).
JS: prodajaForma ažurirana — pretraga artikala po nazivu/šifri/barkodu, popust polje, kategorija, kalkulacija sa popustom.
Forma: pretraga artikala, popust kolona, kategorija, PDV režim (cena/cena_sa_pdv). Responsive desktop+mobilne kartice.
Detalji: kategorija ispod naziva, popust kolona, 'Ukloni nalog' (storno) umesto 'Obriši'.
2026-06-30 19:14:40 +02:00
Dasko b79ca28b09 Zalihe: storno nabavke umesto brisanja + ponderisana prosečna nabavna cena 2026-06-30 17:08:55 +02:00
Dasko 4806840ba4 Zalihe: razlikovanje manjka i viška pri popisu (manjak_popis/visak_popis tip promene) 2026-06-30 17:08:50 +02:00
Dasko 4daac1eed6 Popis: štampa u novom tabu — standalone A4 stranica sa zaglavljem i sumarima 2026-06-30 16:47:50 +02:00
Dasko 0a1995222b Popis: nabavna cena na 2 decimale, dugovani PDV na manjak (samo PDV modul) 2026-06-30 16:33:12 +02:00
Dasko 0cfef1d6a0 Popis: štampa A4 sa zaglavljem firme i tipom popisa, lokalizovan naziv tipa 2026-06-30 16:15:30 +02:00
Dasko f81d2c3133 Popis: štampa A4 landscape (bez skrolbara, sve u širinu), dugme Štampaj 2026-06-30 15:52:32 +02:00
Dasko 592b5712f3 Popis: mobilne kartice prikazuju sve kolone kao desktop 2026-06-30 15:45:01 +02:00
Dasko cab6721adb Popis: mobilni prikaz — tabela se pretvara u kartice, Tip i Napomena jednake širine 2026-06-30 15:42:56 +02:00
Dasko 42df5b3176 Popis: zakonske kolone (nabavna cena, vrednost, manjak/višak), tip popisa, datum i sačinilac 2026-06-30 15:36:22 +02:00
Dasko 5343fd0a9b Podešavanja: ispravka preuzimanja backup-a (hx-boost), CodeQL request-forgery (SSRF) 2026-06-30 14:27:20 +02:00
Dasko 313edf06ea Servis detalji: PDV pravilo na cenama radova/delova, bruto u formama, ispravka otpremnice 2026-06-29 22:35:31 +02:00
Dasko f3191a7224 Mobilni: forma-grid-2/3 klase umesto inline grid-template-columns na formama 2026-06-29 21:48:03 +02:00
Dasko fb980e76c0 UI: razmaci između kartica, dinari/dinariCeli za int64, PPPDV tabela formatirana 2026-06-28 16:29:09 +02:00
Dasko 147a0d6e88 Bugfix: PDV obračun u prodaji, magacinski trag nabavke, fiskalizacija servisa, admin/podesavanja greške 2026-06-28 16:02:26 +02:00
Dasko 3475422cb9 Dashboard/izveštaji: ispravka obračuna prihoda + KIR servisa, testovi
- Prihod meseca: izbačeni stornirani nalozi, servis preko naplaceno+avans
- Servis KIR: neto cena + PDV po stvarnoj stopi (PdvKir.DodajNeto), bez hardkodovanih 20%
- TopKlijenti: samo preuzeti nalozi sa naplatom/avansom
- Izveštaji: mesečni ključevi sidreni na 1. u mesecu (bez preliva dana)
- BUG-04: konačna cena servisa bez dvostrukog računanja delova
- Dashboard: uklonjena kartica „Prihod ovog meseca"
- Default port 3000
- Dodati testovi: prihod/storno/delovi/nivelacija/KIR/mesečni ključevi
2026-06-27 09:41:07 +02:00
Dasko 60e7debad5 PDV pravilo na štampanim dokumentima + fiksni layout + QR popravka
- PDV uslovi (Moduli.pdv) na: predračun, otpremnica, garantni list, prodaja_stampa
- Modal za preuzimanje: jedna cena (sa/bez PDV), ne duplo
- Javna status stranica: PDV uslovi za cene, predlog, checkbox-ove
- Svi print templejti: viewport=device-width+min-width, bez responsive
- JavniToken generisan za postojeće naloge bez tokena (QR popravka)
- UkupnoSaPdv() metode na ServisniRad i ServisniDeoSaArtiklom
- UkupnoBezPdv() na StavkaProdaje
2026-06-27 02:06:18 +02:00
Dasko 6727e39348 Dropdown: CSS u main.css, dupli handler fix, Prihod=prodaja+servis, mobilni layout
- main.css: cust-sel CSS prebačen iz dodatni-css (dostupan svim stranama)
- servis_detalji: _custClickDodat guard protiv duplog event listenera
- servis_detalji: _ntechPopuniArtikle na window (data-refresh fix)
- izvestaj: PrihodTekuciMesec = prodaja + servis (Preuzeto)
- main.css: mobilni dropdown preko cele širine (grid 1 kolona)
2026-06-27 01:00:41 +02:00
Dasko 2c8b206ec2 PDV modul: uslovno prikazivanje + auto cena_konacna + stanje zaliha sa PDV-om
- PDV pravilo (Moduli.pdv) primenjeno na: magacin, usluge, prodaja_detalji, usluge_forma
- magacin: toggle cena bez/sa PDV u zaglavlju kolone, jedna kolona
- stanje_zaliha: Cena sa PDV i Vred. sa PDV kolone, tamne kartice za zaglavlje
- PromeniStatus: auto-izračunavanje cena_konacna (dijagnostika+radovi+delovi) pri Preuzeto
- migrations/088: popravlja postojeće Preuzeto naloge bez cene
- dashboard: prihod cifra sakrivena, hover 1s → prikaz
- izvestaji: aktivni servisi bez Preuzeto, COALESCE u SQL, 0→—
- izvestaji.html: vraćeno — umesto 0 din
2026-06-27 00:26:46 +02:00
Dasko 84bb8aa158 Cena sa PDV-om u magacinu + uslovno prikazivanje po modulu
- migrations/087: nova kolona cena_sa_pdv + popunjavanje postojećih
- model.Artikal: polje CenaSaPdv, ispravljene CenaBezPdv/PdvIznos (neto)
- sqlite/artikal.go: SELECT/Scan/INSERT/UPDATE za cena_sa_pdv (6 mesta)
- magacin_forma.go: pdv_stopa iz forme, kalkulacija cena_sa_pdv, default PDV 20%
- magacin.html: dinari format (25.999,00), kolona Sa PDV-om, uslovno po Moduli.pdv
- magacin_forma.html: PDV dropdown + Cena sa PDV polje, uslovno po Moduli.pdv,
optimizovan layout (Naziv/Jed. mere/Kategorija u 1 redu)
- main.go: demo mod bez keširanja šablona (hot-reload)
- model_test.go: ažurirani testovi za novo ponašanje CenaBezPdv/PdvIznos
2026-06-26 23:47:52 +02:00
Dasko 97fd4490ea Kartica emulator (BE) + fiskalna verifikacija + ime/prezime korisnika
- internal/be: emulator kartice (TCP listener za L-PFR mock)
- /v/: javna stranica za verifikaciju fiskalnog računa (QR kod)
- /servis/{id}/fiskalni-racun: štampa fiskalnog računa
- Podešavanja fiskalizacije: BE status/reset, proširen UI
- Korisnik: polja ime i prezime (model, DB, handler, admin profil)
- Fisk server: ažuriran receipt.py i server.py
-, : dokumentacija
2026-06-26 23:17:52 +02:00
Dasko 985a2e7410 BUGFIX: Primljeno default=0 + ispravljen ParseFloat za hiljade (43.600→43600) 2026-06-26 02:40:18 +02:00
Dasko 3b8d43606d Servis: modal Preuzimanje — polje Primljeno + automatski kusur 2026-06-26 02:21:12 +02:00