Klijenti: filter po tipu (Svi/Firme/Fizička lica) preko radio dugmadi

This commit is contained in:
2026-06-20 22:49:56 +02:00
parent 4caadd2ef0
commit 830c51e95e
4 changed files with 38 additions and 0 deletions
+1
View File
@@ -115,6 +115,7 @@ type DobavljacRepository interface {
// KlijentFilter definiše parametre za filtriranje liste klijenata // KlijentFilter definiše parametre za filtriranje liste klijenata
type KlijentFilter struct { type KlijentFilter struct {
Pretraga string Pretraga string
Tip string // "fizicko", "pravno" ili "" za sve
Limit int Limit int
Offset int Offset int
} }
+8
View File
@@ -153,6 +153,10 @@ func (r *KlijentRepo) ListaFilter(ctx context.Context, filter db.KlijentFilter)
p := "%" + filter.Pretraga + "%" p := "%" + filter.Pretraga + "%"
args = append(args, p, p, p, p, p, p) args = append(args, p, p, p, p, p, p)
} }
if filter.Tip == "fizicko" || filter.Tip == "pravno" {
upit += " AND tip = ?"
args = append(args, filter.Tip)
}
upit += " ORDER BY datum_unosa DESC" upit += " ORDER BY datum_unosa DESC"
@@ -206,6 +210,10 @@ func (r *KlijentRepo) PrebrojiPoFilteru(ctx context.Context, filter db.KlijentFi
p := "%" + filter.Pretraga + "%" p := "%" + filter.Pretraga + "%"
args = append(args, p, p, p, p, p, p) args = append(args, p, p, p, p, p, p)
} }
if filter.Tip == "fizicko" || filter.Tip == "pravno" {
upit += " AND tip = ?"
args = append(args, filter.Tip)
}
var broj int var broj int
if err := r.db.QueryRowContext(ctx, upit, args...).Scan(&broj); err != nil { if err := r.db.QueryRowContext(ctx, upit, args...).Scan(&broj); err != nil {
+10
View File
@@ -18,6 +18,7 @@ type PodaciKlijenata struct {
model.PodaciStranice model.PodaciStranice
Klijenti []model.Klijent Klijenti []model.Klijent
Pretraga string Pretraga string
TipFilter string
Sacuvano bool Sacuvano bool
Obrisan bool Obrisan bool
StranicaBr int StranicaBr int
@@ -45,6 +46,10 @@ func (h *Handler) Klijenti(w http.ResponseWriter, r *http.Request) {
} }
pretraga := r.URL.Query().Get("pretraga") pretraga := r.URL.Query().Get("pretraga")
tipFilter := r.URL.Query().Get("tip")
if tipFilter != "fizicko" && tipFilter != "pravno" {
tipFilter = ""
}
const pageSize = 100 const pageSize = 100
stranicaBr := 1 stranicaBr := 1
@@ -56,6 +61,7 @@ func (h *Handler) Klijenti(w http.ResponseWriter, r *http.Request) {
filter := db.KlijentFilter{ filter := db.KlijentFilter{
Pretraga: pretraga, Pretraga: pretraga,
Tip: tipFilter,
Limit: pageSize, Limit: pageSize,
Offset: (stranicaBr - 1) * pageSize, Offset: (stranicaBr - 1) * pageSize,
} }
@@ -78,6 +84,9 @@ func (h *Handler) Klijenti(w http.ResponseWriter, r *http.Request) {
if pretraga != "" { if pretraga != "" {
queryDelići += "&pretraga=" + pretraga queryDelići += "&pretraga=" + pretraga
} }
if tipFilter != "" {
queryDelići += "&tip=" + tipFilter
}
stranicaPrev := stranicaBr - 1 stranicaPrev := stranicaBr - 1
if stranicaPrev < 1 { if stranicaPrev < 1 {
@@ -95,6 +104,7 @@ func (h *Handler) Klijenti(w http.ResponseWriter, r *http.Request) {
PodaciStranice: ps, PodaciStranice: ps,
Klijenti: klijenti, Klijenti: klijenti,
Pretraga: pretraga, Pretraga: pretraga,
TipFilter: tipFilter,
Sacuvano: r.URL.Query().Get("sacuvano") == "1", Sacuvano: r.URL.Query().Get("sacuvano") == "1",
Obrisan: r.URL.Query().Get("obrisan") == "1", Obrisan: r.URL.Query().Get("obrisan") == "1",
StranicaBr: stranicaBr, StranicaBr: stranicaBr,
+19
View File
@@ -30,6 +30,25 @@
<div id="klijenti-rezultati"> <div id="klijenti-rezultati">
<!-- filter po tipu klijenta -->
<div style="display:flex;gap:16px;margin-bottom:12px;flex-wrap:wrap;align-items:center;">
<label style="display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:14px;">
<input type="radio" name="tip" value="" {{if eq .TipFilter ""}}checked{{end}}
hx-trigger="change" hx-get="/klijenti?pretraga={{.Pretraga}}"
hx-target="#klijenti-rezultati" hx-select="#klijenti-rezultati" hx-swap="innerHTML" hx-push-url="true"> Svi
</label>
<label style="display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:14px;">
<input type="radio" name="tip" value="pravno" {{if eq .TipFilter "pravno"}}checked{{end}}
hx-trigger="change" hx-get="/klijenti?pretraga={{.Pretraga}}&tip=pravno"
hx-target="#klijenti-rezultati" hx-select="#klijenti-rezultati" hx-swap="innerHTML" hx-push-url="true"> Firme
</label>
<label style="display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:14px;">
<input type="radio" name="tip" value="fizicko" {{if eq .TipFilter "fizicko"}}checked{{end}}
hx-trigger="change" hx-get="/klijenti?pretraga={{.Pretraga}}&tip=fizicko"
hx-target="#klijenti-rezultati" hx-select="#klijenti-rezultati" hx-swap="innerHTML" hx-push-url="true"> Fizička lica
</label>
</div>
<!-- desktop tabela --> <!-- desktop tabela -->
<div class="kartica klijenti-tabela kartica-tabela animiraj"> <div class="kartica klijenti-tabela kartica-tabela animiraj">
<div class="tabela-skrol"> <div class="tabela-skrol">