untested : edit antrian operasi + fixing nomor urut
This commit is contained in:
@@ -17,11 +17,15 @@ import (
|
|||||||
const DB_NAME = "db_antrian"
|
const DB_NAME = "db_antrian"
|
||||||
const TBL_NAME = "data_pasien_operasi"
|
const TBL_NAME = "data_pasien_operasi"
|
||||||
const TBL_DIAGNOSA_OPERASI = "data_diagnosa_pasien_operasi"
|
const TBL_DIAGNOSA_OPERASI = "data_diagnosa_pasien_operasi"
|
||||||
|
const TBL_PASIEN_TELEPHONE = "data_telepon_pasien_operasi"
|
||||||
|
const TBL_TINDAKAN_OPERASI = "data_tindakan_pasien_operasi"
|
||||||
|
const TBL_DOKTER_OPERASI = "data_pasien_operasi_data_pegawai_2"
|
||||||
|
|
||||||
type IAntrianOperasiRepository interface {
|
type IAntrianOperasiRepository interface {
|
||||||
CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
||||||
SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error)
|
SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error)
|
||||||
GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error)
|
GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error)
|
||||||
|
UpdateAntrianOperasi(c *gin.Context, id string, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type antrianOperasiRepo struct {
|
type antrianOperasiRepo struct {
|
||||||
@@ -42,6 +46,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_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",
|
"\"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",
|
||||||
|
"no_urut_spesialis",
|
||||||
}).
|
}).
|
||||||
SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI})
|
SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI})
|
||||||
queryBuilder.SetSecurityOptions(false, 100)
|
queryBuilder.SetSecurityOptions(false, 100)
|
||||||
@@ -75,7 +80,7 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx,
|
|||||||
Values: valuesInsertTelepon,
|
Values: valuesInsertTelepon,
|
||||||
}
|
}
|
||||||
|
|
||||||
sql, args, err := r.queryBuilder.BuildBulkInsertQuery("data_telepon_pasien_operasi", insertTeleponQuery, returningCols...)
|
sql, args, err := r.queryBuilder.BuildBulkInsertQuery(TBL_PASIEN_TELEPHONE, insertTeleponQuery, returningCols...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error building query telepon %s", err)
|
log.Printf("error building query telepon %s", err)
|
||||||
|
|
||||||
@@ -114,7 +119,7 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx,
|
|||||||
Values: valuesDiagnosa,
|
Values: valuesDiagnosa,
|
||||||
}
|
}
|
||||||
|
|
||||||
sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_diagnosa_pasien_operasi", insertDiagnosaQuery, returningCols...)
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DIAGNOSA_OPERASI, insertDiagnosaQuery, returningCols...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error building query diagnosa %s", err)
|
log.Printf("error building query diagnosa %s", err)
|
||||||
return err
|
return err
|
||||||
@@ -152,7 +157,7 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx,
|
|||||||
Values: valuesTindakan,
|
Values: valuesTindakan,
|
||||||
}
|
}
|
||||||
|
|
||||||
sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_tindakan_pasien_operasi", insertTindakanQuery, returningCols...)
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_TINDAKAN_OPERASI, insertTindakanQuery, returningCols...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error building query tindakan %s", err)
|
log.Printf("error building query tindakan %s", err)
|
||||||
return err
|
return err
|
||||||
@@ -183,7 +188,7 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx,
|
|||||||
Values: valuesDokterPelaksana,
|
Values: valuesDokterPelaksana,
|
||||||
}
|
}
|
||||||
|
|
||||||
sql, args, err = r.queryBuilder.BuildBulkInsertQuery("data_pasien_operasi_data_pegawai_2", insertDokterPelaksanaQuery, returningCols...)
|
sql, args, err = r.queryBuilder.BuildBulkInsertQuery(TBL_DOKTER_OPERASI, insertDokterPelaksanaQuery, returningCols...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error building query dokter pelaksana %s", err)
|
log.Printf("error building query dokter pelaksana %s", err)
|
||||||
return err
|
return err
|
||||||
@@ -197,6 +202,86 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, idAntrian string) error {
|
||||||
|
// 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 *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) {
|
func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) {
|
||||||
db, err := r.db.GetSQLXDB(DB_NAME)
|
db, err := r.db.GetSQLXDB(DB_NAME)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -300,7 +385,9 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
{Expression: "dko.Kategori", Alias: "kategori"},
|
{Expression: "dko.Kategori", Alias: "kategori"},
|
||||||
},
|
},
|
||||||
Sort: []queryUtils.SortField{
|
Sort: []queryUtils.SortField{
|
||||||
{Column: "dpo.Tanggal_daftar", Order: "ASC"}},
|
{Column: "dpo.Tanggal_daftar", Order: "ASC"},
|
||||||
|
{Column: "no_urut_spesialis", Order: "ASC"},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
wfKategori := queryUtils.WindowFunction{
|
wfKategori := queryUtils.WindowFunction{
|
||||||
@@ -313,13 +400,13 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
wfSpesialis := queryUtils.WindowFunction{
|
wfSpesialis := queryUtils.WindowFunction{
|
||||||
Function: "ROW_NUMBER",
|
Function: "ROW_NUMBER",
|
||||||
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\"",
|
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\"",
|
||||||
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||||
Alias: "no_urut_spesialis",
|
Alias: "no_urut_spesialis",
|
||||||
}
|
}
|
||||||
wfSubSpesialis := queryUtils.WindowFunction{
|
wfSubSpesialis := queryUtils.WindowFunction{
|
||||||
Function: "ROW_NUMBER",
|
Function: "ROW_NUMBER",
|
||||||
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\", \"dpo\".\"Sub_spesialis\"",
|
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\", \"dpo\".\"Sub_spesialis\"",
|
||||||
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
|
OrderBy: "\"dpo\".\"Tanggal_daftar\", \"dpo\".\"date_created\", \"dpo\".\"date_updated\"",
|
||||||
Alias: "no_urut_sub_spesialis",
|
Alias: "no_urut_sub_spesialis",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,7 +648,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (De
|
|||||||
|
|
||||||
// query diagnosa
|
// query diagnosa
|
||||||
queryDiagnosa := queryUtils.DynamicQuery{
|
queryDiagnosa := queryUtils.DynamicQuery{
|
||||||
From: "data_diagnosa_pasien_operasi",
|
From: TBL_DIAGNOSA_OPERASI,
|
||||||
Fields: []queryUtils.SelectField{
|
Fields: []queryUtils.SelectField{
|
||||||
{Expression: "id"},
|
{Expression: "id"},
|
||||||
{Expression: "Kode_diagnosa"},
|
{Expression: "Kode_diagnosa"},
|
||||||
@@ -585,7 +672,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (De
|
|||||||
|
|
||||||
// query tindakan
|
// query tindakan
|
||||||
queryTindakan := queryUtils.DynamicQuery{
|
queryTindakan := queryUtils.DynamicQuery{
|
||||||
From: "data_tindakan_pasien_operasi",
|
From: TBL_TINDAKAN_OPERASI,
|
||||||
Fields: []queryUtils.SelectField{
|
Fields: []queryUtils.SelectField{
|
||||||
{Expression: "id"},
|
{Expression: "id"},
|
||||||
{Expression: "Kode_tindakan"},
|
{Expression: "Kode_tindakan"},
|
||||||
@@ -609,7 +696,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (De
|
|||||||
|
|
||||||
// query telepon
|
// query telepon
|
||||||
queryTelepon := queryUtils.DynamicQuery{
|
queryTelepon := queryUtils.DynamicQuery{
|
||||||
From: "data_telepon_pasien_operasi",
|
From: TBL_PASIEN_TELEPHONE,
|
||||||
Fields: []queryUtils.SelectField{
|
Fields: []queryUtils.SelectField{
|
||||||
{Expression: "id"},
|
{Expression: "id"},
|
||||||
{Expression: "Nomor_telepon"},
|
{Expression: "Nomor_telepon"},
|
||||||
@@ -631,7 +718,7 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (De
|
|||||||
|
|
||||||
// query dokter
|
// query dokter
|
||||||
queryDokter := queryUtils.DynamicQuery{
|
queryDokter := queryUtils.DynamicQuery{
|
||||||
From: "data_pasien_operasi_data_pegawai_2",
|
From: TBL_DOKTER_OPERASI,
|
||||||
Aliases: "dpodp",
|
Aliases: "dpodp",
|
||||||
Fields: []queryUtils.SelectField{
|
Fields: []queryUtils.SelectField{
|
||||||
{Expression: "dpodp.id"},
|
{Expression: "dpodp.id"},
|
||||||
@@ -683,3 +770,72 @@ func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (De
|
|||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r antrianOperasiRepo) UpdateAntrianOperasi(c *gin.Context, id string, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) {
|
||||||
|
// Update main table
|
||||||
|
updateMainQuery := queryUtils.UpdateData{
|
||||||
|
Columns: []string{
|
||||||
|
"date_updated", "No_rekam_medis", "No_ktp", "Nama_pasien", "Jenis_kelamin",
|
||||||
|
"Tanggal_lahir", "Umur", "Alamat", "Kategori_operasi",
|
||||||
|
"Rencana_operasi", "Keterangan", "Tanggal_selesai_operasi",
|
||||||
|
"Status_operasi", "Spesialis", "Sub_spesialis",
|
||||||
|
},
|
||||||
|
Values: []interface{}{
|
||||||
|
time.Now(), req.FormData.NoRekamMedis, req.FormData.NoKtp, req.FormData.NamaPasien, req.FormData.JenisKelamin,
|
||||||
|
req.FormData.TglLahir, req.FormData.Umur, req.FormData.Alamat, req.RencanaOperasiData.KategoriOperasi,
|
||||||
|
req.RencanaOperasiData.RencanaOperasi, req.RencanaOperasiData.Keterangan, req.StatusPasienData.TglSelesai,
|
||||||
|
req.StatusPasienData.StatusOperasi, req.RencanaOperasiData.Spesialis, req.RencanaOperasiData.SubSpesialis,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
filters := []queryUtils.FilterGroup{
|
||||||
|
{
|
||||||
|
Filters: []queryUtils.DynamicFilter{
|
||||||
|
{Column: "id", Operator: queryUtils.OpEqual, Value: id},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
sqlUpdateMain, args, err := r.queryBuilder.BuildUpdateQuery(TBL_NAME, updateMainQuery, filters)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error build update query : %v", err)
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
db, err := r.db.GetSQLXDB(DB_NAME)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Erorr initiating db : %v", err)
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// START TRANSACTION
|
||||||
|
tx, err := db.BeginTx(c, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error initiating update transaction : %v", err)
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = tx.ExecContext(c, sqlUpdateMain, args...)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error executing main update query : %v", err)
|
||||||
|
tx.Rollback()
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete all child tables
|
||||||
|
err = r.deleteAntrianChildTables(c, tx, id)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error deleting child tables, rollback.. : %v", err)
|
||||||
|
tx.Rollback()
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-inserting updated child tables
|
||||||
|
err = r.insertAntrianChildTables(c, tx, id, req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error re-inserting child tables, rollback.. : %v", err)
|
||||||
|
tx.Rollback()
|
||||||
|
return req, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return req, nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user