fixing nomor antrian when searching/filtering
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
const DB_NAME = "db_antrian"
|
||||
@@ -47,7 +48,7 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository {
|
||||
"\"Kode_diagnosa\"", "\"Diagnosa\"", "\"Jenis_diagnosa\"", "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", "FK_pasien_operasi_diagnosa_pasien_operasi_ID",
|
||||
"\"Kode_tindakan\"", "\"Tindakan\"", "\"Tindakan_tambahan\"", "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", "FK_pasien_operasi_tindakan_pasien_operasi_ID",
|
||||
"\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", "data_pasien_operasi_id",
|
||||
"no_urut_spesialis", "no_urut_sub_spesialis",
|
||||
"no_urut_spesialis", "no_urut_sub_spesialis", "no_ktp", "no_rekam_medis", "nama_pasien", "status_operasi",
|
||||
}).
|
||||
SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI})
|
||||
queryBuilder.SetSecurityOptions(false, 100)
|
||||
@@ -363,153 +364,16 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c context.Context, req CreatePa
|
||||
func (r antrianOperasiRepo) SearchableListAntrianOperasi(c context.Context, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
||||
var result ListPasienOperasiPaginate
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
From: TBL_NAME,
|
||||
Aliases: "dpo",
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "dpo.id"},
|
||||
{Expression: "dpo.Tanggal_daftar", Alias: "tanggal_daftar"},
|
||||
{Expression: "dpo.No_KTP", Alias: "no_ktp"},
|
||||
{Expression: "dpo.No_rekam_medis", Alias: "no_rekam_medis"},
|
||||
{Expression: "dpo.Nama_pasien", Alias: "nama_pasien"},
|
||||
{Expression: "dpo.Status_operasi", Alias: "status_operasi"},
|
||||
{Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"},
|
||||
{Expression: "ds.Spesialis", Alias: "spesialis"},
|
||||
{Expression: "dss.Subspesialis", Alias: "subspesialis"},
|
||||
{Expression: "dko.Kategori", Alias: "kategori"},
|
||||
},
|
||||
Sort: []queryUtils.SortField{
|
||||
{Column: "dpo.Tanggal_daftar", Order: "ASC"},
|
||||
},
|
||||
}
|
||||
|
||||
wfKategori := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Kategori_operasi\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
||||
Alias: "no_urut_kategori",
|
||||
}
|
||||
|
||||
wfSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_spesialis",
|
||||
}
|
||||
wfSubSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Sub_spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_sub_spesialis",
|
||||
}
|
||||
|
||||
var selectFilter []queryUtils.DynamicFilter
|
||||
typeIdColumn := ""
|
||||
|
||||
switch q.Type {
|
||||
case "kategori":
|
||||
typeIdColumn = "dko.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_kategori", Order: "ASC"})
|
||||
case "spesialis":
|
||||
typeIdColumn = "ds.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_spesialis", Order: "ASC"})
|
||||
case "sub-spesialis":
|
||||
typeIdColumn = "dss.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_sub_spesialis", Order: "ASC"})
|
||||
default:
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
}
|
||||
|
||||
if q.TypeID != 0 && q.Type != "all" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
||||
}
|
||||
|
||||
query.Joins = []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_spesialis",
|
||||
Alias: "ds",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "ds.id", Operator: queryUtils.OpEqual, Value: "dpo.Spesialis",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_subspesialis",
|
||||
Alias: "dss",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Sub_spesialis", Operator: queryUtils.OpEqual, Value: "dss.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_kategori_operasi",
|
||||
Alias: "dko",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// filtering search results
|
||||
if q.Search != "" {
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
}
|
||||
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
||||
}
|
||||
|
||||
if q.Status != "" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
||||
}
|
||||
|
||||
// wiring all select filter
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"})
|
||||
|
||||
dbconn, err := r.db.GetSQLXDB(DB_NAME)
|
||||
if err != nil {
|
||||
log.Printf("Unable to connect db : %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
// query count
|
||||
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query)
|
||||
// result, err = r.oldListAntrian(c, dbconn, q)
|
||||
result, err = r.fixingListAntrian(c, dbconn, q)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query count : %s ", err)
|
||||
return result, err
|
||||
}
|
||||
result.Paging.Limit = q.Limit
|
||||
result.Paging.Offset = q.Offset
|
||||
result.Paging.Total = int(countData)
|
||||
result.Paging.CalculatePagingInfo()
|
||||
|
||||
// query data
|
||||
queryData := query
|
||||
queryData.Limit = q.Limit
|
||||
queryData.Offset = q.Offset
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, queryData, &result.Data)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query data : %s", err)
|
||||
return result, err
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// filtering antrian ids
|
||||
@@ -941,3 +805,354 @@ func (r antrianOperasiRepo) DeleteStatusAntrianOperasi(c context.Context, id str
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// private functions
|
||||
|
||||
// this code will be deleted soon, change to fixingListAntrion() methods.
|
||||
func (r antrianOperasiRepo) oldListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
||||
var result ListPasienOperasiPaginate
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
From: TBL_NAME,
|
||||
Aliases: "dpo",
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "dpo.id"},
|
||||
{Expression: "dpo.Tanggal_daftar", Alias: "tanggal_daftar"},
|
||||
{Expression: "dpo.No_KTP", Alias: "no_ktp"},
|
||||
{Expression: "dpo.No_rekam_medis", Alias: "no_rekam_medis"},
|
||||
{Expression: "dpo.Nama_pasien", Alias: "nama_pasien"},
|
||||
{Expression: "dpo.Status_operasi", Alias: "status_operasi"},
|
||||
{Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"},
|
||||
{Expression: "ds.Spesialis", Alias: "spesialis"},
|
||||
{Expression: "dss.Subspesialis", Alias: "subspesialis"},
|
||||
{Expression: "dko.Kategori", Alias: "kategori"},
|
||||
},
|
||||
Sort: []queryUtils.SortField{
|
||||
{Column: "dpo.Tanggal_daftar", Order: "ASC"},
|
||||
},
|
||||
}
|
||||
|
||||
wfKategori := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Kategori_operasi\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
||||
Alias: "no_urut_kategori",
|
||||
}
|
||||
|
||||
wfSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_spesialis",
|
||||
}
|
||||
wfSubSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Sub_spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_sub_spesialis",
|
||||
}
|
||||
|
||||
var selectFilter []queryUtils.DynamicFilter
|
||||
typeIdColumn := ""
|
||||
|
||||
switch q.Type {
|
||||
case "kategori":
|
||||
typeIdColumn = "dko.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_kategori", Order: "ASC"})
|
||||
case "spesialis":
|
||||
typeIdColumn = "ds.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_spesialis", Order: "ASC"})
|
||||
case "sub-spesialis":
|
||||
typeIdColumn = "dss.id"
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis)
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_sub_spesialis", Order: "ASC"})
|
||||
default:
|
||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
}
|
||||
|
||||
if q.TypeID != 0 && q.Type != "all" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
||||
}
|
||||
|
||||
query.Joins = []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_spesialis",
|
||||
Alias: "ds",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "ds.id", Operator: queryUtils.OpEqual, Value: "dpo.Spesialis",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_subspesialis",
|
||||
Alias: "dss",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Sub_spesialis", Operator: queryUtils.OpEqual, Value: "dss.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_kategori_operasi",
|
||||
Alias: "dko",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// filtering search results
|
||||
if q.Search != "" {
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
}
|
||||
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
||||
}
|
||||
|
||||
if q.Status != "" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
||||
}
|
||||
|
||||
// wiring all select filter
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"})
|
||||
|
||||
// query count
|
||||
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query count : %s ", err)
|
||||
return result, err
|
||||
}
|
||||
result.Paging.Limit = q.Limit
|
||||
result.Paging.Offset = q.Offset
|
||||
result.Paging.Total = int(countData)
|
||||
result.Paging.CalculatePagingInfo()
|
||||
|
||||
// query data
|
||||
queryData := query
|
||||
queryData.Limit = q.Limit
|
||||
queryData.Offset = q.Offset
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, queryData, &result.Data)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query data : %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
||||
var result ListPasienOperasiPaginate
|
||||
|
||||
numberedRowsName := "numbered"
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
CTEs: []queryUtils.CTE{
|
||||
{
|
||||
Name: numberedRowsName,
|
||||
Query: queryUtils.DynamicQuery{
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "dpo.id", Alias: "id"},
|
||||
{Expression: "dpo.Tanggal_daftar", Alias: "tanggal_daftar"},
|
||||
{Expression: "dpo.No_KTP", Alias: "no_ktp"},
|
||||
{Expression: "dpo.No_rekam_medis", Alias: "no_rekam_medis"},
|
||||
{Expression: "dpo.Nama_pasien", Alias: "nama_pasien"},
|
||||
{Expression: "dpo.Status_operasi", Alias: "status_operasi"},
|
||||
{Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"},
|
||||
{Expression: "ds.Spesialis", Alias: "spesialis"},
|
||||
{Expression: "dss.Subspesialis", Alias: "subspesialis"},
|
||||
{Expression: "dko.Kategori", Alias: "kategori"},
|
||||
},
|
||||
From: TBL_NAME,
|
||||
Aliases: "dpo",
|
||||
Joins: []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_spesialis",
|
||||
Alias: "ds",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "ds.id", Operator: queryUtils.OpEqual, Value: "dpo.Spesialis",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_subspesialis",
|
||||
Alias: "dss",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Sub_spesialis", Operator: queryUtils.OpEqual, Value: "dss.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_kategori_operasi",
|
||||
Alias: "dko",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "id"},
|
||||
{Expression: "tanggal_daftar"},
|
||||
{Expression: "no_ktp"},
|
||||
{Expression: "no_rekam_medis"},
|
||||
{Expression: "nama_pasien"},
|
||||
{Expression: "status_operasi"},
|
||||
{Expression: "jenis_kelamin"},
|
||||
{Expression: "spesialis"},
|
||||
{Expression: "subspesialis"},
|
||||
{Expression: "kategori"},
|
||||
},
|
||||
From: numberedRowsName,
|
||||
Sort: []queryUtils.SortField{
|
||||
{Column: "tanggal_daftar", Order: "ASC"},
|
||||
},
|
||||
}
|
||||
|
||||
// windows functions
|
||||
|
||||
wfKategori := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Kategori_operasi\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
||||
Alias: "no_urut_kategori",
|
||||
}
|
||||
|
||||
wfSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_spesialis",
|
||||
}
|
||||
wfSubSpesialis := queryUtils.WindowFunction{
|
||||
Function: "ROW_NUMBER",
|
||||
Over: "\"dpo\".\"Sub_spesialis\"",
|
||||
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||
Alias: "no_urut_sub_spesialis",
|
||||
}
|
||||
|
||||
typeIdColumn := ""
|
||||
|
||||
// selecting windows functions by type
|
||||
|
||||
switch q.Type {
|
||||
case "kategori":
|
||||
typeIdColumn = "dko.id"
|
||||
query.CTEs[0].Query.WindowFunctions = append(query.CTEs[0].Query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
query.Fields = append(query.Fields, queryUtils.SelectField{Expression: "no_urut_kategori"})
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_kategori", Order: "ASC"})
|
||||
case "spesialis":
|
||||
typeIdColumn = "ds.id"
|
||||
query.CTEs[0].Query.WindowFunctions = append(query.CTEs[0].Query.WindowFunctions, wfSpesialis, wfSubSpesialis)
|
||||
query.Fields = append(query.Fields, queryUtils.SelectField{Expression: "no_urut_spesialis"})
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_spesialis", Order: "ASC"})
|
||||
case "sub-spesialis":
|
||||
typeIdColumn = "dss.id"
|
||||
query.CTEs[0].Query.WindowFunctions = append(query.CTEs[0].Query.WindowFunctions, wfSubSpesialis)
|
||||
query.Fields = append(query.Fields, queryUtils.SelectField{Expression: "no_urut_sub_spesialis"})
|
||||
query.Sort = append(query.Sort, queryUtils.SortField{Column: "no_urut_sub_spesialis", Order: "ASC"})
|
||||
default:
|
||||
addedFields := []queryUtils.SelectField{
|
||||
{Expression: "no_urut_kategori"},
|
||||
{Expression: "no_urut_spesialis"},
|
||||
{Expression: "no_urut_sub_spesialis"},
|
||||
}
|
||||
query.Fields = append(query.Fields, addedFields...)
|
||||
query.CTEs[0].Query.WindowFunctions = append(query.CTEs[0].Query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||
}
|
||||
|
||||
// initiate count query
|
||||
queryCount := query.CTEs[0].Query
|
||||
|
||||
var selectFilter []queryUtils.DynamicFilter
|
||||
var selectFilterCount []queryUtils.DynamicFilter
|
||||
|
||||
if q.TypeID != 0 && q.Type != "all" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
||||
selectFilterCount = append(selectFilterCount, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
||||
}
|
||||
|
||||
// filtering search results
|
||||
if q.Search != "" {
|
||||
// search filter main data
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "no_ktp", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "no_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
}
|
||||
|
||||
// search filter count
|
||||
searchFiltersCount := []queryUtils.DynamicFilter{
|
||||
{Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
{Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||
}
|
||||
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
||||
queryCount.Filters = append(queryCount.Filters, queryUtils.FilterGroup{Filters: searchFiltersCount, LogicOp: "OR"})
|
||||
}
|
||||
|
||||
if q.Status != "" {
|
||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
||||
selectFilterCount = append(selectFilterCount, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
||||
}
|
||||
|
||||
// wiring all select filter
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"})
|
||||
queryCount.Filters = append(queryCount.Filters, queryUtils.FilterGroup{Filters: selectFilterCount, LogicOp: "AND"})
|
||||
|
||||
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, queryCount)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query count : %s ", err)
|
||||
return result, err
|
||||
}
|
||||
result.Paging.Limit = q.Limit
|
||||
result.Paging.Offset = q.Offset
|
||||
result.Paging.Total = int(countData)
|
||||
result.Paging.CalculatePagingInfo()
|
||||
|
||||
// query data
|
||||
queryData := query
|
||||
queryData.Limit = q.Limit
|
||||
queryData.Offset = q.Offset
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, queryData, &result.Data)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute query data : %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user