Popravka sidebara: kolaps, podmeni i HTMX navigacija
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package sqlite
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
|
||||
"ntech/internal/model"
|
||||
)
|
||||
|
||||
// MagacinskePromeneRepo je SQLite implementacija MagacinskePromeneRepository interfejsa
|
||||
type MagacinskePromeneRepo struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
// NoviMagacinskePromeneRepo kreira novi MagacinskePromeneRepo
|
||||
func NoviMagacinskePromeneRepo(db *sql.DB) *MagacinskePromeneRepo {
|
||||
return &MagacinskePromeneRepo{db: db}
|
||||
}
|
||||
|
||||
// Lista vraća listu magacinskih promena, opcionalno filtrirano po artiklu
|
||||
func (r *MagacinskePromeneRepo) Lista(ctx context.Context, artikalID *int64, limit int) ([]model.MagacinskaPromenaSaDetaljem, error) {
|
||||
if limit <= 0 {
|
||||
limit = 100
|
||||
}
|
||||
|
||||
upit := `
|
||||
SELECT mp.id, mp.artikal_id, a.naziv, mp.tip_promene, mp.referentni_id,
|
||||
mp.promena_kolicine, mp.stanje_pre, mp.stanje_posle,
|
||||
mp.korisnik_id, mp.napomena, mp.datum
|
||||
FROM magacinske_promene mp
|
||||
JOIN artikli a ON a.id = mp.artikal_id
|
||||
WHERE 1=1`
|
||||
|
||||
args := []any{}
|
||||
|
||||
if artikalID != nil {
|
||||
upit += " AND mp.artikal_id = ?"
|
||||
args = append(args, *artikalID)
|
||||
}
|
||||
|
||||
upit += " ORDER BY mp.datum DESC LIMIT ?"
|
||||
args = append(args, limit)
|
||||
|
||||
redovi, err := r.db.QueryContext(ctx, upit, args...)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ntech: MagacinskePromeneRepo.Lista: %w", err)
|
||||
}
|
||||
defer redovi.Close()
|
||||
|
||||
var rezultat []model.MagacinskaPromenaSaDetaljem
|
||||
for redovi.Next() {
|
||||
var p model.MagacinskaPromenaSaDetaljem
|
||||
var korisnikID sql.NullInt64
|
||||
var napomena sql.NullString
|
||||
|
||||
err := redovi.Scan(
|
||||
&p.ID, &p.ArtikalID, &p.ArtikalNaziv, &p.TipPromene, &p.ReferentniID,
|
||||
&p.PromenaKolicine, &p.StanjePre, &p.StanjePosle,
|
||||
&korisnikID, &napomena, &p.Datum,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ntech: MagacinskePromeneRepo.Lista: scan: %w", err)
|
||||
}
|
||||
|
||||
if korisnikID.Valid {
|
||||
v := korisnikID.Int64
|
||||
p.KorisnikID = &v
|
||||
}
|
||||
p.Napomena = napomena.String
|
||||
|
||||
rezultat = append(rezultat, p)
|
||||
}
|
||||
|
||||
return rezultat, nil
|
||||
}
|
||||
|
||||
// zabeleziMagacinPromenu je interni helper koji upisuje jednu promenu stanja artikla.
|
||||
// Poziva se iz Kreiraj/Storno unutar postojeće transakcije.
|
||||
func zabeleziMagacinPromenu(
|
||||
ctx context.Context,
|
||||
tx *sql.Tx,
|
||||
artikalID int64,
|
||||
tipPromene string,
|
||||
promenaKolicine, stanjePre, stanjePosle int,
|
||||
referentniID int64,
|
||||
korisnikID *int64,
|
||||
napomena string,
|
||||
) error {
|
||||
_, err := tx.ExecContext(ctx, `
|
||||
INSERT INTO magacinske_promene
|
||||
(artikal_id, tip_promene, promena_kolicine, stanje_pre, stanje_posle,
|
||||
referentni_id, korisnik_id, napomena)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||
artikalID, tipPromene, promenaKolicine, stanjePre, stanjePosle,
|
||||
referentniID, nullInt64(korisnikID), nullString(napomena),
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ntech: zabeleziMagacinPromenu: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user