Popravka sidebara: kolaps, podmeni i HTMX navigacija

This commit is contained in:
2026-06-08 19:29:17 +02:00
parent f53618ce5e
commit a99920d102
32 changed files with 1385 additions and 400 deletions
+12
View File
@@ -11,11 +11,23 @@ type Artikal struct {
Kolicina int
KolicinMin int
Lokacija string
NabavnaCena float64
ProdajnaCena float64
PdvStopa float64
Napomena string
DatumUnosa time.Time
}
// 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
+14 -1
View File
@@ -1,12 +1,17 @@
package model
import "time"
import (
"strings"
"time"
)
// Klijent predstavlja jednog klijenta — fizičko lice ili firmu
type Klijent struct {
ID int64
Tip string
Ime string
Prezime string
JMBG string
NazivFirme string
PIB string
Telefon string
@@ -14,3 +19,11 @@ type Klijent struct {
Napomena string
DatumUnosa time.Time
}
// PunoIme vraća ime i prezime za fizičko lice, ili naziv firme za pravno
func (k Klijent) PunoIme() string {
if k.Tip == "pravno" {
return k.NazivFirme
}
return strings.TrimSpace(k.Ime + " " + k.Prezime)
}
+27
View File
@@ -0,0 +1,27 @@
package model
import "time"
// Tipovi magacinskih promena
const (
PromenaUlazNabavka = "ulaz_nabavka"
PromenaIzlazProdaja = "izlaz_prodaja"
PromenaIzlazServis = "izlaz_servis"
PromenaPovracaj = "povracaj"
PromenaKorekcija = "korekcija"
)
// MagacinskaPromenaSaDetaljem je promena stanja artikla sa nazivom artikla
type MagacinskaPromenaSaDetaljem struct {
ID int64
ArtikalID int64
ArtikalNaziv string
TipPromene string
ReferentniID int64
PromenaKolicine int
StanjePre int
StanjePosle int
KorisnikID *int64
Napomena string
Datum time.Time
}
+12 -6
View File
@@ -4,12 +4,15 @@ import "time"
// ProdajniNalog predstavlja zaglavlje jedne prodaje
type ProdajniNalog struct {
ID int64
KlijentID *int64
BrojNaloga string
Napomena string
Ukupno float64
Datum time.Time
ID int64
KlijentID *int64
BrojNaloga string
Napomena string
Ukupno float64
NacinPlacanja string
Stornirano bool
RazlogStorniranja string
Datum time.Time
}
// StavkaProdaje predstavlja jednu liniju (artikal) unutar prodaje
@@ -20,6 +23,9 @@ type StavkaProdaje struct {
Kolicina int
CenaPoKomadu float64
Ukupno float64
PdvStopa float64
PdvIznos float64
CenaBezPdv float64
}
// ProdajniNalogSaDetaljem je nalog sa nazivom klijenta — za prikaz u listi
+31
View File
@@ -29,6 +29,7 @@ var SviStatusi = []string{
type ServisniNalog struct {
ID int64
KlijentID *int64
TehnicarID *int64
BrojNaloga string
Uredjaj string
SerijskiBroj string
@@ -39,10 +40,32 @@ type ServisniNalog struct {
CenaKonacna *float64
Avans *float64
Napomena string
GarancijaDo *time.Time
DatumPrijema time.Time
DatumZavrsetka *time.Time
}
// ServisniDeo predstavlja jedan artikal ugrađen u servisni nalog
type ServisniDeo struct {
ID int64
NalogID int64
ArtikalID int64
Kolicina int
CenaKomada float64
Datum time.Time
}
// Ukupno vraća ukupnu vrednost dela (kolicina × cena)
func (d ServisniDeo) Ukupno() float64 {
return float64(d.Kolicina) * d.CenaKomada
}
// ServisniDeoSaArtiklom je servisni deo sa nazivom artikla — za prikaz
type ServisniDeoSaArtiklom struct {
ServisniDeo
ArtikalNaziv string
}
// ServisniNalogSaKlijentom proširuje ServisniNalog sa nazivom klijenta za prikaz u listi
type ServisniNalogSaKlijentom struct {
ServisniNalog
@@ -57,6 +80,14 @@ func (n ServisniNalog) KlijentIDVrednost() int64 {
return *n.KlijentID
}
// TehnicarIDVrednost vraća vrednost TehnicarID pointera, ili 0 ako je nil
func (n ServisniNalog) TehnicarIDVrednost() int64 {
if n.TehnicarID == nil {
return 0
}
return *n.TehnicarID
}
// CenaOdStr vraća formatiranu procenu od, ili prazan string ako nije uneta
func (n ServisniNalog) CenaOdStr() string {
if n.CenaOd == nil {