- PFR API ključ (pfr_api_key) u podešavanjima i fiskalizaciji - Formatiranje fiskalnog računa: veličina fonta, QR kod, layout - PFR mock: QR box_size/border, automatski PIN retry posle BE restarta - Servis: animirane kanban kartice, formatiranje računa - Dashboard i testovi: sitne ispravke
129 lines
5.4 KiB
Go
129 lines
5.4 KiB
Go
package model
|
|
|
|
// StavkaServisa prikazuje jedan servisni nalog na dashboardu
|
|
type StavkaServisa struct {
|
|
ID int64
|
|
Uredjaj string
|
|
Status string
|
|
BojaTacke string
|
|
DatumPrijema string // kratki format, npr. "01.06."
|
|
}
|
|
|
|
// StavkaZalihe prikazuje jedan artikal sa kritičnom zalihom
|
|
type StavkaZalihe struct {
|
|
Naziv string
|
|
Kolicina int
|
|
BojaTacke string
|
|
}
|
|
|
|
// StavkaProdajePregled prikazuje jedan prodajni nalog na dashboardu
|
|
type StavkaProdajePregled struct {
|
|
BrojNaloga string
|
|
KlijentNaziv string
|
|
Ukupno float64
|
|
Datum string // kratki format, npr. "01.06."
|
|
}
|
|
|
|
// FlashPoruka je jednokratna poruka koja se prikazuje korisniku nakon redirecta
|
|
type FlashPoruka struct {
|
|
Tip string // "uspeh" ili "greska"
|
|
Poruka string
|
|
}
|
|
|
|
// 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
|
|
// app pozadina — popunjava se iz podešavanja za sve stranice
|
|
AppPozadina string
|
|
AppPozadinaOpacity string // vrednost 0-80 (% overlay zatamnjivanja)
|
|
AppPozadinaBlur string // vrednost 0-20 (px backdrop-filter blur na elementima)
|
|
AppPozadinaBlurPozadine string // vrednost 0-20 (px filter blur na pozadinskoj slici)
|
|
AppPozadinaGlassOpacity string // vrednost 0-80 (% zatamnjivanje glass elemenata) — samo za ličnu pozadinu
|
|
LokalnaAnimacija string // "" | "fadeInUp" | "fadeIn" | "scaleIn" | "slideLeft"
|
|
LokalniHover string // "" | "bez" | "podizanje" | "svetlost"
|
|
LokalnaBrzinaAnimacije string // "" | "0.2" | "0.4" | ... | "1.5" (sekunde)
|
|
}
|
|
|
|
// PodaciDashboarda su podaci specifični za dashboard stranicu
|
|
type PodaciDashboarda struct {
|
|
PodaciStranice
|
|
BrojArtikala int
|
|
AktivniServisi int
|
|
PrihodOvogMeseca float64
|
|
KriticnaZaliha int
|
|
AktivniPodsetnici int
|
|
PoslednjiServisi []StavkaServisa
|
|
KriticneZalihe []StavkaZalihe
|
|
PoslednjeProdaje []StavkaProdajePregled
|
|
FlashGreska string
|
|
PrazninaKnjige PrazninaKnjigovodstva
|
|
}
|
|
|
|
// PrazninaKnjigovodstva sažima broj naloga bez KIR/KPO/fiskalnog upisa i broj
|
|
// sumnjivih duplikata (naloga koje automatski backfill namerno preskače) — prikazuje
|
|
// se kao kartica na dashboard-u.
|
|
type PrazninaKnjigovodstva struct {
|
|
BezKirProdaja int // B2B prodaje bez KIR upisa
|
|
BezKirServis int // B2B servisi bez KIR upisa
|
|
BezKirProdajaID []int64 // ID-jevi — za direktan link sa dashboard-a
|
|
BezKirServisID []int64
|
|
BezKpoProdaja int // prodaje bez KPO upisa
|
|
BezKpoServis int // servisi bez KPO upisa
|
|
BezKpoProdajaID []int64
|
|
BezKpoServisID []int64
|
|
BezFiskalnogProdaja int // prodajni nalozi bez izdatog fiskalnog računa
|
|
BezFiskalnogServis int // preuzeti servisni nalozi bez izdatog fiskalnog računa
|
|
BezFiskalnogProdajaID []int64
|
|
BezFiskalnogServisID []int64
|
|
BezRefundaProdaja int // stornirane prodaje čiji fiskalni refund nije uspeo (best-effort poziv pao)
|
|
BezRefundaServis int // stornirani servisi čiji fiskalni refund nije uspeo (best-effort poziv pao)
|
|
BezRefundaProdajaID []int64 // ID-jevi stornirane prodaje bez refunda — za direktan link sa dashboard-a
|
|
BezRefundaServisID []int64 // ID-jevi storniranih servisa bez refunda — za direktan link sa dashboard-a
|
|
SumnjiviDupli int
|
|
SumnjiviFiskalID []int64 // ID-jevi sumnjivih duplikata u fiskalizaciji — preskaču se u automatskoj batch fiskalizaciji
|
|
}
|
|
|
|
// BezKir vraća ukupan broj naloga (prodaja + servis) bez KIR upisa.
|
|
func (p PrazninaKnjigovodstva) BezKir() int {
|
|
return p.BezKirProdaja + p.BezKirServis
|
|
}
|
|
|
|
// BezKpo vraća ukupan broj naloga (prodaja + servis) bez KPO upisa.
|
|
func (p PrazninaKnjigovodstva) BezKpo() int {
|
|
return p.BezKpoProdaja + p.BezKpoServis
|
|
}
|
|
|
|
// BezFiskalnog vraća ukupan broj naloga (prodaja + servis) bez izdatog fiskalnog
|
|
// računa — koristi se za prikaz zbirnog broja na dashboard-u.
|
|
func (p PrazninaKnjigovodstva) BezFiskalnog() int {
|
|
return p.BezFiskalnogProdaja + p.BezFiskalnogServis
|
|
}
|
|
|
|
// BezRefunda vraća ukupan broj storniranih naloga (prodaja + servis) čiji fiskalni
|
|
// refund nije uspeo — koristi se za prikaz zbirnog broja na dashboard-u.
|
|
func (p PrazninaKnjigovodstva) BezRefunda() int {
|
|
return p.BezRefundaProdaja + p.BezRefundaServis
|
|
}
|
|
|
|
// Ukupno vraća zbir svih praznina UKLJUČUJUĆI sumnjive duplikate — koristi se da se
|
|
// odluči da li se kartica uopšte prikazuje na dashboard-u (i kad ostanu samo
|
|
// duplikati za ručnu proveru, kartica mora da ostane vidljiva).
|
|
func (p PrazninaKnjigovodstva) Ukupno() int {
|
|
return p.BezKir() + p.BezKpo() + p.BezFiskalnog() + p.BezRefunda() + p.SumnjiviDupli
|
|
}
|