diff --git a/internal/db/sqlite/nabavka.go b/internal/db/sqlite/nabavka.go index dae96cf..31397e4 100644 --- a/internal/db/sqlite/nabavka.go +++ b/internal/db/sqlite/nabavka.go @@ -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) diff --git a/internal/handler/nabavka.go b/internal/handler/nabavka.go index 90f7ed0..da253f1 100644 --- a/internal/handler/nabavka.go +++ b/internal/handler/nabavka.go @@ -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[]"] diff --git a/internal/model/nabavka.go b/internal/model/nabavka.go index 106d35d..82e1a09 100644 --- a/internal/model/nabavka.go +++ b/internal/model/nabavka.go @@ -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) diff --git a/internal/model/pdv_evidencija.go b/internal/model/pdv_evidencija.go index 4bebe6e..42f74d5 100644 --- a/internal/model/pdv_evidencija.go +++ b/internal/model/pdv_evidencija.go @@ -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, diff --git a/migrations/096_nabavka_datum_placanja.sql b/migrations/096_nabavka_datum_placanja.sql new file mode 100644 index 0000000..be4e575 --- /dev/null +++ b/migrations/096_nabavka_datum_placanja.sql @@ -0,0 +1,3 @@ +-- Datum plaćanja računa dobavljača — relevantno za gotovinski PDV odbitak +-- (KPR polje datum_placanja se do sada nikad nije popunjavalo za auto-upise iz nabavke). +ALTER TABLE nabavke ADD COLUMN datum_placanja DATE; diff --git a/web/templates/stranice/nabavka_detalji.html b/web/templates/stranice/nabavka_detalji.html index 1d937bd..3a8f80c 100644 --- a/web/templates/stranice/nabavka_detalji.html +++ b/web/templates/stranice/nabavka_detalji.html @@ -60,6 +60,12 @@ {{if .Nabavka.DatumRacuna}}{{.Nabavka.DatumRacuna.Format "02.01.2006."}}{{else}}—{{end}} +
+
Datum plaćanja
+
+ {{if .Nabavka.DatumPlacanja}}{{.Nabavka.DatumPlacanja.Format "02.01.2006."}}{{else}}—{{end}} +
+
Napomena
diff --git a/web/templates/stranice/nabavka_forma.html b/web/templates/stranice/nabavka_forma.html index 8fe92e0..4c2d1e8 100644 --- a/web/templates/stranice/nabavka_forma.html +++ b/web/templates/stranice/nabavka_forma.html @@ -77,6 +77,11 @@
+
+ + +
Ostavite prazno ako još nije plaćeno — relevantno za gotovinski PDV odbitak.
+
{{if .PdvObveznik}}