6d066f6704
config.SviModuli + PodaciStranice.Moduli (uslovni meni, analogno Dozvole) i middleware.RequireModul (zaštita ruta, analogno RequireDozvola). Sloj iznad RBAC-a: zahtev mora proći i „modul uključen" i „korisnik sme". Dopunjen test (TestSviModuli). Time je Faza 0 kompletna.
68 lines
2.4 KiB
Go
68 lines
2.4 KiB
Go
package config
|
|
|
|
// Ovaj fajl izvodi iz profila firme (vidi Project.md §2, §4) koji su zakonski
|
|
// moduli uključeni za datu firmu. Profil se čuva kao key-value u tabeli
|
|
// `podesavanja`, pa helper prima već učitanu mapu (čista funkcija — lako se
|
|
// testira bez baze). Ovo je sloj IZNAD RBAC-a: „da li firma uopšte koristi
|
|
// modul", nezavisno od „da li korisnik sme".
|
|
|
|
// Ključevi profila firme u tabeli `podesavanja`.
|
|
const (
|
|
KljucPravniOblik = "firma_pravni_oblik"
|
|
KljucPdvObveznik = "firma_pdv_obveznik"
|
|
KljucFiskalizacija = "firma_fiskalizacija"
|
|
KljucRezim = "firma_rezim"
|
|
)
|
|
|
|
// Nazivi modula koje program pali/gasi prema profilu firme.
|
|
const (
|
|
ModulPdv = "pdv"
|
|
ModulFiskalizacija = "fiskalizacija"
|
|
ModulKpo = "kpo"
|
|
ModulDvojno = "dvojno"
|
|
)
|
|
|
|
// ModulUkljucen vraća da li je dati zakonski modul aktivan za firmu, na osnovu
|
|
// profila firme. Režim „samo evidencija" gasi ceo zakonski sloj — tada nijedan
|
|
// modul nije uključen, bez obzira na ostale prekidače.
|
|
func ModulUkljucen(podesavanja map[string]string, modul string) bool {
|
|
// podrazumevano (ključ još ne postoji) je „samo evidencija" — najbezbednije
|
|
// stanje: stara instalacija ne počinje da se ponaša kao poreski obveznik.
|
|
rezim := podesavanja[KljucRezim]
|
|
if rezim == "" {
|
|
rezim = "samo_evidencija"
|
|
}
|
|
if rezim != "pun" {
|
|
return false
|
|
}
|
|
|
|
switch modul {
|
|
case ModulFiskalizacija:
|
|
// fiskalizacija je nezavisna od pravnog oblika — zaseban prekidač
|
|
// „izdaje li račune građanima" (Project.md §3, napomena *).
|
|
return podesavanja[KljucFiskalizacija] == "da"
|
|
case ModulPdv:
|
|
// PDV evidencija se vodi kad je firma u sistemu PDV-a.
|
|
return podesavanja[KljucPdvObveznik] == "da"
|
|
case ModulKpo:
|
|
// KPO (knjiga o ostvarenom prometu) je samo za paušalce.
|
|
return podesavanja[KljucPravniOblik] == "pausalac"
|
|
case ModulDvojno:
|
|
// dvojno knjigovodstvo je za DOO (za preduzetnike je buduća podela, Project.md §8).
|
|
return podesavanja[KljucPravniOblik] == "doo"
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// SviModuli vraća mapu svih poznatih modula → da li su uključeni za dati profil firme.
|
|
// Koristi se da šabloni uslovno prikazuju stavke menija (analogno mapi Dozvole).
|
|
func SviModuli(podesavanja map[string]string) map[string]bool {
|
|
moduli := []string{ModulPdv, ModulFiskalizacija, ModulKpo, ModulDvojno}
|
|
m := make(map[string]bool, len(moduli))
|
|
for _, modul := range moduli {
|
|
m[modul] = ModulUkljucen(podesavanja, modul)
|
|
}
|
|
return m
|
|
}
|