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