add gelar depan belakang
This commit is contained in:
@@ -50,11 +50,13 @@ type TeleponPasienModel struct {
|
||||
}
|
||||
|
||||
type DokterOperasiModel struct {
|
||||
ID string `db:"id"`
|
||||
Nip sql.NullString `db:"nip"`
|
||||
NamaDepan sql.NullString `db:"nama_depan"`
|
||||
NamaBelakang sql.NullString `db:"nama_belakang"`
|
||||
SatuanKerja string `db:"satker"`
|
||||
ID string `db:"id"`
|
||||
Nip sql.NullString `db:"nip"`
|
||||
NamaDepan sql.NullString `db:"nama_depan"`
|
||||
NamaBelakang sql.NullString `db:"nama_belakang"`
|
||||
SatuanKerja string `db:"satker"`
|
||||
GelarDepan []string
|
||||
GelarBelakang []string
|
||||
}
|
||||
|
||||
type DetailPasienOperasi struct {
|
||||
|
||||
@@ -2,6 +2,7 @@ package antrianoperasi
|
||||
|
||||
import (
|
||||
"antrian-operasi/internal/database"
|
||||
"antrian-operasi/internal/domain/reference/dokter"
|
||||
"antrian-operasi/internal/shared"
|
||||
queryUtils "antrian-operasi/internal/utils/query"
|
||||
"database/sql"
|
||||
@@ -580,6 +581,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
|
||||
}
|
||||
|
||||
// query dokter
|
||||
var resultDokterModel []dokter.DokterModel
|
||||
queryDokter := queryUtils.DynamicQuery{
|
||||
From: TBL_DOKTER_OPERASI,
|
||||
Aliases: "dpodp",
|
||||
@@ -588,7 +590,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
|
||||
{Expression: "dp.NIP", Alias: "nip"},
|
||||
{Expression: "dp.Nama_depan", Alias: "nama_depan"},
|
||||
{Expression: "dp.Nama_belakang", Alias: "nama_belakang"},
|
||||
{Expression: "dk.Nama_ksm", Alias: "satker"},
|
||||
{Expression: "dk.Nama_ksm", Alias: "nama_ksm"},
|
||||
},
|
||||
Filters: []queryUtils.FilterGroup{
|
||||
{
|
||||
@@ -625,12 +627,27 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c context.Context, id string)
|
||||
},
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &result.ResultDokterOperasi)
|
||||
err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &resultDokterModel)
|
||||
if err != nil {
|
||||
log.Printf("Unable to execute dokter query : %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
//fetch gelar
|
||||
resultDokterModel = dokter.FetchGelar(c, r.queryBuilder, dbconn, resultDokterModel)
|
||||
|
||||
//map to result.ResultDokterOperasi
|
||||
for _, dokter := range resultDokterModel {
|
||||
result.ResultDokterOperasi = append(result.ResultDokterOperasi, DokterOperasiModel{
|
||||
ID: dokter.ID,
|
||||
Nip: shared.NullString(dokter.Nip),
|
||||
NamaBelakang: shared.NullString(dokter.NamaBelakang.String),
|
||||
NamaDepan: shared.NullString(dokter.NamaDepan.String),
|
||||
GelarDepan: dokter.GelarDepan,
|
||||
GelarBelakang: dokter.GelarBelakang,
|
||||
})
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,13 @@ func (model DetailPasienOperasiResultQuery) MapToResponse() DetailPasienOperasiR
|
||||
}
|
||||
|
||||
for _, dk := range model.ResultDokterOperasi {
|
||||
joinedName := strings.ToUpper(dk.NamaDepan.String) + " " + strings.ToUpper(dk.NamaBelakang.String)
|
||||
namaDepan := strings.ToUpper(dk.NamaDepan.String)
|
||||
namaBelakang := strings.ToUpper(dk.NamaBelakang.String)
|
||||
gelarDepan := strings.Join(dk.GelarDepan, " ")
|
||||
gelarBelakang := strings.Join(dk.GelarBelakang, ", ")
|
||||
|
||||
joinedName := gelarDepan + " " + namaDepan + " " + namaBelakang + " " + gelarBelakang
|
||||
|
||||
result.DokterPelaksanaItems = append(result.DokterPelaksanaItems, DokterPelaksanaItemRequest{
|
||||
Id: dk.ID,
|
||||
Nip: &dk.Nip.String,
|
||||
|
||||
@@ -38,9 +38,9 @@ func TestParsingDokter(t *testing.T) {
|
||||
|
||||
func TestParsingListDokter(t *testing.T) {
|
||||
listModel := ListDokterModel{
|
||||
DokterModel{"test-id-1", "test-nip-1", shared.NullString("A"), shared.NullString("B"), sql.NullString{}, "test-ksm-1"},
|
||||
DokterModel{"test-id-2", "test-nip-2", shared.NullString("C"), shared.NullString("D"), sql.NullString{}, "test-ksm-2"},
|
||||
DokterModel{"test-id-3", "test-nip-3", shared.NullString("E"), shared.NullString("F"), sql.NullString{}, "test-ksm-3"},
|
||||
DokterModel{"test-id-1", "test-nip-1", shared.NullString("A"), shared.NullString("B"), sql.NullString{}, "test-ksm-1", []string{}, []string{}},
|
||||
DokterModel{"test-id-2", "test-nip-2", shared.NullString("C"), shared.NullString("D"), sql.NullString{}, "test-ksm-2", []string{}, []string{}},
|
||||
DokterModel{"test-id-3", "test-nip-3", shared.NullString("E"), shared.NullString("F"), sql.NullString{}, "test-ksm-3", []string{}, []string{}},
|
||||
}
|
||||
|
||||
t.Run("test length model list and list response", func(t *testing.T) {
|
||||
|
||||
@@ -6,12 +6,19 @@ import (
|
||||
)
|
||||
|
||||
type DokterModel struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
Nip string `json:"nip" db:"nip"`
|
||||
NamaDepan sql.NullString `json:"nama_depan" db:"nama_depan"`
|
||||
NamaBelakang sql.NullString `json:"nama_belakang" db:"nama_belakang"`
|
||||
HfisCode sql.NullString `json:"hfis_code" db:"hfis_code"`
|
||||
NamaKsm string `json:"nama_ksm" db:"nama_ksm"`
|
||||
ID string `json:"id" db:"id"`
|
||||
Nip string `json:"nip" db:"nip"`
|
||||
NamaDepan sql.NullString `json:"nama_depan" db:"nama_depan"`
|
||||
NamaBelakang sql.NullString `json:"nama_belakang" db:"nama_belakang"`
|
||||
HfisCode sql.NullString `json:"hfis_code" db:"hfis_code"`
|
||||
NamaKsm string `json:"nama_ksm" db:"nama_ksm"`
|
||||
GelarDepan []string
|
||||
GelarBelakang []string
|
||||
}
|
||||
|
||||
type GelarModel struct {
|
||||
Gelar string `db:"gelar"`
|
||||
IDDokter string `db:"id_dokter"`
|
||||
}
|
||||
|
||||
type DokterResponse struct {
|
||||
|
||||
@@ -9,10 +9,16 @@ import (
|
||||
queryUtils "antrian-operasi/internal/utils/query"
|
||||
|
||||
"context"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
const DB_NAME = "db_antrian"
|
||||
const TBL_NAME = "data_pegawai"
|
||||
const TBL_GELAR_DEPAN = "daftar_gelar_depan"
|
||||
const TBL_GELAR_BELAKANG = "daftar_gelar_belakang"
|
||||
const TBL_RELASI_GELAR_DEPAN = "data_pegawai_daftar_gelar_depan"
|
||||
const TBL_RELASI_GELAR_BLKG = "data_pegawai_daftar_gelar_belakang"
|
||||
|
||||
type IDokterRepository interface {
|
||||
SearchableListDokter(c context.Context, search string, limit int, offset int) (ListDokterModelPaginate, error)
|
||||
@@ -74,6 +80,108 @@ func baseSelectQuery() queryUtils.DynamicQuery {
|
||||
return query
|
||||
}
|
||||
|
||||
func FetchGelar(c context.Context, qb *queryUtils.QueryBuilder, dbconn *sqlx.DB, listDokter []DokterModel) []DokterModel {
|
||||
var listGelarDepan []GelarModel
|
||||
var listGelarBelakang []GelarModel
|
||||
|
||||
dokterIds := make([]string, 0, len(listDokter))
|
||||
for _, dokter := range listDokter {
|
||||
dokterIds = append(dokterIds, dokter.ID)
|
||||
}
|
||||
|
||||
queryGelarDepan := queryUtils.DynamicQuery{
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "rgd.data_pegawai_id", Alias: "id_dokter"},
|
||||
{Expression: "gd.Gelar_depan", Alias: "gelar"},
|
||||
},
|
||||
From: TBL_RELASI_GELAR_DEPAN,
|
||||
Aliases: "rgd",
|
||||
Joins: []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: TBL_GELAR_DEPAN,
|
||||
Alias: "gd",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "gd.id", Operator: queryUtils.OpEqual, Value: "rgd.daftar_gelar_depan_id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Filters: []queryUtils.FilterGroup{
|
||||
{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "rgd.data_pegawai_id", Operator: queryUtils.OpIn, Value: dokterIds,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
queryGelarBelakang := queryUtils.DynamicQuery{
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "rgb.data_pegawai_id", Alias: "id_dokter"},
|
||||
{Expression: "gb.Gelar_belakang", Alias: "gelar"},
|
||||
},
|
||||
From: TBL_RELASI_GELAR_BLKG,
|
||||
Aliases: "rgb",
|
||||
Joins: []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: TBL_GELAR_BELAKANG,
|
||||
Alias: "gb",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "gb.id", Operator: queryUtils.OpEqual, Value: "rgb.daftar_gelar_belakang_id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Filters: []queryUtils.FilterGroup{
|
||||
{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "rgb.data_pegawai_id", Operator: queryUtils.OpIn, Value: dokterIds,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
err := qb.ExecuteQuery(c, dbconn, queryGelarDepan, &listGelarDepan)
|
||||
if err != nil {
|
||||
return listDokter
|
||||
}
|
||||
|
||||
err = qb.ExecuteQuery(c, dbconn, queryGelarBelakang, &listGelarBelakang)
|
||||
if err != nil {
|
||||
return listDokter
|
||||
}
|
||||
|
||||
mapGelarDepan := make(map[string][]string)
|
||||
mapGelarBelakang := make(map[string][]string)
|
||||
for _, g := range listGelarDepan {
|
||||
mapGelarDepan[g.IDDokter] = append(mapGelarDepan[g.IDDokter], g.Gelar)
|
||||
}
|
||||
|
||||
for _, g := range listGelarBelakang {
|
||||
mapGelarBelakang[g.IDDokter] = append(mapGelarBelakang[g.IDDokter], g.Gelar)
|
||||
}
|
||||
|
||||
for idx := range listDokter {
|
||||
listDokter[idx].GelarDepan = mapGelarDepan[listDokter[idx].ID]
|
||||
listDokter[idx].GelarBelakang = mapGelarBelakang[listDokter[idx].ID]
|
||||
}
|
||||
|
||||
return listDokter
|
||||
|
||||
}
|
||||
|
||||
func (r dokterRepo) SearchableListDokter(c context.Context, search string, limit int, offset int) (ListDokterModelPaginate, error) {
|
||||
var result ListDokterModelPaginate
|
||||
|
||||
@@ -128,6 +236,8 @@ func (r dokterRepo) SearchableListDokter(c context.Context, search string, limit
|
||||
return result, err
|
||||
}
|
||||
|
||||
result.Data = FetchGelar(c, r.queryBuilder, dbconn, result.Data)
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -8,10 +8,15 @@ func DokterRowToResponse(row DokterModel) DokterResponse {
|
||||
hfis = &row.HfisCode.String
|
||||
}
|
||||
|
||||
namaDepan := strings.ToUpper(row.NamaDepan.String)
|
||||
namaBelakang := strings.ToUpper(row.NamaBelakang.String)
|
||||
gelarDepan := strings.Join(row.GelarDepan, " ")
|
||||
gelarBelakang := strings.Join(row.GelarBelakang, ", ")
|
||||
|
||||
return DokterResponse{
|
||||
ID: row.ID,
|
||||
Nip: row.Nip,
|
||||
NamaLengkap: strings.ToUpper(row.NamaDepan.String) + " " + strings.ToUpper(row.NamaBelakang.String),
|
||||
NamaLengkap: gelarDepan + " " + namaDepan + " " + namaBelakang + " " + gelarBelakang,
|
||||
HfisCode: hfis,
|
||||
NamaKsm: row.NamaKsm,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user