Commit Graph

170 Commits

Author SHA1 Message Date
Dasko 0f1f65c7f7 feat(magacin): nivelacija — promena cene uz trag (Faza A)
Tabela nivelacije (migr 045) beleži svaku promenu prodajne cene:
artikal, stara→nova cena, razlog, izvor, korisnik, datum. Dva okidača:
posebna akcija „Promeni cenu" (modal, izvor 'rucno') i auto-trag pri
izmeni artikla (izvor 'izmena'). PromeniCenu je transakciono (update
cene + upis zapisa). Pregled /nivelacije sa filterom perioda i razlikom
(+/− i %). Modal otvara svoj nextElementSibling — radi i na mobilnom
uprkos dupliranim id-jevima iz dva rasporeda.
2026-06-14 09:37:49 +02:00
Dasko c9d4704c3d Merge feature/kw-pdv-evidencija: PDV evidencija (Faza 2 — KIR/KPR, auto-punjenje, obračun, PPPDV) 2026-06-14 09:03:27 +02:00
Dasko a562d4bb6f feat(pdv): PPPDV mapiranje na stranici obračuna
model.MapirajPPPDV preslikava zbirove KIR/KPR na polja zvaničnog
obrasca PPPDV (001-005/103-105, 006-009/106-109, 110, povraćaj) u
celim dinarima; zbirovi se računaju iz zaokruženih polja. Uvoz
(006/106) i nadoknada poljoprivredniku (007/107) se ne prate → 0.
Sekcija PPPDV dodata na /pdv/obracun. Prikaz za popunjavanje, ne
elektronska predaja.
2026-06-14 08:53:18 +02:00
Dasko e1ee5c3765 feat(pdv): obračun PDV za period (KIR − KPR)
Interni obračun: izlazni (dugovani) PDV iz KIR i odbitni (prethodni)
PDV iz KPR po stopama, konačna obaveza za uplatu ili povraćaj/prenos.
PdvBezOdbitka se ne računa u odbitni PDV. Stranica /pdv/obracun
(podrazumevano tekući mesec), link u sidebaru. Brojčana podloga za
budući zvanični PPPDV/POPDV obrazac.
2026-06-14 08:34:33 +02:00
Dasko dfad0ff1f4 feat(nabavka): brzi unos dobavljača i artikla iz forme nabavke
Dugmad otvaraju modale koji preko AJAX-a (X-Requested-With: fetch) čuvaju
novi zapis i vraćaju JSON; novi dobavljač se odmah ubacuje u listu i bira.
Modal artikla proširen na sva polja kao puna stranica. Centriranje modala
prebačeno u .modal-overlay klasu (x-show je brisao inline display:flex).
2026-06-14 08:16:51 +02:00
Dasko 7fc2e9bcc3 feat(pdv): nabavka → KPR automatski (Faza 2b-2)
PDV se izvodi iz stope artikla po stavci (aproksimacija: nabavna cena
= osnovica bez PDV). Grupisanje po stopi (20→opšta, 10→posebna,
ostalo→oslobođena nabavka), broj dokumenta NAB-<id>, veza izvor/izvor_id.
Auto-zapisi se ne mogu ručno brisati u KPR; brisanje nabavke uklanja
vezani KPR zapis.
2026-06-14 08:16:41 +02:00
Dasko 76b147074d feat(pdv): prodaja → KIR automatski (Faza 2b-1)
Kad se sačuva prodaja na klijenta (PDV obveznik), zapis se sam zavede u
KIR (model.KirIzProdaje grupiše stavke po stopi). Storno/brisanje prodaje
uklanja vezani KIR zapis (ObrisiPoIzvoru). Maloprodaja građanima (bez
klijenta) se preskače — ide preko fiskalizacije (Faza 3). Helper
modulUkljucen; auto-zapisi u UI nemaju ručno brisanje. Test.
2026-06-14 02:45:07 +02:00
Dasko 1539ec799f feat(pdv): izvor veza u KIR/KPR — temelj za auto-punjenje (Faza 2b-0)
Kolone izvor ('rucno'/'prodaja'/'nabavka') + izvor_id na pdv_kir/pdv_kpr
(migracija 044, postojeći zapisi → 'rucno'). Repo Kreiraj upisuje izvor,
nova ObrisiPoIzvoru za čišćenje pri stornu/brisanju izvora. Test.
2026-06-14 02:27:23 +02:00
Dasko 966d1f6c98 feat(pdv): KPR — knjiga primljenih računa + PIB/mesto dobavljača (Faza 2a)
KPR (handler, rute pod RequireModul("pdv"), UI sa sumama po stopama,
izbor dobavljača, datum plaćanja, PDV bez odbitka / oslobođena nabavka)
+ stavka u meniju. Dobavljači dobili PIB i mesto (migracija 043) jer KPR
traži PIB dobavljača za POPDV. Time je Faza 2a kompletna (KIR + KPR).
2026-06-14 02:05:33 +02:00
Dasko e8fdd2dc51 feat(pdv): izbor klijenta u KIR formi + mesto/grad u klijentima
KIR forma nudi padajuću listu postojećih klijenata koja popunjava naziv,
PIB/JMBG i mesto kupca (uz ručni unos za kupce van baze). KIR i dalje
čuva kupca kao tekst, ne kao vezu. Klijenti dobili polje mesto (migracija
042), provučeno kroz model, repo, formu i handler.
2026-06-14 01:39:06 +02:00
Dasko 53cbc789db feat(pdv): KIR — handler, RequireModul, rute i UI (Faza 2a)
Pregled knjige izdatih računa (filter perioda + sume po stopama), forma
unosa (server računa ukupno) i brisanje. Nove dozvole pdv.*; prvi put
montiran RequireModul("pdv") — KIR je vidljiv u meniju (.Moduli) i
dostupan samo PDV obveznicima, uz RBAC. Oznaka PIB/JMBG po broju cifara.
2026-06-13 23:45:24 +02:00
Dasko 26c829fef3 feat(pdv): KIR/KPR evidencija — migracija, model i repozitorijum (Faza 2a)
Tabele pdv_kir i pdv_kpr (iznosi po vrsti stope), modeli PdvKir/PdvKpr,
repozitorijumi sa filterom perioda i integracioni test (datum round-trip,
nullable datum plaćanja).
2026-06-13 21:22:48 +02:00
Dasko d06a353a52 feat(pdv): šifarnik PDV stopa — handler, rute i UI (Faza 1)
Handleri (prikaz, dodaj, izmeni, arhiviraj/vrati) sa validacijom i flash
porukama; rute pod /admin/podesavanja/pdv-stope (dozvole podesavanja.*);
stranica pdv_stope registrovana u kes.go i dodata u meni Podešavanja.
Šifarnik je opšti (bez RequireModul) jer ga koristi i kalkulacija.
2026-06-13 20:45:43 +02:00
Dasko 15995167b7 feat(pdv): šifarnik PDV stopa — migracija, model i repozitorijum (Faza 1)
Tabela pdv_stope (seed 20/10/0%), model PdvStopa, PdvStopaRepository
+ SQLite implementacija (arhiviranje umesto brisanja) i integracioni
test (migracija + CRUD round-trip).
2026-06-13 20:33:48 +02:00
Dasko 6d066f6704 feat(moduli): mehanizam uključenih modula — Moduli mapa i RequireModul (Faza 0)
config.SviModuli + PodaciStranice.Moduli (uslovni meni, analogno Dozvole)
i middleware.RequireModul (zaštita ruta, analogno RequireDozvola). Sloj
iznad RBAC-a: zahtev mora proći i „modul uključen" i „korisnik sme".
Dopunjen test (TestSviModuli). Time je Faza 0 kompletna.
2026-06-13 20:23:24 +02:00
Dasko 3817ba4cbd feat(config): helper ModulUkljucen — uključenost modula po profilu firme (Faza 0)
Čista funkcija izvodi iz profila firme (podesavanja) koji su zakonski
moduli aktivni. Režim „samo evidencija" gasi sve. Pravila: pdv prema
prekidaču obveznika, fiskalizacija zaseban prekidač, kpo za paušalce,
dvojno za doo. Table-driven test sa 18 slučajeva.
2026-06-13 19:38:54 +02:00
Dasko 290e5c085a feat(podesavanja): profil firme — pravni i poreski status (Faza 0)
Dodata kartica „Pravni i poreski status" na Podešavanja → Opšte:
pravni oblik, režim rada, PDV obveznik, fiskalizacija. Čuva se u
postojećoj key-value tabeli podesavanja (bez migracije). Fiskalizacija
se zasivi i forsira na „Ne" u režimu „samo evidencija".
2026-06-13 19:27:26 +02:00
Dasko 1feab0d3dd Merge grane feature/html-no-cache: HTML no-cache za pouzdan deploy 2026-06-13 10:45:23 +02:00
Dasko a4f99cb6e1 fix(cache): HTML stranice no-cache da nova verzija odmah stigne do korisnika
HTML nije imao Cache-Control, pa je browser servirao staru keširanu stranicu
sa starim AssetV tokenom i posle deploya — stari CSS/JS. Dodato no-cache na
renderujTemplate i renderujStandalone: browser revalidira HTML, dobija svež
AssetV token koji povlači svež CSS/JS. Statika ostaje immutable + ?v=verzija.
2026-06-13 10:45:23 +02:00
Dasko 35583405a1 Merge grane feature/dashboard-labele-bela: svetlije labele dashboard kartica 2026-06-13 10:33:20 +02:00
Dasko f5c0873ada style(dashboard): labele kartica svetlije (tekst-glavni) i lakši bold (500) 2026-06-13 10:33:20 +02:00
Dasko a4c8a85d09 Merge grane feature/dashboard-labele-bold: labele dashboard kartica 14px bold 2026-06-13 10:31:38 +02:00
Dasko 1c49a0db07 style(dashboard): labele kartica 14px i bold (font-weight:600) 2026-06-13 10:31:38 +02:00
Dasko 4509f2eb45 Merge grane feature/dashboard-labele-font: uvećane labele dashboard kartica 2026-06-13 10:30:02 +02:00
Dasko 36b1e100b8 style(dashboard): blago uvećane labele statističkih kartica (12px → 13px) 2026-06-13 10:30:02 +02:00
Dasko d3f98b67d0 Merge grane feature/slajderi-init-nula: slajderi teme poštuju vrednost 0 2026-06-13 10:27:44 +02:00
Dasko f9e6a37020 fix(js): slajderi teme poštuju sačuvanu vrednost 0 pri učitavanju
Init je koristio parseInt(x) || podrazumevano, gde je 0 falsy pa je padao
na podrazumevanu vrednost — slajderi (blur, opacity, glassOpacity) su se
pri ulasku na stranicu resetovali ako je sačuvana vrednost bila 0. Dodat
helper broj() koji na podrazumevano pada samo kad vrednost nije broj.
2026-06-13 10:27:44 +02:00
Dasko 9c9588c7ac Merge grane feature/naslovi-kartica-senka: senka naslova kartica i stranice 2026-06-13 10:13:37 +02:00
Dasko e4791de3f8 fix(ui): senka na naslovima kartica, labelama i naslovu stranice preko slike
Naslovi kartica i statističke labele su goli <div> koje glass override nije
dohvatao — blede na svetloj slici. Dodato .kartica div sa senkom (boju NE
diramo, da namerno obojeni div-ovi ostanu) i .topbar-naslov dobija svetli
tekst + senku.
2026-06-13 10:13:37 +02:00
Dasko c5ea36b452 Merge grane feature/info-banner-senka: senka info-bannera preko slike 2026-06-13 10:06:52 +02:00
Dasko bcee85e2db fix(ui): senka na info-banneru u Profil—Tema preko slike
Tekst bannera „Tamna tema je aktivna…" su goli <div> koje glass override
ne dohvata — gubili su se na svetloj slici. Dodata klasa .info-banner sa
ciljanim pravilom (svetli tekst + dvoslojna senka) u glass režimu.
2026-06-13 10:06:52 +02:00
Dasko 50d2d37224 Merge grane feature/senka-teksta-kartice: jača senka teksta u karticama 2026-06-13 10:04:23 +02:00
Dasko 366ca4a7a3 fix(ui): jača dvoslojna senka teksta u karticama preko svetle slike
Tekst u karticama/tabelama/modalu imao slabu jednoslojnu senku (0.7–0.8),
pa se na jako providnoj kartici + svetloj slici jedva video. Prebačeno na
umerenu dvoslojnu (oštar obris 0.9 + lagani halo 0.55) — čitljivije, i dalje
diskretno. Sidebar netaknut (već dovoljno taman).
2026-06-13 10:04:23 +02:00
Dasko e64e83acaf Merge grane feature/naslov-senka-gradijent: gradijentna senka naslova 2026-06-13 09:58:40 +02:00
Dasko d3fd4a2191 fix(ui): gradijentno zatamnjenje senke naslova (skoro crn → upola → bled)
Tri sloja text-shadow podešena u opadajućem zatamnjenju: oštar skoro crn
obris, srednji upola, široki bledi halo.
2026-06-13 09:58:40 +02:00
Dasko 045a3074e2 Merge grane feature/naslov-tamnija-senka: dublje zatamnjenje senke naslova 2026-06-13 09:56:11 +02:00
Dasko d7fbd5343c fix(ui): dublje zatamnjenje senke naslova van kartice
Dodat treći sloj (0 0 8px rgba(0,0,0,1)) — gust crni halo oko slova za
jači kontrast naslova na svetloj pozadinskoj slici.
2026-06-13 09:56:11 +02:00
Dasko 53a5d2fda2 Merge grane feature/naslov-jaca-senka: jača senka naslova 2026-06-13 09:54:35 +02:00
Dasko b219f2fd77 fix(ui): jača dvoslojna senka na naslovu van kartice
Naslov .naslov-traka dobio jaču dvoslojnu senku (oštar obris + širi halo)
umesto jednoslojne, da bolje „iskoči" na svetloj pozadinskoj slici.
2026-06-13 09:54:35 +02:00
Dasko c252328093 Merge grane feature/naslov-senka: halo na naslovu van kartice 2026-06-13 09:51:41 +02:00
Dasko da1d052a02 fix(ui): senka na naslovu van kartice (istorija prijava) preko slike
Naslov „Istorija prijava — <korisnik>" je <span> van kartice, pa ga glass
override nije dohvatao — svetli tekst bez senke se gubio na svetloj slici.
Dodata klasa .naslov-traka koja u glass režimu dobija halo (text-shadow);
ista klasa se može dati i drugim naslovima van kartica.
2026-06-13 09:51:41 +02:00
Dasko 55375da5a9 Merge grane feature/nazad-link-poravnanje: ujednačen kompaktan .nazad-link 2026-06-13 09:45:32 +02:00
Dasko c204631d39 fix(css): .nazad-link kompaktan u flex-column kontejnerima
U .kolona (flex-column) se .nazad-link zbog default align-items:stretch
rastezao na punu širinu, što je sa novom staklenom pill-podlogom odudaralo
od kompaktnog izgleda na formama. Dodato align-self:flex-start — kompaktan
svuda, no-op u ne-flex roditeljima.
2026-06-13 09:45:32 +02:00
Dasko 9e351346cd Merge grane feature/vidljivost-pozadina: vidljivost elemenata preko pozadinske slike 2026-06-13 09:39:53 +02:00
Dasko 16a590150b fix(ui): vidljivost elemenata van kartica preko pozadinske slike
Glass override je davao svetli tekst i staklenu podlogu samo karticama,
tabelama i sidebaru — elementi van kartica (.nazad-link, .btn-sekundarno,
.btn-obrisi-ghost, checkbox-traka „Samo aktivni") i goli <div> napomene
(„maksimum N MB") ostajali su u prigušenoj boji i jedva se videli.

Dodata pravila u glass blok: pomenuti elementi dobijaju sopstvenu staklenu
pill-podlogu (poluprovidna + blur + svetli border + svetli tekst), pa se
vide bez obzira da li je slika tamna ili svetla. Napomene dobile klasu
.pomocni-tekst da ih override dohvati; checkbox-traka klasu .cek-filter.
2026-06-13 09:39:53 +02:00
Dasko 8c666e6979 Merge grane feature/kartica-hover-i-animiraj: hover na svim karticama + animiraj na nabavka-detalji 2026-06-13 09:21:34 +02:00
Dasko 62d786d86c fix(css): hover lift na svim karticama + animiraj na nabavka-detalji karticama
Hover lift (.kartica:hover translateY) nije radio na karticama sa .animiraj
jer je fadeInUp imao fill-mode both, koji forwards zaključa transform i
nadjača hover. Prebačeno na backwards: i dalje nema treperenja na ulazu, a
hover sad radi na svim karticama u programu.

Kartice „Stavke nabavke" i „Brisanje nabavke" u nabavka_detalji nisu imale
.animiraj (previd — stagger u <style> je predviđao tri kartice). Dodato, i
stagger pomeren na nth-child(2-4) jer je prvi child .kolone „Nazad" link.
2026-06-13 09:21:28 +02:00
Dasko 85ce46bb16 Merge grane feature/stagger-stranica: stagger kartica profila/podešavanja u main.css 2026-06-13 08:33:13 +02:00
Dasko d5b4c820f3 refactor(css): stagger kartica na stranicama profila/podešavanja na jedno mesto
Isti .animiraj:nth-child stagger (korak 0.06s) bio je dupliran u 7
template <style> blokova (admin_profil, admin_login_istorija, profil_tema,
podesavanja i 3 podstranice). Prebačen u main.css kao
.stranica-stack .animiraj:nth-child(N); descendant selektor čuva isto
ponašanje po neposrednom roditelju, a klasa .stranica-stack sprečava
curenje na ostatak programa. Sad radi i pod HTMX navigacijom, menja se
na jednom mestu.
2026-06-13 08:33:13 +02:00
Dasko dc6c04cf0a Merge grane feature/status-badge-konsolidacija: bedž statusa u main.css 2026-06-13 08:22:52 +02:00