Fiskalizacija: refund pri stornu, dnevni pazar KIR, popust na stavci

This commit is contained in:
2026-06-30 20:52:50 +02:00
parent 76a0df1c09
commit 3166a93e1d
11 changed files with 337 additions and 8 deletions
+44
View File
@@ -414,3 +414,47 @@ func (r *ProdajaRepo) Obrisi(ctx context.Context, id int64, korisnikID *int64) e
return nil
}
// DnevniPrometMaloprodaje vraća zbrojene iznose maloprodajnih stavki za zadati dan.
// datum je string oblika "YYYY-MM-DD". Isključuje stornirane naloge i B2B (sa klijentom).
func (r *ProdajaRepo) DnevniPrometMaloprodaje(ctx context.Context, datum string) (model.DnevniPrometKir, error) {
var p model.DnevniPrometKir
// broj naloga tog dana
err := r.db.QueryRowContext(ctx, `
SELECT COUNT(*) FROM prodajni_nalozi
WHERE klijent_id IS NULL AND stornirano = 0 AND DATE(datum) = ?`, datum,
).Scan(&p.BrojNaloga)
if err != nil {
return p, fmt.Errorf("ntech: ProdajaRepo.DnevniPrometMaloprodaje: count: %w", err)
}
// stavke grupisane po PDV stopi
redovi, err := r.db.QueryContext(ctx, `
SELECT s.pdv_stopa, SUM(s.ukupno), SUM(s.ukupno * s.pdv_stopa / 100.0)
FROM stavke_prodaje s
JOIN prodajni_nalozi p ON p.id = s.nalog_id
WHERE p.klijent_id IS NULL AND p.stornirano = 0 AND DATE(p.datum) = ?
GROUP BY s.pdv_stopa`, datum,
)
if err != nil {
return p, fmt.Errorf("ntech: ProdajaRepo.DnevniPrometMaloprodaje: query: %w", err)
}
defer redovi.Close()
for redovi.Next() {
var stopa, osnovica, pdv float64
if err := redovi.Scan(&stopa, &osnovica, &pdv); err != nil {
return p, fmt.Errorf("ntech: ProdajaRepo.DnevniPrometMaloprodaje: scan: %w", err)
}
switch {
case stopa >= 19.9 && stopa <= 20.1:
p.OsnovicaOpsta += osnovica
p.PdvOpsta += pdv
case stopa >= 9.9 && stopa <= 10.1:
p.OsnovicaPosebna += osnovica
p.PdvPosebna += pdv
}
}
return p, redovi.Err()
}