Update dashboard filters and packet views
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -26,8 +27,15 @@ type ArrivalsPartial struct {
|
||||
}
|
||||
|
||||
type PatientsPartial struct {
|
||||
Patients []PatientDetail
|
||||
IsRange bool
|
||||
Patients []PatientDetail
|
||||
IsRange bool
|
||||
Search string
|
||||
ProgressStatus string
|
||||
KpiFilter string
|
||||
Page int
|
||||
PageSize int
|
||||
HasMore bool
|
||||
NextPage int
|
||||
}
|
||||
|
||||
type PageData struct {
|
||||
@@ -237,12 +245,84 @@ func Patients(w http.ResponseWriter, r *http.Request) {
|
||||
http.Error(w, "query error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
search := strings.TrimSpace(r.URL.Query().Get("search"))
|
||||
progressStatus := strings.TrimSpace(r.URL.Query().Get("progress_status"))
|
||||
kpiFilter := strings.TrimSpace(r.URL.Query().Get("kpi_filter"))
|
||||
|
||||
if kpiFilter != "" {
|
||||
filteredByKPI := make([]PatientDetail, 0, len(patients))
|
||||
for _, p := range patients {
|
||||
switch kpiFilter {
|
||||
case "invited":
|
||||
filteredByKPI = append(filteredByKPI, p)
|
||||
case "total_staff":
|
||||
if p.InTime != "" {
|
||||
filteredByKPI = append(filteredByKPI, p)
|
||||
}
|
||||
case "inprogress":
|
||||
if p.InTime != "" && !p.HasOut {
|
||||
filteredByKPI = append(filteredByKPI, p)
|
||||
}
|
||||
case "checkedout":
|
||||
if p.HasOut {
|
||||
filteredByKPI = append(filteredByKPI, p)
|
||||
}
|
||||
default:
|
||||
filteredByKPI = append(filteredByKPI, p)
|
||||
}
|
||||
}
|
||||
patients = filteredByKPI
|
||||
}
|
||||
|
||||
if search != "" || progressStatus != "" {
|
||||
lowerSearch := strings.ToLower(search)
|
||||
filtered := make([]PatientDetail, 0, len(patients))
|
||||
for _, p := range patients {
|
||||
if progressStatus != "" && p.ProgressStatus != progressStatus {
|
||||
continue
|
||||
}
|
||||
if lowerSearch != "" && !strings.Contains(strings.ToLower(p.Name), lowerSearch) && !strings.Contains(strconv.Itoa(p.ID), lowerSearch) {
|
||||
continue
|
||||
}
|
||||
filtered = append(filtered, p)
|
||||
}
|
||||
patients = filtered
|
||||
}
|
||||
|
||||
page := 1
|
||||
if p, err := strconv.Atoi(strings.TrimSpace(r.URL.Query().Get("page"))); err == nil && p > 0 {
|
||||
page = p
|
||||
}
|
||||
pageSize := 30
|
||||
start := (page - 1) * pageSize
|
||||
if start > len(patients) {
|
||||
start = len(patients)
|
||||
}
|
||||
end := start + pageSize
|
||||
if end > len(patients) {
|
||||
end = len(patients)
|
||||
}
|
||||
pagedPatients := patients[start:end]
|
||||
hasMore := end < len(patients)
|
||||
|
||||
data := PatientsPartial{
|
||||
Patients: patients,
|
||||
IsRange: mode != "daily" || dateFrom != dateTo,
|
||||
Patients: pagedPatients,
|
||||
IsRange: mode != "daily" || dateFrom != dateTo,
|
||||
Search: search,
|
||||
ProgressStatus: progressStatus,
|
||||
KpiFilter: kpiFilter,
|
||||
Page: page,
|
||||
PageSize: pageSize,
|
||||
HasMore: hasMore,
|
||||
NextPage: page + 1,
|
||||
}
|
||||
t := parse("templates/dashboard/partials/patients.html")
|
||||
if err := t.ExecuteTemplate(w, "patients", data); err != nil {
|
||||
templateName := "patients"
|
||||
if r.URL.Query().Get("chunk") == "1" {
|
||||
templateName = "patients-rows"
|
||||
}
|
||||
if err := t.ExecuteTemplate(w, templateName, data); err != nil {
|
||||
log.Printf("[dashboard] patients template error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user