Commit Graph
238 Commits
Author SHA1 Message Date
Dasko 7c215e70e8 Fiskalni pazar: presek stanja, dnevni izveštaj i razdvajanje praznina po prodaji/servisu
- Nova stranica fiskal_pazar: presek prometa od poslednjeg zaključenja, zaključenje dana, generisanje PDF izveštaja
- fiskal.go: dodati pozivi Presek/ZakljuciDan/GenerisiIzvestaj ka /api/financial/summary i /api/financial/report/summary
- PrazninaKnjigovodstva razdvojena na Prodaja/Servis varijante sa ID listama za direktne linkove sa dashboard-a
2026-07-02 19:14:54 +02:00
Dasko 56e52036b6 Servis: razdvojeno prikazivanje avansa/konačnog/refunda na fiskalnim računima
Dashboard: 'bez fiskalnog računa' razdvojeno na prodaju i servis (posebna
dugmad koja vode na tačan spisak, ne uvek na /prodaja).

Servis detalji: kartica 'Fiskalni račun' sad jasno razlikuje avansni od
konačnog računa; dodata posebna kartica za povraćaj viška avansa. Modal
za preuzimanje više se ne zaglavljuje kad avans pokrije ceo iznos (dugme
'Preuzmi' bez obaveznog unosa u polju Primljeno).

Štampa fiskalnog računa (/servis/{id}/fiskalni-racun) sad prioritetno
vraća konačan (Normal/Sale) račun umesto poslednjeg upisanog — ranije je
avansni povraćaj (upisan posle konačnog računa) prekrivao prikaz stvarne
fakture. Kad postoji i povraćaj viška avansa, štampa se u istom prozoru
odmah posle konačnog računa (izbegnut drugi popup koji brauzer blokira).
2026-07-02 13:30:45 +02:00
Dasko fcda706edd Servis: avans se fiskalizuje kao Advance/Sale, konačan račun ga zatvara
Avans se do sada nikad nije fiskalizovao — bio je samo interno polje. Zbog
toga je konačni fiskalni račun (pri preuzimanju) uvek prikazivao povraćaj
protiv PUNOG iznosa stavki, bez znanja da je avans već delimično plaćen.

Sad:
- avans se fiskalizuje kao Advance/Sale pri kreiranju/izmeni naloga
  (fiskalizujAvansServisa — fiskalizuje samo deltu ako se avans dopunjava)
- konačan Normal/Sale račun pri preuzimanju šalje advancePaid/advanceTax/
  advanceLastInvoiceNumber/advanceLastInvoiceDateTime — PFR sad zna za avans
  i tačno računa preostali dug i kusur
- ako avans premaši punu cenu, konačan račun se zatvara do pune cene, a
  razlika se automatski vraća posebnim Advance/Refund zahtevom
- servis_detalji modal prikazuje 'Avans premašuje cenu — vratiti klijentu X'
  umesto tihog svođenja duga na 0

Uzgred ispravljena dva mesta koja su koristila DohvatiPoServisu (samo
najnoviji zapis, bilo kog tipa) umesto DohvatiPoServisuITip(Normal,Sale):
- PromeniStatus je avansni račun pogrešno tretirao kao 'već fiskalizovano'
  i preskakao konačan račun kad god je nalog imao avans
- RetryFiskalizacija i FiskalGreska detekcija na servis_detalji stranici
  su imale isti problem — nalog sa avansom je izgledao fiskalizovan i
  dugme 'Pokušaj ponovo' se nije ni prikazivalo

PorezIzBrutoAvansa pretpostavlja opštu PDV stopu (20%) jer stavke u trenutku
uplate avansa još nisu poznate — nema opšteg rešenja bez pretpostavke.
2026-07-02 12:52:04 +02:00
Dasko ca1c8c8241 Servis: Garancija i Serviser se ne mogu menjati nakon preuzimanja
Dugme 'Promeni' za oba polja se sad krije kad je nalog u statusu Preuzeto —
garantni list je već izdat na osnovu garancije, a nalog je zatvoren pa nema
razloga za promenu servisera. Dodata i server-side provera u
AzurirajGarancijaDana/AzurirajTehnicar (ne samo skrivanje dugmeta u UI).
2026-07-02 12:24:04 +02:00
Dasko 5b39dfd222 Servis: 'Primljeno' iznos se sad stvarno šalje na fiskalni račun
Input 'Primljeno (din)' u modalu za preuzimanje je bio VAN <form> koji se
submituje — koristio se samo za JS prikaz kusura na ekranu, ali server ga
nikad nije primao. Fiskalni račun je uvek prikazivao Gotovina=dug (posle
avansa), Povraćaj=0,00, bez obzira šta je kupac stvarno predao.

