Klijenti: filter po tipu (Svi/Firme/Fizička lica) preko radio dugmadi
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user