Files
Dasko b0250b2917 Artikli: šifre, tip i jedinica mere; magacin UI; servis predračun
Šifre artikala:
- Kôd kategorije kao prefiks auto-šifre (PREFIKS-NNNN), otporno na brisanje (max+1)
- Tip artikla (proizvod/usluga/trošak) i jedinica mere
- Arhiviranje artikala umesto brisanja kad su već u prometu

Magacin:
- Paginacija 50 po stranici
- Klikabilna šifra (vodi na karticu), opisniji placeholder pretrage
- Ispravka: pretraga više ne okida animaciju redova (globalni htmx listener
  umesto hx-on atributa koji se ne okida u ovoj htmx verziji)
- Dugmad akcija ne prelamaju tekst; uklonjen content-visibility (secanje pri skrolu)

Servis: predračun (nova stranica i ruta)
2026-06-20 18:40:01 +02:00

66 lines
1.9 KiB
Go

package model
import "time"
// Tipovi artikla. Proizvod prati stanje na lageru; usluga i trošak ga ne prate.
const (
TipProizvod = "proizvod"
TipUsluga = "usluga"
TipTrosak = "trosak"
)
// Artikal predstavlja jedan artikal u magacinu
type Artikal struct {
ID int64
KategorijaID *int64
Sifra string
Barkod string
Naziv string
Opis string
Tip string // proizvod | usluga | trosak
JedinicaMere string // kom, sat, set, m, l, kg ...
Kolicina int
KolicinMin int
Lokacija string
NabavnaCena float64
ProdajnaCena float64
PdvStopa float64
Marza *float64 // podrazumevana marža (%) za kalkulaciju; NULL = nije postavljeno
Napomena string
DatumUnosa time.Time
Arhiviran bool // artikal u prometu koji je sklonjen iz aktivne liste; istorija ostaje
}
// PratiLager vraća true samo za proizvode (usluge i troškovi nemaju stanje na lageru).
// Prazan tip se tretira kao proizvod radi kompatibilnosti sa starim zapisima.
func (a Artikal) PratiLager() bool {
return a.Tip == TipProizvod || a.Tip == ""
}
// CenaBezPdv izračunava prodajnu cenu bez PDV-a
func (a Artikal) CenaBezPdv() float64 {
return a.ProdajnaCena / (1 + a.PdvStopa/100)
}
// PdvIznos izračunava iznos PDV-a za jednu jedinicu
func (a Artikal) PdvIznos() float64 {
return a.ProdajnaCena - a.CenaBezPdv()
}
// Kategorija predstavlja kategoriju artikala
type Kategorija struct {
ID int64
Naziv string
Opis string
Kod string // prefiks za šifru artikla (npr. KOMP -> KOMP-0001)
Marza *float64 // podrazumevana marža (%) za artikle ove kategorije; NULL = nije postavljeno
}
// ArtikalSaKategorijom je artikal sa nazivom kategorije — za prikaz u tabeli
type ArtikalSaKategorijom struct {
Artikal
KategorijaNaziv string
KategorijaMarza *float64 // marža kategorije; za fallback predloga marže pri nabavci
KriticnaZaliha bool
}