b0250b2917
Š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)
66 lines
1.9 KiB
Go
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
|
|
}
|