KPR: popunjavanje datum_placanja iz nabavke

Kolona datum_placanja je postojala u pdv_kpr tabeli ali se nikad nije
popunjavala za auto-upise iz nabavke — relevantno za gotovinski PDV odbitak.
Dodato polje Nabavka.DatumPlacanja (migracija 096, opciono polje u formi
nabavke, prikaz u detaljima), KprIzNabavke ga sada prosleđuje u KPR zapis.
This commit is contained in:
2026-07-01 12:49:55 +02:00
parent c12b4ff499
commit d2f8153845
7 changed files with 41 additions and 9 deletions
+19 -9
View File
@@ -25,7 +25,7 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
SELECT
n.id, n.dobavljac_id, n.napomena, n.ukupno, n.metod_raspodele,
n.stornirano, n.razlog_storniranja, n.datum,
n.broj_racuna, n.datum_racuna, n.pdv_iznos,
n.broj_racuna, n.datum_racuna, n.pdv_iznos, n.datum_placanja,
COALESCE(d.naziv, '') AS dobavljac_naziv
FROM nabavke n
LEFT JOIN dobavljaci d ON n.dobavljac_id = d.id
@@ -39,12 +39,12 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
for redovi.Next() {
var n model.NabavkaSaDetaljem
var dobavljacID sql.NullInt64
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna sql.NullString
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna, datumPlacanja sql.NullString
err := redovi.Scan(
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
&n.Stornirano, &razlogStorniranja, &n.Datum,
&brojRacuna, &datumRacuna, &n.PdvIznos,
&brojRacuna, &datumRacuna, &n.PdvIznos, &datumPlacanja,
&n.DobavljacNaziv,
)
if err != nil {
@@ -63,6 +63,11 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
n.DatumRacuna = &t
}
}
if datumPlacanja.Valid && datumPlacanja.String != "" {
if t, e := time.Parse("2006-01-02", datumPlacanja.String[:10]); e == nil {
n.DatumPlacanja = &t
}
}
rezultat = append(rezultat, n)
}
@@ -74,16 +79,16 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
func (r *NabavkaRepo) DohvatiID(ctx context.Context, id int64) (*model.Nabavka, error) {
var n model.Nabavka
var dobavljacID sql.NullInt64
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna sql.NullString
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna, datumPlacanja sql.NullString
err := r.db.QueryRowContext(ctx, `
SELECT id, dobavljac_id, napomena, ukupno, metod_raspodele,
stornirano, razlog_storniranja, datum,
broj_racuna, datum_racuna, pdv_iznos
broj_racuna, datum_racuna, pdv_iznos, datum_placanja
FROM nabavke WHERE id = ?`, id).Scan(
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
&n.Stornirano, &razlogStorniranja, &n.Datum,
&brojRacuna, &datumRacuna, &n.PdvIznos,
&brojRacuna, &datumRacuna, &n.PdvIznos, &datumPlacanja,
)
if err != nil {
return nil, fmt.Errorf("ntech: NabavkaRepo.DohvatiID: %w", err)
@@ -101,6 +106,11 @@ func (r *NabavkaRepo) DohvatiID(ctx context.Context, id int64) (*model.Nabavka,
n.DatumRacuna = &t
}
}
if datumPlacanja.Valid && datumPlacanja.String != "" {
if t, e := time.Parse("2006-01-02", datumPlacanja.String[:10]); e == nil {
n.DatumPlacanja = &t
}
}
return &n, nil
}
@@ -180,10 +190,10 @@ func (r *NabavkaRepo) Kreiraj(ctx context.Context, n *model.Nabavka, stavke []mo
// upisujemo zaglavlje nabavke
rezultat, err := tx.ExecContext(ctx, `
INSERT INTO nabavke (dobavljac_id, napomena, ukupno, metod_raspodele, broj_racuna, datum_racuna, pdv_iznos)
VALUES (?, ?, ?, ?, ?, ?, ?)`,
INSERT INTO nabavke (dobavljac_id, napomena, ukupno, metod_raspodele, broj_racuna, datum_racuna, pdv_iznos, datum_placanja)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
nullInt64(n.DobavljacID), nullString(n.Napomena), ukupno, nullString(n.MetodRaspodele),
nullString(n.BrojRacuna), nullDateString(n.DatumRacuna), n.PdvIznos,
nullString(n.BrojRacuna), nullDateString(n.DatumRacuna), n.PdvIznos, nullDateString(n.DatumPlacanja),
)
if err != nil {
return 0, fmt.Errorf("ntech: NabavkaRepo.Kreiraj: insert nabavka: %w", err)
+6
View File
@@ -412,6 +412,12 @@ func parseFormuNabavke(r *http.Request) (model.Nabavka, []model.StavkaNabavke, [
}
}
if datStr := strings.TrimSpace(r.FormValue("datum_placanja")); datStr != "" {
if t, e := time.Parse("2006-01-02", datStr); e == nil {
nabavka.DatumPlacanja = &t
}
}
// paralelni nizovi stavki
artikalIDovi := r.Form["artikal_id[]"]
kolicine := r.Form["kolicina[]"]
+1
View File
@@ -18,6 +18,7 @@ type Nabavka struct {
BrojRacuna string // broj računa dobavljača (za KPR BrojDokumenta)
DatumRacuna *time.Time // datum prometa sa računa dobavljača (za KPR DatumPrometa)
PdvIznos float64 // stvarni PDV sa računa; 0 = koristiti aproksimaciju iz stope
DatumPlacanja *time.Time // datum plaćanja računa dobavljaču (za KPR DatumPlacanja, gotovinski PDV odbitak)
}
// NabavkaTrosak je jedna stavka zavisnih troškova nabavke (npr. prevoz, carina)
+1
View File
@@ -223,6 +223,7 @@ func KprIzNabavke(nabavka Nabavka, dobavljacNaziv, dobavljacPib, dobavljacMesto
k := PdvKpr{
DatumPrometa: datumPrometa,
DatumKnjizenja: nabavka.Datum,
DatumPlacanja: nabavka.DatumPlacanja,
BrojDokumenta: brojDok,
DobavljacNaziv: dobavljacNaziv,
DobavljacPib: dobavljacPib,