diff --git a/internal/db/repository.go b/internal/db/repository.go
index 69e89e1..b688d23 100644
--- a/internal/db/repository.go
+++ b/internal/db/repository.go
@@ -29,8 +29,8 @@ type ArtikalRepository interface {
Vrati(ctx context.Context, id int64) error
// SledecaSifra vraća predlog sledeće auto-šifre (npr. KOMP-0042 ili ART-0042)
SledecaSifra(ctx context.Context, kategorijaID *int64) (string, error)
- // KorigujKolicinu postavlja novu količinu artikla i upisuje korekciju u magacinske_promene
- KorigujKolicinu(ctx context.Context, artikalID int64, novaKolicina int, korisnikID *int64, napomena string) error
+ // KorigujKolicinu postavlja novu količinu artikla i upisuje promenu u magacinske_promene
+ KorigujKolicinu(ctx context.Context, artikalID int64, novaKolicina int, korisnikID *int64, napomena, tipPromene string) error
// DobavljaciArtikla vraća ID-jeve dobavljača vezanih za artikal
DobavljaciArtikla(ctx context.Context, artikalID int64) ([]int64, error)
// PostaviDobavljaceArtikla zamenjuje skup dobavljača artikla datim ID-jevima
@@ -152,7 +152,7 @@ type NabavkaRepository interface {
DohvatiStavke(ctx context.Context, nabavkaID int64) ([]model.StavkaSaArtiklom, error)
DohvatiTroskove(ctx context.Context, nabavkaID int64) ([]model.NabavkaTrosak, error)
Kreiraj(ctx context.Context, n *model.Nabavka, stavke []model.StavkaNabavke, troskovi []model.NabavkaTrosak, korisnikID *int64) (int64, error)
- Obrisi(ctx context.Context, id int64, korisnikID *int64) error
+ Storno(ctx context.Context, id int64, razlog string, korisnikID *int64) error
}
// DobavljacRepository definiše operacije nad dobavljačima
diff --git a/internal/db/sqlite/artikal.go b/internal/db/sqlite/artikal.go
index 0bcc94b..9766297 100644
--- a/internal/db/sqlite/artikal.go
+++ b/internal/db/sqlite/artikal.go
@@ -397,8 +397,9 @@ func (r *ArtikalRepo) SveDobavljaceArtikala(ctx context.Context) (map[int64][]in
return mapa, nil
}
-// KorigujKolicinu postavlja novu količinu i upisuje korekciju u magacinske_promene
-func (r *ArtikalRepo) KorigujKolicinu(ctx context.Context, artikalID int64, novaKolicina int, korisnikID *int64, napomena string) error {
+// KorigujKolicinu postavlja novu količinu i upisuje promenu u magacinske_promene;
+// tipPromene određuje vrstu traga (korekcija, manjak_popis, visak_popis)
+func (r *ArtikalRepo) KorigujKolicinu(ctx context.Context, artikalID int64, novaKolicina int, korisnikID *int64, napomena, tipPromene string) error {
tx, err := r.db.BeginTx(ctx, nil)
if err != nil {
return fmt.Errorf("ntech: ArtikalRepo.KorigujKolicinu: begin: %w", err)
@@ -418,7 +419,7 @@ func (r *ArtikalRepo) KorigujKolicinu(ctx context.Context, artikalID int64, nova
}
promena := novaKolicina - staraKolicina
- if err = zabeleziMagacinPromenu(ctx, tx, artikalID, model.PromenaKorekcija, promena,
+ if err = zabeleziMagacinPromenu(ctx, tx, artikalID, tipPromene, promena,
staraKolicina, novaKolicina, 0, korisnikID, napomena); err != nil {
return fmt.Errorf("ntech: ArtikalRepo.KorigujKolicinu: %w", err)
}
diff --git a/internal/handler/izvestaji.go b/internal/handler/izvestaji.go
index 5567b3f..5fe49fd 100644
--- a/internal/handler/izvestaji.go
+++ b/internal/handler/izvestaji.go
@@ -413,7 +413,11 @@ func (h *Handler) SacuvajPopis(w http.ResponseWriter, r *http.Request) {
continue
}
povecano := nova > a.Kolicina
- if err := h.Artikli.KorigujKolicinu(r.Context(), a.ID, nova, &k.ID, napomena); err != nil {
+ tipPromene := model.PromenaManjak
+ if povecano {
+ tipPromene = model.PromenaVisak
+ }
+ if err := h.Artikli.KorigujKolicinu(r.Context(), a.ID, nova, &k.ID, napomena, tipPromene); err != nil {
slog.Error("popis: korekcija artikla", "id", a.ID, "error", err)
greskaBroj++
continue
diff --git a/internal/handler/magacin_forma.go b/internal/handler/magacin_forma.go
index 8293fe0..6653d2a 100644
--- a/internal/handler/magacin_forma.go
+++ b/internal/handler/magacin_forma.go
@@ -264,7 +264,7 @@ func (h *Handler) SacuvajIzmenuArtikla(w http.ResponseWriter, r *http.Request) {
// ako se količina promenila, koriguj stanje uz magacinski trag
if novaKolicina != staraKolicina {
- if e := h.Artikli.KorigujKolicinu(r.Context(), id, novaKolicina, &k.ID, "izmena artikla"); e != nil {
+ if e := h.Artikli.KorigujKolicinu(r.Context(), id, novaKolicina, &k.ID, "izmena artikla", model.PromenaKorekcija); e != nil {
slog.Error("korekcija količine pri izmeni artikla nije uspela", "artikal_id", id, "error", e)
}
}
diff --git a/internal/model/magacin.go b/internal/model/magacin.go
index 8b382d9..1ca0b9d 100644
--- a/internal/model/magacin.go
+++ b/internal/model/magacin.go
@@ -9,6 +9,8 @@ const (
PromenaIzlazServis = "izlaz_servis"
PromenaPovracaj = "povracaj"
PromenaKorekcija = "korekcija"
+ PromenaManjak = "manjak_popis"
+ PromenaVisak = "visak_popis"
)
// MagacinskaPromenaSaDetaljem je promena stanja artikla sa nazivom artikla
diff --git a/migrations/089_magacin_manjak_visak.sql b/migrations/089_magacin_manjak_visak.sql
new file mode 100644
index 0000000..ee3db8f
--- /dev/null
+++ b/migrations/089_magacin_manjak_visak.sql
@@ -0,0 +1,25 @@
+-- Proširuje CHECK constraint na magacinske_promene da uključi manjak_popis i visak_popis
+-- SQLite ne podržava ALTER TABLE za CHECK, pa rekreiramo tabelu
+PRAGMA foreign_keys=OFF;
+
+CREATE TABLE magacinske_promene_nova (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ artikal_id INTEGER NOT NULL REFERENCES artikli(id) ON DELETE RESTRICT,
+ tip_promene TEXT NOT NULL CHECK (tip_promene IN (
+ 'ulaz_nabavka', 'izlaz_prodaja', 'izlaz_servis',
+ 'povracaj', 'korekcija', 'manjak_popis', 'visak_popis'
+ )),
+ referentni_id INTEGER NOT NULL,
+ promena_kolicine INTEGER NOT NULL,
+ stanje_pre INTEGER NOT NULL,
+ stanje_posle INTEGER NOT NULL,
+ korisnik_id INTEGER REFERENCES korisnici(id) ON DELETE SET NULL,
+ napomena TEXT,
+ datum DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
+);
+
+INSERT INTO magacinske_promene_nova SELECT * FROM magacinske_promene;
+DROP TABLE magacinske_promene;
+ALTER TABLE magacinske_promene_nova RENAME TO magacinske_promene;
+
+PRAGMA foreign_keys=ON;
diff --git a/web/templates/stranice/magacin_kartica.html b/web/templates/stranice/magacin_kartica.html
index 2e94d90..e7a706e 100644
--- a/web/templates/stranice/magacin_kartica.html
+++ b/web/templates/stranice/magacin_kartica.html
@@ -129,6 +129,10 @@
Povraćaj
{{else if eq .TipPromene "korekcija"}}
Korekcija
+ {{else if eq .TipPromene "manjak_popis"}}
+ Manjak (popis)
+ {{else if eq .TipPromene "visak_popis"}}
+ Višak (popis)
{{else}}
{{.TipPromene}}
{{end}}
diff --git a/web/templates/stranice/prometni_list.html b/web/templates/stranice/prometni_list.html
index 8d21cae..27496a6 100644
--- a/web/templates/stranice/prometni_list.html
+++ b/web/templates/stranice/prometni_list.html
@@ -66,6 +66,10 @@
Povraćaj
{{else if eq .TipPromene "korekcija"}}
Korekcija
+ {{else if eq .TipPromene "manjak_popis"}}
+ Manjak (popis)
+ {{else if eq .TipPromene "visak_popis"}}
+ Višak (popis)
{{else}}
{{.TipPromene}}
{{end}}