Servis novi nalog: kartice, izbor/kreiranje klijenta, novi broj naloga

- Forma naloga razdvojena u zasebne kartice (Uređaj, Klijent, Status i datumi, Cene/Napomena)
- Nova kartica Klijent: radio fizičko/pravno, živa pretraga postojećih (Alpine, CSP-safe) po punom imenu/imenu/prezimenu odnosno nazivu firme; izbor postojećeg ili unos novog
- Enter u pretrazi bez izbora popunjava polja novog klijenta (ime/prezime ili naziv firme)
- SacuvajNalog/SacuvajIzmenaNaloga: helper mozdaKreirajKlijenta kreira novog klijenta iz forme kada nije izabran postojeći
- Broj naloga: format SN-MMGG-NNN sa mesečnim resetom brojača (001-999)
- Dodat CSRF token u formu naloga (POST je ranije vraćao 403)
- Šablonski helper json za ugradnju liste klijenata u Alpine
This commit is contained in:
2026-06-21 12:15:59 +02:00
parent 337267acd4
commit 045ea766f1
5 changed files with 513 additions and 198 deletions
+8 -4
View File
@@ -30,11 +30,15 @@ func NoviServisRepo(db *sql.DB) *ServisRepo {
return &ServisRepo{db: db}
}
// SledeciBroj generiše sledeći broj naloga u formatu SN-GGGG-NNNN
// SledeciBroj generiše sledeći broj naloga u formatu SN-MMGG-NNN
// (MM mesec, GG dvocifrena godina); brojač NNN se resetuje svakog meseca
func (r *ServisRepo) SledeciBroj(ctx context.Context) (string, error) {
godina := time.Now().Year()
uzorak := fmt.Sprintf("SN-%d-%%", godina)
sada := time.Now()
// prefiks "SN-MMGG-" je dug 8 karaktera, pa brojač počinje od 9. karaktera
prefiks := fmt.Sprintf("SN-%02d%02d-", int(sada.Month()), sada.Year()%100)
uzorak := prefiks + "%"
// COALESCE(MAX, 0)+1 → prvi nalog u mesecu dobija 001
var sledeci int
err := r.db.QueryRowContext(ctx, `
SELECT COALESCE(MAX(CAST(SUBSTR(broj_naloga, 9) AS INTEGER)), 0) + 1
@@ -44,7 +48,7 @@ func (r *ServisRepo) SledeciBroj(ctx context.Context) (string, error) {
return "", fmt.Errorf("ntech: ServisRepo.SledeciBroj: %w", err)
}
return fmt.Sprintf("SN-%d-%04d", godina, sledeci), nil
return fmt.Sprintf("%s%03d", prefiks, sledeci), nil
}
// Lista vraća listu servisnih naloga sa imenom klijenta, opcionim filterima