Update dashboard filters and packet views

This commit is contained in:
sas.fajri
2026-05-07 12:04:09 +07:00
parent da419950ce
commit 11f0d0436e
17 changed files with 1008 additions and 342 deletions

View File

@@ -10,6 +10,9 @@ type ProgressRow struct {
NIP string
Name string
Posisi string
PacketCode string
PacketName string
Tests string
ResumeStatus string
Validated string
Published string
@@ -33,6 +36,17 @@ func GetProgressRows(mcuID int) ([]ProgressRow, 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(rs.Mcu_PatientResumeStatusStatus, '') AS resume_status,
COALESCE(rs.Mcu_PatientResumeStatusValidated, 'N') AS validated,
COALESCE(rs.Mcu_PatientResumeStatusPublished, 'N') AS published
@@ -54,7 +68,7 @@ func GetProgressRows(mcuID int) ([]ProgressRow, error) {
var result []ProgressRow
for rows.Next() {
var r ProgressRow
if err := rows.Scan(&r.PreregisterID, &r.NIP, &r.Name, &r.Posisi, &r.ResumeStatus, &r.Validated, &r.Published); err != nil {
if err := rows.Scan(&r.PreregisterID, &r.NIP, &r.Name, &r.Posisi, &r.PacketCode, &r.PacketName, &r.Tests, &r.ResumeStatus, &r.Validated, &r.Published); err != nil {
continue
}
result = append(result, r)
@@ -75,14 +89,18 @@ func BuildProgressSummary(rows []ProgressRow) ProgressSummary {
return s
}
func FilterProgressRows(rows []ProgressRow, search, status string) []ProgressRow {
func FilterProgressRows(rows []ProgressRow, search, status, packetCode string) []ProgressRow {
search = strings.ToLower(strings.TrimSpace(search))
status = strings.TrimSpace(status)
if search == "" && status == "" {
packetCode = strings.TrimSpace(packetCode)
if search == "" && status == "" && packetCode == "" {
return rows
}
out := make([]ProgressRow, 0, len(rows))
for _, r := range rows {
if packetCode != "" && r.PacketCode != packetCode {
continue
}
switch status {
case "validated":
if r.Validated != "Y" {
@@ -102,7 +120,7 @@ func FilterProgressRows(rows []ProgressRow, search, status string) []ProgressRow
}
}
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
}
@@ -112,6 +130,40 @@ func FilterProgressRows(rows []ProgressRow, search, status string) []ProgressRow
return out
}
type PacketOption struct {
Code string
Name string
}
func UniquePackets(rows []ProgressRow) []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})
}
// Keep deterministic order without new imports.
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 Pct(num, total int) int {
if total == 0 {
return 0