Merge feature/kpr-nabavka-datum-placanja → develop
This commit is contained in:
@@ -25,7 +25,7 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
|
|||||||
SELECT
|
SELECT
|
||||||
n.id, n.dobavljac_id, n.napomena, n.ukupno, n.metod_raspodele,
|
n.id, n.dobavljac_id, n.napomena, n.ukupno, n.metod_raspodele,
|
||||||
n.stornirano, n.razlog_storniranja, n.datum,
|
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
|
COALESCE(d.naziv, '') AS dobavljac_naziv
|
||||||
FROM nabavke n
|
FROM nabavke n
|
||||||
LEFT JOIN dobavljaci d ON n.dobavljac_id = d.id
|
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() {
|
for redovi.Next() {
|
||||||
var n model.NabavkaSaDetaljem
|
var n model.NabavkaSaDetaljem
|
||||||
var dobavljacID sql.NullInt64
|
var dobavljacID sql.NullInt64
|
||||||
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna sql.NullString
|
var napomena, metod, razlogStorniranja, brojRacuna, datumRacuna, datumPlacanja sql.NullString
|
||||||
|
|
||||||
err := redovi.Scan(
|
err := redovi.Scan(
|
||||||
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
|
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
|
||||||
&n.Stornirano, &razlogStorniranja, &n.Datum,
|
&n.Stornirano, &razlogStorniranja, &n.Datum,
|
||||||
&brojRacuna, &datumRacuna, &n.PdvIznos,
|
&brojRacuna, &datumRacuna, &n.PdvIznos, &datumPlacanja,
|
||||||
&n.DobavljacNaziv,
|
&n.DobavljacNaziv,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -63,6 +63,11 @@ func (r *NabavkaRepo) Lista(ctx context.Context) ([]model.NabavkaSaDetaljem, err
|
|||||||
n.DatumRacuna = &t
|
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)
|
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) {
|
func (r *NabavkaRepo) DohvatiID(ctx context.Context, id int64) (*model.Nabavka, error) {
|
||||||
var n model.Nabavka
|
var n model.Nabavka
|
||||||
var dobavljacID sql.NullInt64
|
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, `
|
err := r.db.QueryRowContext(ctx, `
|
||||||
SELECT id, dobavljac_id, napomena, ukupno, metod_raspodele,
|
SELECT id, dobavljac_id, napomena, ukupno, metod_raspodele,
|
||||||
stornirano, razlog_storniranja, datum,
|
stornirano, razlog_storniranja, datum,
|
||||||
broj_racuna, datum_racuna, pdv_iznos
|
broj_racuna, datum_racuna, pdv_iznos, datum_placanja
|
||||||
FROM nabavke WHERE id = ?`, id).Scan(
|
FROM nabavke WHERE id = ?`, id).Scan(
|
||||||
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
|
&n.ID, &dobavljacID, &napomena, &n.Ukupno, &metod,
|
||||||
&n.Stornirano, &razlogStorniranja, &n.Datum,
|
&n.Stornirano, &razlogStorniranja, &n.Datum,
|
||||||
&brojRacuna, &datumRacuna, &n.PdvIznos,
|
&brojRacuna, &datumRacuna, &n.PdvIznos, &datumPlacanja,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("ntech: NabavkaRepo.DohvatiID: %w", err)
|
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
|
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
|
return &n, nil
|
||||||
}
|
}
|
||||||
@@ -180,10 +190,10 @@ func (r *NabavkaRepo) Kreiraj(ctx context.Context, n *model.Nabavka, stavke []mo
|
|||||||
|
|
||||||
// upisujemo zaglavlje nabavke
|
// upisujemo zaglavlje nabavke
|
||||||
rezultat, err := tx.ExecContext(ctx, `
|
rezultat, err := tx.ExecContext(ctx, `
|
||||||
INSERT INTO nabavke (dobavljac_id, napomena, ukupno, metod_raspodele, broj_racuna, datum_racuna, pdv_iznos)
|
INSERT INTO nabavke (dobavljac_id, napomena, ukupno, metod_raspodele, broj_racuna, datum_racuna, pdv_iznos, datum_placanja)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||||
nullInt64(n.DobavljacID), nullString(n.Napomena), ukupno, nullString(n.MetodRaspodele),
|
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 {
|
if err != nil {
|
||||||
return 0, fmt.Errorf("ntech: NabavkaRepo.Kreiraj: insert nabavka: %w", err)
|
return 0, fmt.Errorf("ntech: NabavkaRepo.Kreiraj: insert nabavka: %w", err)
|
||||||
|
|||||||
@@ -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
|
// paralelni nizovi stavki
|
||||||
artikalIDovi := r.Form["artikal_id[]"]
|
artikalIDovi := r.Form["artikal_id[]"]
|
||||||
kolicine := r.Form["kolicina[]"]
|
kolicine := r.Form["kolicina[]"]
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ type Nabavka struct {
|
|||||||
BrojRacuna string // broj računa dobavljača (za KPR BrojDokumenta)
|
BrojRacuna string // broj računa dobavljača (za KPR BrojDokumenta)
|
||||||
DatumRacuna *time.Time // datum prometa sa računa dobavljača (za KPR DatumPrometa)
|
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
|
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)
|
// NabavkaTrosak je jedna stavka zavisnih troškova nabavke (npr. prevoz, carina)
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ func KprIzNabavke(nabavka Nabavka, dobavljacNaziv, dobavljacPib, dobavljacMesto
|
|||||||
k := PdvKpr{
|
k := PdvKpr{
|
||||||
DatumPrometa: datumPrometa,
|
DatumPrometa: datumPrometa,
|
||||||
DatumKnjizenja: nabavka.Datum,
|
DatumKnjizenja: nabavka.Datum,
|
||||||
|
DatumPlacanja: nabavka.DatumPlacanja,
|
||||||
BrojDokumenta: brojDok,
|
BrojDokumenta: brojDok,
|
||||||
DobavljacNaziv: dobavljacNaziv,
|
DobavljacNaziv: dobavljacNaziv,
|
||||||
DobavljacPib: dobavljacPib,
|
DobavljacPib: dobavljacPib,
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -60,6 +60,12 @@
|
|||||||
{{if .Nabavka.DatumRacuna}}{{.Nabavka.DatumRacuna.Format "02.01.2006."}}{{else}}—{{end}}
|
{{if .Nabavka.DatumRacuna}}{{.Nabavka.DatumRacuna.Format "02.01.2006."}}{{else}}—{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Datum plaćanja</div>
|
||||||
|
<div style="font-size:14px;color:var(--tekst-glavni);">
|
||||||
|
{{if .Nabavka.DatumPlacanja}}{{.Nabavka.DatumPlacanja.Format "02.01.2006."}}{{else}}—{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Napomena</div>
|
<div style="font-size:12px;color:var(--tekst-sporedni);margin-bottom:4px;">Napomena</div>
|
||||||
<div style="font-size:14px;color:var(--tekst-glavni);">
|
<div style="font-size:14px;color:var(--tekst-glavni);">
|
||||||
|
|||||||
@@ -77,6 +77,11 @@
|
|||||||
<label class="polje-labela">Datum računa</label>
|
<label class="polje-labela">Datum računa</label>
|
||||||
<input type="date" name="datum_racuna" value="{{.Danas}}" style="width:100%;">
|
<input type="date" name="datum_racuna" value="{{.Danas}}" style="width:100%;">
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<label class="polje-labela">Datum plaćanja</label>
|
||||||
|
<input type="date" name="datum_placanja" style="width:100%;">
|
||||||
|
<div class="pomocni-tekst" style="margin-top:4px;">Ostavite prazno ako još nije plaćeno — relevantno za gotovinski PDV odbitak.</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{if .PdvObveznik}}
|
{{if .PdvObveznik}}
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user