From 045ea766f1db3083b715c7c3537ae14e2c55b03f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Sun, 21 Jun 2026 12:15:59 +0200 Subject: [PATCH] =?UTF-8?q?Servis=20novi=20nalog:=20kartice,=20izbor/kreir?= =?UTF-8?q?anje=20klijenta,=20novi=20broj=20naloga=20-=20Forma=20naloga=20?= =?UTF-8?q?razdvojena=20u=20zasebne=20kartice=20(Ure=C4=91aj,=20Klijent,?= =?UTF-8?q?=20Status=20i=20datumi,=20Cene/Napomena)=20-=20Nova=20kartica?= =?UTF-8?q?=20Klijent:=20radio=20fizi=C4=8Dko/pravno,=20=C5=BEiva=20pretra?= =?UTF-8?q?ga=20postoje=C4=87ih=20(Alpine,=20CSP-safe)=20po=20punom=20imen?= =?UTF-8?q?u/imenu/prezimenu=20odnosno=20nazivu=20firme;=20izbor=20postoje?= =?UTF-8?q?=C4=87eg=20ili=20unos=20novog=20-=20Enter=20u=20pretrazi=20bez?= =?UTF-8?q?=20izbora=20popunjava=20polja=20novog=20klijenta=20(ime/prezime?= =?UTF-8?q?=20ili=20naziv=20firme)=20-=20SacuvajNalog/SacuvajIzmenaNaloga:?= =?UTF-8?q?=20helper=20mozdaKreirajKlijenta=20kreira=20novog=20klijenta=20?= =?UTF-8?q?iz=20forme=20kada=20nije=20izabran=20postoje=C4=87i=20-=20Broj?= =?UTF-8?q?=20naloga:=20format=20SN-MMGG-NNN=20sa=20mese=C4=8Dnim=20reseto?= =?UTF-8?q?m=20broja=C4=8Da=20(001-999)=20-=20Dodat=20CSRF=20token=20u=20f?= =?UTF-8?q?ormu=20naloga=20(POST=20je=20ranije=20vra=C4=87ao=20403)=20-=20?= =?UTF-8?q?=C5=A0ablonski=20helper=20json=20za=20ugradnju=20liste=20klijen?= =?UTF-8?q?ata=20u=20Alpine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/sqlite/servis.go | 12 +- internal/handler/kes.go | 10 + internal/handler/servis.go | 92 +++++ web/static/js/ntech.js | 99 +++++ web/templates/stranice/servis_forma.html | 498 ++++++++++++++--------- 5 files changed, 513 insertions(+), 198 deletions(-) diff --git a/internal/db/sqlite/servis.go b/internal/db/sqlite/servis.go index 072637b..2955314 100644 --- a/internal/db/sqlite/servis.go +++ b/internal/db/sqlite/servis.go @@ -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 diff --git a/internal/handler/kes.go b/internal/handler/kes.go index ab6ff9d..db55756 100644 --- a/internal/handler/kes.go +++ b/internal/handler/kes.go @@ -1,6 +1,7 @@ package handler import ( + "encoding/json" "fmt" "html/template" "io/fs" @@ -65,6 +66,15 @@ var sablonskeFunkcije = template.FuncMap{ }, // telefon formatira srpski broj telefona radi lakšeg čitanja: "0641234567" → "064 123 4567" "telefon": formatirajTelefon, + // json serijalizuje vrednost u JSON za ugradnju u + Nazad na servis -
-
- - {{if .Izmena}}Izmeni nalog{{else}}Novi nalog{{end}} - - - {{.Nalog.BrojNaloga}} - + {{if .Greska}} +
{{.Greska}}
+ {{end}} + +
+ + + + + + + +
+
+ + {{if .Izmena}}Izmeni nalog{{else}}Novi nalog{{end}} + + + {{.Nalog.BrojNaloga}} + +
+ +
Uređaj
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
- {{if .Greska}} -
{{.Greska}}
- {{end}} + +
+
Klijent
+
- + +
+ + +
- - + + -
- - -
-
Uređaj
-
-
-
- - -
-
- - -
-
+ + + + +
+ + +
+
- -
-
Klijent i tehničar
+ +
+
+ Ako klijent ne postoji, popunite polja — biće sačuvan zajedno sa nalogom. +
+ + + + + + + +
- - + +
- - + +
+
+ + +
- +
-
Status i datumi
-
-
- - -
-
-
- - -
-
- - -
-
-
- - -
- -
- - - Bez garancije -
-
+ +
- - -
-
Cene (din)
-
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
- - -
- - -
- Odustani - -
-
- -
+
+ + +
+
Status i datumi
+
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+ +
+ + + Bez garancije +
+
+
+ + +
+
Cene (din)
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+ Odustani + +
+
+ +
+ + + {{end}}