feat(pdv): KPR — knjiga primljenih računa + PIB/mesto dobavljača (Faza 2a)

KPR (handler, rute pod RequireModul("pdv"), UI sa sumama po stopama,
izbor dobavljača, datum plaćanja, PDV bez odbitka / oslobođena nabavka)
+ stavka u meniju. Dobavljači dobili PIB i mesto (migracija 043) jer KPR
traži PIB dobavljača za POPDV. Time je Faza 2a kompletna (KIR + KPR).
This commit is contained in:
2026-06-14 02:05:33 +02:00
parent e8fdd2dc51
commit 966d1f6c98
12 changed files with 466 additions and 12 deletions
+2
View File
@@ -9,6 +9,8 @@ type Dobavljac struct {
KontaktOsoba string
Telefon string
Email string
PIB string
Mesto string
Napomena string
DatumUnosa time.Time
}
+40
View File
@@ -94,3 +94,43 @@ type PdvKpr struct {
Napomena string
DatumUnosa time.Time
}
// OznakaPoreskogBroja vraća „JMBG" za 13-cifreni broj, inače „PIB" (dobavljači su obično firme).
func (k PdvKpr) OznakaPoreskogBroja() string {
cifre := 0
for _, r := range k.DobavljacPib {
if r >= '0' && r <= '9' {
cifre++
}
}
if cifre == 13 {
return "JMBG"
}
return "PIB"
}
// PdvKprSume su zbirovi kolona KPR-a (za red „ukupno" u pregledu knjige).
type PdvKprSume struct {
OsnovicaOpsta float64
PdvOpsta float64
OsnovicaPosebna float64
PdvPosebna float64
PdvBezOdbitka float64
OslobodenNabavka float64
Ukupno float64
}
// SumirajKpr sabira sve kolone iz liste KPR zapisa.
func SumirajKpr(zapisi []PdvKpr) PdvKprSume {
var s PdvKprSume
for _, z := range zapisi {
s.OsnovicaOpsta += z.OsnovicaOpsta
s.PdvOpsta += z.PdvOpsta
s.OsnovicaPosebna += z.OsnovicaPosebna
s.PdvPosebna += z.PdvPosebna
s.PdvBezOdbitka += z.PdvBezOdbitka
s.OslobodenNabavka += z.OslobodenNabavka
s.Ukupno += z.Ukupno
}
return s
}