Premešten input u POST formu; fiskalizujServis sad prima primljeno i šalje
max(dug, primljeno) kao Payment.Amount — PFR sam računa kusur, isto kao kod
Prodaje (fiskal.NapraviZahtev).

NAPOMENA: kad nalog ima avans, PFR i dalje računa povraćaj protiv PUNOG iznosa
stavki (ne umanjenog za avans), jer se avans nikad ne fiskalizuje kao posebna
transakcija — PFR ga ne 'vidi'. Za tačan kusur i u tom slučaju bi avans morao
biti fiskalizovan kao Advance tip transakcije pri uplati; to je veći, zaseban
zahvat.
2026-07-02 12:21:39 +02:00
Dasko d0b08f7013 Eskalacioni list: predviđen datum i poziv klijenta (dijagnoza) auto-popunjeni
- 'Predviđeni datum završetka' je bio prazan iako servis_detalji stranica prikazuje
  računat default (datum prijema + rok iz podešavanja) — StampaEskalacionogLista
  nije primenjivala isti default, sad je usklađeno.
- 'Poziv klijenta (obaveštenje o dijagnozi)' se sad auto-popunjava datumom odluke
  kad klijent odgovori preko javne stranice (QR kod) — nema potrebe za ručnim
  unosom poziva ako je klijent već digitalno potvrdio da je obavešten.

'Poziv klijenta (obaveštenje o završetku)' ostaje ručno polje — ne postoji
ekvivalentan trag (klijent ne potvrđuje ništa preko javne stranice posle
završetka, samo je vidi).
2026-07-02 12:03:21 +02:00
Dasko 485adffdfb Servis: ispravljen 01.01.0001. na eskalacionom listu za nedogođene korake
LogDogadjaji je bio map[string]time.Time — kad ključ ne postoji (npr. nalog još
nije preuzet), index vraća nultu time.Time, a {{with}} u šablonu tretira struct
kao uvek istinit pa je ispisivao '01.01.0001. auto' umesto praznog polja za
ručni unos. Mapa sad čuva *time.Time — nedostajući ključ daje nil.
2026-07-02 11:58:42 +02:00
Dasko 9899c280c8 Servis: KIR backfill i detekcija praznina (kao Prodaja)
Servisni KIR upis nije imao nijedan mehanizam oporavka — ako auto-upis pri
preuzimanju padne, B2B servisni promet tiho ispadne iz PDV evidencije bez traga
za korisnika. Dodato po uzoru na Prodaju:
- kirKandidatiServisa (preuzeti nalozi sa identifikovanim kupcem)
- KirBackfillServisa ruta + dugme "Uvezi iz servisa" na KIR stranici
- PraznineKnjigovodstva sad broji i servisne KIR praznine (dashboard upozorenje)
2026-07-02 11:31:30 +02:00
Dasko f74cb04024 Servis: storno naloga (kao Prodaja/Nabavka) — KIR/KPO storno stavke, fiskalni refund
Do sada je jedini način da se poništi naplaćen/preuzet servisni nalog bio
fizičko brisanje (ObrisiNalog), koje ostavlja KIR/KPO/fiskalne zapise sa mrtvim
izvor_id — prihod ostaje prijavljen za nalog koji više ne postoji.

Migracija 100: servisni_nalozi dobija stornirano/razlog_storniranja (kao
prodajni_nalozi/nabavke). ServisRepo.Storno vraća ugrađene delove na stanje
ali NE briše nalog. Novi handler StornoNaloga (dozvola servis.storno):
- KIR/KPO original ostaje, dograđuje se storno stavka (model.KirStorno/KpoStorno)
- fiskalni refund (best-effort) preko refundujServis — Refund zahtev sa
  ReferentDocumentNumber ka originalnom PFR broju, isti obrazac kao stornirajProdaju
- ObrisiNalog sad odbija brisanje ako nalog već ima fiskalni/KIR/KPO zapis i
  upućuje na Storno

