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

@@ -24,13 +24,16 @@ type pageData struct {
AvailableDates []string
Search string
Department string
Paket string
Rows []ArrivalRow
FilteredRows []ArrivalRow
Summary ArrivalSummary
Departments []DepartmentStat
DepartmentOptions []string
PaketOptions []PaketOption
OverviewJSON template.JS
DepartmentJSON template.JS
PaketChartJSON template.JS
Page int
PageSize int
HasMore bool
@@ -76,15 +79,27 @@ func buildArrivalData(r *http.Request) (pageData, int, error) {
return pageData{}, http.StatusInternalServerError, err
}
summary, deptStats := BuildArrivalStats(rows)
filteredRows := FilterArrivalRows(rows, r.URL.Query().Get("search"), r.URL.Query().Get("dept"))
filteredRows := FilterArrivalRows(rows, r.URL.Query().Get("search"), r.URL.Query().Get("dept"), r.URL.Query().Get("paket"))
deptOptions := UniqueDepartments(rows)
paketOptions := UniquePakets(rows)
stationMap, err := GetStationProgress(mcuID, selectedDate)
if err != nil {
return pageData{}, http.StatusInternalServerError, err
}
for i := range filteredRows {
filteredRows[i].Stations = stationMap[filteredRows[i].PreregisterID]
stations := stationMap[filteredRows[i].PreregisterID]
filteredRows[i].Stations = stations
for _, s := range stations {
switch s.Tone {
case "success":
filteredRows[i].DoneCount++
case "warning":
filteredRows[i].ProgressCount++
default:
filteredRows[i].PendingCount++
}
}
}
outerDepts := []map[string]any{}
@@ -111,6 +126,26 @@ func buildArrivalData(r *http.Request) (pageData, int, error) {
"counts": stationCounts,
}
paketStats, err := GetPaketStats(mcuID, selectedDate)
if err != nil {
return pageData{}, http.StatusInternalServerError, err
}
paketLabels := make([]string, len(paketStats))
paketTotal := make([]int, len(paketStats))
paketDone := make([]int, len(paketStats))
paketRemaining := make([]int, len(paketStats))
for i, p := range paketStats {
paketLabels[i] = p.Name
paketTotal[i] = p.Total
paketDone[i] = p.Completed
paketRemaining[i] = p.Total - p.Completed
}
paketChart := map[string]any{
"labels": paketLabels,
"done": paketDone,
"remaining": paketRemaining,
}
page := parsePage(r.URL.Query().Get("page"))
pagedRows, hasMore := PaginateArrivalRows(filteredRows, page, defaultPageSize)
visibleCount := page * defaultPageSize
@@ -125,13 +160,16 @@ func buildArrivalData(r *http.Request) (pageData, int, error) {
AvailableDates: dates,
Search: r.URL.Query().Get("search"),
Department: r.URL.Query().Get("dept"),
Paket: r.URL.Query().Get("paket"),
Rows: rows,
FilteredRows: pagedRows,
Summary: summary,
Departments: deptStats,
DepartmentOptions: deptOptions,
PaketOptions: paketOptions,
OverviewJSON: toJS(overview),
DepartmentJSON: toJS(stationChart),
PaketChartJSON: toJS(paketChart),
Page: page,
PageSize: defaultPageSize,
HasMore: hasMore,