|
|
|
@@ -48,7 +48,7 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository {
|
|
|
|
|
"\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", "FK_pasien_operasi_telepon_pasien_operasi_ID",
|
|
|
|
|
"\"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",
|
|
|
|
|
"\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", "data_pasien_operasi_id", "tanggal_daftar", "no_urut_kategori",
|
|
|
|
|
"no_urut_spesialis", "no_urut_sub_spesialis", "no_ktp", "no_rekam_medis", "nama_pasien", "status_operasi", "id_kategori", "id_spesialis", "id_subspesialis",
|
|
|
|
|
}).
|
|
|
|
|
SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI})
|
|
|
|
@@ -60,236 +60,6 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) insertAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string, req CreatePasienOperasiRequest) error {
|
|
|
|
|
returningCols := []string{
|
|
|
|
|
"id",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// INSERT data_telepon_pasien_operasi
|
|
|
|
|
if len(req.FormData.NoTelepon) != 0 {
|
|
|
|
|
var valuesInsertTelepon [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, telp := range req.FormData.NoTelepon {
|
|
|
|
|
idTelepon := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{idTelepon, telp, idAntrian}
|
|
|
|
|
valuesInsertTelepon = append(valuesInsertTelepon, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insertTeleponQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Nomor_telepon\"",
|
|
|
|
|
"\"FK_pasien_operasi_telepon_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesInsertTelepon,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_PASIEN_TELEPHONE, insertTeleponQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query telepon %s", err)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert telepon")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// INSERT data_diagnosa_pasien_operasi
|
|
|
|
|
var valuesDiagnosa [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, diagnosa := range req.DiagnosisItem {
|
|
|
|
|
idDiagnosa := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idDiagnosa,
|
|
|
|
|
diagnosa.KodeDiagnosa,
|
|
|
|
|
diagnosa.Diagnosa,
|
|
|
|
|
diagnosa.JenisDiagnosa,
|
|
|
|
|
idAntrian,
|
|
|
|
|
}
|
|
|
|
|
valuesDiagnosa = append(valuesDiagnosa, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insertDiagnosaQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Kode_diagnosa\"",
|
|
|
|
|
"\"Diagnosa\"",
|
|
|
|
|
"\"Jenis_diagnosa\"",
|
|
|
|
|
"\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesDiagnosa,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_DIAGNOSA_OPERASI, insertDiagnosaQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query diagnosa %s", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert diagnosa")
|
|
|
|
|
|
|
|
|
|
// INSERT data_tindakan_pasien_operasi
|
|
|
|
|
var valuesTindakan [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, tindakan := range req.TindakanItems {
|
|
|
|
|
idTindakan := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idTindakan,
|
|
|
|
|
tindakan.KodeTindakan,
|
|
|
|
|
tindakan.Tindakan,
|
|
|
|
|
tindakan.TindakanTambahan,
|
|
|
|
|
idAntrian,
|
|
|
|
|
}
|
|
|
|
|
valuesTindakan = append(valuesTindakan, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insertTindakanQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Kode_tindakan\"",
|
|
|
|
|
"\"Tindakan\"",
|
|
|
|
|
"\"Tindakan_tambahan\"",
|
|
|
|
|
"\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesTindakan,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_TINDAKAN_OPERASI, insertTindakanQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query tindakan %s", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert tindakan")
|
|
|
|
|
|
|
|
|
|
// INSERT data_pasien_operasi_data_pegawai
|
|
|
|
|
if len(req.DokterPelaksanaItems) != 0 {
|
|
|
|
|
var valuesDokterPelaksana [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, dokter := range req.DokterPelaksanaItems {
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idAntrian,
|
|
|
|
|
dokter.Id,
|
|
|
|
|
}
|
|
|
|
|
valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insertDokterPelaksanaQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"\"data_pasien_operasi_id\"",
|
|
|
|
|
"\"data_pegawai_id\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesDokterPelaksana,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DOKTER_OPERASI, insertDokterPelaksanaQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query dokter pelaksana %s", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) deleteAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string) error {
|
|
|
|
|
// parsedId := uuid.MustParse(idAntrian)
|
|
|
|
|
// delete telephone
|
|
|
|
|
filters := []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_telepon_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildDeleteQuery(TBL_PASIEN_TELEPHONE, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete phone query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete phone : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete diagnosa
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DIAGNOSA_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete diagnosa query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete diagnosa : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete tindakan
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_tindakan_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_TINDAKAN_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete tindakan query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete tindakan : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete dokter
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "data_pasien_operasi_id", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DOKTER_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete dokter operasi query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete dokter operasi : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) CreateAntrianOperasi(c context.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) {
|
|
|
|
|
db, err := r.db.GetSQLXDB(DB_NAME)
|
|
|
|
|
if err != nil {
|
|
|
|
@@ -327,13 +97,13 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c context.Context, req CreatePa
|
|
|
|
|
req.RencanaOperasiData.KategoriOperasi,
|
|
|
|
|
req.RencanaOperasiData.RencanaOperasi,
|
|
|
|
|
"1",
|
|
|
|
|
1, // nomor
|
|
|
|
|
0, // nomor
|
|
|
|
|
req.RencanaOperasiData.Spesialis,
|
|
|
|
|
req.RencanaOperasiData.SubSpesialis,
|
|
|
|
|
req.RencanaOperasiData.Keterangan,
|
|
|
|
|
req.StatusPasienData.KeteranganStatus,
|
|
|
|
|
req.RencanaOperasiData.Spesialis,
|
|
|
|
|
req.RencanaOperasiData.SubSpesialis,
|
|
|
|
|
0,
|
|
|
|
|
0,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
returningCols := []string{
|
|
|
|
@@ -371,8 +141,8 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c context.Context, q An
|
|
|
|
|
return result, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// result, err = r.oldListAntrian(c, dbconn, q)
|
|
|
|
|
result, err = r.fixingListAntrian(c, dbconn, q)
|
|
|
|
|
// result, err = r.getNumberedListAntrian(c, dbconn, q)
|
|
|
|
|
result, err = r.getNumberedListAntrianV2(c, dbconn, q)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return result, nil
|
|
|
|
|
}
|
|
|
|
@@ -839,157 +609,238 @@ func (r antrianOperasiRepo) DeleteStatusAntrianOperasi(c context.Context, id str
|
|
|
|
|
|
|
|
|
|
// 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"},
|
|
|
|
|
},
|
|
|
|
|
func (r antrianOperasiRepo) insertAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string, req CreatePasienOperasiRequest) error {
|
|
|
|
|
returningCols := []string{
|
|
|
|
|
"id",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wfKategori := queryUtils.WindowFunction{
|
|
|
|
|
Function: "ROW_NUMBER",
|
|
|
|
|
Over: "\"dpo\".\"Kategori_operasi\"",
|
|
|
|
|
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
|
|
|
|
Alias: "no_urut_kategori",
|
|
|
|
|
}
|
|
|
|
|
// INSERT data_telepon_pasien_operasi
|
|
|
|
|
if len(req.FormData.NoTelepon) != 0 {
|
|
|
|
|
var valuesInsertTelepon [][]interface{}
|
|
|
|
|
|
|
|
|
|
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 + "%"},
|
|
|
|
|
for _, telp := range req.FormData.NoTelepon {
|
|
|
|
|
idTelepon := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{idTelepon, telp, idAntrian}
|
|
|
|
|
valuesInsertTelepon = append(valuesInsertTelepon, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
|
|
|
|
insertTeleponQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Nomor_telepon\"",
|
|
|
|
|
"\"FK_pasien_operasi_telepon_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesInsertTelepon,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_PASIEN_TELEPHONE, insertTeleponQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query telepon %s", err)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert telepon")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if q.Status != "" {
|
|
|
|
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
|
|
|
|
// INSERT data_diagnosa_pasien_operasi
|
|
|
|
|
var valuesDiagnosa [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, diagnosa := range req.DiagnosisItem {
|
|
|
|
|
idDiagnosa := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idDiagnosa,
|
|
|
|
|
diagnosa.KodeDiagnosa,
|
|
|
|
|
diagnosa.Diagnosa,
|
|
|
|
|
diagnosa.JenisDiagnosa,
|
|
|
|
|
idAntrian,
|
|
|
|
|
}
|
|
|
|
|
valuesDiagnosa = append(valuesDiagnosa, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// wiring all select filter
|
|
|
|
|
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"})
|
|
|
|
|
insertDiagnosaQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Kode_diagnosa\"",
|
|
|
|
|
"\"Diagnosa\"",
|
|
|
|
|
"\"Jenis_diagnosa\"",
|
|
|
|
|
"\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesDiagnosa,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// query count
|
|
|
|
|
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query)
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_DIAGNOSA_OPERASI, insertDiagnosaQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to execute query count : %s ", err)
|
|
|
|
|
return result, err
|
|
|
|
|
log.Printf("error building query diagnosa %s", err)
|
|
|
|
|
return 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)
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to execute query data : %s", err)
|
|
|
|
|
return result, err
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert diagnosa")
|
|
|
|
|
|
|
|
|
|
// INSERT data_tindakan_pasien_operasi
|
|
|
|
|
var valuesTindakan [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, tindakan := range req.TindakanItems {
|
|
|
|
|
idTindakan := uuid.New().String()
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idTindakan,
|
|
|
|
|
tindakan.KodeTindakan,
|
|
|
|
|
tindakan.Tindakan,
|
|
|
|
|
tindakan.TindakanTambahan,
|
|
|
|
|
idAntrian,
|
|
|
|
|
}
|
|
|
|
|
valuesTindakan = append(valuesTindakan, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
insertTindakanQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"id",
|
|
|
|
|
"\"Kode_tindakan\"",
|
|
|
|
|
"\"Tindakan\"",
|
|
|
|
|
"\"Tindakan_tambahan\"",
|
|
|
|
|
"\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesTindakan,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_TINDAKAN_OPERASI, insertTindakanQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query tindakan %s", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
log.Printf("success insert tindakan")
|
|
|
|
|
|
|
|
|
|
// INSERT data_pasien_operasi_data_pegawai
|
|
|
|
|
if len(req.DokterPelaksanaItems) != 0 {
|
|
|
|
|
var valuesDokterPelaksana [][]interface{}
|
|
|
|
|
|
|
|
|
|
for _, dokter := range req.DokterPelaksanaItems {
|
|
|
|
|
itemValues := []interface{}{
|
|
|
|
|
idAntrian,
|
|
|
|
|
dokter.Id,
|
|
|
|
|
}
|
|
|
|
|
valuesDokterPelaksana = append(valuesDokterPelaksana, itemValues)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
insertDokterPelaksanaQuery := queryUtils.InsertBulkData{
|
|
|
|
|
Columns: []string{
|
|
|
|
|
"\"data_pasien_operasi_id\"",
|
|
|
|
|
"\"data_pegawai_id\"",
|
|
|
|
|
},
|
|
|
|
|
Values: valuesDokterPelaksana,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DOKTER_OPERASI, insertDokterPelaksanaQuery, returningCols...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("error building query dokter pelaksana %s", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Println(err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
|
|
|
|
func (r antrianOperasiRepo) deleteAntrianChildTables(c context.Context, tx *sql.Tx, idAntrian string) error {
|
|
|
|
|
// parsedId := uuid.MustParse(idAntrian)
|
|
|
|
|
// delete telephone
|
|
|
|
|
filters := []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_telepon_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err := r.queryBuilder.BuildDeleteQuery(TBL_PASIEN_TELEPHONE, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete phone query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete phone : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete diagnosa
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DIAGNOSA_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete diagnosa query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete diagnosa : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete tindakan
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "FK_pasien_operasi_tindakan_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_TINDAKAN_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete tindakan query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete tindakan : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// delete dokter
|
|
|
|
|
filters = []queryUtils.FilterGroup{
|
|
|
|
|
{
|
|
|
|
|
Filters: []queryUtils.DynamicFilter{
|
|
|
|
|
{Column: "data_pasien_operasi_id", Operator: queryUtils.OpEqual, Value: idAntrian},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
sql, args, err = r.queryBuilder.BuildDeleteQuery(TBL_DOKTER_OPERASI, filters)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to create delete dokter operasi query : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
_, err = tx.ExecContext(c, sql, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Unable to executing delete dokter operasi : %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// this function is unused, soon should be deleted. Change to getNumberedListAntrianV2
|
|
|
|
|
func (r antrianOperasiRepo) getNumberedListAntrian(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
|
|
|
|
var result ListPasienOperasiPaginate
|
|
|
|
|
|
|
|
|
|
numberedRowsName := "numbered"
|
|
|
|
@@ -1070,9 +921,13 @@ func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB
|
|
|
|
|
{Expression: "kategori"},
|
|
|
|
|
},
|
|
|
|
|
From: numberedRowsName,
|
|
|
|
|
Sort: []queryUtils.SortField{
|
|
|
|
|
{Column: "tanggal_daftar", Order: "ASC"},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// sort condition
|
|
|
|
|
if q.SortBy != "" && q.SortOrder != "" {
|
|
|
|
|
query.Sort = append(query.Sort, queryUtils.SortField{Column: q.SortBy, Order: q.SortOrder})
|
|
|
|
|
} else {
|
|
|
|
|
query.Sort = append(query.Sort, queryUtils.SortField{Column: "tanggal_daftar", Order: "ASC"})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// windows functions
|
|
|
|
@@ -1199,3 +1054,257 @@ func (r antrianOperasiRepo) fixingListAntrian(c context.Context, dbconn *sqlx.DB
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) getNumberedListAntrianV2(c context.Context, dbconn *sqlx.DB, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
|
|
|
|
var result ListPasienOperasiPaginate
|
|
|
|
|
|
|
|
|
|
// Base Query
|
|
|
|
|
baseQuery := queryUtils.DynamicQuery{
|
|
|
|
|
From: TBL_NAME,
|
|
|
|
|
Aliases: "dpo",
|
|
|
|
|
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"},
|
|
|
|
|
{Expression: "dpo.Nomor", Alias: "no_urut_kategori"},
|
|
|
|
|
{Expression: "dpo.Nomor_spesialis", Alias: "no_urut_spesialis"},
|
|
|
|
|
{Expression: "dpo.Nomor_sub_spesialis", Alias: "no_urut_sub_spesialis"},
|
|
|
|
|
},
|
|
|
|
|
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",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set Condition based on request query
|
|
|
|
|
if q.Search != "" {
|
|
|
|
|
// search filter
|
|
|
|
|
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 + "%"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
baseQuery.Filters = append(baseQuery.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var selectFilter []queryUtils.DynamicFilter
|
|
|
|
|
typeIdColumn := ""
|
|
|
|
|
|
|
|
|
|
switch q.Type {
|
|
|
|
|
case "kategori":
|
|
|
|
|
typeIdColumn = "dpo.Kategori_operasi"
|
|
|
|
|
case "spesialis":
|
|
|
|
|
typeIdColumn = "dpo.Spesialis"
|
|
|
|
|
case "sub-spesialis":
|
|
|
|
|
typeIdColumn = "dpo.Sub_spesialis"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if q.TypeID != 0 && q.Type != "all" {
|
|
|
|
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if q.Status != "" {
|
|
|
|
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if q.Id != "" {
|
|
|
|
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.id", Operator: queryUtils.OpEqual, Value: q.Id})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// wiring all select filter
|
|
|
|
|
baseQuery.Filters = append(baseQuery.Filters, queryUtils.FilterGroup{Filters: selectFilter, LogicOp: "AND"})
|
|
|
|
|
|
|
|
|
|
// SET SORTING BASE QUERY
|
|
|
|
|
if q.SortBy != "" && q.SortOrder != "" {
|
|
|
|
|
baseQuery.Sort = append(baseQuery.Sort, queryUtils.SortField{Column: q.SortBy, Order: q.SortOrder})
|
|
|
|
|
} else {
|
|
|
|
|
baseQuery.Sort = append(baseQuery.Sort, queryUtils.SortField{Column: "dpo.Tanggal_daftar", Order: "ASC"})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// execute base query count
|
|
|
|
|
if q.Id == "" {
|
|
|
|
|
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, baseQuery)
|
|
|
|
|
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()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// execute base query data
|
|
|
|
|
queryData := baseQuery
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Map Result Base Query ID, Status = Belum
|
|
|
|
|
statusBelumIds := []string{}
|
|
|
|
|
for _, row := range result.Data {
|
|
|
|
|
if *row.StatusOperasi == "1" {
|
|
|
|
|
statusBelumIds = append(statusBelumIds, row.ID)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// fetch numbered list status = 'Belum'
|
|
|
|
|
numberedListBelum, err := r.getNumberedListBelumByIds(c, dbconn, statusBelumIds)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return result, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// parse numbered list belum into map
|
|
|
|
|
numberedListBelumMap := make(map[string]PasienOperasi)
|
|
|
|
|
for _, row := range numberedListBelum {
|
|
|
|
|
numberedListBelumMap[row.ID] = row
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Map no antrian result (status = belum)
|
|
|
|
|
for idx := range result.Data {
|
|
|
|
|
statusBelum := "1"
|
|
|
|
|
statusTunda := "3"
|
|
|
|
|
statusBatal := "4"
|
|
|
|
|
|
|
|
|
|
currentRow := result.Data[idx]
|
|
|
|
|
if *currentRow.StatusOperasi == statusBelum {
|
|
|
|
|
result.Data[idx].NoUrutKategori = numberedListBelumMap[result.Data[idx].ID].NoUrutKategori
|
|
|
|
|
result.Data[idx].NoUrutSpesialis = numberedListBelumMap[result.Data[idx].ID].NoUrutSpesialis
|
|
|
|
|
result.Data[idx].NoUrutSubSpesialis = numberedListBelumMap[result.Data[idx].ID].NoUrutSubSpesialis
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if *currentRow.StatusOperasi == statusTunda || *currentRow.StatusOperasi == statusBatal {
|
|
|
|
|
result.Data[idx].NoUrutKategori = 0
|
|
|
|
|
result.Data[idx].NoUrutSpesialis = 0
|
|
|
|
|
result.Data[idx].NoUrutSubSpesialis = 0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (r antrianOperasiRepo) getNumberedListBelumByIds(c context.Context, dbconn *sqlx.DB, ids []string) ([]PasienOperasi, error) {
|
|
|
|
|
var result []PasienOperasi
|
|
|
|
|
|
|
|
|
|
if len(ids) == 0 {
|
|
|
|
|
return result, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
query := `
|
|
|
|
|
WITH numberedStatusBelum AS (
|
|
|
|
|
SELECT
|
|
|
|
|
dpo.id AS id,
|
|
|
|
|
dko.id AS id_kategori,
|
|
|
|
|
ds.id AS id_spesialis,
|
|
|
|
|
dss.id AS id_subspesialis,
|
|
|
|
|
dpo."Tanggal_daftar" AS tanggal_daftar,
|
|
|
|
|
dpo."No_KTP" AS no_ktp,
|
|
|
|
|
dpo."No_rekam_medis" AS no_rekam_medis,
|
|
|
|
|
dpo."Nama_pasien" AS nama_pasien,
|
|
|
|
|
dpo."Status_operasi" AS status_operasi,
|
|
|
|
|
dpo."Jenis_kelamin" AS jenis_kelamin,
|
|
|
|
|
ds."Spesialis" AS spesialis,
|
|
|
|
|
dss."Subspesialis" AS subspesialis,
|
|
|
|
|
dko."Kategori" AS kategori,
|
|
|
|
|
|
|
|
|
|
ROW_NUMBER() OVER (
|
|
|
|
|
PARTITION BY dpo."Kategori_operasi"
|
|
|
|
|
ORDER BY dpo."Tanggal_daftar"
|
|
|
|
|
) AS no_urut_kategori,
|
|
|
|
|
|
|
|
|
|
ROW_NUMBER() OVER (
|
|
|
|
|
PARTITION BY dpo."Spesialis"
|
|
|
|
|
ORDER BY dpo."Tanggal_daftar", dpo.date_created, dpo.date_updated
|
|
|
|
|
) AS no_urut_spesialis,
|
|
|
|
|
|
|
|
|
|
ROW_NUMBER() OVER (
|
|
|
|
|
PARTITION BY dpo."Sub_spesialis"
|
|
|
|
|
ORDER BY dpo."Tanggal_daftar", dpo.date_created, dpo.date_updated
|
|
|
|
|
) AS no_urut_sub_spesialis
|
|
|
|
|
|
|
|
|
|
FROM data_pasien_operasi dpo
|
|
|
|
|
LEFT JOIN daftar_spesialis ds ON ds.id = dpo."Spesialis"
|
|
|
|
|
LEFT JOIN daftar_subspesialis dss ON dpo."Sub_spesialis" = dss.id
|
|
|
|
|
LEFT JOIN daftar_kategori_operasi dko ON dpo."Kategori_operasi" = dko.id
|
|
|
|
|
WHERE dpo."Status_operasi" = ?
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
SELECT
|
|
|
|
|
id,
|
|
|
|
|
tanggal_daftar,
|
|
|
|
|
no_ktp,
|
|
|
|
|
no_rekam_medis,
|
|
|
|
|
nama_pasien,
|
|
|
|
|
status_operasi,
|
|
|
|
|
jenis_kelamin,
|
|
|
|
|
spesialis,
|
|
|
|
|
subspesialis,
|
|
|
|
|
kategori,
|
|
|
|
|
no_urut_kategori,
|
|
|
|
|
no_urut_spesialis,
|
|
|
|
|
no_urut_sub_spesialis
|
|
|
|
|
FROM numberedStatusBelum
|
|
|
|
|
WHERE id IN (?)
|
|
|
|
|
`
|
|
|
|
|
query, args, err := sqlx.In(query, "1", ids)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
query = dbconn.Rebind(query)
|
|
|
|
|
|
|
|
|
|
err = dbconn.SelectContext(c, &result, query, args...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result, nil
|
|
|
|
|
}
|