gofmt -s -w . — formatiranje celog projekta
This commit is contained in:
@@ -49,7 +49,8 @@ func nadjiLokalneAdrese() []string {
|
||||
func PokreniSetup(fsys fs.FS, envFajl string) {
|
||||
port := NadjiSlobodanPort()
|
||||
if port == 0 {
|
||||
slog.Error("setup: nije pronađen nijedan slobodan port"); os.Exit(1)
|
||||
slog.Error("setup: nije pronađen nijedan slobodan port")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
gotov := make(chan struct{})
|
||||
@@ -103,7 +104,8 @@ func PokreniSetup(fsys fs.FS, envFajl string) {
|
||||
|
||||
go func() {
|
||||
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
slog.Error("setup server", "error", err); os.Exit(1)
|
||||
slog.Error("setup server", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ func TestIzvestajArtikliBrojaci(t *testing.T) {
|
||||
}
|
||||
}
|
||||
dodaj(&model.Artikal{Naziv: "A", Kolicina: 10, KolicinMin: 5})
|
||||
dodaj(&model.Artikal{Naziv: "B", Kolicina: 2, KolicinMin: 5}) // kritičan
|
||||
dodaj(&model.Artikal{Naziv: "C", Kolicina: 0, KolicinMin: 5}) // kritičan, nula
|
||||
dodaj(&model.Artikal{Naziv: "B", Kolicina: 2, KolicinMin: 5}) // kritičan
|
||||
dodaj(&model.Artikal{Naziv: "C", Kolicina: 0, KolicinMin: 5}) // kritičan, nula
|
||||
|
||||
if n, err := izv.BrojArtikala(ctx); err != nil || n != 3 {
|
||||
t.Fatalf("BrojArtikala = %d, err=%v; očekivano 3", n, err)
|
||||
|
||||
@@ -129,7 +129,7 @@ func (h *Handler) Dashboard(w http.ResponseWriter, r *http.Request) {
|
||||
ps.NaslovStranice = "Dashboard"
|
||||
|
||||
podaci := model.PodaciDashboarda{
|
||||
PodaciStranice: ps,
|
||||
PodaciStranice: ps,
|
||||
BrojArtikala: brojArtikala,
|
||||
AktivniServisi: aktivniServisi,
|
||||
PrihodOvogMeseca: prihodOvogMeseca,
|
||||
|
||||
@@ -209,10 +209,10 @@ func (h *Handler) Izvestaji(w http.ResponseWriter, r *http.Request) {
|
||||
// PodaciPrometногLista su podaci za prometni list magacina
|
||||
type PodaciPrometногLista struct {
|
||||
model.PodaciStranice
|
||||
Promene []model.PrometniRed
|
||||
Od string
|
||||
Do string
|
||||
Ukupno int
|
||||
Promene []model.PrometniRed
|
||||
Od string
|
||||
Do string
|
||||
Ukupno int
|
||||
}
|
||||
|
||||
// PrometniListMagacina renderuje prometni list magacina za odabrani period
|
||||
@@ -264,9 +264,9 @@ func (h *Handler) PrometniListMagacina(w http.ResponseWriter, r *http.Request) {
|
||||
// PodaciStanjaZaliha su podaci za izveštaj o stanju zaliha
|
||||
type PodaciStanjaZaliha struct {
|
||||
model.PodaciStranice
|
||||
Zalihe []model.StanjeZalihaRed
|
||||
Zalihe []model.StanjeZalihaRed
|
||||
UkupnaVrednost float64
|
||||
BrojArtikala int
|
||||
BrojArtikala int
|
||||
}
|
||||
|
||||
// StanjeZalihaIzvestaj renderuje izveštaj o trenutnom stanju zaliha
|
||||
|
||||
@@ -66,7 +66,7 @@ func artikalUJSON(artikli []model.ArtikalSaKategorijom, vezeDobavljaca map[int64
|
||||
ID: a.ID, Naziv: a.Naziv, PdvStopa: a.PdvStopa,
|
||||
NabavnaCena: a.NabavnaCena,
|
||||
Marza: a.Marza, KategorijaMarza: a.KategorijaMarza,
|
||||
Dobavljaci: dob,
|
||||
Dobavljaci: dob,
|
||||
})
|
||||
}
|
||||
b, _ := json.Marshal(lista)
|
||||
|
||||
@@ -15,7 +15,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
|
||||
// podaciPodsetnici su podaci za stranicu sa listom podsetnika
|
||||
type podaciPodsetnici struct {
|
||||
model.PodaciStranice
|
||||
|
||||
@@ -56,9 +56,9 @@ func (h *Handler) ProfilTema(w http.ResponseWriter, r *http.Request) {
|
||||
ps.NaslovStranice = "Moja tema"
|
||||
|
||||
podaci := podaciProfilTema{
|
||||
PodaciStranice: ps,
|
||||
LokalnaTema: svezi.LokalnaTema,
|
||||
KoristiLokalnuTemu: svezi.KoristiLokalnuTemu,
|
||||
PodaciStranice: ps,
|
||||
LokalnaTema: svezi.LokalnaTema,
|
||||
KoristiLokalnuTemu: svezi.KoristiLokalnuTemu,
|
||||
LokalnaPozadina: svezi.LokalnaPozadina,
|
||||
LokalnaPozadinaOpacity: svezi.LokalnaPozadinaOpacity,
|
||||
LokalnaPozadinaBlur: svezi.LokalnaPozadinaBlur,
|
||||
|
||||
@@ -73,12 +73,12 @@ type PrometniRed struct {
|
||||
|
||||
// StanjeZalihaRed je jedan red izveštaja o stanju zaliha
|
||||
type StanjeZalihaRed struct {
|
||||
Naziv string
|
||||
Sifra string
|
||||
Kategorija string
|
||||
Kolicina int
|
||||
KolicinMin int
|
||||
NabavnaCena float64
|
||||
ProdajnaCena float64
|
||||
Naziv string
|
||||
Sifra string
|
||||
Kategorija string
|
||||
Kolicina int
|
||||
KolicinMin int
|
||||
NabavnaCena float64
|
||||
ProdajnaCena float64
|
||||
VrednostZalihe float64 // kolicina × nabavna_cena
|
||||
}
|
||||
|
||||
+18
-18
@@ -4,24 +4,24 @@ import "time"
|
||||
|
||||
// Korisnik predstavlja nalog korisnika u sistemu
|
||||
type Korisnik struct {
|
||||
ID int64
|
||||
KorisnickoIme string
|
||||
LozinkaHash string
|
||||
Uloga string // "superadmin" | "admin" | "radnik"
|
||||
Aktivan bool
|
||||
TotpTajna string
|
||||
LokalnaTema string // "tamna" | "svetla" | ""
|
||||
KoristiLokalnuTemu bool
|
||||
DatumKreiranja time.Time
|
||||
LokalnaPozadina string
|
||||
LokalnaPozadinaOpacity string
|
||||
LokalnaPozadinaBlur string
|
||||
LokalnaPozadinaBlurPozadine string
|
||||
LokalnaPozadinaGlassOpacity string
|
||||
AvatarPutanja string
|
||||
LokalnaAnimacija string // "" | "fadeInUp" | "fadeIn" | "scaleIn" | "slideLeft"
|
||||
LokalniHover string // "" | "bez" | "podizanje" | "svetlost"
|
||||
LokalnaBrzinaAnimacije string // "" | "0.2" | "0.4" | "0.6" | "0.8" | "1.2" (sekunde)
|
||||
ID int64
|
||||
KorisnickoIme string
|
||||
LozinkaHash string
|
||||
Uloga string // "superadmin" | "admin" | "radnik"
|
||||
Aktivan bool
|
||||
TotpTajna string
|
||||
LokalnaTema string // "tamna" | "svetla" | ""
|
||||
KoristiLokalnuTemu bool
|
||||
DatumKreiranja time.Time
|
||||
LokalnaPozadina string
|
||||
LokalnaPozadinaOpacity string
|
||||
LokalnaPozadinaBlur string
|
||||
LokalnaPozadinaBlurPozadine string
|
||||
LokalnaPozadinaGlassOpacity string
|
||||
AvatarPutanja string
|
||||
LokalnaAnimacija string // "" | "fadeInUp" | "fadeIn" | "scaleIn" | "slideLeft"
|
||||
LokalniHover string // "" | "bez" | "podizanje" | "svetlost"
|
||||
LokalnaBrzinaAnimacije string // "" | "0.2" | "0.4" | "0.6" | "0.8" | "1.2" (sekunde)
|
||||
}
|
||||
|
||||
// Sesija predstavlja aktivnu sesiju prijavljenog korisnika
|
||||
|
||||
@@ -4,7 +4,7 @@ import "time"
|
||||
|
||||
// Tipovi magacinskih promena
|
||||
const (
|
||||
PromenaUlazNabavka = "ulaz_nabavka"
|
||||
PromenaUlazNabavka = "ulaz_nabavka"
|
||||
PromenaIzlazProdaja = "izlaz_prodaja"
|
||||
PromenaIzlazServis = "izlaz_servis"
|
||||
PromenaPovracaj = "povracaj"
|
||||
|
||||
@@ -40,9 +40,9 @@ func TestArtikalCenaBezPdvIPdvIznos(t *testing.T) {
|
||||
|
||||
func TestKlijentPunoIme(t *testing.T) {
|
||||
testovi := []struct {
|
||||
naziv string
|
||||
k Klijent
|
||||
ocek string
|
||||
naziv string
|
||||
k Klijent
|
||||
ocek string
|
||||
}{
|
||||
{"pravno lice", Klijent{Tip: "pravno", NazivFirme: "Firma DOO", Ime: "x", Prezime: "y"}, "Firma DOO"},
|
||||
{"fizičko lice", Klijent{Tip: "fizicko", Ime: "Petar", Prezime: "Petrović"}, "Petar Petrović"},
|
||||
|
||||
@@ -7,14 +7,14 @@ const TipOpsti = "opsti"
|
||||
|
||||
// Podsetnik predstavlja jedan podsetnik
|
||||
type Podsetnik struct {
|
||||
ID int64
|
||||
Naslov string
|
||||
Napomena string
|
||||
DatumPodsecanja time.Time
|
||||
Zavrseno bool
|
||||
Tip string
|
||||
DatumUnosa time.Time
|
||||
KorisnikID *int64 // ako nil — podsetnik nije dodeljen konkretnom korisniku
|
||||
ID int64
|
||||
Naslov string
|
||||
Napomena string
|
||||
DatumPodsecanja time.Time
|
||||
Zavrseno bool
|
||||
Tip string
|
||||
DatumUnosa time.Time
|
||||
KorisnikID *int64 // ako nil — podsetnik nije dodeljen konkretnom korisniku
|
||||
}
|
||||
|
||||
// JePrekoracen vraća true ako datum podsećanja je prošao a podsetnik nije završen
|
||||
|
||||
+16
-16
@@ -31,22 +31,22 @@ type FlashPoruka struct {
|
||||
|
||||
// PodaciStranice su zajednički podaci koje svaka stranica prima
|
||||
type PodaciStranice struct {
|
||||
Stranica string
|
||||
NaslovStranice string
|
||||
Tema string
|
||||
NazivFirme string
|
||||
Podnazlov string
|
||||
LogoPutanja string // putanja do slike loga firme
|
||||
TopbarLogoSlika bool // prikaži logo sliku u topbaru
|
||||
AvatarPutanja string // putanja do lične avatar slike korisnika
|
||||
Korisnik string
|
||||
KorisnikIme string // korisničko ime prijavljenog korisnika
|
||||
KorisnikUloga string // uloga: "superadmin", "admin", "radnik"
|
||||
CsrfToken string // CSRF zaštitni token za forme
|
||||
AssetV string // verzija statičkih fajlova (cache-busting za CSS/JS)
|
||||
Dozvole map[string]bool // mapa akcija → dozvoljeno/nije
|
||||
Moduli map[string]bool // mapa zakonskih modula → uključen za firmu (profil firme)
|
||||
Flash *FlashPoruka // jednokratna poruka nakon redirecta
|
||||
Stranica string
|
||||
NaslovStranice string
|
||||
Tema string
|
||||
NazivFirme string
|
||||
Podnazlov string
|
||||
LogoPutanja string // putanja do slike loga firme
|
||||
TopbarLogoSlika bool // prikaži logo sliku u topbaru
|
||||
AvatarPutanja string // putanja do lične avatar slike korisnika
|
||||
Korisnik string
|
||||
KorisnikIme string // korisničko ime prijavljenog korisnika
|
||||
KorisnikUloga string // uloga: "superadmin", "admin", "radnik"
|
||||
CsrfToken string // CSRF zaštitni token za forme
|
||||
AssetV string // verzija statičkih fajlova (cache-busting za CSS/JS)
|
||||
Dozvole map[string]bool // mapa akcija → dozvoljeno/nije
|
||||
Moduli map[string]bool // mapa zakonskih modula → uključen za firmu (profil firme)
|
||||
Flash *FlashPoruka // jednokratna poruka nakon redirecta
|
||||
// app pozadina — popunjava se iz podešavanja za sve stranice
|
||||
AppPozadina string
|
||||
AppPozadinaOpacity string // vrednost 0-80 (% overlay zatamnjivanja)
|
||||
|
||||
Reference in New Issue
Block a user