feat(pdv): KIR — handler, RequireModul, rute i UI (Faza 2a)

Pregled knjige izdatih računa (filter perioda + sume po stopama), forma
unosa (server računa ukupno) i brisanje. Nove dozvole pdv.*; prvi put
montiran RequireModul("pdv") — KIR je vidljiv u meniju (.Moduli) i
dostupan samo PDV obveznicima, uz RBAC. Oznaka PIB/JMBG po broju cifara.
This commit is contained in:
2026-06-13 23:45:24 +02:00
parent 26c829fef3
commit 53cbc789db
8 changed files with 446 additions and 0 deletions
+51
View File
@@ -23,6 +23,57 @@ type PdvKir struct {
DatumUnosa time.Time
}
// OslobodenUkupno vraća zbir oslobođenog prometa (sa i bez prava na odbitak).
func (k PdvKir) OslobodenUkupno() float64 {
return k.OslobodenSaPravom + k.OslobodenBezPrava
}
// OznakaPoreskogBroja vraća „JMBG" ako uneti broj ima 13 cifara (fizičko lice),
// inače „PIB" (pravno lice / preduzetnik — PIB ima 9 cifara).
func (k PdvKir) OznakaPoreskogBroja() string {
cifre := 0
for _, r := range k.KupacPib {
if r >= '0' && r <= '9' {
cifre++
}
}
if cifre == 13 {
return "JMBG"
}
return "PIB"
}
// PdvKirSume su zbirovi kolona KIR-a (za red „ukupno" u pregledu knjige).
type PdvKirSume struct {
OsnovicaOpsta float64
PdvOpsta float64
OsnovicaPosebna float64
PdvPosebna float64
OslobodenSaPravom float64
OslobodenBezPrava float64
Ukupno float64
}
// OslobodenUkupno vraća zbir oslobođenog prometa (sa i bez prava na odbitak).
func (s PdvKirSume) OslobodenUkupno() float64 {
return s.OslobodenSaPravom + s.OslobodenBezPrava
}
// SumirajKir sabira sve kolone iz liste KIR zapisa.
func SumirajKir(zapisi []PdvKir) PdvKirSume {
var s PdvKirSume
for _, z := range zapisi {
s.OsnovicaOpsta += z.OsnovicaOpsta
s.PdvOpsta += z.PdvOpsta
s.OsnovicaPosebna += z.OsnovicaPosebna
s.PdvPosebna += z.PdvPosebna
s.OslobodenSaPravom += z.OslobodenSaPravom
s.OslobodenBezPrava += z.OslobodenBezPrava
s.Ukupno += z.Ukupno
}
return s
}
// PdvKpr je jedan zapis u knjizi primljenih računa (ulazni PDV).
type PdvKpr struct {
ID int64