Update dashboard filters and packet views
This commit is contained in:
@@ -23,6 +23,8 @@ type pageData struct {
|
||||
CurrentProject projects.ProjectItem
|
||||
Search string
|
||||
Filter string
|
||||
Packet string
|
||||
PacketOptions []PacketOption
|
||||
Rows []ResultRow
|
||||
FilteredRows []ResultRow
|
||||
Summary ResultSummary
|
||||
@@ -65,7 +67,9 @@ func buildResultData(r *http.Request) (pageData, int, error) {
|
||||
summary := BuildResultSummary(rows)
|
||||
search := r.URL.Query().Get("search")
|
||||
filter := r.URL.Query().Get("filter")
|
||||
filteredRows := FilterResultRows(rows, search, filter)
|
||||
packet := r.URL.Query().Get("packet")
|
||||
packetOptions := UniquePackets(rows)
|
||||
filteredRows := FilterResultRows(rows, search, filter, packet)
|
||||
page := parsePage(r.URL.Query().Get("page"))
|
||||
pagedRows, hasMore := PaginateResultRows(filteredRows, page, defaultPageSize)
|
||||
visibleCount := page * defaultPageSize
|
||||
@@ -78,6 +82,8 @@ func buildResultData(r *http.Request) (pageData, int, error) {
|
||||
CurrentProject: project,
|
||||
Search: search,
|
||||
Filter: filter,
|
||||
Packet: packet,
|
||||
PacketOptions: packetOptions,
|
||||
Rows: rows,
|
||||
FilteredRows: pagedRows,
|
||||
Summary: summary,
|
||||
|
||||
@@ -9,6 +9,9 @@ type ResultRow struct {
|
||||
NIP string
|
||||
Name string
|
||||
Posisi string
|
||||
PacketCode string
|
||||
PacketName string
|
||||
Tests string
|
||||
FileUrl string
|
||||
ReportDate string
|
||||
}
|
||||
@@ -29,6 +32,17 @@ func GetResultRows(mcuID int) ([]ResultRow, error) {
|
||||
NULLIF(TRIM(mp.Mcu_PatientPosisi), ''),
|
||||
'-'
|
||||
) AS posisi,
|
||||
COALESCE((
|
||||
SELECT GROUP_CONCAT(DISTINCT COALESCE(NULLIF(TRIM(pp.Mcu_PatientPacketCode), ''), pp.Mcu_PatientPacketName) ORDER BY COALESCE(NULLIF(TRIM(pp.Mcu_PatientPacketCode), ''), pp.Mcu_PatientPacketName) SEPARATOR ',')
|
||||
FROM mcu_patient_packet pp
|
||||
WHERE pp.Mcu_PatientPacketPreregisterID = mp.Mcu_PatientPreregisterID
|
||||
), '') AS packet_code,
|
||||
COALESCE((
|
||||
SELECT GROUP_CONCAT(DISTINCT pp.Mcu_PatientPacketName ORDER BY pp.Mcu_PatientPacketName SEPARATOR ', ')
|
||||
FROM mcu_patient_packet pp
|
||||
WHERE pp.Mcu_PatientPacketPreregisterID = mp.Mcu_PatientPreregisterID
|
||||
), '') AS packet_name,
|
||||
COALESCE(NULLIF(TRIM(mp.Mcu_PatientPemeriksaan), ''), '') AS tests,
|
||||
COALESCE(p.Published_McuDasboardFileUrl, '') AS file_url,
|
||||
CASE
|
||||
WHEN p.Published_McuDasboardFileUrl IS NOT NULL
|
||||
@@ -53,7 +67,7 @@ func GetResultRows(mcuID int) ([]ResultRow, error) {
|
||||
var result []ResultRow
|
||||
for rows.Next() {
|
||||
var r ResultRow
|
||||
if err := rows.Scan(&r.NIP, &r.Name, &r.Posisi, &r.FileUrl, &r.ReportDate); err != nil {
|
||||
if err := rows.Scan(&r.NIP, &r.Name, &r.Posisi, &r.PacketCode, &r.PacketName, &r.Tests, &r.FileUrl, &r.ReportDate); err != nil {
|
||||
continue
|
||||
}
|
||||
result = append(result, r)
|
||||
@@ -71,14 +85,18 @@ func BuildResultSummary(rows []ResultRow) ResultSummary {
|
||||
return s
|
||||
}
|
||||
|
||||
func FilterResultRows(rows []ResultRow, search, filter string) []ResultRow {
|
||||
func FilterResultRows(rows []ResultRow, search, filter, packetCode string) []ResultRow {
|
||||
search = strings.ToLower(strings.TrimSpace(search))
|
||||
filter = strings.TrimSpace(filter)
|
||||
if search == "" && filter == "" {
|
||||
packetCode = strings.TrimSpace(packetCode)
|
||||
if search == "" && filter == "" && packetCode == "" {
|
||||
return rows
|
||||
}
|
||||
out := make([]ResultRow, 0, len(rows))
|
||||
for _, r := range rows {
|
||||
if packetCode != "" && r.PacketCode != packetCode {
|
||||
continue
|
||||
}
|
||||
switch filter {
|
||||
case "has_pdf":
|
||||
if r.FileUrl == "" {
|
||||
@@ -90,7 +108,7 @@ func FilterResultRows(rows []ResultRow, search, filter string) []ResultRow {
|
||||
}
|
||||
}
|
||||
if search != "" {
|
||||
hay := strings.ToLower(r.Name + " " + r.NIP + " " + r.Posisi)
|
||||
hay := strings.ToLower(r.Name + " " + r.NIP + " " + r.Posisi + " " + r.PacketCode + " " + r.PacketName + " " + r.Tests)
|
||||
if !strings.Contains(hay, search) {
|
||||
continue
|
||||
}
|
||||
@@ -100,6 +118,39 @@ func FilterResultRows(rows []ResultRow, search, filter string) []ResultRow {
|
||||
return out
|
||||
}
|
||||
|
||||
type PacketOption struct {
|
||||
Code string
|
||||
Name string
|
||||
}
|
||||
|
||||
func UniquePackets(rows []ResultRow) []PacketOption {
|
||||
seen := map[string]struct{}{}
|
||||
out := []PacketOption{}
|
||||
for _, r := range rows {
|
||||
code := strings.TrimSpace(r.PacketCode)
|
||||
if code == "" {
|
||||
continue
|
||||
}
|
||||
if _, ok := seen[code]; ok {
|
||||
continue
|
||||
}
|
||||
seen[code] = struct{}{}
|
||||
name := strings.TrimSpace(r.PacketName)
|
||||
if name == "" {
|
||||
name = code
|
||||
}
|
||||
out = append(out, PacketOption{Code: code, Name: name})
|
||||
}
|
||||
for i := 0; i < len(out); i++ {
|
||||
for j := i + 1; j < len(out); j++ {
|
||||
if out[j].Code < out[i].Code {
|
||||
out[i], out[j] = out[j], out[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func PaginateResultRows(rows []ResultRow, page, pageSize int) ([]ResultRow, bool) {
|
||||
if page < 1 {
|
||||
page = 1
|
||||
|
||||
Reference in New Issue
Block a user