From d6d4ff2c968bc4ed5ea63271fb771eeb5d64277a Mon Sep 17 00:00:00 2001 From: "renaldi.brada1904" Date: Wed, 29 Apr 2026 15:30:17 +0700 Subject: [PATCH] add filter kategori & dokter --- internal/domain/antrian_operasi/model.go | 5 +++ internal/domain/antrian_operasi/repository.go | 42 +++++++++++++++++++ internal/domain/antrian_operasi/request.go | 20 +++++---- 3 files changed, 58 insertions(+), 9 deletions(-) diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index bbe5947..c3c2691 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -81,3 +81,8 @@ type DetailPasienOperasi struct { RencanaOperasi *string `db:"rencana_operasi"` KeteranganStatusPasien *string `db:"keterangan_status_pasien"` } + +type DokterOperasi struct { + IDDokter string `db:"data_pegawai_id"` + IDAntrianOperasi string `db:"data_pasien_operasi_id"` +} diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index 6b15d6f..c0347ec 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -1145,6 +1145,48 @@ func (r antrianOperasiRepo) getNumberedListAntrianV2(c context.Context, dbconn * selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID}) } + if q.KategoriId != 0 { + selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: q.KategoriId}) + } + + // filter by dokter id + if q.DokterId != "" { + var resultDokterOperasi []DokterOperasi + queryDokter := queryUtils.DynamicQuery{ + From: TBL_DOKTER_OPERASI, + Aliases: "dpodp", + Fields: []queryUtils.SelectField{ + {Expression: "dpodp.id"}, + {Expression: "dpodp.data_pegawai_id"}, + {Expression: "dpodp.data_pasien_operasi_id"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "data_pegawai_id", Operator: queryUtils.OpEqual, Value: q.DokterId}, + }, LogicOp: "AND", + }, + }, + } + + err := r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &resultDokterOperasi) + if err != nil { + log.Printf("Unable to execute dokter query : %s", err) + return result, err + } + + // + // filtering antrian ids + var operasiIDFilteredByDokter []string + for _, item := range resultDokterOperasi { + operasiIDFilteredByDokter = append(operasiIDFilteredByDokter, item.IDAntrianOperasi) + } + + if len(operasiIDFilteredByDokter) > 0 { + selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.id", Operator: queryUtils.OpIn, Value: operasiIDFilteredByDokter}) + } + } + if q.Status != "" { selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status}) } diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go index fbd99ab..732320c 100644 --- a/internal/domain/antrian_operasi/request.go +++ b/internal/domain/antrian_operasi/request.go @@ -62,13 +62,15 @@ type CreatePasienOperasiRequest struct { } type AntrianQuery struct { - Id string `form:"id"` - Search string `form:"search"` - Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"` - TypeID int `form:"type_id,default=0"` - Status string `form:"status" binding:"omitempty,oneof=1 2 3 4"` - Limit int `form:"limit,default=10"` - Offset int `form:"offset,default=0"` - SortBy string `form:"sort_by" binding:"omitempty,oneof=tanggal_daftar no_urut_kategori no_urut_spesialis"` - SortOrder string `form:"sort_order" binding:"omitempty,oneof=ASC DESC"` + Id string `form:"id"` + Search string `form:"search"` + Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"` + TypeID int `form:"type_id,default=0"` + Status string `form:"status" binding:"omitempty,oneof=1 2 3 4"` + Limit int `form:"limit,default=10"` + Offset int `form:"offset,default=0"` + SortBy string `form:"sort_by" binding:"omitempty,oneof=tanggal_daftar no_urut_kategori no_urut_spesialis"` + SortOrder string `form:"sort_order" binding:"omitempty,oneof=ASC DESC"` + KategoriId int `form:"kategori_id"` + DokterId string `form:"dokter_id"` }