stornoBezRefunda (dashboard upozorenje) prošireno da prati i servisne stornose
bez uspešnog fiskalnog refunda, ne samo prodaju.
2026-07-02 11:30:55 +02:00
Dasko 3c61063bbb Servis: sprečeno dupliranje KIR/KPO/fiskalnog pri ponovnom Preuzeto; KPO redni_broj
Ponovni ulazak naloga u status Preuzeto (dupli klik, dupli submit modala naplate,
sekvenca Preuzeto→Završeno→Preuzeto) je ponovo pokretao fiskalizaciju i upis u
KIR/KPO bez provere da li već postoje — svaki ulazak je duplirao prihod i PDV
obavezu, a dashboard/backfill duplikat nikad nije prijavljivao jer je dovoljan
bio bar jedan zapis. Dodate PostojiZaIzvor/DohvatiPoServisu provere pre svakog
upisa (isti obrazac kao RetryFiskalizacija).

KIR upis servisa refaktorisan u model.KirIzServisa (deljeno sa budućim backfill-om).

KpoRepo.Kreiraj sad dodeljuje redni_broj automatski (COALESCE(MAX,0)+1) — kolona
je postojala u šemi ali se nikad nije popunjavala, pa knjiga o ostvarenom prometu
paušalaca nije imala redni broj koji Pravilnik zahteva.
2026-07-02 11:27:19 +02:00
Dasko 2cc9c24aa9 Servis: garancija po trajanju (dana) umesto fiksnog datuma
Garancija se sad čuva kao broj dana (GarancijaDana), a konkretan datum
(GarancijaDo) se računa tek kad nalog pređe u Završeno/Preuzeto — na osnovu
stvarnog datuma završetka, ne datuma prijema. Ranije se datum računao odmah
pri prijemu naloga, pa je garancija krenula da teče pre nego što je popravka
uopšte gotova.
2026-07-02 10:42:01 +02:00
Dasko e26bda5d34 KIR: prikaz sumnjivih duplikata (double-submit) preskočenih pri backfill-u
Na KIR stranici se sad vidi kartica sa B2B prodajama koje je automatski
backfill preskočio jer izgledaju kao dupli submit forme naplate (isti kupac
i iznos u roku od 60s) — sa objašnjenjem i linkom na ručni unos ili storno.
2026-07-02 10:41:53 +02:00
Dasko 45831467e0 Knjigovodstvo: storno prodaje/nabavke više ne briše KIR/KPR/KPO
Storno je fizički brisao vezani KIR/KPR/KPO zapis — zakon o računovodstvu ne
dozvoljava brisanje poslovnih knjiga (KPO dodatno ima redni broj bez prekida).
Sad se original čuva, a storno se dograđuje kao poništavajuća stavka
(negirani iznosi, referenca na original) — model.KirStorno/KprStorno/KpoStorno.

