Artikli: šifre, tip i jedinica mere; magacin UI; servis predračun

Šifre artikala:
- Kôd kategorije kao prefiks auto-šifre (PREFIKS-NNNN), otporno na brisanje (max+1)
- Tip artikla (proizvod/usluga/trošak) i jedinica mere
- Arhiviranje artikala umesto brisanja kad su već u prometu

Magacin:
- Paginacija 50 po stranici
- Klikabilna šifra (vodi na karticu), opisniji placeholder pretrage
- Ispravka: pretraga više ne okida animaciju redova (globalni htmx listener
  umesto hx-on atributa koji se ne okida u ovoj htmx verziji)
- Dugmad akcija ne prelamaju tekst; uklonjen content-visibility (secanje pri skrolu)

Servis: predračun (nova stranica i ruta)
This commit is contained in:
2026-06-20 18:40:01 +02:00
parent a8f368ca06
commit b0250b2917
24 changed files with 930 additions and 106 deletions
+12 -2
View File
@@ -2,11 +2,16 @@ package db
import (
"context"
"errors"
"time"
"ntech/internal/model"
)
// ErrArtikalUUpotrebi se vraća kad se artikal ne može obrisati jer postoji u prometu
// (prodaja, nabavka, magacinske promene ili servisni nalozi). Tada se artikal arhivira.
var ErrArtikalUUpotrebi = errors.New("ntech: artikal je u upotrebi")
// ArtikalRepository definiše operacije nad artiklima
type ArtikalRepository interface {
Lista(ctx context.Context, filter ArtikalFilter) ([]model.ArtikalSaKategorijom, error)
@@ -18,8 +23,12 @@ type ArtikalRepository interface {
AzurirajCene(ctx context.Context, id int64, nabavna, prodajna float64) error
PremestiKategoriju(ctx context.Context, id int64, kategorijaID *int64) error
Obrisi(ctx context.Context, id int64) error
// SledecaSifra vraća predlog sledeće auto-šifre (npr. ART-00042)
SledecaSifra(ctx context.Context) (string, error)
// Arhiviraj označava artikal kao arhiviran (skriva ga iz aktivne liste, čuva istoriju)
Arhiviraj(ctx context.Context, id int64) error
// Vrati poništava arhiviranje i vraća artikal u aktivnu listu
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
}
@@ -79,6 +88,7 @@ type ArtikalFilter struct {
Pretraga string
KategorijaID *int64
SamoKriticni bool
Arhivirani bool // true → vrati samo arhivirane; false (podrazumevano) → samo aktivne
Limit int
Offset int
}