From 5e155e7069094abeb7d21f44df92ee5ed32ae121 Mon Sep 17 00:00:00 2001 From: "renaldi.brada1904" Date: Thu, 30 Apr 2026 08:06:04 +0700 Subject: [PATCH] filter is_all dashboard perbandingan status dan kategori --- internal/domain/dashboard/repository.go | 50 ++++++++++++++++--------- internal/domain/dashboard/request.go | 5 ++- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/internal/domain/dashboard/repository.go b/internal/domain/dashboard/repository.go index 43d2a9a..74b4209 100644 --- a/internal/domain/dashboard/repository.go +++ b/internal/domain/dashboard/repository.go @@ -157,7 +157,6 @@ func (r dashboardRepo) GetAntrianPerSpesialis(c context.Context) (ListModelAntri func (r dashboardRepo) GetPerbandinganStatusAntrean(c context.Context, req PeriodeDashboardRequest) (ListPerbandinganStatusAntrean, error) { var result ListPerbandinganStatusAntrean - startDate, endDate := GenerateStartEndDate(req) query := queryUtils.DynamicQuery{ From: TBL_NAME, @@ -166,19 +165,27 @@ func (r dashboardRepo) GetPerbandinganStatusAntrean(c context.Context, req Perio {Expression: "dpo.Status_operasi", Alias: "status_operasi"}, {Expression: "COUNT(dpo.id)", Alias: "jumlah"}, }, - Filters: []queryUtils.FilterGroup{ - { - Filters: []queryUtils.DynamicFilter{ - {Column: "dpo.Tanggal_daftar", Operator: queryUtils.OpBetween, Value: []string{startDate, endDate}}, - }, - }, - }, GroupBy: []string{"dpo.Status_operasi"}, Sort: []queryUtils.SortField{ {Column: "dpo.Status_operasi", Order: "ASC"}, }, } + // filter date if is_all filter == false + if !req.IsAll { + startDate, endDate := GenerateStartEndDate(req) + dateFilter := queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dpo.Tanggal_daftar", + Operator: queryUtils.OpBetween, + Value: []string{startDate, endDate}, + }, + }, + } + query.Filters = append(query.Filters, dateFilter) + } + dbconn, err := r.db.GetSQLXDB(DB_NAME) if err != nil { return result, err @@ -196,7 +203,19 @@ func (r dashboardRepo) GetPerbandinganStatusAntrean(c context.Context, req Perio func (r dashboardRepo) GetPerbandinganKategoriAntrean(c context.Context, req PeriodeDashboardRequest) ([]PerbandinganKategoriAntrean, error) { var result []PerbandinganKategoriAntrean - startDate, endDate := GenerateStartEndDate(req) + joinConditions := queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + {Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id"}, + }, LogicOp: "AND", + } + + if !req.IsAll { + startDate, endDate := GenerateStartEndDate(req) + filterDate := queryUtils.DynamicFilter{ + Column: "dpo.Tanggal_daftar", Operator: queryUtils.OpBetween, Value: []string{startDate, endDate}, + } + joinConditions.Filters = append(joinConditions.Filters, filterDate) + } query := queryUtils.DynamicQuery{ From: "daftar_kategori_operasi", @@ -208,15 +227,10 @@ func (r dashboardRepo) GetPerbandinganKategoriAntrean(c context.Context, req Per }, Joins: []queryUtils.Join{ { - Type: "LEFT", - Table: TBL_NAME, - Alias: "dpo", - OnConditions: queryUtils.FilterGroup{ - Filters: []queryUtils.DynamicFilter{ - {Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id"}, - {Column: "dpo.Tanggal_daftar", Operator: queryUtils.OpBetween, Value: []string{startDate, endDate}}, - }, LogicOp: "AND", - }, + Type: "LEFT", + Table: TBL_NAME, + Alias: "dpo", + OnConditions: joinConditions, }, }, GroupBy: []string{"dko.id", "dko.Kategori"}, diff --git a/internal/domain/dashboard/request.go b/internal/domain/dashboard/request.go index 0686683..8b8d43d 100644 --- a/internal/domain/dashboard/request.go +++ b/internal/domain/dashboard/request.go @@ -3,8 +3,9 @@ package dashboard import "strconv" type PeriodeDashboardRequest struct { - Year int `form:"year" binding:"required,min=1"` - Month int `form:"month" binding:"required,min=1,max=12"` + Year int `form:"year" binding:"required,min=1"` + Month int `form:"month" binding:"required,min=1,max=12"` + IsAll bool `form:"is_all"` } func GenerateStartEndDate(req PeriodeDashboardRequest) (startDate string, endDate string) {