Usput ispravljen i pravi uzrok prijavljenog bug-a: kirKandidatiProdaje je
filtrirala samo internu mapu, ne i listu naloga koju obilazi KirBackfillProdaje
— stornirani nalozi su zbog toga dobijali ponovni (pogrešan) KIR upis.
2026-07-02 10:35:24 +02:00
Dasko 3a0f98622b Knjigovodstvo i fiskalizacija: dashboard upozorenje za praznine, KPO dozvole, pojednostavljen storno, ispravke verifikacije i kasira
- Dashboard kartica prikazuje naloge bez KIR/KPO/fiskalnog upisa i sumnjive duplikate (double-submit), sa zaštitom od automatskog dupliranja prihoda pri bulk dopuni
- Registrovane nedostajuće KPO dozvole (kpo.pregled/dodaj/obrisi) — modul je bio potpuno nedostupan
- Uklonjen suvišan/nefunkcionalan 'Ukloni nalog' (duplirao Storno bez stvarne razlike); Storno u listi prodaje sad vodi direktno na formu
- Kasir na fiskalnom računu koristi ime prijavljenog korisnika umesto fiksnog podešavanja
- Fiskalni računi za nalog uvek prikazuju najnoviji zapis (original vs. refund posle storna)
- Verifikaciona stranica (/v/) jasno označena kao lokalna test simulacija, ne prava provera kod PURS-a; dodat prikaz kusura
- Mock brojač fiskalnih računa (kartica emulator) sad preživljava restart servera
2026-07-01 23:01:26 +02:00
Dasko fcae2ae441 Prodaja/Servis: broj naloga u formatu GGMM (godina-mesec), mesečni brojač 2026-07-01 23:01:10 +02:00
Dasko 16d84fe27e Servis: KIR upis usklađen sa Prodajom (preskoči bez klijenta, JMBG fallback za fizička lica) 2026-07-01 21:14:14 +02:00
Dasko fd762a6527 Prodaja: modal naplate sa fiskalnim računom (kao u Servisu)
- dugme Naplati otvara modal (primljeno/kusur, način plaćanja, prikaz računa)
- primljeni iznos se prosleđuje u fiskalni zahtev radi tačnog Gotovina/Povraćaj
- nova ruta i handler za prikaz/štampu fiskalnog računa prodaje
- fiskalni tab se otvara preko imenovanog prozora (bez blokiranja popup-a)
- Fisk mock: refund se sada računa iz stvarnih plaćanja, ne fiksno 0
2026-07-01 21:03:47 +02:00
Dasko 8730acc599 Prodaja: skener barkoda, prilagodjeni dropdown artikala, ispravka cena sa/bez PDV-a po rezimu 2026-07-01 19:16:34 +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 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 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 dd5576ed47 PDV KIR: razdvojen datum_prometa od datum_knjizenja za prodaju
KirIzProdaje je postavljao oba datuma na nalog.Datum. Za prodaju upisanu
odmah (SacuvajProdaju) to je ispravno jer je knjiženje istog trenutka.
Za backfill starih naloga (KirBackfillProdaje) upis kasni za periodom —
datum_knjizenja je sada trenutak backfilla, ne datum same prodaje.
2026-07-01 12:46:13 +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 fb7ed811ee Prodaja: server-side validacija popusta i PDV stope po stavci
parseFormuProdaje je proveravala samo pozitivnu količinu i nenegativnu cenu.
Popust preko 100% bi dao negativnu osnovicu/PDV, a pdv_stopa (hidden/JS polje)
mogla je stići sa proizvoljnom vrednošću direktnim POST-om mimo forme —
fiskal.OznakaPDV bi za takvu stopu tiho vratio pogrešnu poresku oznaku.
Sada se popust ograničava na 0-100%, a pdv_stopa mora biti 0, 10 ili 20.
2026-07-01 12:35:25 +02:00
Dasko e551e5f09a Prodaja: Obriši stornira potpuno kao Storno (KIR, fiskalni refund, KPO)
ObrisiProdaju je brisao samo auto-KIR zapis, ali ne i fiskalni refund i KPO
zapis, za razliku od StornoProdaje koji radi sve troje. Izdvojena zajednička
stornirajProdaju funkcija koju sada koriste oba handlera. Dozvola ujednačena
na prodaja.obrisi (u skladu sa rutom u main.go) — ranije se interno
proveravala prodaja.storno, što je bilo nekonzistentno sa ruterom.
2026-07-01 12:34:46 +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 b99f465ec5 Merge feature/pdv-kir-dnevni-pazar-duplikat → develop 2026-07-01 11:55:02 +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 50bb82212d Prodaja: popust se pravilno primenjuje u PDV obračunu (KIR, cena_bez_pdv, fiskalizacija)
KirIzProdaje je za B2B fakture upisivao pun (nediskontovan) iznos u KIR, ignorišući
popust_procenat — PDV evidencija je bila precenjena za stavke sa popustom. Isti
propust je postojao u ProdajaRepo.Kreiraj (cena_bez_pdv/pdv_iznos po stavci računati
bez popusta, dok je ukupno polje popust uračunavalo). fiskal.NapraviZahtev je to
slučajno kompenzovao ponovnim primenjivanjem popusta nad već (pogrešno)
nediskontovanom vrednošću iz baze — sad bi to duplo diskontovalo, pa je uklonjeno.

Usput ispravljena i dva zastarela testa koja su pogrešno pretpostavljala da je
CenaPoKomadu bruto cena (aktuelna semantika, potvrđena i u ntech.js, jeste neto).
2026-07-01 11:49:16 +02:00
Dasko 0f47c3e56b Prodaja: retry fiskalizacije kad ESIR nije dostupan pri kreiranju 2026-07-01 11:35:17 +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 e9205665b6 Prodaja: cena/PDV po PDV statusu firme — non-PDV firma vidi bruto cenu i nultu stopu 2026-06-30 22:23:03 +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 5926548402 Merge branch 'feature/prodaja-propusti' 2026-06-30 20:26:11 +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 5edd16ae3a podesavanja: CodeQL suppression za go/request-forgery (SSRF već zaštićen) 2026-06-30 18:55:55 +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 0cfef1d6a0 Popis: štampa A4 sa zaglavljem firme i tipom popisa, lokalizovan naziv tipa 2026-06-30 16:15:30 +02:00